This commit was manufactured by cvs2svn to create tag 'temp'.

git-svn-id: https://svn.apache.org/repos/asf/ant/core/tags/temp@272671 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/docs/ant15_todo.html b/docs/ant15_todo.html
deleted file mode 100644
index 5a1c4de..0000000
--- a/docs/ant15_todo.html
+++ /dev/null
@@ -1,702 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-
-<!-- Content Stylesheet for Site -->
-
-        
-<!-- start the processing -->
-    <html>
-    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
-    <head>
-      <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
-  
-                      <meta name="author" value="Erik Hatcher">
-  <meta name="email" value="ehatcher@apache.org">
-        
-      <title>Apache Ant - Ant 1.5 Release To-Do List</title>
-    </head>
-  
-    <body bgcolor="#ffffff" text="#000000" link="#525D76">    
-      <table border="0" width="100%" cellspacing="0">
-        <!-- TOP IMAGE -->
-        <tr>
-                <td align="left">
-    <a href="http://jakarta.apache.org"><img src="images/jakarta-logo.gif" border="0"/></a>
-    </td>
-    <td align="center">
-    <a href="http://www.sdmagazine.com"><img src="images/sdm_productivity_award.gif" border="0" height="75" width="135"/></a>
-    </td>
-    <td align="center">
-    <a href="http://www.javaworld.com"><img src="images/jw_ec_logo_winner2002.gif" border="0" height="85" width="230"/></a>
-    </td>
-    <td align="right">
-              <a href="http://jakarta.apache.org/ant/"><img src="./images/ant_logo_large.gif" alt="Apache Ant" border="0"/></a>
-        </td>
-          </tr>
-      </table>
-      <table border="0" width="100%" cellspacing="4">
-        <tr><td colspan="2">
-          <hr noshade="" size="1"/>
-        </td></tr>
-        
-        <tr>
-          <!-- LEFT SIDE NAVIGATION -->
-          <td valign="top" nowrap="true">
-                <p><strong>Apache Ant</strong></p>
-    <ul>
-          <li>      <a href="./index.html">Front Page</a>
-  </li>
-          <li>      <a href="./antnews.html">News</a>
-  </li>
-          <li>      <a href="./manual/index.html">Documentation</a>
-  </li>
-          <li>      <a href="./projects.html">Related Projects</a>
-  </li>
-          <li>      <a href="./external.html">External Tools and Tasks</a>
-  </li>
-          <li>      <a href="./resources.html">Resources</a>
-  </li>
-          <li>      <a href="./faq.html">Ant FAQ</a>
-  </li>
-          <li>      <a href="./problems.html">Having Problems?</a>
-  </li>
-        </ul>
-      <p><strong>Download</strong></p>
-    <ul>
-          <li>      <a href="http://jakarta.apache.org/site/binindex.html">Binaries</a>
-  </li>
-          <li>      <a href="http://jakarta.apache.org/site/sourceindex.html">Source Code</a>
-  </li>
-        </ul>
-      <p><strong>Jakarta</strong></p>
-    <ul>
-          <li>      <a href="http://jakarta.apache.org/site/news.html">News & Status</a>
-  </li>
-          <li>      <a href="http://jakarta.apache.org/site/mission.html">Mission</a>
-  </li>
-          <li>      <a href="http://jakarta.apache.org/site/guidelines.html">Guidelines Notes</a>
-  </li>
-          <li>      <a href="http://jakarta.apache.org/site/faqs.html">FAQs</a>
-  </li>
-        </ul>
-      <p><strong>Get Involved</strong></p>
-    <ul>
-          <li>      <a href="http://jakarta.apache.org/site/getinvolved.html">Overview</a>
-  </li>
-          <li>      <a href="http://jakarta.apache.org/site/cvsindex.html">CVS Repositories</a>
-  </li>
-          <li>      <a href="http://jakarta.apache.org/site/mail.html">Mailing Lists</a>
-  </li>
-          <li>      <a href="http://jakarta.apache.org/site/library.html">Reference Library</a>
-  </li>
-          <li>      <a href="http://nagoya.apache.org/bugzilla/enter_bug.cgi?product=Ant">Bug Database</a>
-  </li>
-          <li>      <a href="http://nagoya.apache.org/bugzilla/enter_bug.cgi?product=Ant&bug_severity=Enhancement">Enhancement Requests</a>
-  </li>
-        </ul>
-            </td>
-          <td align="left" valign="top">
-        <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#525D76">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Ant 1.5 Release To-Do List"><strong>Ant 1.5 Release To-Do List</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                          <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Open"><strong>Open</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                          <table>
-              <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Item
-        </font>
-  </td>
-                      <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Details
-        </font>
-  </td>
-                      <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Assigned
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Bugzilla bugs under 30
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          or at least address most of them in some way
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          All Committers
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Document Path datatype
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          It's documented, but more hidden than the other types
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Erik
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Novell NetWare support
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          &nbsp;
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Jeff Tulley
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          XMLCatalog more integrated
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Several tasks could still use XMLCatalog integration
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          &nbsp;
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Make default excludes customizable
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          With the setting of an ant.default.excludes property?
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Erik
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Fully functional on Java 1.4
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Fix outstanding java1.4 defects, maybe add an
-            assertions datatype for java and other tasks (junit?)
-            which lets people turn on asserts.
-            
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Steve + any other help he can get
-        </font>
-  </td>
-      </tr>
-        </table>
-                    </blockquote>
-    </td></tr>
-  </table>
-                                  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Done"><strong>Done</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                          <table>
-              <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Item
-        </font>
-  </td>
-                      <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Details
-        </font>
-  </td>
-                      <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Assigned
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Selectors
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          &nbsp;
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Bruce
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Extension utilities
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Port across task that prints out details of extensions for
-            a certain library/jar, or all jars in a path. Port across task
-            that generates a manifest (including dependencies and extension
-            specification) based on a set of jars in path. Port across task
-            that checks that the list of pre-req extensions are present in
-            path.
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Peter
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          XmlLogger implements BuildLogger
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Its currently a BuildListener, lets remove the confusion
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Erik
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Dotnet library tweaks
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          update to release, add uptodateness, add a web service
-            import (for Axis interop testing)
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Steve, in a really long meeting
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          compiler attribute for rmic
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          &nbsp;
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Stefan
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          PGP signing task if possible
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Not done, but deemed impossible - at least in the 1.5
-              time frame.
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Stefan
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          JUnit's System.err/.out handling
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          showoutput attribute has been added - doesn't work in
-              some cases yet (same reason as bug PR 7980)
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Stefan
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Base compiler command line switches on the selected
-            compiler, not the current JDK
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          &nbsp;
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Stefan
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          &lt;input&gt;
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          &nbsp;
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Stefan
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Make javadoc a real directory based task
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          &nbsp;
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Stefan
-        </font>
-  </td>
-      </tr>
-        </table>
-                    </blockquote>
-    </td></tr>
-  </table>
-                                  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Bug Reports Short-Cuts"><strong>Bug Reports Short-Cuts</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>Note: You can sort the report results by clicking on the column-headings.</p>
-                                  <table>
-              <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          New|Assigned|Reopened Bug Reports:
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="http://nagoya.apache.org/bugzilla/buglist.cgi?bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED&amp;email1=&amp;emailtype1=substring&amp;emailassigned_to1=1&amp;email2=&amp;emailtype2=substring&amp;emailreporter2=1&amp;bugidtype=include&amp;bug_id=&amp;changedin=&amp;votes=&amp;chfieldfrom=&amp;chfieldto=Now&amp;chfieldvalue=&amp;product=Ant&amp;component=Build+Process&amp;component=Core&amp;component=Core+tasks&amp;component=Documentation&amp;component=Optional+Tasks&amp;component=Other&amp;component=Wrapper+scripts&amp;short_desc=&amp;short_desc_type=allwordssubstr&amp;long_desc=&amp;long_desc_type=allwordssubstr&amp;bug_file_loc=&amp;bug_file_loc_type=allwordssubstr&amp;keywords=&amp;keywords_type=anywords&amp;field0-0-0=noop&amp;type0-0-0=noop&amp;value0-0-0=&amp;cmdtype=doit">All</a>
-          
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="http://nagoya.apache.org/bugzilla/buglist.cgi?bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED&amp;bug_severity=Blocker&amp;bug_severity=Critical&amp;bug_severity=Major&amp;bug_severity=Normal&amp;bug_severity=Minor&amp;email1=&amp;emailtype1=substring&amp;emailassigned_to1=1&amp;email2=&amp;emailtype2=substring&amp;emailreporter2=1&amp;bugidtype=include&amp;bug_id=&amp;changedin=&amp;votes=&amp;chfieldfrom=&amp;chfieldto=Now&amp;chfieldvalue=&amp;product=Ant&amp;component=Build+Process&amp;component=Core&amp;component=Core+tasks&amp;component=Documentation&amp;component=Optional+Tasks&amp;component=Other&amp;component=Wrapper+scripts&amp;short_desc=&amp;short_desc_type=allwordssubstr&amp;long_desc=&amp;long_desc_type=allwordssubstr&amp;bug_file_loc=&amp;bug_file_loc_type=allwordssubstr&amp;keywords=&amp;keywords_type=anywords&amp;field0-0-0=noop&amp;type0-0-0=noop&amp;value0-0-0=&amp;cmdtype=doit">- minus Enhancements</a>
-          
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          New|Assigned|Reopened Bug Reports by Component:
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="http://nagoya.apache.org/bugzilla/buglist.cgi?bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED&amp;email1=&amp;emailtype1=substring&amp;emailassigned_to1=1&amp;email2=&amp;emailtype2=substring&amp;emailreporter2=1&amp;bugidtype=include&amp;bug_id=&amp;changedin=&amp;votes=&amp;chfieldfrom=&amp;chfieldto=Now&amp;chfieldvalue=&amp;product=Ant&amp;component=Build+Process&amp;short_desc=&amp;short_desc_type=allwordssubstr&amp;long_desc=&amp;long_desc_type=allwordssubstr&amp;bug_file_loc=&amp;bug_file_loc_type=allwordssubstr&amp;keywords=&amp;keywords_type=anywords&amp;field0-0-0=noop&amp;type0-0-0=noop&amp;value0-0-0=&amp;cmdtype=doit">Build Process</a>
-          
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="http://nagoya.apache.org/bugzilla/buglist.cgi?bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED&amp;bug_severity=Blocker&amp;bug_severity=Critical&amp;bug_severity=Major&amp;bug_severity=Normal&amp;bug_severity=Minor&amp;email1=&amp;emailtype1=substring&amp;emailassigned_to1=1&amp;email2=&amp;emailtype2=substring&amp;emailreporter2=1&amp;bugidtype=include&amp;bug_id=&amp;changedin=&amp;votes=&amp;chfieldfrom=&amp;chfieldto=Now&amp;chfieldvalue=&amp;product=Ant&amp;component=Build+Process&amp;short_desc=&amp;short_desc_type=allwordssubstr&amp;long_desc=&amp;long_desc_type=allwordssubstr&amp;bug_file_loc=&amp;bug_file_loc_type=allwordssubstr&amp;keywords=&amp;keywords_type=anywords&amp;field0-0-0=noop&amp;type0-0-0=noop&amp;value0-0-0=&amp;cmdtype=doit">- minus Enhancements</a>
-          
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="http://nagoya.apache.org/bugzilla/buglist.cgi?bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED&amp;email1=&amp;emailtype1=substring&amp;emailassigned_to1=1&amp;email2=&amp;emailtype2=substring&amp;emailreporter2=1&amp;bugidtype=include&amp;bug_id=&amp;changedin=&amp;votes=&amp;chfieldfrom=&amp;chfieldto=Now&amp;chfieldvalue=&amp;product=Ant&amp;component=Core&amp;short_desc=&amp;short_desc_type=allwordssubstr&amp;long_desc=&amp;long_desc_type=allwordssubstr&amp;bug_file_loc=&amp;bug_file_loc_type=allwordssubstr&amp;keywords=&amp;keywords_type=anywords&amp;field0-0-0=noop&amp;type0-0-0=noop&amp;value0-0-0=&amp;cmdtype=doit">Core</a>
-          
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="http://nagoya.apache.org/bugzilla/buglist.cgi?bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED&amp;bug_severity=Blocker&amp;bug_severity=Critical&amp;bug_severity=Major&amp;bug_severity=Normal&amp;bug_severity=Minor&amp;email1=&amp;emailtype1=substring&amp;emailassigned_to1=1&amp;email2=&amp;emailtype2=substring&amp;emailreporter2=1&amp;bugidtype=include&amp;bug_id=&amp;changedin=&amp;votes=&amp;chfieldfrom=&amp;chfieldto=Now&amp;chfieldvalue=&amp;product=Ant&amp;component=Core&amp;short_desc=&amp;short_desc_type=allwordssubstr&amp;long_desc=&amp;long_desc_type=allwordssubstr&amp;bug_file_loc=&amp;bug_file_loc_type=allwordssubstr&amp;keywords=&amp;keywords_type=anywords&amp;field0-0-0=noop&amp;type0-0-0=noop&amp;value0-0-0=&amp;cmdtype=doit">- minus Enhancements</a>
-          
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="http://nagoya.apache.org/bugzilla/buglist.cgi?bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED&amp;email1=&amp;emailtype1=substring&amp;emailassigned_to1=1&amp;email2=&amp;emailtype2=substring&amp;emailreporter2=1&amp;bugidtype=include&amp;bug_id=&amp;changedin=&amp;votes=&amp;chfieldfrom=&amp;chfieldto=Now&amp;chfieldvalue=&amp;product=Ant&amp;component=Core+Tasks&amp;short_desc=&amp;short_desc_type=allwordssubstr&amp;long_desc=&amp;long_desc_type=allwordssubstr&amp;bug_file_loc=&amp;bug_file_loc_type=allwordssubstr&amp;keywords=&amp;keywords_type=anywords&amp;field0-0-0=noop&amp;type0-0-0=noop&amp;value0-0-0=&amp;cmdtype=doit">Core Tasks</a>
-          
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="http://nagoya.apache.org/bugzilla/buglist.cgi?bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED&amp;bug_severity=Blocker&amp;bug_severity=Critical&amp;bug_severity=Major&amp;bug_severity=Normal&amp;bug_severity=Minor&amp;email1=&amp;emailtype1=substring&amp;emailassigned_to1=1&amp;email2=&amp;emailtype2=substring&amp;emailreporter2=1&amp;bugidtype=include&amp;bug_id=&amp;changedin=&amp;votes=&amp;chfieldfrom=&amp;chfieldto=Now&amp;chfieldvalue=&amp;product=Ant&amp;component=Core+Tasks&amp;short_desc=&amp;short_desc_type=allwordssubstr&amp;long_desc=&amp;long_desc_type=allwordssubstr&amp;bug_file_loc=&amp;bug_file_loc_type=allwordssubstr&amp;keywords=&amp;keywords_type=anywords&amp;field0-0-0=noop&amp;type0-0-0=noop&amp;value0-0-0=&amp;cmdtype=doit">- minus Enhancements</a>
-          
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="http://nagoya.apache.org/bugzilla/buglist.cgi?bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED&amp;email1=&amp;emailtype1=substring&amp;emailassigned_to1=1&amp;email2=&amp;emailtype2=substring&amp;emailreporter2=1&amp;bugidtype=include&amp;bug_id=&amp;changedin=&amp;votes=&amp;chfieldfrom=&amp;chfieldto=Now&amp;chfieldvalue=&amp;product=Ant&amp;component=Documentation&amp;short_desc=&amp;short_desc_type=allwordssubstr&amp;long_desc=&amp;long_desc_type=allwordssubstr&amp;bug_file_loc=&amp;bug_file_loc_type=allwordssubstr&amp;keywords=&amp;keywords_type=anywords&amp;field0-0-0=noop&amp;type0-0-0=noop&amp;value0-0-0=&amp;cmdtype=doit">Documentation</a>
-          
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="http://nagoya.apache.org/bugzilla/buglist.cgi?bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED&amp;bug_severity=Blocker&amp;bug_severity=Critical&amp;bug_severity=Major&amp;bug_severity=Normal&amp;bug_severity=Minor&amp;email1=&amp;emailtype1=substring&amp;emailassigned_to1=1&amp;email2=&amp;emailtype2=substring&amp;emailreporter2=1&amp;bugidtype=include&amp;bug_id=&amp;changedin=&amp;votes=&amp;chfieldfrom=&amp;chfieldto=Now&amp;chfieldvalue=&amp;product=Ant&amp;component=Documentation&amp;short_desc=&amp;short_desc_type=allwordssubstr&amp;long_desc=&amp;long_desc_type=allwordssubstr&amp;bug_file_loc=&amp;bug_file_loc_type=allwordssubstr&amp;keywords=&amp;keywords_type=anywords&amp;field0-0-0=noop&amp;type0-0-0=noop&amp;value0-0-0=&amp;cmdtype=doit">- minus Enhancements</a>
-          
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="http://nagoya.apache.org/bugzilla/buglist.cgi?bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED&amp;email1=&amp;emailtype1=substring&amp;emailassigned_to1=1&amp;email2=&amp;emailtype2=substring&amp;emailreporter2=1&amp;bugidtype=include&amp;bug_id=&amp;changedin=&amp;votes=&amp;chfieldfrom=&amp;chfieldto=Now&amp;chfieldvalue=&amp;product=Ant&amp;component=Optional+Tasks&amp;short_desc=&amp;short_desc_type=allwordssubstr&amp;long_desc=&amp;long_desc_type=allwordssubstr&amp;bug_file_loc=&amp;bug_file_loc_type=allwordssubstr&amp;keywords=&amp;keywords_type=anywords&amp;field0-0-0=noop&amp;type0-0-0=noop&amp;value0-0-0=&amp;cmdtype=doit">Optional Tasks</a>
-          
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="http://nagoya.apache.org/bugzilla/buglist.cgi?bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED&amp;bug_severity=Blocker&amp;bug_severity=Critical&amp;bug_severity=Major&amp;bug_severity=Normal&amp;bug_severity=Minor&amp;email1=&amp;emailtype1=substring&amp;emailassigned_to1=1&amp;email2=&amp;emailtype2=substring&amp;emailreporter2=1&amp;bugidtype=include&amp;bug_id=&amp;changedin=&amp;votes=&amp;chfieldfrom=&amp;chfieldto=Now&amp;chfieldvalue=&amp;product=Ant&amp;component=Optional+Tasks&amp;short_desc=&amp;short_desc_type=allwordssubstr&amp;long_desc=&amp;long_desc_type=allwordssubstr&amp;bug_file_loc=&amp;bug_file_loc_type=allwordssubstr&amp;keywords=&amp;keywords_type=anywords&amp;field0-0-0=noop&amp;type0-0-0=noop&amp;value0-0-0=&amp;cmdtype=doit">- minus Enhancements</a>
-          
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="http://nagoya.apache.org/bugzilla/buglist.cgi?bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED&amp;email1=&amp;emailtype1=substring&amp;emailassigned_to1=1&amp;email2=&amp;emailtype2=substring&amp;emailreporter2=1&amp;bugidtype=include&amp;bug_id=&amp;changedin=&amp;votes=&amp;chfieldfrom=&amp;chfieldto=Now&amp;chfieldvalue=&amp;product=Ant&amp;component=Other&amp;short_desc=&amp;short_desc_type=allwordssubstr&amp;long_desc=&amp;long_desc_type=allwordssubstr&amp;bug_file_loc=&amp;bug_file_loc_type=allwordssubstr&amp;keywords=&amp;keywords_type=anywords&amp;field0-0-0=noop&amp;type0-0-0=noop&amp;value0-0-0=&amp;cmdtype=doit">Other</a>
-          
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="http://nagoya.apache.org/bugzilla/buglist.cgi?bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED&amp;bug_severity=Blocker&amp;bug_severity=Critical&amp;bug_severity=Major&amp;bug_severity=Normal&amp;bug_severity=Minor&amp;email1=&amp;emailtype1=substring&amp;emailassigned_to1=1&amp;email2=&amp;emailtype2=substring&amp;emailreporter2=1&amp;bugidtype=include&amp;bug_id=&amp;changedin=&amp;votes=&amp;chfieldfrom=&amp;chfieldto=Now&amp;chfieldvalue=&amp;product=Ant&amp;component=Other&amp;short_desc=&amp;short_desc_type=allwordssubstr&amp;long_desc=&amp;long_desc_type=allwordssubstr&amp;bug_file_loc=&amp;bug_file_loc_type=allwordssubstr&amp;keywords=&amp;keywords_type=anywords&amp;field0-0-0=noop&amp;type0-0-0=noop&amp;value0-0-0=&amp;cmdtype=doit">- minus Enhancements</a>
-          
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="http://nagoya.apache.org/bugzilla/buglist.cgi?bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED&amp;email1=&amp;emailtype1=substring&amp;emailassigned_to1=1&amp;email2=&amp;emailtype2=substring&amp;emailreporter2=1&amp;bugidtype=include&amp;bug_id=&amp;changedin=&amp;votes=&amp;chfieldfrom=&amp;chfieldto=Now&amp;chfieldvalue=&amp;product=Ant&amp;component=Wrapper+Scripts&amp;short_desc=&amp;short_desc_type=allwordssubstr&amp;long_desc=&amp;long_desc_type=allwordssubstr&amp;bug_file_loc=&amp;bug_file_loc_type=allwordssubstr&amp;keywords=&amp;keywords_type=anywords&amp;field0-0-0=noop&amp;type0-0-0=noop&amp;value0-0-0=&amp;cmdtype=doit">Wrapper Scripts</a>
-          
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="http://nagoya.apache.org/bugzilla/buglist.cgi?bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED&amp;bug_severity=Blocker&amp;bug_severity=Critical&amp;bug_severity=Major&amp;bug_severity=Normal&amp;bug_severity=Minor&amp;email1=&amp;emailtype1=substring&amp;emailassigned_to1=1&amp;email2=&amp;emailtype2=substring&amp;emailreporter2=1&amp;bugidtype=include&amp;bug_id=&amp;changedin=&amp;votes=&amp;chfieldfrom=&amp;chfieldto=Now&amp;chfieldvalue=&amp;product=Ant&amp;component=Wrapper+Scripts&amp;short_desc=&amp;short_desc_type=allwordssubstr&amp;long_desc=&amp;long_desc_type=allwordssubstr&amp;bug_file_loc=&amp;bug_file_loc_type=allwordssubstr&amp;keywords=&amp;keywords_type=anywords&amp;field0-0-0=noop&amp;type0-0-0=noop&amp;value0-0-0=&amp;cmdtype=doit">- minus Enhancements</a>
-          
-        </font>
-  </td>
-      </tr>
-                  <tr>
-  </tr>
-        </table>
-                    </blockquote>
-    </td></tr>
-  </table>
-                    </blockquote>
-    </td></tr>
-  </table>
-              </td>
-        </tr>
-
-        <!-- FOOTER -->
-        <tr><td colspan="2">
-          <hr noshade="" size="1"/>
-        </td></tr>
-        <tr><td colspan="2">
-          <div align="center"><font color="#525D76" size="-1"><em>
-          Copyright &#169; 2000-2002, Apache Software Foundation
-          </em></font></div>
-        </td></tr>
-      </table>
-    </body>
-  </html>
-<!-- end the processing -->
-
-
-
-
diff --git a/docs/ant2/FunctionalRequirements.html b/docs/ant2/FunctionalRequirements.html
deleted file mode 100644
index 46ba380..0000000
--- a/docs/ant2/FunctionalRequirements.html
+++ /dev/null
@@ -1,54 +0,0 @@
-<html>
-<head>
-  <meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
-  <title>Ant Functional Requirements Document</title>
-</head>
-<body>
-<h2>Ant Functional Requirements</h2>
-<h3>Roles</h3>
-<p><b>User: </b>runs Ant with a complete build specification and/or
-writes Ant build specifications.</p>
-<p><b>Task Developer: </b>writes/modifies Ant tasks.</p>
-<p><b>Extensions Developer: </b>develops extensions like a GUI, IDE plugin,
- (scripting extension?)</p>
-<p><b>Core Developer: </b>works on the Ant core</p>
-<h3>Requirements from the Ant User perspective</h3>
-<p>It should be easy to write a build file for small Java programs. It should
- be possible to write a build file set for large Java systems. Maintenance
- of such a set should be easy (e.g. no duplication of information).</p>
-<p>Every build process contains dependencies (e.g. item A needs B to be available
- before its own build can start). It should be possible to specify these
- dependencies in a declarative way.</p>
-<p>Suppose a working build specification for system A is available. It should
- be possible for system B to declare dependencies to <i>(modules of?)</i> system
- A without touching the build specification of A. Ant should be able to handle
- dependencies between modules which form a DAG.</p>
-<p>It should be possible to modify details of the actual build (e.g. classpath,
- used compiler) without the need to change the build specification. This
- feature is needed when starting Ant (e.g. configuration with command line
- parameters) and for a subproject build driven by the build of a dependent
- project.</p>
-<p>Often similar items have to be built. Therefore it should be possible
- to provide general <i>(template?)</i> build specifications, and to declare for
- a concrete item that it should be built according to such a general specification.</p>
-<p>One result of the build process should be a log which shows what has been done.</p>
-<h3>Requirements from the task developer perspective</h3>
-<p>A task should not need to know the structure of a build specification.
- It would have to provide an interface (not necessarily in the Java language
- sense) for the Ant core to input the necessary configuration attributes
- and to execute the task). There should be a standard functionality to allow
- a task doing log output.</p>
-<p>An interface (again not necessarily in the Java language sense) should
- be provided which allows a task to get <i>(and set?)</i> information about it's
- context in the build process.</p>
-<h3>Requirements from the extensions developer perspective</h3>
-<p>The Ant core should be independent from a specific representation of the
- build specification. It should be possible to create a specification programmatically
- (thereby allowing the introduction of new representations). The core should
- do no in- or output itself. Build errors should always lead to throwing
- an Exception.</p>
-<p>Access to the current state of a build should be available, and its modification
- possible.</p>
-</body>
-</html>
-
diff --git a/docs/ant2/VFS.txt b/docs/ant2/VFS.txt
deleted file mode 100644
index b790706..0000000
--- a/docs/ant2/VFS.txt
+++ /dev/null
@@ -1,237 +0,0 @@
-From: "Adam Murdoch" <adammurdoch_ml@yahoo.com>
-Subject: RE: Virtual FileSystem Layer
-Date: Sat, 22 Dec 2001 12:06:37 +1000
-
-Hi,
-
-I've also been doing a bit of work on the VFS.  No code yet - instead, I've
-done a survey of the Ant 1 code, to help get a better idea of what we need
-the VFS to actually do.
-
-I've put together a rough list of the sort of features the current tasks
-require from the file system.  This list is entirely from the task writer's
-POV.  I've ignored the build file writer completely - though, the action
-list is a good summary of the build file writer's concerns.  I've tried to
-steer clear of assumptions about what is actually going to provide each
-feature to the tasks, or what the API will look like to the tasks.
-
-The goal for doing up this list, was to help identify the features we want
-to support, and the API that the tasks will use to get at them.  This should
-be largely independent of how we decide to represent the file system in the
-build files.  In addition, it doesn't matter too much whether the list below
-is complete (I'm sure it isn't), or that the VFS provide every single one of
-the features.  Whatever it doesn't provide, can stay up in the tasks, and be
-refactored down later.
-
-The assumption here is that we do actually want to put together a file
-system API.  I think it's a good idea to at least put together some
-interfaces, even if the implementation is stolen from somewhere else.
-Without a doubt, the file system is the most widely used "service" in the
-current crop of tasks.  The API that we choose has to have a good semantic
-match with what the tasks need to do, so that writing the tasks is easy.
-The API also has to be general enough to deal with stuff we haven't thought
-of yet.  On that note, I personally think that JNDI might be a touch too
-general for what we need.
-
-So, the features.  Note that many of these will be optional - not every
-feature will be available for every node in the file system.  I've used the
-term "node" to mean both directories and files.  I'm not suggesting we
-actually call them "nodes" in the API.  I've used the term "root node" to
-mean the root of a file system.
-
-* Naming
-
-- Locate a node by absolute name.
-- Get the absolute name for a node.
-- Resolve a name to a node, relative to some base node - like
-FileUtils.resolveFile().
-- Get the relative name of a node, relative to some base node.
-- Determine the base name (with and without the extension), and extension of
-the node.
-- Deal with file systems that are case sensitive, and case insentitive.
-
-* Properties
-
-- Determine what properties are available on the node.
-- Determine if the node exists.
-- Determine the type of node (file vs. directory, could be "has-content" vs
-"has-children").
-- Determine if the node is readable.
-- Determine if the node is writeable.
-- Get/set the permissions on the node.  This covers things like chmod &
-chown, making read-only, making executable, etc.
-
-* Content
-
-- Determine if the node can/does have content.
-- Get the size of the node.
-- Get/set the last-modified time of the node.
-- Get/set the mime-type of the node.
-- Get/set the encoding of the node.
-- Get a checksum of the node.
-- Get content as InputStream.
-- Get content as Reader.
-- Set content as an OutputStream.
-- Set content as a Writer.
-- Implicit creation of node and its ancestors when content is written.
-- Compare nodes for equality (last modified timestamp, checksum, bytewise
-compare).
-
-* Hierarchy
-
-- Get the parent node of a node.
-- Get the child nodes of a node.
-- Iterate over (or visit) the descendants of a node.
-  - With or without a selector.
-  - In various orders - depthwise, etc.
-  - Be able to modify the nodes during traversal.
-
-* Modification
-
-- Create a new node of a particular type.  Create all missing ancestors.
-- Move, copy, delete a node.
-  - All descendants.
-  - Optional selector. E.g. ignore empty dirs, ignore default excludes, etc.
-  - Optional filter.
-
-* Conversion
-
-- Convert the node to a java.net.URL.
-- Make the node content available as a local file (to hand off to external
-commands).
-- Get the OS specific *filename* for a node.
-- Resolve an OS specific *filename* to a node.
-
-* File System Types
-
-- Local file.
-- HTTP.
-- FTP.
-- Classloader, uses Classloader.getResource().
-- Temporary files.
-- etc ...
-
-- Compound file system.  Made up of a bunch of mount points.  The VFS
-itself.
-
-- Layered file systems (that sit on top of another file system or node):
-  - zip, bzip, jar, tar
-  - filtering - token replacement, etc
-
-- Factories for creating and configuring file system root nodes.
-- Ability to easily add new file system implementations.
-
-* Task Container
-
-- A mechanism for a task to get hold of the project's root node.
-
-- A mechanism that allows a task to create its own private root nodes,
-without letting it mess with the project's file system, or the file systems
-of other tasks.
-
-- A mechanism for cleaning up all the node InputStream, OutputStream, Reader
-and Writers opened by a task during its execute() method.  Cleaning up files
-is one thing the current tasks don't do very well at all.  Something like
-this would take care of anything the task did not explictly close.  Would
-include root nodes it created.
-
-* Other things
-
-- Maybe some way to explicitly close a node and release all resources used
-by it.
-
-- Maybe detection of concurrent updates, in the case of parallel tasks.
-
-- Netbeans has an event model in its VFS.  Something like this might be
-useful in dependency management.
-
-- nodesets.  The replacement for, or generalisation of, FileSet, Path,
-FileList, etc
-  - A nodeset that contains the descendents of a node that match a selector
-(like the current FileSet implementation).
-  - A nodeset that contains arbitrary nodes.
-  - An aggregating nodeset.
-  - Custom nodeset implementations.
-
-- Reimplement the Ant 1 Fileset, Path and Filelist as adaptors sitting on
-top of the VFS.
-
-- A classloader that can load classes from a node.
-
-- etc ..
-
-What's missing?  What shouldn't be on the list?
-
-
-Adam
-
-> -----Original Message-----
-> From: Magesh Umasankar [mailto:umagesh@apache.org]
-> Sent: Saturday, 22 December 2001 10:44 AM
-> To: ant-dev@jakarta.apache.org
-> Subject: Virtual FileSystem Layer
->
->
-> I have been spending some time now on the VFS
-> layer...  Nothing major to report yet, but I just wanted
-> to sound off so that if I am going down the wrong
-> route, I correct it right away.
->
-> I evaluated at WebNFS, NetBeansFS (NBFS) and
-> JNDI.
->
-> 1.  WebNFS seems to be going nowhere.  It has
-> been dormant for quite sometime now.  Licensing
-> is rigid.  Technically, it doesn't look so bad as it
-> closely replicates java.io.File's API.  But then,
-> that really gives us very little.
->
-> 2.  NBFS looks OK.  It has got a few filesystems
-> already built.  There may be some licensing issues,
-> I don't know, but that shouldn't concern us too
-> much as, according to Peter, it is Mozilla (I haven't
-> really check the license out, sorry).  But, as far as I
-> can see, it seems to lack in sophisticated API features
-> like searching based on attributes, etc., which
-> we will definitely be needing for the Selector APIs.
->
-> 3.  JNDI, by far, beats the above to, in my
-> evaluation.  It is generic enough.  We don't have
-> any licensing issues.  It has also become part of
-> the core JRE (1.4 onwards).  Technically, it fits to a T
-> what we are looking for - virtual file system that
-> provides search controls, access attributes,
-> url mounting, etc.  Furthermore, there's been
-> some ground work already done for us at Jakarta/Apache
-> (Catalina).  I have written a SPI for a FTPFileSystem
-> - though it is in a real crude stage right now.  I believe
-> this is the way to go because Ant's code would be
-> operating at the (Dir)Context level and we can keep
-> adding SPIs as we need them.  Furthermore,
-> JNDI has been stable for quite sometime now and
-> we can depend on a widely used API.
->
-> I don't think JNDI is a heavyweight API for our needs.
-> It seems to be the only one, so far, which encompasses
-> at the APIP level, all the new functionalities that we
-> desire to introduce.
->
-> Let me know if my approach, so far, to go the JNDI
-> route seems reasonable.
->
-> Cheers,
-> Magesh
->
->
->
->
-> --
-> To unsubscribe, e-mail:   <mailto:ant-dev-unsubscribe@jakarta.apache.org>
-> For additional commands, e-mail: <mailto:ant-dev-help@jakarta.apache.org>
-
-
---
-To unsubscribe, e-mail:   <mailto:ant-dev-unsubscribe@jakarta.apache.org>
-For additional commands, e-mail: <mailto:ant-dev-help@jakarta.apache.org>
-
-
diff --git a/docs/ant2/actionlist.html b/docs/ant2/actionlist.html
deleted file mode 100644
index ec04467..0000000
--- a/docs/ant2/actionlist.html
+++ /dev/null
@@ -1,476 +0,0 @@
-<html>
-  <head><title>Ant1.9 Action List</title></head>
-  <body bgcolor="#ffffff">
-  <center>
-    <h1>Ant1.9 Action List</h1>
-    <h2>Precursor to Ant2</h2>
-    <i>Peter Donald [<a href="mailto:peter@apache.org">peter@apache.org</a>]</i>
-  </center>
-
-  <div align="center">
-  <table width="80%"><tr><td>
-    <blockquote>
-    <p>
-      This document aims to contain a list of actions that people can take
-      to produce Ant1.9. Ant1.9 is a refactoring of the Ant1.x line and a jump
-      point for Ant2. Some changes will be backported to Ant1.x over time when 
-      they have proven themselves while other changes may only become available
-      via Ant2.0. Ant1.9 is our melting pot where we can experiment and refactor 
-      without a thought to backwards compatability but only to the "right" way 
-      of doing things.
-    </p>
-    </blockquote></td></tr>
-  </table>
-  </div>
-
-  <h2>Introduction</h2>
-
-  <blockquote>
-    <p>
-      This document will list a bunch of actions that will guide us in the evolution 
-      of Ant1.x and provide a solid basis on which to launch Ant2.0. Feel free to add to 
-      this list of actions as our vision of Ant2 solidifies. Associated with each action
-      is a list of victims who have "volunteered" to have a go at the action and a status.
-      The status just tells us where they are at while the victim column will tell us exactly
-      who is doing what. It is fine for a group of people to work on a single area.
-    </p>
-    <br />
-    <br />
-    <br />
-    <div align="center">
-    <table cellspacing="2" cellpadding="5" width="80%">
-      <tr>
-        <td bgcolor="#eeeeee" align="center">Action</td>
-        <td bgcolor="#eeeeee" align="center">Victims</td>
-        <td bgcolor="#eeeeee" align="center">Status</td>
-      </tr>
-      <tr>
-        <td><a href="#vfs">Create a Virtual Filesystem layer</a></td>
-        <td>None</td>
-        <td>Not Started</td>
-      </tr>
-      <tr>
-        <td><a href="#naming">Formalize a naming scheme for task attributes/elements</a></td>
-        <td>None</td>
-        <td>Not Started</td>
-      </tr>
-      <tr>
-        <td><a href="#selector">Design and implement s Selector API for Filesets and other Itemsets</a></td>
-        <td>None</td>
-        <td>Not Started</td>
-      </tr>
-      <tr>
-        <td><a href="#coloring">Develope the infrastructure for coloring (or "environmental" dependency analysis)</a></td>
-        <td>None</td>
-        <td>Not Started</td>
-      </tr>
-      <tr>
-        <td><a href="#structural">Develope the infrastructure for structural dependency analysis</a></td>
-        <td>None</td>
-        <td>Not Started</td>
-      </tr>
-      <tr>
-        <td><a href="#exec">Refactor the Exec infrastructure into JavaBeans</a></td>
-        <td>Peter Donald</td>
-        <td>80%</td>
-      </tr>
-      <tr>
-        <td><a href="#java">Refactor the Java infrastructure into JavaBeans</a></td>
-        <td>None</td>
-        <td>Not Started</td>
-      </tr>
-      <tr>
-        <td><a href="#facade">Design and implement a generic solution for creating Task facades</a></td>
-        <td>None</td>
-        <td>Not Started</td>
-      </tr>
-      <tr>
-        <td><a href="#packaging">Sketch out a basic way of separating all the tasks into type libraries</a></td>
-        <td>None</td>
-        <td>Not Started</td>
-      </tr>
-      <tr>
-        <td><a href="#mapperext">Design and implement an API that allows mapping of file attributes during copy/move/etc tasks</a></td>
-        <td>None</td>
-        <td>Not Started</td>
-      </tr>
-      <tr>
-        <td><a href="#filters">Design and implement an API so that Filters could be implemented as FilteredOutputStreams</a></td>
-        <td>None</td>
-        <td>Not Started</td>
-      </tr>
-      <tr>
-        <td><a href="#catalog">Design and implement a XML "catalog" so the snippets of XML can be injected based on URI rather than relative location</a></td>
-        <td>None</td>
-        <td>Not Started</td>
-      </tr>
-      <tr>
-        <td><a href="#i18n">Look at the feasability of i18n'ing tasks and the runtime</a></td>
-        <td>None</td>
-        <td>Not Started</td>
-      </tr>
-      <tr>
-        <td><a href="#doco">Write a document describing the way that tasks should be written in context of Ant2</a></td>
-        <td>Peter Donald<br />(peter at apache.org)</td>
-        <td>Not Started</td>
-      </tr>
-      <tr>
-        <td><a href="#embeddor">Design an API to embed Ant into other applications</a></td>
-        <td>None</td>
-        <td>Not Started</td>
-      </tr>
-      <tr>
-        <td><a href="#info">Design a TypeInfo system similar to BeanInfo to describe Tasks</a></td>
-        <td>None</td>
-        <td>Not Started</td>
-      </tr>
-      <tr>
-        <td><a href="#antdoc">Design Antdoc to generate manual from .java files</a></td>
-        <td>None</td>
-        <td>Not Started</td>
-      </tr>
-    </table>
-    </div>
-  </blockquote>
-
-  <h3>Virtual File System</h3>
-  <a name="vfs" />
-  <blockquote>
-    <p>
-      There has long been a recognition that it would be nice if ant supported some 
-      notion of a virtual filesystem layer. This layer would allow you to treat 
-      resources located and retrieved from different mechanisms in a uniform way.
-      For instance it would allow the copy task to copy from a http server, a cvs server,
-      a ftp server or the local filesystem using a uniform mechanism. So instead of
-      having separate tasks to operate on each different resource type we would use
-      just one task that plugged into multiple filesystems.
-    </p>
-    <p>
-      When we are talking about a virtual filesystem or VFS, one of the concerns we must 
-      address is how to "name" the resource. In most cases a URL or URI style access will 
-      be sufficient but in other cases we may need to consider other options. So 
-      "cvs://localhost:/home/cvs/jakarta-avalon/README.txt?version=1.1", 
-      "ftp://some.server.com/dir/file.zip" and "file://C/WINDOWS/Desktop/MyFile.txt"
-      are all examples of referring to different resources.
-    </p>
-    <p>
-      Another concern that must be addressed is capabilities of both the resources and
-      the filesystem. For instance it is possible to both read and write to resources
-      using the "file" protocol but only possible to write resources using "mailto".
-      The act of copying a file to a "mailto" url would actuall post the files as 
-      resources while copying to a "file" would duplicate the resource somewhere on 
-      the local filesystem. 
-    </p>
-    <p>
-      So we need to determine a list of capabilities. Some examples would be "read", 
-      "write", "list" (can you list dirs), "type" (can you get mime type), 
-      "access permissions" (can you tell if resource has permissions), 
-      "modify permissions" (can you modify permissions) etc. Some of these capabilities
-      can be associated with the particular reosurces, while others may need to be 
-      associated with a whole filesystem/protocol (ie there is no standard mechanism
-      to perform "list" on general "http" URLs). Thus a list of all these capabilities
-      and mapping to various protocols will need to be established.
-    </p>
-    <p>
-      Next we need to determine if we are going to support the notion of "mounting"
-      URLs. For instance if we need to copy files from a FTP server do we allways
-      need to specify the full URL - no matter how convoluted it is (ie
-      "ftp://fred:secret@some.server.com:28763/home/fred/project2/dir/file.zip")
-      or can we mount this on a VFS and access it via that shorter url. ie We could 
-      mount "ftp://fred:secret@some.server.com:28763/home/fred/" onto "vfs:/home" 
-      and then just access the resources via "vfs:/home/project2/dir/file.zip".
-      This would make dealing with large urls easier and more uniform.
-    </p>
-    <p>
-      So after we have decided what our options are we need to actually go about
-      implementing the solution. It may be the case that existing VFS solutions
-      could be reused with minor changes and thus we could save ourselves a lot of 
-      work. Candidates would be the Netbeans VFS, Suns XFile API or other 
-      available directory APIs (like JNDI). If none of them suit then we will need 
-      to write our own layer.
-    </p>
-  </blockquote>
-
-  <h3>Naming</h3>
-  <a name="naming" />
-  <blockquote>
-    <p>
-      Currently Ant has a mixture of tasks from various stages it's evolution, with different
-      authors and each utilizing different naming patterns. Some tasks use names such as
-      "src" and "dest" while others use "file" and "tofile". It would be preferrable if 
-      consistent naming patterns were used. It is recomended that we come up with a "best
-      practices" document to document our recomended naming patterns.
-    </p>
-    <p>
-      Before we can come up with such a document we need to identify common patterns through
-      out the tasks. Several tasks have the notion of transforming input from a "source"
-      to a "destination". So we should have consistent naming schemes for these attributes and 
-      elements. Analysis of existing tasks will likely bring out other similar patterns. Once
-      we have identified and documented these similarities then we can establish conventions.
-    </p>
-  </blockquote>
-
-  <h3>Selector API</h3>
-  <a name="selector" />
-  <blockquote>
-    <p>
-      Currently our filesets allow us to select a set of files based on name patterns.
-      For instance we could create a set of all the files that end with ".java". However
-      there are cases when you wish to select files based on their other attributes, such as 
-      if they are read only or if they are older than a specified date etc.
-    </p>
-    <p>
-      The selector API is one such mechanism to do this. The selector API will allow you to 
-      build file sets based on criteria other than name. Some possible criteria would be
-    </p>
-    <ul>
-      <li>Is the file readable?</li> 
-      <li>Is the file writeable?</li> 
-      <li>What date was the file modified on?</li> 
-      <li>What size is the file?</li> 
-      <li>Does the contents contain the string "magic"?</li> 
-    </ul>
-    <p>
-      If we end up supporting a VFS then we could expand the number of selectors 
-      considerably. A mock representation that has been proposed before is the following. 
-      Of course this is subject to change as soon as someone wants to tackle this action ;)
-    </p>
-<pre> 
- &lt;include&gt;
-   &lt;selector type="name" value="**/*.java"/&gt;
-   &lt;selector type="permission" value="r"/&gt;
-
-   &lt;!-- could optionally be directory/or some other system specific features --&gt;
-   &lt;selector type="type" value="file"/&gt; 
-   &lt;selector type="modify-time" 
-             operation="greater-than" 
-             value="29th Feb 2003"/&gt;
- &lt;/include&gt;
-</pre>
-  </blockquote>
-
-  <h3>Coloring API</h3>
-  <a name="coloring" />
-  <blockquote>
-    <p>
-      When you execute a task such as "javac" there is two types of dependency information
-      that is important to analyze before we determine if we need to recompile a file. Say
-      we are compiling <code>Foo.java</code>, it may depend on the <code>Bar.java</code>
-      file. We call this "structural" dependency information - the structure of the source file 
-      determines what other files it depend upon. However there is also "environmental" 
-      dependency information. For instance if the <code>Foo.java</code> file was compiled with 
-      <code>debug="true"</code> last run and this time needs to be compiled with 
-      <code>debug="false"</code> then it is out of date and needs to be recompiled. We call this 
-      "environmental" dependency information "coloring".
-    </p>
-    <p>
-      So we need to create an infrastructure that allows tasks to manage "coloring". So a task
-      should be able to add coloring information for each resource processed. When the task
-      comes to process the resource again it will detect if the coloring has changed and if it
-      has will force a recompile.
-    </p>
-    <p>
-      An API for such a bean has yet to be established but an example API would be.
-    </p>
-    <pre>
-ColoringManager cm = ...;
-cm.addColor( "debug", "true" );
-cm.addColor( "optimize", "false" );
-cm.setFileSet( myFileSet );
-File[] files = cm.getOutOfDate();
-    </pre>
-  </blockquote>
-
-  <h3>Structural Dependency Utils</h3>
-  <a name="structural" />
-  <blockquote>
-    <p>
-      In the present ant, it is required that each task manage dependency separately. 
-      This makes it a lot of work to implement even simple dependency checking. To this
-      day many of the core tasks do not implement it correctly. I am specifically
-      talking about "structural" dependency information. The main reason is that it is
-      painful to implement.
-    </p>
-    <p>
-      Some tasks do no dependency checking and will recompile/transform/etc everytime. 
-      Others may perform a simple dependency checking (ie if source file is newer than 
-      destination file then recompile). Ideally a dependency system would actually
-      calculate the dependencies correctly. So we need to have some mechanism to determine
-      that <code>foo.c</code> actually depends upon <code>foo.h</code>, <code>bar.h</code> 
-      and <code>baz.h</code>. As this information is particular to each different task
-      we need to allow tasks to implement this behaviour. Possibly by supplying an interface
-      of the form;
-    </p>
-    <pre>
-public interface DependencyGenerator
-{
-  File[] generateDependencies( File file );
-}
-    </pre>
-    <p>
-      Generating the dependency information is a costly operation and thus we do not want to
-      be doing it everytime you run ant. We want to generate it on the initial build and then 
-      persist somewhere. Everytime a file is out of date, it's dependency information would
-      be regenerated and stored in the dependency cache. Ideally this cache would also store the
-      above mentioned coloring information. So the entry for <code>foo.c</code> may declare that 
-      it is dependent upon <code>foo.h</code>, <code>bar.h</code> and <code>baz.h</code>, aswell 
-      as being compiled with -O2 flag. If any of the dependencies have changed or are out of date 
-      then foo.c would need to be recompiled.
-    </p>
-    <p>
-      A possible API would be
-    </p>
-    <pre>
-DependencyManager dm = ...;
-dm.setFileSet( myFileSet );
-dm.setDependencyCache( myDependencyCacheFile );
-File[] files = cm.getOutOfDate();
-    </pre>
-  </blockquote>
-
-  <h3>Refactor &lt;exec&gt; infrastructure into Beans</h3>
-  <a name="exec" />
-  <blockquote>
-    <p>
-      Exec and its related classes have currently evolved through several iterations and thus
-      it is not as cleanly designed and as reusable as it could be. Someone needs to pull apart
-      exec and analyze which parts can be turned into JavaBeans and decouple them from the Ant 
-      infrastructure. Once that is done it will make these beans much easier to reuse from other
-      tasks without relying on gaining access to the other task instance.
-    </p>
-  </blockquote>
-
-  <h3>Refactor &lt;java&gt; infrastructure into Beans</h3>
-  <a name="java" />
-  <blockquote>
-    <p>
-      Much like Exec should be decoupled from Ant runtime, so should classes to implement java 
-      task for the same benefits.
-    </p>
-  </blockquote>
-
-  <h3>Generic Task Facades</h3>
-  <a name="facade" />
-  <blockquote>
-    <p>
-      Currently we have a few tasks that have multiple implementations. For instance Javac task
-      can actually call jikes, jvc, classic javac or modern javac. Similar things will be seen
-      with the jspc task and the cc task (if it ever gets written). We need to examine this 
-      pattern and see if there is a way to generalize this and make it easier to write such tasks.
-    </p>
-  </blockquote>
-
-  <h3>Task Packaging</h3>
-  <a name="packaging" />
-  <blockquote>
-    <p>
-      We have already decided that we are going to package Ant tasks in separate jars and
-      have some sort of descriptor that to describe the contents of the jar. However we have 
-      not yet decided how we will break up the tasks. Do we break up the tasks up into 
-      related tasks or into groups that ar elikely to be used together or what? A possible
-      breakdown would be
-    </p>
-    <ul>
-      <li>jdk tasks: javac, javadoc, rmic etc</li>
-      <li>text tasks: regex replace, fixcrlf etc</li>
-      <li>unix tasks: chmod, etc</li>
-      <li>file tasks: copy, move, etc</li>
-    </ul>
-  </blockquote>
-
-  <h3>Mapping File Attributes during transformation</h3>
-  <a name="mapperext" />
-  <blockquote>
-    <p>
-      When we are copying files from one location to another it is currently possible
-      to rename them using a mapper. So we could rename <code>Foo.java</code> to 
-      <code>Foo.java.bak</code>. On occasion it is useful to modify file attributes
-      other than its name in such operations. So we could copy the files to another
-      location and make them read-only in one operation.
-    </p>
-  </blockquote>
-
-  <h3>Filters extensions</h3>
-  <a name="filters" />
-  <blockquote>
-    <p>
-      This is partially related to the above action. Filters could be seen as a way 
-      to modify the content attribute of a file during a copy/move. It would be 
-      preferrable if filtering could be abstracted to use <code>FilteredOutputStream</code>s
-      to perform the content modification. That way new Filter types could be constructed
-      and used during file copy (ie an example would be a Perl FilterOutputStream that 
-      allowed you to use perl expressions to transform input).
-    </p>
-  </blockquote>
-
-  <h3>XML Catalog to load XML Fragments</h3>
-  <a name="catalog" />
-  <blockquote>
-    <p>
-      When including fragments of XML we are currently forced to use relative paths.
-      However this is sometimes undesirable when a single fragment needs to be used
-      across several projects in several different locations. Instead we could use
-      a Catalog to name the fragment and then each developer would only need to install
-      the fragment once and it would be accessible from all the projects.
-    </p>
-  </blockquote>
-
-  <h3>i18n the Runtime and tasks</h3>
-  <a name="i18n" />
-  <blockquote>
-    <p>
-      Look at the feasability of performing i18n on Ant runtime and core tasks. Look at
-      how much work it will be and how useful it would be. Look at utilizing i18n from 
-      existing projects such as Avalon.
-    </p>
-  </blockquote>
-
-  <h3>Embeddor API for Ant</h3>
-  <a name="embeddor" />
-  <blockquote>
-    <p>
-      Identify different environments in which it would be useful to embed Ant or an Ant-like 
-      tool. Identify what these environments are likely to demand in terms of API and support
-      and then design a system that works in these environments without compromising ants 
-      core goal (ie a build system). Some suggestions for such an API include;
-    </p>
-    <ul>
-      <li>Pluggable ProjectBuilders to allow building of project from a variety of sources,
-       file, URL, InputStream, SAX etc</li>
-      <li>Pluggable ClassLoader arrangement</li>
-      <li>Ability to set User Properties</li>
-      <li>Ability to add Task/Data/Type definitions</li>
-      <li>Ability to add/remove Listeners</li>
-      <li>Ability to add/remove Loggers</li>
-      <li>Ability to get meta-information about targets (such as name and description)</li>
-      <li>The ability to execute a task and/or targets</li>
-      <li>The ability to add tasklibs</li>
-      <li>The ability to add VFS mount points</li>
-      <li>The ability to manipulate ProjectModel and build it from GUIs</li>
-      <li>A general task engine API</li>
-    </ul>
-  </blockquote>
-
-  <h3>TypeInfo system</h3>
-  <a name="info" />
-  <blockquote>
-    <p>
-      Add in the ability to represent tasks using specified meta-info, This would allow 
-      generation and manipulation of information such as what attributes are available, 
-      what elements are supported etc. 
-    </p>
-  </blockquote>
-
-  <h3>Antdoc</h3>
-  <a name="antdoc" />
-  <blockquote>
-    <p>
-      This is partially based on the above TypeInfo system. It involves the ability to 
-      take the TypeInfo made available and generate documentation for the tasks. This 
-      would allow multiple formats of documentaiton to be easily maintained and reduce 
-      the chance that documentation gets out of whack.
-    </p>
-  </blockquote>
-
-  </body>
-</html>
\ No newline at end of file
diff --git a/docs/ant2/features.html b/docs/ant2/features.html
deleted file mode 100644
index 4762b58..0000000
--- a/docs/ant2/features.html
+++ /dev/null
@@ -1,369 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Language" content="en-us">
-    <title>Ant2 feature list</title>
-
-      <style type="text/css">
-        .comment {
-          COLOR: #900000;
-	  BACKGROUND: #ffa;
-        }
-      </style>
-
-  </head>
-
-  <body bgcolor="#FFFFFF">
-
-    <p class="comment">If something looks like this, this is either a
-    request for input or a &quot;REVISIT&quot; marker or similar.</p>
-
-    <h1>Ant2 Goals</h1>
-
-    <p>Even though Ant2 is expected to be incompatible with the
-    current Ant1 series, it still has the same goals. Ant is a Java
-    based build tool and this remains the main focus of it. The
-    original goals of simplicity, understandability and extensibility
-    still stand and Ant2 will try to achieve them even better than
-    Ant1 does.</p>
-
-    <h2>Simplicity and Understandability</h2>
-
-    <p>These two goals are closely related. Ant build files shall be
-    easy to read and understand - at the same time it should be easy
-    to write a custom Ant task and to use the utility classes that
-    Ant2 provides.</p>
-
-    <p>Ant2 shall be more consistent than Ant1 is - this means:</p>
-
-    <ul>
-
-      <li>core tasks will use the same attribute names for common
-      functionality</li>
-
-      <li>similar tasks will be unified to use similar forms.</li>
-
-      <li>different implementations for the same functionality will be
-      hidden behind facade tasks.</li>
-
-      <li>properties and data types will be unified so that they share
-      the same namespace and inheritance rules. <i
-      class="comment">Need to talk about how ${} expansion works for
-      filesets and so on.</i></li>
-
-    </ul>
-
-    <p>Furthermore some things will have to become more explicit:</p>
-
-    <ul>
-
-      <li>remove all magic properties</li>
-
-      <li>make build file writers explicitly state which
-      filters/filtersets a copy task will use</li>
-
-      <li>add scoping rules for properties so that not all of them
-      will be inherited by sub-builds, only those that have been
-      specified explicitly. <i class="comment">Fill in details once
-      they've been sorted out.</i></li>
-
-    </ul>
-
-    <p>The front-ends for Ant2 shall be smart enough to automatically
-    detect the required libraries (like <code>tools.jar</code>), the
-    use of native scripts shall be kept to a minimum.</p>
-
-    <p>Build file writers can attach a message to targets that will be
-    presented to the user if that target is going to be skipped (based
-    on the if/unless attribute of the target).</p>
-
-    <p>Even though Ant installation already is quite simple in Ant1
-    (extract the archive and set two environment variables),
-    alternative ways to install Ant like using 
-    <a href="http://java.sun.com/products/javawebstart/">Webstart</a> or
-    a "self-extracting" JAR file will be explored.</p>
-
-    <h2>Extensibility</h2>
-
-    <p>Ant2 like Ant1 uses build files written in XML as its main
-    input, but it will not be restricted to it. The core of Ant2 will
-    work on an object model of Project/Target/Task that is independent
-    of any external representation.</p> 
-
-    <p>As an extension of the current <code>&lt;taskdef&gt;</code>
-    concept, tasks can be bundled into task libraries (together with
-    data types and other utility classes). These task libraries are
-    special JAR archives that somehow describe the contained tasks to
-    Ant. Ant will automatically know all tasks contained in task
-    libraries that have been placed into a special directory - in
-    addition task libraries can be referenced and used in a build file
-    explicitly. <i class="comment">Fill in details once they've been
-    sorted out.</i></p>
-
-    <p>It has become apparent, that several &quot;aspects&quot; of
-    tasks are so common that task writers find themselves duplicating
-    code all over again - things like classpath handling or &quot;do
-    we stop the build if this task fails?&quot; functionality for
-    example. Ant2 will provide a way to let the user attach an
-    &quot;aspect handler&quot; to a project - all attributes that live
-    in a certain namespace are going to be passed to this handler. <i
-    class="comment">Need to talk about TaskContext here.</i></p>
-
-    <p>Ant2 will farm out common functionality from tasks into utility
-    classes so that task writers can benefit from a tested and stable
-    framework - they shouldn't need to deal with existing tasks
-    directly (like some tasks &quot;abuse&quot; the
-    <code>&lt;touch&gt;</code> task in Ant1).</p>
-
-    <p>Ant2 will provide a way to define tasks that itself can have
-    tasks as child elements without knowing all defined tasks at
-    compile time.  Discussions on ant-dev usually talk about
-    &quot;container tasks&quot; in this context.</p>
-
-    <p>The only way to &quot;include&quot; common XML snippets so far
-    has been the usage of external SYSTEM entities, a mechanism that
-    is tied to DTDs and doesn't mix well with alternative
-    approaches like XML Schema.  Ant2 will provide a built-in include
-    mechanism.</p>
-
-    <h1>New/Modified Features</h1>
-
-    <p>Ant2 will run the build process fully dynamically, which means
-    that task won't be instantiated before they are actually being run
-    and <code>${}</code> expansion will see the very latest value of a
-    property. It will be possible to reassign values of properties via
-    a built-in task.</p>
-
-    <h2>Compatibility with Ant1</h2>
-
-    <p>Ant2 is going to break Ant1 in several ways:</p>
-
-    <ul>
-
-      <li>Tasks written for Ant1 won't work in Ant2 as the API of
-      Ant's core and the names of utility classes are going to
-      change. There will probably be adaptors and utility classes to
-      ease the transition for task writers.</li>
-
-      <li>Build files written for Ant1 will probably not be valid in
-      Ant2 or at least not yield the same results. It is expected that
-      Ant2 will come with a tool to translate Ant1 build files into
-      equivalent Ant2 versions</li>
-
-      <li>magic properties like <code>build.compiler</code> may
-      disappear and be replaced by a different customization
-      concept.</li>
-
-      <li>Ant2 is going to require a JDK version 1.2 or above and a
-      JAXP compliant parser version 1.1 or above.</li>
-
-      <li>If you specify more than one target in another target's
-      depends attribute, Ant1 will execute these targets from left to
-      right (as long as the dependency tree permits it) - Ant2 will
-      not guarantee this behavior but will allow build file writers to
-      specify the order explicitly.</li>
-
-      <li>Dereferencing a non existent property a via ${a} will result
-      in a build failure.</li>
-
-    </ul>
-
-    <h2>Support Integration of Ant Into Other Tools</h2>
-
-    <p>Ant2 will have a clear separation between the front-end that is
-    responsible for user interactions, the object model that
-    represents the project to build and the part of Ant that runs the
-    build process itself <i class="comment">Name that TaskEngine,
-    ProjectEngine, ExecutionEngine or what?</i>. This separation is
-    expected to ease the integration of Ant (or parts of it) into
-    other products.</p>
-
-    <p>Ant2 itself will include a command line front-end and Antidote
-    will become the GUI front-end to it. Other front-ends like a
-    servlet front-end are expected <i class="comment">outside of
-    Ant's core</i> as well.</p>
-
-    <p>In addition to this separation, the following features should
-    help people who want to integrate Ant into their products:</p>
-
-    <ul>
-
-      <li>It will be possible to cancel a running build process.</li>
-
-      <li>Ant will detach from <code>System.err/.out/.in</code>
-      completely and communicate with the front-end via a well defined
-      API.  The front-end will have to handle user input for tasks
-      that need it (tasks that ask for a password for example).</li>
-
-      <li>Tasks will provide some way to identify their attributes
-      from the outside. <i class="default">fill in details</i></li>
-
-    </ul>
-
-    <h2>More Control for Users and Build File Writers</h2>
-
-    <p>Ant2 will use a <code>BuildListener</code> concept similar to
-    the one of Ant1 but may provide a richer set of events. It will be
-    possible to attach and detach listeners to a build process from
-    within the build file and to modify the behavior of attached
-    listeners.</p>
-
-    <p>In Ant1 users have little control over how things work.  There
-    are a couple of magic properties to make Ant chose a preferred
-    compiler or modify the CLASSPATH, but they are barely documented.
-    If users want to set these properties for every build process,
-    they have to learn the undocumented tricks of the
-    <code>ANT_OPTS</code> environment variable or the
-    <code>~/.antrc</code> file.</p>
-
-    <p>Ant2 will have a well defined system to specify user
-    preferences.  This system will not only let user chose their
-    compiler but also give them a chance to provide default values for
-    attributes (say you always want the <code>debug</code> attribute
-    of the <code>javac</code> task to be true - unless it has been
-    disabled explicitly). <i class="comment">Need to give details once
-    they've been sorted out.</i></p>
-
-    <h2>Documentation System</h2>
-
-    <p>All tasks will be documented in XML files using a common DTD <i
-    class="comment">Still need to define it</i> - task libraries are
-    expected to include the documentation using this DTD inside the
-    library itself.</p>
-
-    <h2>Better Subbuild Handling</h2>
-
-    <p class="comment">Is there something beyond &quot;should become
-    better&quot; right now?</p>
-
-    <h2>Data Types</h2>
-
-    <p>Ant1 supports a limited set of data types (fileset, patternset
-    and path) and at least up to Ant 1.3 it is not possible to
-    register custom data types without writing a task that does this.
-    Ant2 will provide a built-in mechanism to define new data
-    types.</p>
-
-    <p>Existing data-types will be improved, the files in a fileset
-    can be chosen based on more than just pattern matching for example
-    (modification time or permissions for example).  Ant2 will have
-    built-in tasks for set operations.</p>
-
-    <p>Data types and properties will share the same name space and
-    follow the same scoping and precedence rules. 
-    <i class="comment">${} again.</i></p>
-
-    <h2>Multi-Threading of Tasks Within a Target</h2>
-
-    <p>It will be possible to run several tasks in parallel - these
-    tasks will belong to the same target and all tasks will be joined
-    at the end of the target.</p>
-
-    <h2>Internationalization</h2>
-
-    <p>Ant2 itself will provide internationalized (error) messages and
-    provide utility classes to help task writers to do the same.  
-    <i class="comment">These utility classes may very well come from a
-    different (Jakarta) project</i>.</p>
-
-    <p>Ant's primary language and the language of the build file
-    will continue to be English.</p>
-
-    <h1>Rejected Features</h1>
-
-    <p>This is list is not complete, it just highlights some of the
-    rejected features and tries to explain why they've been
-    rejected.  Two very common reasons to reject something were, that
-    the request has been too vague or the same functionality could
-    already be provided by some other accepted new feature.</p>
-
-    <p>For a complete listing of all requested features, see <a
-    href="requested-features.html">requested-features.html</a>. The
-    discussion on all topics can be followed in the <a
-    href="http://marc.theaimsgroup.com/?l=ant-dev&r=1&w=2">archives
-    for ant-dev</a> in threads starting from 2001-03-21 - the subject
-    lines contained either <code>[VOTE]</code> or
-    <code>[DISC]</code>.</p>
-
-    <h2>Simple Flow-Control</h2>
-
-    <p>People asking for these kind of things have often heard the
-    standard "Ant shall not become yet another scripting language, Ant
-    shall not fall into the same traps make/Perl did ..." response
-    from the committers and some long-term ant-dev people.</p>
-
-    <p>The long version of that answer is:</p>
-
-    <ul>
-      <li>There are lots of open source scripting languages, there is
-      no need to define a new one.</li>
-
-      <li>Ant has been created to be a build tool.  While you can use
-      it for a whole lot of other things, this is not Ant's primary
-      focus (and it shouldn't be).  Most use-cases that ask for
-      flow-control are out of Ant's scope.</li>
-
-      <li>Ant already provides the requested functionality for many
-      common situations.  The execon and apply tasks can be used to
-      iterate over a set of files as the (planed for Ant2) javaon and
-      anton tasks will do.</li>
-
-      <li>Providing flow-control inside Ant's core would increase the
-      complexity of this core.  This would make it difficult for new
-      contributors to understand how Ant works and increase the
-      maintenance cost for Ant at the same time.  The goal of the Ant
-      developers is to push as much complexity and functionality out
-      of Ant's core into the tasks as possible.</li>
-    </ul>
-
-    <p>That being said, Ant2 will make it easy to write iteration or
-    conditional tasks via the new container task concept.  We expect
-    foreach, switch and if tasks to be written, but they will probably
-    not become core parts of the Ant distribution.</p>
-
-    <h2>Advanced Conditionals for if/unless Attributes</h2>
-
-    <p>The argument here is the same as for flow-control.  We are
-    talking about complexity that can be pushed from the core to tasks
-    - and that is what will be done.  Instead of additional power for
-    the if/unless attributes, Ant2 will have a new task that can set
-    properties based on the values of other properties or logical
-    combinations of other conditions, something like (making up
-    syntax):</p>
-
-<pre>
-&lt;condition name=&quot;javamail-complete&quot;&gt;
-  &lt;and&gt;
-    &lt;available class=&quot;javax.mail.Transport&quot;/&gt;
-    &lt;available class=&quot;javax.activation.DataHandler&quot;/&gt;
-  &lt;/and&gt;
-&lt;/condition&gt;
-</pre>
-
-    <p>will become possible</p>
-
-    <h2>Multi-Threaded Execution of Targets</h2>
-
-    <p>The general feeling was, that the combination of target
-    dependencies and multi-threading would soon become too complex,
-    especially since Ant2 will allow people to explicitly enforce the
-    order in which (independent) targets will be executed.</p>
-
-    <p>This issue will be explored again later, it has not been
-    rejected for all time being, but it is out of scope for
-    Ant&nbsp;2.0</p>
-
-    <h1>Ideas for New Tasks and Tools</h1>
-
-    <p>Please refer to <a
-    href="requested-features.html">requested-features.html</a> in the
-    section &quot;I. Things that don't affect the core but are
-    requests for new tasks or enhancements to existing tasks.&quot;
-    for this.</p>
-
-    <hr>
-      <p align="center">$Id$</p>
-      <p align="center">Copyright &copy; 2001 Apache Software
-        Foundation. All rights Reserved.</p>
-  </body>
-</html>
diff --git a/docs/ant2/original-specification.html b/docs/ant2/original-specification.html
deleted file mode 100644
index 882659e..0000000
--- a/docs/ant2/original-specification.html
+++ /dev/null
@@ -1,278 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "strict.dtd">
-<HTML> 
-  <HEAD> 
-	 <TITLE>Ant Specification, version 0.5</TITLE> 
-  </HEAD> 
-  <BODY> 
-	 <H1>Ant Specification</H1> 
-	 <P>Version 0.5 (2000/04/20)</P> 
-	 <P>This document specifies the behavior of Ant. At this time, this is a
-		working document with no implementation. It is hoped that this specification
-		will lead to a simplier and more consistent implementation of Ant.</P> 
-	 <P>This document is not intended to be used as an end user manual or user
-		guide to Ant. To adequatly explain the concepts herein in a way appropriate to
-		such a use would potentially complicate this document.</P> 
-	 <H2>Design Goals</H2> 
-	 <P>The following are the overall design goals of Ant:</P> 
-	 <UL> 
-		<LI>Simplicity</LI> 
-		<LI>Understandability</LI> 
-		<LI>Extensibility</LI> 
-	 </UL> 
-	 <H3>Simplicity</H3> 
-	 <P>Ant must be simple to use. Of course, as the definition of simple varies
-		according to the audience of the program. For Ant, since it is a build tool
-		aimed at programmers, the goal is to be simple to use for a competent
-		programmer.</P> 
-	 <H3>Understandability</H3> 
-	 <P>Ant must be clearly understandible for a first time as well as a veteran
-		user. This means that a new user should be able to use Ant comfortably the
-		first time and understand how to modify a build file by looking at it. And it
-		should not require much experience with Ant to understand how it works and how
-		to configure it for particular situtations.</P> 
-	 <H3>Extensibility</H3> 
-	 <P>Ant must be easy to extend. The API used to extend Ant must be easy to
-		use and the way in which these extensions are located and used by the core
-		runtime should be clear.</P> 
-	 <H2>Conceptual Overview</H2> 
-	 <P>This is a conceptual overview of the components used by Ant. Full APIs
-		will be defined later.</P> 
-	 <H3>Project</H3> 
-	 <P>The base unit of work in Ant is the <STRONG>Project</STRONG>. A Project
-		is defined by an editable text file and is represented by an object of type
-		<CODE>org.apache.ant.Project</CODE> at runtime.</P> 
-	 <P>A Project is a collection of <STRONG>Properties</STRONG> and
-		<STRONG>Targets</STRONG>.</P> 
-	 <H3>Properties</H3> 
-	 <P>Properties are mutable name-value pairs that are scoped to the Project
-		and held in a table. Only one pair is allowed per name. It is anticipated that
-		this data structure would be of type <CODE>java.util.Properties</CODE> or a type that has approximatly
-		the same contract.</P> 
-	 <P>Properties can be defined in a hierarchical manner. The order of
-		precidence in this hiearchy is:</P> 
-	 <UL> 
-		<LI>Properties defined on the command line or via a GUI tool</LI> 
-		<LI>Properties defined in the text file which defines the project.</LI> 
-		<LI>Properties defined in a file in the users <CODE>user.home</CODE> directory</LI> 
-		<LI>Properties defined in the installation directory that can be shared
-		  by multiple users.</LI> 
-	 </UL> 
-	 <P>Note: The current version of Ant allows the System property list to be
-		consulted for a return value if the property list doesn't satisfy the requested
-		property name. As all Java code has access to the system property list via the
-		<CODE>java.lang.System</CODE> class, this functionality is considered to be confusing and to be
-		removed.</P> 
-	 <P>Note: The current version of Ant allows property substitution to be
-		performed in the project file. This functionality is being removed.</P> 
-	 <H3>Targets</H3> 
-	 <P>Targets are ordered collections of <STRONG>Tasks</STRONG>, units of work
-		to be performed if a Target is executed. </P> 
-	 <P>Targets can define dependancies on other Targets within the Project. If
-		a Target is deemed to be executed, either directly on the command line, or via
-		a dependancy from some other Target, then all of its dependencies must first be
-		executed. Circular depenancies are resolved by examination of the dependancy
-		stack when a Target is evaluated. If a dependancy is already on the stack of
-		targets to be executed, then the dependancy is considered to have been
-		satisfied.</P> 
-	 <P>After all dependancies of a Target have been satisfied, all of the Tasks
-		contained by the target are configured and executed in sequential order. </P> 
-	 <H3>Tasks</H3> 
-	 <P>A Task is a unit of work. When a Task is to be executed, an instance of
-		the class that defines the behavior of the particular task specified is
-		instantiated and then configured. This class implements the <CODE>org.apache.ant.Task</CODE> interface.
-		It is then executed so that it may be able to perform its function. It is
-		important to note that this configuration occurs just before execution of the
-		task, and after execution of any previous tasks, so that configuration
-		information that was modified by any other Task can be properly set.</P> 
-	 <P>When a Task is executed, it is provided access to the object
-		representing the Project it is running in allowing it to examine the Property
-		list of the project and access to various methods needed to operate.</P> 
-	 <H2>Task Jar Layout</H2> 
-	 <P>Tasks are defined within Java Archive files. The name of the JAR
-		determines the name under which the task is known by in the system. For
-		example, if a Task JAR is named mvdir.jar, the task is known to the system as
-		<CODE>&quot;mvdir&quot;</CODE>.</P> 
-	 <P><EM>Question: Should we say that tasks belong in a JAR file with the
-		.tsk extension?</EM></P> 
-	 <P>The class within the Jar file that implements the <CODE>org.apache.ant.Task</CODE> interface is
-		specified by a manifest attribute named <CODE>Ant-Task-Class</CODE> in the Jar manifest. An example
-		manifest would look like:</P> 
-	 <PRE>    Manifest-Version: 1.0
-    Ant-Task-Class: org.apache.ant.task.javac.JavacTask</PRE> 
-	 <P>When the task is used by Ant, a class loader is created that reads
-		classes from the JAR file. This ensures that there is no chance of namespace
-		collision in the classes of various task JAR files.</P> 
-	 <H2>Installation</H2> 
-	 <P>When Ant is installed on a user system, it installs a directory
-		structure with the following form:</P> 
-	 <PRE>&lt;installdir&gt;/ant      (unix shell script)
-            /ant.bat
-            /ant.jar
-            /ant.properties
-            /tasks/[task jar files]
-            /docs/[documentation]
-            /README</PRE> 
-	 <P>Note: Current Jakarta practice is to name the Unix shell script with a
-		.sh extension. This goes against Unix conventions and is unecessary. Testing
-		has shown that the leaving the extension off on Unix will not interfere with
-		the working of the Windows batch file.</P>
-	 <P>Note: The ant.jar file has been moved from the lib/ directory and placed
-		alongside the shell startup scripts (which have also been moved out of the bin/
-		directory). This is because on windows platforms, the .jar file is an
-		executable file of sorts.</P> 
-	 <H3>Ant Properties</H3> 
-	 <P>The <CODE>ant.properties</CODE> file contains a list of all the properties that should be
-		set by default when ant is run. In addition there are a few special properties
-		that are used directly by ant. An example of these properties in use is:</P> 
-	 <PRE>    system.taskdir=tasks/
-    user.taskdir=anttasks/</PRE> 
-	 <P>The <CODE>system.taskdir</CODE> property sets where the system looks for Java ARchive files
-		containing tasks. If this property defines a relative path, then the path is
-		taken as relative from the installation directory.</P> 
-	 <P>The <CODE>user.taskdir</CODE> property defines where users can locate Java Archive files
-		containing tasks. If this property defines a realtive path, then the path is
-		taken as relative from the users home directory (as defined by the <CODE>user.home</CODE>
-		system property). Task JAR files in this directory take precendence of those in
-		the system directory.</P>
-	 <P>Note: <EM>It has been suggested to add a properties file hook to the
-		command line to roll in props. Pending investigation.</EM></P> 
-	 <H3>User Preferences</H3> 
-	 <P>In addition to the Ant installation directory, an <CODE>ant.properties</CODE> file can be
-		located in the user's home directory (as found by the system property <CODE>user.home</CODE>)
-		which can define user preferences such as the location of a user tasks
-		directory. Properties defined in this file take precidence over those set in
-		the installation's <CODE>ant.properties</CODE> file. Such a file could look like:</P> 
-	 <PRE>    user.taskdir=anttasks/
-    javac.debug=off</PRE> 
-	 <P>Properties starting with <CODE>&quot;system.&quot;</CODE> in the user's <CODE>ant.properties</CODE> file are not
-		allowed and must cause a warning to be thrown.</P> 
-	 <H2>Project Configuration</H2> 
-	 <P>Ant's Project text file is structured using XML and reflects the
-		structure of the various components described in the Conceptual Overview.</P> 
-	 <P>A sample Project file:</P> 
-	 <PRE>&lt;project name=&quot;projectname&quot; defaulttarget=&quot;main&quot; taskdir=&quot;tasks/&quot;&gt;
-  &lt;property name=&quot;javac.debug&quot; value=&quot;on&quot;/&gt;
-  &lt;target name=&quot;main&quot;&gt;
-    &lt;taskimpl ...&gt;
-       ...
-    &lt;/taskimpl&gt;
-  &lt;/target&gt;
-&lt;/project&gt;</PRE> 
-	 <H3>The Project Element</H3> 
-	 <P>The <CODE>project</CODE> element has the following required attributes:</P> 
-	 <UL> 
-		<LI><CODE><STRONG>defaulttarget</STRONG></CODE> defining the default target to be executed if no other target
-		  is specified when Ant is run</LI> 
-	 </UL> 
-	 <P>It also has the following optional allowed attributes:</P> 
-	 <UL> 
-		<LI><CODE><CODE><STRONG>name</STRONG></CODE></CODE> defining a name for this project</LI> 
-		<LI><CODE><STRONG>taskdir</STRONG></CODE> defining a directory in which project specific tasks can be
-		  located. Tasks in this directory take precedence over those in the either the
-		  user taskdir or the installation taskdir.</LI> 
-	 </UL> 
-	 <P>The following elements are allowed as children of the project
-		element:</P> 
-	 <UL> 
-		<LI><CODE><STRONG>property</STRONG></CODE> defining a property scoped to the project</LI> 
-		<LI><CODE><STRONG>target</STRONG></CODE> defining a target</LI>
-	 </UL>
-	 <H3>The Property Element</H3>
-	 <P>asdf</P>
-	 <H3>The Target Element</H3>
-	 <P>asfd</P> 
-	 <H2>Configuration of Tasks</H2> 
-	 <P>The Task section of the configuration file is structured as such:</P> 
-	 <PRE>  &lt;[taskname] [attname=value] [attname=value]...]&gt;
-    [&lt;[elementname] [attname=value] ...&gt; ... &lt;/[elementname]&gt;]
-  &lt;/[taskname]&gt;</PRE> 
-	 <P>The taskname is used to find the class of the Task. Once the class has
-		been located and an instance of it created, all of the attributes of the Task
-		are reflected into the task instance using bean patterns. For example, if a
-		Task contains an attribute named &quot;directory&quot;, the method named
-		setDirectory would be called with the attribute value cast to the appropriate
-		type desired by the method. <EM>(What to do if the type isn't a file or a
-		simple type, look for the class and see if it has a setString method?)</EM></P>
-	 
-	 <P>Text blocks contained by the element are added to task using an addText
-		method. <EM>Place an example...</EM></P> 
-	 <P>For each element contained in the Task definition, an addElementname
-		method is found on the task. The parameter type of the method defines an object
-		that will be loaded and instantiated. The attributes of the element are
-		reflected into the object using bean methods. Any text is set using the addText
-		method. Any elements are recursed in the same fashion.</P>
-	 <P>Search order of tasks.... project/user/system</P> 
-	 <H2>Command Line</H2> 
-	 <P>The command line utility provided with Ant must support the following
-		allowable syntax:</P> 
-	 <P><CODE>ant projectfile [prop=value [prop=value...]] [target]</CODE></P>
-	 <P>Internally, the command line shell scripts should call the <CODE>org.apache.ant.Main</CODE> class
-		with the following arguments:</P>
-	 <PRE>java -Dant.home=installdir org.apache.ant.Main $*</PRE>
-	 <P>or its equivalent on the host platform. Note that the ant installation
-		directory is a System property. The above syntax results in ant.home being
-		placed in the System property list.</P>
-	 <P>Note: <EM>On unix, finding the directory of the script that was launched
-		is relatively easy. However on Windows, I'm not sure the best way of handling
-		this.</EM></P> 
-	 <H2>File Naming Conventions</H2> 
-	 <P>File naming in a cross platform tool is tricky. For maximum portability
-		and understandiblity it is recommended that project files use the following
-		conventions:</P> 
-	 <UL> 
-		<LI>The '/' character is used as a directory seperator</LI> 
-		<LI>The ':' character is used as a path seperator</LI> 
-		<LI>Only relative paths are used</LI> 
-	 </UL> 
-	 <P>However, to allow for maximum flexibility and to allow project authors
-		to use conventions that make sense on their native platform, Ant allows for a
-		representation of file names which has the following rules:</P> 
-	 <UL> 
-		<LI>Directories are seperated by the forward slash ('/') or backwards
-		  slash ('\') character.</LI> 
-		<LI>File names starting with either of the above directory seperators are
-		  considered to be absolute paths.</LI> 
-		<LI>On systems that support multiple file roots (e.g. Windows), a file
-		  name that starts with a single alphabetical character followed by a colon (':')
-		  followed by a directory seperator defines an absolute path where the letter
-		  corresponds with a directory root.</LI> 
-		<LI>File names starting with any other character are considered to be
-		  relative paths. In project files, all relative paths are resolved relative to
-		  the directory in which the project file is located.</LI> 
-	 </UL> 
-	 <P>Absolute paths are not recommended for build files as they reduce the
-		ability to share a project between u sers or machines.</P> 
-	 <P>In situtations where a set of filenames need to be specified, such as
-		defining a classpath, both the colon (':') andsemicolon (';') are allowable
-		characters to seperate each filename. The only case that has to be
-		disambiguated is if a user specifies paths that contain windows style absolute
-		paths. In this case, the colon is not treated as a path seperator if the
-		following rules are met:</P> 
-	 <UL> 
-		<LI>The character two places before the colon is either of the allowable
-		  path seperators (':' or ';') or if the colon is the second character of the
-		  string.</LI> 
-		<LI>The character immediately before the colon is a alphabetic character
-		  in the range a-z or A-Z.</LI> 
-		<LI>The character immediately after the colon is either of the allowable
-		  directory seperators ('/' or '\').</LI> 
-	 </UL> 
-	 <H2>Scripting Model</H2> 
-	 <P>Sam, I'm leaving this to you. </P>
-	 <H2>Runtime Requirements</H2>
-	 <P>The following requirements are system requirements that Ant should have
-		in order to run correctly. We should not bundle in any of these into the
-		distribution of ant.</P>
-	 <UL>
-		<LI>JDK 1.1 or greater</LI>
-		<LI>A JAXP compliant parser on the classpath</LI>
-	 </UL>
-	 <P>Note: <EM>When running on JDK 1.2 or greater, the tools.jar isn't on the
-		classpath by default. There's a few different ways we can take care of this.
-		One is to put it on the classpath in the execute script (I don't like this
-		one). Another is to find the location of tools.jar at runtime and put it on the
-		classpath of class loaders that load in task.jars so that, at least in the
-		scope of the Tasks, the relevant classes are there. </EM></P>
-	 <P></P> 
-	 <P></P> </BODY>
-</HTML>
diff --git a/docs/ant2/requested-features.html b/docs/ant2/requested-features.html
deleted file mode 100644
index 91ea096..0000000
--- a/docs/ant2/requested-features.html
+++ /dev/null
@@ -1,1090 +0,0 @@
-<html>
-<body>
-
-<h2>
-<center>Requested Features for Ant2</center>
-</h2>
-
-<h4>
-I. Things that don't affect the core but are requests for new tasks or
-enhancements to existing tasks.
-</h4>
-
-&quot;Accepted&quot; for a task doesn't mean that
-task will be a core task (or even be supplied by a voter), just that having
-it (as an optional task) would be acceptable.
-<p>
-
-<font face="Arial, Helvetica, sans-serif" size="-1">
-&nbsp;&nbsp;<b>Accepted</b>
-</font>
-
-<blockquote>
-<ul><li>
-Add a new datatype filterset to group token-filters.
-</li></ul>
-</blockquote>
-
-<blockquote>
-<ul><li>
-Make usage of particular filters/filtersets explicit in copy tasks.
-</li></ul>
-</blockquote>
-
-<blockquote>
-<ul><li>
-Make facade tasks for things like <code>&lt;javac&gt;</code>
-(JikesImpl, ModernImpl, etc.).
-(One candidate is <code>&lt;jar&gt;</code>, with implementations for
-a <code>&lt;fastjar&gt;</code>, for example.)
-</li></ul>
-</blockquote>
-
-<blockquote>
-<ul><li>
-Unify multiple similar tasks to use similar forms (eg., all the
-<code>&lt;javacc&gt;</code>-type
-tools).
-</li></ul>
-</blockquote>
-
-<blockquote>
-<ul><li>
-Obfuscating task.
-</li></ul>
-</blockquote>
-
-<blockquote>
-<ul><li>
-Better scripting/notification support so the hooks are available to
-send notifications at certain times.
-</li></ul>
-</blockquote>
-
-<blockquote>
-<ul><li>
-Add an <code>&lt;ant&gt;</code> task that will find build files according
-to a fileset and invoke a common target in them. (<code>&lt;anton&gt;</code>?)
-</li></ul>
-</blockquote>
-
-<blockquote>
-<ul><li>
-Add a JavaApply task that executes a given class with files from a
-fileset as arguments (similar to <code>&lt;apply&gt;</code>).
-</li></ul>
-</blockquote>
-
-<blockquote>
-<ul><li>
-Include some more sophisticated loggers with the Ant distribution &#150;
-especially for sending emails. Make the existing one more flexible
-(stylesheet used by XmlLogger). (Could be part of the same module tasks
-would be developed in?)
-</li></ul>
-</blockquote>
-
-<blockquote>
-<ul><li>
-Better docs (eg., more examples, tutorials, beginner documents, reference
-sheets for tasks, printable version, etc.).
-</li></ul>
-</blockquote>
-
-<blockquote>
-<ul><li>
-RPM task.
-</li></ul>
-</blockquote>
-
-<blockquote>
-<ul><li>
-Task for splitting files (head/tail/split-like functionality).
-</li></ul>
-</blockquote>
-
-<blockquote>
-<ul><li>
-Task to create XMI from Java.
-</li></ul>
-</blockquote>
-
-<blockquote>
-<ul><li>
-Socksified networking tasks, SSH tasks.
-(Peter Donald expressed some legal concerns that might need to be overcome, 
-depending on the implementation.)
-</li></ul>
-</blockquote>
-
-<blockquote>
-<ul><li>
-A reachable task that works much like <code>&lt;available&gt;</code>,
-for network URLs.
-</li></ul>
-</blockquote>
-
-<blockquote>
-<ul><li>
-Task to extract classes from a jar-file that a given class depends on.
-(Based on <code>&lt;depend&gt;</code> or IBM's JAX, for example.)
-</li></ul>
-</blockquote>
-
-<blockquote>
-<ul><li>
-Unify <code>&lt;available&gt;</code> and <code>&lt;uptodate&gt;</code>
-into a more general
-<code>&lt;condition&gt;</code> task &#150; support
-<code>AND</code>/<code>OR</code> of
-several tests here.
-(Will need more discussion because of vote by Peter Donald.)
-</li></ul>
-</blockquote>
-
-<blockquote>
-<ul><li>
-JSP-compilation task. (Sounds like a candidate for a facade task.)
-</li></ul>
-</blockquote>
-
-<blockquote>
-<ul><li>
-URL-spider task that checks links for missing content or server errors.
-</li></ul>
-</blockquote>
-
-<font face="Arial, Helvetica, sans-serif" size="-1">
-&nbsp;&nbsp;<b>Rejected</b>
-</font>
-<blockquote>
-<ul><li>
-Make the default logger's output clear, informative, and terse. (Rejectors
-think it already is.)
-</blockquote>
-</li></ul>
-
-<blockquote>
-<ul><li>
-Add an attribute to <code>&lt;property&gt;</code> to read in an entire file
-as the value of a property.
-</li></ul>
-</blockquote>
-
-<blockquote>
-<ul><li>
-Make PATH-handling consistent. Every task that has a PATH attribute
-must also accept references to PATHs.
-</li></ul>
-</blockquote>
-
-<br>
-<h4>
-II. Goals that need to be abstract until we get into design
-decisions.
-</h4>
-
-During the discussion it became obvious that some things from this list
-are goals for Ant and some should be guidelines for developers.
-Therefore, there are two flavors, &quot;Accepted&quot; and
-&quot;Accepted As Guideline&quot;.
-<p>
-
-<font face="Arial, Helvetica, sans-serif" size="-1">
-&nbsp;&nbsp;<b>Accepted</b>
-</font>
-
-<blockquote>
-<ul><li>
-Provide a clear mission statement for Ant.
-</li></ul>
-</blockquote>
-
-<blockquote>
-<ul><li>
-Main goals<b>:</b> simplicity, understandability, extensibility.
-</li></ul>
-</blockquote>
-
-<blockquote>
-<ul><li>
-Remove magic properties if at all humanly possible.
-</li></ul>
-</blockquote>
-
-<blockquote>
-<ul><li>
-Remove as much dependency on native scripts as possible.
-</li></ul>
-</blockquote>
-
-<blockquote>
-<ul><li>
-Clean object model (ie., Project/Target/Task).
-</li></ul>
-</blockquote>
-
-<blockquote>
-<ul><li>
-Good event model to integrate well with IDE/GUI/etc.
-</li></ul>
-</blockquote>
-
-<blockquote>
-<ul><li>
-Use a consistent naming scheme for attributes across all tasks.
-</li></ul>
-</blockquote>
-
-<blockquote>
-<ul><li>
-Keep build-file syntax as compatible to Ant1 as possible
-(ie., don't break something just because we can).
-</li></ul>
-</blockquote>
-
-<blockquote>
-<ul><li>
-Keep the interface for tasks as similar to that of Ant1 as
-possible (ie., don't break something just because we can).
-</li></ul>
-</blockquote>
-
-<blockquote>
-<ul><li>
-Ant should be cancelable.
-</li></ul>
-</blockquote>
-
-<font face="Arial, Helvetica, sans-serif" size="-1">
-&nbsp;&nbsp;<b>Accepted As Guideline</b>
-</font>
-
-<blockquote>
-<ul><li>
-No commit of new features without documentation.
-</li></ul>
-</blockquote>
-
-<blockquote>
-<ul><li>
-No commit of new features without test-cases.
-</li></ul>
-</blockquote>
-
-<br>
-<h4>
-III. Things that are simple and easy to implement, where we expect the
-committers to agree.
-</h4>
-
-<font face="Arial, Helvetica, sans-serif" size="-1">
-&nbsp;&nbsp;<b>Accepted</b>
-</font>
-
-<blockquote>
-<ul><li>
-Namespace support so different concerns can occupy different namespaces
-from Ant (thus, SAX2/JAXP1.1).
-</li></ul>
-</blockquote>
-
-<blockquote>
-<ul><li>
-Java2
-</li></ul>
-</blockquote>
-
-<blockquote>
-<ul><li>
-Remove all deprecated methods, attributes, tasks.
-</li></ul>
-</blockquote>
-
-<blockquote>
-<ul><li>
-Allow all datatypes to be defined anywhere (ie., as children of
-project as well as of target).
-</li></ul>
-</blockquote>
-
-<blockquote>
-<ul><li>
-Make properties fully dynamic (ie., allow their value to be reassigned).
-</li></ul>
-</blockquote>
-
-<blockquote>
-<ul><li>
-Unify the namespace of all data types (ie., properties + filesets +
-patternsets + filtersets).
-</li></ul>
-</blockquote>
-
-<blockquote>
-<ul><li>
-Add a user-defined message if a target will be skipped as a
-result of the specified <code>if/unless</code>.
-</li></ul>
-</blockquote>
-
-<blockquote>
-<ul><li>
-Allow user datatypes to be defined via a <code>&lt;typedef&gt;</code>
-similar to <code>&lt;taskdef&gt;</code>.
-</li></ul>
-</blockquote>
-
-<br>
-<h4>
-IV. Things we probably agree on but need to discuss the details or
-decide between several possible options.
-</h4>
-
-&quot;Accepted&quot; means the goal/idea is fine, not that a decision on a
-particular implementation has been made.
-<p>
-
-<font face="Arial, Helvetica, sans-serif" size="-1">
-&nbsp;&nbsp;<b>Accepted</b>
-</font>
-
-<blockquote>
-<ul><li>
-The ability for GUI/IDE tools to integrate easily with object model
-without reinventing the wheel and writing their own parser (which
-Antidote was forced to do). 
-(Two suggested solutions were allowing GUI developers to extend
-the object model (ie., GUITask extends Task) or to have Task as an
-interface (ie., GUITask implements Task). This way, the GUI tasks could
-be W3C DOM elements, have property vetoers/listeners, etc.)
-</li></ul>
-</blockquote>
-
-<blockquote>
-<ul><li>
-Support for numerous front-ends &#150; from command-line over GUI to servlets.
-(Corollary of the above?)
-</li></ul>
-</blockquote>
-
-<blockquote>
-<ul><li>
-Fully interpreted at run-time. (This almost requires some form of
-abstraction/proxy that stands in place of tasks till it is
-interpreted. This can be hash-tables/simple DOM-like model/whatever.)
-</li></ul>
-</blockquote>
-
-<blockquote>
-<ul><li>
-Provide utility classes to aid in building tasks (ie., like
-<code>&lt;uptodate&gt;</code> functionality abstracted).
-(Need to become more specific here.)
-</li></ul>
-</blockquote>
-
-<blockquote>
-<ul><li>
-Make ant-call a low-cost operation so it can do certain
-optional/template-like operations.
-(Corollary of "fully interpreted at run-time"?)
-</li></ul>
-</blockquote>
-
-<blockquote>
-<ul><li>
-Allow facilities to build projects from multiple sources (ie., CSS+XML,
-XSLT+XML, Velocity+text or database, from inside jars or normal 
-<code>build.xml</code> files, etc.)
-(Allow the project tree to be built dynamically.)
-</li></ul>
-</blockquote>
-
-<blockquote>
-<ul><li>
-Move to a system that allows docs to be generated &#150; doc snippets
-should be included with the tasks they document.
-(Which DTD? Which tools for generation?)
-</li></ul>
-</blockquote>
-
-<blockquote>
-<ul><li>
-Allow tasks to be loaded from jars. (Use
-either an XML file in <code>TSK-INF/taskdefs.xml</code> or a
-manifest file.)
-</li></ul>
-</blockquote>
-
-<blockquote>
-<ul><li>
-Allow documentation to be stored in <code>.tsk</code> jars.
-(Corollary of the above two points?)
-</li></ul>
-</blockquote>
-
-<blockquote>
-<ul><li>
-Separate tasks into <code>.tsk</code> jars somehow.
-(Decide on categories.
-Probably via function &#150; ie., java tasks, file tasks, EJB tasks, etc.)
-</li></ul>
-</blockquote>
-
-<blockquote>
-<ul><li>
-Make having separate build-files easy (<i>&#224; la</i> AntFarm) and importing different
-projects a breeze.
-</li></ul>
-</blockquote>
-
-<blockquote>
-<ul><li>
-Provide support for user-defined task configurations &#150; (ie., give
-users the ability to specify a default value for attributes (eg., always
-use <code>debug="true"</code> in <code>&lt;javac&gt;</code> unless
-something else has been specified). 
-(Three ideas so far<b>:</b> a CSS-like language,
-a <code>&lt;taskconfig&gt;</code> element, or
-properties following a specific naming scheme.)
-</li></ul>
-</blockquote>
-
-<blockquote>
-<ul><li>
-Support more control over the properties that are going to be passed
-to subprojects (modules).
-</li></ul>
-</blockquote>
-
-<blockquote>
-<ul><li>
-Task to prompt for user input.
-(Does affect core, as we need a means to request input from the front-end.)
-</li></ul>
-</blockquote>
-
-<blockquote>
-<ul><li>
-Add CVS login feature.
-(Requires handling of user input.)
-</li></ul>
-</blockquote>
-
-<blockquote>
-<ul><li>
-Easier installation process. GUI, maybe webstart from the homepage.
-This includes asking the user whether he wants to use optional tasks
-and downloads the required libs, automatic upgrades and so on.
-
-Self-extracting jar installer<b>:</b>
-<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<code>java -jar jakarta-ant-1.3-bin.jar</code>
-<br>
-Prompts for destination directory, extracts archive, fixes all 
-text files with <code>&lt;fixCRLF&gt;</code> task<b>;</b> on UNIX,
-makes scripts executable.  
-Could also modify ant scripts with the location of <code>ANT_HOME</code>.
-</li></ul>
-</blockquote>
-
-<blockquote>
-<ul><li>
-Logo for Ant.
-</li></ul>
-</blockquote>
-
-<blockquote>
-<ul><li>
-Detach Ant from <code>System.err</code>/<code>.in</code>/<code>.out</code>.
-(Beware of problems with spawned processes.)
-</li></ul>
-</blockquote>
-
-<blockquote>
-<ul><li>
-Build-files should be declarative in nature.
-</li></ul>
-</blockquote>
-
-<font face="Arial, Helvetica, sans-serif" size="-1">
-&nbsp;&nbsp;<b>Rejected</b>
-</font>
-<blockquote>
-<ul><li>
-It should be possible to modify details of the actual build (e.g. classpath,
-compiler used, etc.) without the need to change the build specification.
-(Do <code>build.compiler</code> and <code>build.sysclasspath</code>
-cover everything, or do we need to add more stuff like this?)
-</li></ul>
-</blockquote>
-
-<blockquote>
-<ul><li>
-Better sub-project handling
-(whatever that means in detail).
-</li></ul>
-</blockquote>
-
-<br>
-<h4>
-V. Things we probably don't agree on. 
-</h4>
-<i><b>Datatypes</b></i>
-
-<p>
-<font face="Arial, Helvetica, sans-serif" size="-1">
-&nbsp;&nbsp;<b>Accepted</b>
-</font>
-
-<blockquote>
-<ul><li>
-Allow <code>&lt;include&gt;/&lt;exclude&gt;</code>
-to work with multiple characteristerics of a file
-(ie., include into fileset if file is readable, modified after 29th of Feb,
-has a name that matches the pattern <code>&quot;**/*.java&quot;</code> and
-the property <code>foo.present</code> is set. Something similar to<b>:</b>
-<pre>
-  &lt;include&gt;
-    &lt;item-filter type="name" value="**/*.java"/&gt;
-    &lt;item-filter type="permission" value="r"/&gt;
-    &lt;!-- could optionally be directory or some other system specific features --&gt;
-    &lt;item-filter type="type" value="file"/&gt;
-    &lt;item-filter type="modify-time"
-                 operation="greater-than" 
-                 value="29th Feb 2003"/&gt;
-  &lt;/include&gt;
-</pre>
-</li></ul>
-</blockquote>
-
-<blockquote>
-<ul><li>
-Provide support for non-hardwired (ie., loadable) low-level 
-components (mappers/itemset-filters/converters). Allow them to be 
-loaded in either globally or via a new classloader.
-</li></ul>
-</blockquote>
-
-<blockquote>
-<ul><li>
-Provide support for non-hardwired (ie., loadable) converters.
-<br>
-Q<b>:</b> What is a converter? Is this an implementation detail?
-<br>
-A<b>:</b> Not an implementation detail, but a way to extend the engine
-to convert more datatypes. Currently, we have a fixed set that is 
-expanded on occasion (ie., includes primitive types + File). Instead
-of spreading converting code throughout the tasks, it can be centralized 
-into one component and used by the engine. This becomes particularly 
-relevent if you build Ant-based testing systems and use Ant in certain
-web-related areas.
-</li></ul>
-</blockquote>
-
-<blockquote>
-<ul><li>
-Set-arithmetic for fileset/patternset/*set.
-</li></ul>
-</blockquote>
-
-<blockquote>
-<ul><li>
-Inheritance of Ant properties/datatypes/context/etc. in project hierarchy.
-</li></ul>
-</blockquote>
-
-<font face="Arial, Helvetica, sans-serif" size="-1">
-&nbsp;&nbsp;<b>Rejected</b>
-</font>
-
-<blockquote>
-<ul><li>
-Allow mappers to be genericized so that particular features can be modified 
-during mapping. Something similar to<b>:</b>
-<pre>
-  &lt;fileset ...&gt;
-    &lt;include name="*.sh"/&gt;
-    &lt;mapper type="unix-permissions"&gt;
-      &lt;param name="user" value="ant"/&gt;
-      &lt;param name="group" value="ant"/&gt;
-      &lt;param name="mod" value="755"/&gt;
-    &lt;/mapper&gt;
-  &lt;/fileset&gt;
-</pre>
-</li></ul>
-</blockquote>
-
-<blockquote>
-<ul><li>
-Provide datatypes through property tag and remove need for separate
-free-standing entities. That is<b>:</b><br>
-<pre>
-  &lt;property name="foo"&gt;
-    &lt;fileset dir="blah"&gt;
-      &lt;include name="*/**.java" /&gt;
-    &lt;/fileset&gt;
-  &lt;/property&gt;
-</pre>
-</li></ul>
-</blockquote>
-
-<blockquote>
-<ul><li>
-Make all datatypes interfaces to allow them to be customized in many
-ways.
-</li></ul>
-</blockquote>
-
-<blockquote>
-<ul><li>
-Inheritance between Ant datatypes (ie., fileset A inherits from
-fileset B (includes all entries in A).
-</li></ul>
-</blockquote>
-
-<blockquote>
-<ul><li>
-Homogenize notion of PATHs and filesets.
-</li></ul>
-</blockquote>
-
-<i><b>Ant's goals</b></i>
-
-<p>
-<font face="Arial, Helvetica, sans-serif" size="-1">
-&nbsp;&nbsp;<b>Accepted</b>
-</font>
-
-<blockquote>
-<ul><li>
-Provide support for CJAN.
-<br>
-Q: In what way?<br>
-A: Probably by supplying a set of tasks that download versioned 
-binaries and their associated dependencies, caching the downloads
-in a known place and updating binaries when required.
-(&quot;When required&quot; being indicated by a change in property values).
-</li></ul>
-</blockquote>
-
-<font face="Arial, Helvetica, sans-serif" size="-1">
-&nbsp;&nbsp;<b>Rejected</b> (as a primary goal)
-</font>
-
-<blockquote>
-<ul><li>
-Make it possible to re-use the task engine for other things
-(ie., Installshield-type app, Peter's cron-server, and other task-based
-operations).
-</li></ul>
-</blockquote>
-
-<i><b>Class-loading</b></i>
-
-<p>
-<font face="Arial, Helvetica, sans-serif" size="-1">
-&nbsp;&nbsp;<b>Rejected</b>
-</font>
-
-<blockquote>
-<ul><li>
-Force resolution of classes on loading, to identify class-loader 
-issues early (at least in global classloader).
-</li></ul>
-</blockquote>
-
-
-<blockquote>
-<ul><li>
-Ignore any classes contained in the damned ext dirs of a
-JVM &#150; possibly by launching with something like<b>:</b>
-<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<code>jar -Djava.ext.dir=foo -jar ant.jar</code>
-<br>
-(Accepted if optional.)
-</li></ul>
-</blockquote>
-
-<p>
-<i><b>Workspace/sub-build issues</b></i>
-
-<p>
-<font face="Arial, Helvetica, sans-serif" size="-1">
-&nbsp;&nbsp;<b>Accepted</b>
-</font>
-
-<blockquote>
-<ul><li>
-Create the concept of workspace so that projects can be built in a
-DAG and thus enable projects like Catalina/Tomcat to have an easy
-build process. It also helps CJAN to a lesser degree and would
-partially solve the jars-in-CVS thing.
-</li></ul>
-</blockquote>
-
-<blockquote>
-<ul><li>
-Allow a target to depend on a target in another build-file.  
-</li></ul>
-</blockquote>
-
-<p>
-<font face="Arial, Helvetica, sans-serif" size="-1">
-&nbsp;&nbsp;<b>Rejected</b>
-</font>
-
-<blockquote>
-<ul><li>
-Project inheritance. (What's this?)
-</li></ul>
-</blockquote>
-
-<blockquote>
-<ul><li>
-Target inheritance. That is, the ability to include targets from other 
-project files, overriding them as necessary (so, cascading project
-files).
-</li></ul>
-</blockquote>
-
-<blockquote>
-<ul><li>
-Add an attribute to <code>&lt;ant&gt;</code> to feed back the environment
-(properties and taskdefs) from the child build to the parent.
-</li></ul>
-</blockquote>
-
-<blockquote>
-<ul><li>
-Allow a target to reference properties defined in another build-file.
-</li></ul>
-</blockquote>
-
-<p>
-<i><b>Documentation system</b></i>
-
-<p>
-<font face="Arial, Helvetica, sans-serif" size="-1">
-&nbsp;&nbsp;<b>Accepted</b> (with no decision on which system to use)
-</font>
-
-<blockquote>
-<ul><li>
-Generate docs by Anakia/XSLT.
-(Corollary of "move to a system that allows docs to be generated"?)
-</li></ul>
-</blockquote>
-
-<p>
-<i><b>Task API</b></i>
-
-<p>
-<font face="Arial, Helvetica, sans-serif" size="-1">
-&nbsp;&nbsp;<b>Accepted</b>
-</font>
-
-<blockquote>
-<ul><li>
-Tasks provide some way to identify their attributes from the outside. 
-
-Possible solutions include a special method like <code>getProperties()</code>,
-an external describing file shipping with the task class or special
-Javadoc comments parsed by a custom doclet. Whatever the method, it
-should not impose any cost on run-time, as it is only used a small 
-percentage of the time (design-time).  
-</li></ul>
-</blockquote>
-
-<blockquote>
-<ul><li>
-Provide <code>&quot;failonerror&quot;</code>-like functionality to all tasks.
-(Provide this as an aspect?? Much like logging aspect or classloader aspect).
-</li></ul>
-</blockquote>
-
-<font face="Arial, Helvetica, sans-serif" size="-1">
-&nbsp;&nbsp;<b>Rejected</b>
-</font>
-
-<blockquote>
-<ul><li>
-Tasks should have access to its own XML representation.
-</blockquote>
-</li></ul>
-
-<blockquote>
-<ul><li>
-Task level if and unless attributes.
-</li></ul>
-</blockquote>
-
-<blockquote>
-<ul><li>
-Allow tasks to find out, whether another task has completed successfully.
-</li></ul>
-</blockquote>
-
-<p>
-<i><b>Logging</b></i>
-
-<blockquote>
-<ul><li>
-Allow build-file writers to modify logging (verbosity, for example)
-on a target-by-target or task-by-task basis.
-</li></ul>
-</blockquote>
-
-<blockquote>
-<ul><li>
-Make loggers configurable via build.xml.
-</li></ul>
-</blockquote>
-
-<p>
-<i><b>Multi-threading</b></i>
-
-<p>
-<font face="Arial, Helvetica, sans-serif" size="-1">
-&nbsp;&nbsp;<b>Accepted</b>
-</font>
-
-<blockquote>
-<ul><li>
-Multi-threaded execution of tasks within the same target.
-</li></ul>
-</blockquote>
-
-<font face="Arial, Helvetica, sans-serif" size="-1">
-&nbsp;&nbsp;<b>Rejected</b>
-</font>
-
-<blockquote>
-<ul><li>
-Multithreaded execution of targets.
-</li></ul>
-</blockquote>
-
-<p>
-<i><b>Procedural versus purely declarative</b></i>
-
-<p>
-<font face="Arial, Helvetica, sans-serif" size="-1">
-&nbsp;&nbsp;<b>Rejected</b>
-</font>
-
-<blockquote>
-<ul><li>
-Simple flow-control (<code>if-then-else</code>, <code>for</code>)
-</li></ul>
-</blockquote>
-
-<blockquote>
-<ul><li>
-Targets should be like methods, including a return value.
-</li></ul>
-</blockquote>
-
-<blockquote>
-<ul><li>
-Build-files should be purely declarative.
-</li></ul>
-</blockquote>
-
-<p>
-<i><b>Properties</b></i>
-
-<p>
-<font face="Arial, Helvetica, sans-serif" size="-1">
-&nbsp;&nbsp;<b>Accepted</b>
-</font>
-
-<blockquote>
-<ul><li>
-Ability to manage scoping of properties in general
-(ie., target/project/workspace).
-</li></ul>
-</blockquote>
-
-<p>
-<i><b>Templates</b></i>
-
-<p>
-<font face="Arial, Helvetica, sans-serif" size="-1">
-&nbsp;&nbsp;<b>Rejected</b>
-</font>
-
-<blockquote>
-<ul><li>
-It should be possible to provide general/(template?) build
-specifications, and to declare, for a concrete item, that it should be
-built according to such a general specification.
-</ul></li>
-</blockquote>
-
-<p>
-<i><b>XML issues</b></i>
-
-<p>
-<font face="Arial, Helvetica, sans-serif" size="-1">
-&nbsp;&nbsp;<b>Accepted</b>
-</font>
-
-<blockquote>
-<ul><li>
-A built-in mechanism to include build-file fragments &#150; something
-that doesn't use <code>SYSTEM</code> entities at all and therefore is
-XSchema-friendly, allows for property expansions, etc.
-</li></ul>
-</blockquote>
-
-<blockquote>
-<ul><li>
-Allow Ant to farm out attributes and elements that are <i>not</i>
-in the Ant namespace to other components (ie., hand <code>doc:</code> elements
-to the Documentation component or <code>log:</code> attributes to the Log
-policy component, etc.
-</li></ul>
-</blockquote>
-
-<font face="Arial, Helvetica, sans-serif" size="-1">
-&nbsp;&nbsp;<b>Rejected</b>
-</font>
-
-<blockquote>
-<ul><li>
-Let Ant ignore &#150; but warn &#150; if unknown XML elements or attributes
-occur in a build-file.
-</li></ul>
-</blockquote>
-
-<p>
-<i><b>Core extensions</b></i>
-
-<p>
-<font face="Arial, Helvetica, sans-serif" size="-1">
-&nbsp;&nbsp;<b>Accepted</b>
-</font>
-
-<blockquote>
-<ul><li>
-Allow sequence to be specified in <code>&quot;depends&quot;</code> attribute,
-or enhance <code>&lt;antcall&gt;</code> to work with current list of executed
-targets.
-</li></ul>
-</blockquote>
-
-<blockquote>
-<ul><li>
-Provide a way to define the order in which targets that a given target
-depends upon get executed. (Same as above?)
-</li></ul>
-</blockquote>
-
-<blockquote>
-<ul><li>
-Support nesting tasks into other elements &#150; not just as children of
-target &#150; as proposed by Thomas Christen in
-<a href http://marc.theaimsgroup.com/?l=ant-dev&m=98130655812010&w=2>
-his mail message</a>.
-</li></ul>
-</blockquote>
-
-<blockquote>
-<ul><li>
-Define task contexts that define various common aspects (logging,
-failure handling, etc.), and assign them to tasks.
-</li></ul>
-</blockquote>
-
-<font face="Arial, Helvetica, sans-serif" size="-1">
-&nbsp;&nbsp;<b>Rejected</b>
-</font>
-
-<blockquote>
-<ul><li>
-Allow named tasks to be defined by <code>&lt;script&gt;</code> elements.
-</li></ul>
-</blockquote>
-
-<blockquote>
-<ul><li>
-Specify an OnFail task or target that runs in case of a build
-failure.
-</li></ul>
-</blockquote>
-
-<blockquote>
-<ul><li>
-Make <code>if/unless</code> attributes check for the value of a property, not
-only its existance.
-</li></ul>
-</blockquote>
-
-<blockquote>
-<ul><li>
-Check for more than one condition in <code>if/unless</code> attributes.
-</li></ul>
-</blockquote>
-
-<p>
-<i><b>Organization</b></i>
-
-<p>
-<font face="Arial, Helvetica, sans-serif" size="-1">
-&nbsp;&nbsp;<b>Rejected</b>
-</font>
-
-<blockquote>
-<ul><li>
-Separate CVSes and code hierarchies for<b>:</b>
-</li></ul>
-<ul type="circle">
-<li>task engine [org.apache.task.*]</li>
-<li>project engine (ie., model of targets/projects/workspaces) +
-support/utility classes [org.apache.ant.*]</li>
-<li>core tasks (ie., tasks supported by Ant contributors) [org.apache.???]</li>
-</ul>
-</blockquote>
-
-<p>
-<i><b>Miscellaneous</b></i>
-
-<p>
-<font face="Arial, Helvetica, sans-serif" size="-1">
-&nbsp;&nbsp;<b>Accepted</b>
-</font>
-
-<blockquote>
-<ul><li>
-Internationalization.
-</li></ul>
-</blockquote>
-
-<p>
-<h4>
-VI. Things that were submitted late
-</h4>
-
-<p>
-<font face="Arial, Helvetica, sans-serif" size="-1">
-&nbsp;&nbsp;<b>Rejected</b>
-</font>
-
-<blockquote>
-<ul><li>
-Integration of the <code>&lt;depend&gt;</code> and <code>&lt;javac&gt;</code>
-tasks.
-</li></ul>
-</blockquote>
-
-<blockquote>
-<ul><li>
-Recursive property resolution (ie., resolving <code>${dist.${name}.dir}</code>)
-</li></ul>
-</blockquote>
-
-</body>
-</html>
-
diff --git a/docs/ant2/requested-features.txt b/docs/ant2/requested-features.txt
deleted file mode 100644
index f6a6d22..0000000
--- a/docs/ant2/requested-features.txt
+++ /dev/null
@@ -1,766 +0,0 @@
-Status:
-=======
-
-The committers have cast votes on all items (except those that came in
-too late) and the results are listed below - the next step will be a
-design phase.
-
-This list of items will be summarized into an Ant2 specification soon.
-
-I. Things that don't affect the core but are requests for new tasks or
-enhancements of existing tasks.
-======================================================================
-
-[ACCEPTED] for a task doesn't mean that task will be core tasks (or
-even be supplied by a voter), just that having them (as optional
-tasks) would be acceptable.
-
-* Add a new datatype filterset to group token-filters 
-
-  [ACCEPTED]
-
-* make usage of particular filters/filtersets explicit in copy tasks
-
-  [ACCEPTED]
-
-* make facade tasks for things like javac (JikesImpl, ModernImpl etc)
-
-  One candidate is jar with implementations for fastjar
-  for example.
-
-  [ACCEPTED]
-
-* unify multiple similar tasks to use similar forms (ie all the javacc
-  type tools)
-
-  [ACCEPTED]
-
-* Obfuscating task
-
-  [ACCEPTED]
-
-* Add an <ant> task that will find build files according to a fileset
-  and invokes a common target in them.
-
-  <anton>?
-
-  [will need more discussion because of votes by Peter Donald and
-                                                 Stefan Bodewig]
-
-  [finally ACCEPTED]
-
-* Add a JavaApply task that executes a given class with files from a
-  fileset as arguments - similar to <apply>.
-
-  [will need more discussion because of votes by Peter Donald and
-                                                 Stefan Bodewig]
-
-  [finally ACCEPTED]
-
-* Include some more sophisticated loggers with the Ant distribution -
-  especially for sending emails. Make the existing one more flexible
-  (stylesheet used by XmlLogger).
-
-  Could be part of the same module tasks would be developed in?
-
-  [will need more discussion because of vote by Conor MacNeill]
-
-  [finally ACCEPTED]
-
-* make the default logger's output clear, informative, and terse.
-
-  Actually, this is a little bit abstract, but doesn't apply to the
-  core either.
-
-  [will need more discussion because of vote by Conor MacNeill]
-
-  [REJECTED - vetoes by Conot MacNeill and Stefan Bodewig]
-
-* Better docs.
-
-  More examples. Tutorials, beginner documents, reference sheets for
-  tasks, printable version.
-
-  [ACCEPTED]
-
-* RPM task.
-
-  [ACCEPTED]
-
-* add an attribute to <property> to read in an entire file as the
-  value of a property.
-
-  [will need more discussion because of vote by Peter Donald]
-
-  [REJECTED - veto by Peter Donald]
-
-* Task for splitting files (head/tail/split like functionality).
-
-  [ACCEPTED]
-
-* Task to create XMI from Java.
-
-  [ACCEPTED]
-
-* socksified networking tasks, SSH tasks.
-
-  [Peter Donald expressed some legal concerns that might be overcome, 
-                depending on the implementation]
-
-* a reachable task that works much like available for network URLs.
-
-  [ACCEPTED]
-
-* make PATH handling consistent. Every task that has a PATH attribute
-  must also accept references to PATHs.
-
-  [will need more discussion because of vote by Stefan Bodewig]
-
-  [REJECTED - vetoes by Conor MacNeill, Glenn McAllister and Stefan Bodewig]
-
-* Task to extract classes from a JAR file that a given class depends
-  on.
-
-  Based on <depend> or IBM's JAX for example.
-
-  [ACCEPTED]
-
-* Unify <available> and <uptodate> into a more general <condition>
-  task, support AND/OR of several tests here.
-
-  [will need more discussion because of vote by Peter Donald]
-
-* jsp-compilation task
-
-  Sounds like a candidate for a facade task.
-
-  [ACCEPTED]
-
-* URL-spider task that checks links for missing content or server errors
-
-  [ACCEPTED]
-
-II. Abstract goals that need to be abstract until we get into design
-decisions.
-======================================================================
-
-During discussion it became obvious, that some things from this list
-are goals for Ant and some should be guidelines for developers,
-therefore there are two flavors, [ACCEPTED] and [ACCEPTED AS GUIDELINE].
-
-* Provide a clear mission statement for Ant.
-
-  [ACCEPTED]
-
-* Main goals: Simplicity, Understandability, Extensibility
-
-  [ACCEPTED]
-
-* remove magic properties if at all humanly possible
-
-  [ACCEPTED]
-
-* remove as much dependency on native scripts as possible.
-
-  [ACCEPTED]
-
-* clean object model (ie Project/Target/Task)
-
-  [ACCEPTED]
-
-* good event model to integrate well with IDE/GUI/whatever
-
-  [ACCEPTED]
-
-* use a consistent naming scheme for attributes across all tasks
-
-  [ACCEPTED]
-
-* keep build file syntax as compatible to Ant1 as possible -
-  i.e. don't break something just because we can.
-
-  [ACCEPTED]
-
-* keep the interface for Tasks as similar to the one of Ant1 as
-  possible - i.e. don't break something just because we can.
-
-  [ACCEPTED]
-
-* Ant should be cancelable
-
-  [ACCEPTED]
-
-* no commit of new features without documentation
-
-  [ACCEPTED AS GUIDELINE]
-
-* no commit of new features without testcases
-
-  [ACCEPTED AS GUIDELINE]
-
-III. Things that are simple, easy to implement, where we expect the
-committers to agree
-======================================================================
-
-* namespace support so different concerns can occupy different namespaces
-  from ant (thus SAX2/JAXP1.1)
-
-  [ACCEPTED]
-
-* Java2
-
-  [ACCEPTED]
-
-* remove all deprecated methods, attributes, tasks
-
-  [ACCEPTED]
-
-* allow all datatypes to be defined anywhere - i.e. as children of
-  project as well as of target.
-
-  [ACCEPTED]
-
-* make properties fully dynamic, i.e. allow their value to be reassigned
-
-  [will need more discussion because of vote by Glenn McAllister and
-                                                Conor MacNeill]
-
-  [finally ACCEPTED]
-
-* unify the namespace of all data types (ie properties + filesets +
-  patternset + filtersets).
-
-  [ACCEPTED]
-
-* add a user defined message if a target will be skipped because the
-  if/unless attribute says so.
-
-  [ACCEPTED]
-
-* allow user-datatypes to be defined via a <typedef> similar to <taskdef>.
-
-  [ACCEPTED]
-
-IV. Things we probably agree upon but need to discuss the details or
-decide between several possible options.
-======================================================================
-
-[ACCEPTED] means, the goal/idea is fine, not that a decission on a
-particular implementation has been made.
-
-* The ability for GUI/IDE tools to integrate easily with object model
-  without reinventing the wheel and writing their own parser (which
-  antidote was forced to do). 
-
-  Two suggested solutions were allowing GUI developers to extend
-  object model (ie GUITask extends Task) or to have Task as interface
-  (ie GUITask implements Task). This way the GUI tasks could be W3C
-  DOM Elements, have property vetoers/listeners etc.
-
-  [ACCEPTED]
-
-* support for numerous frontends - from command line over GUI to servlets
-
-  corollary of the above?
-
-  [ACCEPTED]
-
-* Fully interpreted at runtime. This almost requires some form of
-  abstraction/proxy that stands in place of tasks till it is
-  interpreted.  This can be hashtables/simple dom-like model/whatever
-
-  [ACCEPTED]
-
-* provide utility classes to aid in building tasks. ie like up-to-date
-  functionality abstracted
-
-  Need to become more specific here.
-
-  [ACCEPTED]
-
-* make ant-call a low cost operations so it can certain
-  optional/template-like operations
-
-  corollary of "fully interpreted at runtime"?
-
-  [ACCEPTED]
-
-* allow facilities to build projects from multiple sources. ie CSS+xml
-  or XSLT+ XML or Velocity+text or database or from inside jars or normal 
-  build.xmls etc.
-
-  allow the project tree to be built dynamically.
-
-  [ACCEPTED]
-
-* move to a system that allows docs to be generated - doc snippets
-  should be included with the tasks they document.
-
-  Which DTD? Which tools for generation?
-
-  [ACCEPTED]
-
-* allow tasks to be loaded from jars. tasks should be indicated by
-  either xml file in TSK-INF/taskdefs.xml or manifest file.
-
-  [ACCEPTED]
-
-* allow documentation to be stored in .tsk jars
-
-  corollary of the two points above?
-
-  [ACCEPTED]
-
-* better scripting/notification support so the hooks are available to
-  send notifications at certain times.
-
-  Which hooks and where?
-
-  [will need more discussion because of vote by Peter Donald and
-                                                Simeon Fitch]
-
-  [REJECTED - vetoes by Conor MacNeill, Peter Donald and Simeon Fitch]
-
-* separate tasks into .tsk jars somehow. (Probably via function - ie
-  java tasks, file tasks, ejb tasks).
-
-  Decide on categories.
-
-  [will need more discussion because of vote by Conor MacNeill]
-
-  [finally ACCEPTED]
-
-* make separate build files easy (ala AntFarm) and importing different
-  projects a breeze
-
-  [ACCEPTED]
-
-* provide support for user defined task configurations - i.e. give
-  users the ability to specify a default value for attributes (always
-  use debug="true" in <javac> unless something else has been
-  specified). 
-
-  Three ideas so far: a CSS like language, a <taskconfig> element,
-  properties following a specific naming scheme.
-
-  [ACCEPTED]
-
-* support more control over the properties that are going to be passed
-  to subprojects (modules)
-
-  [ACCEPTED]
-
-* Ask for a new CVS module for Ant tasks.
-
-  We need to define rules for this to work - maybe the rules proposed
-  for the commons project could give us a start.
-
-  [will need more discussion because of vote by Conor MacNeill]
-
-  [REJECTED - vetoes by Conor MacNeill and Glenn McAllister]
-
-* It should be possible to modify details of the actual build (e.g. classpath,
-  used compiler) without the need to change the build specification.
-
-  Do build.compiler and build.sysclasspath cover everything or do we
-  need to add more stuff like this?
-
-  [will need more discussion because of vote by Conor MacNeill]
-
-  [REJECTED - veto by Conor MacNeill]
-
-* Task to prompt for user input.
-
-  Does affect core as we need a means to request input from the Frontend.
-
-  [ACCEPTED]
-
-* Add cvs login feature.
-
-  Requires handling of user input.
-
-  [ACCEPTED]
-
-* Easier installation process. GUI - maybe webstart from the homepage.
-
-  This includes asking the user whether he wants to use optional tasks
-  and downloads the required libs. Automatic upgrades and so on.
-
-  Self-extracting jar installer: java -jar jakarta-ant-1.3-bin.jar. 
-  Prompts for destination directory, extracts archive, fixes all 
-  text files with fixCRLF task; on UNIX, makes scripts executable.  
-  Could also modify ant scripts with the location of ANT_HOME.
-
-  [ACCEPTED]
-
-* Logo for Ant.
-
-  [ACCEPTED]
-
-* detach Ant from System.err/.in/.out.
-
-  Beware of problems with spawned processes.
-
-  [ACCEPTED]
-
-* better subproject handling
-
-  Whatever that means in detail.
-
-  [will need more discussion because of vote by Conor MacNeill]
-
-  [REJECTED - vetoes by Conor MacNeill and Stefan Bodewig]
-
-* build files should be declarative in nature
-
-  [ACCEPTED]
-
-V. Things we probably don't agree on. 
-======================================================================
-
-[DISC] Datatypes
-----------------
-
- * Allow mappers to be genericised so that particular features can be modified 
- during mapping. Something similar to 
- 
- <fileset ...>
-   <include name="*.sh"/>
-   <mapper type="unix-permissions">
-     <param name="user" value="ant"/>
-     <param name="group" value="ant"/>
-     <param name="mod" value="755"/>
-   </mapper>
- </fileset>
-
- [REJECTED - vetoes by Stefan Bodewig and Conor MacNeill, not enough
-             positive votes anyway.]
-
- * Allow include/exclude tow work with multiple characteristerics of a file.
- ie include into fileset if file is readable, modified after 29th of Feb,
- has a name that matches patter "**/*.java" and the property "foo.present"
- is set. Something similar to 
- 
- <include>
-   <item-filter type="name" value="**/*.java"/>
-   <item-filter type="permission" value="r"/>
-
-   <!-- could optionally be directory/or some other system specific features -->
-   <item-filter type="type" value="file"/> 
-   <item-filter type="modify-time" 
-                operation="greater-than" 
-                value="29th Feb 2003"/>
- </include>
-
- [ACCEPTED]
-
-* provide datatypes through property tag and remove need for separate free
-  standing entities. ie
-  <property name="foo">
-    <fileset dir="blah">
-     <include name="*/**.java" />
-    </fileset>
-  </property>
-
-  [REJECTED - only one +1 vote]
-
-* provide support for non-hardwired (ie loadable) low-level 
- components (mappers/itemset-filters/converters). Allow them to be 
- loaded in either global or a new classloader.
-
-  [ACCEPTED]
-
-* provide support for non-hardwired (ie loadable) converters.
-
-  Q: What is a converter? Is this an implementation detail?
-  A: Not an implementation detail but a way to extend the engine
-  to convert more data types. Currently we have fixed set that is 
-  expanded on occasion (ie includes primitive types + File). Instead
-  of spreading converting code through out tasks it can be centralized 
-  into one component and used by engine. This becomes particularly 
-  relevent if you build ant based testing systems and use ant in certain
-  web-related areas.
-
-  [ACCEPTED]
-
-* Make all datatypes interfaces to allow them to be customized in many
-  ways.
-
-  [REJECTED - vetoes by Conor MacNeill, Peter Donald and Stefan Bodewig]
-
-* Set arithmetic for fileset/patternset/*set
-
-  [ACCEPTED]
-
-* inheritance of ant properties/datatypes/context etc in project hierarchy
-
-  [ACCEPTED]
-
-* inheritance of between ant datatypes. ie fileset A inherits from fileset B (includes 
-  all entries in A).
-
-  [REJECTED - vetoes by Conor MacNeill, Peter Donald and Stefan Bodewig]
-
-* Homogenize notion of PATHs and filesets.
-
-  [REJECTED - vetoes by Conor MacNeill, Peter Donald and Stefan Bodewig]
-
-[DISC] Ant's goals
-------------------
-
-* make it possible to reuse taskengine for other things. ie
-  Installshield type app, Peter's cron-server and other task based
-  operations. 
-
-  [REJECTED as a primary goal - only two +1 votes]
-
-* provide support for CJAN
-
-  Q: In what way?
-  A: Probably by supplying a set of tasks that download versioned 
-  binaries and their associated dependencies, caching the downloads
-  in a known place and updating binaries when required. ("When required"
-  being indicated by a change in property values).
-
-  [REJECTED as part of Ant's core - veto by Conor MacNeill, no single +1]
-
-[DISC] class loading
---------------------
-
- * force resolution of classes on loading to identify classloader 
- issues early. (At least in global classloader).
-
-  [REJECTED - only one +1 vote]
-
-* Ignore any classes contained in the damned ext dirs of a JVM - possibly by launching
-  with something like jar -Djava.ext.dir=foo -jar ant.jar
-
-  [REJECTED - vetoes by Conor MacNeill, Glenn McAllister and Stefan
-              Bodewig, ACCEPTED if optional]
-
-
-[DISC] workspace/subbuild issues
---------------------------------
-
-* create the concept of workspace so that projects can be built in a
-  DAG and thus enable projects like catalina/tomcat to have an easy
-  build process. It also helps CJAN to a lesser degree and would
-  partially solve the JARs in CVS thing.
-
-  [ACCEPTED]
-
-* Project inheritance
-
-  What's this?
-
-  [REJECTED - vetoes by Conor MacNeill, Peter Donald and Stefan Bodewig]
-
-* Target inheritance. ie The ability to include targets from other 
-  project files overidining them as necessary (so cascading project
-  files).
-
-  [REJECTED - vetoes by Conor MacNeill, Peter Donald and Stefan Bodewig]
-
-* Add an attribute to <ant> to feed back the environment (properties and
-  taskdefs) from the child build to the parent.
-
-  [REJECTED - vetoes by Conor MacNeill, Peter Donald, Simeon Fitch and
-              Stefan Bodewig]
-
-* Allow a target to depend on a target which is in another buildfile.  
-
-  [ACCEPTED]
-
-* Allow a target to reference properties defined in another buildfile.
-
-  [REJECTED - only one +1 vote]
-
-[DISC] documentation system
----------------------------
-
-* generate docs by anakia/XSLT
-
-  Corollary of "move to a system that allows docs to be generated"?
-
-  [ACCEPTED - with no decision on which system to use]
-
-[DISC] Task API
----------------
-
-* tasks provide some way to identify their attributes from the
-  outside. 
-
-  Possible solutions include a special method like getProperties(), an
-  external describing file shipping with the task class or special
-  javadoc comments parsed by a custom doclet. Whatever the method it
-  should not impose any cost on runtime as it is only used a small 
-  proportion of the time (design-time).  
-
-  [ACCEPTED]
-
-* tasks should have access to its own XML representation.
-
-  [REJECTED - vetoes by Christoph Wilhelms, Conor MacNeill and Simeon Fitch]
-
-* Task level if and unless attributes.
-
-  [REJECTED - no single +1 vote]
-
-* Allow tasks to find out, whether another task has completed successfully.
-
-  [REJECTED - vetoes by Conor MacNeill, Glenn McAllister, Peter Donald
-              and Stefan Bodewig]
-
-* provide failonerror like functionality to all tasks. (Provide this as an aspect??
-  much like logging aspect or classloader aspect).
-
-  [ACCEPTED]
-
-[DISC] logging
---------------
-
-* allow build file writers to modify logging (verbosity for example)
-  on a target by target or task by task basis.
-
-  [ACCEPTED]
-
-* Make loggers configurable via build.xml.
-
-  [ACCEPTED]
-
-[DISC] multithrading
---------------------
-
-* Multithreaded execution of tasks within the same target.
-
-  [ACCEPTED]
-
-* Multithreaded execution of targets.
-
-  [REJECTED - vetoes by Conor MacNeill, Glenn McAllister and Stefan Bodewig]
-
-[DISC] procedural versus purely declarative
--------------------------------------------
-
-* Simple flow control (if-then-else, for)
-
-  [REJECTED - vetoes by Conor MacNeill, Glenn McAllister, Peter Donald
-              and Stefan Bodewig]
-
-* targets should be like methods including a return value
-
-  [REJECTED - vetoes by Conor MacNeill, Glenn McAllister, Peter Donald,
-              Simeon Fitch and Stefan Bodewig]
-
-* build files should be purely declarative
-
-  [REJECTED - veto by Stefan Bodewig]
-
-[DISC] Properties
------------------
-
-* Ability to manage scopping of properties in general (ie target/project/workspace).
-
-  [ACCEPTED]
-
-[DISC] Templates
-----------------
-
-* it should be possible to provide general /(template?)/ build
-  specifications, and to declare for a concrete item that it should be
-  built according to such a general specification.
-
-  [REJECTED - vetoes by Conor MacNeill, Glenn McAllister, Peter Donald
-              and Stefan Bodewig]
-
-[DISC] XML issues
------------------
-
-* a built-in mechanism to include build-file fragments - something
-  that doesn't use SYSTEM entities at all and therefore is XSchema
-  friendly, allows for property expansions ...
-
-  [ACCEPTED]
-
-* Let Ant ignore - but warn - if unknown XML elements or attributes
-  occur in a build file.
-
-  [REJECTED - vetoes by Conor MacNeill, Glenn McAllister, Peter Donald
-              and Stefan Bodewig]
-
-* Allow ant to farm out attributes and elements that are NOT in the ant 
-  namespace to other components. ie hand doc: elements to the Documentation
-  component or log: attributes to Log policy component etc
-
-  [ACCEPTED]
-
-[DISC] core extensions
-----------------------
-
-* Allow named tasks to be defined by <script> elements.
-
-  [REJECTED - only one +1 vote]
-
-* specify an onfail task or target that runs in case of a build
-  failure.
-
-  [REJECTED - vetoes by Glenn McAllister, Peter Donald and Stefan Bodewig]
-
-* allow sequence to be specified in depends attribute or enhance
-  antcall to work with current list of executed targets
-
-  [ACCEPTED]
-
-* Support nesting tasks into other elements - not just as children of
-  target - as proposed by Thomas Christen in
-  <http://marc.theaimsgroup.com/?l=ant-dev&m=98130655812010&w=2>.
-
-  [ACCEPTED]
-
-* Make if/unless attributes to check for the value of a property, not
-  only its existance.
-
-  [REJECTED - vetoes by Glenn McAllister and Stefan Bodewig]
-
-* check for more than one condition in if/unless attributes.
-
-  [REJECTED - vetoes by Glenn McAllister, Peter Donald and Stefan Bodewig]
-
-* provide a way to define the order in which targets a given target
-  depends upon get executed.
-
-  [ACCEPTED]
-
-* define task contexts that define various common aspects (logging,
-  failure handling ...) and assign them to tasks.
-
-  [ACCEPTED]
-
-[DISC] organization
--------------------
-
-* separate CVSes and code hierarchies for
-  - task engine [ org.apache.task.* ]
-  - project engine (ie model of targets/projects/workspaces) + support/utility classes 
-    [ org.apache.ant.* ]
-  - core tasks (ie tasks supported by ant contributors) [ org.apache.??? ]
-
-  [REJECTED - vetoes by Conor MacNeill and Glenn McAllister]
-
-[DISC] misc
------------
-
-* internationalization
-
-  [ACCEPTED]
-
-VI. entries that have been submitted too late
-=============================================
-
-* Integration of the depends task and javac tasks
-
-  [REJECTED - only two +1 votes]
-
-* recursive property resolution( ie resolving ${dist.${name}.dir} )
-
-  [REJECTED - veto by Peter Donald]
diff --git a/docs/ant_in_anger.html b/docs/ant_in_anger.html
deleted file mode 100644
index 6ef1fb3..0000000
--- a/docs/ant_in_anger.html
+++ /dev/null
@@ -1,1016 +0,0 @@
-<head>
-<title>
-	Apache Ant in Anger
-</title>
-</head>
-
-<body bgcolor="#FFFFFF" text="#000000">
-<h1 align="center">Ant in Anger:
-</h1>
-<h2 align="center">
-	Using Apache Ant in a Production Development System
-</h2>
-
-<h4  align="center">
-Steve Loughran
-</h4>
-
-<a name="introduction">
-
-<h2>Introduction</h2>
-</a>
-
-<a href="http://jakarta.apache.org/ant/">Apache Ant</a>
- can be an invaluable tool in a team development process -or it can
-be yet another source of problems in that ongoing crises we call
-development . This
-document contains some strategies and tactics for making the most of
-ant. It is moderately frivolous in places, and lacks almost any actual
-examples of ant xml. The lack of examples is entirely deliberate -it
-keeps document maintenance costs down. Most of the concepts covered
-don't need the detail about XML representations, as it is processes we
-are concerned about, not syntax. Finally, please be aware that the
-comments here are only suggestions which need to be customised to meet
-your own needs, not strict rules about what should and should not be
-done.
-
-<p>
-Firstly, here are some assumptions about the projects which this
-document covers
-<ul>
-<li> Pretty much pure Java, maybe with some legacy cruft on the edges.
-
-<li> Team efforts, usually with the petulant prima-donnas all us Java
-programmers become once we realise how much in demand we are.
-
-<li> A fairly distributed development team -spread across locations and
-maybe time zones.
-
-<li> Separate sub projects -from separate beans in a big
-enterprise application to separate enterprise applications which need to
-be vaguely aware of each other.
-
-<li> Significant mismatch between expectations and time available to
-deliver. 'Last Week' is the ideal delivery date handed down from above,
-late next century the date coming up from below.
-
-<li> Everyone is struggling to keep up with platform and tool evolution.
-
-<li> Extensive use of external libraries, both open and closed source.
-
-</ul>
-
-What that all means is that there is no time to spend getting things
-right, you don't have that tight control on how the rest of the team
-works and the development process is often more one of chaos minimisation
-than anything else. The role of ant in such projects is to ensure that
-the build, test and deploy processes run smoothly, leaving you with all
-the other problems.
-
-<a name="core">
-<h2>Core Practices</h2>
-</a>
-<h3>
-Clarify what you want ant to do</h3>
-
-
-Ant is not a silver bullet. It is just another rusty bullet in the armory of
-development tools available at your disposal. Its primary purpose is to
-accelerate the construction and deployment of Java projects. You could certainly
-extend ant to do anything Java makes possible -it is easy to imagine writing an
-image processing task to help in web site deployment by shrinking and
-recompressing jpeg files, for example. But that would be pushing the boundary of
-what ant is really intended to do -so should be considered with care.
-
-<P>
-
-Ant is also a great adjunct to an IDE -a way of doing all the housekeeping of
-deployment and for clean, automated builds. But a good modern IDE is a
-productivity tool in its own right -one you should consider keeping using. Ant
-just lets you give the teams somewhat more freedom in IDE choice -&quot;you can
-use whatever you want in development, but ant for the deployment
-builds&quot;
-
-<h3>
-Define standard targets
-</h3>
-
-
-When you have multiple sub projects, define a standard set of targets.
-Projects with a split between interface and implementation jar files
-could consider <b>impl</b> and <b>intf</b> targets -with separate
-<b>debug-impl</b>and <b>debug-intf</b> targets for the debug version.
-And of course, the ubiquitous <b>clean</b> target.
-
-<P>
-
-With standard target names, it is easy to build encompassing ant build
-files which just hand off the work to the classes below using the
-<a href="manual/CoreTasks/ant.html">ant</a>
-task. For example. the clean target could be handed down to the <tt>intf</tt> and
-<tt>impl</tt> subdirectories from a parent directory
-
-<pre>&lt;target name=&quot;clean&quot;  depends=&quot;clean-intf, clean-impl&quot;&gt;
-&lt;/target&gt;
-
-&lt;target name=&quot;clean-intf&quot; &gt;
-	&lt;ant dir=&quot;intf&quot; target=&quot;clean&quot; /&gt;
-&lt;/target&gt;
-
-&lt;target name=&quot;clean-impl&quot;&gt;
-	&lt;ant dir=&quot;impl&quot; target=&quot;clean&quot; /&gt;
-&lt;/target&gt;  </pre>
-
-If you give targets a <tt>description</tt> tag, then calling <tt>ant
--projecthelp</tt> will list all tasks with their description as 'main targets', and 
-all tasks without a description as subtargets. Describing all your
-entry points is therefore very useful, even before a project becomes big and complicated.
-  
-<h3>
-	Extend ant through new tasks
-</h3>
-
-If ant does not do what you want, you can use the
-<a href="manual/CoreTasks/exec.html">exec</a> and
-<a href="manual/CoreTasks/java.html">java</a> tasks or
-<a href="manual/OptionalTasks/script.html">inline scripting</a> to extend it. In a
-project with many build.xml files, you soon find that having a single
-central place for implementing the functionality keeps maintenance
-overhead down. Implementing task extensions through java code seems
-extra effort at first, but gives extra benefits:-
-
- <ul>
-
-<li>Cross platform support can be added later without changing any
-build.xml files</li>
-
-<li>The code can be submitted to the ant project itself, for other
-people to use and maintain</li>
-
-<li>It keeps the build files simpler</li>
-
-</ul>
-
-<h3>
-Embrace Automated Testing
-</h3>
-
-<b>(alternatively "recriminate early, recriminate often")</b>
-<p>
-
-Ant lets you call <a href="manual/OptionalTasks/junit.html">JUnit</a> tasks, which unit test
-the code your team has written. Automated testing may seem like extra
-work at first, but JUnit makes writing unit tests so easy that you have
-almost no reason not to. Invest the time in learning how to use
-JUnit, write the test cases, and integrate them in a 'test' target from
-ant so that your daily or hourly team build can have the tests applied
-automatically.
-
-<p>
-
-Once code fetches from the code control system are added as another ant
-target, the integration test code can be a pure ant task run on any box
-dedicated to the task. This is ideal for verifying that the build and
-unit tests work on different targets from the usual development
-machines. For example, a Win95/Java1.1 combination could be used even
-though no developer would willingly use that configuration given the
-choice.
-
-<p>
-
-System tests are harder to automate than unit tests, but if you can
-write java code to stress large portions of the system -even if the code
-can not run as JUnit tasks- then the <a href= "manual/CoreTasks/java.html">java</a>
-task can be used to invoke them. It is best to specify that you want a
-new JVM for these tests, so that a significant crash does not break the
-full build. The Junit extensions such as 
-<a href="http://httpunit.sourceforge.net/">HttpUnit</a> for web pages, and 
-<a href="http://jakarta.apache.org/cactus/">Cactus</a> for J2EE and servlet 
-testing help to expand the testing framework. To test properly you will still
-need to invest a lot of effort in getting these to work with your project, and 
-deriving great unit, system and regression tests -but your customers will love 
-you for shipping software that works.   
-
-
-<a name="crossplatform">
-<h2>
-Cross Platform Ant
-</h2>
-</a>
-
-Ant is the best foundation for cross platform Java development and
-testing to date. But if you are not paying attention, it is possible to
-produce build files which only work on one platform -or indeed, one
-single workstation.
-
-<p>
-
-The common barriers to cross-platform ant are the use of command line
-tools (exec tasks) which are not portable, path issues, and hard coding
-in the location of things.
-
-<h3>Command Line apps: <a href="manual/CoreTasks/exec.html">Exec</a>/ <a href=
-"manual/CoreTasks/apply.html">Apply</a></h3>
-
-The trouble with external invocation is that not all functions are found
-cross platform, and those that are often have different names -DOS
-descendants often expect .exe or .bat at the end of files. That can be
-bad if you explicitly include the extension in the naming of the command
-(don't!), good when it lets you keep the unix and DOS versions of an
-executable in the same bin directory of the project without name
-clashes arising.
-
-<p>
-
-Both the command line invocation tasks let you specify which platform
-you want the code to run on, so you could write different tasks for each
-platform you are targeting. Alternatively, the platform differences
-could be handled inside some external code which ant calls. This can be
-some compiled down java in a new task, or an external script file.
-
-<h3>Cross platform paths</h3>
-
-Unix paths use forward slashes between directories and a colon to
-split entries. Thus
-<i>"/bin/java/lib/xerces.jar:/bin/java/lib/ant.jar"</i> is
-a path in unix. In Windows the path must use semicolon separators,
-colons being used to specify disk drives, and backslash separators
-<i>"c:\bin\java\lib\xerces.jar;c:\bin\java\lib\ant.jar"</i>.
-<p>
-This difference between platforms (indeed, the whole java classpath
-paradigm) can cause hours of fun.
-
-<p>
-
-Ant reduces path problems; but does not eliminate them entirely. You
-need to put in some effort too. The rules for handling path names are
-that 'DOS-like pathnames are handled', 'Unix like paths are handled'.
-Disk drives -'C:'- are handled on DOS-based boxes, but placing them in
-the build.xml file ruins all chances of portability. Relative file paths
-are much more portable. Semicolons work as path separators -a fact which
-is useful if your ant invocation wrapper includes a list of jars as a
-defined property in the command line. In the build files you may find it
-better to build a classpath by listing individual files (using location=
-attributes), or by including a fileset of *.jar in the classpath
-definition.
-<p>
-There is also the <a
-href="manual/CoreTasks/pathconvert.html">PathConvert</a> task which
-can put a fully resolved path into a property. Why do that? Because then 
-you can use that path in other ways -such as pass it as a parameter to 
-some application you are calling, or use the replace task to patch it
-into a localised shell script or batch file.
-<p>
-Note that DOS descended file systems are case insensitive (apart from
-the obscure aberration of the WinNT posix subsystem run against NTFS),
-and that Windows pretends that all file extensions with four or more
-letters are also three letter extensions (try DELETE *.jav in your java
-directories to see a disastrous example of this).
-
-<p>
-
-Ant's policy on case sensitivity is whatever the underlying file system
-implements, and its handling of file extensions is that *.jav does not
-find any .java files. The Java compiler is of course case sensitive -you can
-not have a class 'ExampleThree' implemented in "examplethree.java".
-
-<p>
-
-Some tasks only work on one platform -<a href= "manual/CoreTasks/chmod.html">
-Chmod</a> being a classic example. These tasks usually result in just a
-warning message on an unsupported platform -the rest of the target's
-tasks will still be called. Other tasks degrade their functionality on
-platforms or Java versions. In particular, any task which adjusts the
-timestamp of files can not do so properly on Java 1.1. Tasks which can
-do that - <a href="manual/CoreTasks/get.html">Get<a>, <a
-href="manual/CoreTasks/touch.html">Touch</a> and <A href="manual/CoreTasks/unzip.html">
-Unjar/Unwar/Unzip</a> for example, degrade their functionality on
-Java1.1, usually resorting to the current timestamp instead.
-
-
-<p>
-
-Finally, Perl makes a good place to wrap up Java invocations cross
-platform, rather than batch files. It is included in most Unix
-distributions, and is a simple download for <a href=
-"http://www.activestate.com/Products/ActivePerl/"> Win32 platforms from
-ActiveState</a>. A Perl file with .pl extension, with the usual Unix
-path to perl on the line 1 comment and marked as executable can be run
-on Windows, OS/2 and Unix and hence called from Ant without issues. The
-perl code can be left to resolve its own platform issues.
-
-<a name="team">
-<h2>Team Development Processes</h2>
-</a>
-
-Even if each team member is allowed their choice of IDE/editor, or even
-OS, you need to set a baseline of functionality on each box. In
-particular, the JDKs and jars need to be in perfect sync. Ideally pick
-the latest stable Java/JDK version available on all developer/target
-systems and stick with it for a while. Consider assigning one person to
-be the contact point for all tools coming in -particularly open source
-tools when a new build is available on a nightly basis. Unless needed,
-these tools should only really be updated monthly, or when a formal
-release is made.
-
-<p>
-
-Another good tactic is to use a unified directory tree, and add on extra
-tools inside that tree. All references can be made relative to the tree.
-If team members are expected to add a directory in the project to their
-path, then command line tools can be included there -including those
-invoked by ant exec tasks. Put everything under source code control and
-you have a one stop shop for getting a build/execute environment purely
-from CVS or your equivalent.
-
-
-<a name="deploying">
-<h2>Deploying with Ant</h2>
-</a>
-
-One big difference between ant and older tools such as make is that the
-processes for deploying java to remote sites are reasonably well
-evolved in ant. That is because we all have to do it these days, so
-many people have put in the effort to make the tasks easier.
-<p>
-
-Ant can <a href="manual/CoreTasks/jar.html">Jar</a>, <a href= "manual/CoreTasks/tar.html">
-Tar</a> or <a href="manual/CoreTasks/zip.html">Zip</a> files for deployment, while
-the <a href="manual/CoreTasks/war.html">War</a> task extends the jar task for
-better servlet deployment. <a href = "jlink.html" >Jlink</a> is a jar
-generation file which lets you merge multiple sub jars. This is ideal
-for a build process in which separate jars are generated by sub
-projects, yet the final output is a merged jar. <a href=
-"manual/OptionalTasks/cab.html">Cab</a> can be used on Win32 boxes to build a cab file
-which is useful if you have to target IE deployment.
-
-<p>
-
-The <a href = "index.html#ftp">ftp</a> task lets you move stuff up to a
-server. Beware of putting the ftp password in the build file -a property
-file with tight access control is slightly better. The <a href=
-"manual/CoreTasks/fixcrlf.html">FixCRLF task</a> is often a useful interim step if
-you need to ensure that files have unix file extensions before upload. A
-WebDav task has long been discussed, which would provide a more secure
-upload to web servers, but it is still in the todo list. Rumour has it
-that there is such a task in the jakarta-slide libraries.
-
-<p>
-
-EJB deployment is aided by the <a href="manual/OptionalTasks/ejb.html">ejb tasks</a>. At the
-time of writing, only WebLogic was supported with these tasks -if your
-EJB server is not supported, extending the ejb tasks would benefit your
-project and the rest of the ant community.
-
-<p>
-
-Finally, there are of course the fallbacks of just copying files to a
-destination using <a href="manual/CoreTasks/copy.html">Copy</a> and <a href =
-"index.html#copydir">Copydir</a> , or just sending them to a person or
-process using <a href= "manual/CoreTasks/mail.html">Mail</a> or the attachment
-aware <a href= "manual/OptionalTasks/mimemail.html">MimeMail</a>.
-In one project our team even used ant to build CD images through a build followed
-by a long set of Copy tasks, which worked surprisingly well.
-<a name="directories">
-<h2> Directory Structures</h2>
-</a>
-
-How you structure your directory tree is very dependent upon the
-project. Here are some directory layout patterns which can be used as
-starting points. All the jakarta projects follow a roughly similar
-style, which makes it easy to navigate around one form one project to
-another, and easy to clean up when desired. 
-
-<h3>Simple Project</h3>
-
-The project contains sub directories
-<table width="100%">
-<tr>
-	<td><b>bin</b>
-	</td>
-	<td>common binaries, scripts -put this on the path.
-	</td>
-</tr>
-
-<tr>
-	<td><b>build</b>
-	</td>
-	<td>This is the tree for building; ant creates it and can empty it
-	in the 'clean' project.
-	</td>
-</tr>
-<tr>
-	<td><b>dist</b>
-	</td>
-	<td>Distribution outputs go in here; the directory is created in ant
-	and clean empties it out
-	</td>
-</tr>
-<tr>
-	<td><b>doc</b>
-	</td>
-	<td>Hand crafted documentation
-	</td>
-</tr>
-<tr>
-	<td><b>lib</b>
-	</td>
-	<td>Imported Java libraries go in to this directory
-	</td>
-</tr>
-<tr>
-	<td><b>src</b>
-	</td>
-	<td>source goes in under this tree <i>in a heirarchy which matches
-	the package names<i>. The dependency compilation of javac requires this.  
-	</td>
-</tr>
-</table>
-
-The bin, lib, doc and src directories should be under source code control.
-Slight variations include an extra tree of content to be included in the
-distribution jars -inf files, images, etc. These can go under source
-too, with a <tt>metadata</tt> directory for web.xml and similar
-manifests, and a <tt>web</tt> folder for web content -JSP, html, images
-and so on. Keeping the content in this folder (or sub heirarchy)
-together makes it easier to test links before deployment. The actual
-production of a deployment image -such as a war file- can be left to the
-appropriate ant task: there is no need to completely model your source tree 
-upon the deployment heirarchy. 
-<p> 
-
-Javadoc output can be
-directed to a doc/ folder beneath build/, or to doc/javadoc.
-
-<h3>Interface and Implementation split</h3>
-
-If the interface is split from the implementation code then this can be
-supported with minor changes just by having a separate build path for
-the interface directory -or better still just in the jar construction:
-one jar for interface and one jar for implementation.
-
-
-<h3>Loosely Coupled Sub Projects</h3>
-
-In the loosely coupled approach multiple projects can have their own
-copy of the tree, with their own source code access rights.
-One difference to consider is only having one instance of the bin and
-lib directories across all projects. This is sometimes good -it helps
-keep copies of xerces.jar in sync, and sometimes bad -it can update
-foundational jar files before unit testing is complete.
-
-<p>
-
-To still have a single build across the sub projects, use parent
-build.xml files which call down into the sub projects.
-
-<p>
-
-This style works well if different teams have different code
-access/commitment rights. The risk is that by giving extra leeway to the
-sub projects, you can end up with incompatible source, libraries, build
-processes and just increase your workload and integration grief all round.
-<p>
-The only way to retain control over a fairly loosely integrated
-collection of projects is to have a fully automated  build 
-and test process which verifies that everything is still compatible. Sam
-Ruby runs one for all the apache java libraries and emails everyone when
-something breaks; your own project may be able to make use of 
-<A href="http://cruisecontrol.sourceforge.net/">Cruise Control</a> for
-an automated, continuous, background build process. 
-
-<h3>Integrated sub projects</h3>
-
-Tightly coupled projects have all the source in the same tree; different
-projects own different subdirectories. Build files can be moved down to
-those subdirectores (say src/com/iseran/core and src/com/iseran/extras),
-or kept at the top -with independent build files named core.xml and
-extras.xml
-
-<p>
-
-This project style works well if everyone trusts each other and the
-sub projects are not too huge or complex. The risk is that a split to a
-more loosely coupled design will become a requirement as the projects
-progress -but by the time this is realised schedule pressure and
-intertwined build files make executing the split well nigh impossible.
-If that happens then just keep with it until there is the time to
-refactor the project directory structures. 
-
-<a name="antupdate">
-<h2>
-	Ant Update Policies
-</h2>
-</a>
-
-Once you start using ant, you should have a policy on when and how the
-team updates their copies. A simple policy is "every official release
-after whatever high stress milestone has pushed all unimportant tasks
-(like sleep and seeing daylight) on the back burner". This insulates you
-from the changes and occasional instabilities that ant goes through
-during development. Its main disadvantage is that it isolates you from
-the new tasks and features that ant is constantly adding.
-
-<p>
-
-Often an update will require changes to the build.xml files. Most
-changes are intended to be backwards compatible, but sometimes an
-incompatible change turns out to be
-necessary. That is why doing the update in the lull after a big
-milestone is important. It is also why including ant.jar and related
-files in the CVS tree helps ensure that old versions of your software
-can be still be built.
-
-<p>
-
-The most aggressive strategy is to get a weekly or daily snapshot of the
-ant source, build it up and use it. This forces you to tweak the
-build.xml files more regulary, as new tasks and attributes can take
-while to stabilise. You really have to want the new features, enjoy
-gratuitous extra work or take pleasure in upsetting your colleagues to
-take this approach.
-
-<p>
-
-Once you start extending ant with new tasks, it suddenly becomes much
-more tempting to pull down regular builds. The most recent ant builds
-are invariably the the best platform for writing your extensions, as you
-can take advantage of the regular enhancements to the foundational
-classes. It also prevents you from wasting time working on something
-which has already been done. A newly submitted task to do something
-complex such as talk to EJB engines, SOAP servers or just convert a text
-file to uppercase may be almost exactly what you need -so take it,
-enhance it and offer up the enhancements to the rest of the world. This
-is certainly better than starting work on your 'text case converter'
-task on Ant 0.8 in isolation, announcing its existence six months latter
-and discovering that instead of adulation all you get are helpful
-pointers to the existing implementation. The final benefit of being
-involved with the process is that it makes it easier for your tasks to 
-be added with the ant CVS tree, bringing forward the date when ant has
-taken on all the changes you needed to make to get your project to work.
-If that happens you can revert to an official ant release, and get on
-with all the other crises. 
-
-<p>
-
-You should also get on the <a href =
-"mailto:ant-dev-subscribe@jakarta.apache.org" > ant-dev mailing list
-</a>, as it is where the other developers post their work, problems and
-experience. The volume can be quite high: 40+ messages a day, so
-consider routing it to an email address you don't use for much else. And
-don't make everyone on the team subscribe; it can be too much of a
-distraction.
-
-<a name="install">
-<h2>
-Installing with Ant.
-</h2>
-</a>
-
-Because ant can read environment variables, copy, unzip and delete files
-and make java and OS calls, it can be used for simple installation
-tasks. For example, an installer for tomcat could extract the
-environment variable TOMCAT_HOME, stop tomcat running, and copy a war
-file to TOMCAT_HOME/webapps. It could even start tomcat again, but the
-build wouldn't complete until tomcat exited, which is probably not what
-was wanted. 
-
-<p>
-
-The advantage of using ant is firstly that the same install targets
-can be used from your local build files (via an <tt>ant</tt> invocation
-of the install.xml file), and secondly that a basic install target is
-quite easy to write. The disadvantages of this approach are that the
-destination must have an up to date version of ant correctly
-pre-installed, and ant doesn't allow you to handle failures well -and a
-good installer is all about handling when things go wrong, from files
-being in use to jar versions being different. This means that ant is not
-suited for shrink wrapped software, but it does work for deployment and
-installation to your local servers.
-
-<p>
-
-One major build project I was involved in had an ant install build file
-for the bluestone application server, which would shutdown all four
-instances of the app server on a single machine, copy the new version of
-the war file (with datestamp and buildstamp) to an archive directory,
-clean up the current deployed version of the war and then install the
-new version. Because bluestone restarted JVMs on demand, this script was
-all you needed for web service deployment. On the systems behind the
-firewall, we upped the ante in the deployment process by using the ftp
-task to copy out the war and build files, then the telnet task to
-remotely invoke the build file. The result was we had automated
-recompile and redeploy to local servers from inside our IDE (Jedit) or
-the command line, which was simply invalualbe. 
-
-<p>
-
-One extra trick I added later was a junit test case to run through 
-the install check list. With tests to verify access permissions on network
-drives, approximate clock synchronisation between servers, DNS functionality,
-ability to spawn executables and all the other trouble spots
-, the install script could automatically do
-a system health test during install time and report problems. [The same tests
-could also be invoked from a JMX MBean, but that's another story]. 
-<p>
-
-So, ant is not a substitute for a real installer tool, except in the
-special case of servers you control, but in that context it does let
-you integrate remote installation with your build. 
-<a name="tips">
-<h2>
-Tips and Tricks</h2>
-</a>
-<dl>
-<dt><b>
-	get
-</b><dd>
-
-The <a href="manual/CoreTasks/get.html">get</a> task can fetch any URL, so be used
-to trigger remote server side code during the build process, from remote
-server restarts to sending SMS/pager messages to the developer
-cellphones.
-
-<dt><b>
-i18n
-</b><dd>
-
-
-Internationalisation is always trouble. Ant helps here with the <A href=
-"manual/OptionalTasks/native2ascii.html">native2ascii</a> task which can escape out all non
-ascii characters into unicode. You can use this to write java files
-which include strings (and indeed comments) in your own non-ASCII
-language and then use native2ascii to convert to ascii prior to feeding
-through javac. The rest of i18n and l12n is left to you...
-
-<dt><b>
-Use Property Files
-</b><dd>
-
-Use external property files to keep per-user settings out the build
-files -especially passwords. Property files can also be used to
-dynamically set a number of properties based on the value of a single
-property, simply by dyamically generating the property filename from the
-source property. They can also be used as a source of constants across
-multiple build files.
-
-<dt><b>
-Faster compiles with Jikes
-</b><dd>
-
-The <a href="http://www.jikes.org/">jikes compiler</a> is usually much
-faster than javac, does dependency checking and has better error
-messages (usually). Get it. Then set
-build.compiler to "jikes" for it to be used in your build files.
-Doing this explicitly in your build files is a bit dubious as it requires the
-whole team (and sub projects) to be using jikes too -something you can only
-control in small, closed source projects. But if you set 
-<tt>ANT_OPTS&nbsp;=&nbsp;-Dbuild.compiler=jikes</tt>
-in your environment, then all your builds on your system will use 
-Jikes automatically, while others can choose their own compiler, or let
-ant choose whichever is appropriate for the current version of Java.   
-
-<dt><b>
-#include targets to simplify multi build.xml projects
-</b><dd>
-
-You can import XML files into a build file using the XML parser itself.
-This lets a multi-project development program share code through reference,
-rather than cut and paste re-use. It also lets one build up a file of
-standard tasks which can be reused over time. Because the import
-mechanism is at a level below which ant is aware, treat it as
-equivalent to the #include mechanism of the 'legacy' languages C and
-C++.
-
-<p>
-
-There are two inclusion mechanisms, an ugly one for all parsers and a
-clean one. For now, the ugly
-method is the most portable:-
-<pre>
-	&lt;!DOCTYPE project [
-	  &lt;!ENTITY IncludeBuildCore SYSTEM &quot;buildCore.xml&quot;&gt;
-	  &lt;!ENTITY IncludeBuildSecondary SYSTEM &quot;buildSecondary.xml&quot;&gt;
-	]&gt;  
-	
-	&lt;target name=&quot;includedBuild&quot;&gt;
-		&amp;IncludeBuildCore;
-		&amp;IncludeBuildSecondary;
-	&lt;/target&gt;
-</pre>
-The cleaner method using XInclude/Xpath will let you include named 
-targets from one build file or another, using
-<a href="http://www.w3.org/XML/Linking"> 
-the xpointer syntax</a>. You'll need to wait for the W3C proposals
-to finalise and the java XML parsers to implement it before
-using xpointer references.
-<p>
-Before you go overboard with using XML inclusion, note that the <tt>ant</tt> task lets 
-you call any target in any other build file -with all your property settings propagating down to 
-that target. So you can actually have a suite of utility targets -"deploy-to-stack-a", "email-to-team", 
-"cleanup-installation" which can be called from any of your main build files, perhaps with subtly changed
-parameters. Indeed, after a couple of projects you may be able to create a re-usable core build file which
-contains the core targets of a basic java development project -compile, debug, deploy- which project specific
-build files call with their own settings. If you can achive this then
-you are definately making your way up the software maturity ladder. NB,
-<tt>ant</tt> copies all your properties unless the <i>inheritall</i> attribute is set to false. Before that
-attribute existed you had to carefully name all property definitions in all build files to prevent unintentional
-overwriting of the invoked property by that of the caller, now you just have to remember to set
-<tt>inheritall="false"</tt> on all uses of the ant task.   
-
-	
-<dt><b>
-Implement complex Ant builds through XSL
-</b><dd>
-
-XSLT can be used to dynamically generate build.xml files from a source
-xml file, with the <a href="manual/CoreTasks/style.html">Style</a> task controlling
-the transform. This is the current recommended strategy for creating
-complex build files dynamically. However, its use is still apparently
-quite rare -which means you will be on the bleeding edge of technology.
-
-
-<dt><b>
-Change the invocation scripts
-</b><dd>
-
-By writing your own invocation script -using the DOS, Unix or Perl
-script as a starting point- you can modify a ant behavior for an
-individual project. For example, you can use an alternate variable to
-ANT_HOME as the base, extend the classpath differently, or dynamically
-create a new command line property 'project.interfaces' from all .jar
-files in an interfaces directory.
-
-<p>
-
-Having a custom invocation script which runs off a CVS controlled
-library tree under PROJECT_HOME also lets you control ant versions
-across the team -developers can have other copies of ant if they want,
-but the CVS tree always contains the jar set used to build your project.
-
-<p>
-
-You can also write wrapper scripts which invoke the existing ant
-scripts. This is an easy way to extend them. The wrapper scripts can add
-extra definitions and name explicit targets, redefine ANT_HOME and
-generally make development easier. Note that "ant" in Windows is really
-"ant.bat", so should be invoked from another batch file with a "CALL
-ant" statement -otherwise it never returns to your wrapper.
-
-
-<dt><b>
-Write all code so that it can be called from Ant
-</b><dd>
-
-This seems a bit strange and idealistic, but what it means is that you should
-write all your java code as if it may be called as a library at some point in
-future. So do not place calls to <b>System.exit()</b> deep in the code -if you
-want to exit a few functions in, raise an exception instead and have
-<b>main()</b> deal with it.
-
-<dt><b>
-Use Antidote as the invocation tool
-</b><dd>
-Even if you edit ant files by hand, Antidote makes a good execution tool
-because it eliminates the startup time of the JVM, perhaps even some of
-the XML parsing delays. 
-
-<dt><b>
-Use the replace task to programmatic modify text files in your project.  
-</b><dd>
-Imagine your project has some source files -BAT files, ASP pages (!), anything
-which needs to be statically customised at compile time for particular
-installations, such driven from some properties of the project such as JVM options, or the URL
-to direct errors too. The replace task can be used to modify files, substituting text and creating
-versions customised for that build or destination. Of course, per-destination customisation
-should be delayed until installation, but if you are using ant for the remote installation
-that suddenly becomes feasible.     
-
-<dt><b>
-Use the mailing lists
-</b><dd>
-There are two 
-<a href="http://jakarta.apache.org/site/mail.html">mailing lists</a> 
-related to ant, ant-user and ant-developer. Ant user is where <i>all</i>
-questions related to using ant should go. Installation, syntax, code
-samples, etc -post your questions there or search the archives for 
-whether the query has been posted and answered before. Ant-developer
-is where ant development takes place -so it is <i>not</i> the place to
-post things like "I get a compilation error when I build my project" or
-"how do I make a zip file". If you are actually extending ant, on the other
-hand, it is the ideal place to ask questions about how to add new tasks, make
-changes to existing ones -and to post the results of your work, if you want them
-incorporated into the ant source tree.  
-   
-</dl>
-
-<a name="puttingtogether">
-	<h2>
-		Putting it all together
-	</h2>
-</a>
-
-What does an ant build process look like in this world? Assuming a
-single directory structure for simplicity, the build file
-should contain a number of top level targets
-<ul>
-<li>build - do an (incremental) build
-<li>test - run the junit tests
-<li>clean - clean out the output directories
-<li>deploy - ship the jars, wars, whatever to the execution system
-<li>publish - output the source and binaries to any distribution site
-<li>fetch - get the latest source from the cvs tree
-<li>docs/javadocs - do the documenation
-<li>all - clean, fetch, build, test, docs, deploy
-<li>main - the default build process (usually build or build & test)
-</ul>
-Sub projects 'web', 'bean-1', 'bean-2' can be given their own build
-files -web.xml, bean-1.xml, bean-2.xml- with the same entry points.
-Extra toplevel tasks related to databases, web site images and the like
-should be considered if they are part of the process.
-
-<p>
-Debug/release switching can be handled with separate initialisation
-targets called before the compile tasks which define the appropriate
-properties. Antcall is the trick here, as it allows you to have two paths
-of property initialisation in a build file.   
-
-<p>
-Internal targets should be used to structure the process
-<ul>
-<li> init - initialise properties, extra-tasks, read in per-user
-property files.
-<li> init-debug - initialise debug properties
-<li> init-release - initialise release properties
-<li> compile - do the actual compilation
-<li> link/jar - make the jars or equivalent
-<li> staging - any pre-deployment process in which the output is dropped
-	off then tested before being moved to the production site.
-</ul>
-
-The switching between debug and release can be done using the 'if' and
-'unless' conditional flags on the targets, so that debug gets called
-unless 'project.mode.release' is defined.
-
-<p>
-
-It is useful to define a project name property which can be echoed in
-the init task. This lets you work out which ant file is breaking in a
-multi file build.
-
-<p>
-
-What goes in to the internal ant tasks depends on your own projects. One
-very important tactic is 'keep path redefinition down through
-references' - you can reuse paths by giving them an ID and then
-referring to them via the 'refid' attribute you should only need to
-define a shared classpath once in the file; filesets can be reused
-similarly.
-
-<p>
-
-Once you have set up the directory structures, and defined the ant tasks
-it is time to start coding. An early priority must be to set up the
-automated test process, as that not only helps ensures that the code
-works, it verifies that the build process is working.
-
-<p>
-
-And that's it. The build file shouldn't need changing as new source
-files get added, only when you want to change the deliverables or part
-of the build process. At some point you may want to massively
-restructure the entire build process, restructuring projects and the
-like, but even then the build file you have should act as a foundation
-for a split build file process -just pull out the common properties into
-a properties file all build files read in, keep the target names unified
-and keep going with the project. Restructuring the source code control
-system is often much harder work.
-
-<h2>The Limits of Ant</h2>
-
-Before you start adopting ant as the sole mechanism for the build
-process, you need to be aware of what it doesn't do.
-<p>
-
-<h3>It's not a scripting language</h3>
-
-Ant lets you declare what you want done, with a bit of testing of the
-platform and class libraries first to enable some platform specific
-builds to take place. It does not let you specify how to handle things
-going wrong (a listener class can do that), or support complex
-conditional statements.
-
-<p>
-
-If your build needs to handle exceptions then look at the sound listener
-as a simple example of how to write your own listener class. Complex
-conditional statements can be handled by having something else do the
-tests and then build the appropriate ant task. XSLT can be used for
-this.
-
-<h3>It's not Make</h3>
-
-Some of the features of make, specifically inference rules and
-dependency checking are not included in ant. That's because they are
-'different' ways of doing a build. Make requires you to state
-dependencies and the build steps, ant wants you to state tasks and the
-order between them, the tasks themselves can do depedency checking or
-not. A full java build using Jikes is so fast that dependency checking
-is relatively moot, while many of the other tasks (but not all), compare
-the timestamp of the source file with that of the destination file
-before acting.
-
-<h3>It's not meant to be a nice language for humans</h3>
-
-XML isn't a nice representation of information for humans. It's a
-reasonable representation for programs, and text editors and source code
-management systems can all handle it nicely. But a complex ant file can
-get ugly because XML is a bit ugly, and a complex build is, well,
-complicated. Use XML comments so that the file you wrote last month
-still makes sense when you get back to it, and use Antidote to edit the
-files if you prefer it. 
-
-<h3>Big projects still get complicated fast</h3>
-
-Large software projects create their own complexity, with inter-dependent
-libraries, long test cycles, hard deployment processes and a multitude of
-people each working on their own bit of the solution. That's even before
-the deadlines loom close, the integration problems become insurmountable,
-weekends become indistinguishable from weekdays in terms of workload and 
-half the team stops talking to the other half. Ant may simplify the
-build and test process, and can eliminate the full time 'makefile engineer'
-role, but that doesn't mean that someone can stop 'owning the build'. 
-Being in charge of the build has to mean more than they type 'ant all' on
-their system, it means they need to set the standards of what build tools to
-use, what the common targets, what property names and files should be
-and generally oversee the sub projects build processes. On a small project,
-you don't need to do that -but remember: small projects become big projects
-when you aren't looking. If you start off with a little bit of process, then
-you can scale it if needed. Ff you start with none, by the time you need 
-it it will be too late.   
-
-<h3>You still need all the other foundational bits of a software
-project</h3>
-
-If you don't have an source code management system, you are going to end
-up hosed. If you don't have everything under SCM, including web pages,
-dependent jars, installation files, you are still going to end up hosed,
-it's just a question of when it's going to happen.
-CVS is effectively free and works well with ant, but Sourcesafe, Perforce,
-Clearcase and StarTeam also have ant tasks. These tasks
-let you have auto-incrementing build counters, and automated file
-update processes. 
-
-<p>
-
-You also need some kind of change control process, to resist
-uncontrolled feature creep. Bugzilla is a simple and low cost tool for
-this, using ant and a continuous test process enables a rapid evolution of code
-to adapt to those changes which are inevitable.  
-
-<h2>Endpiece</h2>
-
-Software development is meant to be fun. Being in the maelstrom of a
-tight project with the stress of integration and trying to code
-everything up for an insane deadline can be fun -it is certainly
-exhilirating. Adding a bit of automation to the process may make things
-less chaotic, and bit less entertaining, but it is a start to putting
-you in control of your development process. You can still have fun, you
-should just have less to worry about, a shorter build/test/deploy cycle
-and more time to spend on feature creep or important things like skiing.
-So get out there and have fun!
-
-<a name="reading">
-<h2>Further Reading</h2>
-</a>
-<ul>
-<li>
-<a
-href="http://www.martinfowler.com/articles/continuousIntegration.html">
-Continuous Integration</a>; Martin Fowler. <br>
-A paper on using ant within a software project
-running a continuous integration/testing proces.
-<li> Refactoring; Martin Fowler, ISBN: 0201485672 <br>
-	Covers JUnit as well as tactics for making some headway with the mess of
-	code you will soon have.
-
-</ul>
-
-<a name="author">
-<h3>About the Author</h3>
-</a>
-
-Steve Loughran is a research scientist at a corporate R&amp;D lab,
-currently on a sabbatical building production web services against
-implausible deadlines for the fun of it. Because of those implausible
-deadlines, email questions related to this document are generally, and
-regretfully unwelcome, unless they are corrections to the content,
-advanced discourse on how to evolve software engineering processes to
-meet the next generation of challenges, or from someone he knows. Even
-then, a timely response is unlikely. Please use the mailing lists
-instead. 
-
-<hr>
-<p align="center">Copyright &copy; 2000, 2001 Apache Software Foundation. All rights
-Reserved.</p>
-</body>
diff --git a/docs/ant_task_guidelines.html b/docs/ant_task_guidelines.html
deleted file mode 100644
index 8e4f723..0000000
--- a/docs/ant_task_guidelines.html
+++ /dev/null
@@ -1,366 +0,0 @@
-<html><head>
-<title>
-Apache Ant Task Design Guidelines
-</title>
-</head><body>
-
-<h1>Apache Ant Task Design Guidelines</h1>
-
-This document covers how to write ant tasks to a standard required to be
-incorporated into the Ant distribution. You may find it useful when
-writing tasks for personal use as the issues it addresses are still
-there in such a case.
-
-
-<h2>Use built in helper classes</h2>
-
-Ant includes helper tasks to simplify mauch of your work. Be warned that
-these helper classes will look very different in ant2.0 from these 1.x
-versions. However it is still better to use them than roll your own, for
-development, maintenance and code size reasons.
-
-<h4>Execute</h4>
-
-Execute will spawn off separate programs under all the platforms which
-ant supports, dealing with Java version issues as well as platform
-issues. Always use this task to invoke other programs. 
-
-<h4>Java, ExecuteJava</h4>
-
-These classes can be used to spawn Java programs in a separate VM (they
-use execute) or in the same VM -with or without a different classloader. 
-When deriving tasks from this, it often benefits users to permit the 
-classpath to be specified, and for forking to be an optional attribute.
-
-
-<h4>Project</h4>
-
-Project has some helper functions to touch a file, to
-copy a file and the like. Use these instead of trying to code them
-yourself -or trying to use tasks which may be less stable and fiddlier
-to use.
-
-
-<h2>Obey the Sun/Java style guidelines</h2>
-
-The Ant codebase aims to have a single unified coding standard, and that
-standard is the
-<a href="http://java.sun.com/docs/codeconv/html/CodeConvTOC.doc.html">
-Sun Java coding guidelines
-</a>
-<p>
-
-It's not that they are better than any alternatives, but they are a
-standard and they are what is consistently used in the rest of the
-tasks. Code will not be incorporated into the database until it complies
-with these.
-
-<p>
-
-If you are writing a task for your personal or organisational use, you
-are free to use whatever style you like. But using the Sun Java style
-will help you to become comfortable with the rest of the Ant source,
-which may be important.
-
-<p>
-
-One important rule is 'no tabs'. Use four spaces instead. Not two,
-not eight, four. Even if your editor is configured to have a tab of four
-spaces, lots of others aren't -spaces have more consistency across
-editors and platforms.
-
-<h2>Recommended Names for attributes and elements</h2>
-
-The ant1.x tasks are very inconsistent regarding naming of attributes
--some tasks use source, others src. Here is a list of preferred attribute
-names. 
-
-<table>
-<tr>
-<td>
-    failonerror
-</td>
-<td>
-    boolean to control whether failure to execute should throw a 
-    <tt>BuildException</tt> or just print an error.
-    Parameter validation failures should always throw an error, regardless
-    of this flag
-</td>
-</tr>
-<tr>
-<td>
-    destdir
-</td>
-<td>
-    destination directory for output
-</td>
-</tr>
-</table>
-Yes, this is a very short list. Try and be vaguely consistent with the core
-tasks, at the very least.
-
-<h2>Design for controlled re-use</h2>
-
-Keep member variables private. If read access by subclasses is required.
-add accessor methods rather than change the accessiblity of the member.
-This enables subclasses to access the contents, yet
-still be decoupled from the actual implementation. 
-<p>
-
-The other common re-use mechanism in ant is for one task to create and
-configure another. This is fairly simple. 
-
-<h2>Do your own Dependency Checking</h2>
-
-Make has the edge over Ant in its integrated dependency checking: the
-command line apps make invokes dont need to do their own work. Ant tasks
-do have to do their own dependency work, but if this can be done then 
-it can be done well. A good dependency aware task can work out the dependencies
-without explicit dependency information in the build file, and be smart 
-enough to work out the real dependencies, perhaps through a bit of file parsing.
-The <tt>depends</tt> task is the best example of this. Some of the zip/jar
-tasks are pretty good too, as they can update the archive when needed.
-Most tasks just compare source and destination timestamps and work from there.    
-Tasks which don't do any dependency checking do not help users as much as
-they can, because their needless work can trickle through the entire build, test
-and deploy process. 
-
-<h2>Support Java 1.1 through Java 1.4</h2>
-
-Ant is designed to support Java1.1: to build on it, to run on it. Sometimes
-functionality of tasks have to degrade in that environment -&lt;touch&gt;
-is a case in point- this is usually due to library limitations; 
-such behaviour change must always be noted in the documentation.
-<p>
-What is problematic is code which is dependent on Java1.2 features
--Collections, Reader and Writer classes, extra methods in older classes.
-These can not be used directly by any code and still be able to compile
-and run on a Java 1.1 system. So please stick to the older collection
-classes, and the older IO classes. If a new method in an existing class
-is to be used, it must be used via reflection and the 
-<tt>NoSuchMethodException</tt> handled somehow. 
-<p>
-What if code simply does not work on Java1.1? It can happen. It will 
-probably be OK to have the task as an optional task, with compilation 
-restricted to Java1.2 or later through build.xml modifications. 
-Better still, use reflection to link to the classes at run time.
-<p>
-Java 1.4 adds a new optional change to the language itself, the 
-<tt>assert</tt> keyword, which is only enabled if the compiler is told
-to compile 1.4 version source. Clearly with the 1.1 compatibility requirement,
-Ant tasks can not use this keyword. They also need to move away from
-using the JUnit <tt>assert()</tt> method and start calling <tt>assertTrue()</tt>
-instead.    
-
-
-
-<h2>Refactor</h2>
-
-If the changes made to a task are making it too unwieldy, split it up
-into a cleaner design, refactor the code and submit not just feature
-creep but cleaner tasks. A common design pattern which tends to occur in
-the ant process is the adoption of the adapter pattern, in which a base
-class (say Javac or Rmi) starts off simple, then gets convoluted with
-support for multiple back ends -javac, jikes, jvc. A refactoring to
-split the programmable front end from the classes which provide the back
-end cleans up the design and makes it much easier to add new back ends.
-But to carry this off one needs to keep the interface and behaviour of
-the front end identical, and to be sure that no subclasses have been
-accessing data members directly -because these data members may not
-exist in the refactored design. Which is why having private data members
-is so important.
-
-
-<h2>Test</h2>
-
-Look in <tt>jakarta-ant/src/testcases</tt> and you will find JUnit tests for the
-shipping ant tasks, to see how it is done and what is expected of a new
-task. Most of them are rudimentary, and no doubt you could do better for
-your task -feel free to do so!
-
-<p>
-
-A well written set of test cases will break the Ant task while it is in
-development, until the code is actually complete. And every bug which 
-surfaces later should have a test case added to demonstrate the problem,
-and to fix it.
-
-<p>
-
-The test cases are a great way of testing your task during development.
-A simple call to 'ant run-test' in the ant source tree will run all ant
-tests, to verify that your changes don't break anything.
-To test a single task, use the one shot <code>ant run-single-test
--Dtestcase=${testname}</code> where ${testname} is the name of your test class.
-
-
-<p>
-
-The test cases are also used by the committers to verify that changes
-and patches do what they say. If you've got test cases it increases your
-credibility significantly. 
-
-<p>
-
-Remember also that Ant 1.x is designed to compile and run on Java1.1, so
-you should test on Java 1.1 as well as any later version which you use.
-You can download an old SDK from Sun for this purpose.
-
-<h2>Document</h2>
-
-Without documentation, the task can't be used. So remember to provide a
-succint and clear html (soon, xml) page describing the task in a similar
-style to that of existing tasks. It should include a list of attributes
-and elements, and at least one working example of the task. Many users
-cut and paste the examples into their build files as a starting point,
-so make the examples practical and test them too.
-
-<h2>Licensing and Copyright</h2>
-
-Any code submitted to the Apache project must be compatible with the
-Apache Software License, and the act of submission must be viewed as an
-implicit transfer of ownership of the submitted code to the Apache
-Software Foundation.
-
-<p>
-This is important.
-
-<p>
-
-The fairly laissez-faire license of Apache is not compabitible with
-either the GPL or the Lesser GPL of the Free Software Foundation -the
-Gnu project. Their license requires all changes to the source to be made
-public, and give the licensee of any software the right to distribute
-copies. It also requires derivative works to be made available under the
-same license terms. None of these requirements are in the Apache Software
-Foundation license, which permits people and organisations to build
-commercial and closed source applications atop the Apache libraries and
-source -but not use the Apache, Ant or Jakarta Project names without
-permission.
-
-<p>
-
-Because the Gnu GPL license immediately extends to cover any larger
-application (or library, in the case of GLPL) into which it is
-incorporated, the Ant team can not incorporate any task based upon GPL
-or LGPL source into the Ant codebase. You are free to submit it, but it
-will be politely and firmly rejected.
-
-<p>
-
-Once ant-2 adds better dynamic task incorporation, it may be possible to
-provide a framework for supporting [L]GPL code, but still no tasks
-direcely subject to the Gnu licenses will ever be included in the Ant
-CVS tree.
-
-<h3>Dont re-invent the wheel</h3>
-
-We've all done it: written and submitted a task only to discover it
-was already implemented in a small corner of another task, or it has
-been submitted by someone else and not committed. You can avoid this
-by being aware of what is in the latest CVS tree -keep getting the daily
-source updates, look at manual changes and subscribe to the ant-dev
-mailing list. 
-
-<p>
-
-If you are thinking of writing a task, posting a note on your thoughts
-to the list can be informative -you well get other peoples insight and
-maybe some half written task to do the basics, all without writing a
-line of code. 
-
-
-<h2>Submitting to Ant</h2>
-
-The process for submitting an Ant task is documented on the
-<a href="http://jakarta.apache.org/site/guidelines.html">
-jakarta web site</a>.
-The basic mechanism is to mail it to the ant-dev mailing list.
-It helps to be on this list, as you will see other submissions, and
-any debate about your own submission.
-<p>
-
-Patches to existing files should be generated with 
-<code>cvs diff -u filename</code>
- and save the output to a file. If you want to get
-the changes made to multiple files in a directory , just use <code>cvs
-diff -u</code>. The patches should be sent as an attachment to a message titled [PATCH]
-and distinctive one-line summary in the subject of the patch. The
-filename/task and the change usually suffices. It's important to include
-the changes as an attachment, as too many mailers reformat the text
-pasted in, which breaks the patch.
-<p>
-Then you wait for one of the committers to commit the patch, if it is
-felt appropriate to do so. Bug fixes go in quickly, other changes
-often spark a bit of discussion before a (perhaps revised) commit is
-made.
-<p>
-
-New submissions should be proceeded with [SUBMIT]. The mailer-daemon
-will reject any messages over 100KB, so any large update should be
-zipped up. If your submission is bigger than that, why not break it up
-into separate tasks. 
-<p>
-
-If you hear nothing after a couple of weeks, remind the mailing list. 
-Sometimes really good submissions get lost in the noise of other issues.
-This is particularly the case just prior to a new point release of 
-the product. At that time anything other than bug fixes will tend
-to be neglected.
- 
-<h2>Checklists</h2>
-
-These are the things you should verify before submitting patches and new
-tasks. Things don't have to be perfect, it may take a couple of
-iterations before a patch or submission is committed, and these items
-can be addressed in the process. But by the time the code is committed,
-everything including the documentation and some test cases will have
-been done, so by getting them out the way up front can save time.
-The committers look more favourably on patches and submissions with test
-cases, while documentation helps sell the reason for a task. 
-
-<h3>Checklist before submitting a patch</h3>
-<ul>
-<li>Added code complies with style guidelines
-<li>Code compiles and runs on Java1.1
-<li>New member variables are private, and provide public accessor methods
-	if access is actually needed. 
-<li>Existing test cases succeed.
-<li>New test cases written and succeed.
-<li>Documentation page extended as appropriate.
-<li>Example task declarations in the documentation tested.
-<li>Diff files generated using cvs diff -u
-<li>Message to ant-dev contains [PATCH], task name and patch reason in
-subject.
-<li>Message body contains a rationale for the patch.
-<li>Message attachment contains the patch file(s).
-</ul>
-
-<h3>Checklist before submitting a new task</h3>
-<ul>
-<li>Java file begins with Apache copyright and license statement.
-<li>Task does not depend on GPL or LGPL code.
-<li>Source code complies with style guidelines
-<li>Code compiles and runs on Java1.1
-<li>Member variables are private, and provide public accessor methods
-	if access is actually needed. 
-<li><i>Maybe</i> Task has failonerror attribute to control failure behaviour
-<li>New test cases written and succeed
-<li>Documentation page written
-<li>Example task declarations in the documentation tested.
-<li>Patch files generated using cvs diff -u
-<li>patch files include a patch to defaults.properties to register the
-tasks
-<li>patch files include a patch to coretasklist.html or
-optionaltasklist.html to link to the new task page
-<li>Message to ant-dev contains [SUBMIT] and task name in subject
-<li>Message body contains a rationale for the task
-<li>Message attachments contain the required files -source, documentation,
-test and patches
-</ul>
-<hr>
-<p align="center">Copyright &copy; 2001 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body></html>
-
diff --git a/docs/antnews.html b/docs/antnews.html
deleted file mode 100644
index 5a76e67..0000000
--- a/docs/antnews.html
+++ /dev/null
@@ -1,301 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-
-<!-- Content Stylesheet for Site -->
-
-        
-<!-- start the processing -->
-    <html>
-    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
-    <head>
-      <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
-  
-                      <meta name="author" value="Conor MacNeill">
-  <meta name="email" value="">
-                <meta name="author" value="Stefan Bodewig">
-  <meta name="email" value="stefan.bodewig@epost.de">
-        
-      <title>Apache Ant - Ant News</title>
-    </head>
-  
-    <body bgcolor="#ffffff" text="#000000" link="#525D76">    
-      <table border="0" width="100%" cellspacing="0">
-        <!-- TOP IMAGE -->
-        <tr>
-                <td align="left">
-    <a href="http://jakarta.apache.org"><img src="images/jakarta-logo.gif" border="0"/></a>
-    </td>
-    <td align="center">
-    <a href="http://www.sdmagazine.com"><img src="images/sdm_productivity_award.gif" border="0" height="75" width="135"/></a>
-    </td>
-    <td align="center">
-    <a href="http://www.javaworld.com"><img src="images/jw_ec_logo_winner2002.gif" border="0" height="85" width="230"/></a>
-    </td>
-    <td align="right">
-              <a href="http://jakarta.apache.org/ant/"><img src="./images/ant_logo_large.gif" alt="Apache Ant" border="0"/></a>
-        </td>
-          </tr>
-      </table>
-      <table border="0" width="100%" cellspacing="4">
-        <tr><td colspan="2">
-          <hr noshade="" size="1"/>
-        </td></tr>
-        
-        <tr>
-          <!-- LEFT SIDE NAVIGATION -->
-          <td valign="top" nowrap="true">
-                <p><strong>Apache Ant</strong></p>
-    <ul>
-          <li>      <a href="./index.html">Front Page</a>
-  </li>
-          <li>      <a href="./antnews.html">News</a>
-  </li>
-          <li>      <a href="./manual/index.html">Documentation</a>
-  </li>
-          <li>      <a href="./projects.html">Related Projects</a>
-  </li>
-          <li>      <a href="./external.html">External Tools and Tasks</a>
-  </li>
-          <li>      <a href="./resources.html">Resources</a>
-  </li>
-          <li>      <a href="./faq.html">Ant FAQ</a>
-  </li>
-          <li>      <a href="./problems.html">Having Problems?</a>
-  </li>
-        </ul>
-      <p><strong>Download</strong></p>
-    <ul>
-          <li>      <a href="http://jakarta.apache.org/site/binindex.html">Binaries</a>
-  </li>
-          <li>      <a href="http://jakarta.apache.org/site/sourceindex.html">Source Code</a>
-  </li>
-        </ul>
-      <p><strong>Jakarta</strong></p>
-    <ul>
-          <li>      <a href="http://jakarta.apache.org/site/news.html">News & Status</a>
-  </li>
-          <li>      <a href="http://jakarta.apache.org/site/mission.html">Mission</a>
-  </li>
-          <li>      <a href="http://jakarta.apache.org/site/guidelines.html">Guidelines Notes</a>
-  </li>
-          <li>      <a href="http://jakarta.apache.org/site/faqs.html">FAQs</a>
-  </li>
-        </ul>
-      <p><strong>Get Involved</strong></p>
-    <ul>
-          <li>      <a href="http://jakarta.apache.org/site/getinvolved.html">Overview</a>
-  </li>
-          <li>      <a href="http://jakarta.apache.org/site/cvsindex.html">CVS Repositories</a>
-  </li>
-          <li>      <a href="http://jakarta.apache.org/site/mail.html">Mailing Lists</a>
-  </li>
-          <li>      <a href="http://jakarta.apache.org/site/library.html">Reference Library</a>
-  </li>
-          <li>      <a href="http://nagoya.apache.org/bugzilla/enter_bug.cgi?product=Ant">Bug Database</a>
-  </li>
-          <li>      <a href="http://nagoya.apache.org/bugzilla/enter_bug.cgi?product=Ant&bug_severity=Enhancement">Enhancement Requests</a>
-  </li>
-        </ul>
-            </td>
-          <td align="left" valign="top">
-        <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#525D76">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Ant 1.5Beta1"><strong>Ant 1.5Beta1</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <h3>Ant 1.5 Beta1 Available !</h3>
-                                <p>The first beta version of Ant 1.5 is now available for 
-     <a href="http://jakarta.apache.org/builds/jakarta-ant/release/v1.5Beta1/">
-     download</a>. If you have any feedback on the beta feel free to join the 
-     discussion on the ant-dev and ant-user mailing lists.
-     </p>
-                    </blockquote>
-    </td></tr>
-  </table>
-        <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#525D76">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Ant wins again!"><strong>Ant wins again!</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <h3>Apr 29, 2002: Ant wins <em>Software Development</em> magazine's
-    2002 Productivity Award.</h3>
-                                <p>
-    Ant has been awarded a <strong>2002 Productivity Award</strong> by
-    <a href="http://www.sdmagazine.com/"><em>Software Development</em></a>
-    magazine.  Read the
-    <a href="http://www.sdmagazine.com/jolts/press_release_4-26-02.htm">
-    press release</a> for more information and the full list of winners.
-    </p>
-                    </blockquote>
-    </td></tr>
-  </table>
-        <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#525D76">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Ant has won!"><strong>Ant has won!</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <h3>Mar 26, 2002: Ant wins the JavaWorld Editors' Choice
-    Award</h3>
-                                <p>Ant has won the JavaWorld Editors' Choice Award for
-    <strong>Most Useful Java Community-Developed Technology</strong>.
-    Read the
-    <a href="http://www.javaworld.com/javaworld/jw-03-2002/jw-0326-awards.html "> full article</a> -- or jump directly to the bit about
-    <a href="http://www.javaworld.com/javaworld/jw-03-2002/jw-0326-awards-p3.html"> our award</a> <code>:)</code></p>
-                    </blockquote>
-    </td></tr>
-  </table>
-        <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#525D76">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Java 1.4 Support"><strong>Java 1.4 Support</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <h3>Feb 15, 2002: Java 1.4 Support</h3>
-                                <p>
-      Java 1.4 has now been released by Sun. The latest Ant source supports 
-      the new <tt>assert</tt> statement in the compiler task via the <tt>source</tt> 
-      attribute. It also contains a compatibility fix needed for some ant tasks
-      on Java 1.4 over Windows XP. If you have problems running Ant 1.4.1 on WinXP/Java 1.4,
-      please use a recent build or compile your own version from the source tree. 
-    </p>
-                    </blockquote>
-    </td></tr>
-  </table>
-        <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#525D76">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="See our new logo!"><strong>See our new logo!</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <h3>Have a look at our new cool logo!</h3>
-                    </blockquote>
-    </td></tr>
-  </table>
-        <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#525D76">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Ant 1.4.1"><strong>Ant 1.4.1</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <h3>11 October 2001 Ant 1.4.1 released !</h3>
-                                <p>Please visit the 
-     <a href="http://www.apache.org/dist/jakarta/jakarta-ant/release/v1.4.1/">
-     download area</a>. 
-     </p>
-                    </blockquote>
-    </td></tr>
-  </table>
-        <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#525D76">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Ant 2.0 Requirements Collected - Next is Design"><strong>Ant 2.0 Requirements Collected - Next is Design</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>A commented version of the collected user requirements is now
-      available <a href="ant2/features.html">here</a> - it is not
-      complete as some details still have to be defined, but it should
-      give you an idea of what Ant2 is going to look like.</p>
-                                <p>Several details can only be decided in the light of real code
-      and prototypes.  Several people are working on prototypes (that
-      can be found in Ant's CVS module in the proposals directory) and
-      discussion is going on on the Ant-Dev mailing list.</p>
-                    </blockquote>
-    </td></tr>
-  </table>
-        <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#525D76">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Best-Practices Profile of Ant at Sun's Dot-Com Builder"><strong>Best-Practices Profile of Ant at Sun's Dot-Com Builder</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>Sun has released an introductory article on Ant on their
-      Dot-Com Builder site on May 30 2001. See <a href="http://dcb.sun.com/practices/profiles/ant.jsp">http://dcb.sun.com/practices/profiles/ant.jsp</a></p>
-                    </blockquote>
-    </td></tr>
-  </table>
-        <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#525D76">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Ant 2.0 Requirements"><strong>Ant 2.0 Requirements</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>Ant has been in use for quite some time and has been used in ways never conceived when it
-       was originally written. While Ant 1.x has continued to sucessfully evolve and grow, there 
-       are a number of limitations and inconsistencies that are now apparent and which need to 
-       be addressed. 
-    </p>
-                                <p>
-       As we continue to evolve and enhance Ant 1.x, it is now time to define what Ant 2.0 will
-       encompass. Ant 2.0 will be a major rearchitecting of Ant. It has a number of goals including:
-       <ul>
-         <li>Define the "contract" with build file writers to which Ant will be bound.</li>
-         <li>Define the "contract" between the Ant core and Task writers.</li>
-         <li>Make Ant more easily extendable by allowing additional tasks to be "dropped" in.</li>
-         <li>Allow Ant to function as a component to simplify integration with GUIs and IDEs.</li>
-         <li>Make Ant more regular and logical.</li>
-       </ul>
-       
-       It is expected that Ant 2.0 will break Ant 1.x based build files. The intention is to
-       make this the last time that will happen.
-     </p>
-                                <p>
-        To advance the definition of Ant, user requirements are now being accepted on the 
-        Ant-Dev mailing list. Any requirement will be accepted for consideration. The 
-        requirements are being collected into a document which is available 
-        <a href="ant2/requested-features.txt">on-line</a>. New features will be excepted 
-        until March 21st, 2001. At that time, each requirement will be discussed 
-        for inclusion in an Ant 2.0 requirement document.
-      </p>
-                                <p>
-        For your reference some of the goals which have shaped the development of Ant 1.x are
-        available <a href="ant2/original-specification.html">here</a>. These continue to be
-        relevant to Ant 2.0.
-      </p>
-                                <p>
-        If you want to shape the future of Ant, join the 
-        <a href="http://jakarta.apache.org/site/mail.html">Ant-Dev mailing list</a> and contribute
-        your ideas.
-      </p>
-                    </blockquote>
-    </td></tr>
-  </table>
-              </td>
-        </tr>
-
-        <!-- FOOTER -->
-        <tr><td colspan="2">
-          <hr noshade="" size="1"/>
-        </td></tr>
-        <tr><td colspan="2">
-          <div align="center"><font color="#525D76" size="-1"><em>
-          Copyright &#169; 2000-2002, Apache Software Foundation
-          </em></font></div>
-        </td></tr>
-      </table>
-    </body>
-  </html>
-<!-- end the processing -->
-
-
-
-
diff --git a/docs/external.html b/docs/external.html
deleted file mode 100644
index d694d65..0000000
--- a/docs/external.html
+++ /dev/null
@@ -1,2307 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-
-<!-- Content Stylesheet for Site -->
-
-        
-<!-- start the processing -->
-    <html>
-    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
-    <head>
-      <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
-  
-                      <meta name="author" value="Stefan Bodewig">
-  <meta name="email" value="bodewig@apache.org">
-        
-      <title>Apache Ant - External Tools and Tasks</title>
-    </head>
-  
-    <body bgcolor="#ffffff" text="#000000" link="#525D76">    
-      <table border="0" width="100%" cellspacing="0">
-        <!-- TOP IMAGE -->
-        <tr>
-                <td align="left">
-    <a href="http://jakarta.apache.org"><img src="images/jakarta-logo.gif" border="0"/></a>
-    </td>
-    <td align="center">
-    <a href="http://www.sdmagazine.com"><img src="images/sdm_productivity_award.gif" border="0" height="75" width="135"/></a>
-    </td>
-    <td align="center">
-    <a href="http://www.javaworld.com"><img src="images/jw_ec_logo_winner2002.gif" border="0" height="85" width="230"/></a>
-    </td>
-    <td align="right">
-              <a href="http://jakarta.apache.org/ant/"><img src="./images/ant_logo_large.gif" alt="Apache Ant" border="0"/></a>
-        </td>
-          </tr>
-      </table>
-      <table border="0" width="100%" cellspacing="4">
-        <tr><td colspan="2">
-          <hr noshade="" size="1"/>
-        </td></tr>
-        
-        <tr>
-          <!-- LEFT SIDE NAVIGATION -->
-          <td valign="top" nowrap="true">
-                <p><strong>Apache Ant</strong></p>
-    <ul>
-          <li>      <a href="./index.html">Front Page</a>
-  </li>
-          <li>      <a href="./antnews.html">News</a>
-  </li>
-          <li>      <a href="./manual/index.html">Documentation</a>
-  </li>
-          <li>      <a href="./projects.html">Related Projects</a>
-  </li>
-          <li>      <a href="./external.html">External Tools and Tasks</a>
-  </li>
-          <li>      <a href="./resources.html">Resources</a>
-  </li>
-          <li>      <a href="./faq.html">Ant FAQ</a>
-  </li>
-          <li>      <a href="./problems.html">Having Problems?</a>
-  </li>
-        </ul>
-      <p><strong>Download</strong></p>
-    <ul>
-          <li>      <a href="http://jakarta.apache.org/site/binindex.html">Binaries</a>
-  </li>
-          <li>      <a href="http://jakarta.apache.org/site/sourceindex.html">Source Code</a>
-  </li>
-        </ul>
-      <p><strong>Jakarta</strong></p>
-    <ul>
-          <li>      <a href="http://jakarta.apache.org/site/news.html">News & Status</a>
-  </li>
-          <li>      <a href="http://jakarta.apache.org/site/mission.html">Mission</a>
-  </li>
-          <li>      <a href="http://jakarta.apache.org/site/guidelines.html">Guidelines Notes</a>
-  </li>
-          <li>      <a href="http://jakarta.apache.org/site/faqs.html">FAQs</a>
-  </li>
-        </ul>
-      <p><strong>Get Involved</strong></p>
-    <ul>
-          <li>      <a href="http://jakarta.apache.org/site/getinvolved.html">Overview</a>
-  </li>
-          <li>      <a href="http://jakarta.apache.org/site/cvsindex.html">CVS Repositories</a>
-  </li>
-          <li>      <a href="http://jakarta.apache.org/site/mail.html">Mailing Lists</a>
-  </li>
-          <li>      <a href="http://jakarta.apache.org/site/library.html">Reference Library</a>
-  </li>
-          <li>      <a href="http://nagoya.apache.org/bugzilla/enter_bug.cgi?product=Ant">Bug Database</a>
-  </li>
-          <li>      <a href="http://nagoya.apache.org/bugzilla/enter_bug.cgi?product=Ant&bug_severity=Enhancement">Enhancement Requests</a>
-  </li>
-        </ul>
-            </td>
-          <td align="left" valign="top">
-        <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#525D76">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="External Tools and Tasks"><strong>External Tools and Tasks</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>This page lists external resources for Apache Ant: tasks, IDE
-      integration tools, loggers, you name it. If you've written
-      something that should be included, please post all relevant
-      information to one of the mailing lists.</p>
-                                <p>Nothing listed here is directly supported by the Ant
-      developers, if you encounter any problems with them, please use
-      the contact information.</p>
-                    </blockquote>
-    </td></tr>
-  </table>
-        <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#525D76">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Tasks"><strong>Tasks</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                          <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="AJC"><strong>AJC</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p><a href="http://aspectj.org">AspectJ</a> is an
-          aspect-oriented extension to Java.  This task compiles a
-          source tree using the AspectJ compiler -- AJC.</p>
-                                  <table>
-              <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Compatibility:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Ant 1.3
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          URL:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="http://aspectj.org/dl">http://aspectj.org/dl</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Contact:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="mailto:support@aspectj.org">support@aspectj.org</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          License:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Apache Software License
-        </font>
-  </td>
-      </tr>
-        </table>
-                    </blockquote>
-    </td></tr>
-  </table>
-                                  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Anakia"><strong>Anakia</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>Actually, Anakia is more than just an Ant task, it is a an
-        XML transformation tool based on JDOM, Velocity and Ant.</p>
-                                  <table>
-              <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Compatibility:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Ant 1.2 and later
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          URL:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="http://jakarta.apache.org/velocity/anakia.html">http://jakarta.apache.org/velocity/anakia.html</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Contact:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="http://jakarta.apache.org/site/mail2.html">Velocity mailing lists</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          License:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Apache Software License
-        </font>
-  </td>
-      </tr>
-        </table>
-                    </blockquote>
-    </td></tr>
-  </table>
-                                  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Checkstyle"><strong>Checkstyle</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>Checkstyle is a development tool to help programmers write
-        Java code that adheres to a coding standard. Its purpose is to
-        automate the process of checking Java code, and to spare
-        humans of this boring (but important) task.</p>
-                                <p>Checkstyle can be run via an Ant task or a command line
-        utility.</p>
-                                  <table>
-              <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Compatibility:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Ant 1.2 to 1.4.1
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          URL:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="http://checkstyle.sourceforge.net/">http://checkstyle.sourceforge.net/</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Contact:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="mailto:checkstyle@puppycrawl.com">Oliver Burn</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          License:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Starting with release 2.0 the license is the GNU
-            Lesser General Public License.  Prior releases were under
-            the GNU General Public License.
-        </font>
-  </td>
-      </tr>
-        </table>
-                    </blockquote>
-    </td></tr>
-  </table>
-                                  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="CleanImports"><strong>CleanImports</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>Removes unneeded imports. Formats your import
-        sections. Flags ambiguous imports.</p>
-                                  <table>
-              <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Compatibility:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Ant 1.3
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          URL:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="http://www.euronet.nl/users/tomb/cleanImports/index.html">http://www.euronet.nl/users/tomb/cleanImports/index.html</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Contact:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="mailto:tomb@euronet.nl">Tom Brus</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          License:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Apache Software License
-        </font>
-  </td>
-      </tr>
-        </table>
-                    </blockquote>
-    </td></tr>
-  </table>
-                                  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Configure"><strong>Configure</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>Recursive build support (call ant on every package level,
-        and only build files in that package or in that package and
-        everything below) with seperation of source and output.</p>
-                                <p>The task generates build files in any subdirectory (except
-        for CVS-directories) for you. Only place one build.xml file in
-        the top and call target 'setup' or
-        'rescan'.</p>
-                                  <table>
-              <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Compatibility:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Ant 1.2 and 1.3
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          URL:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="http://www.dsdelft.nl/~lemval/ant/">http://www.dsdelft.nl/~lemval/ant/</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Contact:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="mailto:lemval@dsdelft.nl">M.J.P. van Leeuwen</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          License:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          License derived from Apache Software License
-        </font>
-  </td>
-      </tr>
-        </table>
-                    </blockquote>
-    </td></tr>
-  </table>
-                                  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Doxygen task"><strong>Doxygen task</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>Ant task for running the Doxygen documentation system.</p>
-                                  <table>
-              <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Compatibility:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Ant 1.1 and later
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          URL:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="http://www.bgw.org/projects/java/ant/">http://www.bgw.org/projects/java/ant/</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Contact:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="mailto:mortis@voicenet.com">Kyle R. Burton</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          License:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Apache Software Foundation License
-        </font>
-  </td>
-      </tr>
-        </table>
-                    </blockquote>
-    </td></tr>
-  </table>
-                                  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="GenJar"><strong>GenJar</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>Builds a JAR file based on class dependencies rather than simply the contents of a directory</p>
-                                  <table>
-              <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Compatibility:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Ant 1.4 alpha (built after 2001/08/04) and later
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          URL:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="http://www.riggshill.com/projects/genjar/">http://www.riggshill.com/projects/genjar/</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Contact:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="mailto:jake@riggshill.com">John Kohler</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          License:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Apache Software Foundation License
-        </font>
-  </td>
-      </tr>
-        </table>
-                    </blockquote>
-    </td></tr>
-  </table>
-                                  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Importscrubber"><strong>Importscrubber</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>Removes unnecessary import statements from a Java source code file.</p>
-                                  <table>
-              <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Compatibility:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Ant 1.3
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          URL:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="http://importscrubber.sourceforge.net/">http://importscrubber.sourceforge.net/</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Contact:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="mailto:tomcopeland@users.sourceforge.net">Tom Copeland</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          License:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          LGPL
-        </font>
-  </td>
-      </tr>
-        </table>
-                    </blockquote>
-    </td></tr>
-  </table>
-                                  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="IsDirValidator"><strong>IsDirValidator</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>Checks whether a given directory structure conforms to
-        certain rules that are defined via nested elements of the
-        task.</p>
-                                  <table>
-              <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Compatibility:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Ant 1.4
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          URL:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="http://isvalidator.sourceforge.net/en/isDirValidator.htm">http://isvalidator.sourceforge.net/en/isDirValidator.htm</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Contact:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="mailto:news@inigoserrano.com">Iñigo Serrano</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          License:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          GNU General Public License
-        </font>
-  </td>
-      </tr>
-        </table>
-                    </blockquote>
-    </td></tr>
-  </table>
-                                  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Jalopy"><strong>Jalopy</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>An Ant Plug-in for the Java Source Code Formatter
-        Jalopy.</p>
-                                  <table>
-              <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Compatibility:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Ant 1.4
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          URL:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="http://jalopy.sourceforge.net">http://jalopy.sourceforge.net</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Contact:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="mailto:jalopy@hunsicker.de">jalopy@hunsicker.de</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          License:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          GNU General Public License
-        </font>
-  </td>
-      </tr>
-        </table>
-                    </blockquote>
-    </td></tr>
-  </table>
-                                  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Javamake"><strong>Javamake</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>A task to compile Java sources and manage class file
-        dependencies. Functionality is equivalent to that of standard
-        Javac and Depend tasks combined, with improved dependency
-        checking.</p>
-                                  <table>
-              <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Compatibility:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Ant 1.4.1
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          URL:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="http://www.experimentalstuff.com/Technologies/JavaMake/index.html">http://www.experimentalstuff.com/Technologies/JavaMake/index.html</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Contact:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="mailto:Mikhail.Dmitriev@eng.sun.com">Mikhail Dmitriev</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          License:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          BSD-like License
-        </font>
-  </td>
-      </tr>
-        </table>
-                    </blockquote>
-    </td></tr>
-  </table>
-                                  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="J2ME Ant Tasks"><strong>J2ME Ant Tasks</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>There are two different sets of tasks to help build <a href="http://java.sun.com/j2me/">Java 2 Platform, Micro
-        Edition</a> (J2ME) applications.</p>
-                                <p>This set supports CLDC and the K Virtual Machine (KVM):</p>
-                                  <table>
-              <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Compatibility:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Ant 1.3
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          URL:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="http://www.dribin.org/dave/j2me_ant/">http://www.dribin.org/dave/j2me_ant/</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Contact:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="mailto:drib@enteract.com">Dave Dribin</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          License:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Apache Software License
-        </font>
-  </td>
-      </tr>
-        </table>
-                                <p>And this set works with the J2ME Wireless Toolkit and MIDP
-        for PalmOS:</p>
-                                  <table>
-              <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Compatibility:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Ant 1.3
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          URL:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="http://www.stampysoft.com/ant/">http://www.stampysoft.com/ant/</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Contact:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="mailto:jeckels@stampysoft.com">Josh Eckels</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          License:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          MIT License
-        </font>
-  </td>
-      </tr>
-        </table>
-                    </blockquote>
-    </td></tr>
-  </table>
-                                  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="javarec"><strong>javarec</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>Ant tasks that generate record classes for VisualAge for
-        Java from Cobol copy books.</p>
-                                  <table>
-              <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Compatibility:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Ant 1.4
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          URL:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="http://glezen.org/javarec/">http://glezen.org/javarec/</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Contact:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="mailto:pglezen@us.ibm.com">Paul Glezen</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          License:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Apache Software License
-        </font>
-  </td>
-      </tr>
-        </table>
-                    </blockquote>
-    </td></tr>
-  </table>
-                                  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Styler"><strong>Styler</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>The styler task makes useful combinations of XSLT transformations
-        easy to specify in an Ant build file. Like the built-in Ant task
-        style, styler can apply a single transformation to a set of XML files.
-        But it can also:</p>
-                                <ul>
-          <li>handle multiple transformations, in parallel or pipelined.</li>
-          <li>enable transformations that split or merge files</li>
-          <li>process non-XML files, especially HTML (based on JTidy)</li>
-          <li>apply non-XSLT transformation, especially "regular
-          fragmentations"</li>
-          <li>use any custom XMLReader or XMLFilter class to handle new file
-          formats and transformation techniques.</li>
-        </ul>
-                                  <table>
-              <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Compatibility:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Ant 1.4
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          URL:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="http://www.langdale.com.au/styler/">http://www.langdale.com.au/styler/</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Contact:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="mailto:adv@langdale.com.au">Arnold deVos</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          License:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          LGPL
-        </font>
-  </td>
-      </tr>
-        </table>
-                    </blockquote>
-    </td></tr>
-  </table>
-                                  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Tidy Imports (Tim)"><strong>Tidy Imports (Tim)</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>Tim is a handy utility that can be executed on the command
-        line or via Ant that automatically formats your import
-        declarations. Tim is capable of removing unused imports,
-        expanding or collapsing imports and even organising them into
-        pre-determined groups.</p>
-                                  <table>
-              <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Compatibility:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Ant 1.3 and later
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          URL:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="http://www.chive.com/tim.htm">http://www.chive.com/tim.htm</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Contact:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="mailto:support@chive.com">support@chive.com</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          License:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Commercial
-        </font>
-  </td>
-      </tr>
-        </table>
-                    </blockquote>
-    </td></tr>
-  </table>
-                                  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="TiniAnt"><strong>TiniAnt</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>TiniAnt is an Ant task to support building applications for
-        the <a href="http://www.ibutton.com/TINI/">TINI</a>.</p>
-                                  <table>
-              <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Compatibility:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Ant 1.2 to 1.4.1
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          URL:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="http://tiniant.sourceforge.net/">http://tiniant.sourceforge.net/</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Contact:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="mailto:kelly@ad1440.net">Sean Kelly</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          License:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          BSD-like license
-        </font>
-  </td>
-      </tr>
-        </table>
-                    </blockquote>
-    </td></tr>
-  </table>
-                                  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Venus Application Publisher's (Vamp) Ant Task Suite"><strong>Venus Application Publisher's (Vamp) Ant Task Suite</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>Venus Application Publisher's (Vamp) Ant Task Suite allows
-        you to sign and package your applications into relocatable Web
-        Archives that you can drop into your web server for
-        single-click launching using Java Web Start or into single
-        Java Archive installers that serve up their content through a
-        built-in, multi-threaded, ultra light-weight web server.</p>
-                                  <table>
-              <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Compatibility:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Ant 1.2 and 1.3
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          URL:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="http://www.geocities.com/vamp201/ant.html">http://www.geocities.com/vamp201/ant.html</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Contact:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="mailto:vamp201@yahoo.com">Gerald Bauer</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          License:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          GNU General Public License
-        </font>
-  </td>
-      </tr>
-        </table>
-                    </blockquote>
-    </td></tr>
-  </table>
-                                  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="WOProject"><strong>WOProject</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>WOProject provides a set of tools to work with 
-        <a href="http://webobjects.com/">WebObjects 5.1</a> 
-        independent from platform and IDE. It significantly 
-        improves developer productivity
-        and makes complex project structures more flexible compared to
-        traditional Makefile-based approach.
-        </p>
-                                  <table>
-              <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Compatibility:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Ant 1.4
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          URL:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="http://objectstyle.org/woproject/">http://objectstyle.org/woproject/</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Contact:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="mailto:andrus@objectstyle.org">Andrus Adamchik</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          License:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Apache license
-        </font>
-  </td>
-      </tr>
-        </table>
-                    </blockquote>
-    </td></tr>
-  </table>
-                                  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="XDoclet"><strong>XDoclet</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>XDoclet is an extended Javadoc Doclet engine for use in Ant.
-           It lets you create custom Javadoc @tags and based on those tags 
-           generates source code or other files (such as xml-ish deployment 
-           descriptors). Templates and matching tasks are provided to generate
-           EJB and web application deployment descriptors.
-           </p>
-                                  <table>
-              <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Compatibility:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Ant 1.4
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          URL:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="http://sourceforge.net/projects/xdoclet/">http://sourceforge.net/projects/xdoclet/</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          License:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          BSD license
-        </font>
-  </td>
-      </tr>
-        </table>
-                    </blockquote>
-    </td></tr>
-  </table>
-                                  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="XmlTask"><strong>XmlTask</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>XmlTask provides a simple means to modify XML documents
-        without having to learn XSLT. A simple path reference to an
-        XML node specifies the node you want to change, and how you
-        want to allow XML insertion and removal, or attribute
-        changes. The emphasis is on providing the simplest means to
-        perform common XML replacements</p>
-                                  <table>
-              <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Compatibility:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Ant 1.4 and later
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          URL:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="http://www.oopsconsultancy.com/software/xmltask.html">http://www.oopsconsultancy.com/software/xmltask.html</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Contact:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="mailto:xmltask@oopsconsultancy.com">xmltask@oopsconsultancy.com</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          License:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          GNU General Public License
-        </font>
-  </td>
-      </tr>
-        </table>
-                    </blockquote>
-    </td></tr>
-  </table>
-                    </blockquote>
-    </td></tr>
-  </table>
-        <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#525D76">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Compiler Implementations"><strong>Compiler Implementations</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                          <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="miniRMI &lt;code&gt;&amp;lt;rmic&amp;gt;&lt;/code&gt; implementation"><strong>miniRMI <code>&lt;rmic&gt;</code> implementation</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>miniRMI is a freeware opensource library that serves as a
-        lightweight replacement for the original java.rmi packages and
-        is suitable especially for applets. Ant 1.4+
-        <code>&lt;rmic&gt;</code> adapter included.</p>
-                                  <table>
-              <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Compatibility:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Ant 1.4 and later
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          URL:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="http://dione.zcu.cz/~toman40/miniRMI/">http://dione.zcu.cz/~toman40/miniRMI/</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Contact:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="mailto:Petr.Toman@pinknet.cz">Petr Toman</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          License:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Gnu Lesser Public License
-        </font>
-  </td>
-      </tr>
-        </table>
-                    </blockquote>
-    </td></tr>
-  </table>
-                    </blockquote>
-    </td></tr>
-  </table>
-        <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#525D76">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="IDE and Editor Integration"><strong>IDE and Editor Integration</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                          <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="AntFarm"><strong>AntFarm</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>A plugin that integrates Ant into the jEdit editor.</p>
-                                  <table>
-              <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Compatibility:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          bundles Ant 1.3
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          URL:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="http://plugins.jedit.org/plugins/AntFarm">http://plugins.jedit.org/plugins/AntFarm</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Contact:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="mailto:jedit-devel@lists.sourceforge.net">jEdit developers mailinglist</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          License:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Apache Software License
-        </font>
-  </td>
-      </tr>
-        </table>
-                    </blockquote>
-    </td></tr>
-  </table>
-                                  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="AntMan"><strong>AntMan</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>An AddIn that integrates Ant with the JDeveloper IDE</p>
-                                  <table>
-              <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Compatibility:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Ant 1.4.1
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          URL:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="http://www.erudra.com/antman/index.html">http://www.erudra.com/antman/index.html</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Contact:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="mailto:ashok@erudra.com">Ashok Sridhar</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          License:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          GNU General Public License
-        </font>
-  </td>
-      </tr>
-        </table>
-                    </blockquote>
-    </td></tr>
-  </table>
-                                  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="AntRunner"><strong>AntRunner</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>An OpenTool that integrates Ant into the JBuilder IDE.</p>
-                                  <table>
-              <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Compatibility:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Ant 1.2 and 1.3
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          URL:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="http://www.dieter-bogdoll.de/java/AntRunner/">http://www.dieter-bogdoll.de/java/AntRunner/</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Contact:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="mailto:bogdoll@users.sourceforge.net">Dieter Bogdoll</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          License:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          GNU General Public License
-        </font>
-  </td>
-      </tr>
-        </table>
-                    </blockquote>
-    </td></tr>
-  </table>
-                                  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="AntWork"><strong>AntWork</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>A plugin that integrates Ant into the Jext editor.</p>
-                                  <table>
-              <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Compatibility:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Ant 1.2 and 1.3
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          URL:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="ftp://jext.sourceforge.net/pub/jext/plugins/AntWork.zip">ftp://jext.sourceforge.net/pub/jext/plugins/AntWork.zip</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Contact:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="mailto:KHartlage@t-online.de">Klaus Hartlage</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          License:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          GNU General Public License
-        </font>
-  </td>
-      </tr>
-        </table>
-                    </blockquote>
-    </td></tr>
-  </table>
-                                  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="IntelliJ IDEA 2.0"><strong>IntelliJ IDEA 2.0</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>Java IDE with refactoring support and Ant integration.</p>
-                                  <table>
-              <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Compatibility:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          bundles Ant 1.3
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          URL:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="http://www.intellij.com/idea/">http://www.intellij.com/idea/</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Contact:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="mailto:support@intellij.com">support@intellij.com</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          License:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Commercial
-        </font>
-  </td>
-      </tr>
-        </table>
-                    </blockquote>
-    </td></tr>
-  </table>
-                                  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="JDE(E) 2.2.8"><strong>JDE(E) 2.2.8</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>The Java Development Environment for Emacs (JDEE) supports
-        Apache Ant as one of three built-in ways to build your
-        applications.</p>
-                                  <table>
-              <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Compatibility:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Ant 1.2 and later
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          URL:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="http://jde.sunsite.dk/">http://jde.sunsite.dk/</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Contact:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="mailto:jde-subscribe@sunsite.auc.dk">JDEE Mailing list.</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          License:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          GNU General Public License
-        </font>
-  </td>
-      </tr>
-        </table>
-                    </blockquote>
-    </td></tr>
-  </table>
-                                  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="NetBeans / Forte for Java"><strong>NetBeans / Forte for Java</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>A module that integrates Ant into the NetBeans or Forte for Java IDEs.</p>
-                                  <table>
-              <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Compatibility:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          bundles Ant 1.4.1
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          URL:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="http://ant.netbeans.org/">http://ant.netbeans.org/</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Contact:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="mailto:nbdev@netbeans.org">nbdev@netbeans.org</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          License:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Sun Public License
-        </font>
-  </td>
-      </tr>
-        </table>
-                    </blockquote>
-    </td></tr>
-  </table>
-                                  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="HP RadPak"><strong>HP RadPak</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>
-        RadPak comes with the (free) HP Bluestone HPAS J2EE server, and is primarily 
-        a GUI tool for packaging and deploying java web and EJB applications
-        as WAR and EAR files. The tool is ant based, and can be used with
-        as a GUI for general ant development, providing form based entry 
-        of task attributes, and an animated display of task
-        execution. 
-        </p>
-                                  <table>
-              <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Compatibility:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          bundles Ant 1.3 and docs; adds a jar of extra tasks
-            to any existing ant installation under ANT_HOME
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          URL:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="http://www.bluestone.com/products/hp-as/">http://www.bluestone.com/products/hp-as/</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          License:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Proprietary but free to download
-        </font>
-  </td>
-      </tr>
-        </table>
-                    </blockquote>
-    </td></tr>
-  </table>
-                    </blockquote>
-    </td></tr>
-  </table>
-              </td>
-        </tr>
-
-        <!-- FOOTER -->
-        <tr><td colspan="2">
-          <hr noshade="" size="1"/>
-        </td></tr>
-        <tr><td colspan="2">
-          <div align="center"><font color="#525D76" size="-1"><em>
-          Copyright &#169; 2000-2002, Apache Software Foundation
-          </em></font></div>
-        </td></tr>
-      </table>
-    </body>
-  </html>
-<!-- end the processing -->
-
-
-
-
diff --git a/docs/faq.html b/docs/faq.html
deleted file mode 100644
index b9a1cb2..0000000
--- a/docs/faq.html
+++ /dev/null
@@ -1,2015 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-
-<!-- Content Stylesheet for Site -->
-
-        
-<!-- start the processing -->
-    <html>
-    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
-    <head>
-      <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
-  
-                      <meta name="author" value="Stefan Bodewig">
-  <meta name="email" value="bodewig@apache.org">
-        
-      <title>Apache Ant - Frequently Asked Questions</title>
-    </head>
-  
-    <body bgcolor="#ffffff" text="#000000" link="#525D76">    
-      <table border="0" width="100%" cellspacing="0">
-        <!-- TOP IMAGE -->
-        <tr>
-                <td align="left">
-    <a href="http://jakarta.apache.org"><img src="images/jakarta-logo.gif" border="0"/></a>
-    </td>
-    <td align="center">
-    <a href="http://www.sdmagazine.com"><img src="images/sdm_productivity_award.gif" border="0" height="75" width="135"/></a>
-    </td>
-    <td align="center">
-    <a href="http://www.javaworld.com"><img src="images/jw_ec_logo_winner2002.gif" border="0" height="85" width="230"/></a>
-    </td>
-    <td align="right">
-              <a href="http://jakarta.apache.org/ant/"><img src="./images/ant_logo_large.gif" alt="Apache Ant" border="0"/></a>
-        </td>
-          </tr>
-      </table>
-      <table border="0" width="100%" cellspacing="4">
-        <tr><td colspan="2">
-          <hr noshade="" size="1"/>
-        </td></tr>
-        
-        <tr>
-          <!-- LEFT SIDE NAVIGATION -->
-          <td valign="top" nowrap="true">
-                <p><strong>Apache Ant</strong></p>
-    <ul>
-          <li>      <a href="./index.html">Front Page</a>
-  </li>
-          <li>      <a href="./antnews.html">News</a>
-  </li>
-          <li>      <a href="./manual/index.html">Documentation</a>
-  </li>
-          <li>      <a href="./projects.html">Related Projects</a>
-  </li>
-          <li>      <a href="./external.html">External Tools and Tasks</a>
-  </li>
-          <li>      <a href="./resources.html">Resources</a>
-  </li>
-          <li>      <a href="./faq.html">Ant FAQ</a>
-  </li>
-          <li>      <a href="./problems.html">Having Problems?</a>
-  </li>
-        </ul>
-      <p><strong>Download</strong></p>
-    <ul>
-          <li>      <a href="http://jakarta.apache.org/site/binindex.html">Binaries</a>
-  </li>
-          <li>      <a href="http://jakarta.apache.org/site/sourceindex.html">Source Code</a>
-  </li>
-        </ul>
-      <p><strong>Jakarta</strong></p>
-    <ul>
-          <li>      <a href="http://jakarta.apache.org/site/news.html">News & Status</a>
-  </li>
-          <li>      <a href="http://jakarta.apache.org/site/mission.html">Mission</a>
-  </li>
-          <li>      <a href="http://jakarta.apache.org/site/guidelines.html">Guidelines Notes</a>
-  </li>
-          <li>      <a href="http://jakarta.apache.org/site/faqs.html">FAQs</a>
-  </li>
-        </ul>
-      <p><strong>Get Involved</strong></p>
-    <ul>
-          <li>      <a href="http://jakarta.apache.org/site/getinvolved.html">Overview</a>
-  </li>
-          <li>      <a href="http://jakarta.apache.org/site/cvsindex.html">CVS Repositories</a>
-  </li>
-          <li>      <a href="http://jakarta.apache.org/site/mail.html">Mailing Lists</a>
-  </li>
-          <li>      <a href="http://jakarta.apache.org/site/library.html">Reference Library</a>
-  </li>
-          <li>      <a href="http://nagoya.apache.org/bugzilla/enter_bug.cgi?product=Ant">Bug Database</a>
-  </li>
-          <li>      <a href="http://nagoya.apache.org/bugzilla/enter_bug.cgi?product=Ant&bug_severity=Enhancement">Enhancement Requests</a>
-  </li>
-        </ul>
-            </td>
-          <td align="left" valign="top">
-  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#525D76">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <strong>Questions</strong>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                      <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <strong>About this FAQ</strong>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-        <ul>
-                    <li><a href="#latest-version">
-  Where do I find the latest version of this
-        document?
-  </a></li>
-                    <li><a href="#adding-faqs">
-  How can I contribute to this FAQ?
-  </a></li>
-                    <li><a href="#creating-faq">
-  How do you create the HTML version of this
-        FAQ?
-  </a></li>
-                </ul>
-      </blockquote>
-    </td></tr>
-  </table>
-                <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <strong>General</strong>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-        <ul>
-                    <li><a href="#what-is-ant">
-  What is Apache Ant?
-  </a></li>
-                    <li><a href="#ant-name">
-  Why do you call it Ant?
-  </a></li>
-                    <li><a href="#history">
-  Tell us a little bit about Ant's history.
-  </a></li>
-                </ul>
-      </blockquote>
-    </td></tr>
-  </table>
-                <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <strong>Installation</strong>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-        <ul>
-                    <li><a href="#no-gnu-tar">
-  I get checksum errors when I try to extract the
-      <code>tar.gz</code> distribution file. Why?
-  </a></li>
-                </ul>
-      </blockquote>
-    </td></tr>
-  </table>
-                <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <strong>Using Ant</strong>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-        <ul>
-                    <li><a href="#always-recompiles">
-  Why does Ant always recompile all my Java files?
-  </a></li>
-                    <li><a href="#passing-cli-args">
-  How do I pass parameters from the command line to my
-        build file?
-  </a></li>
-                    <li><a href="#jikes-switches">
-  How can I use Jikes-specific command-line
-        switches?
-  </a></li>
-                    <li><a href="#shell-redirect-1">
-  How do I include a &lt; character in my command-line arguments?
-  </a></li>
-                    <li><a href="#shell-redirect-2">
-  How do I redirect standard input or standard output
-        in the <code>&lt;exec&gt;</code> task?
-  </a></li>
-                    <li><a href="#batch-shell-execute">
-  How do I execute a batch file or shell script from Ant?
-  </a></li>
-                    <li><a href="#defaultexcludes">
-  I've used a <code>&lt;delete&gt;</code> task to delete
-      unwanted
-      SourceSafe control files (CVS files, editor backup files, etc.), but
-      it doesn't seem to work; the files never get deleted. What's
-      wrong?
-  </a></li>
-                    <li><a href="#multi-conditions">
-  I want to execute a particular target only if
-        multiple conditions are true.
-  </a></li>
-                    <li><a href="#stop-dependency">
-  I have a target I want to skip if a property is set,
-      so I have <code>unless="property"</code> as an attribute 
-      of the target, but all the targets this target 
-      depends on are still executed. Why?
-  </a></li>
-                    <li><a href="#include-order">
-  In my <code>&lt;fileset&gt;</code>, I've put in an
-      <code>&lt;exclude&gt;</code> of all files followed by an
-      <code>&lt;include&gt;</code> of just the files I want, but it
-      isn't giving me any files at all. What's wrong?
-      
-  </a></li>
-                    <li><a href="#encoding">
-  How can I include national characters like German
-        umlauts in my build file?
-  </a></li>
-                </ul>
-      </blockquote>
-    </td></tr>
-  </table>
-                <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <strong>Ant and IDEs/Editors</strong>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-        <ul>
-                    <li><a href="#integration">
-  Is Ant supported by my IDE/Editor?
-  </a></li>
-                    <li><a href="#emacs-mode">
-  Why doesn't (X)Emacs/vi/MacOS X's project builder
-      correctly parse the error messages generated by Ant?
-  </a></li>
-                </ul>
-      </blockquote>
-    </td></tr>
-  </table>
-                <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <strong>Advanced Issues</strong>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-        <ul>
-                    <li><a href="#dtd">
-  Is there a DTD that I can use to validate my build
-      files?
-  </a></li>
-                    <li><a href="#xml-entity-include">
-  How do I include an XML snippet in my build file?
-  </a></li>
-                    <li><a href="#mail-logger">
-  How do I send an email with the result of my build
-        process?
-  </a></li>
-                    <li><a href="#listener-properties">
-  How do I get at the properties that Ant was running
-      with from inside BuildListener?
-  </a></li>
-                </ul>
-      </blockquote>
-    </td></tr>
-  </table>
-                <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <strong>Known Problems</strong>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-        <ul>
-                    <li><a href="#remove-cr">
-  &lt;chmod&gt; or &lt;exec&gt; doesn't work in Ant
-        1.3 on Unix
-  </a></li>
-                    <li><a href="#javadoc-cannot-execute">
-  JavaDoc failed: java.io.IOException: javadoc: cannot execute
-  </a></li>
-                    <li><a href="#delegating-classloader">
-  &lt;style&gt; or &lt;junit&gt; ignores my
-      &lt;classpath&gt;
-  </a></li>
-                </ul>
-      </blockquote>
-    </td></tr>
-  </table>
-            </blockquote>
-    </td></tr>
-  </table>
-
-  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#525D76">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <strong>Answers</strong>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                      <a name="latest-version">
-  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <strong>
-          Where do I find the latest version of this
-        document?
-        </strong>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                              <p>The latest version can always be found at Ant's homepage 
-          <a href="http://jakarta.apache.org/ant/faq.html">http://jakarta.apache.org/ant/faq.html</a>.</p>
-                        </blockquote>
-    </td></tr>
-  </table>
-  </a>
-        <a name="adding-faqs">
-  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <strong>
-          How can I contribute to this FAQ?
-        </strong>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                              <p>The page you are looking it is generated from 
-          <a href="http://cvs.apache.org/viewcvs.cgi/~checkout~/jakarta-ant/xdocs/faq.xml">this</a>
-          document.  If you want to add a new question, please submit
-          a patch against this document to one of Ant's mailing lists;
-          hopefully, the structure is self-explanatory.</p>
-                                        <p>If you don't know how to create a patch, see the patches
-          section of <a href="http://jakarta.apache.org/site/source.html">this
-          page</a>.</p>
-                        </blockquote>
-    </td></tr>
-  </table>
-  </a>
-        <a name="creating-faq">
-  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <strong>
-          How do you create the HTML version of this
-        FAQ?
-        </strong>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                              <p>We use 
-        <a href="http://jakarta.apache.org/velocity/anakia.html">Anakia</a>
-        to render the HTML version from the original XML file.</p>
-                                        <p>The Velocity stylesheets used to process the XML files can
-        be found in the <code>xdocs/stylesheets</code> subdirectory of
-        Ant's CVS repository - the build file <code>docs.xml</code> is
-        used to drive Anakia.  This file assumes that you have the
-        <code>jakarta-site2</code> module checked out from CVS as
-        well, but if you follow the instruction from Anakia's
-        homepage, you should get it to work without that.  Just make
-        sure all required jars are in the task's classpath.</p>
-                        </blockquote>
-    </td></tr>
-  </table>
-  </a>
-                        <a name="what-is-ant">
-  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <strong>
-          What is Apache Ant?
-        </strong>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                              <p> Ant is a Java-based build tool. In theory, it is kind of
-        like Make, without Make's wrinkles and with the full
-        portability of pure Java code.</p>
-                        </blockquote>
-    </td></tr>
-  </table>
-  </a>
-        <a name="ant-name">
-  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <strong>
-          Why do you call it Ant?
-        </strong>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                              <p>According to Ant's original author, James Duncan
-        Davidson, the name is an acronym for "Another Neat
-        Tool".</p>
-                                        <p>Later explanations go along the lines of "ants 
-        do an extremely good job at building things", or
-        "ants are very small and can carry a weight dozens of times
-        their own" - describing what Ant is intended to
-        be.</p>
-                        </blockquote>
-    </td></tr>
-  </table>
-  </a>
-        <a name="history">
-  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <strong>
-          Tell us a little bit about Ant's history.
-        </strong>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                              <p>Initially, Ant was part of the Tomcat code base, when it was
-        donated to the Apache Software Foundation. It was
-        created by James Duncan Davidson, who is also the original
-        author of Tomcat. Ant was there to build Tomcat, nothing
-        else.</p>
-                                        <p>Soon thereafter, several open source Java projects realized
-        that Ant could solve the problems they had with Makefiles.
-        Starting with the projects hosted at Jakarta and the old Java
-        Apache project, Ant spread like a virus and is now the build
-        tool of choice for a lot of projects.</p>
-                                        <p>In January 2000, Ant was moved to a separate CVS module and
-        was promoted to a project of its own, independent of
-        Tomcat, and became Apache Ant.</p>
-                                        <p>The first version of Ant that was exposed to a larger audience
-        was the one that shipped with Tomcat's 3.1 release on 19 April
-        2000.  This version has later been referred to as Ant
-        0.3.1.</p>
-                                        <p>The first official release of Ant as a stand-alone product was
-        Ant 1.1, released on 19 July 2000.  The complete release
-        history:</p>
-                                          <table>
-              <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Ant Version
-        </font>
-  </td>
-                      <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Release Date
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          1.1
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          19 July 2000
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          1.2
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          24 October 2000
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          1.3
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          3 March 2001
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          1.4
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          3 September 2001
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          1.4.1
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          11 October 2001
-        </font>
-  </td>
-      </tr>
-        </table>
-                        </blockquote>
-    </td></tr>
-  </table>
-  </a>
-                        <a name="no-gnu-tar">
-  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <strong>
-          I get checksum errors when I try to extract the
-      <code>tar.gz</code> distribution file. Why?
-        </strong>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                              <p>Ant's distribution contains file names that are longer
-        than 100 characters, which is not supported by the standard
-        tar file format. Several different implementations of tar use
-        different and incompatible ways to work around this
-        restriction.</p>
-                                        <p>Ant's &lt;tar&gt; task can create tar archives that use
-        the GNU tar extension, and this has been used when putting
-        together the distribution. If you are using a different
-        version of tar (for example, the one shipping with Solaris),
-        you cannot use it to extract the archive.</p>
-                                        <p>The solution is to either install GNU tar, which can be
-        found <a href="http://www.gnu.org/software/tar/tar.html">here</a>,
-        or use the zip archive instead (you can extract it using
-        <code>jar xf</code>).</p>
-                        </blockquote>
-    </td></tr>
-  </table>
-  </a>
-                        <a name="always-recompiles">
-  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <strong>
-          Why does Ant always recompile all my Java files?
-        </strong>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                              <p>In order to find out which files should be compiled, Ant
-        compares the timestamps of the source files to those of the
-        resulting <code>.class</code> files.  Opening all source files
-        to find out which package they belong to would be very
-        inefficient. Instead, Ant expects you to place your
-        source files in a directory hierarchy that mirrors your
-        package hierarchy and to point Ant to the root of this
-        directory tree with the <code>srcdir</code> attribute.</p>
-                                        <p>Say you have <code>&lt;javac srcdir="src"
-        destdir="dest"/&gt;</code>.  If Ant finds a file
-        <code>src/a/b/C.java</code>, it expects it to be in package
-        <code>a.b</code> so that the resulting <code>.class</code>
-        file is going to be <code>dest/a/b/C.class</code>.</p>
-                                        <p>If your source-tree directory structure does not match your
-        package structure, Ant's heuristic won't work, and
-        it will recompile classes that are up-to-date.  Ant is not the
-        only tool that expects a source-tree layout like this.</p>
-                                        <p>If you have Java source files that aren't declared to
-        be part of any package, you can still use the <code>&lt;javac&gt;</code>
-        task to compile these files correctly - just set the
-        <code>srcdir</code> and <code>destdir</code> attributes to
-        the actual directory the source
-        files live in and the directory the class files should go into,
-        respectively.</p>
-                        </blockquote>
-    </td></tr>
-  </table>
-  </a>
-        <a name="passing-cli-args">
-  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <strong>
-          How do I pass parameters from the command line to my
-        build file?
-        </strong>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                              <p>Use properties. Using <code>ant
-        -D<em>name</em>=<em>value</em></code> lets you define values for
-        properties on the Ant command line. These properties can then be
-        used within your build file as
-        any normal property: <code>${<em>name</em>}</code> will put in
-        <code><em>value</em></code>.</p>
-                        </blockquote>
-    </td></tr>
-  </table>
-  </a>
-        <a name="jikes-switches">
-  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <strong>
-          How can I use Jikes-specific command-line
-        switches?
-        </strong>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                              <p>A couple of switches are supported via "magic"
-          properties:</p>
-                                          <table>
-              <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          switch
-        </font>
-  </td>
-                      <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          property
-        </font>
-  </td>
-                      <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          default
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          +E
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          build.compiler.emacs
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          false == not set
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          +P
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          build.compiler.pedantic
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          false == not set
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          +F
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          build.compiler.fulldepend
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          false == not set
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <strong>(Only for Ant &lt; 1.4; replaced by the
-                <code><strong>nowarn</strong></code>
-                attribute of the <code><strong>&lt;javac&gt;</strong></code>
-                task after that.)</strong><br />-nowarn
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          build.compiler.warnings
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          true == not set
-        </font>
-  </td>
-      </tr>
-        </table>
-                        </blockquote>
-    </td></tr>
-  </table>
-  </a>
-        <a name="shell-redirect-1">
-  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <strong>
-          How do I include a &lt; character in my command-line arguments?
-        </strong>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                              <p>The short answer is "Use: <code>&amp;lt;</code>".</p>
-                                        <p>The long answer is that this probably won't do what you
-        want anyway (see <a href="#shell-redirect-2">the next
-        section</a>).</p>
-                        </blockquote>
-    </td></tr>
-  </table>
-  </a>
-        <a name="shell-redirect-2">
-  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <strong>
-          How do I redirect standard input or standard output
-        in the <code>&lt;exec&gt;</code> task?
-        </strong>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                              <p>Say you want to redirect the standard input stream of the
-        <code>cat</code> command to read from a file, something
-        like:</p>
-                                          <div align="left">
-    <table cellspacing="4" cellpadding="0" border="0">
-      <tr>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-      </tr>
-      <tr>
-        <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#ffffff"><pre>
-shell-prompt&gt; cat &lt; foo
-</pre></td>
-        <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-      </tr>
-      <tr>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-      </tr>
-    </table>
-  </div>
-                                        <p>and try to translate it into</p>
-                                          <div align="left">
-    <table cellspacing="4" cellpadding="0" border="0">
-      <tr>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-      </tr>
-      <tr>
-        <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#ffffff"><pre>
-&lt;exec executable=&quot;cat&quot;&gt;
-  &lt;arg value=&quot;&amp;lt;&quot; /&gt;
-  &lt;arg value=&quot;foo&quot; /&gt;
-&lt;/exec&gt;
-</pre></td>
-        <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-      </tr>
-      <tr>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-      </tr>
-    </table>
-  </div>
-                                        <p>This will not do what you expect.  The input redirection is
-        performed by your shell, not the command itself, so this
-        should read:</p>
-                                          <div align="left">
-    <table cellspacing="4" cellpadding="0" border="0">
-      <tr>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-      </tr>
-      <tr>
-        <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#ffffff"><pre>
-&lt;exec executable=&quot;/bin/sh&quot;&gt;
-  &lt;arg value=&quot;-c&quot; /&gt;
-  &lt;arg value=&quot;cat &amp;lt; foo&quot; /&gt;
-&lt;/exec&gt;
-</pre></td>
-        <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-      </tr>
-      <tr>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-      </tr>
-    </table>
-  </div>
-                                        <p>Note that you must use the <code>value</code> attribute of
-        <code>&lt;arg&gt;</code> in the last element, in order to have
-        the command passed as a single, quoted argument. Alternatively,
-        you can use:</p>
-                                          <div align="left">
-    <table cellspacing="4" cellpadding="0" border="0">
-      <tr>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-      </tr>
-      <tr>
-        <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#ffffff"><pre>
-&lt;exec executable=&quot;/bin/sh&quot;&gt;
-  &lt;arg line='-c &quot;cat &amp;lt; foo&quot;'/&gt;
-&lt;/exec&gt;
-</pre></td>
-        <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-      </tr>
-      <tr>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-      </tr>
-    </table>
-  </div>
-                                        <p>Note the double-quotes nested inside the single-quotes.</p>
-                        </blockquote>
-    </td></tr>
-  </table>
-  </a>
-        <a name="batch-shell-execute">
-  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <strong>
-          How do I execute a batch file or shell script from Ant?
-        </strong>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                              <p>On native Unix systems, you should be able to run shell scripts
-           directly. On systems running a Unix-type shell (for example, Cygwin
-           on Windows) execute the (command) shell instead - <code>cmd</code>
-           for batch files, <code>sh</code> for shell scripts - then pass the
-           batch file or shell script (plus any arguments to the script)
-           as a single command, using the <code>/c</code> or
-           <code>-c</code> switch, respectively. See
-           <a href="#shell-redirect-2">the above section</a>
-           for example <code>&lt;exec&gt;</code> tasks
-           executing <code>sh</code>. For batch files, use something like:</p>
-                                          <div align="left">
-    <table cellspacing="4" cellpadding="0" border="0">
-      <tr>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-      </tr>
-      <tr>
-        <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#ffffff"><pre>
-&lt;exec dir=&quot;.&quot; executable=&quot;cmd&quot; os=&quot;Windows NT&quot;&gt;
-  &lt;arg line=&quot;/c test.bat&quot;/&gt;
-&lt;/exec&gt;
-</pre></td>
-        <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-      </tr>
-      <tr>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-      </tr>
-    </table>
-  </div>
-                        </blockquote>
-    </td></tr>
-  </table>
-  </a>
-        <a name="defaultexcludes">
-  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <strong>
-          I've used a <code>&lt;delete&gt;</code> task to delete
-      unwanted
-      SourceSafe control files (CVS files, editor backup files, etc.), but
-      it doesn't seem to work; the files never get deleted. What's
-      wrong?
-        </strong>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                              <p>This is probably happening because, by default, Ant excludes
-        SourceSafe control files (<code>vssver.scc</code>) and certain other
-        files from FileSets.</p>
-                                        <p>Here's what you probably did:</p>
-                                          <div align="left">
-    <table cellspacing="4" cellpadding="0" border="0">
-      <tr>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-      </tr>
-      <tr>
-        <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#ffffff"><pre>
-&lt;delete&gt;
-  &lt;fileset dir=&quot;${build.src}&quot; includes=&quot;**/vssver.scc&quot;/&gt;
-&lt;/delete&gt;
-</pre></td>
-        <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-      </tr>
-      <tr>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-      </tr>
-    </table>
-  </div>
-                                        <p>You need to switch off the default exclusions,
-           and it will work:</p>
-                                          <div align="left">
-    <table cellspacing="4" cellpadding="0" border="0">
-      <tr>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-      </tr>
-      <tr>
-        <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#ffffff"><pre>
-&lt;delete&gt;
-  &lt;fileset dir=&quot;${build.src}&quot; includes=&quot;**/vssver.scc&quot;
-           defaultexcludes=&quot;no&quot;/&gt;
-&lt;/delete&gt;
-</pre></td>
-        <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-      </tr>
-      <tr>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-      </tr>
-    </table>
-  </div>
-                                        <p>For a complete listing of the patterns that are excluded
-        by default, see <a href="manual/dirtasks.html#defaultexcludes">the user
-        manual</a>.</p>
-                        </blockquote>
-    </td></tr>
-  </table>
-  </a>
-        <a name="multi-conditions">
-  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <strong>
-          I want to execute a particular target only if
-        multiple conditions are true.
-        </strong>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                              <p>There are actually several answers to this question.</p>
-                                        <p>If you have only one set and one unset property to test,
-        you can specify both an <code>if</code> and an <code>unless</code>
-        attribute for the target, and they will act as if they
-        are "anded" together.</p>
-                                        <p>If you are using a version of Ant 1.3 or earlier, the
-        way to work with all other cases is to chain targets together
-        to determine the specific state you want to test for.</p>
-                                        <p>To see how this works, assume you have three properties:
-        <code>prop1</code>, <code>prop2</code>, and <code>prop3</code>.
-        You want to test that <code>prop1</code> and <code>prop2</code> 
-        are set, and that <code>prop3</code> is not. If the condition
-        holds true you want to echo "yes".</p>
-                                        <p>Here is the implementation in Ant 1.3 and earlier:</p>
-                                          <div align="left">
-    <table cellspacing="4" cellpadding="0" border="0">
-      <tr>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-      </tr>
-      <tr>
-        <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#ffffff"><pre>
-&lt;target name=&quot;cond&quot; depends=&quot;cond-if&quot;/&gt;
-
-&lt;target name=&quot;cond-if&quot; if=&quot;prop1&quot;&gt;
-  &lt;antcall target=&quot;cond-if-2&quot;/&gt;
-&lt;/target&gt;
-
-&lt;target name=&quot;cond-if-2&quot; if=&quot;prop2&quot;&gt;
-  &lt;antcall target=&quot;cond-if-3&quot;/&gt;
-&lt;/target&gt;
-
-&lt;target name=&quot;cond-if-3&quot; unless=&quot;prop3&quot;&gt;
-  &lt;echo message=&quot;yes&quot;/&gt;
-&lt;/target&gt;
-</pre></td>
-        <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-      </tr>
-      <tr>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-      </tr>
-    </table>
-  </div>
-                                        <p>Note: <code>&lt;antcall&gt;</code> tasks do <em>not</em> pass
-        property changes back up to the environment they were called
-        from, so you would'nt be able to, for example, set a
-        <code>result</code> property in the <code>cond-if-3</code> target,
-        then do
-        <code>&lt;echo message="result is ${result}"/&gt;</code>
-        in the <code>cond</code> target.</p>
-                                        <p>Starting with Ant 1.4, you can use the
-        <code>&lt;condition&gt;</code> task.</p>
-                                          <div align="left">
-    <table cellspacing="4" cellpadding="0" border="0">
-      <tr>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-      </tr>
-      <tr>
-        <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#ffffff"><pre>
-&lt;target name=&quot;cond&quot; depends=&quot;cond-if,cond-else&quot;/&gt;
-
-&lt;target name=&quot;check-cond&quot;&gt;
-  &lt;condition property=&quot;cond-is-true&quot;&gt;
-    &lt;and&gt;
-      &lt;not&gt;
-        &lt;equals arg1=&quot;${prop1}&quot; arg2=&quot;$${prop1}&quot; /&gt;
-      &lt;/not&gt;
-      &lt;not&gt;
-        &lt;equals arg1=&quot;${prop2}&quot; arg2=&quot;$${prop2}&quot; /&gt;
-      &lt;/not&gt;
-      &lt;equals arg1=&quot;${prop3}&quot; arg2=&quot;$${prop3}&quot; /&gt;
-    &lt;/and&gt;
-  &lt;/condition&gt;
-&lt;/target&gt;
-
-&lt;target name=&quot;cond-if&quot; depends=&quot;check-cond&quot; if=&quot;cond-is-true&quot;&gt;
-  &lt;echo message=&quot;yes&quot;/&gt;
-&lt;/target&gt;
-
-&lt;target name=&quot;cond-else&quot; depends=&quot;check-cond&quot; unless=&quot;cond-is-true&quot;&gt;
-  &lt;echo message=&quot;no&quot;/&gt;
-&lt;/target&gt;
-</pre></td>
-        <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-      </tr>
-      <tr>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-      </tr>
-    </table>
-  </div>
-                                        <p>This version takes advantage of two things:</p>
-                                        <ul>
-          <li>If a property <code>a</code> has not been set,
-          <code>${a}</code> will evaluate to <code>${a}</code>.</li>
-
-          <li>To get a literal <code>$</code> in Ant, you have to
-          escape it with another <code>$</code> - this will also break
-          the special treatment of the <code>${</code> sequence.</li>
-        </ul>
-                                        <p>Because testing for a literal <code>${property}</code> string
-        isn't all that readable or easy to understand,
-        post-1.4.1 Ant introduces the <code>&lt;isset&gt;</code> element 
-	to the <code>&lt;condition&gt;</code> task.</p>
-                                        <p>Here is the previous example done using
-        <code>&lt;isset&gt;</code>:</p>
-                                          <div align="left">
-    <table cellspacing="4" cellpadding="0" border="0">
-      <tr>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-      </tr>
-      <tr>
-        <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#ffffff"><pre>
-&lt;target name=&quot;check-cond&quot;&gt;
-  &lt;condition property=&quot;cond-is-true&quot;&gt;
-    &lt;and&gt;
-      &lt;isset property=&quot;prop1&quot;/&gt;
-      &lt;isset property=&quot;prop2&quot;/&gt;
-      &lt;not&gt;
-        &lt;isset property=&quot;prop3&quot;/&gt;
-      &lt;/not&gt;
-    &lt;/and&gt;
-  &lt;/condition&gt;
-&lt;/target&gt;
-</pre></td>
-        <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-      </tr>
-      <tr>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-      </tr>
-    </table>
-  </div>
-                                        <p>The last option is to use a scripting language to set the
-        properties. This can be particularly handy when you need much
-        finer control than the simple conditions shown here but, of
-        course, comes with the overhead of adding JAR files to support
-        the language, to say nothing of the added maintenance in requiring
-        two languages to implement a single system. See the
-        <a href="manual/OptionalTasks/script.html">
-        <code>&lt;script&gt;</code> task documentation</a> for more
-        details.</p>
-                        </blockquote>
-    </td></tr>
-  </table>
-  </a>
-        <a name="stop-dependency">
-  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <strong>
-          I have a target I want to skip if a property is set,
-      so I have <code>unless="property"</code> as an attribute 
-      of the target, but all the targets this target 
-      depends on are still executed. Why?
-        </strong>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                              <p>The list of dependencies is generated by Ant before any of the
-        targets are run. This allows dependent targets, such as an 
-        <code>init</code> target, to set properties that can control the 
-       	execution of the targets higher in the dependency graph. This 
-      	is a good thing.</p>
-                                        <p>However, when your dependencies break down the
-        higher-level task
-        into several smaller steps, this behaviour becomes 
-        counter-intuitive. There are a couple of solutions available:
-        </p>
-                                        <ol>
-          <li>Put the same condition on each of the dependent targets.</li>
-	  
-          <li>Execute the steps using <code>&lt;antcall&gt;</code>,
-          instead of specifying them inside the <code>depends</code>
-          attribute.</li>
-        </ol>
-                        </blockquote>
-    </td></tr>
-  </table>
-  </a>
-        <a name="include-order">
-  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <strong>
-          In my <code>&lt;fileset&gt;</code>, I've put in an
-      <code>&lt;exclude&gt;</code> of all files followed by an
-      <code>&lt;include&gt;</code> of just the files I want, but it
-      isn't giving me any files at all. What's wrong?
-      
-        </strong>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                              <p>The order of the <code>&lt;include&gt;</code> and
-        <code>&lt;exclude&gt;</code> tags within a <code>&lt;fileset&gt;</code>
-        is ignored when the FileSet is created. Instead, all of the
-        <code>&lt;include&gt;</code> elements are processed together,
-        followed by all of the <code>&lt;exclude&gt;</code>
-        elements. This means that the <code>&lt;exclude&gt;</code>
-        elements only apply to the file list produced by the
-        <code>&lt;include&gt;</code> elements.</p>
-                                        <p>To get the files you want, focus on just the
-	<code>&lt;include&gt;</code> patterns that would be necessary
-	to get them. If you find you need to trim the list that the
-  <code>&lt;include&gt;</code> elements
-	produce, then use <code>&lt;exclude&gt;</code> elements.</p>
-                        </blockquote>
-    </td></tr>
-  </table>
-  </a>
-        <a name="encoding">
-  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <strong>
-          How can I include national characters like German
-        umlauts in my build file?
-        </strong>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                              <p>You need to tell the XML parser which character encoding
-        your build file uses, this is done inside the <a href="http://www.w3.org/TR/2000/REC-xml-20001006#sec-prolog-dtd">XML
-        declaration</a>.</p>
-                                        <p>By default the parser assumes you are using the UTF-8
-        encoding instead of your platform's default.  For most western
-        european contries you should set the encoding to
-        <code>ISO-8859-1</code>.  To do so, make the very first line
-        of you build file read like</p>
-                                          <div align="left">
-    <table cellspacing="4" cellpadding="0" border="0">
-      <tr>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-      </tr>
-      <tr>
-        <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#ffffff"><pre>
-&lt;?xml version=&quot;1.0&quot; encoding=&quot;ISO-8859-1&quot; ?&gt;
-</pre></td>
-        <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-      </tr>
-      <tr>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-      </tr>
-    </table>
-  </div>
-                        </blockquote>
-    </td></tr>
-  </table>
-  </a>
-                        <a name="integration">
-  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <strong>
-          Is Ant supported by my IDE/Editor?
-        </strong>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                              <p>See the <a href="external.html#IDE and Editor Integration">section 
-        on IDE integration</a> on our External Tools and Tasks page.</p>
-                        </blockquote>
-    </td></tr>
-  </table>
-  </a>
-        <a name="emacs-mode">
-  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <strong>
-          Why doesn't (X)Emacs/vi/MacOS X's project builder
-      correctly parse the error messages generated by Ant?
-        </strong>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                              <p>Ant adds a "banner" with the name of the current
-        task in front of all logging messages - and there are no built-in
-        regular expressions in your editor that would account for
-        this.</p>
-                                        <p>You can disable this banner by invoking Ant with the
-        <code>-emacs</code> switch. Alternatively, you can add the
-        following snippet to your <code>.emacs</code> to make Emacs
-        understand Ant's output.</p>
-                                          <div align="left">
-    <table cellspacing="4" cellpadding="0" border="0">
-      <tr>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-      </tr>
-      <tr>
-        <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#ffffff"><pre>
-(require 'compile)
-(setq compilation-error-regexp-alist
-  (append (list 
-     ;; works for jikes
-     '(&quot;^\\s-*\\[[^]]*\\]\\s-*\\(.+\\):\\([0-9]+\\):\\([0-9]+\\):[0-9]+:[0-9]+:&quot; 1 2 3)
-     ;; works for javac 
-     '(&quot;^\\s-*\\[[^]]*\\]\\s-*\\(.+\\):\\([0-9]+\\):&quot; 1 2))
-  compilation-error-regexp-alist))
-</pre></td>
-        <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-      </tr>
-      <tr>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-      </tr>
-    </table>
-  </div>
-                                        <p>Yet another alternative that preserves most of Ant's
-        formatting is to pipe Ant's output through the following Perl
-        script by Dirk-Willem van Gulik:</p>
-                                          <div align="left">
-    <table cellspacing="4" cellpadding="0" border="0">
-      <tr>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-      </tr>
-      <tr>
-        <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#ffffff"><pre>
-#!/usr/bin/perl
-#
-# May 2001 dirkx@apache.org - remove any
-# [foo] lines from the output; keeping
-# spacing more or less there.
-#
-$|=1;
-while(&lt;STDIN&gt;) {
-	if (s/^(\s+)\[(\w+)\]//) {
-		if ($2 ne $last) {
-			print &quot;$1\[$2\]&quot;;
-			$s = ' ' x length($2);
-		} else {
-			print &quot;$1 $s &quot;;
-		};
-		$last = $2;
-	};
-	print;
-};
-</pre></td>
-        <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-      </tr>
-      <tr>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-      </tr>
-    </table>
-  </div>
-                        </blockquote>
-    </td></tr>
-  </table>
-  </a>
-                        <a name="dtd">
-  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <strong>
-          Is there a DTD that I can use to validate my build
-      files?
-        </strong>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                              <p>An incomplete DTD can be created by the
-          <code>&lt;antstructure&gt;</code> task - but this one
-          has a few problems:</p>
-                                        <ul>
-            <li>It doesn't know about required attributes.  Only
-            manual tweaking of this file can help here.</li>
-          
-            <li>It is not complete - if you add new tasks via
-            <code>&lt;taskdef&gt;</code> it won't know about it.  See
-            <a href="http://www.sdv.fr/pages/casa/html/ant-dtd.en.html">this
-            page</a> by Michel Casabianca for a solution to this
-            problem.  Note that the DTD you can download at this page
-            is based on Ant 0.3.1.</li>
-
-            <li>It may even be an invalid DTD.  As Ant allows tasks
-            writers to define arbitrary elements, name collisions will
-            happen quite frequently - if your version of Ant contains
-            the optional <code>&lt;test&gt;</code> and
-            <code>&lt;junit&gt;</code> tasks, there are two XML
-            elements named <code>test</code> (the task and the nested child
-            element of <code>&lt;junit&gt;</code>) with different attribute
-            lists.  This problem cannot be solved; DTDs don't give a
-            syntax rich enough to support this.</li>
-          </ul>
-                        </blockquote>
-    </td></tr>
-  </table>
-  </a>
-        <a name="xml-entity-include">
-  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <strong>
-          How do I include an XML snippet in my build file?
-        </strong>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                              <p>You can use XML's way of including external files and let
-        the parser do the job for Ant:</p>
-                                          <div align="left">
-    <table cellspacing="4" cellpadding="0" border="0">
-      <tr>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-      </tr>
-      <tr>
-        <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#ffffff"><pre>
-&lt;?xml version=&quot;1.0&quot;?&gt;
-
-&lt;!DOCTYPE project [
-    &lt;!ENTITY common SYSTEM &quot;file:./common.xml&quot;&gt;
-]&gt;
-
-&lt;project name=&quot;test&quot; default=&quot;test&quot; basedir=&quot;.&quot;&gt;
-
-  &lt;target name=&quot;setup&quot;&gt;
-    ...
-  &lt;/target&gt;
-
-  &amp;common;
-
-  ...
-
-&lt;/project&gt;
-</pre></td>
-        <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-      </tr>
-      <tr>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-      </tr>
-    </table>
-  </div>
-                                        <p>will literally include the contents of <code>common.xml</code> where
-        you've placed the <code>&amp;common;</code> entity.</p>
-                                        <p>In combination with a DTD, this would look like this:</p>
-                                          <div align="left">
-    <table cellspacing="4" cellpadding="0" border="0">
-      <tr>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-      </tr>
-      <tr>
-        <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#ffffff"><pre>
-&lt;!DOCTYPE project PUBLIC &quot;-//ANT//DTD project//EN&quot; &quot;file:./ant.dtd&quot; [
-   &lt;!ENTITY include SYSTEM &quot;file:./header.xml&quot;&gt;
-]&gt;
-</pre></td>
-        <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-      </tr>
-      <tr>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-      </tr>
-    </table>
-  </div>
-                        </blockquote>
-    </td></tr>
-  </table>
-  </a>
-        <a name="mail-logger">
-  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <strong>
-          How do I send an email with the result of my build
-        process?
-        </strong>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                              <p>If you are using a nightly build of Ant 1.5 after
-        2001-12-14, you can use the built-in MailLogger:</p>
-                                          <div align="left">
-    <table cellspacing="4" cellpadding="0" border="0">
-      <tr>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-      </tr>
-      <tr>
-        <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#ffffff"><pre>
-         ant -logger org.apache.tools.ant.listener.MailLogger
-</pre></td>
-        <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-      </tr>
-      <tr>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-      </tr>
-    </table>
-  </div>
-                                        <p>See the <a href="http://cvs.apache.org/viewcvs/~checkout~/jakarta-ant/docs/manual/listeners.html?content-type=text/html">Listeners
-        &amp; Loggers</a> documentation for details on the properties
-        required.</p>
-                                        <p>For older versions of Ant, you can use a custom
-        BuildListener that sends out an email
-        in the buildFinished() method.  Will Glozer
-        &lt;will.glozer@jda.com&gt; has written such a listener based
-        on <a href="http://java.sun.com/products/javamail/">JavaMail</a>. 
-        The source is:</p>
-                                          <div align="left">
-    <table cellspacing="4" cellpadding="0" border="0">
-      <tr>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-      </tr>
-      <tr>
-        <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#ffffff"><pre>
-import java.io.*;
-import java.util.*;
-import javax.mail.*;
-import javax.mail.internet.*;
-import org.apache.tools.ant.*;
-
-/**
- * A simple listener that waits for a build to finish and sends an email
- * of the results.  The settings are stored in &quot;monitor.properties&quot; and
- * are fairly self explanatory.
- *
- * @author      Will Glozer
- * @version     1.05a 09/06/2000
- */
-public class BuildMonitor implements BuildListener {
-    protected Properties props;
-
-    /**
-     * Create a new BuildMonitor.
-     */
-    public BuildMonitor() throws Exception {
-        props = new Properties();
-        InputStream is = getClass().getResourceAsStream(&quot;monitor.properties&quot;);
-        props.load(is);
-        is.close();
-    }
-
-    public void buildStarted(BuildEvent e) {
-    }
-
-    /**
-     * Determine the status of the build and the actions to follow, now that
-     * the build has completed.
-     *
-     * @param       e       Event describing the build tatus.
-     */
-    public void buildFinished(BuildEvent e) {
-        Throwable th = e.getException();
-        String status = (th != null) ? &quot;failed&quot; : &quot;succeeded&quot;;
-        
-        try {
-            String key = &quot;build.&quot; + status;
-            if (props.getProperty(key + &quot;.notify&quot;).equalsIgnoreCase(&quot;false&quot;)) {
-                    return;
-            }
-            
-            Session session = Session.getDefaultInstance(props, null);
-
-            MimeMessage message = new MimeMessage(session);
-            message.addRecipients(Message.RecipientType.TO, parseAddresses(
-                props.getProperty(key + &quot;.email.to&quot;)));
-            message.setSubject(props.getProperty(key + &quot;.email.subject&quot;));
-
-            BufferedReader br = new BufferedReader(new FileReader(
-                props.getProperty(&quot;build.log&quot;)));
-            StringWriter sw = new StringWriter();
-            
-            String line = br.readLine();
-            while (line != null) {
-                sw.write(line);
-                sw.write(&quot;\n&quot;);
-                line = br.readLine();
-            }
-            br.close();
-            
-            message.setText(sw.toString(), &quot;UTF-8&quot;);
-            sw.close();
-            
-            Transport transport = session.getTransport();
-            transport.connect();
-            transport.send(message);
-            transport.close();
-        } catch (Exception ex) {
-            System.out.println(&quot;BuildMonitor failed to send email!&quot;);
-            ex.printStackTrace();
-        }
-    }
-
-    /**
-     * Parse a comma separated list of internet email addresses.
-     *
-     * @param       s       The list of addresses.
-     * @return      Array of Addresses.
-     */
-    protected Address[] parseAddresses(String s) throws Exception {
-        StringTokenizer st = new StringTokenizer(s, &quot;,&quot;);
-        Address[] addrs = new Address[st.countTokens()];
-
-        for (int i = 0; i &lt; addrs.length; i++) {
-            addrs[i] = new InternetAddress(st.nextToken());
-        }
-        return addrs;
-    }
-
-    public void messageLogged(BuildEvent e) {
-    }
-
-    public void targetStarted(BuildEvent e) {
-    }
-
-    public void targetFinished(BuildEvent e) {
-    }
-
-    public void taskStarted(BuildEvent e) {        
-    }
-
-    public void taskFinished(BuildEvent e) {
-    }
-}
-</pre></td>
-        <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-      </tr>
-      <tr>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-      </tr>
-    </table>
-  </div>
-                                        <p>With a <code>monitor.properties</code> like this:</p>
-                                          <div align="left">
-    <table cellspacing="4" cellpadding="0" border="0">
-      <tr>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-      </tr>
-      <tr>
-        <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#ffffff"><pre>
-# configuration for build monitor
-
-mail.transport.protocol=smtp
-mail.smtp.host=&lt;host&gt;
-mail.from=Will Glozer &lt;will.glozer@jda.com&gt;
-
-build.log=build.log
-
-build.failed.notify=true
-build.failed.email.to=will.glozer@jda.com
-build.failed.email.subject=Nightly build failed!
-
-build.succeeded.notify=true
-build.succeeded.email.to=will.glozer@jda.com
-build.succeeded.email.subject=Nightly build succeeded!
-</pre></td>
-        <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-      </tr>
-      <tr>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-      </tr>
-    </table>
-  </div>
-                                        <p><code>monitor.properties</code> should be placed right next
-        to your compiled <code>BuildMonitor.class</code>.  To use it,
-        invoke Ant like:</p>
-                                          <div align="left">
-    <table cellspacing="4" cellpadding="0" border="0">
-      <tr>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-      </tr>
-      <tr>
-        <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#ffffff"><pre>
-ant -listener BuildMonitor -logfile build.log
-</pre></td>
-        <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-      </tr>
-      <tr>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-      </tr>
-    </table>
-  </div>
-                                        <p>Make sure that <code>mail.jar</code> from JavaMail and
-        <code>activation.jar</code> from the 
-        <a href="http://java.sun.com/products/javabeans/glasgow/jaf.html">Java
-        Beans Activation Framework</a> are in your <code>CLASSPATH</code>.</p>
-                        </blockquote>
-    </td></tr>
-  </table>
-  </a>
-        <a name="listener-properties">
-  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <strong>
-          How do I get at the properties that Ant was running
-      with from inside BuildListener?
-        </strong>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                              <p>You can get at a hashtable with all the properties that Ant
-        has been using through the BuildEvent parameter. For
-        example:</p>
-                                          <div align="left">
-    <table cellspacing="4" cellpadding="0" border="0">
-      <tr>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-      </tr>
-      <tr>
-        <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#ffffff"><pre>
-public void buildFinished(BuildEvent e) {
-    Hashtable table = e.getProject().getProperties();
-    String buildpath = (String)table.get(&quot;build.path&quot;);
-    ...
-}
-</pre></td>
-        <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-      </tr>
-      <tr>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-      </tr>
-    </table>
-  </div>
-                                        <p>This is more accurate than just reading the same property
-        files that your project does, since it will give the correct
-        results for properties that were specified on the Ant command line.</p>
-                        </blockquote>
-    </td></tr>
-  </table>
-  </a>
-                        <a name="remove-cr">
-  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <strong>
-          &lt;chmod&gt; or &lt;exec&gt; doesn't work in Ant
-        1.3 on Unix
-        </strong>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                              <p>The <code>antRun</code> script in <code>ANT_HOME/bin</code>
-        has DOS instead of Unix line endings; you must remove the
-        carriage-return characters from this file.  This can be done by
-        using Ant's <code>&lt;fixcrlf&gt;</code> task
-        or something like:</p>
-                                          <div align="left">
-    <table cellspacing="4" cellpadding="0" border="0">
-      <tr>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-      </tr>
-      <tr>
-        <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#ffffff"><pre>
-tr -d '\r' &lt; $ANT_HOME/bin/antRun &gt; /tmp/foo
-mv /tmp/foo $ANT_HOME/bin/antRun
-</pre></td>
-        <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-      </tr>
-      <tr>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-      </tr>
-    </table>
-  </div>
-                        </blockquote>
-    </td></tr>
-  </table>
-  </a>
-        <a name="javadoc-cannot-execute">
-  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <strong>
-          JavaDoc failed: java.io.IOException: javadoc: cannot execute
-        </strong>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                              <p>There is a bug in the Solaris reference implementation of
-        the JDK (see <a href="http://developer.java.sun.com/developer/bugParade/bugs/4230399.html">http://developer.java.sun.com/developer/bugParade/bugs/4230399.html</a>).
-        This also appears to be true under Linux. Moving the JDK to
-        the front of the PATH fixes the problem.</p>
-                        </blockquote>
-    </td></tr>
-  </table>
-  </a>
-        <a name="delegating-classloader">
-  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <strong>
-          &lt;style&gt; or &lt;junit&gt; ignores my
-      &lt;classpath&gt;
-        </strong>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                              <p>These tasks don't ignore your classpath setting, you
-        are facing a common problem with delegating classloaders.</p>
-                                        <p>First of all let's state that Ant adds all
-        <code>.jar</code> files from <code>ANT_HOME/lib</code> to
-        <code>CLASSPATH</code>, therefore "in
-        <code>CLASSPATH</code>" shall mean "either in your
-        <code>CLASSPATH</code> environment variable or
-        <code>ANT_HOME/lib</code>" for the rest of this
-        answer.</p>
-                                        <p>This question collects a common type of problem: A task
-        needs an external library and it has a nested classpath
-        element so that you can point it to this external library, but
-        that doesn't work unless you put the external library into the
-        <code>CLASSPATH</code>.</p>
-                                        <p>The root of the problem is that the class that needs the
-        external library is on the <code>CLASSPATH</code>.</p>
-                                        <p>When you specify a nested <code>&lt;classpath&gt;</code> in
-        Ant, Ant creates a new class loader that uses the path you
-        have specified.  It then tries to load additional classes from
-        this classloader.</p>
-                                        <p>In most cases - for example the two cases above - Ant
-        doesn't load the external library directly, it is the loaded
-        class that does so.</p>
-                                        <p>In the case of <code>&lt;junit&gt;</code> it is the task
-        implementation itself and in the case of
-        <code>&lt;style&gt;</code> it is the implementation of the
-        <code>org.apache.tools.ant.taskdefs.XSLTLiaison</code>
-        class.</p>
-                                        <p>Ant's class loader implementation uses Java's
-        delegation model, see <a href="http://java.sun.com/products/jdk/1.2/docs/api/java/lang/ClassLoader.html">http://java.sun.com/products/jdk/1.2/docs/api/java/lang/ClassLoader.html</a>
-        the paragraph</p>
-                                        <blockquote>The <code>ClassLoader</code> class uses a
-        delegation model to search for classes and resources. Each
-        instance of <code>ClassLoader</code> has an associated parent
-        class loader.  When called upon to find a class or resource, a
-        <code>ClassLoader</code> instance will delegate the search for
-        the class or resource to its parent class loader before
-        attempting to find the class or resource itself. The virtual
-        machine's built-in class loader, called the bootstrap
-        class loader, does not itself have a parent but may serve as
-        the parent of a <code>ClassLoader</code>
-        instance.</blockquote>
-                                        <p>This means, Ant's class loader will consult the
-        bootstrap class loader first, which tries to load classes from
-        <code>CLASSPATH</code>.  The bootstrap class loader
-        doesn't know anything about Ant's class loader or
-        even the path you have specified.</p>
-                                        <p>If the bootstrap class loader can load the class Ant has
-        asked it to load, this class will try to load the external
-        library from <code>CLASSPATH</code> as well - it doesn't
-        know anything else - and will not find it unless the library
-        is in <code>CLASSPATH</code> as well.</p>
-                                        <p>To solve this, you have two major options:</p>
-                                        <ol>
-          <li>put all external libaries you need in
-          <code>CLASSPATH</code> as well this is not what you want,
-          otherwise you wouldn't have found this FAQ entry.</li>
-
-          <li>remove the class that loads the external library from
-          the <code>CLASSPATH</code>.</li>
-        </ol>
-                                        <p>The easiest way to do this is to remove
-        <code>optional.jar</code> from <code>ANT_HOME/lib</code>.  If
-        you do so, you will have to <code>&lt;taskdef&gt;</code> all
-        optional tasks and use nested <code>&lt;classpath&gt;</code>
-        elements in the <code>&lt;taskdef&gt;</code> tasks that point
-        to the new location of <code>optional.jar</code>.  Also,
-        don't forget to add the new location of
-        <code>optional.jar</code> to the
-        <code>&lt;classpath&gt;</code> of your
-        <code>&lt;style&gt;</code> or <code>&lt;junit&gt;</code>
-        task.</p>
-                                        <p>If you want to avoid to <code>&lt;taskdef&gt;</code> all
-        optional tasks you need, the only other option is to remove
-        the classes that should not be loaded via the bootstrap class
-        loader from <code>optional.jar</code> and put them into a
-        separate archive. Add this separate archive to the
-        <code>&lt;classpath&gt;</code> of your
-        <code>&lt;style&gt;</code> or <code>&lt;junit&gt;</code> task
-        - and make sure the separate archive is not in
-        <code>CLASSPATH</code>.</p>
-                                        <p>In the case of <code>&lt;junit&gt;</code> you'd have
-        to remove all classes that are in the
-        <code>org/apache/tools/ant/taskdefs/optional/junit</code>
-        directory, in the <code>&lt;style&gt;</code> case it is one of
-        the <code>*Liaison</code> classes in
-        <code>org/apache/tools/ant/taskdefs/optional</code>.</p>
-                                        <p>If you use the option to break up <code>optional.jar</code>
-        for <code>&lt;junit&gt;</code>, you still have to use a
-        <code>&lt;taskdef&gt;</code> with a nested
-        <code>&lt;classpath&gt;</code> to define the junit task.</p>
-                        </blockquote>
-    </td></tr>
-  </table>
-  </a>
-              </blockquote>
-    </td></tr>
-  </table>
-            </td>
-        </tr>
-
-        <!-- FOOTER -->
-        <tr><td colspan="2">
-          <hr noshade="" size="1"/>
-        </td></tr>
-        <tr><td colspan="2">
-          <div align="center"><font color="#525D76" size="-1"><em>
-          Copyright &#169; 2000-2002, Apache Software Foundation
-          </em></font></div>
-        </td></tr>
-      </table>
-    </body>
-  </html>
-<!-- end the processing -->
-
-
-
-
-
-
diff --git a/docs/images/ant_logo.ico b/docs/images/ant_logo.ico
deleted file mode 100644
index 9dbc258..0000000
--- a/docs/images/ant_logo.ico
+++ /dev/null
Binary files differ
diff --git a/docs/images/ant_logo_large.gif b/docs/images/ant_logo_large.gif
deleted file mode 100644
index e99363b..0000000
--- a/docs/images/ant_logo_large.gif
+++ /dev/null
Binary files differ
diff --git a/docs/images/ant_logo_medium.gif b/docs/images/ant_logo_medium.gif
deleted file mode 100644
index 44bc07f..0000000
--- a/docs/images/ant_logo_medium.gif
+++ /dev/null
Binary files differ
diff --git a/docs/images/ant_logo_small.gif b/docs/images/ant_logo_small.gif
deleted file mode 100644
index 34080c9..0000000
--- a/docs/images/ant_logo_small.gif
+++ /dev/null
Binary files differ
diff --git a/docs/images/jakarta-logo.gif b/docs/images/jakarta-logo.gif
deleted file mode 100644
index 82baef3..0000000
--- a/docs/images/jakarta-logo.gif
+++ /dev/null
Binary files differ
diff --git a/docs/images/jw_ec_logo_winner2002.gif b/docs/images/jw_ec_logo_winner2002.gif
deleted file mode 100644
index 334b114..0000000
--- a/docs/images/jw_ec_logo_winner2002.gif
+++ /dev/null
Binary files differ
diff --git a/docs/images/sdm_productivity_award.gif b/docs/images/sdm_productivity_award.gif
deleted file mode 100644
index b18c0af..0000000
--- a/docs/images/sdm_productivity_award.gif
+++ /dev/null
Binary files differ
diff --git a/docs/index.html b/docs/index.html
deleted file mode 100644
index d13a4f2..0000000
--- a/docs/index.html
+++ /dev/null
@@ -1,321 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-
-<!-- Content Stylesheet for Site -->
-
-        
-<!-- start the processing -->
-    <html>
-    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
-    <head>
-      <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
-  
-                      <meta name="author" value="Conor MacNeill">
-  <meta name="email" value="">
-                <meta name="author" value="Stefan Bodewig">
-  <meta name="email" value="stefan.bodewig@epost.de">
-        
-      <title>Apache Ant - Ant</title>
-    </head>
-  
-    <body bgcolor="#ffffff" text="#000000" link="#525D76">    
-      <table border="0" width="100%" cellspacing="0">
-        <!-- TOP IMAGE -->
-        <tr>
-                <td align="left">
-    <a href="http://jakarta.apache.org"><img src="images/jakarta-logo.gif" border="0"/></a>
-    </td>
-    <td align="center">
-    <a href="http://www.sdmagazine.com"><img src="images/sdm_productivity_award.gif" border="0" height="75" width="135"/></a>
-    </td>
-    <td align="center">
-    <a href="http://www.javaworld.com"><img src="images/jw_ec_logo_winner2002.gif" border="0" height="85" width="230"/></a>
-    </td>
-    <td align="right">
-              <a href="http://jakarta.apache.org/ant/"><img src="./images/ant_logo_large.gif" alt="Apache Ant" border="0"/></a>
-        </td>
-          </tr>
-      </table>
-      <table border="0" width="100%" cellspacing="4">
-        <tr><td colspan="2">
-          <hr noshade="" size="1"/>
-        </td></tr>
-        
-        <tr>
-          <!-- LEFT SIDE NAVIGATION -->
-          <td valign="top" nowrap="true">
-                <p><strong>Apache Ant</strong></p>
-    <ul>
-          <li>      <a href="./index.html">Front Page</a>
-  </li>
-          <li>      <a href="./antnews.html">News</a>
-  </li>
-          <li>      <a href="./manual/index.html">Documentation</a>
-  </li>
-          <li>      <a href="./projects.html">Related Projects</a>
-  </li>
-          <li>      <a href="./external.html">External Tools and Tasks</a>
-  </li>
-          <li>      <a href="./resources.html">Resources</a>
-  </li>
-          <li>      <a href="./faq.html">Ant FAQ</a>
-  </li>
-          <li>      <a href="./problems.html">Having Problems?</a>
-  </li>
-        </ul>
-      <p><strong>Download</strong></p>
-    <ul>
-          <li>      <a href="http://jakarta.apache.org/site/binindex.html">Binaries</a>
-  </li>
-          <li>      <a href="http://jakarta.apache.org/site/sourceindex.html">Source Code</a>
-  </li>
-        </ul>
-      <p><strong>Jakarta</strong></p>
-    <ul>
-          <li>      <a href="http://jakarta.apache.org/site/news.html">News & Status</a>
-  </li>
-          <li>      <a href="http://jakarta.apache.org/site/mission.html">Mission</a>
-  </li>
-          <li>      <a href="http://jakarta.apache.org/site/guidelines.html">Guidelines Notes</a>
-  </li>
-          <li>      <a href="http://jakarta.apache.org/site/faqs.html">FAQs</a>
-  </li>
-        </ul>
-      <p><strong>Get Involved</strong></p>
-    <ul>
-          <li>      <a href="http://jakarta.apache.org/site/getinvolved.html">Overview</a>
-  </li>
-          <li>      <a href="http://jakarta.apache.org/site/cvsindex.html">CVS Repositories</a>
-  </li>
-          <li>      <a href="http://jakarta.apache.org/site/mail.html">Mailing Lists</a>
-  </li>
-          <li>      <a href="http://jakarta.apache.org/site/library.html">Reference Library</a>
-  </li>
-          <li>      <a href="http://nagoya.apache.org/bugzilla/enter_bug.cgi?product=Ant">Bug Database</a>
-  </li>
-          <li>      <a href="http://nagoya.apache.org/bugzilla/enter_bug.cgi?product=Ant&bug_severity=Enhancement">Enhancement Requests</a>
-  </li>
-        </ul>
-            </td>
-          <td align="left" valign="top">
-        <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#525D76">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Ant 1.5Beta1"><strong>Ant 1.5Beta1</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <h3>Apache Ant 1.5Beta1 Available !</h3>
-                                <p>Version 1.5Beta1 of Ant has been released. It is available for download 
-      <a href="http://jakarta.apache.org/builds/jakarta-ant/release/v1.5Beta1/">
-      here</a>.
-    </p>
-                    </blockquote>
-    </td></tr>
-  </table>
-        <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#525D76">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Ant wins again!"><strong>Ant wins again!</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>We are proud to announce that Ant has won another award.
-    <em>Software Development</em> magazine has awarded Ant its
-    <strong>2002 Productivity Award</strong>.
-    Click on the "News" link to learn more.</p>
-                    </blockquote>
-    </td></tr>
-  </table>
-        <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#525D76">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Ant has won!"><strong>Ant has won!</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>We are proud to announce that Ant has won the JavaWorld
-    Editors' Choice Award for <strong>Most Useful Java
-    Community-Developed Technology</strong>. Click on the "News" link
-    to learn more.</p>
-                    </blockquote>
-    </td></tr>
-  </table>
-        <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#525D76">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Ant 1.4.1"><strong>Ant 1.4.1</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <h3>Apache Ant 1.4.1 Available !</h3>
-                                <p>Version 1.4.1 of Ant has been released. This is a bugfix release which corrects a few problems
-     in the 1.4 release. It is available for download 
-     <a href="http://www.apache.org/dist/jakarta/jakarta-ant/release/v1.4.1/">
-     here</a>.
-     </p>
-                    </blockquote>
-    </td></tr>
-  </table>
-        <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#525D76">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Apache Ant"><strong>Apache Ant</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>
-Apache Ant is a Java-based build tool. In theory, it is kind of like
-Make, but without Make's wrinkles.
-</p>
-                                <p>
-Why another build tool when there is already <em>make</em>, <em>gnumake</em>,
-<em>nmake</em>, <em>jam</em>, and
-others? Because all those tools have limitations that Ant's original author
-couldn't live with when developing software across multiple platforms. Make-like
-tools are inherently shell-based -- they evaluate a set of dependencies, then
-execute commands not unlike what you would issue in a shell. This means that you
-can easily extend these tools by using or writing any program for the OS that
-you are working on. However, this also means that you limit yourself to the OS,
-or at least the OS type such as Unix, that you are working on.
-</p>
-                                <p>
-Makefiles are inherently evil as well. Anybody who has worked on them for any
-time has run into the dreaded tab problem. "Is my command not executing
-because I have a space in front of my tab!!!" said the original author of
-Ant way too many times. Tools like Jam took care of this to a great degree, but
-still have yet another format to use and remember.
-</p>
-                                <p>
-Ant is different. Instead of a model where it is extended with shell-based
-commands, Ant is extended using Java classes. Instead of writing shell commands,
-the configuration files are XML-based, calling out a target tree where various
-tasks get executed. Each task is run by an object that implements a particular
-Task interface.
-</p>
-                                <p>
-Granted, this removes some of the expressive power that is inherent by being
-able to construct a shell command such as
-<code>`find . -name foo -exec rm {}`</code>, but it
-gives you the ability to be cross platform -- to work anywhere and everywhere.
-And hey, if you really need to execute a shell command, Ant has an
-<code>&lt;exec&gt;</code> task that
-allows different commands to be executed based on the OS that it is executing
-on.
-</p>
-                    </blockquote>
-    </td></tr>
-  </table>
-        <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#525D76">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Documentation"><strong>Documentation</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>
-You can view the documentation for the current 1.5 Beta (Apache Ant 1.5Beta1)
-<a href="manual/index.html">online</a>
-</p>
-                                <p>
-Comprehensive documentation is included in the source and binary distributions. 
-</p>
-                    </blockquote>
-    </td></tr>
-  </table>
-        <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#525D76">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Latest Release"><strong>Latest Release</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>
-    You can download the latest release:
-    </p>
-                                <ul>
-        <li><a href="http://www.apache.org/dist/jakarta/jakarta-ant/release/v1.4.1/bin/">
-                Download the binary release</a></li>
-        <li><a href="http://www.apache.org/dist/jakarta/jakarta-ant/release/v1.4.1/src/">
-                Download the source release</a></li>
-        <li><a href="http://www.apache.org/dist/jakarta/jakarta-ant/release/v1.4.1/rpms/">
-                Download source and binary RPMs</a></li>
-    </ul>
-                    </blockquote>
-    </td></tr>
-  </table>
-        <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#525D76">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Nightly Builds"><strong>Nightly Builds</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>
-    If you wish to use the latest Ant features, you can try downloading a nightly 
-    build from <a href="http://www.apache.org/dist/jakarta/jakarta-ant/nightly/">here</a>
-    </p>
-                    </blockquote>
-    </td></tr>
-  </table>
-        <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#525D76">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Towards Ant2"><strong>Towards Ant2</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>
-    We are currently hashing out design details for Ant2. Please
-    read the latest <a href="antnews.html">Ant news</a> for more details.
-    </p>
-                    </blockquote>
-    </td></tr>
-  </table>
-        <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#525D76">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Get Involved"><strong>Get Involved</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <ul>
-<li><a href="http://jakarta.apache.org/getinvolved/getinvolvedindex.html">Get Involved</a></li>
-<li><a href="http://jakarta.apache.org/getinvolved/mail.html">Join Mailing Lists</a></li>
-<li><a href="http://marc.theaimsgroup.com/?l=ant-dev&amp;r=1&amp;w=2">Search the Dev Mailing List</a>
-</li>
-<li><a href="http://marc.theaimsgroup.com/?l=ant-user&amp;r=1&amp;w=2">Search the User Mailing List</a>
-</li>
-</ul>
-                    </blockquote>
-    </td></tr>
-  </table>
-              </td>
-        </tr>
-
-        <!-- FOOTER -->
-        <tr><td colspan="2">
-          <hr noshade="" size="1"/>
-        </td></tr>
-        <tr><td colspan="2">
-          <div align="center"><font color="#525D76" size="-1"><em>
-          Copyright &#169; 2000-2002, Apache Software Foundation
-          </em></font></div>
-        </td></tr>
-      </table>
-    </body>
-  </html>
-<!-- end the processing -->
-
-
-
-
diff --git a/docs/logocontest.html b/docs/logocontest.html
deleted file mode 100644
index af4686c..0000000
--- a/docs/logocontest.html
+++ /dev/null
@@ -1,224 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-
-<!-- Content Stylesheet for Site -->
-
-        
-<!-- start the processing -->
-    <html>
-    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
-    <head>
-      <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
-  
-                      <meta name="author" value="Erik Hatcher">
-  <meta name="email" value="ehatcher@apache.org">
-        
-      <title>Apache Ant - Ant Logo Content Results</title>
-    </head>
-  
-    <body bgcolor="#ffffff" text="#000000" link="#525D76">    
-      <table border="0" width="100%" cellspacing="0">
-        <!-- TOP IMAGE -->
-        <tr>
-                <td align="left">
-    <a href="http://jakarta.apache.org"><img src="http://jakarta.apache.org/images/jakarta-logo.gif" border="0"/></a>
-    </td>
-    <td align="center">
-    <a href="http://www.javaworld.com"><img src="images/jw_ec_logo_finalist2002.gif" border="0"/></a>
-    </td>
-    <td align="right">
-              <a href="http://jakarta.apache.org/ant/"><img src="./images/ant_logo_large.gif" alt="Apache Ant" border="0"/></a>
-        </td>
-          </tr>
-      </table>
-      <table border="0" width="100%" cellspacing="4">
-        <tr><td colspan="2">
-          <hr noshade="" size="1"/>
-        </td></tr>
-        
-        <tr>
-          <!-- LEFT SIDE NAVIGATION -->
-          <td valign="top" nowrap="true">
-                <p><strong>Apache Ant</strong></p>
-    <ul>
-          <li>      <a href="./index.html">Front Page</a>
-  </li>
-          <li>      <a href="./antnews.html">News</a>
-  </li>
-          <li>      <a href="./manual/index.html">Documentation</a>
-  </li>
-          <li>      <a href="./projects.html">Related Projects</a>
-  </li>
-          <li>      <a href="./external.html">External Tools and Tasks</a>
-  </li>
-          <li>      <a href="./resources.html">Resources</a>
-  </li>
-          <li>      <a href="./faq.html">Ant FAQ</a>
-  </li>
-          <li>      <a href="./problems.html">Having Problems?</a>
-  </li>
-        </ul>
-      <p><strong>Download</strong></p>
-    <ul>
-          <li>      <a href="http://jakarta.apache.org/site/binindex.html">Binaries</a>
-  </li>
-          <li>      <a href="http://jakarta.apache.org/site/sourceindex.html">Source Code</a>
-  </li>
-        </ul>
-      <p><strong>Jakarta</strong></p>
-    <ul>
-          <li>      <a href="http://jakarta.apache.org/site/news.html">News & Status</a>
-  </li>
-          <li>      <a href="http://jakarta.apache.org/site/mission.html">Mission</a>
-  </li>
-          <li>      <a href="http://jakarta.apache.org/site/guidelines.html">Guidelines Notes</a>
-  </li>
-          <li>      <a href="http://jakarta.apache.org/site/faqs.html">FAQs</a>
-  </li>
-        </ul>
-      <p><strong>Get Involved</strong></p>
-    <ul>
-          <li>      <a href="http://jakarta.apache.org/site/getinvolved.html">Overview</a>
-  </li>
-          <li>      <a href="http://jakarta.apache.org/site/cvsindex.html">CVS Repositories</a>
-  </li>
-          <li>      <a href="http://jakarta.apache.org/site/mail.html">Mailing Lists</a>
-  </li>
-          <li>      <a href="http://jakarta.apache.org/site/library.html">Reference Library</a>
-  </li>
-          <li>      <a href="http://nagoya.apache.org/bugzilla/enter_bug.cgi?product=Ant">Bug Database</a>
-  </li>
-          <li>      <a href="http://nagoya.apache.org/bugzilla/enter_bug.cgi?product=Ant&bug_severity=Enhancement">Enhancement Requests</a>
-  </li>
-        </ul>
-            </td>
-          <td align="left" valign="top">
-        <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#525D76">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Poll Results"><strong>Poll Results</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>The final poll results: <a href="http://vote.sparklit.com/poll.spark/593305">Sparklit Poll Results</a></p>
-                                <p>
-      The Ant Committers will be voting on the official Ant Logo this week based on the poll results
-      and the original artists' committment to work with us to refine the
-      fonts, colors, sizes, and formats of the chosen logo(s).
-    </p>
-                    </blockquote>
-    </td></tr>
-  </table>
-        <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#525D76">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="The Winner"><strong>The Winner</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p align="center"><img src="images/nicksant1.gif" /> 
-    <img src="images/nicksants2.gif" /> <img src="images/nicksant3.gif" /><br />
-    by Nick King (nickk at remoteapps.com)
-    </p>
-                    </blockquote>
-    </td></tr>
-  </table>
-        <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#525D76">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Runner Up Entries"><strong>Runner Up Entries</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p align="center">
-      <table>
-        <tr>
-          <td>
-            <img src="images/james.jpg" /><br />
-            Adam James (adam_james_ at hotmail.com) 
-          </td>
-        </tr>
-        <tr>
-          <td>
-            <hr />
-            <img src="images/hughes2.gif" /><br />
-            Justin Ransom (Justin.Ransom at rubus.com) 
-          </td>
-        </tr>
-        <tr>
-          <td>
-            <hr />
-            <img src="images/ant_logo.gif" /> <img src="images/ant2_logo.gif" /><br />
-            Christoph Wilhelms (Christoph.Wilhelms at t-online.de) 
-          </td>
-        </tr>
-        <tr>
-          <td>
-            <hr />
-            <img src="images/andrews3.gif" /><br />
-            Scott Andrews (scott.andrews at bankofamerica.com) 
-          </td>
-        </tr>
-      </table>
-    </p>
-                    </blockquote>
-    </td></tr>
-  </table>
-        <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#525D76">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="ASCII Art Winner"><strong>ASCII Art Winner</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>
-  <pre>
-&lt;ant&gt;
- \_/
-\(_)/
--(_)-
-/(_)\
-</pre>
-Conor MacNeill
-  </p>
-                    </blockquote>
-    </td></tr>
-  </table>
-        <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#525D76">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="The Contestants"><strong>The Contestants</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>Special thanks go to all the contestants - a lot of hard work was put
-    into these entries. Your contributions to Ant are very much
-    appreciated.</p>
-                                <p>All the entries can be found at <a href="logos.html">the logo entry archive</a></p>
-                    </blockquote>
-    </td></tr>
-  </table>
-              </td>
-        </tr>
-
-        <!-- FOOTER -->
-        <tr><td colspan="2">
-          <hr noshade="" size="1"/>
-        </td></tr>
-        <tr><td colspan="2">
-          <div align="center"><font color="#525D76" size="-1"><em>
-          Copyright &#169; 2000-2002, Apache Software Foundation
-          </em></font></div>
-        </td></tr>
-      </table>
-    </body>
-  </html>
-<!-- end the processing -->
-
-
-
-
diff --git a/docs/manual/CoreTasks/ant.html b/docs/manual/CoreTasks/ant.html
deleted file mode 100644
index 4e84cc5..0000000
--- a/docs/manual/CoreTasks/ant.html
+++ /dev/null
@@ -1,229 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Ant Task</title>
-</head>
-
-<body>
-
-<h2><a name="ant">Ant</a></h2>
-<h3>Description</h3>
-<p>Runs Ant on a supplied buildfile. This can be used to build subprojects.</p>
-<p>When the <i>antfile</i> attribute is omitted, the file &quot;build.xml&quot;
-in the supplied directory (<i>dir</i> attribute) is used.</p>
-<p>If no target attribute is supplied, the default target of the new project is
-used.</p>
-<p>By default, all of the properties of the current project will be
-available in the new project.   Alternatively, you can
-set the <i>inheritAll</i> attribute to <code>false</code> and only
-&quot;user&quot; properties (i.e., those passed on the command-line)
-will be passed to the new project.  In either case, the set of
-properties passed to the new project will override the properties that 
-are set in the new project (See also the <a href="property.html">property task</a>).</p>
-<p>You can also set properties in the new project from the old project by
-using nested property tags. These properties are always passed regardless of the
-setting of <i>inheritAll</i>.  This allows you to parameterize your subprojects.</p>
-
-<p>References to data types can also be passed to the new project, but
-by default they are not.  If you set the inheritrefs attribute to
-true, all references will be copied, but they will not override
-references defined in the new project.</p>
-
-<p>Nested <a href="#reference"><i>&lt;reference&gt;</i></a> elements
-can also be used to copy references from the calling project to the
-new project, optionally under a different id.  References taken from
-nested elements will override existing references in the new
-project.</p>
-
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">antfile</td>
-    <td valign="top">the buildfile to use. Defaults to
-      &quot;build.xml&quot;.  This file is expected to be a filename
-      relative to the dir attribute given.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">dir</td>
- 	<td valign="top">the directory to use as a basedir for the new Ant project. 
-      Defaults to the current project's basedir, unless
-      inheritall has been set to false, in which case it doesn't
-      have a default value.  This will override the basedir
-      setting of the called project.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">target</td>
-    <td valign="top">the target of the new Ant project that should be executed.
-      Defaults to the new project's default target.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">output</td>
-    <td valign="top">Filename to write the ant output to.  This is
-    relative to the value of the dir attribute if it has been set or
-    to the base directory of the current project otherwise.
-    </td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">inheritAll</td> 
-    <td valign="top">If <code>true</code>, pass all properties to the
-      new Ant project.  Defaults to <code>true</code>.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">inheritRefs</td> 
-    <td valign="top">If <code>true</code>, pass all references to the
-      new Ant project.  Defaults to <code>false</code>.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-</table>
-
-<h3>Parameters specified as nested elements</h3>
-<h4>property</h4>
-<p>See the description of the <a href="property.html">property task</a>.</p>
-
-<h4><a name="reference">reference</a></h4>
-<p>Used to chose references that shall be copied into the new project,
-optionally changing their id.</p>
-
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">refid</td>
-    <td valign="top">The id of the reference in the calling project.</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">torefid</td>
-    <td valign="top">The id of the reference in the new project.</td>
-    <td valign="top" align="center">No, defaults to the value of refid.</td>
-  </tr>
-</table>
-
-<h3>Basedir of the new project</h3>
-
-<p>The basedir value of the new project is affected by the two
-attributes dir and inheritall, see the following table for
-details:</p>
-
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>dir attribute</b></td>
-    <td valign="top"><b>inheritAll attribute</b></td>
-    <td valign="top"><b>new project's basedir</b></td>
-  </tr>
-  <tr>
-    <td valign="top">value provided</td>
-    <td valign="top">true</td>
-    <td valign="top">value of dir attribute</td>
-  </tr>
-  <tr>
-    <td valign="top">value provided</td>
-    <td valign="top">false</td>
-    <td valign="top">value of dir attribute</td>
-  </tr>
-  <tr>
-    <td valign="top">omitted</td>
-    <td valign="top">true</td>
-    <td valign="top">basedir of calling project (the one whose build
-        file contains the &lt;ant&gt; task).</td>
-  </tr>
-  <tr>
-    <td valign="top">omitted</td>
-    <td valign="top">false</td>
-    <td valign="top">basedir attribute of the &lt;project&gt; element
-        of the new project</td>
-  </tr>
-</table>
-
-<h3>Examples</h3>
-<pre>
-  &lt;ant antfile=&quot;subproject/subbuild.xml&quot; dir=&quot;subproject&quot; target=&quot;compile&quot;/&gt;
-
-  &lt;ant dir=&quot;subproject&quot;/&gt;
-
-  &lt;ant antfile=&quot;subproject/property_based_subbuild.xml&quot;&gt;
-    &lt;property name=&quot;param1&quot; value=&quot;version 1.x&quot;/&gt;
-    &lt;property file=&quot;config/subproject/default.properties&quot;/&gt;
-  &lt;/ant&gt;
-
-  &lt;ant inheritAll=&quot;false&quot; antfile=&quot;subproject/subbuild.xml&quot;&gt;
-    &lt;property name=&quot;output.type&quot; value=&quot;html&quot;/&gt;
-  &lt;/ant&gt;
-</pre>
-
-<p>The build file of the calling project defines some
-<code>&lt;path&gt;</code> elements like this:</p>
-
-<pre>
-  &lt;path id="path1"&gt;
-    ...
-  &lt;/&gt;
-  &lt;path id="path2"&gt;
-    ...
-  &lt;/&gt;
-</pre>
-
-<p>and the called build file (<code>subbuild.xml</code>) also defines
-a <code>&lt;path&gt;</code> with the id <code>path1</code>, but
-<code>path2</code> is not defined:</p>
-
-<pre>
-  &lt;ant antfile=&quot;subbuild.xml&quot; inheritrefs=&quot;true&quot; /&gt;
-</pre>
-
-<p>will not override <code>subbuild</code>'s definition of
-<code>path1</code>, but make the parent's definition of
-<code>path2</code> available in the subbuild.</p>
-
-<pre>
-  &lt;ant antfile=&quot;subbuild.xml&quot; /&gt;
-</pre>
-
-<p>as well as</p>
-
-<pre>
-  &lt;ant antfile=&quot;subbuild.xml&quot; inheritrefs=&quot;false&quot; /&gt;
-</pre>
-
-<p>will neither override <code>path1</code> nor copy
-<code>path2</code>.</p>
-
-<pre>
-  &lt;ant antfile=&quot;subbuild.xml&quot; inheritrefs=&quot;false&quot; &gt;
-    &lt;reference refid=&quot;path1&quot; /&gt;
-  &lt;/ant&gt;
-</pre>
-
-<p>will override <code>subbuild</code>'s definition of
-<code>path1</code>.</p>
-
-<pre>
-  &lt;ant antfile=&quot;subbuild.xml&quot; inheritrefs=&quot;false&quot; &gt;
-    &lt;reference refid=&quot;path1&quot; torefid=&quot;path2&quot; /&gt;
-  &lt;/ant&gt;
-</pre>
-
-<p>will copy the parent's definition of <code>path1</code> into the
-new project using the id <code>path2</code>.</p>
-
-<hr>
-<p align="center">Copyright &copy; 2001-2002 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/CoreTasks/antcall.html b/docs/manual/CoreTasks/antcall.html
deleted file mode 100644
index 80bb93d..0000000
--- a/docs/manual/CoreTasks/antcall.html
+++ /dev/null
@@ -1,120 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>AntCall Task</title>
-</head>
-
-<body>
-
-<h2><a name="antcall">AntCall</a></h2>
-<h3>Description</h3>
-<p>Call another target within the same build-file optionally specifying some
-properties (param's in this context)</p>
-<p>By default, all of the properties of the current project will be
-available in the new project.   Alternatively, you can
-set the <i>inheritAll</i> attribute to <code>false</code> and only
-&quot;user&quot; properties (i.e., those passed on the command-line)
-will be passed to the new project.  In either case, the set of
-properties passed to the new project will override the properties that 
-are set in the new project (See also the <a href="property.html">property task</a>).</p>
-<p>You can also set properties in the new project from the old project by
-using nested param tags. These properties are always passed regardless of the
-setting of <i>inheritAll</i>.  This allows you to parameterize your subprojects.</p>
-
-<p>Nested <a href="#reference"><i>&lt;reference&gt;</i></a> elements can
-be used to copy references from the calling project to the new
-project, optionally under a different id.  References taken from
-nested elements will override existing references in the new
-project.</p>
-
-<p>
-When a target is invoked by antcall, all of its dependent targets will
-also be called within the context of any new parameters. For example. if
-the target &quot;doSomethingElse&quot; depended on the target &quot;init&quot;, then the 
-<i>antcall</i> of &quot;doSomethingElse&quot; will call &quot;init&quot; during the call. 
-Of course, any properties defined in the antcall task or inherited from the calling target 
-will be fixed and not overridable in the init task -or indeed in the &quot;doSomethingElse&quot; task.  
-</p>
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">target</td>
-    <td valign="top">The target to execute.</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">inheritAll</td>
-    <td valign="top">If <code>true</code>, pass all properties to the new Ant
-    project.  Defaults to <code>true</code>.
-    </td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">inheritRefs</td> 
-    <td valign="top">If <code>true</code>, pass all references to the
-      new Ant project.  Defaults to <code>false</code>.</td>
-    <td align="center" valign="top">No</td>
-  </tr>  
-</table>
-<h3>Parameters specified as nested elements</h3>
-<h4>param</h4>
-<p>Specifies the properties to set before running the specified target. See <a
-href="property.html">property</a> for usage guidelines.</p>
-
-<h4><a name="reference">reference</a></h4>
-<p>Used to chose references that shall be copied into the new project,
-optionally changing their id.</p>
-
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">refid</td>
-    <td valign="top">The id of the reference in the calling project.</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">toid</td>
-    <td valign="top">The id of the reference in the new project.</td>
-    <td valign="top" align="center">No, defaults to the value of refid.</td>
-  </tr>
-</table>
-
-<h3>Examples</h3>
-<pre>
-  &lt;target name=&quot;default&quot;&gt;
-    &lt;antcall target=&quot;doSomethingElse&quot;&gt;
-      &lt;param name=&quot;param1&quot; value=&quot;value&quot;/&gt;
-    &lt;/antcall&gt;
-  &lt;/target&gt;
-
-  &lt;target name=&quot;doSomethingElse&quot;&gt;
-    &lt;echo message=&quot;param1=${param1}&quot;/&gt;
-  &lt;/target&gt;
-</pre>
-<p>Will run the target 'doSomethingElse' and echo 'param1=value'.</p>
-
-<pre>
-  &lt;antcall ... &gt;
-    &lt;reference refid=&quot;path1&quot; torefid=&quot;path2&quot; /&gt;
-  &lt;/antcall&gt;
-</pre>
-
-<p>will copy the parent's definition of <code>path1</code> into the
-new project using the id <code>path2</code>.</p>
-
-<hr><p align="center">Copyright &copy; 2001-2002 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/CoreTasks/antstructure.html b/docs/manual/CoreTasks/antstructure.html
deleted file mode 100644
index 257dc11..0000000
--- a/docs/manual/CoreTasks/antstructure.html
+++ /dev/null
@@ -1,44 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>AntStructure Task</title>
-</head>
-
-<body>
-
-<h2><a name="antstructure">AntStructure</a></h2>
-<h3>Description</h3> 
-<p>Generates a DTD for Ant buildfiles which contains information
-about all tasks currently known to Ant.</p> 
-<p>Note that the DTD generated by this task is incomplete, you can
-always add XML entities using <a
-href="taskdef.html"><code>&lt;taskdef&gt;</code></a> or <a
-href="typedef.html"><code>&lt;typedef&gt;</code></a>. See <a
-href="http://www.sdv.fr/pages/casa/html/ant-dtd.en.html"
-target="_top">here</a> for a way to get around this problem.</p>
-<p>This task doesn't know about required attributes, all will be
-listed as <code>#IMPLIED</code>.</p>
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">output</td>
-    <td valign="top">file to write the DTD to.</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-</table>
-<h3>Examples</h3>
-<blockquote><pre>
-&lt;antstructure output=&quot;project.dtd&quot;/&gt;
-</pre></blockquote>
-<hr><p align="center">Copyright &copy; 2001-2002 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/CoreTasks/apply.html b/docs/manual/CoreTasks/apply.html
deleted file mode 100644
index f6ff1be..0000000
--- a/docs/manual/CoreTasks/apply.html
+++ /dev/null
@@ -1,204 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Apply Task</title>
-</head>
-
-<body>
-
-<h2><a name="apply">Apply/<i>ExecOn</i></a></h2>
-<p><i>The name <code>execon</code> is deprecated and only kept for backwards
-compatibility.</i></p>
-<h3>Description</h3>
-<p>Executes a system command. When the <i>os</i> attribute is specified, then
-the command is only executed when Ant is run on one of the specified operating
-systems.</p>
-<p>The files and/or directories of a number of <a
-href="../CoreTypes/fileset.html">FileSet</a>s are passed as arguments
-to the system command.</p>
-<p>If you specify a nested <a
-href="../CoreTypes/mapper.html">mapper</a> and the <i>dest</i> attribute,
-the timestamp of each source file is compared to the timestamp of a
-target file which is defined by the nested mapper element and searched
-for in the given dest.</p>
-<p>At least one fileset is required, and you must not specify more than
-one mapper.</p>
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">executable</td>
-    <td valign="top">the command to execute without any command line
-      arguments.</td>
-    <td align="center" valign="top">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">dest</td>
-    <td valign="top">the directory where the &lt;apply&gt; expects the target files will be placed by the 
-                     command, when it is executed. 
-    </td>
-    <td align="center" valign="top">Yes, if you specify a nested mapper</td>
-  </tr>
-  <tr>
-    <td valign="top">dir</td>
-    <td valign="top">the directory in which the command should be executed.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">relative</td>
-    <td valign="top">whether the filenames should be passed on the
-      command line as absolute or relative pathnames (relative to the
-      base directory of the corresponding fileset for source files or
-      the <i>dest</i> attribute for target files).</td>
-    <td align="center" valign="top">No, default is <i>false</i></td>
-  </tr>
-  <tr>
-    <td valign="top">os</td>
-    <td valign="top">list of Operating Systems on which the command may be
-      executed.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">output</td>
-    <td valign="top">the file to which the output of the command should be
-      redirected.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">outputproperty</td>
-    <td valign="top">the name of a property in which the output of the 
-      command should be stored.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">timeout</td>
-    <td valign="top">Stop the command if it doesn't finish within the
-      specified time (given in milliseconds).</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">failonerror</td>
-    <td valign="top">Stop the buildprocess if the command exits with a
-      returncode other than 0.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">skipemptyfilesets</td>
-    <td valign="top">Don't run the command, if no source files have
-      been found or are newer than their corresponding target
-      files.</td>
-    <td align="center" valign="top">No, default is <i>false</i></td>
-  </tr>
-  <tr>
-    <td valign="top">parallel</td>
-    <td valign="top">Run the command only once, appending all files as
-      arguments. If false, command will be executed once for every file. 
-      Defaults to false. </td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">type</td>
-    <td valign="top">One of <i>file</i>, <i>dir</i> or
-      <i>both</i>. If set to <i>file</i>, only the names of plain
-      files will be sent to the command. If set to <i>dir</i>, only
-      the names of directories are considered.</td>
-    <td align="center" valign="top">No, default is <i>file</i></td>
-  </tr>
-  <tr>
-    <td valign="top">newenvironment</td>
-    <td valign="top">Do not propagate old environment when new environment
-      variables are specified.</td>
-    <td align="center" valign="top">No, default is <i>false</i></td>
-  </tr>
-  <tr>
-    <td valign="top">vmlauncher</td>
-    <td valign="top">Run command using the Java VM's execution facilities
-        where available. If set to false the underlying OS's shell,
-        either directly or through the antRun scripts, will be used.
-        Under some operating systems, this gives access to facilities
-        not normally available through the VM including, under Windows,
-        being able to execute scripts, rather than their associated
-        interpreter.</td>
-    <td align="center" valign="top">No, default is <i>true</i></td>
-  </tr>
-</table>
-<h3>Parameters specified as nested elements</h3>
-<h4>fileset</h4>
-<p>You can use any number of nested <code>&lt;fileset&gt;</code>
-elements to define the files for this task and refer to
-<code>&lt;fileset&gt;</code>s defined elsewhere.</p>
-<h4>arg</h4>
-<p>Command line arguments should be specified as nested
-<code>&lt;arg&gt;</code> elements. See <a
-href="../using.html#arg">Command line arguments</a>.</p>
-<h4>srcfile</h4>
-<p>By default the file names of the source files will be added to the
-end of the command line. If you need to place it somewhere different,
-use a nested <code>&lt;srcfile&gt;</code> element between your
-<code>&lt;arg&gt;</code> elements to mark the insertion point.</p>
-<h4>targetfile</h4>
-<p><code>&lt;targetfile&gt;</code> is similar to
-<code>&lt;srcfile&gt;</code> and marks the position of the target
-filename on the command line. If omitted, the target filenames will
-not be added to the command line at all. This element can only be
-specified, if you also define a nested mapper and the <i>dest</i>
-attribute.</p>
-<h4>env</h4>
-<p>It is possible to specify environment variables to pass to the
-system command via nested <code>&lt;env&gt;</code> elements. See the
-description in the section about <a href="exec.html#env">exec</a></p>
-<h3>Examples</h3>
-<blockquote><pre>
-&lt;apply executable=&quot;ls&quot; &gt;
-  &lt;arg value=&quot;-l&quot;/&gt;
-  &lt;fileset dir=&quot;/tmp&quot;&gt;
-    &lt;patternset&gt;
-      &lt;exclude name=&quot;**/*.txt&quot;/&gt;
-    &lt;/patternset&gt;
-  &lt;/fileset&gt;
-  &lt;fileset refid=&quot;other.files&quot;/&gt;
-&lt;/apply&gt;
-</pre></blockquote>
-<p>invokes <code>ls -l</code>, adding the absolute filenames of all
-files below <code>/tmp</code> not ending in <code>.txt</code> and all
-files of the FileSet with <code>id</code> <code>other.files</code> to
-the command line.</p>
-<blockquote><pre>
-&lt;apply executable=&quot;somecommand&quot; parallel=&quot;false&quot; &gt;
-  &lt;arg value=&quot;arg1&quot;/&gt;
-  &lt;srcfile/&gt;
-  &lt;arg value=&quot;arg2&quot;/&gt;
-  &lt;fileset dir=&quot;/tmp&quot;/&gt;
-&lt;/apply&gt;
-</pre></blockquote>
-<p>invokes <code>somecommand arg1 SOURCEFILENAME arg2</code> for each
-file in <code>/tmp</code> replacing SOURCEFILENAME with the absolute
-filename of each file in turn. If <code>parallel</code> had been set
-to true, SOURCEFILENAME would be replaced with the absolute filenames
-of all files separated by spaces.</p>
-<blockquote><pre>
-&lt;apply executable=&quot;cc&quot; dest=&quot;src/C&quot; parallel=&quot;false&quot;&gt;
-  &lt;arg value=&quot;-c&quot;/&gt;
-  &lt;arg value=&quot;-o&quot;/&gt;
-  &lt;targetfile/&gt;
-  &lt;srcfile/&gt;
-  &lt;fileset dir=&quot;src/C&quot; includes=&quot;*.c&quot;/&gt;
-  &lt;mapper type=&quot;glob&quot; from=&quot;*.c&quot; to=&quot;*.o&quot;/&gt;
-&lt;/apply&gt;
-</pre></blockquote>
-<p>invokes <code>cc -c -o TARGETFILE SOURCEFILE</code> for each
-<code>.c</code> file that is newer than the corresponding
-<code>.o</code>, replacing TARGETFILE with the absolute filename of
-the <code>.o</code> and SOURCEFILE with the absolute name of the
-<code>.c</code> file.</p>
-<hr><p align="center">Copyright &copy; 2001-2002 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/CoreTasks/available.html b/docs/manual/CoreTasks/available.html
deleted file mode 100644
index 55f858e..0000000
--- a/docs/manual/CoreTasks/available.html
+++ /dev/null
@@ -1,128 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Available Task</title>
-</head>
-
-<body>
-
-<h2><a name="available">Available</a></h2>
-<h3>Description</h3>
-<p>Sets a property if a resource is available at runtime. This resource can be a
-file, a directory, a class in the classpath, or a JVM system resource.</p>
-<p>If the resource is present, the property value is set to true by
-default; otherwise, the property is not set. You can set the value to
-something other than the default by specifying the <code>value</code> attribute.</p>
-<p>Normally, this task is used to set properties that are useful to avoid target
-execution depending on system parameters.</p>
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">property</td>
-    <td valign="top">The name of the property to set.</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">value</td>
-    <td valign="top">The value to set the property to. Defaults to &quot;true&quot;.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">classname</td>
-    <td valign="top">The class to look for in the classpath.</td>
-    <td valign="middle" align="center" rowspan="3">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">file</td>
-    <td valign="top">The file to look for.</td>
-  </tr>
-  <tr>
-    <td valign="top">resource</td>
-    <td valign="top">The resource to look for in the JVM.</td>
-  </tr>
-  <tr>
-    <td valign="top">classpath</td>
-    <td valign="top">The classpath to use when looking up <code>classname</code> or <code>resource</code>.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">filepath</td>
-    <td valign="top">The path to use when looking up <code>file</code>.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">classpathref</td>
-    <td valign="top">The classpath to use, given as a <a href="../using.html#references">reference</a> to a path defined elsewhere.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">type</td>
-    <td valign="top">The type of <code>file</code> to look for, either a directory (<code>type=&quot;dir&quot;</code>) or a file
-      (<code>type=&quot;file&quot;</code>). If not set, the property will be set if the name specified in the <code>file</code>
-      attribute exists as either a file or a directory.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">ignoresystemclasses</td>
-    <td valign="top">Ignore Ant's runtime classes, using only the specified
-      classpath.  Only affects the "classname" attribute.  Defaults to &quot;false&quot;</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-
-</table>
-<h3>Parameters specified as nested elements</h3>
-<h4>classpath</h4>
-<p><code>Available</code>'s <code>classpath</code> attribute is a <a
-href="../using.html#path">path-like structure</a> and can also be set via a nested
-<code>&lt;classpath&gt;</code> element.</p>
-<h4>filepath</h4>
-<p><code>Available</code>'s <code>filepath</code> attribute is a <a
-href="../using.html#path">path-like structure</a> and can also be set via a nested
-<code>&lt;filepath&gt;</code> element.</p>
-<h3>Examples</h3>
-<pre>  &lt;available classname=&quot;org.whatever.Myclass&quot; property=&quot;Myclass.present&quot;/&gt;</pre>
-<p>sets the <code>Myclass.present</code> property to the value &quot;true&quot;
-if the class <code>org.whatever.Myclass</code> is found in Ant's classpath.</p>
-<pre>
-&lt;property name=&quot;jaxp.jar&quot; value=&quot;./lib/jaxp11/jaxp.jar&quot;/&gt;
-&lt;available file=&quot;${jaxp.jar}&quot; property=&quot;jaxp.jar.present&quot;/&gt;
-</pre>
-<p>sets the <code>jaxp.jar.present</code> property to the value &quot;true&quot;
-if the file <code>./lib/jaxp11/jaxp.jar</code> is found.</p>
-<pre>
-&lt;available file=&quot;/usr/local/lib&quot; type=&quot;dir&quot; property=&quot;local.lib.present&quot;/&gt;
-</pre>
-<p>sets the <code>local.lib.present</code> property to the value &quot;true&quot;
-if the directory <code>/usr/local/lib</code> is found.</p>
-<pre>
-...in project ...
-&lt;property name=&quot;jaxp.jar&quot; value=&quot;./lib/jaxp11/jaxp.jar&quot;/&gt;
-&lt;path id=&quot;jaxp&quot; location=&quot;${jaxp.jar}&quot;/&gt;
-...in target ...
-&lt;available classname=&quot;javax.xml.transform.Transformer&quot; classpathref=&quot;jaxp&quot; property=&quot;jaxp11.present&quot;/&gt;
-</pre>
-<p>sets the <code>jaxp11.present</code> property to the value &quot;true&quot;
-if the class <code>javax.xml.transform.Transformer</code> is found in the classpath referenced by <code>jaxp</code> (in this case, <code>./lib/jaxp11/jaxp.jar</code>).
-</p>
-<pre>
-&lt;available property=&quot;have.extras&quot; resource=&quot;extratasks.properties&quot;&gt;
-  &lt;classpath&gt;
-    &lt;pathelement location=&quot;/usr/local/ant/extra.jar/&gt;
-&nbsp;&nbsp;&lt;/classpath&gt;
-&lt;/available&gt;
-</pre>
-<p>sets the <code>have.extras</code> property to the value &quot;true&quot;
-if the resource-file <code>extratasks.properties</code> is found.
-</p>
-<hr><p align="center">Copyright &copy; 2001-2002 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/CoreTasks/basename.html b/docs/manual/CoreTasks/basename.html
deleted file mode 100644
index 641c4b5..0000000
--- a/docs/manual/CoreTasks/basename.html
+++ /dev/null
@@ -1,70 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Basename Task</title>
-</head>
-
-<body>
-
-<h2><a name="echo">Basename</a></h2>
-<h3>Description</h3>
-<p>
-Task to determine the basename of a specified file, optionally minus a
-specified suffix.
-</p>
-<p>
-When this task executes, it will set the specified property to the
-value of the last path element of the specified file. If <code>file</code> is a
-directory, the basename will be the last directory element. If
-<code>file</code> is a full-path, relative-path, or simple filename,
-the basename will be the simple file name, without any directory elements.
-</p>
-<p> 
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">file</td>
-    <td valign="top">The path to take the basename of.</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">property</td>
-    <td valign="top">The name of the property to set.</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">suffix</td>
-    <td valign="top">The suffix to remove from the resulting basename
-      (specified either with or without the &quot;<code>.</code>&quot;).</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-</table>
-
-<h3>Examples</h3>
-<pre>  &lt;basename property=&quot;jar.filename&quot; file=&quot;${lib.jarfile}&quot;/&gt;</pre>
-will set <code>jar.filename</code> to
-<code>myjar.jar</code>, if <code>lib.jarfile</code> is defined as either a
-full-path filename (eg., <code>/usr/local/lib/myjar.jar</code>),
-a relative-path filename (eg., <code>lib/myjar.jar</code>),
-or a simple filename (eg., <code>myjar.jar</code>).
-<pre>  &lt;basename property=&quot;cmdname&quot; file=&quot;D:/usr/local/foo.exe&quot; suffix=&quot;.exe&quot;/&gt;</pre>
-will set <code>cmdname</code> to <code>foo</code>.
-<pre>  &lt;property environment=&quot;env&quot;/&gt;
-  &lt;basename property=&quot;temp.dirname&quot; file=&quot;${env.TEMP}&quot;/&gt;</pre>
-
-will set <code>temp.dirname</code> to the last directory element of
-the path defined for the <code>TEMP</code> environment variable.</p>
-
-<hr>
-<p align="center">Copyright &copy; 2002 Apache Software Foundation.
-All rights Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/CoreTasks/buildnumber.html b/docs/manual/CoreTasks/buildnumber.html
deleted file mode 100644
index 3dc3b38..0000000
--- a/docs/manual/CoreTasks/buildnumber.html
+++ /dev/null
@@ -1,54 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>BuildNumber Task</title>
-</head>
-
-<body>
-
-<h2><a name="buildnumber">BuildNumber</a></h2>
-<h3>Description</h3>
-<p>This is a basic task that can be used to track build numbers.</p>
-<p>It will first attempt to read a build number from a file (by default,
-<code>build.number</code> in the current directory), then
-set the property <code>build.number</code> to the value that was read in
-(or to <code>0</code>, if no such value). It will then increment the
-number by one and write it back out to the file.
-(See the
-<a href="../OptionalTasks/propertyfile.html">PropertyFile</a> task
-if you need finer control over things such as the property name or
-the number format.)
-</p>
-
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">file</td>
-    <td valign="top">The file to read and write the build number from/to.</td>
-    <td align="center" valign="top">No; defaults to &quot;build.number&quot;</td>
-  </tr>
-</table>
-
-<h3>Examples</h3>
-<pre>  &lt;buildnumber/&gt;</pre>
-
-<p>Read, increment, and write a build number to the default file,
-<code>build.number</code>.</p>
-
-<pre>  &lt;buildnumber file=&quot;mybuild.number&quot;/&gt;</pre>
-
-<p>Read, increment, and write a build number to the file
-<code>mybuild.number</code>.</p>
-
-<hr><p align="center">Copyright &copy; 2002 Apache Software Foundation.
-All rights Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/CoreTasks/changelog.html b/docs/manual/CoreTasks/changelog.html
deleted file mode 100644
index 9406e26..0000000
--- a/docs/manual/CoreTasks/changelog.html
+++ /dev/null
@@ -1,177 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>ChangeLog Task</title>
-</head>
-
-<body>
-
-<h2><a name="changelog">CvsChangeLog</a></h2>
-<h3>Description</h3>
-<p>Generates an XML-formatted report file of the change logs recorded in a
-<a href="http://www.cvshome.org/" target="_top">CVS</a> repository. </p>
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">dir</td>
-    <td valign="top">The directory from which to run the CVS <em>log</em>
-     command.</td>
-    <td align="center" valign="top">No; defaults to ${basedir}.</td>
-  </tr>
-  <tr>
-    <td valign="top">destfile</td>
-    <td valign="top">The file in which to write the change log report.</td>
-    <td align="center" valign="top">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">usersfile</td>
-    <td valign="top">Property file that contains name-value pairs mapping
-     user IDs and names that should be used in the report in place of
-     the user ID.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">daysinpast</td>
-    <td valign="top">Sets the number of days into the past for which the
-     change log information should be retrieved.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">start</td>
-    <td valign="top">The earliest date from which change logs are to be
-     included in the report.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">end</td>
-    <td valign="top">The latest date to which change logs are to be
-     included in the report.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-</table>
-
-<h3>Parameters specified as nested elements</h3>
-<h4><a name="user">user</a></h4>
-<p>The nested <code>&lt;user&gt;</code> element allows you to specify a
-mapping between a user ID as it appears on the CVS server and a name to
-include in the formatted report.
-Anytime the specified user ID has made a change in the repository, the
-<code>&lt;author&gt;</code> tag in the report file will include
-the name specified in <code>displayname</code> rather than the user ID.
-</p>
-
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">displayname</td>
-    <td valign="top">The name to be used in the CVS change log report.</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">userid</td>
-    <td valign="top">The userid of the person as it exists on the CVS server.
-    </td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-</table>
-
-
-<h3>Examples</h3>
-<pre>  &lt;cvschangelog dir=&quot;dve/network&quot;
-                destfile=&quot;changelog.xml&quot;
-  /&gt;</pre>
-
-<p>Generates a change log report for all the changes that have been made
-under the <code>dve/network</code> directory.
-It writes these changes into the file <code>changelog.xml</code>.</p>
-
-<pre>  &lt;cvschangelog dir=&quot;dve/network&quot;
-                destfile=&quot;changelog.xml&quot;
-                daysinpast=&quot;10&quot;
-  /&gt;</pre>
-
-<p>Generates a change log report for any changes that were made
-under the <code>dve/network</code> directory in the past 10 days.
-It writes these changes into the file <code>changelog.xml</code>.</p>
-
-<pre>  &lt;cvschangelog dir=&quot;dve/network&quot;
-                destfile=&quot;changelog.xml&quot;
-                start=&quot;20 Feb 2002&quot;
-                end=&quot;20 Mar 2002&quot;
-  /&gt;</pre>
-
-<p>Generates a change log report for any changes that were made
-between February 20, 2002 and March 20, 2002
-under the <code>dve/network</code> directory.
-It writes these changes into the file <code>changelog.xml</code>.</p>
-
-<pre>  &lt;cvschangelog dir=&quot;dve/network&quot;
-                destfile=&quot;changelog.xml&quot;
-                start=&quot;20 Feb 2002&quot;
-  /&gt;</pre>
-
-<p>Generates a change log report for any changes that were made
-after February 20, 2002 under the <code>dve/network</code> directory.
-It writes these changes into the file <code>changelog.xml</code>.</p>
-
-<pre>  &lt;cvschangelog dir=&quot;dve/network&quot;
-                destfile=&quot;changelog.xml&quot;/&gt;
-       &lt;user displayname=&quot;Peter Donald&quot; userid=&quot;donaldp&quot;/&gt;
-  &lt;/cvschangelog&gt;</pre>
-
-<p>Generates a change log report for all the changes that were made
-under the <code>dve/network</code> directory, substituting the name
-&quot;Peter Donald&quot; in the <code>&lt;author&gt;</code> tags
-anytime it encounters a change made by the user ID &quot;donaldp&quot;.
-It writes these changes into the file <code>changelog.xml</code>.</p>
-
-<h4>Generate Report</h4>
-<p>Ant includes a basic XSLT stylesheet that you can use to generate 
-a HTML report based on the xml output. The following example illustrates
-how to generate a HTML report from the XML report.</p>
-
-<pre>
-        &lt;style in="changelog.xml" 
-               out="changelog.html" 
-               style="${ant.home}/etc/changelog.xsl"&gt;
-          &lt;param name="title" expression="Ant ChangeLog"/&gt;
-          &lt;param name="module" expression="jakarta-ant"/&gt;
-          &lt;param name="cvsweb" expression="http://cvs.apache.org/viewcvs/"/&gt;
-        &lt;/style&gt;
-</pre>
-
-<h4>Sample Output</h4>
-<pre>
-&lt;changelog&gt;
-  &lt;entry&gt;
-    &lt;date&gt;2002-03-06&lt;/date&gt;
-    &lt;time&gt;12:00&lt;/time&gt;
-    &lt;author&gt;Peter Donald&lt;/author&gt;
-    &lt;file&gt;
-      &lt;name&gt;org/apache/myrmidon/build/AntlibDescriptorTask.java&lt;/name&gt;
-      &lt;revision&gt;1.3&lt;/revision&gt;
-      &lt;prevrevision&gt;1.2&lt;/prevrevision&gt;
-    &lt;/file&gt;
-    &lt;msg&gt;&lt;![CDATA[Use URLs directly rather than go via a FIle.
-
-This allows temp[lates to be stored inside jar]]&gt;&lt;/msg&gt;
-  &lt;/entry&gt;
-&lt;/changelog&gt;
-</pre>
-
-<hr><p align="center">Copyright &copy; 2002 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/CoreTasks/checksum.html b/docs/manual/CoreTasks/checksum.html
deleted file mode 100644
index 96ce042..0000000
--- a/docs/manual/CoreTasks/checksum.html
+++ /dev/null
@@ -1,152 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Checksum Task</title>
-</head>
-
-<body>
-
-<h2><a name="checksum">Checksum</a></h2>
-<h3>Description</h3>
-<p>
-Generates checksum for files.  This task can also be used to
-perform checksum verifications.
-</p>
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">file</td>
-    <td valign="top">The file to generate checksum for.</td>
-    <td valign="top" align="center">One of either <var>file</var> or
-    at least one nested fileset element.</td>
-  </tr>
-  <tr>
-    <td valign="top">algorithm</td>
-    <td valign="top">Specifies the algorithm to be used to
-      compute the checksum. Defaults to &quot;MD5&quot;.
-      Other popular algorithms like &quot;SHA&quot; may be used
-      as well.
-    </td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">provider</td>
-    <td valign="top">Specifies the provider of the algorithm.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">fileext</td>
-    <td valign="top">The generated checksum file's name will be the
-    original filename with &quot;.&quot; and fileext added to it.
-    Defaults to the algorithm name being used.
-    </td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">property</td>
-    <td valign="top">Specifies the name of the property to be set
-    with the generated checksum value.  This cannot be specified
-    when fileext is being used or when the number of files
-    for which checksums is to be generated is greater than 1.
-    </td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">overwrite</td>
-    <td valign="top">Overwrite existing files even if the destination
-      files are newer. Defaults to &quot;no&quot;.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">verifyproperty</td>
-    <td valign="top">Specifies the name of the property to be set
-    with &quot;true&quot; or &quot;false&quot; depending upon whether
-    the generated checksum matches the existing checksum.  When
-    this is set, the generated checksum is not written to a file or
-    property, but rather, the content of the file or property is used to
-    check against the generated checksum.
-    <td valign="top" align="center">No</td>
-  </tr>
-</table>
-<h3>Parameters specified as nested elements</h3>
-
-<h4>fileset</h4>
- <p>
- <a href="../CoreTypes/fileset.html">FileSets</a> are used to select files to
- generate checksums for.
- </p>
-
-<h3>Examples</h3>
-<p><b>Example 1</b></p>
-<pre>&lt;checksum file=&quot;foo.bar&quot;/&gt;</pre>
-Generates a MD5 checksum for foo.bar and stores the checksum in the destination file
-foo.bar.MD5.  foo.bar.MD5 is overwritten only if foo.bar is newer than itself.
-
-<p><b>Example 2</b></p>
-<pre>&lt;checksum file=&quot;foo.bar&quot; forceOverwrite=&quot;yes&quot;/&gt;</pre>
-Generates a MD5 checksum for foo.bar and stores the checksum in foo.bar.MD5.
-If foo.bar.MD5 already exists, it is overwritten.
-
-<p><b>Example 3</b></p>
-<pre>&lt;checksum file=&quot;foo.bar&quot; property=&quot;foobarMD5&quot;/&gt;</pre>
-Generates a MD5 checksum for foo.bar and stores it in the Project Property foobarMD5.
-
-<p><b>Example 4</b></p>
-<pre>&lt;checksum file=&quot;foo.bar&quot; verifyProperty=&quot;isMD5ok&quot;/&gt;</pre>
-Generates a MD5 checksum for foo.bar, compares it against foo.bar.MD5 and sets
-isMD5ok to either true or false, depending upon the result.
-
-<p><b>Example 5</b></p>
-<pre>&lt;checksum file=&quot;foo.bar&quot; algorithm=&quot;SHA&quot; fileext=&quot;asc&quot;/&gt;</pre>
-Generates a SHA checksum for foo.bar and stores the checksum in the destination file
-foo.bar.asc.  foo.bar.asc is overwritten only if foo.bar is newer than itself.
-
-<p><b>Example 6</b></p>
-<pre>
-&lt;checksum file=&quot;foo.bar&quot; property=&quot;${md5}&quot; verifyProperty=&quot;isEqual&quot;/&gt;
-</pre>
-Generates a MD5 checksum for foo.bar, compares it against the value of the property
-md5, and sets isEqual to either true or false, depending upon the result.
-
-<p><b>Example 7</b></p>
-<pre>
-&lt;checksum&gt;
-  &lt;fileset dir=&quot;.&quot;&gt;
-    &lt;include name=&quot;foo*&quot;/&gt;
-  &lt;/fileset&gt;
-&lt;/checksum&gt;
-</pre>
-Works just like Example 1, but generates a .MD5 file for every file that begins with the name foo.
-
-<p><b>Example 8</b></p>
-<pre>
-&lt;condition property=&quot;isChecksumEqual&quot;&gt;
-  &lt;checksum&gt;
-    &lt;fileset dir=&quot;.&quot;&gt;
-      &lt;include name=&quot;foo.bar&quot;/&gt;
-    &lt;/fileset&gt;
-  &lt;/checksum&gt;
-&lt;/condition&gt;
-</pre>
-Works like Example 4, but only sets isChecksumEqual to true, if the
-checksum matches - it will never be set to false.  This example
-demonstrates use with the Condition task.
-
-
-<h3>Note:</h3>
-When working with more than one file, if condition and/or verifyproperty is used,
-the result will be true only if the checksums matched correctly for all files being
-considered.
-
-<hr><p align="center">Copyright &copy; 2001 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/CoreTasks/chmod.html b/docs/manual/CoreTasks/chmod.html
deleted file mode 100644
index ea45813..0000000
--- a/docs/manual/CoreTasks/chmod.html
+++ /dev/null
@@ -1,110 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Chmod Task</title>
-</head>
-
-<body>
-
-<h2><a name="chmod">Chmod</a></h2>
-<h3>Description</h3>
-<p>Changes the permissions of a file or all files inside specified directories. Right now it has effect only under Unix.
-The permissions are also UNIX style, like the argument for the chmod command.</p>
-<p>See the section on <a href="../dirtasks.html#directorybasedtasks">directory based
-tasks</a>, on how the inclusion/exclusion of files works, and how to
-write patterns.</p>
-<p>This task holds an implicit <a href="../CoreTypes/fileset.html">FileSet</a> and
-supports all of FileSet's attributes and nested elements
-directly. More FileSets can be specified using nested
-<code>&lt;fileset&gt;</code> elements.</p>
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">file</td>
-    <td valign="top">the file or single directory of which the permissions 
-      must be changed.</td>
-    <td valign="top" valign="middle" rowspan="2">exactly one of the two or nested <code>&lt;fileset&gt;</code> elements.</td>
-  </tr>
-  <tr>
-    <td valign="top">dir</td>
-    <td valign="top">the directory which holds the files whose permissions 
-      must be changed.</td>
-  </tr>
-  <tr>
-    <td valign="top">perm</td>
-    <td valign="top">the new permissions.</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">includes</td>
-    <td valign="top">comma separated list of patterns of files that must be
-      included.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">excludes</td>
-    <td valign="top">comma separated list of patterns of files that must be
-      excluded. No files (except default excludes) are excluded when omitted.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">defaultexcludes</td>
-    <td valign="top">indicates whether default excludes should be used or not
-      (&quot;yes&quot;/&quot;no&quot;). Default excludes are used when omitted.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">parallel</td>
-    <td valign="top">process all specified files using a single
-      <code>chmod</code> command. Defaults to true.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">type</td>
-    <td valign="top">One of <i>file</i>, <i>dir</i> or
-      <i>both</i>. If set to <i>file</i>, only the permissions of
-      plain files are going to be changed. If set to <i>dir</i>, only
-      the directories are considered.</td>
-    <td align="center" valign="top">No, default is <i>file</i></td>
-  </tr>
-</table>
-<h3>Examples</h3>
-<blockquote>
-  <p><code>&lt;chmod file=&quot;${dist}/start.sh&quot; perm=&quot;ugo+rx&quot;/&gt;</code></p>
-</blockquote>
-<p>makes the &quot;start.sh&quot; file readable and executable for anyone on a
-UNIX system.</p>
-<blockquote>
-<pre>
-    &lt;chmod dir=&quot;${dist}/bin&quot; perm=&quot;ugo+rx&quot; includes=&quot;**/*.sh&quot;/&gt;
-</pre>
-</blockquote>
-<p>makes all &quot;.sh&quot; files below <code>${dist}/bin</code>
-readable and executable for anyone on a UNIX system.</p>
-<blockquote>
-<pre>
-&lt;chmod perm=&quot;g+w&quot;&gt;
-  &lt;fileset dir=&quot;shared/sources1&quot;&gt;
-    &lt;exclude name=&quot;**/trial/**&quot;/&gt;
-  &lt;/fileset&gt;
-  &lt;fileset refid=&quot;other.shared.sources&quot;/&gt;
-&lt;/chmod&gt;
-</pre>
-</blockquote>
-<p>makes all files below <code>shared/sources1</code> (except those
-below any directory named trial) writable for members of the same
-group on a UNIX system. In addition all files belonging to a FileSet
-with <code>id</code> <code>other.shared.sources</code> get the same
-permissions.</p>
-<hr><p align="center">Copyright &copy; 2001-2002 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/CoreTasks/common.html b/docs/manual/CoreTasks/common.html
deleted file mode 100644
index 4447fb7..0000000
--- a/docs/manual/CoreTasks/common.html
+++ /dev/null
@@ -1,44 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Common</title>
-</head>
-
-<body>
-
-<h2><a name="javac">Common Attributes of all Tasks</a></h2>
-<p>All tasks share the following attributes:</p>
-
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">id</td>
-    <td valign="top">Unique identifier for this task instance, can be
-       used to reference this task in scripts.</td>
-    <td valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">taskname</td>
-    <td valign="top">A different name for this task instance - will
-      show up in the logging output.</td>
-    <td valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">description</td>
-    <td valign="top">Room for your comments</td>
-    <td valign="top">No</td>
-  </tr>
-</table>
-
-<hr>
-<p align="center">Copyright &copy; 2001 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/CoreTasks/concat.html b/docs/manual/CoreTasks/concat.html
deleted file mode 100644
index ce395c2..0000000
--- a/docs/manual/CoreTasks/concat.html
+++ /dev/null
@@ -1,140 +0,0 @@
-<html>
-
-    <head>
-      <meta http-equiv="Content-Language" content="en-us">
-      <title>Concat</title>
-    </head>
-
-    <body>
-
-      <h2><a name="Concat">Concat</a></h2>
-
-      <h3>Description</h3>
-
-      <p>
-	Concatenates a file, or a series of files, to a single file or
-	the console. The destination file will be created if it does
-	not exist, though the the <var>append</var> attribute may be
-	used to alter this behavior.
-      </p>
-
-      <p>
-	<a href="../CoreTypes/fileset.html">FileSet</a>s and/or <a
-	href="../CoreTypes/filelist.html">FileList</a>s are used to
-	select which files are to be concatenated. There is no
-	singular 'file' attribute to specify a single file to cat -- a
-	fileset or filelist must also be used in these cases.
-      </p>
-
-      <h3>Parameters</h3>
-
-      <table border="1" cellpadding="2" cellspacing="0">
-
-	<tr>
-	  <td valign="top"><b>Attribute</b></td>
-	  <td valign="top"><b>Description</b></td>
-	  <td align="center" valign="top"><b>Required</b></td>
-	</tr>
-
-	<tr>
-	  <td valign="top">destfile</td>
-	  <td valign="top">
-	    The destination file for the concatenated stream.
-        If not specified the console will be used instead.
-	  </td>
-	  <td valign="top" align="center">
-	    No
-	  </td>
-	</tr>
-
-	<tr>
-	  <td valign="top">append</td>
-	  <td valign="top">
-	    Specifies whether or not the file specified by 'destfile'
-	    should be overwritten. Defaults to &quot;yes&quot;.
-	  </td>
-	  <td valign="top" align="center">No</td>
-	</tr>
-
-        <tr>
-          <td valign="top">encoding</td>
-          <td valign="top">
-            Specifies the encoding for the input files. Please see <a
-            href="http://java.sun.com/products/jdk/1.2/docs/guide/internat/encoding.doc.html">
-            http://java.sun.com/products/jdk/1.2/docs/guide/internat/encoding.doc.html</a>
-            for a list of possible values. Defaults to the platform's
-            default character encoding.
-          </td>
-          <td valign="top" align="center">No</td>
-        </tr>
-
-      </table>
-
-      <h3>Parameters specified as nested elements</h3>
-
-      <h4>fileset</h4>
-
-      <p>
-	<a href="../CoreTypes/fileset.html">FileSet</a>s are used to
-	select files to be concatenated. Note that the order in which
-	the files selected from a fileset are concatenated is
-	<i>not</i> guaranteed. If this is an issue, use multiple
-	filesets or consider using filelists.
-      </p>
-
-      <h4>filelist</h4>
-
-      <p>
-        <a href="../CoreTypes/filelist.html">FileList</a>s are used to
-        select files to be concatenated. The file ordering in the
-        <var>files</var> attribute will be the same order in which the
-        files are concatenated.
-      </p>
-
-      <h3>Examples</h3>
-
-      <p><b>Concatenate a string to a file:</b></p>
-
-      <pre>
-  &lt;concat destfile=&quot;README&quot;&gt;Hello, World!&lt;/concat&gt;
-      </pre>
-
-      <p><b>Concatenate a series of files to the console:</b></p>
-
-      <pre>
-  &lt;concat&gt;
-    &lt;fileset dir=&quot;messages&quot; includes=&quot;*important*&quot; /&gt;
-  &lt;/concat&gt;
-      </pre>
-
-      <p><b>Concatenate a single file, appending if the destination file exists:</b></p>
-
-      <pre>
-  &lt;concat destfile=&quot;NOTES&quot; append=&quot;true&quot;&gt;
-    &lt;filelist dir=&quot;notes&quot; files=&quot;note.txt&quot; /&gt;
-  &lt;/concat&gt;
-      </pre>
-
-      <p><b>Concatenate a series of files, overwriting if the 
-      destination file exists:</b></p>
-
-      <pre>
-  &lt;concat destfile=&quot;${docbook.dir}/all-sections.xml&quot;&gt;
-    &lt;filelist dir=&quot;${docbook.dir}/sections&quot; 
-         files=&quot;introduction.xml,overview.xml&quot; /&gt;
-    &lt;fileset dir=&quot;${docbook.dir}&quot; 
-         includes=&quot;sections/*.xml&quot; 
-         excludes=&quot;introduction.xml,overview.xml&quot; /&gt;
-  &lt;/concat&gt;
-      </pre>
-
-      <hr>
-
-      <p align="center">
-	Copyright &copy; 2002 Apache Software Foundation. All
-	Rights Reserved.
-      </p>
-
-    </body>
-
-  </html>
diff --git a/docs/manual/CoreTasks/condition.html b/docs/manual/CoreTasks/condition.html
deleted file mode 100644
index 0b116ce..0000000
--- a/docs/manual/CoreTasks/condition.html
+++ /dev/null
@@ -1,85 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Condition Task</title>
-</head>
-
-<body>
-
-<h2><a name="Condition">Condition</a></h2>
-<h3>Description</h3>
-<p>Sets a property if a certain condition holds true - this is a
-generalization of <a href="available.html">Available</a> and <a
-href="uptodate.html">Uptodate</a>.</p>
-<p>If the condition holds true, the property value is set to true by
-default; otherwise, the property is not set. You can set the value to
-something other than the default by specifying the <code>value</code>
-attribute.</p>
-<p>Conditions are specified as <a href="#nested">nested elements</a>,
-you must specify exactly one condition.</p>
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">property</td>
-    <td valign="top">The name of the property to set.</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">value</td>
-    <td valign="top">The value to set the property to. Defaults to
-      &quot;true&quot;.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-</table>
-<h3><a name="nested">Parameters specified as nested elements</a></h3>
-<p>All conditions to test are specified as nested elements, for a
-complete list see <a href="conditions.html">here</a>.</p>
-
-<h3>Examples</h3>
-<pre>
-  &lt;condition property=&quot;javamail.complete&quot;&gt;
-    &lt;and&gt;
-      &lt;available classname=&quot;javax.activation.DataHandler&quot; /&gt;
-      &lt;available classname=&quot;javax.mail.Transport&quot; /&gt;
-    &lt;/and&gt;
-  &lt;/condition&gt;
-</pre>
-<p>sets the property <code>javamail.complete</code> if both the
-JavaBeans Activation Framework and JavaMail are available in the
-classpath.</p>
-
-<pre>
-  &lt;condition property=&quot;isMacOsButNotMacOsX&quot;&gt;
-    &lt;and&gt;
-      &lt;os family=&quot;mac&quot; />
-      &lt;not&gt;
-        &lt;os family=&quot;unix&quot; />
-      &lt;/not&gt;
-    &lt;/and&gt;
-  &lt;/condition&gt;
-</pre>
-<p>sets the property <code>isMacOsButNotMacOsX</code> if the current
-operating system is MacOS, but not MacOS X - which Ant considers to be
-in the Unix family as well.</p>
-
-<pre>
-  &lt;condition property=&quot;isSunOSonSparc&quot;&gt;
-    &lt;os name=&quot;SunOS&quot; arch=&quot;sparc&quot; />
-  &lt;/condition&gt;
-</pre>
-<p>sets the property <code>isSunOSonSparc</code> if the current
-operating system is SunOS and if it is running on a sparc architecture.</p>
-
-<hr>
-<p align="center">Copyright &copy; 2001 Apache Software
-Foundation. All rights Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/CoreTasks/conditions.html b/docs/manual/CoreTasks/conditions.html
deleted file mode 100644
index ff6f4f3..0000000
--- a/docs/manual/CoreTasks/conditions.html
+++ /dev/null
@@ -1,286 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Conditions Task</title>
-</head>
-
-<body>
-
-<h2><a name="Conditions">Conditions</a></h2>
-
-<p>These are the nested elements that can be used as conditions in the
-<a href="condition.html"><code>&lt;condition&gt;</code></a> and
-<a href="waitfor.html"><code>&lt;waitfor&gt;</code></a> tasks.</p>
-
-<h4>not</h4>
-<p>The <code>&lt;not&gt;</code> element expects exactly one other
-condition to be nested into this element, negating the result of the
-condition.  It doesn't have any attributes and accepts all nested
-elements of the condition task as nested elements as well.</p>
-
-<h4>and</h4> <p>
-The <code>&lt;and&gt;</code> element doesn't have any attributes and
-accepts an arbitrary number of conditions as nested elements - all
-nested elements of the condition task are supported.  This condition
-is true if all of its contained conditions are, conditions will be
-evaluated in the order they have been specified in the build file.</p>
-<p>The <code>&lt;and&gt;</code> condition has the same shortcut
-semantics as the Java &amp;&amp; operator, as soon as one of the
-nested conditions is false, no other condition will be evaluated.</p>
-
-<h4>or</h4> <p>
-The <code>&lt;or&gt;</code> element doesn't have any attributes and
-accepts an arbitrary number of conditions as nested elements - all
-nested elements of the condition task are supported.  This condition
-is true if at least one of its contained conditions is, conditions
-will be evaluated in the order they have been specified in the build
-file.</p> <p>The <code>&lt;or&gt;</code> condition has the same
-shortcut semantics as the Java || operator, as soon as one of the
-nested conditions is true, no other condition will be evaluated.</p>
-
-<h4>available</h4>
-<p>This condition is identical to the <a
-href="available.html">Available</a> task, all attributes and nested
-elements of that task are supported, the property and value attributes
-are redundant and will be ignored.</p>
-
-<h4>uptodate</h4>
-<p>This condition is identical to the <a
-href="uptodate.html">Uptodate</a> task, all attributes and nested
-elements of that task are supported, the property and value attributes
-are redundant and will be ignored.</p>
-
-<h4>os</h4>
-<p>Test whether the current operating system is of a given type.  Each
-defined attribute is tested and the result is true only if <i>all</i>
-the tests succeed.
-</p>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">family</td>
-    <td valign="top">The name of the operating system family to expect.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">name</td>
-    <td valign="top">The name of the operating system to expect.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">arch</td>
-    <td valign="top">The architecture of the operating system to expect.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">version</td>
-    <td valign="top">The version of the operating system to expect.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-</table>
-<p>Supported values for the family attribute are:
-<ul>
-  <li>windows (for all versions of Microsoft Windows)</li>
-  <li>dos (for all Microsoft DOS based operating systems including
-    Microsoft Windows and OS/2)</li>
-  <li>mac (for all Apple Macintosh systems)</li>
-  <li>unix (for all Unix and Unix-like operating systems)</li>
-  <li>netware (for Novell NetWare)</li>
-  <li>os/2 (for OS/2)</li>
-  <li>win9x for Microsoft Windows 95 and 98</li>
-</ul>
-
-<h4>equals</h4>
-<p>Tests whether the two given Strings are identical</p>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">arg1</td>
-    <td valign="top">First string to test.</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">arg2</td>
-    <td valign="top">Second string to test.</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">casesensitive</td>
-    <td valign="top">Perform a case sensitive comparision.  Default is
-        true.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">trim</td>
-    <td valign="top">Trim whitespace from arguments before comparing
-        them.  Default is false.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-</table>
-
-<h4>isset</h4>
-<p>Test whether a given property has been set in this project.</p>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">property</td>
-    <td valign="top">The name of the property to test.</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-</table>
-
-<h4>checksum</h4>
-<p>This condition is identical to the <a href="checksum.html">Checksum</a>
-task, all attributes and nested elements of that task are supported,
-the property and overwrite attributes are redundant and will be
-ignored.</p>
-
-<h4>http</h4>
-<p>The <code>http</code> condition checks for a valid response from a
-web server of the specified url.</p>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td width="12%" valign="top"><b>Attribute</b></td>
-    <td width="78%" valign="top"><b>Description</b></td>
-    <td width="10%" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">url</td>
-    <td valign="top">The full URL of the page to request. The web server must
-      return a status code of &lt;500..</td>
-    <td align="center">Yes.</td>
-  </tr>
-</table>
-
-<h4>socket</h4>
-<p>The <code>socket</code> condition checks for the existence of a
-TCP/IP listener at the specified host and port.</p>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td width="12%" valign="top"><b>Attribute</b></td>
-    <td width="78%" valign="top"><b>Description</b></td>
-    <td width="10%" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">server</td>
-    <td valign="top">The DNS name or IP address of the server.</td>
-    <td align="center">Yes.</td>
-  </tr>
-  <tr>
-    <td valign="top">port</td>
-    <td valign="top">The port number to connect to.</td>
-    <td align="center">Yes.</td>
-  </tr>
-</table>
-
-<h4>filesmatch</h4>
-<p>Test two files for matching. Nonexistence of either file results in "false".
-This test does a byte for byte comparision, so test time scales with
-byte size. NB: if the files are different sizes , one of them is missing
-or the filenames match the answer is so obvious the detailed test is omitted.
-
-
-</p>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td width="12%" valign="top"><b>Attribute</b></td>
-    <td width="78%" valign="top"><b>Description</b></td>
-    <td width="10%" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">file1</td>
-    <td valign="top">First file to test</td>
-    <td align="center">Yes.</td>
-  </tr>
-  <tr>
-    <td valign="top">file2</td>
-    <td valign="top">Second file to test</td>
-    <td align="center">Yes.</td>
-  </tr>
-</table>
-
-<h4>contains</h4>
-<p>Tests whether a string contains another one.</p>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">string</td>
-    <td valign="top">The string to search in.</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">substring</td>
-    <td valign="top">The string to search for.</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">casesensitive</td>
-    <td valign="top">Perform a case sensitive comparision.  Default is
-        true.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-</table>
-
-<h4>istrue</h4>
-<p>Tests whether a string equals any of the ant definitions of true,
-that is "true","yes", or "on"</p>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">value</td>
-    <td valign="top">value to test</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-</table>
-<pre>
-    &lt;istrue value=&quot;${someproperty}&quot; /&gt;
-    &lt;istrue value=&quot;false&quot; /&gt;
-</pre>   
- 
-<h4>isfalse</h4>
-<p>Tests whether a string is not true, the negation of &lt;istrue&gt;
-</p>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">value</td>
-    <td valign="top">value to test</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-</table>
-<pre>
-    &lt;isfalse value=&quot;${someproperty}&quot; /&gt;
-    &lt;isfalse value=&quot;false&quot; /&gt;
-</pre>   
- 
-<hr>
-<p align="center">Copyright &copy; 2001-2002 Apache Software
-Foundation. All rights Reserved.</p>
-
-</body>
-</html>
diff --git a/docs/manual/CoreTasks/copy.html b/docs/manual/CoreTasks/copy.html
deleted file mode 100644
index e7d9e34..0000000
--- a/docs/manual/CoreTasks/copy.html
+++ /dev/null
@@ -1,180 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Copy Task</title>
-</head>
-
-<body>
-
-<h2><a name="copy">Copy</a></h2>
-<h3>Description</h3>
-<p>Copies a file or FileSet to a new file or directory.  By default, files are
-only copied if the source file is newer than the destination file,
-or when the destination file does not exist.  However, you can explicitly 
-overwrite files with the <code>overwrite</code> attribute.</p>
-<p><a href="../CoreTypes/fileset.html">FileSet</a>s are used to select a
-set of files to copy.  
-To use a <code>&lt;fileset&gt;</code>, the <code>todir</code> attribute
-must be set.</p>
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">file</td>
-    <td valign="top">The file to copy.</td>
-    <td valign="top" align="center">Yes, unless a nested 
-    <code>&lt;fileset&gt;</code> element is used.</td>
-  </tr>
-  <tr>
-    <td valign="top">preservelastmodified</td>
-    <td valign="top">Give the copied files the same last modified
-      time as the original source files.
-      (<em>Note</em>: Ignored on Java 1.1)</td>
-    <td valign="top" align="center">No; defaults to false.</td>
-  </tr>
-  <tr>
-    <td valign="top">tofile</td>
-    <td valign="top">The file to copy to.</td>
-    <td valign="top" align="center" rowspan="2">With the <code>file</code>
-      attribute, either <code>tofile</code> or <code>todir</code> can be used.
-      With nested <code>&lt;fileset&gt;</code> elements, if the set of files
-      is greater than 1, or if only the <code>dir</code> attribute is
-      specified in the <code>&lt;fileset&gt;</code>, or if the
-      <code>file</code> attribute is also specified, then only
-      <code>todir</code> is allowed.</td>
-  </tr>
-  <tr>
-    <td valign="top">todir</td>
-    <td valign="top">The directory to copy to.</td>
-  </tr>
-  <tr>
-    <td valign="top">overwrite</td>
-    <td valign="top">Overwrite existing files even if the destination
-      files are newer.</td>
-    <td valign="top" align="center">No; defaults to false.</td>
-  </tr>
-  <tr>
-    <td valign="top">filtering</td>
-    <td valign="top">Indicates whether token filtering using the global
-      build-file filters should take place during the copy.
-      <em>Note</em>: Nested <code>&lt;filterset&gt;</code> elements will
-      always be used, even if this attribute is not specified, or its value is
-      <code>false</code> (<code>no</code>, or <code>off</code>).</td>
-    <td valign="top" align="center">No; defaults to false.</td>
-  </tr>
-  <tr>
-    <td valign="top">flatten</td>
-    <td valign="top">Ignore the directory structure of the source files,
-      and copy all files into the directory specified by the <code>todir</code>
-      attribute.  Note that you can achieve the same effect by using a
-      <a href="../CoreTypes/mapper.html#flatten-mapper">flatten mapper</a>.</td>
-    <td valign="top" align="center">No; defaults to false.</td>
-  </tr>
-  <tr>
-    <td valign="top">includeEmptyDirs</td>
-     <td valign="top">Copy any empty directories included in the FileSet(s).
-     </td>
-     <td valign="top" align="center">No; defaults to true.</td>
-  </tr>
-  <tr>
-    <td valign="top">failonerror</td>
-     <td valign="top">Log a warning message, but do not stop the build,
-       when the file to copy does not exist.
-       Only meaningful when copying a single file.
-     </td>
-     <td valign="top" align="center">No; defaults to true.</td>
-  </tr>
-</table>
-<h3>Parameters specified as nested elements</h3>
- 
-<h4>fileset</h4>
- <p><a href="../CoreTypes/fileset.html">FileSet</a>s are used to select
-sets of files to copy.  
- To use a fileset, the <code>todir</code> attribute must be set.</p>
- 
-<h4>mapper</h4>
- <p>You can define filename transformations by using a nested <a
- href="../CoreTypes/mapper.html">mapper</a> element. The default mapper used by
- <code>&lt;copy&gt;</code> is the <a
- href="../CoreTypes/mapper.html#identity-mapper">identity mapper</a>.</p>
- 
-<h4>filterset</h4>
- <p><a href="../CoreTypes/filterset.html">FilterSet</a>s are used to replace
-tokens in files that are copied.  
- To use a FilterSet, use the nested <code>&lt;filterset&gt;</code> element.</p>
- 
-  
-<h3>Examples</h3>
-<p><b>Copy a single file</b></p>
-<pre>
-  &lt;copy file=&quot;myfile.txt&quot; tofile=&quot;mycopy.txt&quot;/&gt;
-</pre>
-<p><b>Copy a single file to a directory</b></p>
-<pre>
-  &lt;copy file=&quot;myfile.txt&quot; todir=&quot;../some/other/dir&quot;/&gt;
-</pre>
-<p><b>Copy a directory to another directory</b></p>
-<pre>
-  &lt;copy todir=&quot;../new/dir&quot;&gt;
-    &lt;fileset dir=&quot;src_dir&quot;/&gt;
-  &lt;/copy&gt;
-</pre>
-<p><b>Copy a set of files to a directory</b></p>
-<pre>
-  &lt;copy todir=&quot;../dest/dir&quot; &gt;
-    &lt;fileset dir=&quot;src_dir&quot; &gt;
-      &lt;exclude name=&quot;**/*.java&quot;/&gt;
-    &lt;/fileset&gt;
-  &lt;/copy&gt;
-
-  &lt;copy todir=&quot;../dest/dir&quot; &gt;
-    &lt;fileset dir=&quot;src_dir&quot; excludes=&quot;**/*.java&quot;/&gt;
-  &lt;/copy&gt;
-</pre>
-<p><b>Copy a set of files to a directory, appending
-<code>.bak</code> to the file name on the fly</b></p>
-<pre>
-  &lt;copy todir=&quot;../backup/dir&quot; &gt;
-    &lt;fileset dir=&quot;src_dir&quot; /&gt;
-    &lt;mapper type=&quot;glob&quot; from=&quot;*&quot; to=&quot;*.bak&quot;/&gt;
-  &lt;/copy&gt;
-</pre>
-
-
-<p><b>Copy a set of files to a directory, replacing @TITLE@ with Foo Bar
-in all files.</b></p>
-<pre>
-  &lt;copy todir=&quot;../backup/dir&quot; &gt;
-    &lt;fileset dir=&quot;src_dir&quot; /&gt;
-    &lt;filterset&gt;
-      &lt;filter token=&quot;TITLE&quot; value=&quot;Foo Bar&quot; /&gt;
-    &lt;/filterset&gt;
-  &lt;/copy&gt;
-</pre>
-
-<p><strong>Unix Note:</strong> File permissions are not retained when files
-are copied; they end up with the default <code>UMASK</code> permissions
-instead. This
-is caused by the lack of any means to query or set file permissions in the
-current Java runtimes. If you need a permission-preserving copy function,
-use <code>&lt;exec executable="cp" ... &gt;</code> instead. 
-</p>
-
-<p><strong>Windows Note:</strong> If you copy a file to a directory
-where that file already exists, but with different casing,
-the copied file takes on the case of the original. The workaround is to
-<a href="delete.html">delete</a>
-the file in the destination directory before you copy it.
-</p>
-
-<hr><p align="center">Copyright &copy; 2001-2002 Apache Software Foundation.
-All rights Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/CoreTasks/copydir.html b/docs/manual/CoreTasks/copydir.html
deleted file mode 100644
index fd3a0f1..0000000
--- a/docs/manual/CoreTasks/copydir.html
+++ /dev/null
@@ -1,120 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Copydir Task</title>
-</head>
-
-<body>
-
-<h2><a name="copydir">Copydir</a></h2>
-<h3><i>Deprecated</i></h3>
-<p><i>This task has been deprecated.  Use the Copy task instead.</i></p>
-<h3>Description</h3>
-<p>Copies a directory tree from the source to the destination.</p>
-<p>It is possible to refine the set of files that are being copied. This can be
-done with the <i>includes</i>, <i>includesfile</i>, <i>excludes</i>, <i>excludesfile</i> and <i>defaultexcludes</i>
-attributes. With the <i>includes</i> or <i>includesfile</i> attribute you specify the files you want to
-have included by using patterns. The <i>exclude</i> or <i>excludesfile</i> attribute is used to specify
-the files you want to have excluded. This is also done with patterns. And
-finally with the <i>defaultexcludes</i> attribute, you can specify whether you
-want to use default exclusions or not. See the section on <a
-href="../dirtasks.html#directorybasedtasks">directory based tasks</a>, on how the
-inclusion/exclusion of files works, and how to write patterns.</p>
-<p>This task forms an implicit <a href="../CoreTypes/fileset.html">FileSet</a> and
-supports all attributes of <code>&lt;fileset&gt;</code>
-(<code>dir</code> becomes <code>src</code>) as well as the nested
-<code>&lt;include&gt;</code>, <code>&lt;exclude&gt;</code> and
-<code>&lt;patternset&gt;</code> elements.</p>
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">src</td>
-    <td valign="top">the directory to copy.</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">dest</td>
-    <td valign="top">the directory to copy to.</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">includes</td>
-    <td valign="top">comma separated list of patterns of files that must be
-      included. All files are included when omitted.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">includesfile</td>
-    <td valign="top">the name of a file. Each line of this file is
-      taken to be an include pattern</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">excludes</td>
-    <td valign="top">comma separated list of patterns of files that must be
-      excluded. No files (except default excludes) are excluded when omitted.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">excludesfile</td>
-    <td valign="top">the name of a file. Each line of this file is
-      taken to be an exclude pattern</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">defaultexcludes</td>
-    <td valign="top">indicates whether default excludes should be used or not
-      (&quot;yes&quot;/&quot;no&quot;). Default excludes are used when omitted.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">filtering</td>
-    <td valign="top">indicates whether token filtering should take place during
-      the copy</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">flatten</td>
-    <td valign="top">ignore directory structure of source directory,
-      copy all files into a single directory, specified by the <code>dest</code>
-      attribute (default is <code>false</code>).</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">forceoverwrite</td>
-    <td valign="top">overwrite existing files even if the destination
-      files are newer (default is false).</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-</table>
-<h3>Examples</h3>
-<pre>  &lt;copydir src=&quot;${src}/resources&quot;
-           dest=&quot;${dist}&quot;
-  /&gt;</pre>
-<p>copies the directory <code>${src}/resources</code> to <code>${dist}</code>.</p>
-<pre>  &lt;copydir src=&quot;${src}/resources&quot;
-           dest=&quot;${dist}&quot;
-           includes=&quot;**/*.java&quot;
-           excludes=&quot;**/Test.java&quot;
-  /&gt;</pre>
-<p>copies the directory <code>${src}/resources</code> to <code>${dist}</code>
-recursively. All java files are copied, except for files with the name <code>Test.java</code>.</p>
-<pre>  &lt;copydir src=&quot;${src}/resources&quot;
-           dest=&quot;${dist}&quot;
-           includes=&quot;**/*.java&quot;
-           excludes=&quot;mypackage/test/**&quot;/&gt;</pre>
-<p>copies the directory <code>${src}/resources</code> to <code>${dist}</code>
-recursively. All java files are copied, except for the files under the <code>mypackage/test</code>
-directory.</p>
-<hr><p align="center">Copyright &copy; 2001 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/CoreTasks/copyfile.html b/docs/manual/CoreTasks/copyfile.html
deleted file mode 100644
index e0ba8f3..0000000
--- a/docs/manual/CoreTasks/copyfile.html
+++ /dev/null
@@ -1,59 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Copyfile Task</title>
-</head>
-
-<body>
-
-<h2><a name="copyfile">Copyfile</a></h2>
-<h3><i>Deprecated</i></h3>
-<p><i>This task has been deprecated.  Use the Copy task instead.</i></p>
-<h3>Description</h3>
-<p>Copies a file from the source to the destination. The file is only copied if
-the source file is newer than the destination file, or when the destination file
-does not exist.</p>
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">src</td>
-    <td valign="top">the filename of the file to copy.</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">dest</td>
-    <td valign="top">the filename of the file where to copy to.</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">filtering</td>
-    <td valign="top">indicates whether token filtering should take place during
-      the copy</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">forceoverwrite</td>
-    <td valign="top">overwrite existing files even if the destination
-      files are newer (default is false).</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-</table>
-<h3>Examples</h3>
-<blockquote>
-  <p><code>&lt;copyfile src=&quot;test.java&quot; dest=&quot;subdir/test.java&quot;
-  /&gt;</code></p>
-  <p><code>&lt;copyfile src=&quot;${src}/index.html&quot; dest=&quot;${dist}/help/index.html&quot;
-  /&gt;</code></p>
-</blockquote>
-<hr><p align="center">Copyright &copy; 2001 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/CoreTasks/cvs.html b/docs/manual/CoreTasks/cvs.html
deleted file mode 100644
index db9bceb..0000000
--- a/docs/manual/CoreTasks/cvs.html
+++ /dev/null
@@ -1,167 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>CVS Task</title>
-</head>
-
-<body>
-
-<h2><a name="cvs">Cvs</a></h2>
-<h3>Description</h3>
-<p>Handles packages/modules retrieved from a
-<a href="http://www.cvshome.org/" target="_top">CVS</a> repository.</p>
-<p>When doing automated builds, the <a href="get.html">get task</a> should be
-preferred over the <i>checkout</i> command, because of speed.</p>
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">command</td>
-    <td valign="top">the CVS command to execute.</td>
-    <td align="center" valign="top">No, default &quot;checkout&quot;.</td>
-  </tr>
-  <tr>
-    <td valign="top">compression</td>
-    <td valign="top"><code>true</code> or <code>false</code> - if set
-    to true, this is the same as compressionlevel=&quot;3&quot;</td>
-    <td align="center" valign="top">No. Defaults to false.</td>
-  </tr>
-  <tr>
-    <td valign="top">compressionlevel</td>
-    <td valign="top">A number between 1 and 9 (corresponding to
-    possible values for CVS&apos; <code>-z#</code> argument). Any
-    other value is treated as compression=&quot;false&quot;</td>
-    <td align="center" valign="top">No. Defaults to no compression.</td>
-  </tr>
-
-  <tr>
-    <td valign="top">cvsRoot</td>
-    <td valign="top">the CVSROOT variable.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">cvsRsh</td>
-    <td valign="top">the CVS_RSH variable.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">dest</td>
-    <td valign="top">the directory where the checked out files should be placed.</td>
-    <td align="center" valign="top">No, default is project's basedir.</td>
-  </tr>
-  <tr>
-    <td valign="top">package</td>
-    <td valign="top">the package/module to check out.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">tag</td>
-    <td valign="top">the tag of the package/module to check out.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">date</td>
-    <td valign="top">Use the most recent revision no later than the given date</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">quiet</td>
-    <td valign="top">suppress informational messages.</td>
-    <td align="center" valign="top">No, default &quot;false&quot;</td>
-  </tr>
-  <tr>
-    <td valign="top">noexec</td>
-    <td valign="top">report only, don't change any files.</td>
-    <td align="center" valign="top">No, default to &quot;false&quot;</td>
-  </tr>
-  <tr>
-    <td valign="top">output</td>
-    <td valign="top">the file to direct standard output from the command.</td>
-    <td align="center" valign="top">No, default output to ANT Log as MSG_INFO.</td>
-  </tr>
-  <tr>
-    <td valign="top">error</td>
-    <td valign="top">the file to direct standard error from the command.</td>
-    <td align="center" valign="top">No, default error to ANT Log as MSG_WARN.</td>
-  </tr>
-  <tr>
-    <td valign="top">append</td>
-    <td valign="top">whether to append output/error when redirecting to a file.</td>
-    <td align="center" valign="top">No, default to &quot;false&quot;.</td>
-  </tr>
-  <tr>
-    <td valign="top">port</td>
-    <td valign="top">Port used by CVS to communicate with the server.</td>
-    <td align="center" valign="top">No, default port 2401.</td>
-  </tr>
-  <tr>
-    <td valign="top">passfile</td>
-    <td valign="top">Password file to read passwords from.</td>
-    <td align="center" valign="top">No, default file ~/.cvspass.</td>
-  </tr>
-  <tr>
-    <td valign="top">failonerror</td>
-    <td valign="top">Stop the build process if the command exits with a
-      return code other than 0. Defaults to false</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-</table>
-<h3>Examples</h3>
-<pre>  &lt;cvs cvsRoot=&quot;:pserver:anoncvs@cvs.apache.org:/home/cvspublic&quot;
-       package=&quot;jakarta-ant&quot;
-       dest=&quot;${ws.dir}&quot;
-  /&gt;</pre>
-<p>checks out the package/module &quot;jakarta-ant&quot; from the CVS
-repository pointed to by the cvsRoot attribute, and stores the files in &quot;${ws.dir}&quot;.</p>
-<pre>  &lt;cvs dest=&quot;${ws.dir}&quot; command=&quot;update&quot;/&gt;</pre>
-<p>updates the package/module that has previously been checked out into
-&quot;${ws.dir}&quot;.</p>
-
-<pre>  &lt;cvs command=&quot;-q diff -u -N&quot; output=&quot;patch.txt&quot;/&gt;</pre>
-
-<p>silently (-q) creates a file called patch.txt which contains a unified (-u) diff which includes new files added via &quot;cvs add&quot; (-N) and can be used as input to patch.
-The equivalent, using  &lt;commandline&gt; elements, is:
-</p>
-<pre>
-&lt;cvs output="patch"&gt;
-    &lt;commandline&gt;
-        &lt;argument value="-q"/&gt;
-        &lt;argument value="diff"/&gt;
-        &lt;argument value="-u"/&gt;
-        &lt;argument value="-N"/&gt;
-    &lt;/commandline&gt;
-&lt;/cvs&gt;
-</pre>
-or:
-<pre>
-&lt;cvs output="patch"&gt;
-    &lt;commandline&gt;
-        &lt;argument line="-q diff -u -N"/&gt;
-    &lt;/commandline&gt;
-&lt;/cvs&gt;
-</pre>
-<p>
-You may include as many &lt;commandline&gt; elements as you like. 
-Each will inherit the <code>failonerror</code>, <code>compression</code>, and other &quot;global&quot; parameters
-from the <code>&lt;cvs&gt;</code> element.
-</p>
-
-
-<pre>  &lt;cvs command=&quot;update -A -d&quot;/&gt;</pre>
-<p>Updates from the head of repository ignoring sticky bits (-A) and creating any new directories as necessary (-d).</p>
-<p>Note: the text of the command is passed to cvs &quot;as-is&quot; so any cvs options should appear
-before the command, and any command options should appear after the command as in the diff example
-above. See <a href="http://www.cvshome.org/docs/manual/index.html" target="_top">the cvs manual</a> for details,
-specifically the <a href="http://www.cvshome.org/docs/manual/cvs_16.html" target="_top">Guide to CVS commands</a></p>
-<hr>
-<p align="center">Copyright &copy; 2001-2002 Apache Software
-Foundation.  All rights Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/CoreTasks/cvspass.html b/docs/manual/CoreTasks/cvspass.html
deleted file mode 100644
index de5777c..0000000
--- a/docs/manual/CoreTasks/cvspass.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>CVSPass Task</title>
-</head>
-
-<body>
-
-<h2><a name="cvs">cvspass</a></h2>
-<h3>Description</h3>
-<p>Adds entries to a .cvspass file. Adding entries to this file has the same affect as a cvs login command.</p>
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">cvsroot</td>
-    <td valign="top">the CVS repository to add an entry for.</td>
-    <td align="center" valign="top">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">password</td>
-    <td valign="top">Password to be added to the password file.</td>
-    <td align="center" valign="top">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">passfile</td>
-    <td valign="top">Password file to add the entry to.</td>
-    <td align="center" valign="top">No, default is ~/.cvspass.</td>
-  </tr>
-</table>
-<h3>Examples</h3>
-<pre>  &lt;cvspass cvsroot=&quot;:pserver:anoncvs@jakarta.apache.org:/home/cvspublic&quot;
-       password=&quot;anoncvs&quot;
-  /&gt;</pre>
-<p>Adds an entry into the ~/.cvspass password file.</p>
-
-<hr>
-<p align="center">Copyright &copy; 2001 Apache Software Foundation. All rights
-Reserved.</p>
-</body>
-</html>
-
diff --git a/docs/manual/CoreTasks/cvstagdiff.html b/docs/manual/CoreTasks/cvstagdiff.html
deleted file mode 100644
index 795b776..0000000
--- a/docs/manual/CoreTasks/cvstagdiff.html
+++ /dev/null
@@ -1,159 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>CvsTagDiff Task</title>
-</head>
-
-<body>
-
-<h2><a name="cvstagdiff">CvsTagDiff</a></h2>
-<h3>Description</h3>
-<p>Generates an XML-formatted report file of the changes between two tags or dates recorded in a
-<a href="http://www.cvshome.org/" target="_top">CVS</a> repository. </p>
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">startTag</td>
-    <td valign="top">The earliest tag from which diffs are to be
-     included in the report.</td>
-    <td align="center" valign="top" rowspan="2">exactly one of the two.</td>
-  </tr>
-  <tr>
-    <td valign="top">startDate</td>
-    <td valign="top">The earliest date from which diffs are to be
-     included in the report.</td>
-  </tr>
-  <tr>
-    <td valign="top">endTag</td>
-    <td valign="top">The latest tag from which diffs are to be
-     included in the report.</td>
-    <td align="center" valign="top" rowspan="2">exactly one of the two.</td>
-  </tr>
-  <tr>
-    <td valign="top">endDate</td>
-    <td valign="top">The latest date from which diffs are to be
-     included in the report.</td>
-  </tr>
-  <tr>
-    <td valign="top">destfile</td>
-    <td valign="top">The file in which to write the diff report.</td>
-    <td align="center" valign="top">Yes</td>
-  </tr>
-</table>
-
-<h3>Parameters inherited from the <code>cvs</code> task</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">compression</td>
-    <td valign="top"><code>true</code>, <code>false</code>, or the number 1-9 (corresponding to possible values for CVS <code>-z#</code> argument). Any other value is treated as false</td>
-    <td align="center" valign="top">No. Defaults to no compression. if passed <code>true</code>, level 3 compression is assumed.</td>
-  </tr>
-  <tr>
-    <td valign="top">cvsRoot</td>
-    <td valign="top">the CVSROOT variable.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">cvsRsh</td>
-    <td valign="top">the CVS_RSH variable.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">package</td>
-    <td valign="top">the package/module to analyze.</td>
-    <td align="center" valign="top">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">quiet</td>
-    <td valign="top">suppress informational messages.</td>
-    <td align="center" valign="top">No, default &quot;false&quot;</td>
-  </tr>
-  <tr>
-    <td valign="top">port</td>
-    <td valign="top">Port used by CVS to communicate with the server.</td>
-    <td align="center" valign="top">No, default port 2401.</td>
-  </tr>
-  <tr>
-    <td valign="top">passfile</td>
-    <td valign="top">Password file to read passwords from.</td>
-    <td align="center" valign="top">No, default file ~/.cvspass.</td>
-  </tr>
-  <tr>
-    <td valign="top">failonerror</td>
-    <td valign="top">Stop the buildprocess if the command exits with a
-      returncode other than 0. Defaults to false</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-</table>
-
-<h3>Examples</h3>
-<pre>  &lt;cvstagdiff cvsRoot=&quot;:pserver:anoncvs@cvs.apache.org:/home/cvspublic&quot;
-                destfile=&quot;tagdiff.xml&quot;
-                package=&quot;jakarta-ant&quot;
-                startTag=&quot;ANT_14&quot;
-                endTag=&quot;ANT_141&quot;
-  /&gt;</pre>
-
-<p>Generates a tagdiff report for all the changes that have been made
-in the <code>jakarta-ant</code> module between the tags <code>ANT_14</code> and <code>ANT_141</code>.
-It writes these changes into the file <code>tagdiff.xml</code>.</p>
-
-<pre>  &lt;cvstagdiff
-                destfile=&quot;tagdiff.xml&quot;
-                package=&quot;jakarta-ant&quot;
-                startDate=&quot;2002-01-01&quot;
-                endDate=&quot;2002-31-01&quot;
-  /&gt;</pre>
-
-<p>Generates a tagdiff report for all the changes that have been made
-in the <code>jakarta-ant</code> module in january 2002. In this example <code>cvsRoot</code>
-has not been set. The current <code>cvsRoot</code> will be used (assuming the build is started
-from a folder stored in <code>cvs</code>.
-It writes these changes into the file <code>tagdiff.xml</code>.</p>
-
-<h4>Generate Report</h4>
-<p>Ant includes a basic XSLT stylesheet that you can use to generate 
-a HTML report based on the xml output. The following example illustrates
-how to generate a HTML report from the XML report.</p>
-
-<pre>
-        &lt;style in="tagdiff.xml" 
-               out="tagdiff.html" 
-               style="${ant.home}/etc/tagdiff.xsl"&gt;
-          &lt;param name="title" expression="Ant Diff"/&gt;
-          &lt;param name="module" expression="jakarta-ant"/&gt;
-          &lt;param name="cvsweb" expression="http://cvs.apache.org/viewcvs/"/&gt;
-        &lt;/style&gt;
-</pre>
-
-<h4>Sample Output</h4>
-<pre>
-&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
-&lt;tagdiff startTag=&quot;ANT_14&quot; endTag=&quot;ANT_141&quot;&gt;
-  &lt;entry&gt;
-    &lt;file&gt;
-      &lt;name&gt;src/main/org/apache/tools/ant/DirectoryScanner.java&lt;/name&gt;
-      &lt;revision&gt;1.15.2.1&lt;/revision&gt;
-      &lt;prevrevision&gt;1.15&lt;/prevrevision&gt;
-    &lt;/file&gt;
-  &lt;/entry&gt;
-&lt;/tagdiff&gt;
-</pre>
-
-<hr><p align="center">Copyright &copy; 2002 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/CoreTasks/delete.html b/docs/manual/CoreTasks/delete.html
deleted file mode 100644
index f6d8d56..0000000
--- a/docs/manual/CoreTasks/delete.html
+++ /dev/null
@@ -1,157 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Delete Task</title>
-</head>
-
-<body>
-
-<h2><a name="delete">Delete</a></h2>
-<h3>Description</h3>
-<p>Deletes a single file, a specified directory and all its files and
-subdirectories, or a set of files specified by one or more
-<a href="../CoreTypes/fileset.html">FileSet</a>s.
-When specifying a set of files, empty directories are <i>not</i> removed by
-default.
-To remove empty directories, use the <code>includeEmptyDirs</code> attribute.
-</p>
-<p>
-If you use this task to delete temporary files created by editors
-and it doesn't seem to work, read up on the 
-<a href="../dirtasks.html#defaultexcludes">default exclusion set</a>
-in <strong>Directory-based Tasks</strong>, and see the
-<code>defaultexcludes</code> attribute below.
- 
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">file</td>
-    <td valign="top">The file to delete, specified as either the simple
-     filename (if the file exists in the current base directory), a
-     relative-path filename, or a full-path filename.</td>
-    <td align="center" valign="middle" rowspan="2">At least one of the two,
-     unless a <code>&lt;fileset&gt;</code> is specified.</td>
-  </tr>
-  <tr>
-    <td valign="top">dir</td>
-    <td valign="top">The directory to delete, including all its files and
-     subdirectories.<br>
-     <b>Note:</b> <code>dir</code> is <em>not</em> used
-     to specify a directory name for <code>file</code>; <code>file</code>
-     and <code>dir</code> are independent of each other.<br>
-     <b>WARNING:</b> Do <b>not</b> set <code>dir</code> to
-     <code>&quot;.&quot;</code>, <code>&quot;${basedir}&quot;</code>,
-     or the full-pathname equivalent unless you truly <em>intend</em> to
-     recursively remove the entire contents of the current base directory
-     (and the base directory itself, if different from the current working
-     directory).</td>
-  </tr>
-  <tr>
-    <td valign="top">verbose</td>
-    <td valign="top">Show the name of each deleted file
-     (&quot;true&quot;/&quot;false&quot;).
-     Default is &quot;false&quot; when omitted.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">quiet</td>
-    <td valign="top">If the specified file or directory does not exist,
-     do not display a diagnostic message (unless Ant
-     has been invoked with the <code>&#x2011;verbose</code> or
-     <code>&#x2011;debug</code> switches) or modify the exit status to
-     reflect an error.
-     When set to &quot;true&quot;, if a file or directory cannot be deleted,
-     no error is reported. This setting emulates the 
-     <code>-f</code> option to the Unix <em>rm</em> command.
-     Default is &quot;false&quot;.
-     Setting this to &quot;true&quot; implies setting
-     <code>failonerror</code> to &quot;false&quot;.
-    </td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">failonerror</td>
-    <td valign="top">
-    Controls whether an error (such as a failure to delete a file)
-    stops the build or is merely reported to the screen.
-    Only relevant if <code>quiet</code> is &quot;false&quot;.
-    Default is &quot;true&quot;.
-    </td>
-    <td align="center" valign="top">No</td>
-  </tr>  
-  <tr>
-    <td valign="top">includeEmptyDirs</td>
-    <td valign="top">Set to &quot;true&quot; to delete empty directories when
-    using filesets.  Default is &quot;false&quot;.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">includes</td>
-    <td valign="top"><em>Deprecated.</em>  Use <code>&lt;fileset&gt;</code>.
-      Comma-separated list of patterns of
-      files that must be deleted. All files are relative to the directory
-      specified in <code>dir</code>.
-      </td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">includesfile</td>
-    <td valign="top"><em>Deprecated.</em>  Use <code>&lt;fileset&gt;</code>.
-      The name of a file. Each line of
-      this file is taken to be an include pattern</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">excludes</td>
-    <td valign="top"><em>Deprecated.</em>  Use <code>&lt;fileset&gt;</code>.
-      Comma-separated list of patterns of
-      files that must be excluded from the deletion list.
-      All files are relative to the directory specified in <code>dir</code>.
-      No files (except default excludes) are excluded when omitted.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">excludesfile</td>
-    <td valign="top"><em>Deprecated.</em>  Use <code>&lt;fileset&gt;</code>.
-      The name of a file. Each line of
-      this file is taken to be an exclude pattern</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">defaultexcludes</td>
-    <td valign="top"> Indicates whether default excludes
-      should be used or not (&quot;yes&quot;/&quot;no&quot;).
-      Default excludes are used when omitted.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-</table>
-<h3>Examples</h3>
-<pre>  &lt;delete file=&quot;/lib/ant.jar&quot;/&gt;</pre>
-<p>deletes the file <code>/lib/ant.jar</code>.</p>
-<pre>  &lt;delete dir=&quot;lib&quot;/&gt;</pre>
-<p>deletes the <code>lib</code> directory, including all files 
-and subdirectories of <code>lib</code>.</p>
-<pre>  &lt;delete&gt;
-    &lt;fileset dir=&quot;.&quot; includes=&quot;**/*.bak&quot;/&gt;
-  &lt;/delete&gt;
-</pre>
-<p>deletes all files with the extension <code>.bak</code> from the current directory 
-and any subdirectories.</p>
-<pre>  &lt;delete includeEmptyDirs=&quot;true&quot; &gt;
-    &lt;fileset dir=&quot;build&quot; /&gt;
-  &lt;/delete&gt;
-</pre>
-<p>deletes all files and subdirectories of <code>build</code>, including
-<code>build</code> itself.</p>
-<hr><p align="center">Copyright &copy; 2001-2002 Apache Software Foundation.
-All rights Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/CoreTasks/deltree.html b/docs/manual/CoreTasks/deltree.html
deleted file mode 100644
index 1df22d9..0000000
--- a/docs/manual/CoreTasks/deltree.html
+++ /dev/null
@@ -1,40 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Deltree Task</title>
-</head>
-
-<body>
-
-<h2><a name="deltree">Deltree</a></h2>
-<h3><i>Deprecated</i></h3>
-<p><i>This task has been deprecated.  Use the Delete task instead.</i></p>
-<h3>Description</h3>
-<p>Deletes a directory with all its files and subdirectories.</p>
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">dir</td>
-    <td valign="top">the directory to delete.</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-</table>
-<h3>Examples</h3>
-<pre>  &lt;deltree dir=&quot;dist&quot;/&gt;</pre>
-<p>deletes the directory <code>dist</code>, including its files and
-subdirectories.</p>
-<pre>  &lt;deltree dir=&quot;${dist}&quot;/&gt;</pre>
-<p>deletes the directory <code>${dist}</code>, including its files and
-subdirectories.</p>
-<hr><p align="center">Copyright &copy; 2001 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/CoreTasks/dependset.html b/docs/manual/CoreTasks/dependset.html
deleted file mode 100644
index dfd578a..0000000
--- a/docs/manual/CoreTasks/dependset.html
+++ /dev/null
@@ -1,132 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>DependSet Task</title>
-</head>
-
-<body>
-
-<h2>DependSet</h2>
-
-A task to manage arbitrary dependencies between files.
-
-<h3>Description</h3>
-
-<p>
-The dependset task compares a set of source files with a set of target
-files.  If any of the source files is more recent than any of
-the target files, all of the target files are removed.  
-</p>
-<p>
-Source files and target files are specified via nested <a
-href="../CoreTypes/fileset.html">FileSets</a> and/or nested <a
-href="../CoreTypes/filelist.html">FileLists</a>.  Arbitrarily many
-source and target filesets/filelists may be specified, but at 
-least one filelist/fileset is required for both sources and targets.
-</p>
-<p>
-Use a FileSet when you want to use wildcard include or exclude
-patterns and don't care about missing files.  Use a FileList when you
-want to consider the non-existence of a file as if it were out of
-date.  If there are any non-existing files in any source or target
-FileList, all target files will be removed.
-</p>
-<p>
-DependSet is useful to capture dependencies that are not or cannot be
-determined algorithmically.  For example, the &lt;style&gt; task only
-compares the source XML file and XSLT stylesheet against the target
-file to determined whether to restyle the source.  Using dependset you
-can extend this dependency checking to include a DTD or XSD file as
-well as other stylesheets imported by the main stylesheet.
-</p>
-
-<h3>Parameters</h3>
-
-<p>
-(none)
-</p>
-
-<h3>Parameters Specified as Nested Elements</h3>
-
-<h4>srcfileset</h4>
-
-<p>
-The nested <code>srcfileset</code> element specifies a <a
-href="../CoreTypes/fileset.html">FileSet</a>. All files included in
-this fileset will be compared against all files included in all of the
-<code>targetfileset</code> filesets and <code>targetfilelist</code>
-filelists.  Multiple <code>srcfileset</code> filesets may be specified.
-</p>
-
-<h4>srcfilelist</h4>
-
-<p>
-The nested <code>srcfilelist</code> element specifies a <a
-href="../CoreTypes/filelist.html">FileList</a>. All files included in
-this filelist will be compared against all files included in all of the 
-<code>targetfileset</code> filesets and <code>targetfilelist</code>
-filelists.  Multiple <code>srcfilelist</code> filelists may be specified.
-</p>
-
-<h4>targetfileset</h4>
-
-<p>
-The nested <code>targetfileset</code> element specifies a <a
-href="../CoreTypes/fileset.html">FileSet</a>.  All files included in
-this fileset will be compared against all files included in all of the
-<code>srcfileset</code> filesets and <code>sourcefilelist</code>
-filelists, and if any are older, they are all deleted.
-</p>
-
-<h4>targetfilelist</h4>
-
-<p>
-The nested <code>targetfilelist</code> element specifies a <a
-href="../CoreTypes/filelist.html">FileList</a>.  All files included in
-this filelist will be compared against all files included in all of the
-<code>srcfileset</code> filesets and <code>sourcefilelist</code>
-filelists, and if any are older, they are all deleted.
-</p>
-
-<h3>Examples</h3>
-<blockquote> <pre>    
-    &lt;dependset&gt;
-       &lt;srcfilelist
-           dir   = &quot;${dtd.dir}&quot;
-           files = &quot;paper.dtd,common.dtd&quot;/&gt;
-       &lt;srcfilelist
-           dir   = &quot;${xsl.dir}&quot;
-           files = &quot;common.xsl&quot;/&gt;
-       &lt;srcfilelist
-           dir   = &quot;${basedir}&quot;
-           files = &quot;build.xml&quot;/&gt;
-       &lt;targetfileset
-           dir      = &quot;${output.dir}&quot;
-           includes = &quot;**/*.html&quot;/&gt;
-    &lt;/dependset&gt;  </pre>
-</blockquote>
-
-<p> 
-In this example derived HTML files in the ${output.dir} directory 
-will be removed if any are out-of-date with respect to:</p>
-<ol>
-<li>the DTD of their source XML files</li>
-<li>a common DTD (imported by the main DTD)</li>
-<li>a subordinate XSLT stylesheet (imported by the main stylesheet), or</li>
-<li>the buildfile</li>
-</ol>
-
-<p>
-If any of the source files in the above example does not exist, all
-target files will also be removed.  To ignore missing source files instead,
-use filesets instead of filelists for the source files.
-</p>
-
-<hr>
-<p align="center">Copyright &copy; 2001 Apache Software Foundation.
-All rights
-Reserved.</p>
-
-</body>
-</html>
diff --git a/docs/manual/CoreTasks/dirname.html b/docs/manual/CoreTasks/dirname.html
deleted file mode 100644
index f225a93..0000000
--- a/docs/manual/CoreTasks/dirname.html
+++ /dev/null
@@ -1,54 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Dirname Task</title>
-</head>
-
-<body>
-
-<h2><a name="echo">Dirname</a></h2>
-<h3>Description</h3>
-<p>
-Task to determine the directory path of a specified file.
-</p>
-<p> 
-When this task executes, it will set the specified property to the
-value of the specified file up to, but not including, the last path
-element. If the specified file is a path that ends in a filename,
-the filename will be dropped. If the specified file is just a filename,
-the directory will be the current directory.
-</p>
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">file</td>
-    <td valign="top">The path to take the basename of.</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">property</td>
-    <td valign="top">The name of the property to set.</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-</table>
-
-<h3>Examples</h3>
-<pre>  &lt;dirname property=&quot;antfile.dir&quot; file=&quot;${ant.file}&quot;/&gt;</pre>
-will set <code>antfile.dir</code> to the directory path for
-<code>${ant.file}</code>.
-<pre>  &lt;dirname property=&quot;foo.dirname&quot; file=&quot;foo.txt&quot;/&gt;</pre>
-will set <code>foo.dirname</code> to the project's basedir.</p>
-
-<hr>
-<p align="center">Copyright &copy; 2002 Apache Software Foundation.
-All rights Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/CoreTasks/ear.html b/docs/manual/CoreTasks/ear.html
deleted file mode 100644
index e115799..0000000
--- a/docs/manual/CoreTasks/ear.html
+++ /dev/null
@@ -1,121 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>EAR Task</title>
-</head>
-
-<body>
-
-<h2><a name="ear">Ear</a></h2>
-<h3>Description</h3>
-<p>An extension of the <a href="jar.html">Jar</a> task with special
-treatment for files that should end up in an Enterprise Application archive.</p>
-<p>(The Ear task is a shortcut for specifying the particular layout of a EAR file. 
-The same thing can be accomplished by using the <i>prefix</i> and <i>fullpath</i>
-attributes of zipfilesets in a Zip or Jar task.)</p>
-<p>The extended zipfileset element from the zip task (with attributes <i>prefix</i>, <i>fullpath</i>, and <i>src</i>) is available in the Ear task.</p>
-
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">destfile</td>
-    <td valign="top">the EAR file to create.</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">appxml</td>
-    <td valign="top">The deployment descriptor to use (META-INF/application.xml).</td>
-    <td valign="top" align="center">Yes, unless update is set to true</td>
-  </tr>
-  <tr>
-    <td valign="top">basedir</td>
-    <td valign="top">the directory from which to jar the files.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">compress</td>
-    <td valign="top">Not only store data but also compress them, defaults to true</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">encoding</td>
-    <td valign="top">The character encoding to use for filenames
-      inside the archive.  Defaults to UTF8. <strong>It is not
-      recommended to change this value as the created archive will most
-      likely be unreadable for Java otherwise.</strong></td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">filesonly</td>
-    <td valign="top">Store only file entries, defaults to false</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">includes</td>
-    <td valign="top">comma separated list of patterns of files that must be
-      included. All files are included when omitted.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">includesfile</td>
-    <td valign="top">the name of a file. Each line of this file is
-      taken to be an include pattern</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">excludes</td>
-    <td valign="top">comma separated list of patterns of files that must be
-      excluded. No files (except default excludes) are excluded when omitted.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">excludesfile</td>
-    <td valign="top">the name of a file. Each line of this file is
-      taken to be an exclude pattern</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">defaultexcludes</td>
-    <td valign="top">indicates whether default excludes should be used or not
-      (&quot;yes&quot;/&quot;no&quot;). Default excludes are used when omitted.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">manifest</td>
-    <td valign="top">the manifest file to use.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">update</td>
-    <td valign="top">indicates whether to update or overwrite
-      the destination file if it already exists.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-</table>
-<h3>Nested elements</h3>
-<h4>metainf</h4>
-<p>The nested <code>metainf</code> element specifies a <a
-href="../CoreTypes/fileset.html">FileSet</a>. All files included in this fileset will
-end up in the <code>META-INF</code> directory of the ear file. If this
-fileset includes a file named <code>MANIFEST.MF</code>, the file is
-ignored and you will get a warning.</p>
-<h2>Example</h2>
-<pre>
-    &lt;ear destfile=&quot;${build.dir}/myapp.ear&quot; appxml=&quot;${src.dir}/metadata/application.xml&quot;&gt;
-      &lt;fileset dir=&quot;${build.dir}&quot; includes=&quot;*.jar,*.war&quot;/&gt;
-    &lt;/ear&gt;
-</pre>
-<hr>
-<p align="center">Copyright &copy; 2001-2002 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
-
-
diff --git a/docs/manual/CoreTasks/echo.html b/docs/manual/CoreTasks/echo.html
deleted file mode 100644
index 7c85d42..0000000
--- a/docs/manual/CoreTasks/echo.html
+++ /dev/null
@@ -1,91 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Echo Task</title>
-</head>
-
-<body>
-
-<h2><a name="echo">Echo</a></h2>
-<h3>Description</h3>
-<p>Echoes a message to the current loggers and listeners which
-means <tt>System.out</tt> unless overridden. A <tt>level</tt>
-can be specified, which controls at what logging level the message is
-filtered at. 
-<p> 
-The task can also echo to a file, in which case the option to append rather
-than overwrite the file is available, and the <tt>level</tt> option is 
-ignored</p>
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">message</td>
-    <td valign="top">the message to echo.</td>
-    <td valign="top" align="center">Yes, unless data is included in a
-      character section within this element.</td>
-  </tr>
-  <tr>
-    <td valign="top">file</td>
-    <td valign="top">the file to write the message to.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">append</td>
-    <td valign="top">Append to an existing file?</td>
-    <td valign="top" align="center">No - default is false.</td>
-  </tr>
-  <tr>
-    <td valign="top">level</td>
-    <td valign="top">Control the level at which this message is reported.
-            One of "error", "warning", "info", "verbose", "debug"</td>
-    <td valign="top" align="center">No - default is "warning".</td>
-  </tr>
-  
-  
-  
-</table>
-<h3>Examples</h3>
-<pre>  &lt;echo message=&quot;Hello, world&quot;/&gt;</pre>
-<pre>  
-&lt;echo&gt;This is a longer message stretching over
-two lines.
-&lt;/echo&gt;
-</pre>
-<pre>  
-&lt;echo&gt;
-This is a longer message stretching over
-three lines; the first line is a blank
-&lt;/echo&gt;
-</pre>
-As XML parsers are wont to do, the first newline in the text element
-has been included in the text. 
-
-<pre>&lt;echo message=&quot;Deleting drive C:&quot; level=&quot;debug&quot; /&gt;</pre>
-A message which only appears in <tt>-debug</tt> mode.
-<pre>&lt;echo level=&quot;error&quot; &gt;
-Imminent failure in the antimatter containment facility.
-Please withdraw to safe location at least 50km away.  
-&lt;/echo&gt;
-</pre>
-A message which appears even in <tt>-quiet</tt> mode.
-
-<pre>&lt;echo file="runner.csh" append="false" &gt;#\!/bin/tcsh
-java-1.3.1 -mx1024m ${project.entrypoint} $$*
-</echo></pre>
-Generate a shell script by echoing to a file.
-Note the use of a double $ symbol to stop Ant
-filtering out the single $ during variable expansion   
-<hr>
-
-<p align="center">Copyright &copy; 2001 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/CoreTasks/exec.html b/docs/manual/CoreTasks/exec.html
deleted file mode 100644
index 715d7ab..0000000
--- a/docs/manual/CoreTasks/exec.html
+++ /dev/null
@@ -1,201 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Exec Task</title>
-</head>
-
-<body>
-
-<h2><a name="exec">Exec</a></h2>
-<h3>Description</h3>
-<p>Executes a system command. When the <i>os</i> attribute is specified, then
-the command is only executed when Ant is run on one of the specified operating
-systems.</p>
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">command</td>
-    <td valign="top">the command to execute with all command line
-      arguments. <b>deprecated, use executable and nested
-      <code>&lt;arg&gt;</code> elements instead</b>.</td>
-    <td align="center" rowspan="2">Exactly one of the two.</td>
-  </tr>
-  <tr>
-    <td valign="top">executable</td>
-    <td valign="top">the command to execute without any command line
-      arguments.</td>
-  </tr>
-  <tr>
-    <td valign="top">dir</td>
-    <td valign="top">the directory in which the command should be executed.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">os</td>
-    <td valign="top">list of Operating Systems on which the command may be
-      executed. If the current OS's name is contained in this list, the command will
-      be executed. The OS's name is determined by the Java Virtual machine and is set
-      in the &quot;os.name&quot; system property.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">output</td>
-    <td valign="top">the file to which the output of the command should be
-      redirected.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">append</td>
-    <td valign="top">whether output should be appended to or overwrite
-    an existing file.  Defaults to false.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">outputproperty</td>
-    <td valign="top">the name of a property in which the output of the 
-      command should be stored.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">resultproperty</td>
-    <td valign="top">the name of a property in which the return code of the 
-      command should be stored. Only of interest if failonerror=false</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">timeout</td>
-    <td valign="top">Stop the command if it doesn't finish within the
-      specified time (given in milliseconds).</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">failonerror</td>
-    <td valign="top">Stop the buildprocess if the command exits with a
-      returncode other than 0. Defaults to false</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">failifexecutionfails</td>
-    <td valign="top">Stop the build if we can't start the program.
-      Defaults to true. </td>
-    <td align="center" valign="top">No</td>
-  </tr>  <tr>
-    <td valign="top">newenvironment</td>
-    <td valign="top">Do not propagate old environment when new environment
-      variables are specified.</td>
-    <td align="center" valign="top">No, default is <i>false</i></td>
-  </tr>
-  <tr>
-    <td valign="top">vmlauncher</td>
-    <td valign="top">Run command using the Java VM's execution facilities
-        where available. If set to false the underlying OS's shell,
-        either directly or through the antRun scripts, will be used.
-        Under some operating systems, this gives access to facilities
-        not normally available through the VM including, under Windows,
-        being able to execute scripts, rather than their associated
-        interpreter.</td>
-    <td align="center" valign="top">No, default is <i>true</i></td>
-  </tr>
-</table>
-<h3>Examples</h3>
-<blockquote>
-<pre>
-&lt;exec dir=&quot;${src}&quot; executable=&quot;cmd.exe&quot; os=&quot;Windows 2000&quot; output=&quot;dir.txt&quot;&gt;
-  &lt;arg line=&quot;/c dir&quot;/&gt;
-&lt;/exec&gt;</pre>
-</blockquote>
-<h3>Parameters specified as nested elements</h3>
-<h4>arg</h4>
-<p>Command line arguments should be specified as nested
-<code>&lt;arg&gt;</code> elements. See <a
-href="../using.html#arg">Command line arguments</a>.</p>
-<h4><a name="env">env</a></h4>
-<p>It is possible to specify environment variables to pass to the
-system command via nested <code>&lt;env&gt;</code> elements.</p>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">key</td>
-    <td valign="top">The name of the environment variable.</td>
-    <td align="center" valign="top">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">value</td>
-    <td valign="top">The literal value for the environment variable.</td>
-    <td align="center" rowspan="3">Exactly one of these.</td>
-  </tr>
-  <tr>
-    <td valign="top">path</td>
-    <td valign="top">The value for a PATH like environment
-      variable. You can use ; or : as path separators and Ant will
-      convert it to the platform's local conventions.</td>
-  </tr>
-  <tr>
-    <td valign="top">file</td>
-    <td valign="top">The value for the environment variable. Will be
-      replaced by the absolute filename of the file by Ant.</td>
-  </tr>
-</table>
-
-<h3>Errors and return codes</h3>
-By default the return code of a &lt;exec&gt; is ignored; when you set 
-<code>failonerror="true"</code> then any non zero response is treated as an
-error. Alternatively, you can set <code>resultproperty</code> to the name
-of a property and have it assigned to the result code (barring immutability,
-of course).
-<p>
-If the attempt to start the program fails with an OS dependent error code,
-then &lt;exec&gt; halts the build unless <code>failifexecutionfails</code>
-is set. You can use that to run a program if it exists, but otherwise 
-do nothing.
-<p>
-What do those error codes mean? Well, they are OS dependent. On Windows
-boxes you have to look in include\error.h in your windows compiler or wine files;
-error code 2 means 'no such program', which usually means it is not on the path.
-Any time you see such an error from any ant task, it is usually not an ant bug,
-but some configuration problem on your machine.  
-
-<h3>Examples</h3>
-<blockquote><pre>
-&lt;exec executable=&quot;emacs&quot; &gt;
-  &lt;env key=&quot;DISPLAY&quot; value=&quot;:1.0&quot;/&gt;
-&lt;/exec&gt;
-</pre></blockquote>
-<p>starts <code>emacs</code> on display 1 of the X Window System.</p>
-<blockquote><pre>
-&lt;exec ... &gt;
-  &lt;env key=&quot;PATH&quot; path=&quot;${java.library.path}:${basedir}/bin&quot;/&gt;
-&lt;/exec&gt;
-</pre></blockquote>
-<p>adds <code>${basedir}/bin</code> to the <code>PATH</code> of the
-system command.</p>
-<p><b>Note:</b> Although it may work for you to specify arguments using 
-a simple arg-element and separate them by spaces it may fail if you switch to
-a newer version of the JDK. JDK &lt; 1.2 will pass these as separate arguments
-to the program you are calling, JDK &gt;= 1.2 will pass them as a single 
-argument and cause most calls to fail.</p>
-<p><b>Note2:</b> If you are using Ant on Windows and a new DOS-Window pops up
-for every command which is executed this may be a problem of the JDK you are using.
-This problem may occur with all JDK's &lt; 1.2.</p>
-<p>
-<b>Timeouts: </b> If a timeout is specified, when it is reached the 
-sub process is killed and a message printed to the log. The return
-value of the execution will be "-1", which will halt the build if
-<tt>failonerror=true</tt>, but be ignored otherwise.
-<hr>
-<p align="center">Copyright &copy; 2001-2002 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/CoreTasks/fail.html b/docs/manual/CoreTasks/fail.html
deleted file mode 100644
index 656314c..0000000
--- a/docs/manual/CoreTasks/fail.html
+++ /dev/null
@@ -1,67 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Fail Task</title>
-</head>
-
-<body>
-
-<h2><a name="fail">Fail</a></h2>
-<h3>Description</h3>
-<p>Exits the current build (just throwing a BuildException), optionally printing additional information.</p>
-<p>The message of the Exception can be set via the message attribute
-or character data nested into the element.</p>
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">message</td>
-    <td valign="top">A message giving further information on why the build exited</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">if</td>
-    <td valign="top">Only fail if a property of the given name exists
-      in the current project</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">unless</td>
-    <td valign="top">Only fail if a property of the given name doesn't
-      exist in the current project</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-</table>
-<h3>Examples</h3>
-<pre>  &lt;fail/&gt;</pre>
-<p>will exit the current build with no further information given.</p>
-<pre>
-BUILD FAILED
-
-build.xml:4: No message
-</pre>
-
-<pre>  &lt;fail message=&quot;Something wrong here.&quot;/&gt;</pre>
-<p>will exit the current build and print something like the following to wherever
-your output goes:</p>
-<pre>
-BUILD FAILED
-
-build.xml:4: Something wrong here.
-</pre>
-
-<pre>  &lt;fail&gt;Something wrong here.&lt;/fail&gt;</pre>
-<p>will give the same result as above.</p>
-
-<hr>
-<p align="center">Copyright &copy; 2001 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/CoreTasks/filter.html b/docs/manual/CoreTasks/filter.html
deleted file mode 100644
index befe497..0000000
--- a/docs/manual/CoreTasks/filter.html
+++ /dev/null
@@ -1,63 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Filter Task</title>
-</head>
-
-<body>
-
-<h2><a name="filter">Filter</a></h2>
-<h3>Description</h3>
-<p>Sets a token filter for this project or read multiple token filter from
-an input file and sets these as filters.
-Token filters are used by all tasks that perform file copying operations
-through the Project commodity methods.</p>
-<p>Note 1: the token string must not contain the separators chars (@).<br>
-Note 2: Either token and value attributes must be provided, or only the
-filtersfile attribute.</p>
-
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">token</td>
-    <td valign="top">the token string without @</td>
-    <td align="center" valign="top">Yes*</td>
-  </tr>
-  <tr>
-    <td valign="top">value</td>
-    <td valign="top">the string that should be put to replace the token when the 
-      file is copied</td>
-    <td align="center" valign="top">Yes*</td>
-  </tr>
-  <tr>
-    <td valign="top">filtersfile</td>
-    <td valign="top">The file from which the filters must be read. This file must be a formatted as a property file. </td>
-    <td align="center" valign="top">Yes*</td>
-  </tr>
-</table>
-<p>* see notes 1 and 2 above parameters table.</p>
-<h3>Examples</h3>
-<pre>  &lt;filter token=&quot;year&quot; value=&quot;2000&quot;/&gt;
-  &lt;copy todir=&quot;${dest.dir}&quot; filtering=&quot;true&quot;&gt;
-    &lt;fileset dir=&quot;${src.dir}&quot;/&gt;
-  &lt;/copy&gt;</pre> 
-<p>will copy recursively all the files from the <i>src.dir</i> directory into
-the <i>dest.dir</i> directory replacing all the occurrences of the string <i>@year@</i>
-with <i>2000.</i></p>
-<pre>  &lt;filter filtersfile=&quot;deploy_env.properties&quot;/&gt;</pre>
-will read all property entries from the <i>deploy_env.properties</i> file
-and set these as filters.
-
-<hr>
-<p align="center">Copyright &copy; 2001-2002 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/CoreTasks/fixcrlf.html b/docs/manual/CoreTasks/fixcrlf.html
deleted file mode 100644
index e305aa0..0000000
--- a/docs/manual/CoreTasks/fixcrlf.html
+++ /dev/null
@@ -1,275 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>FixCRLF Task</title>
-</head>
-
-<body>
-
-<h2><a name="fixcrlf">FixCRLF</a></h2>
-<h3>Description</h3>
-      <p>
-	Adjusts a text file to local conventions.
-      </p>
-      
-      <p>
-	The set of files to be adjusted can be refined with the
-	<i>includes</i>, <i>includesfile</i>, <i>excludes</i>,
-	<i>excludesfile</i> and <i>defaultexcludes</i>
-	attributes. Patterns provided through the <i>includes</i> or
-	<i>includesfile</i> attributes specify files to be
-	included. Patterns provided through the <i>exclude</i> or
-	<i>excludesfile</i> attribute specify files to be
-	excluded. Additionally, default exclusions can be specified with
-	the <i>defaultexcludes</i> attribute. See the section on <a
-	href="../dirtasks.html#directorybasedtasks">directory based
-	tasks</a>, for details of file inclusion/exclusion patterns
-	and their usage.
-      </p>
-      
-<p>This task forms an implicit <a href="../CoreTypes/fileset.html">FileSet</a> and
-supports all attributes of <code>&lt;fileset&gt;</code>
-(<code>dir</code> becomes <code>srcdir</code>) as well as the nested
-<code>&lt;include&gt;</code>, <code>&lt;exclude&gt;</code> and
-<code>&lt;patternset&gt;</code> elements.</p>
-
-      <p>
-	The output file is only written if it is a new file, or if it
-	differs from the existing file.  This prevents spurious
-	rebuilds based on unchanged files which have been regenerated
-	by this task.
-      </p>
-
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">srcDir</td>
-    <td valign="top">Where to find the files to be fixed up.</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">destDir</td>
-    <td valign="top">Where to place the corrected files.  Defaults to
-      srcDir (replacing the original file)</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">includes</td>
-    <td valign="top">comma separated list of patterns of files that must be
-      included. All files are included when omitted.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">includesfile</td>
-    <td valign="top">the name of a file. Each line of this file is
-      taken to be an include pattern</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">excludes</td>
-    <td valign="top">comma separated list of patterns of files that must be
-      excluded. No files (except default excludes) are excluded when omitted.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">excludesfile</td>
-    <td valign="top">the name of a file. Each line of this file is
-      taken to be an exclude pattern</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">defaultexcludes</td>
-    <td valign="top">indicates whether default excludes should be used or not
-      (&quot;yes&quot;/&quot;no&quot;). Default excludes are used when omitted.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-	<tr>
-	  <td valign="top">eol</td>
-	  <td valign="top">
-	    Specifies how end-of-line (EOL) characters are to be
-	    handled.  The EOL characters are CR, LF and the pair CRLF.
-	    Valid values for this property are:
-	    <ul>
-	      <li>asis: leave EOL characters alone</li>
-	      <li>cr: convert all EOLs to a single CR</li>
-	      <li>lf: convert all EOLs to a single LF</li>
-	      <li>crlf: convert all EOLs to the pair CRLF</li>
-	    </ul>
-	    Default is based on the platform on which you are running
-	    this task.  For Unix platforms, the default is &quot;lf&quot;.
-	    For DOS based systems (including Windows), the default is
-	    &quot;crlf&quot;.  For Mac OS, the default is &quot;cr&quot;.
-	    <p>
-	      This is the preferred method for specifying EOL.  The
-	      &quot;<i><b>cr</b></i>&quot; attribute (see below) is
-	      now deprecated.
-	    </p>
-	    <p>
-	      <i>N.B.</i>: One special case is recognized. The three
-	      characters CR-CR-LF are regarded as a single EOL.
-	      Unless this property is specified as &quot;asis&quot;,
-	      this sequence will be converted into the specified EOL
-	      type.
-	    </p>
-	  </td>
-	  <td valign="top" align="center">No</td>
-	</tr>
-	<tr>
-	  <td valign="top">cr</td>
-	  <td valign="top">
-	    <i><b>Deprecated.</b></i> Specifies how CR characters are
-	    to be handled at end-of-line (EOL).  Valid values for this
-	    property are:
-	    <ul>
-	      <li>asis: leave EOL characters alone.</li>
-	      <li>
-		add: add a CR before any single LF characters. The
-		intent is to convert all EOLs to the pair CRLF.
-	      </li>
-	      <li>
-		remove: remove all CRs from the file.  The intent is
-		to convert all EOLs to a single LF.
-	      </li>
-	    </ul>
-	    Default is based on the platform on which you are running
-	    this task.  For Unix platforms, the default is &quot;remove&quot;.
-	    For DOS based systems (including Windows), the default is
-	    &quot;add&quot;.
-	    <p>
-	      <i>N.B.</i>: One special case is recognized. The three
-	      characters CR-CR-LF are regarded as a single EOL.
-	      Unless this property is specified as &quot;asis&quot;,
-	      this sequence will be converted into the specified EOL
-	      type.
-	    </p>
-	  </td>
-	  <td valign="top" align="center">No</td>
-	</tr>
-	<tr>
-	  <td valign="top">javafiles</td>
-	  <td valign="top">
-	    Used only in association with the
-	    &quot;<i><b>tab</b></i>&quot; attribute (see below), this
-	    boolean attribute indicates whether the fileset is a set
-	    of java source files
-	    (&quot;yes&quot;/&quot;no&quot;). Defaults to
-	    &quot;no&quot;.  See notes in section on &quot;tab&quot;.
-	  </td>
-	  <td valign="top" align="center">No</td>
-	</tr>
-	<tr>
-    <td valign="top">tab</td>
-    <td valign="top">Specifies how tab characters are to be handled.  Valid
-      values for this property are:
-      <ul>
-      <li>add: convert sequences of spaces which span a tab stop to tabs</li>
-      <li>asis: leave tab and space characters alone</li>
-      <li>remove: convert tabs to spaces</li>
-      </ul>
-      Default for this parameter is &quot;asis&quot;.
-	    <p>
-	      <i>N.B.</i>: When the attribute
-	      &quot;<i><b>javafiles</b></i>&quot; (see above) is
-	      &quot;true&quot;, literal TAB characters occurring
-	      within Java string or character constants are never
-	      modified.  This functionality also requires the
-	      recognition of Java-style comments.
-	    </p>
-      <p>
-		<i>N.B.</i>: There is an incompatibility between this
-		and the previous version in the handling of white
-		space at the end of lines.  This version does
-		<i><b>not</b></i> remove trailing whitespace on lines.
-</p>
-      </td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">tablength</td>
-    <td valign="top">TAB character interval. Valid values are between
-	      2 and 80 inclusive.  The default for this parameter is 8.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">eof</td>
-    <td valign="top">Specifies how DOS end of file (control-Z) characters are
-      to be handled.  Valid values for this property are:
-      <ul>
-      <li>add: ensure that there is an EOF character at the end of the file</li>
-      <li>asis: leave EOF characters alone</li>
-      <li>remove: remove any EOF character found at the end</li>
-      </ul>
-      Default is based on the platform on which you are running this task.
-      For Unix platforms, the default is remove.  For DOS based systems
-      (including Windows), the default is asis.
-      </td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">encoding</td>
-    <td valign="top">The encoding of the files</td>
-    <td align="center">No - defaults to default JVM encoding</td>
-  </tr>
-</table>
-<h3>Examples</h3>
-<pre>  &lt;fixcrlf srcdir=&quot;${src}&quot;
-       eol=&quot;lf&quot; eof=&quot;remove&quot;
-       includes=&quot;**/*.sh&quot;
-  /&gt;</pre>
-<p>Replaces EOLs with LF characters and removes eof characters from
-	the shell scripts.  Tabs and spaces are left as is.</p>
-<pre>  &lt;fixcrlf srcdir=&quot;${src}&quot;
-       eol=&quot;crlf&quot;
-       includes=&quot;**/*.bat&quot;
-  /&gt;</pre>
-<p>Replaces all EOLs with cr-lf pairs in the batch files.
-Tabs and spaces are left as is.
-EOF characters are left alone if run on
-DOS systems, and are removed if run on Unix systems.</p>
-<pre>  &lt;fixcrlf srcdir=&quot;${src}&quot;
-       tabs=&quot;add&quot;
-       includes=&quot;**/Makefile&quot;
-  /&gt;</pre>
-<p>Sets EOLs according to local OS conventions, and
-converts sequences of spaces and tabs to the minimal set of spaces and
-	tabs which will maintain spacing within the line.  Tabs are
-	set at 8 character intervals.  EOF characters are left alone if
-run on DOS systems, and are removed if run on Unix systems.
-Many versions of make require tabs prior to commands.</p>
-      <pre>  &lt;fixcrlf srcdir=&quot;${src}&quot;
-       tabs=&quot;remove&quot;
-       tablength=&quot;3&quot;
-       eol=&quot;lf&quot;
-       javafiles=&quot;yes&quot;
-       includes=&quot;**/*.java&quot;
-  /&gt;</pre>
-      <p>
-	Converts all EOLs in the included java source files to a
-	single LF.  Replace all TAB characters except those in string
-	or character constants with spaces, assuming a tab width of 3.
-	If run on a unix system, any CTRL-Z EOF characters at the end
-	of the file are removed.  On DOS/Windows, any such EOF
-	characters will be left untouched.
-      </p>
-<pre>  &lt;fixcrlf srcdir=&quot;${src}&quot;
-       tabs=&quot;remove&quot;
-       includes=&quot;**/README*&quot;
-  /&gt;</pre>
-<p>Sets EOLs according to local OS conventions, and
-converts all tabs to spaces, assuming a tab width of 8.
-EOF characters are left alone if run on
-DOS systems, and are removed if run on Unix systems.
-You never know what editor a user will use to browse README's.</p>
-<hr>
-<p align="center">Copyright &copy; 2001 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/CoreTasks/genkey.html b/docs/manual/CoreTasks/genkey.html
deleted file mode 100644
index 27be18c..0000000
--- a/docs/manual/CoreTasks/genkey.html
+++ /dev/null
@@ -1,104 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>GenKey Task</title>
-</head>
-
-<body>
-
-<h2><a name="genkey">GenKey</a></h2>
-<h3>Description</h3>
-<p>Generates a key in keystore. This task needs Java1.2 or later</p>
-
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">alias</td>
-    <td valign="top">the alias to add under</td>
-    <td valign="top" align="center">Yes.</td>
-  </tr>
-  <tr>
-    <td valign="top">storepass</td>
-    <td valign="top">password for keystore integrity. Must
-	be at least 6 characters long</td>
-    <td valign="top" align="center">Yes.</td>
-  </tr>
-  <tr>
-    <td valign="top">keystore</td>
-    <td valign="top">keystore location</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">storetype</td>
-    <td valign="top">keystore type</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">keypass</td>
-    <td valign="top">password for private key (if different)</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">sigalg</td>
-    <td valign="top">the algorithm to use in signing</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">keyalg</td>
-    <td valign="top">the method to use when generating name-value pair</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">verbose</td>
-    <td valign="top">(true | false) verbose output when signing</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">dname</td>
-    <td valign="top">The distinguished name for entity</td>
-    <td valign="top" align="center">Yes if dname element unspecified</td>
-  </tr>
-  <tr>
-    <td valign="top">validity</td>
-    <td valign="top">(integer) indicates how many days certificate is valid</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">keysize</td>
-    <td valign="top">(integer) indicates the size of key generated</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-</table>
-
-<p>Alternatively you can specify the distinguished name by creating a sub-element named dname and populating it with param elements that have a name and a value. When using the subelement it is automatically encoded properly and , are replace</p>
-<p>The following two examples are identical: </p>
-
-<h3>Examples</h3>
-<blockquote>
-  <p><code>&lt;genkey alias=&quot;apache-group&quot; storepass=&quot;secret&quot; 
-  dname=&quot;CN=Ant Group, OU=Jakarta Division, O=Apache.org, C=US&quot;/&gt;</code></p>
-</blockquote>
-
-<blockquote>
-  <pre><code>&lt;genkey alias=&quot;apache-group&quot; storepass=&quot;secret&quot; &gt;
-  &lt;dname&gt;
-    &lt;param name=&quot;CN&quot; value=&quot;Ant Group&quot;/&gt;
-    &lt;param name=&quot;OU&quot; value=&quot;Jakarta Division&quot;/&gt;
-    &lt;param name=&quot;O&quot;  value=&quot;Apache.Org&quot;/&gt;
-    &lt;param name=&quot;C&quot;  value=&quot;US&quot;/&gt;
-  &lt;/dname&gt;
-&lt;/genkey&gt;</code></pre>
-</blockquote>
-<hr>
-<p align="center">Copyright &copy; 2001 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/CoreTasks/get.html b/docs/manual/CoreTasks/get.html
deleted file mode 100644
index 1b1b898..0000000
--- a/docs/manual/CoreTasks/get.html
+++ /dev/null
@@ -1,106 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Get Task</title>
-</head>
-
-<body>
-
-<h2><a name="get">Get</a></h2>
-<h3>Description</h3>
-<p>Gets a file from a URL. When the verbose option is &quot;on&quot;, this task
-displays a '.' for every 100 Kb retrieved. Any URL schema supported by
-the runtime is valid here, including http:, ftp: and jar:; 
-https: is only valid if the appropriate support is added to the pre-1.4 Java
-runtimes. 
- 
-</p>
-<p>This task should be preferred above the <a href="cvs.html">CVS task</a> when
-fetching remote content. CVS is significantly slower than loading a compressed
-archive compared to http/ftp.</p>
-
-The <i>usetimestamp</i> option enables you to control downloads so that the remote file is
-only fetched if newer than the local copy. If there is no local copy, the download always takes 
-place. When a file is downloaded, the timestamp of the downloaded file is set to the remote timestamp,
-if  the JVM is Java1.2 or later. 
-NB: This timestamp facility only works on downloads using the HTTP protocol. 
-<p>
-A username and password can be specified, in which case basic 'slightly encoded
-plain text' authentication is used. This is only a secure authentication
-mechanism over an HTTPS link.
-</p>
- 
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">src</td>
-    <td valign="top">the URL from which to retrieve a file.</td>
-    <td align="center" valign="top">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">dest</td>
-    <td valign="top">the file where to store the retrieved file.</td>
-    <td align="center" valign="top">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">verbose</td>
-    <td valign="top">show verbose progress information (&quot;on&quot;/&quot;off&quot;).</td>
-    <td align="center" valign="top">No; default "false"</td>
-  </tr>
-  <tr>
-    <td valign="top">ignoreerrors</td>
-    <td valign="top">Log errors but don't treat as fatal.</td>
-    <td align="center" valign="top">No; default "false"</td>
-  </tr>
-  <tr>
-    <td valign="top">usetimestamp</td>
-    <td valign="top">conditionally download a file based on the timestamp of the
-    local copy. HTTP only</td>
-    <td align="center" valign="top">No; default "false"</td>
-  </tr>
-  <tr>
-    <td valign="top">username</td>
-    <td valign="top">username for 'BASIC' http authentication</td>
-    <td align="center" valign="top">if password is set</td>
-  </tr>  
-  <tr>
-    <td valign="top">password</td>
-    <td valign="top">password: required </td>
-    <td align="center" valign="top">if username is set</td>
-  </tr>  
-
-</table>
-<h3>Examples</h3>
-<pre>  &lt;get src=&quot;http://jakarta.apache.org/&quot; dest=&quot;help/index.html&quot;/&gt;</pre>
-<p>Gets the index page of http://jakarta.apache.org/, and stores it in the file <code>help/index.html</code>.</p>
-
-<pre>  &lt;get src=&quot;http://jakarta.apache.org/builds/tomcat/nightly/ant.zip&quot; 
-    dest=&quot;optional.jar&quot; 
-    verbose=&quot;true&quot;
-    usetimestamp=&quot;true&quot;/&gt;</pre>
-<p>
-Gets the nightly ant build from the tomcat distribution, if the local copy
-is missing or out of date. Uses the verbose option 
-for progress information.
-</p>
-
-<pre>  &lt;get src=&quot;https://insecure-bank.org/statement/user=1214&quot; 
-    dest=&quot;statement.html&quot; 
-    username="1214";
-    password="secret" /&gt;</pre>
-<p>
-Fetches some file from a server with access control. Because https is being used the
-fact that basic auth sends passwords in plaintext is moot.
-<hr>
-<p align="center">Copyright &copy; 2001-2002 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/CoreTasks/gunzip.html b/docs/manual/CoreTasks/gunzip.html
deleted file mode 100644
index 07e6cd6..0000000
--- a/docs/manual/CoreTasks/gunzip.html
+++ /dev/null
@@ -1,12 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>GUnZip Task</title>
-</head>
-
-<body>
-This document's new home is <A HREF="unpack.html">here</A>
-</body>
-</html>
-
diff --git a/docs/manual/CoreTasks/gzip.html b/docs/manual/CoreTasks/gzip.html
deleted file mode 100644
index 3fe9205..0000000
--- a/docs/manual/CoreTasks/gzip.html
+++ /dev/null
@@ -1,12 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>GZip Task</title>
-</head>
-
-<body>
-This document's new home is <A HREF="pack.html">here</A>
-</body>
-</html>
-
diff --git a/docs/manual/CoreTasks/input.html b/docs/manual/CoreTasks/input.html
deleted file mode 100644
index 674b8ac..0000000
--- a/docs/manual/CoreTasks/input.html
+++ /dev/null
@@ -1,102 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Input Task</title>
-</head>
-
-<body>
-
-<h2><a name="input">Input</a></h2>
-<h3>Description</h3>
-
-<p>Allows user interaction during the build process by prompting for
-input.  To do so, it uses the configured 
-<a href="../inputhandler.html">InputHandler</a>.</p>
-
-<p>The prompt can be set via the message attribute or as character
-data nested into the element.</p>
-
-<p>Optinonally a set of valid imput arguments can be defined via the
-validargs attribute. Input task will no accept value that don't match
-one of the predefined.</p>
-
-<p>Optionally a property can be created from the value entered by the
-user. This property can then be used during the following build
-run. Input behaves according to <a href="property.html">property
-task</a> which means that existing properties cannot be overriden.</p>
-
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">message</td>
-    <td valign="top">the Message which gets displayed to the user
-    during the build run.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">validargs</td>
-    <td valign="top">comma separated String containing valid input
-    arguments. If set, input task will reject any input not defined
-    here.  Validargs are compared case sensitive. If you want 'a' and
-    'A' to be accepted you will need to define both arguments within
-    validargs.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">addproperty</td>
-    <td valign="top">the name of a property to be created from
-    input. Behaviour is equal to <a href="property.html">property
-    task</a> which means that existing properties cannot be
-    overriden.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-</table>
-<h3>Examples</h3>
-<pre>  &lt;input/&gt;</pre>
-<p>Will pause the build run until return key is pressed when using the
-<a href="../inputhandler.html#defaulthandler">default
-InputHandler</a>, the concrete behavior is defined by the InputHandler
-implementation you use.</p>
-<pre>  &lt;input&gt;Press Return key to continue...&lt;/input&gt;</pre>
-<p>Will display the message &quot;Press Return key to
-continue...&quot; and pause the build run until return key is pressed
-(again, the concrete behavior is implementation dependent).</p>
-<pre>  &lt;input
-    message=&quot;Press Return key to continue...&quot;
-  /&gt;</pre>
-<p>Will display the message &quot;Press Return key to
-continue...&quot; and pause the build run until return key is pressed
-(see above).</p>
-<pre>
-  &lt;input
-    message=&quot;All data is going to be deleted from DB continue (y/n)?&quot;
-    validargs=&quot;y,n&quot;
-    addproperty=&quot;do.delete&quot;
-  /&gt;
-  &lt;condition property=&quot;do.abort&quot;&gt;
-    &lt;equals arg1=&quot;n&quot; arg2=&quot;${do.delete}&quot; /&gt;
-  &lt;/condition&gt;
-  &lt;fail if=&quot;do.abort&quot;&gt;Build aborted by user.&lt;/fail&gt;
-</pre>
-<p>Will display the message &quot;All data is going to be deleted from
-DB continue (y/n)?&quot; and require 'y' to continue build or 'n' to
-exit build with following message &quot;Build aborted by
-user.&quot;.</p>
-<pre>  &lt;input
-    message=&quot;Please enter db-username:&quot;
-    addproperty=&quot;db.user&quot;
-  /&gt;</pre>
-<p>Will display the message &quot;Please enter db-username:&quot; and set the
-property <code>db.user</code> to the value entered by the user.</p>
-
-<hr>
-<p align="center">Copyright &copy; 2001-2002 Apache Software Foundation. All rights
-Reserved.</p>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/manual/CoreTasks/jar.html b/docs/manual/CoreTasks/jar.html
deleted file mode 100644
index 51ab567..0000000
--- a/docs/manual/CoreTasks/jar.html
+++ /dev/null
@@ -1,240 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Jar Task</title>
-</head>
-
-<body>
-
-<h2><a name="jar">Jar</a></h2>
-<h3>Description</h3>
-<p>Jars a set of files.</p>
-<p>The <i>basedir</i> attribute is the reference directory from where to jar.</p>
-<p>Note that file permissions will not be stored in the resulting jarfile.</p>
-<p>It is possible to refine the set of files that are being jarred. This can be
-done with the <i>includes</i>, <i>includesfile</i>, <i>excludes</i>, <i>excludesfile</i> and <i>defaultexcludes</i>
-attributes. With the <i>includes</i> or <i>includesfile</i> attribute you specify the files you want to
-have included by using patterns. The <i>exclude</i> or <i>excludesfile</i> attribute is used to specify
-the files you want to have excluded. This is also done with patterns. And
-finally with the <i>defaultexcludes</i> attribute, you can specify whether you
-want to use default exclusions or not. See the section on <a
-href="../dirtasks.html#directorybasedtasks">directory based tasks</a>, on how the
-inclusion/exclusion of files works, and how to write patterns.</p>
-<p>This task forms an implicit <a href="../CoreTypes/fileset.html">FileSet</a> and
-supports all attributes of <code>&lt;fileset&gt;</code>
-(<code>dir</code> becomes <code>basedir</code>) as well as the nested
-<code>&lt;include&gt;</code>, <code>&lt;exclude&gt;</code> and
-<code>&lt;patternset&gt;</code> elements.</p>
-<p>You can also use nested file sets for more flexibility, and specify
-multiple ones to merge together different trees of files into one JAR.
-The extended fileset and groupfileset attributes from the zip task are
-also available in the jar task.
-See the <a href="zip.html">Zip</a> task for more details and examples.</p>
-<p>If the manifest is omitted, a simple one will be supplied by Ant.
-If there is a manifest or manifests in your set of files, these manifests can
-be used if <i>filesetmanifests</i> is set to <i>merge</i> or <i>mergewithoutmain</i>.</p>
-<p>The <code>update</code> parameter controls what happens if the
-JAR file already exists. When set to <code>yes</code>, the JAR file is
-updated with the files specified. When set to <code>no</code> (the
-default) the JAR file is overwritten. An example use of this is
-provided in the <a href="zip.html">Zip task documentation</a>.</p>
-<p>(The Jar task is a shortcut for specifying the manifest file of a JAR file. 
-The same thing can be accomplished by using the <i>fullpath</i>
-attribute of a zipfileset in a Zip task. The one difference is that if the
-<i>manifest</i> attribute is not specified, the Jar task will 
-include an empty one for you.)</p>
-
-<p>Manifests are processed by the Jar task according to the 
-<a href="http://java.sun.com/j2se/1.3/docs/guide/jar/jar.html">Jar file specification.</a>
-Note in particular that this may result in manifest lines greater than 72 bytes 
-being wrapped and continued on the next line.
-</p>
-
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">destfile</td>
-    <td valign="top">the JAR file to create.</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">basedir</td>
-    <td valign="top">the directory from which to jar the files.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">compress</td>
-    <td valign="top">Not only store data but also compress them, defaults to true</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">encoding</td>
-    <td valign="top">The character encoding to use for filenames
-      inside the archive.  Defaults to UTF8. <strong>It is not
-      recommended to change this value as the created archive will most
-      likely be unreadable for Java otherwise.</strong></td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">filesonly</td>
-    <td valign="top">Store only file entries, defaults to false</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">includes</td>
-    <td valign="top">comma separated list of patterns of files that must be
-      included. All files are included when omitted.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">includesfile</td>
-    <td valign="top">the name of a file. Each line of this file is
-      taken to be an include pattern</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">excludes</td>
-    <td valign="top">comma separated list of patterns of files that must be
-      excluded. No files (except default excludes) are excluded when omitted.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">excludesfile</td>
-    <td valign="top">the name of a file. Each line of this file is
-      taken to be an exclude pattern</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">defaultexcludes</td>
-    <td valign="top">indicates whether default excludes should be used or not
-      (&quot;yes&quot;/&quot;no&quot;). Default excludes are used when omitted.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">manifest</td>
-    <td valign="top">the manifest file to use.  This can be either the location of a manifest, or the name of a jar added through a fileset.  If its the name of an added jar, the task expects the manifest to be in the jar at META-INF/MANIFEST.MF</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">filesetmanifest</td>
-    <td valign="top">behavior when a Manifest is found in a zipfileset or zipgroupfileset file is found.  Valid values are &quot;skip&quot;, &quot;merge&quot;, and &quot;mergewithoutmain&quot;.  &quot;merge&quot; will merge all of manifests together, and merge this into any other specified manifests.  &quot;mergewithoutmain&quot; merges everything but the Main section of the manifests.  Default value is &quot;skip&quot;.
-    </td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">update</td>
-    <td valign="top">indicates whether to update or overwrite
-      the destination file if it already exists.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">whenempty</td>
-    <td valign="top">behavior when no files match.  Valid values are &quot;fail&quot;, &quot;skip&quot;, and &quot;create&quot;.  Default is &quot;skip&quot;.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">duplicate</td>
-    <td valign="top">behavior when a duplicate file is found.  Valid values are &quot;add&quot;, &quot;preserve&quot;, and &quot;fail&quot;.  The default value is &quot;add&quot;.  </td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">index</td>
-    <td valign="top">whether to create an <A HREF="http://java.sun.com/j2se/1.3/docs/guide/jar/jar.html#JAR%20Index">index list</A> to speed up classloading.  This is a JDK 1.3+ specific feature.  Defaults to false. </td>
-    <td valign="top" align="center">No</td>
-  </tr>
-</table>
-
-<h3>Nested elements</h3>
-<h4>metainf</h4>
-<p>The nested <code>metainf</code> element specifies a <a
-href="../CoreTypes/fileset.html">FileSet</a>. All files included in this fileset will
-end up in the <code>META-INF</code> directory of the jar file. If this
-fileset includes a file named <code>MANIFEST.MF</code>, the file is
-ignored and you will get a warning.</p>
-
-<h4>Manifest</h4>
-<p>The manifest nested element allows the manifest for the Jar file to
-be provided inline in the build file rather than in an external
-file. This element is identical to the 
-<a href="manifest.html">manifest</a> task, but its file and mode
-attributes will be ignored.</p>
-<p>
-If both an inline manifest and an external file are both specified, the
-manifests are merged. 
-</p>
-
-<p>When using inline manifests, the Jar task will check whether the build
-file is more recent that the Jar file when deciding whether to rebuild the
-Jar. This will not take into account property file changes which may affect 
-the resulting Jar.
-</p>
-
-<h3>Examples</h3>
-<pre>  &lt;jar file=&quot;${dist}/lib/app.jar&quot; basedir=&quot;${build}/classes&quot;/&gt;</pre>
-<p>jars all files in the <code>${build}/classes</code> directory into a file
-called <code>app.jar</code> in the <code>${dist}/lib</code> directory.</p>
-<pre>  &lt;jar destfile=&quot;${dist}/lib/app.jar&quot;
-       basedir=&quot;${build}/classes&quot;
-       excludes=&quot;**/Test.class&quot;
-  /&gt;</pre>
-<p>jars all files in the <code>${build}/classes</code> directory into a file
-called <code>app.jar</code> in the <code>${dist}/lib</code> directory. Files
-with the name <code>Test.class</code> are excluded.</p>
-<pre>  &lt;jar destfile=&quot;${dist}/lib/app.jar&quot;
-       basedir=&quot;${build}/classes&quot;
-       includes=&quot;mypackage/test/**&quot;
-       excludes=&quot;**/Test.class&quot;
-  /&gt;</pre>
-<p>jars all files in the <code>${build}/classes</code> directory into a file
-called <code>app.jar</code> in the <code>${dist}/lib</code> directory. Only
-files under the directory <code>mypackage/test</code> are used, and files with
-the name <code>Test.class</code> are excluded.</p>
-<pre>  &lt;jar destfile=&quot;${dist}/lib/app.jar&quot;&gt;
-    &lt;fileset dir=&quot;${build}/classes&quot;
-             excludes=&quot;**/Test.class&quot;
-    /&gt;
-    &lt;fileset dir=&quot;${src}/resources&quot;/&gt;
-  &lt;/jar&gt;</pre>
-<p>jars all files in the <code>${build}/classes</code> directory and also
-in the <code>${src}/resources</code> directory together into a file
-called <code>app.jar</code> in the <code>${dist}/lib</code> directory.
-Files with the name <code>Test.class</code> are excluded.
-If there are files such as <code>${build}/classes/mypackage/MyClass.class</code>
-and <code>${src}/resources/mypackage/image.gif</code>, they will appear
-in the same directory in the JAR (and thus be considered in the same package
-by Java).</p>
-
-<pre>  &lt;jar destfile=&quot;test.jar&quot; basedir=&quot;.&quot;&gt;
-    &lt;include name=&quot;build&quot;/&gt;
-    &lt;manifest&gt;
-      &lt;attribute name=&quot;Built-By&quot; value=&quot;${user.name}&quot;/&gt;
-      &lt;section name=&quot;common/class1.class&quot;&gt;
-        &lt;attribute name=&quot;Sealed&quot; value=&quot;false&quot;/&gt;
-      &lt;/section&gt;
-    &lt;/manifest&gt;
-  &lt;/jar&gt;</pre>
-<p>
-This is an example of an inline manifest specification. Note that the Built-By
-attribute will take the value of the Ant property ${user.name}. The manifest 
-produced by the above would look like this:
-</p>
-<pre><code>Manifest-Version: 1.0
-Built-By: conor
-Created-By: Apache Ant 1.5alpha
-
-Name: common/class1.class
-Sealed: false</code></pre>
-
-<hr>
-<p align="center">Copyright &copy; 2001-2002 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/CoreTasks/java.html b/docs/manual/CoreTasks/java.html
deleted file mode 100644
index d153c3b..0000000
--- a/docs/manual/CoreTasks/java.html
+++ /dev/null
@@ -1,183 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Java Task</title>
-</head>
-
-<body>
-
-<h2><a name="java">Java</a></h2>
-<h3>Description</h3>
-<p>Executes a Java class within the running (Ant) VM or forks another VM if
-specified.</p>
-<p>
-If odd things go wrong when you run this task, set fork="true" to use a new
-JVM.
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">classname</td>
-    <td valign="top">the Java class to execute.</td>
-    <td align="center" valign="top">Either jar or classname</td>
-  </tr>
-  <tr>
-    <td valign="top">jar</td>
-    <td valign="top">the location of the jar file to execute (must have a 
-    Main-Class entry in the manifest). Fork must be set to true if this option is selected.</td>
-    <td align="center" valign="top">Either jar or classname</td>
-  </tr>
-  <tr>
-    <td valign="top">args</td>
-    <td valign="top">the arguments for the class that is
-      executed. <b>deprecated, use nested <code>&lt;arg&gt;</code>
-      elements instead.</b></td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">classpath</td>
-    <td valign="top">the classpath to use.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">classpathref</td>
-    <td valign="top">the classpath to use, given as <a
-      href="../using.html#references">reference</a> to a PATH defined elsewhere.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">fork</td>
-    <td valign="top">if enabled triggers the class execution in another VM
-      (disabled by default)</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">jvm</td>
-    <td valign="top">the command used to invoke the Java Virtual Machine,
-      default is 'java'.  The command is resolved by java.lang.Runtime.exec().
-      Ignored if fork is disabled.
-    </td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">jvmargs</td>
-    <td valign="top">the arguments to pass to the forked VM (ignored
-      if fork is disabled). <b>deprecated, use nested
-      <code>&lt;jvmarg&gt;</code> elements instead.</b></td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">maxmemory</td>
-    <td valign="top">Max amount of memory to allocate to the forked VM
-      (ignored if fork is disabled)</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">failonerror</td>
-    <td valign="top">Stop the buildprocess if the command exits with a
-      returncode other than 0. Default is "false"</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">dir</td>
-    <td valign="top">The directory to invoke the VM in.  (ignored if
-      fork is disabled)</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">output</td>
-    <td valign="top">Name of a file to write the output to.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">append</td>
-    <td valign="top">whether output should be appended to or overwrite
-    an existing file.  Defaults to false.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">newenvironment</td>
-    <td valign="top">Do not propagate old environment when new
-      environment variables are specified. Default is &quot;false&quot;
-      (ignored if fork is disabled).</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">timeout</td>
-    <td valign="top">Stop the command if it doesn't finish within the
-    specified time (given in milliseconds).  <strong>It is highly
-    recommended to use this feature only if fork is enabled.</strong></td>
-    <td align="center" valign="top">No</td>
-  </tr>
-</table>
-<h3>Parameters specified as nested elements</h3>
-<h4>arg and jvmarg</h4>
-<p>Use nested <code>&lt;arg&gt;</code> and <code>&lt;jvmarg&gt;</code>
-elements to specify arguments for the or the forked VM. See <a
-href="../using.html#arg">Command line arguments</a>.</p>
-<h4>sysproperty</h4>
-<p>Use nested <code>&lt;sysproperty&gt;</code>
-elements to specify system properties required by the class. 
-These properties will be made available to the VM during the execution
-of the class (either ANT's VM or the forked VM). The attributes
-for this element are the same as for <a href="exec.html#env">environment
-variables</a>.</p>
-<h4>classpath</h4>
-<p><code>Java</code>'s <i>classpath</i> attribute is a <a
-href="../using.html#path">PATH like structure</a> and can also be set via a nested
-<i>classpath</i> element.</p>
-<h4>env</h4>
-<p>It is possible to specify environment variables to pass to the
-forked VM via nested <i>env</i> elements. See the description in the
-section about <a href="exec.html#env">exec</a></p>
-<p>Settings will be ignored if fork is disabled.</p>
-<h3>Examples</h3>
-<pre>  
-       &lt;java classname=&quot;test.Main&quot; &gt;
-         &lt;arg value=&quot;-h&quot;/&gt; 
-         &lt;classpath&gt;
-           &lt;pathelement location=&quot;dist/test.jar&quot;/&gt;
-           &lt;pathelement path=&quot;${java.class.path}&quot;/&gt;
-         &lt;/classpath&gt;
-       &lt;/java&gt;
-</pre>
-Run a class in this JVM with a new jar on the classpath
-
-<pre>        &lt;java jar=&quot;dist/test.jar&quot; 
-           fork="true"
-           failonerror="true"
-           maxmemory="128m"
-           &gt;
-         &lt;arg value=&quot;-h&quot;/&gt; 
-         &lt;classpath&gt;
-           &lt;pathelement location=&quot;dist/test.jar&quot;/&gt;
-           &lt;pathelement path=&quot;${java.class.path}&quot;/&gt;
-         &lt;/classpath&gt;
-       &lt;/java&gt;
-</pre>
-Run the jar using the manifest supplied entry point, forking (as required),
-and with a maximum memory of 128MB. Any non zero return code breaks the build.  
-
-<pre>  &lt;java classname=&quot;test.Main&quot;/&gt;</pre>
-<pre>  &lt;java classname=&quot;test.Main&quot;
-        fork=&quot;yes&quot; &gt;
-    &lt;sysproperty key=&quot;DEBUG&quot; value=&quot;true&quot;/&gt; 
-    &lt;arg value=&quot;-h&quot;/&gt; 
-    &lt;jvmarg value=&quot;-Xrunhprof:cpu=samples,file=log.txt,depth=3&quot;/&gt; 
-  &lt;/java&gt;
-</pre>
-<strong>Note</strong>: you can not specify the (highly deprecated) MSJVM, "jview.exe" as the
-JVM, as it takes different parameters for other JVMs,
-That JVM can be started from &lt;exec&gt; if required.
-<hr>
-<p align="center">Copyright &copy; 2001-2002 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/CoreTasks/javac.html b/docs/manual/CoreTasks/javac.html
deleted file mode 100644
index 598dd1a..0000000
--- a/docs/manual/CoreTasks/javac.html
+++ /dev/null
@@ -1,551 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Javac Task</title>
-</head>
-
-<body>
-
-<h2><a name="javac">Javac</a></h2>
-<h3>Description</h3>
-<p>Compiles a Java source tree.</p>
-<p>The source and destination directory will be recursively scanned for Java
-source files to compile. Only Java files that have no corresponding
-<code>.class</code> file
-or where the class file is older than the
-<code>.java</code> file will be compiled.</p>
-<p>Note: Ant uses only the names of the source and class files to find
-the classes that need a rebuild. It will not scan the source and therefore
-will have no knowledge about nested classes, classes that are named different
-from the source file, and so on. See the
-<a href="../OptionalTasks/depend.html"><code>&lt;depend&gt;</code></a> task
-for dependency checking based on other than just
-existence/modification times.
-<p>When the source files are part of a package, the directory structure of
-the source tree should follow the package
-hierarchy.</p>
-<p>It is possible to refine the set of files that are being compiled.
-This can be done with the <code>includes</code>, <code>includesfile</code>,
-<code>excludes</code>, and <code>excludesfile</code>
-attributes. With the <code>includes</code> or
-<code>includesfile</code> attribute, you specify the files you want to
-have included.
-The <code>exclude</code> or <code>excludesfile</code> attribute is used
-to specify
-the files you want to have excluded. In both cases, the list of files 
-can be specified by either the filename, relative to the directory(s) specified
-in the <code>srcdir</code> attribute or nested <code>&lt;src&gt;</code>
-element(s), or by using wildcard patterns. See the section on
-<a href="../dirtasks.html#directorybasedtasks">directory-based tasks</a>,
-for information on how the
-inclusion/exclusion of files works, and how to write wildcard patterns.</p>
-<p>It is possible to use different compilers. This can be specified by
-either setting the global <code>build.compiler</code> property, which will
-affect all <code>&lt;javac&gt;</code> tasks throughout the build, or by
-setting the <code>compiler</code> attribute, specific to the current
-<code>&lt;javac&gt;</code> task.
-<a name="compilervalues">Valid values for either the
-<code>build.compiler</code> property or the <code>compiler</code>
-attribute are:</p>
-<ul>
-  <li><code>classic</code> (the standard compiler of JDK 1.1/1.2) &ndash;
-      <code>javac1.1</code> and
-      <code>javac1.2</code> can be used as aliases.</li>
-  <li><code>modern</code> (the standard compiler of JDK 1.3/1.4) &ndash;
-      <code>javac1.3</code> and
-      <code>javac1.4</code> can be used as aliases.</li>
-  <li><code>jikes</code> (the <a
-    href="http://oss.software.ibm.com/developerworks/opensource/jikes/project" target="_top">Jikes</a>
-    compiler).</li>
-  <li><code>jvc</code> (the Command-Line Compiler from Microsoft's SDK
-      for Java / Visual J++) &ndash; <code>microsoft</code> can be used
-      as an alias.</li>
-  <li><code>kjc</code> (the <a href="http://www.dms.at/kopi/" target="_top">kopi</a>
-    compiler).</li>
-  <li><code>gcj</code> (the gcj compiler from gcc).</li>
-  <li><code>sj</code> (Symantec java compiler) &ndash;
-      <code>symantec</code> can be used as an alias.</li>
-  <li><code>extJavac</code> (run either modern or classic in a JVM of
-      its own).</li>
-</ul>
-</a>
-<p>The default is <code>javac1.x</code> with <code>x</code> depending
-on the JDK version you use while you are running Ant.
-If you wish to use a different compiler interface than those
-supplied, you can write a class that implements the CompilerAdapter interface
-(<code>package org.apache.tools.ant.taskdefs.compilers</code>). Supply the full
-classname in the <code>build.compiler</code> property or the
-<code>compiler</code> attribute.
-</p>
-<p>The fork attribute overrides the <code>build.compiler</code> property
-or <code>compiler</code> attribute setting and
-expects a JDK1.1 or higher to be set in <code>JAVA_HOME</code>.
-</p>
-<p>You can also use the <code>compiler</code> attribute to tell Ant
-which JDK version it shall assume when it puts together the command
-line switches - even if you set <code>fork=&quot;true&quot;</code>.
-This is useful if you want to run the compiler of JDK 1.1 while you
-current JDK is 1.2+.  If you use
-<code>compiler=&quot;javac1.1&quot;</code> and (for example)
-<code>depend=&quot;true&quot;</code> Ant will use the command line
-switch <code>-depend</code> instead of <code>-Xdepend</code>.</p>
-<p>This task will drop all entries that point to non-existent
-files/directories from the classpath it passes to the compiler.</p>
-<p><strong>Windows Note:</strong>When the modern compiler is used
-in unforked mode on Windows, it locks up the files present in the
-classpath of the <code>&lt;javac&gt;</code> task, and does not release them.
-The side effect of this is that you will not be able to delete or move
-those files later on in the build.  The workaround is to fork when
-invoking the compiler.</p>
-</p>
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">srcdir</td>
-    <td valign="top">Location of the java files. (See the
-     <a href="#srcdirnote">Note</a> below.)</td>
-    <td align="center" valign="top">Yes, unless nested <code>&lt;src&gt;</code> elements are present.</td>
-  </tr>
-  <tr>
-    <td valign="top">destdir</td>
-    <td valign="top">Location to store the class files.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">includes</td>
-    <td valign="top">Comma-separated list of files (may be specified using
-      wildcard patterns) that must be
-      included; all <code>.java</code> files are included when omitted.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">includesfile</td>
-    <td valign="top">The name of a file that contains a list of files to
-      include (may be specified using wildcard patterns).</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">excludes</td>
-    <td valign="top">Comma-separated list of files (may be specified using
-      wildcard patterns) that must be excluded; no files (except default
-      excludes) are excluded when omitted.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">excludesfile</td>
-    <td valign="top">The name of a file that contains a list of files to
-      exclude (may be specified using wildcard patterns).</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">classpath</td>
-    <td valign="top">The classpath to use.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">sourcepath</td>
-    <td valign="top">The sourcepath to use; defaults to the value of the srcdir attribute (or nested <code>&lt;src&gt;</code> elements).
-        To suppress the sourcepath switch, use <code>sourcepath=&quot;&quot;</code>.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">bootclasspath</td>
-    <td valign="top">Location of bootstrap class files.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">classpathref</td>
-    <td valign="top">The classpath to use, given as a
-      <a href="../using.html#references">reference</a> to a path defined elsewhere.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">sourcepathref</td>
-    <td valign="top">The sourcepath to use, given as a
-      <a href="../using.html#references">reference</a> to a path defined elsewhere.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">bootclasspathref</td>
-    <td valign="top">Location of bootstrap class files, given as a
-      <a href="../using.html#references">reference</a> to a path defined elsewhere.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">extdirs</td>
-    <td valign="top">Location of installed extensions.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">encoding</td>
-    <td valign="top">Encoding of source files. (Note: gcj doesn't support
-      this option yet.)</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">nowarn</td>
-    <td valign="top">Indicates whether the <code>-nowarn</code> switch
-      should be passed to the compiler; defaults to <code>off</code>.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">debug</td>
-    <td valign="top">Indicates whether source should be compiled with debug
-      information; defaults to <code>off</code>.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">debuglevel</td>
-    <td valign="top">Keyword list to be appended to the <code>-g</code>
-      command-line switch.  This will be ignored by all implementations except
-      <code>modern</code> and <code>classic(ver &gt;= 1.2)</code>.
-      Legal values are <code>none</code> or a comma-separated list of the
-      following keywords:
-      <code>lines</code>, <code>vars</code>, and <code>source</code>.
-      If <code>debuglevel</code> is not specified, by default,
-      <code>:none</code> will be
-      appended to <code>-g</code>.  If <code>debug</code> is not turned on,
-      this attribute will be ignored.
-    </td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">optimize</td>
-    <td valign="top">Indicates whether source should be compiled with
-      optimization; defaults to <code>off</code>.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">deprecation</td>
-    <td valign="top">Indicates whether source should be compiled with
-      deprecation information; defaults to <code>off</code>.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">target</td>
-    <td valign="top">Generate class files for specific VM version (e.g.,
-	 <code>1.1</code> or <code>1.2</code>).</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">verbose</td>
-    <td valign="top">Asks the compiler for verbose output.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">depend</td> <td valign="top">Enables dependency-tracking
-      for compilers that support this (<code>jikes</code> and
-      <code>classic</code>).</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">includeAntRuntime</td>
-    <td valign="top">Whether to include the Ant run-time libraries in the
-      classpath; defaults to <code>yes</code>.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">includeJavaRuntime</td>
-    <td valign="top">Whether to include the default run-time
-      libraries from the executing VM in the classpath;
-      defaults to <code>yes</code>.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">fork</td>
-    <td valign="top">Whether to execute <code>javac</code> using the
-      JDK compiler externally; defaults to <code>no</code>.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">executable</td>
-    <td valign="top">Complete path to the <code>javac</code>
-      executable to use in case of <code>fork=&quot;yes&quot;</code>.
-      Defaults to the compiler of the Java version that is currently
-      running Ant.  Ignored if <code>fork=&quot;no&quot;</code></td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">memoryInitialSize</td>
-    <td valign="top">The initial size of the memory for the underlying VM,
-      if <code>javac</code> is run externally; ignored otherwise. Defaults
-      to the standard VM memory setting.
-      (Examples: <code>83886080</code>, <code>81920k</code>, or
-      <code>80m</code>)</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">memoryMaximumSize</td>
-    <td valign="top">The maximum size of the memory for the underlying VM,
-      if <code>javac</code> is run externally; ignored otherwise. Defaults
-      to the standard VM memory setting.
-      (Examples: <code>83886080</code>, <code>81920k</code>, or
-      <code>80m</code>)</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">failonerror</td> <td valign="top">
-        Indicates whether the build will continue even if there are compilation errors; defaults to <code>true</code>.
-    </td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">source</td>
-
-    <td valign="top">Value of the <code>-source</code> command-line
-    switch; will be ignored by all implementations except
-    <code>modern</code> and <code>jikes</code>.<br>
-    If you use this attribute together with <code>jikes</code>, you
-    must make sure that your version of jikes supports the
-    <code>-source</code> switch.<br>
-    Legal values are <code>1.3</code> and <code>1.4</code> &ndash; by
-    default, no <code>-source</code> argument will be used at
-    all.</td>
-
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">compiler</td>
-    <td valign="top">The compiler implementation to use.
-      If this attribute is not set, the value of the
-      <code>build.compiler</code> property, if set, will be used.
-      Otherwise, the default compiler for the current VM will be used.
-      (See the above <a href="#compilervalues">list</a> of valid
-      compilers.)</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">listfiles</td>
-    <td valign="top">Indicates whether the source files to be compiled will
-      be listed; defaults to <code>no</code>.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-</table>
-
-<h3>Parameters specified as nested elements</h3>
-<p>This task forms an implicit <a href="../CoreTypes/fileset.html">FileSet</a> and
-supports all attributes of <code>&lt;fileset&gt;</code>
-(<code>dir</code> becomes <code>srcdir</code>) as well as the nested
-<code>&lt;include&gt;</code>, <code>&lt;exclude&gt;</code> and
-<code>&lt;patternset&gt;</code> elements.</p>
-<h4><code>src</code>, <code>classpath</code>, <code>sourcepath</code>, 
-<code>bootclasspath</code> and <code>extdirs</code></h4>
-<p><code>&lt;javac&gt;</code>'s <code>srcdir</code>, <code>classpath</code>,
-<code>sourcepath</code>, <code>bootclasspath</code>, and
-<code>extdirs</code> attributes are
-<a href="../using.html#path">path-like structures</a>
-and can also be set via nested
-<code>&lt;src&gt;</code>,
-<code>&lt;classpath&gt;</code>,
-<code>&lt;sourcepath&gt;</code>,
-<code>&lt;bootclasspath&gt;</code> and
-<code>&lt;extdirs&gt;</code> elements, respectively.</p>
-
-<h4>compilerarg</h4>
-
-<p>You can specify additional command line arguments for the compiler
-with nested <code>&lt;compilerarg&gt;</code> elements.  These elements
-are specified like <a href="../using.html#arg">Command-line
-Arguments</a> but have an additional attribute that can be used to
-enable arguments only if a given compiler implementation will be
-used.</p>
-<table border="1" cellpadding="2" cellspacing="0">
-<tr>
-  <td width="12%" valign="top"><b>Attribute</b></td>
-  <td width="78%" valign="top"><b>Description</b></td>
-  <td width="10%" valign="top"><b>Required</b></td>
-</tr>
-  <tr>
-    <td valign="top">value</td>
-    <td align="center" rowspan="4">See
-    <a href="../using.html#arg">Command-line Arguments</a>.</td>
-    <td align="center" rowspan="4">Exactly one of these.</td>
-  </tr>
-  <tr>
-    <td valign="top">line</td>
-  </tr>
-  <tr>
-    <td valign="top">file</td>
-  </tr>
-  <tr>
-    <td valign="top">path</td>
-  </tr>
-  <tr>
-    <td valign="top">compiler</td>
-    <td>Only pass the specified argument if the chosen
-      compiler implementation matches the value of this attribute.
-      Legal values are the
-      same as those in the above <a href="#compilervalues">list</a> of valid
-      compilers.)</td>
-    <td align="center">No</td>
-  </tr>
-</table>
-
-<h3>Examples</h3>
-<pre>  &lt;javac srcdir=&quot;${src}&quot;
-         destdir=&quot;${build}&quot;
-         classpath=&quot;xyz.jar&quot;
-         debug=&quot;on&quot;
-  /&gt;</pre>
-<p>compiles all <code>.java</code> files under the <code>${src}</code>
-directory, and stores
-the <code>.class</code> files in the <code>${build}</code> directory.
-The classpath used includes <code>xyz.jar</code>, and compiling with
-debug information is on.</p>
-
-<pre>  &lt;javac srcdir=&quot;${src}&quot;
-         destdir=&quot;${build}&quot;
-         fork=&quot;true&quot;
-  /&gt;</pre>
-<p>compiles all <code>.java</code> files under the <code>${src}</code>
-directory, and stores the <code>.class</code> files in the
-<code>${build}</code> directory.  This will fork off the javac
-compiler using the default <code>javac</code> executable.</p>
-
-<pre>  &lt;javac srcdir=&quot;${src}&quot;
-         destdir=&quot;${build}&quot;
-         fork=&quot;java$$javac.exe&quot;
-  /&gt;</pre>
-<p>compiles all <code>.java</code> files under the <code>${src}</code>
-directory, and stores the <code>.class</code> files in the
-<code>${build}</code> directory.  This will fork off the javac
-compiler, using the executable named <code>java$javac.exe</code>.  Note
-that the <code>$</code> sign needs to be escaped by a second one.</p>
-
-<pre>  &lt;javac srcdir=&quot;${src}&quot;
-         destdir=&quot;${build}&quot;
-         includes=&quot;mypackage/p1/**,mypackage/p2/**&quot;
-         excludes=&quot;mypackage/p1/testpackage/**&quot;
-         classpath=&quot;xyz.jar&quot;
-         debug=&quot;on&quot;
-  /&gt;</pre>
-<p>compiles <code>.java</code> files under the <code>${src}</code>
-directory, and stores the
-<code>.class</code> files in the <code>${build}</code> directory.
-The classpath used includes <code>xyz.jar</code>, and debug information is on.
-Only files under <code>mypackage/p1</code> and <code>mypackage/p2</code> are
-used. All files in and below the <code>mypackage/p1/testpackage</code>
-directory are excluded from compilation.</p>
-
-<pre>  &lt;javac srcdir=&quot;${src}:${src2}&quot;
-         destdir=&quot;${build}&quot;
-         includes=&quot;mypackage/p1/**,mypackage/p2/**&quot;
-         excludes=&quot;mypackage/p1/testpackage/**&quot;
-         classpath=&quot;xyz.jar&quot;
-         debug=&quot;on&quot;
-  /&gt;</pre>
-
-<p>is the same as the previous example, with the addition of a second
-source path, defined by
-the property <code>src2</code>. This can also be represented using nested
-<code>&lt;src&gt;</code> elements as follows:</p>
-
-<pre>  &lt;javac destdir=&quot;${build}&quot;
-         classpath=&quot;xyz.jar&quot;
-         debug=&quot;on&quot;&gt;
-    &lt;src path=&quot;${src}&quot;/&gt;
-    &lt;src path=&quot;${src2}&quot;/&gt;
-    &lt;include name=&quot;mypackage/p1/**&quot;/&gt;
-    &lt;include name=&quot;mypackage/p2/**&quot;/&gt;
-    &lt;exclude name=&quot;mypackage/p1/testpackage/**&quot;/&gt;
-  &lt;/javac&gt;</pre>
-
-<p><a name="srcdirnote"><b>Note:</b></a>
-If you wish to compile only source files located in certain packages below a
-common root, use the <code>include</code>/<code>exclude</code> attributes
-or <code>&lt;include&gt;</code>/<code>&lt;exclude&gt;</code> nested elements
-to filter for these packages. Do not include part of your package structure
-in the <code>srcdir</code> attribute
-(or nested <code>&lt;src&gt;</code> elements), or Ant will recompile your
-source files every time you run your compile target. See the
-<a href="http://jakarta.apache.org/ant/faq.html#always-recompiles">Ant FAQ</a>
-for additional information.</p>
-
-<p><b>Note:</b> If you are using Ant on Windows and a new DOS window pops up
-for every use of an external compiler, this may be a problem of the JDK you are
-using.  This problem may occur with all JDKs &lt; 1.2.</p>
-
-<h3>Jikes Notes</h3>
-
-Jikes supports some extra options, which can be set be defining
-the properties shown below prior to invoking the task. The setting
-for each property will be in affect for all <code>&lt;javac&gt;</code>
-tasks throughout the build.
-The Ant developers are aware that
-this is ugly and inflexible &ndash; expect a better solution in the future.
-All the options are boolean, and must be set to <code>true</code> or
-<code>yes</code> to be
-interpreted as anything other than false. By default,
-<code>build.compiler.warnings</code> is <code>true</code>,
-while all others are <code>false</code>.</p>
-
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Property</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Default</b></td>
-  </tr>
-  <tr>
-    <td valign="top">
-	build.compiler.emacs
-	</td>
-	<td valign="top">
-	Enable emacs-compatible error messages.
-    </td>
-    <td valign="top">
-	<code>false</code>
-	</td>
-  </tr>
-  <tr>
-    <td valign="top">
-	build.compiler.fulldepend
-	</td>
-	<td valign="top">
-	Enable full dependency checking; see<br>
-	the <code>+F</code> switch in the Jikes manual.
-    </td>
-    <td valign="top">
-	<code>false</code>
-	</td>
-  </tr>
-  <tr>
-    <td valign="top">
-	build.compiler.pedantic
-	</td>
-	<td valign="top">
-	Enable pedantic warnings.
-    </td>
-    <td valign="top">
-	<code>false</code>
-	</td>
-  </tr>
-  <tr>
-    <td valign="top">
-	build.compiler.warnings<br>
-        <strong>Deprecated</strong>. Use
-  <code>&lt;javac&gt;</code>'s <code>nowarn</code>
-  attribute instead.
-	</td>
-	<td valign="top">
-	Don't disable warning messages.
-    </td>
-    <td valign="top">
-	<code>true</code>
-	</td>
-  </tr>
-</table>
-</p>
-
-<hr>
-<p align="center">Copyright &copy; 2001-2002 Apache Software Foundation.
-All rights Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/CoreTasks/javadoc.html b/docs/manual/CoreTasks/javadoc.html
deleted file mode 100644
index cf698f6..0000000
--- a/docs/manual/CoreTasks/javadoc.html
+++ /dev/null
@@ -1,732 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Javadoc Task</title>
-</head>
-
-<body>
-
-<h2><a name="javadoc">Javadoc/<i>Javadoc2</i></a></h2>
-<h3>Description</h3>
-<p>Generates code documentation using the javadoc tool.</p>
-<p>The source directory will be recursively scanned for Java source files to process
-but only those matching the inclusion rules, and not matching the exclusions rules
-will be passed to the javadoc tool. This
-allows wildcards to be used to choose between package names, reducing verbosity
-and management costs over time. This task, however, has no notion of
-&quot;changed&quot; files, unlike the <a href="javac.html">javac</a> task. This means
-all packages will be processed each time this task is run. In general, however,
-this task is used much less frequently.</p>
-<p>This task works seamlessly between different javadoc versions (1.1,
-1.2 and 1.4), with the obvious restriction that the 1.2 attributes
-will be ignored if run in a 1.1 VM.</p>
-<p>NOTE: since javadoc calls System.exit(), javadoc cannot be run inside the
-same VM as ant without breaking functionality. For this reason, this task 
-always forks the VM. This overhead is not significant since javadoc is normally a heavy
-application and will be called infrequently.</p>
-<p>NOTE: the packagelist attribute allows you to specify the list of packages to 
-document outside of the Ant file. It's a much better practice to include everything 
-inside the build.xml file. This option was added in order to make it easier to 
-migrate from regular makefiles, where you would use this option of javadoc. 
-The packages listed in packagelist are not checked, so the task performs even 
-if some packages are missing or broken. Use this option if you wish to convert from 
-an existing makefile. Once things are running you should then switch to the regular 
-notation. </p>
-
-<p><i><b>DEPRECATION:</b> the javadoc2 task simply points to the javadoc task and it's
-there for back compatibility reasons. Since this task will be removed in future
-versions, you are strongly encouraged to use <a href="javadoc.html">javadoc</a>
-instead.</i></p>
-
-<p>In the table below, 1.1 means available if your current Java VM is
-a 1.1 VM, 1.2 for either 1.2 or 1.3 and 1.4 for a 1.4 Java VM.  1.2+
-means any VM of at least version 1.2.</p>
-
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Availability</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">sourcepath</td>
-    <td valign="top">Specify where to find source files</td>
-    <td align="center" valign="top">all</td>
-    <td align="center" rowspan="3">At least one of the three or nested
-    <code>&lt;sourcepath&gt;</code>, <code>&lt;fileset&gt;</code> or
-    <code>&lt;packageset&gt;</code></td>
-  </tr>
-  <tr>
-    <td valign="top">sourcepathref</td>
-    <td valign="top">Specify where to find source files by <a
-      href="../using.html#references">reference</a> to a PATH defined elsewhere.</td>
-    <td align="center" valign="top">all</td>
-  </tr>
-  <tr>
-    <td valign="top">sourcefiles</td>
-    <td valign="top">Comma separated list of source files</td>
-    <td align="center" valign="top">all</td>
-  </tr>
-  <tr>
-    <td valign="top">destdir</td>
-    <td valign="top">Destination directory for output files</td>
-    <td align="center" valign="top">all</td>
-    <td align="center" valign="top">Yes, unless a doclet has been specified.</td>
-  </tr>
-  <tr>
-    <td valign="top">maxmemory</td>
-    <td valign="top">Max amount of memory to allocate to the javadoc VM</td>
-    <td align="center" valign="top">all</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">packagenames</td>
-    <td valign="top">Comma separated list of package files (with terminating
-      wildcard)</td>
-    <td align="center" valign="top">all</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">packageList</td>
-    <td valign="top">The name of a file containing the packages to process</td>
-    <td align="center" valign="top">1.2+</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">classpath</td>
-    <td valign="top">Specify where to find user class files</td>
-    <td align="center" valign="top">all</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">Bootclasspath</td>
-    <td valign="top">Override location of class files loaded by the bootstrap
-      class loader</td>
-    <td align="center" valign="top">1.2+</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">classpathref</td>
-    <td valign="top">Specify where to find user class files by <a
-      href="../using.html#references">reference</a> to a PATH defined elsewhere.</td>
-    <td align="center" valign="top">all</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">bootclasspathref</td>
-    <td valign="top">Override location of class files loaded by the
-      bootstrap class loader by <a href="../using.html#references">reference</a> to a
-      PATH defined elsewhere.</td>
-    <td align="center" valign="top">1.2+</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">Extdirs</td>
-    <td valign="top">Override location of installed extensions</td>
-    <td align="center" valign="top">1.2+</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">Overview</td>
-    <td valign="top">Read overview documentation from HTML file</td>
-    <td align="center" valign="top">1.2+</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">access</td>
-    <td valign="top">Access mode: one of <code>public</code>, <code>protected</code>,
-                     <code>package</code>, or <code>private</code></td>
-    <td align="center" valign="top">all</td>
-    <td align="center" valign="top">No (default <code>protected</code>)</td>
-  </tr>
-  <tr>
-    <td valign="top">Public</td>
-    <td valign="top">Show only public classes and members</td>
-    <td align="center" valign="top">all</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">Protected</td>
-    <td valign="top">Show protected/public classes and members (default)</td>
-    <td align="center" valign="top">all</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">Package</td>
-    <td valign="top">Show package/protected/public classes and members</td>
-    <td align="center" valign="top">all</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">Private</td>
-    <td valign="top">Show all classes and members</td>
-    <td align="center" valign="top">all</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">Old</td>
-    <td valign="top">Generate output using JDK 1.1 emulating doclet</td>
-    <td align="center" valign="top">1.2</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">Verbose</td>
-    <td valign="top">Output messages about what Javadoc is doing</td>
-    <td align="center" valign="top">1.2+</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">Locale</td>
-    <td valign="top">Locale to be used, e.g. en_US or en_US_WIN</td>
-    <td align="center" valign="top">1.2+</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">Encoding</td>
-    <td valign="top">Source file encoding name</td>
-    <td align="center" valign="top">all</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">Version</td>
-    <td valign="top">Include @version paragraphs</td>
-    <td align="center" valign="top">all</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">Use</td>
-    <td valign="top">Create class and package usage pages</td>
-    <td align="center" valign="top">1.2+</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">Author</td>
-    <td valign="top">Include @author paragraphs</td>
-    <td align="center" valign="top">all</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">Splitindex</td>
-    <td valign="top">Split index into one file per letter</td>
-    <td align="center" valign="top">1.2+</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">Windowtitle</td>
-    <td valign="top">Browser window title for the documentation (text)</td>
-    <td align="center" valign="top">1.2+</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">Doctitle</td>
-    <td valign="top">Include title for the package index(first) page (html-code)</td>
-    <td align="center" valign="top">1.2+</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">Header</td>
-    <td valign="top">Include header text for each page (html-code)</td>
-    <td align="center" valign="top">1.2+</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">Footer</td>
-    <td valign="top">Include footer text for each page (html-code)</td>
-    <td align="center" valign="top">1.2+</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">bottom</td>
-    <td valign="top">Include bottom text for each page (html-code)</td>
-    <td align="center" valign="top">1.2+</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">link</td>
-    <td valign="top">Create links to javadoc output at the given URL</td>
-    <td align="center" valign="top">1.2+</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">linkoffline</td>
-    <td valign="top">Link to docs at &lt;url&gt; using package list at
-      &lt;url2&gt; - separate the URLs by using a space character.</td>
-    <td align="center" valign="top">1.2+</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">group</td>
-    <td valign="top">Group specified packages together in overview
-      page.  The format is as described <a href="#groupattribute">below</a>.</td>
-    <td align="center" valign="top">1.2+</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">nodeprecated</td>
-    <td valign="top">Do not include @deprecated information</td>
-    <td align="center" valign="top">all</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">nodeprecatedlist</td>
-    <td valign="top">Do not generate deprecated list</td>
-    <td align="center" valign="top">1.2+</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">notree</td>
-    <td valign="top">Do not generate class hierarchy</td>
-    <td align="center" valign="top">all</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">noindex</td>
-    <td valign="top">Do not generate index</td>
-    <td align="center" valign="top">all</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">nohelp</td>
-    <td valign="top">Do not generate help link</td>
-    <td align="center" valign="top">1.2+</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">nonavbar</td>
-    <td valign="top">Do not generate navigation bar</td>
-    <td align="center" valign="top">1.2+</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">serialwarn</td>
-    <td valign="top">Generate warning about @serial tag</td>
-    <td align="center" valign="top">1.2+</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">helpfile</td>
-    <td valign="top">Specifies the HTML help file to use</td>
-    <td align="center" valign="top">1.2+</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">stylesheetfile</td>
-    <td valign="top">Specifies the CSS stylesheet to use</td>
-    <td align="center" valign="top">1.2+</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">charset</td>
-    <td valign="top">Charset for cross-platform viewing of generated
-      documentation</td>
-    <td align="center" valign="top">1.2+</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">docencoding</td>
-    <td valign="top">Output file encoding name</td>
-    <td align="center" valign="top">all</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">doclet</td>
-    <td valign="top">Specifies the class file that starts the doclet used in generating the documentation.</td>
-    <td align="center" valign="top">1.2+</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">docletpath</td>
-    <td valign="top">Specifies the path to the doclet class file that is specified with the -doclet option.</td>
-    <td align="center" valign="top">1.2+</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">docletpathref</td>
-    <td valign="top">Specifies the path to the doclet class file that
-      is specified with the -doclet option by <a
-      href="../using.html#references">reference</a> to a PATH defined elsewhere.</td>
-    <td align="center" valign="top">1.2+</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">additionalparam</td>
-    <td valign="top">Lets you add additional parameters to the javadoc
-            command line. Useful for doclets. Parameters containing
-            spaces need to be quoted using &amp;quot;.</td>
-    <td align="center" valign="top">all</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">failonerror</td>
-    <td valign="top">Stop the buildprocess if the command exits with a
-      returncode other than 0.</td>
-    <td align="center" valign="top">all</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">excludepackagenames</td>
-    <td valign="top">comma separated list of packages you don't want
-      docs for.</td>
-    <td align="center" valign="top">all</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">defaultexcludes</td>
-    <td valign="top">indicates whether default excludes should be used
-      (<code>yes</code> | <code>no</code>); default excludes are used when omitted.</td>
-    <td align="center" valign="top">all</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">useexternalfile</td>
-    <td valign="top">indicates whether the sourcefile name specified
-      in srcfiles or as nested source elements should be written to a
-      temporary file to make the command line shorter. Also applies to
-      the package names specified via the packagenames attribute or
-      nested package elements.
-      (<code>yes</code> | <code>no</code>). Default is no.</td>
-    <td align="center" valign="top">1.2+</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">source</td>
-    <td valign="top">Necessary to enable javadoc to handle assertions
-    present in J2SE v 1.4 source code. Set this to &quot;1.4&quot; to
-    documents code that compiles using <code>&quot;javac -source
-    1.4&quot;</code>.  Will be ignored if you use a custom
-    doclet.</td>
-    <td align="center" valign="top">1.4</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-</table>
-
-<h4><a name="groupattribute">Format of the group attribute</a></h4>
-<p>The arguments are comma-delimited. Each single argument is 2
-space-delimited strings, where the first one is the group's title and
-the second one a colon delimited list of packages.</p>
-<p>If you need to specify more than one group, or a group whose title
-contains a comma or a space character, using <a
-href="#groupelement">nested group elements</a> is highly
-recommended.</p>
-<p>E.g., </p>
-<pre>    group=&quot;XSLT_Packages org.apache.xalan.xslt*,XPath_Packages org.apache.xalan.xpath*&quot;
-</pre>
-
-<h3>Parameters specified as nested elements</h3>
-
-<h4>packageset</h4>
-
-<p>A <a href="../CoreTypes/dirset.html">DirSet</a>.  All matched
-directories that contain Java source files will be passed to javadoc
-as package names.  Package names are created from the directory names
-by translating the directory separator into dots.  Ant assumes the
-base directory of the packageset points to the root of a package
-hierarchy.</p>
-
-<p>The <code>packagenames</code>, <code>excludepackagenames</code> and
-<code>defaultexcludes</code> attributes of the task have no effect on
-the nested <code>&lt;packageset&gt;</code> elements.</p>
-
-<h4>fileset</h4>
-
-<p>A <a href="../CoreTypes/fileset.html">FileSet</a>.  All matched
-files will be passed to javadoc as source files.  Ant will
-automatically add the include pattern <code>**/*.java</code> to these
-filesets.</p>
-
-<p>Nested filesets can be used to document sources that are in the
-default package or if you want to exclude certain files from
-documentation.  If you want to document all source files and don't use
-the default package, packagesets should be used instead as this
-increases javadocs performance.</p>
-
-<p>The <code>packagenames</code>, <code>excludepackagenames</code> and
-<code>defaultexcludes</code> attributes of the task have no effect on
-the nested <code>&lt;fileset&gt;</code> elements.</p>
-
-<h4>package</h4>
-<p>Same as one entry in the list given by <code>packagenames</code>.</p>
-
-<h5>Parameters</h5>
-<table width="60%" border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">name</td>
-    <td valign="top">The package name (may be a wildcard)</td>
-    <td align="center" valign="top">Yes</td>
-  </tr>
-</table>
-  
-<h4>excludepackage</h4>
-<p>Same as one entry in the list given by <code>excludepackagenames</code>.</p>
-
-<h5>Parameters</h5>
-Same as for <code>package</code>.
-
-<h4>source</h4>
-<p>Same as one entry in the list given by <code>sourcefiles</code>.</p>
-
-<h5>Parameters</h5>
-<table width="60%" border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">file</td>
-    <td valign="top">The source file to document</td>
-    <td align="center" valign="top">Yes</td>
-  </tr>
-</table>
-
-<h4>doctitle</h4>
-
-<p>Same as the <code>doctitle</code> attribute, but you can nest text
-inside the element this way.</p>
-
-<h4>header</h4>
-
-<p>Similar to <code>&lt;doctitle&gt;</code>.</p>
-
-<h4>footer</h4>
-
-<p>Similar to <code>&lt;doctitle&gt;</code>.</p>
-
-<h4>bottom</h4>
-
-<p>Similar to <code>&lt;doctitle&gt;</code>.</p>
-
-<h4>link</h4>
-<p>Create link to javadoc output at the given URL. This performs the
-same role as the link and linkoffline attributes. You can use either
-syntax (or both at once), but with the nested elements you can easily
-specify multiple occurrences of the arguments.</p>
-
-<h5>Parameters</h5>
-<table width="60%" border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">href</td>
-    <td valign="top">The URL for the external documentation you wish to link to</td>
-    <td align="center" valign="top">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">offline</td>
-    <td valign="top">True if this link is not available online at the time of 
-                     generating the documentation</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">packagelistLoc</td>
-    <td valign="top">The location to the directory containing the package-list file for
-                     the external documentation</td>
-    <td align="center" valign="top">Only if the offline attribute is true</td>
-  </tr>
-</table>
-  
-<h4><a name="groupelement">group</a></h4> 
-<p>Separates packages on the overview page into whatever groups you
-specify, one group per table. This performs the same role as the group
-attribute. You can use either syntax (or both at once), but with the
-nested elements you can easily specify multiple occurrences of the
-arguments.</p>
-
-<h5>Parameters</h5>
-<table width="60%" border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">title</td>
-    <td valign="top">Title of the group</td>
-    <td align="center" valign="top">Yes, unless nested <code>&lt;title&gt;</code> given</td>
-  </tr>
-  <tr>
-    <td valign="top">packages</td>
-    <td valign="top">List of packages to include in that group. Multiple packages are separated with ':'.</td>
-    <td align="center" valign="top">Yes, unless nested <code>&lt;package&gt;</code>s given</td>
-  </tr>
-</table>
-
-<p>The title may be specified as a nested <code>&lt;title&gt;</code> element
-with text contents, and the packages may be listed with nested
-<code>&lt;package&gt;</code> elements as for the main task.</p>
-
-<h4>doclet</h4>
-<p>The doclet nested element is used to specify the doclet that javadoc will 
-use to process the input source files. A number of the standard javadoc arguments
-are actually arguments of the standard doclet. If these are specified in the javadoc
-task's attributes, they will be passed to the doclet specified in the 
-<code>&lt;doclet&gt;</code> nested element. Such attributes should only be specified, 
-therefore, if they can be interpreted by the doclet in use.</p>
-
-<p>If the doclet requires additional parameters, these can be specified with
-<code>&lt;param&gt;</code> elements within the <code>&lt;doclet&gt;</code> 
-element. These paramaters are restricted to simple strings. An example usage
-of the doclet element is shown below:</p>
-
-<pre>  &lt;javadoc ...&gt;
-     &lt;doclet name=&quot;theDoclet&quot;
-             path=&quot;path/to/theDoclet&quot;&gt;
-        &lt;param name=&quot;-foo&quot; value=&quot;foovalue&quot;/&gt;
-        &lt;param name=&quot;-bar&quot; value=&quot;barvalue&quot;/&gt;
-     &lt;/doclet&gt;
-  &lt;/javadoc&gt;
-</pre>
-
-<h4><a name="tagelement">tag</a></h4> 
-
-<p>The tag nested element is used to specify custom tags. This option
-is only available with Java 1.4.</p>
-
-<h5>Parameters</h5>
-<table width="60%" border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">name</td>
-    <td valign="top">Name of the tag (e.g. <code>todo</code>)</td>
-    <td align="center" valign="top">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">description</td>
-    <td valign="top">Description for tag (e.g. <code>To do:</code>)</td>
-    <td align="center" valign="top">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">enabled</td>
-    <td valign="top">Whether or not the tag is enabled (defaults to <code>true</code>)</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">scope</td>
-    <td valign="top">Scope for the tag - the elements in which it can be used. This
-    is a comma separated list of some of the elements: <code>overview</code>, 
-    <code>packages</code>, <code>types</code>, <code>constructors</code>, 
-    <code>methods</code>, <code>fields</code> or the default, <code>all</code>.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-</table>
-
-<h4><a name="tagletelement">taglet</a></h4> 
-<p>The taglet nested element is used to specify custom taglets. This option is 
-only available with Java 1.4.</p>
-
-<h5>Parameters</h5>
-<table width="60%" border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">name</td>
-    <td valign="top">The name of the taglet class 
-              (e.g. <code>com.sun.tools.doclets.ToDoTaglet</code>)</td>
-    <td align="center" valign="top">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">path</td>
-    <td valign="top">A path specifying the search path for the taglet class
-            (e.g. <code>/home/taglets</code>).
-            The path may also be specified by a nested &lt;path&gt; element</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-</table>
-
-<h4>sourcepath, classpath and bootclasspath</h4>
-<p><code>Javadoc</code>'s <i>sourcepath</i>, <i>classpath</i> and
-<i>bootclasspath</i> attributes are <a href="../using.html#path">PATH like
-structure</a> and can also be set via nested <i>sourcepath</i>,
-<i>classpath</i> and <i>bootclasspath</i> elements
-respectively.</p>
-
-<h3>Example</h3>
-<pre>  &lt;javadoc packagenames=&quot;com.dummy.test.*&quot;
-           sourcepath=&quot;src&quot;
-           excludepackagenames=&quot;com.dummy.test.doc-files.*&quot;
-           defaultexcludes=&quot;yes&quot;
-           destdir=&quot;docs/api&quot;
-           author=&quot;true&quot;
-           version=&quot;true&quot;
-           use=&quot;true&quot;
-           windowtitle=&quot;Test API&quot;&gt;
-    &lt;doctitle&gt;&lt;![CDATA[&lt;h1&gt;Test&lt;/h1&gt;]]&gt;&lt;/doctitle&gt;
-    &lt;bottom&gt;&lt;![CDATA[&lt;i&gt;Copyright &amp;#169; 2000 Dummy Corp. All Rights Reserved.&lt;/i&gt;]]&gt;&lt;/bottom&gt;
-    &lt;tag name=&quot;todo&quot; scope=&quot;all&quot; description=&quot;To do:&quot; /&gt;
-    &lt;group title=&quot;Group 1 Packages&quot; packages=&quot;com.dummy.test.a*&quot;/&gt;
-    &lt;group title=&quot;Group 2 Packages&quot; packages=&quot;com.dummy.test.b*:com.dummy.test.c*&quot;/&gt;
-    &lt;link offline=&quot;true&quot; href=&quot;http://java.sun.com/products/jdk/1.2/docs/api/&quot; packagelistLoc=&quot;C:\tmp&quot;/&gt;
-    &lt;link href=&quot;http://developer.java.sun.com/developer/products/xml/docs/api/&quot;/&gt;
-  &lt/javadoc&gt;</pre>
-  
-<p>is the same as</p>
-
-<pre>  &lt;javadoc 
-           destdir=&quot;docs/api&quot;
-           author=&quot;true&quot;
-           version=&quot;true&quot;
-           use=&quot;true&quot;
-           windowtitle=&quot;Test API&quot;&gt;
-
-    &lt;packageset dir=&quot;src&quot; defaultexcludes=&quot;yes&quot;&gt;
-      &lt;include name=&quot;com/dummy/test/**&quot; /&gt;
-      &lt;exclude name=&quot;com/dummy/test/doc-files/**&quot; /&gt;
-    &lt;/packageset&gt;
-
-    &lt;doctitle&gt;&lt;![CDATA[&lt;h1&gt;Test&lt;/h1&gt;]]&gt;&lt;/doctitle&gt;
-    &lt;bottom&gt;&lt;![CDATA[&lt;i&gt;Copyright &amp;#169; 2000 Dummy Corp. All Rights Reserved.&lt;/i&gt;]]&gt;&lt;/bottom&gt;
-    &lt;tag name=&quot;todo&quot; scope=&quot;all&quot; description=&quot;To do:&quot; /&gt;
-    &lt;group title=&quot;Group 1 Packages&quot; packages=&quot;com.dummy.test.a*&quot;/&gt;
-    &lt;group title=&quot;Group 2 Packages&quot; packages=&quot;com.dummy.test.b*:com.dummy.test.c*&quot;/&gt;
-    &lt;link offline=&quot;true&quot; href=&quot;http://java.sun.com/products/jdk/1.2/docs/api/&quot; packagelistLoc=&quot;C:\tmp&quot;/&gt;
-    &lt;link href=&quot;http://developer.java.sun.com/developer/products/xml/docs/api/&quot;/&gt;
-  &lt/javadoc&gt;</pre>
-
-<p>or</p>
-  
-<pre>  &lt;javadoc 
-           destdir=&quot;docs/api&quot;
-           author=&quot;true&quot;
-           version=&quot;true&quot;
-           use=&quot;true&quot;
-           windowtitle=&quot;Test API&quot;&gt;
-
-    &lt;fileset dir=&quot;src&quot; defaultexcludes=&quot;yes&quot;&gt;
-      &lt;include name=&quot;com/dummy/test/**&quot; /&gt;
-      &lt;exclude name=&quot;com/dummy/test/doc-files/**&quot; /&gt;
-    &lt;/fileset&gt;
-
-    &lt;doctitle&gt;&lt;![CDATA[&lt;h1&gt;Test&lt;/h1&gt;]]&gt;&lt;/doctitle&gt;
-    &lt;bottom&gt;&lt;![CDATA[&lt;i&gt;Copyright &amp;#169; 2000 Dummy Corp. All Rights Reserved.&lt;/i&gt;]]&gt;&lt;/bottom&gt;
-    &lt;tag name=&quot;todo&quot; scope=&quot;all&quot; description=&quot;To do:&quot; /&gt;
-    &lt;group title=&quot;Group 1 Packages&quot; packages=&quot;com.dummy.test.a*&quot;/&gt;
-    &lt;group title=&quot;Group 2 Packages&quot; packages=&quot;com.dummy.test.b*:com.dummy.test.c*&quot;/&gt;
-    &lt;link offline=&quot;true&quot; href=&quot;http://java.sun.com/products/jdk/1.2/docs/api/&quot; packagelistLoc=&quot;C:\tmp&quot;/&gt;
-    &lt;link href=&quot;http://developer.java.sun.com/developer/products/xml/docs/api/&quot;/&gt;
-  &lt/javadoc&gt;</pre>
-
-<hr>
-<p align="center">Copyright &copy; 2001-2002 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/CoreTasks/loadfile.html b/docs/manual/CoreTasks/loadfile.html
deleted file mode 100644
index 7603b6e..0000000
--- a/docs/manual/CoreTasks/loadfile.html
+++ /dev/null
@@ -1,97 +0,0 @@
-<html>
-<head>
-<title>LoadFile Task</title>
-</head>
-
-<body>
-
-
-<h2><a name="loadfile">LoadFile</a></h2>
-<h3>Description</h3>
-<p>
- Load a text file into a single property. Unless an encoding is specified,
- the encoding of the current locale is used.
-
-</p>
-
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">srcFile</td>
-    <td valign="top">source file</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">property</td>
-    <td valign="top">property to save to</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">encoding</td>
-    <td valign="top">encoding to use when loading the file</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">failonerror</td>
-    <td valign="top">Whether to halt the build on failure</td>
-    <td align="center" valign="top">No, default "true"</td>
-  </tr>
-</table>
-<p>
-The LoadFile task supports nested <a href="../CoreTypes/filterchain.html">
-FilterChain</a>s.
-
-<h3>Examples</h3>
-<pre>    &lt;loadfile property="message"
-      srcFile="message.txt" /&gt;
-</pre>
-Load file message.txt into property "message"; an <tt>&lt;echo&gt;</tt>
-can print this.
-
-<pre>    &lt;loadfile property="encoded-file"
-      srcFile="loadfile.xml"
-      encoding="ISO-8859-1" /&gt;
-</pre>
-Load a file using the latin-1 encoding
-
-<pre>    &lt;loadfile
-      property="optional.value"
-      srcFile="optional.txt"
-      failonerror="false" /&gt;
-</pre>
-Load a file, don't fail if it is missing (a message is printed, though)
-
-<pre>    &lt;loadfile
-      property="mail.recipients"
-      srcFile="recipientlist.txt"&gt;
-      &lt;filterchain&gt;
-        &lt;<a href="../CoreTypes/filterchain.html#striplinebreaks">striplinebreaks</a>/&gt;
-      &lt;/filterchaint&gt;
-    &lt;/loadfile&gt;
-</pre>
-Load a property which can be used as a parameter for another task (in this case mail),
-merging lines to ensure this happens.
-
-<pre>    &lt;loadfile
-      property="system.configuration.xml"
-      srcFile="configuration.xml"&gt;
-        &lt;<a href="../CoreTypes/filterchain.html#expandproperties">expandproperties</a>/&gt;
-    &lt;/loadfile&gt;
-</pre>
-Load an XML file into a property, expanding all properties declared
-in the file in the process.
-
-
-<hr>
-
-<p align="center">Copyright &copy; 2001-2002 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/CoreTasks/loadproperties.html b/docs/manual/CoreTasks/loadproperties.html
deleted file mode 100644
index 91d94ad..0000000
--- a/docs/manual/CoreTasks/loadproperties.html
+++ /dev/null
@@ -1,59 +0,0 @@
-<html>
-<head>
-<title>LoadProperties Task</title>
-</head>
-
-<body>
-
-
-<h2><a name="loadproperties">LoadProperties</a></h2>
-<h3>Description</h3>
-<p>
-Load a file's contents as Ant properties.  This is equivalent
-to &lt;property file=&quot;...&quot;/&gt; except that it
-supports nested &lt;filterchain&gt; elements and it cannot be
-specified outside a target.
-
-</p>
-
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">srcFile</td>
-    <td valign="top">source file</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-</table>
-<p>
-The LoadProperties task supports nested <a href="../CoreTypes/filterchain.html">
-FilterChain</a>s.
-
-<h3>Examples</h3>
-<pre>    &lt;loadproperties srcFile="file.properties" /&gt;
-</pre>
-Load contents of file.properties as Ant properties.
-
-<pre>    &lt;loadproperties srcFile="file.properties"&gt;
-      &lt;filterchain&gt;
-        &lt;<a href="../CoreTypes/filterchain.html#linecontains">linecontains</a>&gt;
-          &lt;contains value="import.&quot;/&gt;
-        &lt;linecontains/&gt;
-      &lt;/filterchaint&gt;
-    &lt;/loadproperties&gt;
-</pre>
-Read the lines that contain the string &quot;import.&quot;
-from the file &quot;file.properties&quot; and load them as
-Ant properties.
-<hr>
-
-<p align="center">Copyright &copy; 2002 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/CoreTasks/mail.html b/docs/manual/CoreTasks/mail.html
deleted file mode 100644
index 69484eb..0000000
--- a/docs/manual/CoreTasks/mail.html
+++ /dev/null
@@ -1,187 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Mail Task</title>
-</head>
-
-<body>
-
-<h2><a name="mail">Mail</a></h2>
-<h3>Description</h3>
-<p>A task to send SMTP email. This task can send mail using either plain
-text, uu encoding or Mime format mail depending on what is available.
-Attachments may be sent using nested
-<a href="../CoreTypes/fileset.html">fileset</a> elements.</p>
-
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">from</td>
-    <td valign="top">Email address of sender.</td>
-    <td align="center" valign="top">Either a <code>from</code> attribute, or a <code>&lt;from&gt;</code>
-    element.</td>
-  </tr>
-  <tr>
-    <td valign="top">tolist</td>
-    <td valign="top">Comma-separated list of recipients.</td>
-    <td align="center" valign="middle" rowspan="3">At least one of these, or the
-       equivalent elements.</td>
-  </tr>
-  <tr>
-    <td valign="top">cclist</td>
-    <td valign="top">Comma-separated list of recipients to carbon copy</td>
-    </tr>
-  <tr>
-    <td valign="top">bcclist</td>
-    <td valign="top">Comma-separated list of recipients to carbon copy</td>
-  </tr>
-  <tr>
-    <td valign="top">message</td>
-    <td valign="top">Message to send in the body of the email.</td>
-    <td align="center" valign="middle" rowspan="2">One of these or a
-    <code>&lt;message&gt;</code> element.</td>
-  </tr>
-  <tr>
-    <td valign="top">messagefile</td>
-    <td valign="top">File to send as the body of the email.</td>
-  </tr>
-      <td valign="top">messagemimetype</td>
-    <td valign="top">The content type of the message.  The default is
-    <code>text/plain</code>.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">files</td>
-    <td valign="top">Files to send as attachments to the email.  Separate multiple
-    file names using a comma.  You can also use <code>&lt;fileset&gt;</code>
-    elements to specify files.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">failonerror</td>
-    <td valign="top">flag to indicate whether to halt the build on
-    any error.  The default value is <code>true</code>.</td>
-    <td align="center" valign="top">No.</td>
-  </tr>
-  <tr>
-    <td valign="top">includefilenames</td>
-    <td valign="top">Include filename(s) before file contents.
-    Valid only when the <code>plain</code> encoding is used.  The default
-    value is <code>false</code>.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">mailhost</td>
-    <td valign="top">Host name of the SMTP server.  The default value is
-    <code>localhost</code>.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">mailport</td>
-    <td valign="top">TCP port of the SMTP server.  The default value is 25.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">encoding</td>
-    <td valign="top">Specifies the encoding to use for the content of the email.
-    Values are <code>mime</code>, <code>uu</code>, <code>plain</code>, or
-      <code>auto</code>.  The default value is <code>auto</code>.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">subject</td>
-    <td valign="top">Email subject line.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-</table>
-
-<h3>Parameters specified as nested elements</h3>
-
-<h4>to / cc / bcc / from</h4>
-<p>Adds an email address element.  It takes the following attributes:</p>
-
-<table width="60%" border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">name</td>
-    <td valign="top">The display name for the address.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">address</td>
-    <td valign="top">The email address.</td>
-    <td align="center" valign="top">Yes</td>
-  </tr>
-</table>
-
-<h4>message</h4>
-
-<p>Specifies the message to include in the email body.  It takes the following
-attributes:</p>
-
-<table width="60%" border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">src</td>
-    <td valign="top">The file to use as the message.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">mimetype</td>
-    <td valign="top">The content type to use for the message.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-</table>
-
-<p>If the <code>src</code> attribute is not specified, then text can be added
-inside the <code>&lt;message&gt;</code> element.</p>
-
-<h3>Examples</h3>
-
-<blockquote><pre>
-&lt;mail from=&quot;me&quot;
-      tolist=&quot;you&quot;
-      subject=&quot;Results of nightly build&quot;
-      files=&quot;build.log&quot; /&gt;
-</pre></blockquote>
-
-<p>Sends an email from <i>me</i> to <i>you</i> with a subject of
-<i>Results of nightly build</i> and includes the contents of the file
-<i>build.log</i> in the body of the message.</p>
-
-<blockquote><pre>
-&lt;mail mailhost=&quot;smtp.myisp.com&quot; mailport=&quot;1025&quot; subject=&quot;Test build&quot;&gt;
-  &lt;from name=&quot;me@myisp.com&quot;&gt;
-  &lt;to name=&quot;all@xyz.com&quot;&gt;
-  &lt;message&gt;A new nightly build has completed&lt;/message&gt;
-  &lt;fileset dir=&quot;dist&quot;&gt;
-    &lt;includes name=&quot;**/*.zip&quot;/&gt;
-  &lt;/fileset&gt;
-&lt;/mail&gt;
-</pre></blockquote>
-
-<p>Sends an eMail from <i>me@myisp.com</i> to <i>all@xyz.com</i> with a subject of
-<i>Test Build</i> and attaches any zip files from the dist directory.&nbsp; The
-task will attempt to use JavaMail and fall back to UU encoding or no encoding in
-that order depending on what support classes are available.</p>
-<hr>
-<p align="center">Copyright &copy; 2001-2002 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/CoreTasks/manifest.html b/docs/manual/CoreTasks/manifest.html
deleted file mode 100644
index 2ba20e7..0000000
--- a/docs/manual/CoreTasks/manifest.html
+++ /dev/null
@@ -1,135 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Manifest Task</title>
-</head>
-
-<body>
-
-<h2><a name="manifest">Manifest</a></h2>
-<h3>Description</h3>
-<p>Creates a manifest file.</p>
-
-<p>This task can be used to write a Manifest file, optionally
-replacing or updating an existing file.</p>
-
-<p>Manifests are processed according to the 
-<a href="http://java.sun.com/j2se/1.3/docs/guide/jar/jar.html">Jar
-file specification.</a>. Specifically, a manifest element consists of
-a set of attributes and sections. These sections in turn may contain
-attributes. Note in particular that this may result in manifest lines
-greater than 72 bytes being wrapped and continued on the next
-line.</p>
-
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">file</td>
-    <td valign="top">the manifest-file to create/update.</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">mode</td>
-    <td valign="top">One of "update" or "replace", default is "replace".</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-</table>
-
-<h3>Nested elements</h3>
-<h4><a name="attribute">attribute</h4></h4>
-<p>One attribute for the manifest file.  Those attributes that are
-not nested into a section will be added to the "Main" section.</p>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">name</td>
-    <td valign="top">the name of the attribute.</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">value</td>
-    <td valign="top">the name of the attribute.</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-</table>
-
-
-<h4>section</h4>
-<p>A manifest section - you can nest <a
-href="#attribute">attribute</a> elements into sections.</p>
-
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">name</td>
-    <td valign="top">the name of the section.</td>
-    <td valign="top" align="center">No, if ommitted it will be assumed
-       to be the main section.</td>
-  </tr>
-</table>
-
-<h3>Examples</h3>
-
-<pre>
-  &lt;manifest file=&quot;MANIFEST.MF&quot;&gt;
-    &lt;attribute name=&quot;Built-By&quot; value=&quot;${user.name}&quot;/&gt;
-    &lt;section name=&quot;common&quot;&gt;
-      &lt;attribute name=&quot;Specification-Title&quot; value=&quot;Example&quot; /&gt;
-      &lt;attribute name=&quot;Specification-Version&quot; value=&quot;${version}&quot; /&gt;
-      &lt;attribute name=&quot;Specification-Vendor&quot; value=&quot;Example Organization&quot; /&gt;
-      &lt;attribute name=&quot;Implementation-Title&quot; value=&quot;common&quot; /&gt;
-      &lt;attribute name=&quot;Implementation-Version&quot; value=&quot;${version} ${TODAY}&quot; /&gt; 
-      &lt;attribute name=&quot;Implementation-Vendor&quot; value=&quot;Example Corp.&quot; /&gt;
-    &lt;/section&gt;
-    &lt;section name=&quot;common/class1.class&quot;&gt;
-      &lt;attribute name=&quot;Sealed&quot; value=&quot;false&quot;/&gt;
-    &lt;/section&gt;
-  &lt;/manifest&gt;
-</pre>
-
-<p>Creates or replaces the file MANIFEST.MF.  Note that the Built-By
-attribute will take the value of the Ant property ${user.name}.  The
-same is true for the ${version} and ${TODAY} properties.  This example
-produces a MANIFEST.MF that contains 
-<a href="http://java.sun.com/products/jdk/1.2/docs/guide/versioning/index.html">package
-version identification</a> for the package <code>common</code>.</p>
-
-<p>The manifest produced by the above would look like this:</p>
-
-<pre><code>Manifest-Version: 1.0
-Built-By: bodewig
-Created-By: Apache Ant 1.5alpha
-
-Name: common
-Specification-Title: Example
-Specification-Vendor: Example Organization
-Implementation-Vendor: Example Corp.
-Specification-Version: 1.1
-Implementation-Version: 1.1 February 19 2002
-Implementation-Title: common
-
-Name: common/class1.class
-Sealed: false
-
-</code></pre>
-
-<hr>
-<p align="center">Copyright &copy; 2001-2002 Apache Software Foundation. All rights
-Reserved.</p>
-</body>
-</html>
-
diff --git a/docs/manual/CoreTasks/mkdir.html b/docs/manual/CoreTasks/mkdir.html
deleted file mode 100644
index 059c118..0000000
--- a/docs/manual/CoreTasks/mkdir.html
+++ /dev/null
@@ -1,38 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Mkdir Task</title>
-</head>
-
-<body>
-
-<h2><a name="mkdir">Mkdir</a></h2>
-<h3>Description</h3>
-<p>Creates a directory. Also non-existent parent directories are created, when
-necessary.</p>
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">dir</td>
-    <td valign="top">the directory to create.</td>
-    <td align="center" valign="top">Yes</td>
-  </tr>
-</table>
-<h3>Examples</h3>
-<pre>&lt;mkdir dir=&quot;${dist}&quot;/&gt;</pre>
-<p>creates a directory <code>${dist}</code>.</p>
-<pre>&lt;mkdir dir=&quot;${dist}/lib&quot;/&gt;</pre>
-<p>creates a directory <code>${dist}/lib</code>.</p>
-<hr>
-<p align="center">Copyright &copy; 2001 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/CoreTasks/move.html b/docs/manual/CoreTasks/move.html
deleted file mode 100644
index 252c133..0000000
--- a/docs/manual/CoreTasks/move.html
+++ /dev/null
@@ -1,119 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Move Task</title>
-</head>
-
-<body>
-
-<h2><a name="move">Move</a></h2>
-<h3>Description</h3>
-<p>Moves a file to a new file or directory, or sets of files to
-a new directory.  By default, the
-destination file is overwritten if it already exists.  When <var>overwrite</var> is
-turned off, then files are only moved if the source file is newer than
-the destination file, or when the destination file does not exist.</p>
-<p><a href="../CoreTypes/fileset.html">FileSet</a>s are used to select sets of files
-to move to the <var>todir</var> directory.</p>
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">file</td>
-    <td valign="top">the file to move</td>
-    <td valign="top" align="center">One of <var>file</var> or 
-     at least one nested fileset element</td>
-  </tr>
-  <tr>
-    <td valign="top">tofile</td>
-    <td valign="top">the file to move to</td>
-    <td valign="top" align="center" rowspan="2">With the <var>file</var> attribute, 
-    either <var>tofile</var> or <var>todir</var> can be used.  With nested filesets,
-    if the fileset size is greater than 1 or if the only entry in the fileset is a
-    directory or if the <var>file</var> attribute is already specified, only
-    <var>todir</var> is allowed</td>
-  </tr>
-  <tr>
-    <td valign="top">todir</td>
-    <td valign="top">the directory to move to</td>
-  </tr>
-  <tr>
-    <td valign="top">overwrite</td>
-    <td valign="top">overwrite existing files even if the destination
-      files are newer (default is &quot;true&quot;)</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">filtering</td>
-    <td valign="top">indicates whether token filtering should take place during
-      the move.  See the <a href="filter.html">filter</a> task for a description of
-      how filters work.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">flatten</td>
-    <td valign="top">ignore directory structure of source directory,
-      copy all files into a single directory, specified by the <var>todir</var>
-      attribute (default is &quot;false&quot;).Note that you can achieve the 
-      same effect by using a <a href="../CoreTypes/mapper.html#flatten-mapper">flatten mapper</a></td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">includeEmptyDirs</td>
-	 <td valign="top">Copy empty directories included with the nested FileSet(s).
-	   Defaults to &quot;yes&quot;.</td>
-	 <td valign="top" align="center">No</td>
-  </tr>
-</table>
-<h3>Parameters specified as nested elements</h3>
-<h4>mapper</h4>
-<p>You can define file name transformations by using a nested <a
-href="../CoreTypes/mapper.html">mapper</a> element. The default mapper used by
-<code>&lt;copy&gt;</code> is the <a
-href="../CoreTypes/mapper.html#identity-mapper">identity</a>.</p>
-<h3>Examples</h3>
-<p><b>Move a single file (rename a file)</b></p>
-<pre>
-  &lt;move file=&quot;file.orig&quot; tofile=&quot;file.moved&quot;/&gt;
-</pre>
-<p><b>Move a single file to a directory</b></p>
-<pre>
-  &lt;move file=&quot;file.orig&quot; todir=&quot;dir/to/move/to&quot;/&gt;
-</pre>
-<p><b>Move a directory to a new directory</b></p>
-<pre>
-  &lt;move todir=&quot;new/dir/to/move/to&quot;&gt;
-    &lt;fileset dir=&quot;src/dir&quot;/&gt;
-  &lt;/move&gt;
-</pre>
-<p><b>Move a set of files to a new directory</b></p>
-<pre>
-  &lt;move todir=&quot;some/new/dir&quot; &gt;
-    &lt;fileset dir=&quot;my/src/dir&quot; &gt;
-      &lt;include name=&quot;**/*.jar&quot;/&gt;
-      &lt;exclude name=&quot;**/ant.jar&quot;/&gt;
-    &lt;/fileset&gt;
-  &lt;/move&gt;
-</pre>
-<p><b>Append <code>&quot;.bak&quot;</code> to the names of all files
-in a directory.</b></p>
-<pre>
-  &lt;move todir=&quot;my/src/dir&quot; &gt;
-    &lt;fileset dir=&quot;my/src/dir&quot; &gt;
-      &lt;exclude name=&quot;**/*.bak&quot;/&gt;
-    &lt;/fileset&gt;
-    &lt;mapper type=&quot;glob&quot; from=&quot;*&quot; to=&quot;*.bak&quot;/&gt;
-  &lt;/move&gt;
-</pre>
-<hr>
-<p align="center">Copyright &copy; 2001 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/CoreTasks/pack.html b/docs/manual/CoreTasks/pack.html
deleted file mode 100644
index b1243e9..0000000
--- a/docs/manual/CoreTasks/pack.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>GZip/BZip2 Tasks</title>
-</head>
-
-<body>
-
-<h2><a name="pack">GZip/BZip2</a></h2>
-<h3>Description</h3>
-<p>Packs a file using the GZip or BZip2 algorithm.
-The output file is only generated if it doesn't exist or the source
-file is newer.</p>
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">src</td>
-    <td valign="top">the file to gzip/bzip.</td>
-    <td align="center" valign="top">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">zipfile</td>
-    <td valign="top">the destination file.</td>
-    <td align="center" valign="top">Yes</td>
-  </tr>
-</table>
-<h3>Examples</h3>
-<blockquote>
-  <p><code>&lt;gzip src=&quot;test.tar&quot; zipfile=&quot;test.tar.gz&quot;
-  /&gt;</code></p>
-</blockquote>
-<blockquote>
-  <p><code>&lt;bzip2 src=&quot;test.tar&quot; zipfile=&quot;test.tar.bz2&quot;
-  /&gt;</code></p>
-</blockquote>
-<hr>
-<p align="center">Copyright &copy; 2001-2002 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
diff --git a/docs/manual/CoreTasks/parallel.html b/docs/manual/CoreTasks/parallel.html
deleted file mode 100644
index 45aa0dc..0000000
--- a/docs/manual/CoreTasks/parallel.html
+++ /dev/null
@@ -1,83 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Parallel Task</title>
-</head>
-
-<body>
-
-<h2>Parallel</h2>
-<h3>Description</h3>
-<p>Parallel is a container task - it can contain other Ant tasks. Each nested
-task within the parallel task will be executed in its own thread. </p>
-
-<p>Parallel tasks have a number of uses in an Ant build file including:</p>
-<ul>
-<li>Taking advantage of available processing resources to reduce build time</li>
-<li>Testing servers, where the server can be run in one thread and the test
-harness is run in another thread.</li>
-</ul>
-
-<p>Care must be taken when using multithreading to ensure the tasks within the
-threads do not interact. For example, two javac compile tasks which write 
-classes into the same destination directory may interact where one tries to
-read a class for dependency information while the other task is writing the 
-class file. Be sure to avoid these types of interactions within a 
-&lt;parallel&gt; task</p>
-  
-<p>The parallel task has no attributes and does not support any nested 
-elements apart from Ant tasks. Any valid Ant task may be embedded within a 
-parallel task, including other parallel tasks.</p>
-
-<p>Note that while the tasks within the parallel task are being run, the main 
-thread will be blocked waiting for all the child threads to complete.</p>  
-
-<p>If any of the tasks within the &lt;parallel&gt; task fails, the remaining 
-tasks in other threads will continue to run until all threads have completed. 
-In this situation, the parallel task will also fail.</p>
-
-<p>The parallel task may be combined with the <a href="sequential.html">
-sequential</a> task to define sequences of tasks to be executed on each thread
-within the parallel block</p>
-
-<h3>Examples</h3>
-<pre>
-&lt;parallel&gt;
-  &lt;wlrun ...&gt;
-  &lt;sequential&gt;
-    &lt;sleep seconds=&quot;30&quot;/&gt;
-    &lt;junit ...&gt;
-    &lt;wlstop/&gt;
-  &lt;/sequential&gt;
-&lt;/parallel&gt;
-</pre>
-<p>This example represents a typical pattern for testing a server application. 
-In one thread the server is started (the wlrun task). The other thread consists 
-of a three tasks which are performed in sequence. The sleep task is used to 
-give the server time to come up. Another task which is capable of validating 
-that the server is available could be used in place of the sleep task. The 
-test harness is then run. Once the tests are complete, the server is stopped 
-(using wlstop in this example), allowing both threads to complete. The 
-parallel task will also complete at this time and the build will then 
-continue.</p>
-
-<pre>
-&lt;parallel&gt;
-  &lt;javac ...&gt; &lt;!-- compiler servlet code --&gt;
-  &lt;wljspc ...&gt; &lt;!-- precompile JSPs --&gt;
-&lt;/parallel&gt;
-</pre>
-
-<p>This example shows two independent tasks being run to achieve better 
-resource utilization during the build. In this instance, some servlets are being
-compiled in one thead and a set of JSPs is being precompiled in another. As 
-noted above, you need to be careful that the two tasks are independent, both in 
-terms of their dependencies and in terms of their potential interactions in
-Ant's external environment.</p>
-<hr>
-<p align="center">Copyright &copy; 2001 Apache Software Foundation. All rights
-Reserved.</p>
-</body>
-</html>
-
diff --git a/docs/manual/CoreTasks/patch.html b/docs/manual/CoreTasks/patch.html
deleted file mode 100644
index 12083a6..0000000
--- a/docs/manual/CoreTasks/patch.html
+++ /dev/null
@@ -1,82 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Patch Task</title>
-</head>
-
-<body>
-
-<h2><a name="patch">Patch</a></h2>
-<h3>Description</h3>
-<p>Applies a diff file to originals.</p>
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">patchfile</td> 
-    <td valign="top">the file that includes the diff output</td>
-    <td align="center" valign="top">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">originalfile</td> 
-    <td valign="top">the file to patch</td>
-    <td align="center" valign="top">No, tries to guess it from the diff 
-      file</td>
-  </tr>
-  <tr>
-    <td valign="top">backups</td> 
-    <td valign="top">Keep backups of the unpatched files</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">quiet</td> 
-    <td valign="top">Work silently unless an error occurs</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">reverse</td> 
-    <td valign="top">Assume patch was created with old and new files 
-      swapped.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">ignorewhitespace</td> 
-    <td valign="top">Ignore whitespace differences.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">strip</td> 
-    <td valign="top">Strip the smallest prefix containing <i>num</i> leading 
-      slashes from filenames.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">dir</td> 
-    <td valign="top">The directory in which to run the patch command.</td>
-    <td align="center" valign="top">No, default is the project's basedir.</td>
-  </tr>
-</table>
-<h3>Examples</h3>
-<pre>  &lt;patch patchfile=&quot;module.1.0-1.1.patch&quot;/&gt;</pre>
-<p>applies the diff included in <i>module.1.0-1.1.patch</i> to the
-files in base directory guessing the filename(s) from the diff output.</p>
-<pre>  &lt;patch patchfile=&quot;module.1.0-1.1.patch&quot; strip=&quot;1&quot;/&gt;</pre>
-<p>like above but one leading directory part will be removed. i.e. if
-the diff output looked like</p>
-<pre>
---- a/mod1.0/A	Mon Jun  5 17:28:41 2000
-+++ a/mod1.1/A	Mon Jun  5 17:28:49 2000
-</pre> 
-the leading <i>a/</i> will be stripped.
-<hr>
-<p align="center">Copyright &copy; 2001-2002 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/CoreTasks/pathconvert.html b/docs/manual/CoreTasks/pathconvert.html
deleted file mode 100644
index fa64e06..0000000
--- a/docs/manual/CoreTasks/pathconvert.html
+++ /dev/null
@@ -1,179 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>PathConvert Task</title>
-</head>
-
-<body>
-
-<h2><a name="foreach">Pathconvert</a></h2>
-<h3>Description</h3>
-<p>Converts a nested <code>&lt;path&gt;</code> or reference to a Path,
-FileSet, DirSet, or FileList into a path
-form for a particular platform, and stores the result in a given property.
-It can also be used when you need
-to convert a Path, FileSet, or DirSet into a list, separated by a given
-character, such as a comma or space, or, conversely, to convert a list
-of files in a FileList into a path.
-</p>
-<p>Nested <code>&lt;map&gt;</code> elements can be specified to map Windows
-drive letters to Unix paths, and vice-versa.</p>
-
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">targetos</td>
-    <td valign="top">
-        The target architecture.  Must be one of 'unix', 'windows', 
-        'netware' or 'os/2'.
-        This is a shorthand mechanism for specifying both
-        <code>pathsep</code> and <code>dirsep</code>
-        according to the specified target architecture.
-    </td>
-    <td valign="top" align="center">
-       Yes, unless <code>pathsep</code> and/or
-       <code>dirsep</code> are specified.
-    </td>
-  </tr>
-  <tr>
-    <td valign="top">dirsep</td>
-    <td valign="top">
-       The character(s) to use as the directory separator in the
-       generated paths.
-    </td>
-    <td valign="top" align="center">No, defaults to current JVM <tt>File.separator</tt></td>
-  </tr>
-  <tr>
-    <td valign="top">pathsep</td>
-    <td valign="top">
-       The character(s) to use as the path-element separator in the
-       generated paths.
-    </td>
-    <td valign="top" align="center">No, defaults to current JVM <tt>File.pathSeparator</tt></td>
-  </tr>
-  <tr>
-    <td valign="top">property</td>
-    <td valign="top">The name of the property in which to place the converted path.</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">refid</td>
-    <td valign="top">What to convert, given as a
-        <a href="../using.html#references">reference</a> to a
-        <code>&lt;path&gt;</code>, <code>&lt;fileset&gt;</code>,
-        <code>&lt;dirset&gt;</code>, or <code>&lt;fileset&gt;</code>
-        defined elsewhere</td>
-    <td valign="top" align="center">No; if omitted, a nested
-        <code>&lt;path&gt;</code> element must be supplied.</td>
-  </tr>
-</table>
-<h3>Parameters specified as nested elements</h3>
-<h4>map</h4>
-<p>Specifies the mapping of path prefixes between Unix and Windows.</p>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">from</td>
-    <td valign="top">The prefix to match.  Note that this value is case-insensitive when
-    the build is running on a Windows platform and case-sensitive when running on a
-    Unix platform.</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">to</td>
-    <td valign="top">The replacement text to use when <code>from</code> is matched.</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-</table>
-
-<p>Each map element specifies a single replacement map to be applied to the elements of
-   the path being processed.  If no map entries are specified, then no path prefix mapping
-   is performed.
-</p>
-<p><strong>Note</strong>: The map elements are applied in the order specified,
-and only the first matching map element is applied.  So, the ordering of
-your map elements can be important, if any <code>from</code> values are
-prefixes of other <code>from</code> values.</i>
-</p>   
-<h4>path</h4>
-<p>If the <code>refid</code> attribute is not specified, then a
-   nested <code>&lt;path&gt;</code> element must be supplied.  See
-   <a href="../using.html#path">Path-like Structures</a> for details.</p>
-
-<h3>Examples</h3>
-<p>In the examples below, assume that the <code>${wl.home}</code> property
-has the value
-<code>d:\weblogic</code>, and <code>${wl.home.unix}</code> has the value
-<code>/weblogic</code>.</p>
-<h4>Example 1</h4>
-<pre>
-    &lt;path id="wl.path"&gt;
-      &lt;pathelement location=&quot;${wl.home}/lib/weblogicaux.jar&quot;/&gt;
-      &lt;pathelement location=&quot;${wl.home}/classes&quot;/&gt;
-      &lt;pathelement location=&quot;${wl.home}/mssqlserver4/classes&quot;/&gt;
-      &lt;pathelement location=&quot;c:\winnt\System32&quot;/&gt;
-    &lt;/path&gt;
-    
-    &lt;pathconvert targetos=&quot;unix&quot; property=&quot;wl.path.unix&quot; refid=&quot;wl.path&quot;&gt;
-      &lt;map from=&quot;${wl.home}&quot; to=&quot;${wl.home.unix}&quot;/&gt;
-      &lt;map from=&quot;c:&quot; to=&quot;&quot;/&gt;
-    &lt;/pathconvert&gt;
-</pre>
-<p> will generate the path shown below
-and store it in the property named <code>wl.path.unix</code>.
-</p>   
-<pre>
-/weblogic/lib/weblogicaux.jar:/weblogic/classes:/weblogic/mssqlserver4/classes:/WINNT/SYSTEM32
-</pre>
-
-<h4>Example 2</h4>
-Given a FileList defined as:
-<pre>
-  &lt;filelist id=&quot;custom_tasks.jars&quot;
-        dir=&quot;${env.HOME}/ant/lib&quot;
-        files=&quot;njavac.jar,xproperty.jar&quot;/&gt;
-</pre>
-then:
-<pre>
-    &lt;pathconvert targetos=&quot;unix&quot; property=&quot;custom_tasks.jars&quot; refid=&quot;custom_tasks.jars&quot;&gt;
-      &lt;map from=&quot;${env.HOME}&quot; to=&quot;/usr/local&quot;/&gt;
-    &lt;/pathconvert&gt;
-</pre>
-will convert the list of files to the following Unix path:
-<pre>
-/usr/local/ant/lib/njavac.jar:/usr/local/ant/lib/xproperty.jar
-</pre>
-
-<h4>Example 3</h4>
-<pre>
-    &lt;fileset dir=&quot;${src.dir}&quot; id=&quot;src.files&quot;&gt;
-      &lt;include name=&quot;**/*.java&quot;/&gt;
-    &lt;/fileset&gt;
-  
-    &lt;pathconvert pathsep=&quot;,&quot; property=&quot;javafiles&quot; refid=&quot;src.files&quot;/&gt;
-</pre>
-<p>This example takes the set of files determined by the fileset (all files ending
-in <tt>.java</tt>), joins them together separated by commas, and places the resulting
-list into the property <tt>javafiles</tt>.  The directory separator is not specified, so
-it defaults to the appropriate character for the current platform.  Such a list could
-then be used in another task, like <tt>javadoc</tt>, that requires a comma separated
-list of files.
-</p>
-
-<hr>
-<p align="center">Copyright &copy; 2001-2002 Apache Software Foundation.
-All rights Reserved.</p>
-</body>
-</html>
-
- 
diff --git a/docs/manual/CoreTasks/property.html b/docs/manual/CoreTasks/property.html
deleted file mode 100644
index 3552315..0000000
--- a/docs/manual/CoreTasks/property.html
+++ /dev/null
@@ -1,154 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Property Task</title>
-</head>
-
-<body>
-
-<h2><a name="property">Property</a></h2>
-<h3>Description</h3>
-<p>Sets a property (by name and value), or set of properties (from file or
-resource) in the project.  Properties are case sensitive.</p>
-<p>When a property was set by the user, or was a property in a parent project
-(that started this project with the <a href="ant.html">ant task</a>), then this
-property cannot be set, and will be ignored. This means that properties set
-outside the current project always override the properties of the current
-project.</p>
-<p>There are five ways to set properties:</p>
-<ul>
-  <li>By supplying both the <i>name</i> and <i>value</i> attribute.</li>
-  <li>By supplying both the <i>name</i> and <i>refid</i> attribute.</li>
-  <li>By setting the <i>file</i> attribute with the filename of the property
-    file to load. This property file has the format as defined by the file used
-    in the class java.util.Properties.</li>
-  <li>By setting the <i>resource</i> attribute with the resource name of the
-    property file to load. This property file has the format as defined by the
-    file used in the class java.util.Properties.</li>
-  <li>By setting the <i>environment</i> attribute with a prefix to use.
-    Properties will be defined for every environment variable by
-    prefixing the supplied name and a period to the name of the variable.</li>
-</ul>
-<p>Although combinations of the three ways are possible, only one should be used
-at a time. Problems might occur with the order in which properties are set, for
-instance.</p>
-<p>The value part of the properties being set, might contain references to other
-properties. These references are resolved at the time these properties are set.
-This also holds for properties loaded from a property file.</p>
-<p>A list of predefined properties can be found <a
-href="../using.html#built-in-props">here</a>.</p>
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">name</td>
-    <td valign="top">the name of the property to set.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">value</td>
-    <td valign="top">the value of the property.</td>
-    <td valign="middle" align="center" rowspan="3">One of these, when using the
-       name attribute</td>
-  </tr>
-  <tr>
-    <td valign="top">location</td>
-    <td valign="top">Sets the property to the absolute filename of the
-      given file. If the value of this attribute is an absolute path, it
-      is left unchanged (with / and \ characters converted to the
-      current platforms conventions). Otherwise it is taken as a path
-      relative to the project's basedir and expanded.</td>
-  </tr>
-  <tr>
-    <td valign="top">refid</td>
-    <td valign="top"><a href="../using.html#references">Reference</a> to an object
-      defined elsewhere. Only yields reasonable results for references
-      to <a href="../using.html#path">PATH like structures</a> or properties.</td>
-  </tr>
-  <tr>
-    <td valign="top">resource</td>
-    <td valign="top">the resource name of the property file.</td>
-    <td valign="middle" align="center" rowspan="3">One of these, when
-      <b>not</b> using the name attribute</td>
-  </tr>
-  <tr>
-    <td valign="top">file</td>
-    <td valign="top">the filename of the property file .</td>
-  </tr>
-  <tr>
-    <td valign="top">environment</td>
-    <td valign="top">the prefix to use when retrieving environment variables. Thus
-    if you specify environment=&quot;myenv&quot; you will be able to access OS-specific 
-    environment variables via property names &quot;myenv.PATH&quot; or 
-	&quot;myenv.TERM&quot;. Note that if you supply a property name with a final 
-	&quot;.&quot; it will not be doubled. ie environment=&quot;myenv.&quot; will still 
-	allow access of environment variables through &quot;myenv.PATH&quot; and 
-	&quot;myenv.TERM&quot;. This functionality is currently only implemented 
-    on select platforms. Feel free to send patches to increase the number of platforms
-    this functionality is supported on ;).<br>
-    Note also that properties are case sensitive, even if the
-    environment variables on your operating system are not, e.g. it
-    will be ${env.Path} not ${env.PATH} on Windows 2000.</td>
-
-  </tr>
-  <tr>
-    <td valign="top">classpath</td> 
-    <td valign="top">the classpath to use when looking up a resource.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">classpathref</td> 
-    <td valign="top">the classpath to use when looking up a resource,
-      given as <a href="../using.html#references">reference</a> to a PATH defined
-      elsewhere..</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">prefix</td> 
-    <td valign="top">Prefix to apply to properties loaded using <code>file</code>
-    or <code>resource</code>. A "." is appended to the prefix if not specified.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-</table>
-<h3>Parameters specified as nested elements</h3>
-<h4>classpath</h4>
-<p><code>Property</code>'s <i>classpath</i> attribute is a <a
-href="../using.html#path">PATH like structure</a> and can also be set via a nested
-<i>classpath</i> element.</p>
-<h3>Examples</h3>
-<pre>  &lt;property name=&quot;foo.dist&quot; value=&quot;dist&quot;/&gt;</pre>
-<p>sets the property <code>foo.dist</code> to the value &quot;dist&quot;.</p>
-<pre>  &lt;property file=&quot;foo.properties&quot;/&gt;</pre>
-<p>reads a set of properties from a file called &quot;foo.properties&quot;.</p>
-<pre>  &lt;property resource=&quot;foo.properties&quot;/&gt;</pre>
-<p>reads a set of properties from a resource called &quot;foo.properties&quot;.</p>
-<p>Note that you can reference a global properties file for all of your Ant
-builds using the following:</p>
-<pre>  &lt;property file=&quot;${user.home}/.ant-global.properties&quot;/&gt;</pre>
-<p>since the &quot;user.home&quot; property is defined by the Java virtual machine
-to be your home directory.  This technique is more appropriate for Unix than 
-Windows since the notion of a home directory doesn't exist on Windows.  On the
-JVM that I tested, the home directory on Windows is &quot;C:\&quot;.  Different JVM
-implementations may use other values for the home directory on Windows.</p>
-
-<pre>
-  &lt;property environment=&quot;env&quot;/&gt;
-  &lt;echo message=&quot;Number of Processors = ${env.NUMBER_OF_PROCESSORS}&quot;/&gt;
-  &lt;echo message=&quot;ANT_HOME is set to = ${env.ANT_HOME}&quot;/&gt;
-</pre>
-<p>reads the system environment variables and stores them in properties, prefixed with &quot;env&quot;.
-Note that this only works on <em>select</em> operating systems.
-Two of the values are shown being echoed. 
-</p> 
-
-<hr>
-<p align="center">Copyright &copy; 2001-2002 Apache Software Foundation. All rights
-Reserved.</p>
-</body>
-</html>
-
diff --git a/docs/manual/CoreTasks/recorder.html b/docs/manual/CoreTasks/recorder.html
deleted file mode 100644
index fd660a8..0000000
--- a/docs/manual/CoreTasks/recorder.html
+++ /dev/null
@@ -1,156 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Recorder Task</title>
-</head>
-
-<body>
-
-<h2><a name="log">Record</a></h2>
-<h3>Description</h3>
-<p>A recorder is a listener to the current build process that records the
-output to a file.</p>
-
-<p>Several recorders can exist at the same time.  Each recorder is
-associated with a file.  The filename is used as a unique identifier for
-the recorders.  The first call to the recorder task with an unused filename
-will create a recorder (using the parameters provided) and add it to the
-listeners of the build.  All subsequent calls to the recorder task using
-this filename will modify that recorders state (recording or not) or other
-properties (like logging level).</p>
-
-<p>Some technical issues: the file's print stream is flushed for &quot;finished&quot;
-events (buildFinished, targetFinished and taskFinished), and is closed on
-a buildFinished event.</p>
-
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">name</td>
-    <td valign="top">The name of the file this logger is associated with.</td>
-    <td align="center" valign="middle">yes</td>
-  </tr>
-  <tr>
-    <td valign="top">action</td>
-    <td valign="top">This tells the logger what to do: should it start
-    recording or stop?  The first time that the recorder task is called for
-    this logfile, and if this attribute is not provided, then the default
-    for this attribute is &quot;start&quot;.  If this attribute is not provided on
-    subsequent calls, then the state remains as previous.
-    [Values = {start|stop}, Default = no state change]</td>
-    <td align="center" valign="middle">no</td>
-  </tr>
-  <tr>
-    <td valign="top">append</td>
-    <td valign="top">Should the recorder append to a file, or create a new
-    one? This is only applicable the first time this task is called for
-    this file.  [Values = {yes|no}, Default=yes]</td>
-    <td align="center" valign="middle">no</td>
-  </tr>
-  <tr>
-    <td valign="top">emacsmode</td>
-    <td valign="top">Removes <code>[task]</code> banners like Ant's
-    <code>-emacs</code> command line switch if set to
-    <em>true</em>.</td>
-    <td align="center" valign="middle">no, default is <em>false</em></td>
-  </tr>
-  <tr>
-    <td valign="top">loglevel</td>
-    <td valign="top">At what logging level should this recorder instance
-    record to?  This is not a once only parameter (like <code>append</code>
-    is) -- you can increase or decrease the logging level as the build process
-    continues.  [Values= {error|warn|info|verbose|debug}, Default = no change]
-    </td>
-    <td align="center" valign="middle">no</td>
-  </tr>
-</table>
-
-<h3>Examples</h3>
-<p>The following build.xml snippet is an example of how to use the recorder
-to record just the <code>&lt;javac&gt;</code> task:</p>
-<pre>
-    ...
-    &lt;compile &gt;
-        &lt;record name=&quot;log.txt&quot; action=&quot;start&quot; /&gt;
-        &lt;javac ...
-        &lt;record name=&quot;log.txt&quot; action=&quot;stop&quot; /&gt;
-    &lt;compile/&gt;
-    ...
-</pre>
-
-<p>The following two calls to <code>&lt;record&gt;</code> set up two
-recorders: one to file &quot;records-simple.log&quot; at logging level <code>info</code>
-(the default) and one to file &quot;ISO.log&quot; using logging level of
-<code>verbose</code>.</p>
-<pre>
-    ...
-    &lt;record name=&quot;records-simple.log&quot; /&gt;
-    &lt;record name=&quot;ISO.log&quot; loglevel=&quot;verbose&quot; /&gt;
-    ...
-</pre>
-
-<h3>Notes</h3>
-<p>There is some functionality that I would like to be able to add in the
-future.  They include things like the following:</p>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">listener</td>
-    <td valign="top">A classname of a build listener to use from this point
-    on instead of the default listener.</td>
-    <td align="center" valign="middle">no</td>
-  </tr>
-  <tr>
-    <td valign="top">includetarget</td>
-    <td valign="top" rowspan=2>A comma-separated list of targets to automatically
-    record.  If this value is &quot;all&quot;, then all targets are recorded.
-    [Default = all]</td>
-    <td align="center" valign="middle">no</td>
-  </tr>
-  <tr>
-    <td valign="top">excludetarget</td>
-    <td align="center" valign="middle">no</td>
-  </tr>
-  <tr>
-    <td valign="top">includetask</td>
-    <td valign="top" rowspan=2>A comma-separated list of task to automatically
-    record or not.  This could be difficult as it could conflict with the
-    <code>includetarget/excludetarget</code>.  (e.g.:
-    <code>includetarget=&quot;compile&quot; exlcudetask=&quot;javac&quot;</code>, what should
-    happen?)</td>
-    <td align="center" valign="middle">no</td>
-  </tr>
-  <tr>
-    <td valign="top">excludetask</td>
-    <td align="center" valign="middle">no</td>
-  </tr>
-  <tr>
-    <td valign="top">action</td>
-    <td valign="top">add greater flexibility to the action attribute.  Things
-    like <code>close</code> to close the print stream.</td>
-    <td align="center" valign="top">no</td>
-  </tr>
-  <tr>
-    <td valign="top"></td>
-    <td valign="top"></td>
-    <td align="center" valign="top"></td>
-  </tr>
-</table>
-
-
-
-<hr><p align="center">Copyright &copy; 2001-2002 Apache Software
-Foundation. All rights Reserved.</p>
-
-</body>
-</html>
diff --git a/docs/manual/CoreTasks/rename.html b/docs/manual/CoreTasks/rename.html
deleted file mode 100644
index 555a2af..0000000
--- a/docs/manual/CoreTasks/rename.html
+++ /dev/null
@@ -1,49 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Rename Task</title>
-</head>
-
-<body>
-
-<h2><a name="rename">Rename</a></h2>
-<h3><i>Deprecated</i></h3>
-<p><i>This task has been deprecated.  Use the Move task instead.</i></p>
-<h3>Description</h3>
-<p>Renames a given file.</p>
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">src</td>
-    <td valign="top">file to rename.</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">dest</td>
-    <td valign="top">new name of the file.</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">replace</td>
-    <td valign="top">Enable replacing of existing file (default: on).</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-</table>
-<h3>Examples</h3>
-<pre>  &lt;rename src=&quot;foo.jar&quot; dest=&quot;${name}-${version}.jar&quot;/&gt;</pre> 
-<p>Renames the file <code>foo.jar</code> to <code>${name}-${version}.jar</code> (assuming <code>name</code>
- and <code>version</code> being predefined properties). If a file named <code>${name}-${version}.jar</code>
- already exists, it will be removed prior to renaming <code>foo.jar</code>.</p>
-<hr>
-<p align="center">Copyright &copy; 2001 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/CoreTasks/replace.html b/docs/manual/CoreTasks/replace.html
deleted file mode 100644
index f89b08c..0000000
--- a/docs/manual/CoreTasks/replace.html
+++ /dev/null
@@ -1,185 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Replace Task</title>
-</head>
-
-<body>
-
-<h2><a name="replace">Replace</a></h2>
-<h3>Description</h3>
-<p>Replace is a directory based task for replacing the occurrence of a given string with another string 
-in selected file.</p>
-<p>If you want to replace a text that crosses line boundaries, you
-must use a nested <code>&lt;replacetoken&gt;</code> element.</p>
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">file</td>
-    <td valign="top">file for which the token should be replaced.</td>
-    <td align="center" rowspan="2">Exactly one of the two.</td>
-  </tr>
-  <tr>
-    <td valign="top">dir</td>
-    <td valign="top">The base directory to use when replacing a token in 
-      multiple files.</td>
-  </tr>
-  <tr>
-    <td valign="top">encoding</td>
-    <td valign="top">The encoding of the files upon which replace operates.</td>
-    <td align="center">No - defaults to default JVM encoding</td>
-  </tr>
-  <tr>
-    <td valign="top">token</td>
-    <td valign="top">the token which must be replaced.</td>
-    <td valign="top" align="center">Yes, unless a nested
-    <code>replacetoken</code> element or the replacefilterfile
-    attribute is used.</td>
-  </tr>
-  <tr>
-    <td valign="top">value</td>
-    <td valign="top">the new value for the token. When omitted, an empty string
-      (&quot;&quot;) is used.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">summary</td>
-    <td valign="top">Indicates whether a summary of the replace operation 
-                     should be produced, detailing how many token occurrences 
-                     and files were processed
-                     </td>
-    <td valign="top" align="center">No, by default no summary is produced</td>
-  </tr>
-  <tr>
-    <td valign="top">propertyFile</td>
-    <td valign="top">valid property file from which properties specified using nested <code>&lt;replacefilter&gt;</code> elements are drawn.</td>
-    <td valign="top" align="center">Yes only if <i>property</i> attribute of <code>&lt;replacefilter&gt;</code> is used.</td>
-  </tr>
-  <tr>
-    <td valign="top">replacefilterfile</td>
-    <td valign="top">valid property file.  Each property will be
-    treated as a replacefilter where <code>token</code> is the name of
-    the property and <code>value</code> is the properties value.
-    <td valign="top" align="center">No.</td>
-  </tr>
-  <tr>
-    <td valign="top">includes</td>
-    <td valign="top">comma separated list of patterns of files that must be
-      included. All files are included when omitted.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">includesfile</td>
-    <td valign="top">the name of a file. Each line of this file is
-      taken to be an include pattern</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">excludes</td>
-    <td valign="top">comma separated list of patterns of files that must be
-      excluded. No files (except default excludes) are excluded when omitted.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">excludesfile</td>
-    <td valign="top">the name of a file. Each line of this file is
-      taken to be an exclude pattern</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">defaultexcludes</td>
-    <td valign="top">indicates whether default excludes should be used or not
-      (&quot;yes&quot;/&quot;no&quot;). Default excludes are used when omitted.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-</table>
-<h3>Examples</h3>
-<pre>  &lt;replace file=&quot;${src}/index.html&quot; token=&quot;@@@&quot; value=&quot;wombat&quot;/&gt;</pre>
-<p>replaces occurrences of the string &quot;@@@&quot; with the string
-&quot;wombat&quot;, in the file <code>${src}/index.html</code>.</p>
-<h3>Parameters specified as nested elements</h3>
-<p>This task forms an implicit <a href="../CoreTypes/fileset.html">FileSet</a> and
-supports all attributes of <code>&lt;fileset&gt;</code> as well as the
-nested <code>&lt;include&gt;</code>, <code>&lt;exclude&gt;</code> and
-<code>&lt;patternset&gt;</code> elements.</p>
-<p>If either the text you want to replace or the replacement text
-cross line boundaries, you can use nested elements to specify
-them.</p>
-<h3>Examples</h3>
-<blockquote><pre>
-&lt;replace dir=&quot;${src}&quot; value=&quot;wombat&quot;&gt;
-  &lt;include name=&quot;**/*.html&quot;/&gt;
-  &lt;replacetoken&gt;&lt;![CDATA[multi line
-token]]>&lt;/replacetoken&gt;
-&lt;/replace&gt;
-</pre></blockquote>
-<p>replaces occurrences of the string &quot;multi
-line<i>\n</i>token&quot; with the string &quot;wombat&quot;, in all
-HTML files in the directory <code>${src}</code>.Where <i>\n</i> is
-the platform specific line separator.</p>
-<blockquote><pre>
-&lt;replace file=&quot;${src}/index.html&quot;&gt;
-  &lt;replacetoken&gt;&lt;![CDATA[two line
-token]]>&lt;/replacetoken&gt;
-  &lt;replacevalue&gt;&lt;![CDATA[two line
-token]]>&lt;/replacevalue&gt;
-&lt;/replace&gt;
-</pre></blockquote>
-<h4>replacefilter</h4>
-<p>In addition to allowing for multiple replacements, optional nested <code>&lt;replacefilter&gt;</code> elements allow replacement values to be extracted from a property file. The name of this file is specified using the <code>&lt;replace&gt;</code> attribute <i>propertyFile</i>.
-</p>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">token</td>
-    <td valign="top">The string to search for.</td>
-    <td align="center" valign="top">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">value</td>
-    <td valign="top">The replacement string.</td>
-    <td align="center" rowspan="2">Either may be specified, but not both. Both can be omitted, if desired.</td>
-  </tr>
-  <tr>
-    <td valign="top">property</td>
-    <td valign="top">Name of the property whose value is to serve as the replacement value.</td>
-  </tr>
-</table>
-<p>If neither <i>value</i> nor <i>property</i> is used, the value provided using the <code>&lt;replace&gt;</code> attribute <i>value</i> and/or the <code>&lt;replacevalue&gt;</code> element is used. If no value was specified using either of these options, the token is replaced with an empty string.
-</p>
-<h3>Examples</h3>
-<blockquote><pre>
-&lt;replace 
-    file=&quot;configure.sh&quot;
-    value=&quot;defaultvalue&quot;
-    propertyFile=&quot;source/name.properties&quot; &gt;
-  &lt;replacefilter 
-    token=&quot;@token1@&quot; /&gt;
-  &lt;replacefilter 
-    token=&quot;@token2@&quot; 
-    value=&quot;value2&quot;/&gt;
-  &lt;replacefilter 
-    token=&quot;@token3@&quot; 
-    property=&quot;property.key&quot;/&gt;
-&lt;/replace&gt;
-</pre></blockquote>
-<p>In file <code>configure.sh</code>, replace all instances of &quot;@token1@&quot; with &quot;defaultvalue&quot;, all instances of &quot;@token2@&quot; with &quot;value2&quot;, and all instances of &quot;@token3@&quot; with the value of the property &quot;property.key&quot;, as it appears in property file <code>src/name.properties</code>.</p>
-<p><b>Note:</b> It is possible to use either the <i>token</i>/<code>&lt;replacetoken&gt;</code> and <i>value</i>/<code>&lt;replacevalue&gt;</code> attributes/elements, the nested replacefilter elements, or both in the same operation.
-</p>
-<hr>
-<p align="center">Copyright &copy; 2001-2002 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/CoreTasks/rmic.html b/docs/manual/CoreTasks/rmic.html
deleted file mode 100644
index e6ec074..0000000
--- a/docs/manual/CoreTasks/rmic.html
+++ /dev/null
@@ -1,242 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Rmic Task</title>
-</head>
-
-<body>
-
-<h2><a name="rmic">Rmic</a></h2>
-<h3>Description</h3>
-<p>Runs the rmic compiler for a certain class.</p>
-<p>Rmic can be run on a single class (as specified with the classname
-attribute) or a number of classes at once (all classes below base that
-are neither _Stub nor _Skel classes).  If you want to rmic a single
-class and this class is a class nested into another class, you have to
-specify the classname in the form <code>Outer$$Inner</code> instead of
-<code>Outer.Inner</code>.</p>
-<p>It is possible to refine the set of files that are being rmiced. This can be
-done with the <i>includes</i>, <i>includesfile</i>, <i>excludes</i>, <i>excludesfile</i> and <i>defaultexcludes</i>
-attributes. With the <i>includes</i> or <i>includesfile</i> attribute you specify the files you want to
-have included by using patterns. The <i>exclude</i> or <i>excludesfile</i> attribute is used to specify
-the files you want to have excluded. This is also done with patterns. And
-finally with the <i>defaultexcludes</i> attribute, you can specify whether you
-want to use default exclusions or not. See the section on <a
-href="../dirtasks.html#directorybasedtasks">directory based tasks</a>, on how the
-inclusion/exclusion of files works, and how to write patterns.</p>
-<p>This task forms an implicit <a href="../CoreTypes/fileset.html">FileSet</a> and
-supports all attributes of <code>&lt;fileset&gt;</code>
-(<code>dir</code> becomes <code>base</code>) as well as the nested
-<code>&lt;include&gt;</code>, <code>&lt;exclude&gt;</code> and
-<code>&lt;patternset&gt;</code> elements.</p>
-<p>It is possible to use different compilers. This can be selected
-with the &quot;build.rmic&quot; property or the <code>compiler</code>
-attribute. <a name="compilervalues">There are three choices</a>:</p>
-<ul>
-  <li>sun (the standard compiler of the JDK)</li>
-  <li>kaffe (the standard compiler of <a href="http://www.kaffe.org" target="_top">Kaffe</a>)</li>
-  <li>weblogic</li>
-</ul>
-
-<p>The <a href="http://dione.zcu.cz/~toman40/miniRMI/">miniRMI</a>
-project contains a compiler implementation for this task as well,
-please consult miniRMI's documentation to learn how to use it.</p>
-
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">base</td>
-    <td valign="top">the location to store the compiled files.</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">classname</td>
-    <td valign="top">the class for which to run <code>rmic</code>.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">filtering</td>
-    <td valign="top">indicates whether token filtering should take place</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">sourcebase</td>
-    <td valign="top">Pass the &quot;-keepgenerated&quot; flag to rmic and
- move the generated source file to the base directory.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">stubversion</td>
-    <td valign="top">Specify the JDK version for the generated stub code.
- Specify &quot;1.1&quot; to pass the &quot;-v1.1&quot; option to rmic.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">classpath</td>
-    <td valign="top">The classpath to use during compilation</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">classpathref</td>
-    <td valign="top">The classpath to use during compilation, given as <a
-      href="../using.html#references">reference</a> to a PATH defined elsewhere</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">includes</td>
-    <td valign="top">comma separated list of patterns of files that must be
-      included. All files are included when omitted.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">includesfile</td>
-    <td valign="top">the name of a file. Each line of this file is
-      taken to be an include pattern</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">excludes</td>
-    <td valign="top">comma separated list of patterns of files that must be
-      excluded. No files (except default excludes) are excluded when omitted.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">excludesfile</td>
-    <td valign="top">the name of a file. Each line of this file is
-      taken to be an exclude pattern</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">defaultexcludes</td>
-    <td valign="top">indicates whether default excludes should be used or not
-      (&quot;yes&quot;/&quot;no&quot;). Default excludes are used when omitted.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">verify</td>
-    <td valign="top">check that classes implement Remote before handing them 
-        to rmic (default is false)</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">iiop</td>
-    <td valign="top">indicates that portable (RMI/IIOP) stubs should be generated</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">iiopopts</td>
-    <td valign="top">additional arguments for IIOP class generation</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">idl</td>
-    <td valign="top">indicates that IDL output files should be generated</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">idlopts</td>
-    <td valign="top">additional arguments for IDL file generation</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">debug</td>
-    <td valign="top">generate debug info (passes -g to rmic). Defaults to false.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">includeAntRuntime</td> 
-    <td valign="top">whether to include the Ant run-time libraries;
-      defaults to <code>yes</code>.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">includeJavaRuntime</td> 
-    <td valign="top">whether to include the default run-time
-      libraries from the executing VM; defaults to <code>no</code>.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">extdirs</td>
-    <td valign="top">location of installed extensions.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">compiler</td>
-    <td valign="top">The compiler implementation to use.
-      If this attribute is not set, the value of the
-      <code>build.rmic</code> property, if set, will be used.
-      Otherwise, the default compiler for the current VM will be used.
-      (See the above <a href="#compilervalues">list</a> of valid
-      compilers.)</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-</table>
-<h3>Parameters specified as nested elements</h3>
-<h4>classpath and extdirs</h4>
-<p><code>Rmic</code>'s <i>classpath</i> and <i>extdirs</i> attributes are <a
-href="../using.html#path">PATH like structure</a> and can also be set via a nested
-<i>classpath</i> and <i>extdirs</i> elements.</p>
-
-<h4>compilerarg</h4>
-
-<p>You can specify additional command line arguments for the compiler
-with nested <code>&lt;compilerarg&gt;</code> elements.  These elements
-are specified like <a href="../using.html#arg">Command-line
-Arguments</a> but have an additional attribute that can be used to
-enable arguments only if a given compiler implementation will be
-used.</p>
-<table border="1" cellpadding="2" cellspacing="0">
-<tr>
-  <td width="12%" valign="top"><b>Attribute</b></td>
-  <td width="78%" valign="top"><b>Description</b></td>
-  <td width="10%" valign="top"><b>Required</b></td>
-</tr>
-  <tr>
-    <td valign="top">value</td>
-    <td align="center" rowspan="4">See
-    <a href="../using.html#arg">Command-line Arguments</a>.</td>
-    <td align="center" rowspan="4">Exactly one of these.</td>
-  </tr>
-  <tr>
-    <td valign="top">line</td>
-  </tr>
-  <tr>
-    <td valign="top">file</td>
-  </tr>
-  <tr>
-    <td valign="top">path</td>
-  </tr>
-  <tr>
-    <td valign="top">compiler</td>
-    <td>Only pass the specified argument if the chosen
-      compiler implementation matches the value of this attribute.
-      Legal values are the
-      same as those in the above <a href="#compilervalues">list</a> of valid
-      compilers.)</td>
-    <td align="center">No</td>
-  </tr>
-</table>
-
-<h3>Examples</h3>
-<pre>  &lt;rmic classname=&quot;com.xyz.FooBar&quot; base=&quot;${build}/classes&quot;/&gt;</pre>
-<p>runs the rmic compiler for the class <code>com.xyz.FooBar</code>. The
-compiled files will be stored in the directory <code>${build}/classes</code>.</p>
-<pre>  &lt;rmic base=&quot;${build}/classes&quot; includes=&quot;**/Remote*.class&quot;/&gt;</pre>
-<p>runs the rmic compiler for all classes with <code>.class</code>
-files below <code>${build}/classes</code> whose classname starts with
-<i>Remote</i>. The compiled files will be stored in the directory
-<code>${build}/classes</code>.</p>
-
-<hr>
-<p align="center">Copyright &copy; 2001-2002 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/CoreTasks/sequential.html b/docs/manual/CoreTasks/sequential.html
deleted file mode 100644
index 87f3618..0000000
--- a/docs/manual/CoreTasks/sequential.html
+++ /dev/null
@@ -1,40 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Sequential Task</title>
-</head>
-
-<body>
-
-<h2>Sequential</h2>
-<h3>Description</h3>
-<p>Sequential is a container task - it can contain other Ant tasks. The nested 
-tasks are simply executed in sequence. Sequential's primary use is to support 
-the sequential execution of a subset of tasks within the 
-<a href="parallel.html">parallel</a> task</p>
-
-<p>The sequential task has no attributes and does not support any nested 
-elements apart from Ant tasks. Any valid Ant task may be embedded within the 
-sequential task.</p>
-
-<h3>Example</h3>
-<pre>
-&lt;parallel&gt;
-  &lt;wlrun ...&gt;
-  &lt;sequential&gt;
-    &lt;sleep seconds=&quot;30&quot;/&gt;
-    &lt;junit ...&gt;
-    &lt;wlstop/&gt;
-  &lt;/sequential&gt;
-&lt;/parallel&gt;
-</pre>
-<p>This example shows how the sequential task is used to execute three tasks in
-sequence, while another task is being executed in a separate thread. </p>
-
-<hr>
-<p align="center">Copyright &copy; 2001 Apache Software Foundation. All rights
-Reserved.</p>
-</body>
-</html>
-
diff --git a/docs/manual/CoreTasks/signjar.html b/docs/manual/CoreTasks/signjar.html
deleted file mode 100644
index 86c69ca..0000000
--- a/docs/manual/CoreTasks/signjar.html
+++ /dev/null
@@ -1,116 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>SignJar Task</title>
-</head>
-
-<body>
-
-<h2><a name="signjar">SignJar</a></h2>
-<h3>Description</h3>
-<p>Signs jar or zip files with the javasign command line tool. The
-tool detailed dependency checking: files are only signed if they
-are not signed. The <tt>signjar</tt> attribute can point to the file to
-generate; if this file exists then
-its modification date is used as a cue as to whether to resign any JAR file.
-<br>  
-<strong>Note:</strong> Requires Java 1.2 or later. </p>
-
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">jar</td>
-    <td valign="top">the jar file to sign</td>
-    <td valign="top" align="center">Yes.</td>
-  </tr>
-  <tr>
-    <td valign="top">alias</td>
-    <td valign="top">the alias to sign under</td>
-    <td valign="top" align="center">Yes.</td>
-  </tr>
-  <tr>
-    <td valign="top">storepass</td>
-    <td valign="top">password for keystore integrity.</td>
-    <td valign="top" align="center">Yes.</td>
-  </tr>
-  <tr>
-    <td valign="top">keystore</td>
-    <td valign="top">keystore location</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">storetype</td>
-    <td valign="top">keystore type</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">keypass</td>
-    <td valign="top">password for private key (if different)</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">sigfile</td>
-    <td valign="top">name of .SF/.DSA file</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">signedjar</td>
-    <td valign="top">name of signed JAR file</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">verbose</td>
-    <td valign="top">(true | false) verbose output when signing</td>
-    <td valign="top" align="center">No; default false</td>
-  </tr>
-  <tr>
-    <td valign="top">internalsf</td>
-    <td valign="top">(true | false) include the .SF file inside the signature
-block</td>
-    <td valign="top" align="center">No; default false</td>
-  </tr>
-  <tr>
-    <td valign="top">sectionsonly</td>
-    <td valign="top">(true | false) don't compute hash of entire manifest</td>
-    <td valign="top" align="center">No; default false</td>
-  </tr>
-  <tr>
-    <td valign="top">lazy</td>
-    <td valign="top">flag to control whether the presence of a signature
-	file means a JAR is signed</td>
-    <td valign="top" align="center">No; default false</td>
-  </tr>  
-</table>
-<h3>Parameters as nested elements</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">fileset</td>
-    <td valign="top">fileset of JAR files to sign</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-</table>  
-<h3>Examples</h3>
-<blockquote>
-  <p><code>&lt;signjar jar=&quot;${dist}/lib/ant.jar&quot;
-alias=&quot;apache-group&quot; storepass=&quot;secret&quot;/&gt;</code></p>
-</blockquote>
-<p>signs the ant.jar with alias &quot;apache-group&quot; accessing the
-keystore and private key via &quot;secret&quot; password.</p>
-<hr>
-<p align="center">Copyright &copy; 2001 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/CoreTasks/sleep.html b/docs/manual/CoreTasks/sleep.html
deleted file mode 100644
index c732e3a..0000000
--- a/docs/manual/CoreTasks/sleep.html
+++ /dev/null
@@ -1,71 +0,0 @@
-<html>
-
-<head>
-<title>Sleep Task</title>
-</head>
-
-<body>
-
-<h2><a name="sleep">Sleep</a></h2>
-<h3>Description</h3>
-<p> A task for sleeping a short period of time, useful when a build or deployment 
-  process requires an interval between tasks.</p>
-
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr> 
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr> 
-    <td valign="top">hours</td>
-    <td valign="top">hours to to add to the sleep time</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr> 
-    <td valign="top">minutes</td>
-    <td valign="top"> minutes to add to the sleep time</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr> 
-    <td valign="top">seconds</td>
-    <td valign="top">seconds to add to the sleep time</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr> 
-    <td valign="top">milliseconds</td>
-    <td valign="top">milliseconds to add to the sleep time</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr> 
-    <td valign="top">failonerror</td>
-    <td valign="top">flag controlling whether to break the build on an error. 
-    </td>
-    <td align="center" valign="top">No</td>
-  </tr>
-</table>
-<p>The sleep time is the sum of specified values, hours, minutes seconds and milliseconds. 
-  A negative value can be supplied to any of them provided the total sleep time 
-  is positive</p>
-<p>Note that sleep times are always hints to be interpred by the OS how it feels 
-  - small times may either be ignored or rounded up to a minimum timeslice. Note 
-  also that the system clocks often have a fairly low granularity too, which complicates 
-  measuring how long a sleep actually took.</p>
-<h3>Examples</h3>
-<pre>   &lt;sleep milliseconds=&quot;10&quot;/&gt;</pre>
-Sleep for about 10 mS. 
-<pre>   &lt;sleep seconds=&quot;2&quot;/&gt;</pre>
-Sleep for about 2 seconds. 
-<pre>   &lt;sleep hours=&quot;1&quot; minutes=&quot;-59&quot; seconds=&quot;-58&quot;/&gt;</pre>
-<p>Sleep for one hour less 59:58, or two seconds again </p>
-<pre>   &lt;sleep /&gt;</pre>
-Sleep for no time at all. This may yield the CPU time to another thread or process. 
-<hr>
-
-<p align="center">Copyright &copy; 2001 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/CoreTasks/sql.html b/docs/manual/CoreTasks/sql.html
deleted file mode 100644
index 9ce04e8..0000000
--- a/docs/manual/CoreTasks/sql.html
+++ /dev/null
@@ -1,288 +0,0 @@
-<html>
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>SQL Task</title>
-</head>
-<body>
-
-<h2><a name="sql">Sql</a></h2>
-<h3>Description</h3>
-<p>Executes a series of SQL statements via JDBC to a database. Statements can 
-either be read in from a text file using the <i>src</i> attribute or from 
-between the enclosing SQL tags.</p>
-
-<p>Multiple statements can be provided, separated by semicolons (or the 
-defined <i>delimiter</i>). Individual lines within the statements can be 
-commented using either --, // or REM at the start of the line.</p>
-
-<p>The <i>autocommit</i> attribute specifies whether auto-commit should be 
-turned on or off whilst executing the statements. If auto-commit is turned 
-on each statement will be executed and committed. If it is turned off the 
-statements will all be executed as one transaction.</p>
-
-<p>The <i>onerror</i> attribute specifies how to proceed when an error occurs 
-during the execution of one of the statements. 
-The possible values are: <b>continue</b> execution, only show the error;
-<b>stop</b> execution and commit transaction;
-and <b>abort</b> execution and transaction and fail task.</p>
-
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-<tr>
-  <td width="12%" valign="top"><b>Attribute</b></td>
-  <td width="78%" valign="top"><b>Description</b></td>
-  <td width="10%" valign="top"><b>Required</b></td>
-</tr>
-<tr>
-  <td width="12%" valign="top">driver</td>
-  <td width="78%" valign="top">Class name of the jdbc driver</td>
-  <td width="10%" valign="top">Yes</td>
-</tr>
-<tr>
-  <td width="12%" valign="top">url</td>
-  <td width="78%" valign="top">Database connection url</td>
-  <td width="10%" valign="top">Yes</td>
-</tr>
-<tr>
-  <td width="12%" valign="top">userid</td>
-  <td width="78%" valign="top">Database user name</td>
-  <td width="10%" valign="top">Yes</td>
-</tr>
-<tr>
-  <td width="12%" valign="top">password</td>
-  <td width="78%" valign="top">Database password</td>
-  <td width="10%" valign="top">Yes</td>
-</tr>
-<tr>
-  <td width="12%" valign="top">src</td>
-  <td width="78%" valign="top">File containing SQL statements</td>
-  <td width="10%" valign="top">Yes, unless statements enclosed within tags</td>
-</tr>
-<tr>
-  <td valign="top">encoding</td>
-  <td valign="top">The encoding of the files containing SQL statements</td>
-  <td align="center">No - defaults to default JVM encoding</td>
-</tr>
-<tr>
-  <td width="12%" valign="top">delimiter</td>
-  <td width="78%" valign="top">String that separates SQL statements</td>
-  <td width="10%" valign="top">No, default &quot;;&quot;</td>
-</tr>
-<tr>
-  <td width="12%" valign="top">autocommit</td>
-  <td width="78%" valign="top">Auto commit flag for database connection (default false)</td>
-  <td width="10%" valign="top">No, default &quot;false&quot;</td>
-</tr>
-<tr>
-  <td width="12%" valign="top">print</td>
-  <td width="78%" valign="top">Print result sets from the statements (default false)</td>
-  <td width="10%" valign="top">No, default &quot;false&quot;</td>
-</tr>
-<tr>
-  <td width="12%" valign="top">showheaders</td>
-  <td width="78%" valign="top">Print headers for result sets from the statements (default true)</td>
-  <td width="10%" valign="top">No, default &quot;true&quot;</td>
-</tr>
-<tr>
-  <td width="12%" valign="top">output</td>
-  <td width="78%" valign="top">Output file for result sets (defaults to System.out)</td>
-  <td width="10%" valign="top">No (print to System.out by default)</td>
-</tr>
-  <tr>
-    <td valign="top">append</td>
-    <td valign="top">whether output should be appended to or overwrite
-    an existing file.  Defaults to false.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-<tr>
-  <td width="12%" valign="top">classpath</td>
-  <td width="78%" valign="top">Classpath used to load driver</td>
-  <td width="10%" valign="top">No (use system classpath)</td>
-</tr>
-  <tr>
-    <td width="12%" valign="top">classpathref</td>
-    <td width="78%" valign="top">The classpath to use, given as a <a href="../using.html#references">reference</a> to a path defined elsewhere.</td>
-  <td width="10%" valign="top">No (use system classpath)</td>
-  </tr>
-<tr>
-  <td width="12%" valign="top">onerror</td>
-  <td width="78%" valign="top">Action to perform when statement fails: continue, stop, abort</td>
-  <td width="10%" valign="top">No, default &quot;abort&quot;</td>
-</tr>
-<tr>
-  <td width="12%" valign="top">rdbms</td>
-  <td width="78%" valign="top">Execute task only if this rdbms</td>
-  <td width="10%" valign="top">No (no restriction)</td>
-</tr>
-<tr>
-  <td width="12%" valign="top">version</td>
-  <td width="78%" valign="top">Execute task only if rdbms version match</td>
-  <td width="10%" valign="top">No (no restriction)</td>
-</tr>
-</table>
-
-<h3>Parameters specified as nested elements</h3>
-<h4>transaction</h4>
-<p>Use nested <code>&lt;transaction&gt;</code> 
-elements to specify multiple blocks of commands to the executed
-executed in the same connection but different transactions. This
-is particularly useful when there are multiple files to execute
-on the same schema.</p>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">src</td>
-    <td valign="top">File containing SQL statements</td>
-    <td valign="top" align="center">Yes, unless statements enclosed within tags</td>
-  </tr>
-</table>
-<h4>fileset</h4>
-<p>You can specify multiple source files via nested <a
-href="../CoreTypes/fileset.html">fileset</a> elements.  Each file of
-the fileset will be run in a transaction of its own, the order by
-which the files of a single fileset will be executed is not
-defined.</p>
-<h4>classpath</h4>
-<p><code>Sql</code>'s <em>classpath</em> attribute is a <a
-href="../using.html#path">PATH like structure</a> and can also be set via a nested
-<em>classpath</em> element. It is used to load the JDBC classes.</p>
-<p>
-The 
-</p>
-
-<h3>Examples</h3>
-<blockquote><pre>&lt;sql
-    driver=&quot;org.database.jdbcDriver&quot;
-    url=&quot;jdbc:database-url&quot;
-    userid=&quot;sa&quot;
-    password=&quot;pass&quot;
-    src=&quot;data.sql&quot;
-/&gt;
-</pre></blockquote>
-
-<p>Connects to the database given in <i>url</i> as the sa user using the 
-org.database.jdbcDriver and executes the SQL statements contained within 
-the file data.sql</p>
-
-<blockquote><pre>&lt;sql
-    driver=&quot;org.database.jdbcDriver&quot;
-    url=&quot;jdbc:database-url&quot;
-    userid=&quot;sa&quot;
-    password=&quot;pass&quot;
-    &gt;
-insert
-into table some_table
-values(1,2,3,4);
-
-truncate table some_other_table;
-&lt;/sql&gt;
-</pre></blockquote>
-
-<p>Connects to the database given in <i>url</i> as the sa
- user using the org.database.jdbcDriver and executes the two SQL statements 
- inserting data into some_table and truncating some_other_table </p>
-
-<p>Note that you may want to enclose your statements in
-<code>&lt;![CDATA[</code> ... <code>]]&gt;</code> sections so you don't
-need to escape <code>&lt;</code>, <code>&gt;</code> <code>&amp;</code>
-or other special characters. For example:</p>
-
-<blockquote><pre>&lt;sql
-    driver=&quot;org.database.jdbcDriver&quot;
-    url=&quot;jdbc:database-url&quot;
-    userid=&quot;sa&quot;
-    password=&quot;pass&quot;
-    &gt;&lt;![CDATA[
-
-update some_table set column1 = column1 + 1 where column2 &lt; 42;
-
-]]&gt;&lt;/sql&gt;
-</pre></blockquote>
-
-<p>The following connects to the database given in url as the sa user using 
-the org.database.jdbcDriver and executes the SQL statements contained within 
-the files data1.sql, data2.sql and data3.sql and then executes the truncate 
-operation on <i>some_other_table</i>.</p>
-
-<blockquote><pre>&lt;sql
-    driver=&quot;org.database.jdbcDriver&quot;
-    url=&quot;jdbc:database-url&quot;
-    userid=&quot;sa&quot;
-    password=&quot;pass&quot; &gt;
-  &lt;transaction  src=&quot;data1.sql&quot; /&gt;
-  &lt;transaction  src=&quot;data2.sql&quot; /&gt;
-  &lt;transaction  src=&quot;data3.sql&quot; /&gt;
-  &lt;transaction&gt;
-    truncate table some_other_table;
-  &lt;/transaction&gt;
-&lt;/sql&gt;
-</pre></blockquote>
-
-<p>The following example does the same as (and may execute additional
-SQL files if there are more files matching the pattern
-<code>data*.sql</code>) but doesn't guarantee that data1.sql will be
-run before <code>data2.sql</code>.</p>
-
-<blockquote><pre>&lt;sql
-    driver=&quot;org.database.jdbcDriver&quot;
-    url=&quot;jdbc:database-url&quot;
-    userid=&quot;sa&quot;
-    password=&quot;pass&quot; &gt;
-  &lt;fileset dir=&quot;.&quot;&gt;
-    &lt;include name=&quot;data*.sql&quot; /&gt;
-  &lt;/fileset&gt;
-  &lt;transaction&gt;
-    truncate table some_other_table;
-  &lt;/transaction&gt;
-&lt;/sql&gt;
-</pre></blockquote>
-
-<p>The following connects to the database given in url as the sa user using the 
-org.database.jdbcDriver and executes the SQL statements contained within the 
-file data.sql, with output piped to outputfile.txt, searching /some/jdbc.jar 
-as well as the system classpath for the driver class.</p>
-
-<blockquote><pre>&lt;sql
-    driver=&quot;org.database.jdbcDriver&quot;
-    url=&quot;jdbc:database-url&quot;
-    userid=&quot;sa&quot;
-    password=&quot;pass&quot;
-    src=&quot;data.sql&quot;
-    print=&quot;yes&quot;
-    output=&quot;outputfile.txt&quot;
-    &gt;
-&lt;classpath&gt;
-	&lt;pathelement location=&quot;/some/jdbc.jar&quot;/&gt;
-&lt;/classpath&gt;
-&lt;/sql&gt;
-</pre></blockquote>
-
-<p>The following will only execute if the RDBMS is &quot;oracle&quot; and the version 
-starts with &quot;8.1.&quot;</p>
-
-<blockquote><pre>&lt;sql
-    driver=&quot;org.database.jdbcDriver&quot;
-    url=&quot;jdbc:database-url&quot;
-    userid=&quot;sa&quot;
-    password=&quot;pass&quot;
-    src=&quot;data.sql&quot;
-    rdbms=&quot;oracle&quot;
-    version=&quot;8.1.&quot;
-    &gt;
-insert
-into table some_table
-values(1,2,3,4);
-
-truncate table some_other_table;
-&lt;/sql&gt;
-</pre></blockquote>
-
-<hr>
-<p align="center">Copyright &copy; 2001-2002 Apache Software Foundation. All rights
-Reserved.</p>
-</body>
-</html>
diff --git a/docs/manual/CoreTasks/style.html b/docs/manual/CoreTasks/style.html
deleted file mode 100644
index 6b3bfb0..0000000
--- a/docs/manual/CoreTasks/style.html
+++ /dev/null
@@ -1,207 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Xslt/Style Task</title>
-</head>
-
-<body>
-
-<h2><a name="style">Xslt/Style</a></h2>
-<h3>Description</h3>
-<p>Process a set of documents via XSLT.</p>
-<p>This is useful for building views of XML based documentation,
-or for generating code.</p>
-<p><b>Note:</b> This task depends on external libraries not included in the Ant distribution.
-See <a href="../install.html#librarydependencies">Library Dependencies</a> for more information.</p>
-<p>It is possible to refine the set of files that are being processed. This can be
-done with the <i>includes</i>, <i>includesfile</i>, <i>excludes</i>, <i>excludesfile</i> and <i>defaultexcludes</i>
-attributes. With the <i>includes</i> or <i>includesfile</i> attribute you specify the files you want to
-have included by using patterns. The <i>exclude</i> or <i>excludesfile</i> attribute is used to specify
-the files you want to have excluded. This is also done with patterns. And
-finally with the <i>defaultexcludes</i> attribute, you can specify whether you
-want to use default exclusions or not. See the section on <a
-href="../dirtasks.html#directorybasedtasks">directory based tasks</a>, on how the
-inclusion/exclusion of files works, and how to write patterns.</p>
-<p>This task forms an implicit <a href="../CoreTypes/fileset.html">FileSet</a> and supports all 
-  attributes of <code>&lt;fileset&gt;</code> (<code>dir</code> becomes <code>basedir</code>) 
-  as well as the nested <code>&lt;include&gt;</code>, <code>&lt;exclude&gt;</code> 
-  and <code>&lt;patternset&gt;</code> elements.</p>
-<p>Style supports the use of a &lt;param&gt; element which is used to pass values 
-  to an &lt;xsl:param&gt; declaration.</p>
-<p><i>&lt;style&gt; and &lt;xslt&gt; refer to the same Ant task and can be used interchangeably.</i></p>
-<p>If you want to use Xalan-J 1 or XSL:P, you also need Ant's optional.jar</p>
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">basedir</td>
-    <td valign="top">where to find the source XML file, default is the
-      project's basedir.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">destdir</td>
-    <td valign="top">directory in which to store the results.</td>
-    <td align="center" valign="top">Yes, unless in and out have been
-      specified.</td>
-  </tr>
-  <tr>
-    <td valign="top">extension</td>
-    <td valign="top">desired file extension to be used for the targets. If not 
-      specified, the default is &quot;.html&quot;.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">style</td>
-    <td valign="top">name of the stylesheet to use - given either relative
-      to the project's basedir or as an absolute path
-      <em><strong>DEPRECATED</strong> - can be specified as a path relative
-          to the basedir attribute of this task as well</em>.
-    </td>
-    <td align="center" valign="top">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">classpath</td> 
-    <td valign="top">the classpath to use when looking up the XSLT
-      processor.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">classpathref</td>
-    <td valign="top">the classpath to use, given as <a
-      href="../using.html#references">reference</a> to a path defined elsewhere.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">force</td>
-    <td valign="top">Recreate target files, even if they are newer
-      than their corresponding source files or the stylesheet.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">processor</td>
-
-    <td valign="top">name of the XSLT processor to use.  Permissible values are
-      &quot;trax&quot; for a TraX compliant processor,
-      &quot;xslp&quot; for the XSL:P processor, &quot;xalan&quot; for
-      the Apache XML Xalan (version 1) processor the name of an
-      arbitrary XSLTLiaison class. Defaults to trax, followed by xalan
-      and then xslp (in that order). The first one found in your class
-      path is the one that is used.
-
-      <em><strong>DEPRECATED</strong> - XSL:P is deprecated and will
-      be removed in the next version. Use trax or xalan instead.</em>.
-      </td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">includes</td>
-    <td valign="top">comma separated list of patterns of files that must be included. 
-      All files are included when omitted.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">includesfile</td>
-    <td valign="top">the name of a file. Each line of this file is taken to be 
-      an include pattern</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">excludes</td>
-    <td valign="top">comma separated list of patterns of files that must be excluded. 
-      No files (except default excludes) are excluded when omitted.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">excludesfile</td>
-    <td valign="top">the name of a file. Each line of this file is taken to be 
-      an exclude pattern</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">defaultexcludes</td>
-    <td valign="top">indicates whether default excludes should be used or not
-      (&quot;yes&quot;/&quot;no&quot;). Default excludes are used when omitted.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">in</td>
-    <td valign="top">specifies a single XML document to be styled. Should be used 
-      with the out attribute.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">out</td>
-    <td valign="top">specifies the output name for the styled result from the 
-      in attribute.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">outputtype</td>
-    <td valign="top">specifies the output method to be used.  Only "xml" is
-      guaranteed to be supported by all translators.  Xalan2 supports "xml",
-      "html", and "text"</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">scanincludeddirectories</td>
-    <td valign="top">If any directories are matched by the
-      includes/excludes patterns, try to transform all files in these
-      directories.  Default is <code>true</code></td>
-    <td valign="top" align="center">No</td>
-  </tr>
-</table>
-<h3>Parameters specified as nested elements</h3>
-<h4>classpath</h4>
-<p>The classpath to load the processor from can be specified via a
-nested <code>&lt;classpath&gt;</code>, as well - that is, a 
-<a href="../using.html#path">path</a>-like structure.</p>
-<h4>param</h4>
-<p>Param is used to pass a parameter to the XSL stylesheet.</p>
-<h4>Parameters</h4>
-<table width="60%" border="1" cellpadding="2" cellspacing="0">
-  <tr> 
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr> 
-    <td valign="top">name</td>
-    <td valign="top">Name of the XSL parameter</td>
-    <td align="center" valign="top">Yes</td>
-  </tr>
-  <tr> 
-    <td valign="top">expression</td>
-    <td valign="top">XSL expression to be placed into the param. To pass a text 
-      value into the style sheet it needs to be escaped using single quotes.</td>
-    <td align="center" valign="top">Yes</td>
-  </tr>
-</table>
-<h3>Examples</h3>
-<blockquote>
-  <pre>
-&lt;style basedir=&quot;doc&quot; destdir=&quot;build/doc&quot;
-       extension=&quot;.html&quot; style=&quot;style/apache.xsl&quot;/&gt;</pre>
-  <h4>Using XSL parameters</h4>
-  <pre>&lt;xslt basedir=&quot;doc&quot; destdir=&quot;build/doc&quot;
-      extension=&quot;.html&quot; style=&quot;style/apache.xsl&quot;&gt;
-  &lt;param name=&quot;date&quot; expression=&quot;07-01-2000&quot;/&gt;
-&lt;/xslt&gt;</pre>
-
-  <p>Then if you declare a global parameter &quot;date&quot; with the top-level
-  element &lt;xsl:param name=&quot;date&quot;/&gt;, the variable
-  <code>$date</code> will subsequently have the value 07-01-2000.
-  </p>
- </blockquote>
-<hr>
-<p align="center">Copyright &copy; 2001-2002 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/CoreTasks/tar.html b/docs/manual/CoreTasks/tar.html
deleted file mode 100644
index 60511f1..0000000
--- a/docs/manual/CoreTasks/tar.html
+++ /dev/null
@@ -1,236 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Tar Task</title>
-</head>
-
-<body>
-
-<h2><a name="tar">Tar</a></h2>
-<h3>Description</h3>
-<p>Creates a tar archive.</p>
-<p>The <i>basedir</i> attribute is the reference directory from where to tar.</p>
-<p>This task is a <a href="../dirtasks.html#directorybasedtasks">directory based task</a>
-and, as such, forms an implicit <a href="../CoreTypes/fileset.html">Fileset</a>. This
-defines which files, relative to the <i>basedir</i>, will be included in the
-archive. The tar task supports all the attributes of Fileset to refine the
-set of files to be included in the implicit fileset.</p>
-
-<p>In addition to the implicit fileset, the tar task supports nested filesets. These
-filesets are extended to allow control over the access mode, username and groupname
-to be applied to the tar entries. This is useful, for example, when preparing archives for
-Unix systems where some files need to have execute permission.</p>
-
-<p>Early versions of tar did not support path lengths greater than 100
-characters. Modern versions of tar do so, but in incompatible ways.
-The behaviour of the tar task when it encounters such paths is
-controlled by the <i>longfile</i> attribute.
-If the longfile attribute is set to <code>fail</code>, any long paths will
-cause the tar task to fail.  If the longfile attribute is set to
-<code>truncate</code>, any long paths will be truncated to the 100 character
-maximum length prior to adding to the archive. If the value of the longfile
-attribute is set to <code>omit</code> then files containing long paths will be
-omitted from the archive.  Either option ensures that the archive can be
-untarred by any compliant version of tar. If the loss of path or file
-information is not acceptable, and it rarely is, longfile may be set to the
-value <code>gnu</code>. The tar task will then produce a GNU tar file which
-can have arbitrary length paths. Note however, that the resulting archive will
-only be able to be untarred with GNU tar.  The default for the longfile
-attribute is <code>warn</code> which behaves just like the gnu option except
-that it produces a warning for each file path encountered that does not match
-the limit.</p>
-
-<p>This task can perform compression by setting the compression attribute to "gzip"
-or "bzip2".</p>
-
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td valign="top" align="center"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">destfile</td>
-    <td valign="top">the tar-file to create.</td>
-    <td align="center" valign="top">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">basedir</td>
-    <td valign="top">the directory from which to zip the files.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">longfile</td>
-    <td valign="top">Determines how long files (&gt;100 chars) are to be
-       handled.  Allowable values are &quot;truncate&quot;, &quot;fail&quot;,
-       &quot;warn&quot;, &quot;omit&quot; and &quot;gnu&quot;.  Default is
-       &quot;warn&quot;.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">includes</td>
-    <td valign="top">comma separated list of patterns of files that must be
-      included. All files are included when omitted.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">includesfile</td>
-    <td valign="top">the name of a file. Each line of this file is
-      taken to be an include pattern</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">excludes</td>
-    <td valign="top">comma separated list of patterns of files that must be
-      excluded. No files (except default excludes) are excluded when omitted.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">excludesfile</td>
-    <td valign="top">the name of a file. Each line of this file is
-      taken to be an exclude pattern</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">defaultexcludes</td>
-    <td valign="top">indicates whether default excludes should be used or not
-      (&quot;yes&quot;/&quot;no&quot;). Default excludes are used when omitted.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">compression</td>
-    <td valign="top">compression method.  Allowable values are 
-       &quot;none&quot;, &quot;gzip&quot; and &quot;bzip2&quot;.  Default is
-       &quot;none&quot;.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-</table>
-
-<h3>Nested Elements</h3>
-The tar task supports nested <a href="../CoreTypes/fileset.html">tarfileset</a> elements. These are
-extended Filesets which, in addition to the standard fileset elements, support three additional
-attributes
-
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td valign="top" align="center"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">mode</td>
-    <td valign="top">An 3 digit octal string, specify the user, group and other modes in
-                     the standard Unix fashion</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">username</td>
-    <td valign="top">The username for the tar entry. This is not the same as the UID, which is
-                     not currently set by the tar task.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">group</td>
-    <td valign="top">The groupname for the tar entry. This is not the same as the GID, which is
-                     not currently set by the tar task.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">prefix</td>
-    <td valign="top">If the prefix attribute is set, all files in the fileset
-    are prefixed with that path in the archive.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">fullpath</td>
-    <td valign="top">If the fullpath attribute is set, the file in the fileset
-    is written with that path in the archive. The prefix attribute, if specified, is
-    ignored. It is an error to have more than one file specified in
-    such a fileset.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">preserveLeadingSlashes</td>
-    <td valign="top">Indicates whether leading `/'s should
-    be preserved in the file names. Default is <code>false</code>.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-</table>
-
-<h3>Examples</h3>
-<pre>  &lt;tar tarfile=&quot;${dist}/manual.tar&quot; basedir=&quot;htdocs/manual&quot;/&gt;
-  &lt;gzip zipfile=&quot;${dist}/manual.tar.gz&quot; src=&quot;${dist}/manual.tar&quot;/&gt;</pre>
-<p>tars all files in the <code>htdocs/manual</code> directory into a file called <code>manual.tar</code>
-in the <code>${dist}</code>  directory, then applies the gzip task to compress
-it.</p>
-<pre>  &lt;tar destfile=&quot;${dist}/manual.tar&quot;
-       basedir=&quot;htdocs/manual&quot;
-       excludes=&quot;mydocs/**, **/todo.html&quot;
-  /&gt;</pre>
-<p>tars all files in the <code>htdocs/manual</code> directory into a file called <code>manual.tar</code>
-in the <code>${dist}</code> directory. Files in the directory <code>mydocs</code>,
-or files with the name <code>todo.html</code> are excluded.</p>
-
-<pre>
-&lt;tar destfile=&quot;${basedir}/docs.tar&quot;&gt;
-  &lt;tarfileset dir=&quot;${dir.src}/docs&quot;
-              fullpath=&quot;/usr/doc/ant/README&quot;
-              preserveLeadingSlashes=&quot;true&quot;&gt;
-    &lt;include name=&quot;readme.txt&quot;/&gt;
-  &lt;/tarfileset&gt;
-  &lt;tarfileset dir=&quot;${dir.src}/docs&quot;
-              prefix=&quot;/usr/doc/ant&quot;
-              preserveLeadingSlashes=&quot;true&quot;&gt;
-    &lt;include name=&quot;*.html&quot;/&gt;
-  &lt;/tarfileset&gt;
-&lt;/tar&gt;</pre>
-
-<p>
-  Writes the file <code>docs/readme.txt</code> as
-  <code>/usr/doc/ant/README</code> into the archive. All
-  <code>*.html</code> files in the <code>docs</code> directory are
-  prefixed by <code>/usr/doc/ant</code>, so for example
-  <code>docs/index.html</code> is written as
-  <code>/usr/doc/ant/index.html</code> to the archive.
-</p>
-
-
-<pre>&lt;tar longfile=&quot;gnu&quot;
-     destfile=&quot;${dist.base}/${dist.name}-src.tar&quot; &gt;
-  &lt;tarfileset dir=&quot;${dist.name}/..&quot; mode=&quot;755&quot; username=&quot;ant&quot; group=&quot;ant&quot;&gt;
-    &lt;include name=&quot;${dist.name}/bootstrap.sh&quot;/&gt;
-    &lt;include name=&quot;${dist.name}/build.sh&quot;/&gt;
-  &lt;/tarfileset&gt;
-  &lt;tarfileset dir=&quot;${dist.name}/..&quot; username=&quot;ant&quot; group=&quot;ant&quot;&gt;
-    &lt;include name=&quot;${dist.name}/**&quot;/&gt;
-    &lt;exclude name=&quot;${dist.name}/bootstrap.sh&quot;/&gt;
-    &lt;exclude name=&quot;${dist.name}/build.sh&quot;/&gt;
-  &lt;/tarfileset&gt;
-&lt;/tar&gt; </pre>
-
-<p>This example shows building a tar which uses the GNU extensions for long paths and
-where some files need to be marked as executable (mode 755)
-and the rest are use the default mode (read-write by owner). The first
-fileset selects just the executable files. The second fileset must exclude
-the executable files and include all others. </p>
-
-<p><strong>Note: </strong> The tar task does not ensure that a file is only selected
-by one fileset. If the same file is selected by more than one fileset, it will be included in the
-tar file twice, with the same path.</p>
-
-<p><strong>Note:</strong> The patterns in the include and exclude
-elements are considered to be relative to the corresponding dir
-attribute as with all other filesets.  In the example above,
-<code>${dist.name}</code> is not an absolute path, but a simple name
-of a directory, so <code>${dist.name}</code> is a valid path relative
-to <code>${dist.name}/..</code>.</p>
-
-<hr>
-<p align="center">Copyright &copy; 2001-2002 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/CoreTasks/taskdef.html b/docs/manual/CoreTasks/taskdef.html
deleted file mode 100644
index 1071e93..0000000
--- a/docs/manual/CoreTasks/taskdef.html
+++ /dev/null
@@ -1,78 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>TaskDef Task</title>
-</head>
-
-<body>
-
-<h2><a name="taskdef">Taskdef</a></h2>
-<h3>Description</h3>
-<p>Adds a task definition to the current project, such that this new task can be
-used in the current project. Two attributes are needed, the name that identifies
-this task uniquely, and the full name of the class (including the packages) that
-implements this task.</p>
-<p>You can also define a group of tasks at once using the file or
-resource attributes.  These attributes point to files in the format of
-Java property files.  Each line defines a single task in the
-format:</p>
-<pre>
-taskname=fully.qualified.java.classname
-</pre>
-<p>Taskdef should be used to add your own tasks to the system. See also &quot;<a
-href="../develop.html#writingowntask">Writing your own task</a>&quot;.</p>
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">name</td>
-    <td valign="top">the name of the task</td>
-    <td valign="top" align="center">Yes, unless file or resource have
-    been specified.</td>
-  </tr>
-  <tr>
-    <td valign="top">classname</td>
-    <td valign="top">the full class name implementing the task</td>
-    <td valign="top" align="center">Yes, unless file or resource have
-    been specified.</td>
-  </tr>
-  <tr>
-    <td valign="top">file</td>
-    <td valign="top">Name of the property file to load
-     taskname/classname pairs from.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">resource</td>
-    <td valign="top">Name of the property resource to load
-     taskname/classname pairs from.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">classpath</td> <td valign="top">the classpath to
-    use when looking up <code>classname</code> or
-    <code>resource</code>.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-</table>
-<h3>Parameters specified as nested elements</h3>
-<h4>classpath</h4>
-<p><code>Taskdef</code>'s <i>classpath</i> attribute is a <a
-href="../using.html#path">PATH like structure</a> and can also be set via a nested
-<i>classpath</i> element.</p>
-<h3>Examples</h3>
-<pre>  &lt;taskdef name=&quot;myjavadoc&quot; classname=&quot;com.mydomain.JavadocTask&quot;/&gt;</pre>
-<p>makes a task called <code>myjavadoc</code> available to Ant. The class <code>com.mydomain.JavadocTask</code>
-implements the task.</p>
-<hr>
-<p align="center">Copyright &copy; 2001 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/CoreTasks/touch.html b/docs/manual/CoreTasks/touch.html
deleted file mode 100644
index 89ae477..0000000
--- a/docs/manual/CoreTasks/touch.html
+++ /dev/null
@@ -1,65 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Touch Task</title>
-</head>
-
-<body>
-
-<h2><a name="touch">Touch</a></h2>
-<h3>Description</h3>
-<p>Changes the modification time of a file and possibly creates it at
-the same time. In addition to working with a single file, this Task
-can also work a <a href="../CoreTypes/fileset.html">Fileset</a> (which
-also includes directories).</p>
-<p>For JDK 1.1 only the creation of new files with a modification time
-of now works, all other cases will emit a warning.</p>
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">file</td>
-    <td valign="top">the name of the file</td>
-    <td valign="top" align="center">unless a nested fileset element
-       has been specified.</td>
-  </tr>
-  <tr>
-    <td valign="top">millis</td>
-    <td valign="top">specifies the new modification time of the file
-       in milliseconds since midnight Jan 1 1970</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">datetime</td>
-    <td valign="top">specifies the new modification time of the file
-       in the format MM/DD/YYYY HH:MM AM_or_PM.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-</table>
-<p>If both <code>millis</code> and <code>datetime</code> are omitted
-the current time is assumed.</p>
-<h3>Examples</h3>
-<pre>  &lt;touch file=&quot;myfile&quot;/&gt;</pre>
-<p>creates <code>myfile</code> if it doesn't exist and changes the
-modification time to the current time.</p>
-<pre>  &lt;touch file=&quot;myfile&quot; datetime=&quot;06/28/2000 2:02 pm&quot;/&gt;</pre>
-<p>creates <code>myfile</code> if it doesn't exist and changes the
-modification time to Jun, 28 2000 2:02 pm (14:02 for those used to 24
-hour times).</p>
-<pre>  &lt;touch datetime=&quot;09/10/1974 4:30 pm&quot;&gt;
-    &lt;fileset dir=&quot;src_dir&quot;/&gt;
-  &lt;/touch&gt;</pre>
-<p>changes the modification time to Oct, 09 1974 4:30 pm of all files and directories 
-  found in <code>src_dir</code>. </p>
-<hr>
-<p align="center">Copyright &copy; 2001 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/CoreTasks/tstamp.html b/docs/manual/CoreTasks/tstamp.html
deleted file mode 100644
index 2974542..0000000
--- a/docs/manual/CoreTasks/tstamp.html
+++ /dev/null
@@ -1,144 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>TStamp Task</title>
-</head>
-
-<body>
-
-<h2><a name="tstamp">Tstamp</a></h2>
-
-<h3>Description</h3>
-<p>Sets the <code>DSTAMP</code>, <code>TSTAMP</code>, and <code>TODAY</code>
-properties in the current project. The <code>DSTAMP</code> property is in the
-format &quot;yyyymmdd&quot;, <code>TSTAMP</code> is in the
-format &quot;hhmm&quot;, and <code>TODAY</code> is in the
-format &quot;month day year&quot;.</p>
-
-<p>These properties can be used in the build-file, for instance, to create
-time-stamped filenames, or used to replace placeholder tags inside documents
-to indicate, for example, the release date. The best place for this task is
-probably in an initialization target.</p>
-
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">prefix</td>
-    <td valign="top">Prefix used for all properties set. The default is no prefix.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-</table>
-
-<h3>Nested Elements</h3>
-The Tstamp task supports a <code>&lt;format&gt;</code> nested element that
-allows a property to be set to the current date and time in a given format.
-The date/time patterns are as defined in the Java
-<a href="http://java.sun.com/products/jdk/1.2/docs/api/java/text/SimpleDateFormat.html">SimpleDateFormat</a> class.
-The format element also allows offsets to be applied to the time to generate different time values.
-<br><br>
-<table width="60%" border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">property</td>
-    <td valign="top">
-        The property to receive the date/time string in the given pattern.
-    </td>
-    <td align="center" valign="top">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">pattern</td>
-    <td valign="top">The date/time pattern to be used. The values are as defined by the Java SimpleDateFormat class.</td>
-    <td align="center" valign="top">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">timezone</td>
-    <td valign="top">The timezone to use for displaying time. The values are as defined by the Java <a href="http://java.sun.com/products/jdk/1.2/docs/api/java/util/TimeZone.html">TimeZone</a> class.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">offset</td>
-    <td valign="top">The numeric offset to the current time</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">unit</td>
-    <td valign="top">The unit of the offset to be applied to the current time.
-                     Valid Values are
-                     <ul>
-                        <li>millisecond</li>
-                        <li>second</li>
-                        <li>minute</li>
-                        <li>hour</li>
-                        <li>day</li>
-                        <li>week</li>
-                        <li>month</li>
-                        <li>year</li>
-                     </ul>
-    </td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">locale</td>
-    <td valign="top">The locale used to create date/time string. The general
-      form is &quot;language, country, variant&quot; but either variant or variant and
-      country may be omitted. For more information please refer to documentation
-      for the
-      <a href="http://java.sun.com/j2se/1.3/docs/api/java/util/Locale.html">Locale</a>
-      class.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-</table>
-
-<h3>Examples</h3>
-
-<pre>
-  &lt;tstamp/&gt;
-</pre>
-
-<p>
-sets the standard <code>DSTAMP</code>, <code>TSTAMP</code>,
-and <code>TODAY</code> properties according to the default formats.</p>
-<pre>
-  &lt;tstamp&gt;
-    &lt;format property=&quot;TODAY_UK&quot; pattern=&quot;d-MMMM-yyyy&quot; locale=&quot;en&quot;/&gt;
-  &lt;/tstamp&gt;
-</pre>
-<p>
-sets the standard properties as well as the property
-<code>TODAY_UK</code> with the date/time pattern &quot;d-MMMM-yyyy&quot;
-using English locale (eg. 21-May-2001).</p>
-
-<pre>
-  &lt;tstamp&gt;
-      &lt;format property=&quot;touch.time&quot; pattern=&quot;MM/dd/yyyy hh:mm aa&quot;
-              offset=&quot;-5&quot; unit=&quot;hour&quot;/&gt;
-  &lt;/tstamp&gt;
-</pre>
-<p>
-Creates a timestamp, in the property touch.time, 5 hours before the current time. The format in this example
-is suitable for use with the &lt;touch&gt; task. The standard properties are set also.</p>
-
-<pre>
-  &lt;tstamp prefix="start"/&gt;
-</pre>
-<p>
-Sets three properties with the standard formats, prefixed with "start.": 
-<code>start.DSTAMP</code>, <code>start.TSTAMP</code>, and <code>start.TODAY</code>.</p>
-
-
-<hr>
-<p align="center">Copyright &copy; 2002 Apache Software Foundation. All rights Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/CoreTasks/typedef.html b/docs/manual/CoreTasks/typedef.html
deleted file mode 100644
index 9327653..0000000
--- a/docs/manual/CoreTasks/typedef.html
+++ /dev/null
@@ -1,81 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Typedef Task</title>
-</head>
-
-<body>
-
-<h2><a name="typedef">Typedef</a></h2>
-<h3>Description</h3>
-<p>Adds a data type definition to the current project, such that this
-new type can be used in the current project. Two attributes are
-needed, the name that identifies this data type uniquely, and the full
-name of the class (including the packages) that implements this
-type.</p>
-<p>You can also define a group of data types at once using the file or
-resource attributes.  These attributes point to files in the format of
-Java property files.  Each line defines a single data type in the
-format:</p>
-<pre>
-typename=fully.qualified.java.classname
-</pre>
-<p>Typedef should be used to add your own types to the system. Data
-types are things like <a href="../using.html#path">paths</a> or <a
-href="../CoreTypes/fileset.html">filesets</a> that can be defined at
-the project level and referenced via their ID attribute.</p>
-<p>Custom data types usually need custom tasks to put them to good use.</p>
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">name</td>
-    <td valign="top">the name of the data type</td>
-    <td valign="top" align="center">Yes, unless file or resource have
-    been specified.</td>
-  </tr>
-  <tr>
-    <td valign="top">classname</td>
-    <td valign="top">the full class name implementing the data type</td>
-    <td valign="top" align="center">Yes, unless file or resource have
-    been specified.</td>
-  </tr>
-  <tr>
-    <td valign="top">file</td>
-    <td valign="top">Name of the property file to load
-     typename/classname pairs from.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">resource</td>
-    <td valign="top">Name of the property resource to load
-     typename/classname pairs from.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">classpath</td> <td valign="top">the classpath to
-      use when looking up <code>classname</code>.</td> <td
-    align="center" valign="top">No</td>
-  </tr>
-</table>
-<h3>Parameters specified as nested elements</h3>
-<h4>classpath</h4>
-<p><code>Typedef</code>'s <i>classpath</i> attribute is a 
-<a href="../using.html#path">PATH like structure</a> and can also be set
-via a nested <i>classpath</i> element.</p>
-<h3>Examples</h3>
-<pre>  &lt;typedef name=&quot;urlset&quot; classname=&quot;com.mydomain.URLSet&quot;/&gt;</pre>
-<p>makes a data type called <code>urlset</code> available to Ant. The
-class <code>com.mydomain.URLSet</code> implements this type.</p>
-<hr>
-<p align="center">Copyright &copy; 2001 Apache Software
-Foundation. All rights Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/CoreTasks/unpack.html b/docs/manual/CoreTasks/unpack.html
deleted file mode 100644
index f58937f..0000000
--- a/docs/manual/CoreTasks/unpack.html
+++ /dev/null
@@ -1,63 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>GUnzip/BUnzip2 Task</title>
-</head>
-
-<body>
-
-<h2><a name="unpack">GUnzip/BUnzip2</a></h2>
-<h3>Description</h3>
-<p>Expands a file packed using GZip or BZip2.</p>
-
-<p>If <i>dest</i> is a directory the name of the destination file is
-the same as <i>src</i> (with the &quot;.gz&quot; or &quot;.bz2&quot;
-extension removed if present). If <i>dest</i> is omitted, the parent
-dir of <i>src</i> is taken. The file is only expanded if the source
-file is newer than the destination file, or when the destination file
-does not exist.</p>
-
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">src</td>
-    <td valign="top">the file to expand.</td>
-    <td align="center" valign="top">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">dest</td>
-    <td valign="top">the destination file or directory.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-</table>
-<h3>Examples</h3>
-<blockquote>
-  <p><code>&lt;gunzip src=&quot;test.tar.gz&quot;/&gt;</code></p>
-</blockquote>
-<p>expands <i>test.tar.gz</i> to <i>test.tar</i></p>
-<blockquote>
-  <p><code>&lt;bunzip2 src=&quot;test.tar.bz2&quot;/&gt;</code></p>
-</blockquote>
-<p>expands <i>test.tar.bz2</i> to <i>test.tar</i></p>
-<blockquote>
-  <p><code>&lt;gunzip src=&quot;test.tar.gz&quot; dest=&quot;test2.tar&quot;/&gt;</code></p>
-</blockquote>
-<p>expands <i>test.tar.gz</i> to <i>test2.tar</i></p>
-<blockquote>
-  <p><code>&lt;gunzip src=&quot;test.tar.gz&quot; dest=&quot;subdir&quot;/&gt;</code></p>
-</blockquote>
-<p>expands <i>test.tar.gz</i> to <i>subdir/test.tar</i> (assuming
-subdir is a directory).</p>
-
-<hr>
-<p align="center">Copyright &copy; 2001 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
diff --git a/docs/manual/CoreTasks/untar.html b/docs/manual/CoreTasks/untar.html
deleted file mode 100644
index 796be64..0000000
--- a/docs/manual/CoreTasks/untar.html
+++ /dev/null
@@ -1,18 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Untar Task</title>
-</head>
-
-<body>
-
-<h2><a name="untar">Untar</a></h2>
-<h3>Description</h3>
-<p>Untars a tarfile.</p>
-
-This document has moved <A HREF="unzip.html">here</A>
-
-</body>
-</html>
-
diff --git a/docs/manual/CoreTasks/unzip.html b/docs/manual/CoreTasks/unzip.html
deleted file mode 100644
index fb8bb6b..0000000
--- a/docs/manual/CoreTasks/unzip.html
+++ /dev/null
@@ -1,98 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Unzip Task</title>
-</head>
-
-<body>
-
-<h2><a name="unzip">Unjar/Untar/Unwar/Unzip</a></h2>
-<h3>Description</h3>
-<p>Unzips a zip-, war-, tar- or jarfile.</p>
-<p>For JDK 1.1 &quot;last modified time&quot; field is set to current time instead of being
-carried from the archive file.</p>
-<p><a href="../CoreTypes/patternset.html">PatternSet</a>s are used to select files to extract
-<I>from</I> the archive.  If no patternset is used, all files are extracted.
-</p>
-<p><a href="../CoreTypes/fileset.html">FileSet</a>s may be used used to select archived files
-to perform unarchival upon.
-</p>
-<p>File permissions will not be restored on extracted files.</p>
-<p>The untar task recognizes the long pathname entries used by GNU tar.<p>
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">src</td>
-    <td valign="top">archive file to expand.</td>
-    <td align="center" valign="top">Yes, if filesets are not used.</td>
-  </tr>
-  <tr>
-    <td valign="top">dest</td>
-    <td valign="top">directory where to store the expanded files.</td>
-    <td align="center" valign="top">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">overwrite</td>
-    <td valign="top">Overwrite files, even if they are newer than the
-      corresponding entries in the archive (true or false, default is
-      true).</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">compression</td>
-    <td valign="top">compression method for untar.  Allowable values are
-       &quot;none&quot;, &quot;gzip&quot; and &quot;bzip2&quot;.  Default is
-       &quot;none&quot;.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-
-</table>
-<h3>Examples</h3>
-<blockquote>
-  <p><code>&lt;unzip src=&quot;${tomcat_src}/tools-src.zip&quot; dest=&quot;${tools.home}&quot;
-  /&gt;</code></p>
-</blockquote>
-<blockquote>
-  <p><code>
-&lt;gunzip src=&quot;tools.tar.gz&quot;/&gt;<br>
-&lt;untar src=&quot;tools.tar&quot; dest=&quot;${tools.home}&quot;/&gt;
-</code></p>
-</blockquote>
-<blockquote>
-<p><pre>
-&lt;unzip src=&quot;${tomcat_src}/tools-src.zip&quot;
-       dest=&quot;${tools.home}&quot;&gt;
-    &lt;patternset&gt;
-        &lt;include name=&quot;**/*.java&quot;/&gt;
-        &lt;exclude name=&quot;**/Test*.java&quot;/&gt;
-    &lt;patternset/&gt;
-&lt;unzip/&gt;
-</pre></p>
-</blockquote>
-<blockquote>
-<p><pre>
-&lt;unzip dest=&quot;${tools.home}&quot;&gt;
-    &lt;patternset&gt;
-        &lt;include name=&quot;**/*.java&quot;/&gt;
-        &lt;exclude name=&quot;**/Test*.java&quot;/&gt;
-    &lt;patternset/&gt;
-    &lt;fileset dir=&quot;.&quot;&gt;
-        &lt;include name=&quot;**/*.zip&quot;/&gt;
-        &lt;exclude name=&quot;**/tmp*.zip&quot;/&gt;
-    &lt;fileset/&gt;
-&lt;unzip/&gt;
-</pre></p>
-</blockquote>
-<hr>
-<p align="center">Copyright &copy; 2001-2002 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/CoreTasks/uptodate.html b/docs/manual/CoreTasks/uptodate.html
deleted file mode 100644
index efb7489..0000000
--- a/docs/manual/CoreTasks/uptodate.html
+++ /dev/null
@@ -1,121 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Uptodate Task</title>
-</head>
-
-<body>
-
-<h2><a name="uptodate">Uptodate</a></h2>
-<h3>Description</h3>
-<p>Sets a property if a target file or set of target files is more up-to-date
-than a source file or set of source files. A single source file is specified
-using the <code>srcfile</code> attribute. A set of source files is specified
-using the nested <code>&lt;srcfiles&gt;</code>
-elements. These are <a href="../CoreTypes/fileset.html">FileSet</a>s,
-whereas multiple target files are specified using a nested
-<a href="../CoreTypes/mapper.html"><code>&lt;mapper&gt;</code></a> element.</p>
-<p>By default, the value of the property is set to <code>true</code> if
-the timestamp of the target file(s) is more recent than the timestamp of
-the corresponding source file(s). You can set the value to something other
-than the default by specifying the <code>value</code> attribute.</p>
-<p>If a <code>&lt;srcfiles&gt;</code> element is used, without also specifying
-a <code>&lt;mapper&gt;</code> element, the default behavior is to use a
-<a href="../CoreTypes/mapper.html#merge-mapper">merge mapper</a>, with the
-<code>to</code> attribute set to the value of the
-<code>targetfile</code> attribute.</p>
-<p>Normally, this task is used to set properties that are useful to avoid
-target execution depending on the relative age of the specified files.</p>
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">property</td>
-    <td valign="top">The name of the property to set.</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">value</td>
-    <td valign="top">The value to set the property to.</td>
-    <td valign="top" align="center">No; defaults to <code>true</code>.</td>
-  </tr>
-  <tr>
-    <td valign="top">srcfile</td>
-    <td valign="top">The file to check against the target file(s).</td>
-    <td valign="top" align="center">Yes, unless a nested
-      <code>&lt;srcfiles&gt;</code> element is present.</td>
-  </tr>
-  <tr>
-    <td valign="top">targetfile</td>
-    <td valign="top">The file for which we want to determine the status.</td>
-    <td valign="top" align="center">Yes, unless a nested
-      <code>&lt;mapper&gt;</code> element is present.</td>
-  </tr>
-</table>
-
-<h3>Parameters specified as nested elements</h3>
-<h4><a name="srcfiles">srcfiles</a></h4>
-<p>The nested <code>&lt;srcfiles&gt;</code> element allows you to specify a
-set of files to check against the target file(s).</p>
-
-<p><strong>Note:</strong> You can specify either the <code>srcfile</code>
-attribute or nested <code>&lt;srcfiles&gt;</code> elements, but not both.
-
-<h4><a name="mapper">mapper</a></h4>
-<p>The nested <code>&lt;mapper&gt;</code> element allows you to specify
-a set of target files to check for being up-to-date with respect to a
-set of source files.</p>
-
-<h3>Examples</h3>
-<pre>  &lt;uptodate property=&quot;xmlBuild.notRequired&quot; targetfile=&quot;${deploy}\xmlClasses.jar&quot; &gt;
-    &lt;srcfiles dir= &quot;${src}/xml&quot; includes=&quot;**/*.dtd&quot;/&gt;
-  &lt;/uptodate&gt;</pre>
-<p>sets the property <code>xmlBuild.notRequired</code> to <code>true</code>
-if the <code>${deploy}/xmlClasses.jar</code> file is more up-to-date than
-any of the DTD files in the <code>${src}/xml</code> directory.</p>
-<p>This can be written as:</p>
-<pre>  &lt;uptodate property=&quot;xmlBuild.notRequired&quot;&gt;
-    &lt;srcfiles dir= &quot;${src}/xml&quot; includes=&quot;**/*.dtd&quot;/&gt;
-    &lt;mapper type=&quot;merge&quot; to=&quot;${deploy}\xmlClasses.jar&quot;/&gt;
-  &lt;/uptodate&gt;</pre>
-as well.
-
-The <code>xmlBuild.notRequired</code> property can then be used in a
-<code>&lt;target&gt;</code> tag's <code>unless</code> attribute to
-conditionally run that target. For example, running the following target:</p>
-<pre>
-&lt;target name=&quot;xmlBuild&quot; depends="chkXmlBuild" unless="xmlBuild.notRequired&quot;&gt;
-  ...
-&lt;/target&gt;
-</pre>
-will first run the <code>chkXmlBuild</code> target, which contains
-the <code>&lt;uptodate&gt;</code> task that determines whether
-<code>xmlBuild.notRequired</code> gets set. The property named in
-the <code>unless</code> attribute is then checked for being set/not set.
-If it did get set (ie., the jar file is up-to-date),
-then the <code>xmlBuild</code> target won't be run.
-</p>
-
-<p> The following example shows a single source file being checked
-against a single target file:</p>
-<pre>  &lt;uptodate property=&quot;isUpToDate&quot;
-            srcfile=&quot;/usr/local/bin/testit&quot;
-            targetfile=&quot;${build}/.flagfile&quot;/&gt;
-</pre>
-<p>sets the property <code>isUpToDate</code> to <code>true</code>
-if <code>/usr/local/bin/testit</code> is newer than
-<code>${build}/.flagfile</code>.</p>
-</p>
-
-<hr>
-<p align="center">Copyright &copy; 2001-2002 Apache Software Foundation.
-All rights Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/CoreTasks/waitfor.html b/docs/manual/CoreTasks/waitfor.html
deleted file mode 100644
index 301fc9b..0000000
--- a/docs/manual/CoreTasks/waitfor.html
+++ /dev/null
@@ -1,117 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>WaitFor Task</title>
-</head>
-
-<body>
-
-<h2>Waitfor</h2>
-<h3>Description</h3>
-<p>Blocks execution until a set of specified conditions become true. This is intended
-  to be used with the <a href="parallel.html">parallel</a> task to
-  synchronize a set of processes.</p>
-<p>The conditions to wait for are defined in <a href="waitfor.html#nested">nested elements</a>,
-if multiple conditions are specified, then the task will wait until all conditions are true..</p>
-<p></p>
-<p>If both maxwait and maxwaitunit are not specified, the maxwait is 3 minutes (180000 milliseconds).</p>
-<p>If the <code>timeoutproperty</code> attribute has been set, a
-property of that name will be created if the condition didn't come
-true within the specified time.</p>
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">maxwait</td>
-    <td valign="top">The maximum amount of time to wait for all the required conditions
-      to become true before failing the task. Defaults to 180000 maxwaitunits.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">maxwaitunit</td>
-    <td valign="top">The unit of time that must be used to interpret the value of the
-    maxwait attribute.  Defaults to millisecond.
-                     Valid Values are
-                     <ul>
-                        <li>millisecond</li>
-                        <li>second</li>
-                        <li>minute</li>
-                        <li>hour</li>
-                        <li>day</li>
-                        <li>week</li>
-                     </ul>
-      </td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">checkevery</td>
-    <td valign="top">The amount of time to wait between each test of the conditions.
-      Defaults to 500 checkeveryunits.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">checkeveryunit</td>
-    <td valign="top">The unit of time that must be used to interpret the value of the
-    checkevery attribute.  Defaults to millisecond.
-                     Valid Values are
-                     <ul>
-                        <li>millisecond</li>
-                        <li>second</li>
-                        <li>minute</li>
-                        <li>hour</li>
-                        <li>day</li>
-                        <li>week</li>
-                     </ul>
-    </td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">timeoutproperty</td>
-    <td valign="top">the name of the property to set if maxwait has
-      been exceeded.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-</table>
-<h3><a name="nested">Nested Elements</a></h3>
-
-<p>The available conditions that satisfy the
-<code>&lt;waitfor&gt;</code> task are the same as those for the
-<a href="condition.html"><code>&lt;condition&gt;</code></a> task. See
-<a href="conditions.html">here</a> for the full list.</p>
-
-<h3>Examples</h3>
-<blockquote>
-  <p><code>&lt;waitfor maxwait=&quot;30&quot; maxwaitunit=&quot;second&quot;&gt;<br>
-    &nbsp;&nbsp;&nbsp;&nbsp;&lt;available file="errors.log"/&gt;<br>
-    &lt;/waitfor&gt;</code></p>
-</blockquote>
-<p>waits up to 30 seconds for a file called errors.log to appear.</p>
-<blockquote>
-  <p><code>&lt;waitfor maxwait=&quot;3&quot; maxwaitunit=&quot;minute&quot; checkevery=&quot;500&quot;&gt;<br>
-    &nbsp;&nbsp;&nbsp;&nbsp;&lt;http url=&quot;http://localhost/myapp/index.html&quot;/&gt;<br>
-    &lt;/waitfor&gt;</code></p>
-</blockquote>
-<p>waits up to 3 minutes (and checks every 500 milliseconds) for a web server on localhost
-  to serve up the specified URL.</p>
-<blockquote>
-  <p><code>&lt;waitfor maxwait=&quot;10&quot; maxwait=&quot;second&quot;&gt;<br>
-    &nbsp;&nbsp;&nbsp;&nbsp;&lt;and&gt;<br>
-    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;socket server=&quot;dbserver&quot; port=&quot;1521&quot;/&gt;<br>
-    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;http url=&quot;http://webserver/mypage.html&quot;/&gt;<br>
-    &nbsp;&nbsp;&nbsp;&nbsp;&lt;/and&gt;<br>
-    &lt;/waitfor&gt;</code></p>
-</blockquote>
-<p>waits up to 10 seconds for a server on the dbserver machine to begin listening
-  on port 1521 and for the http://webserver/mypage.html web page
-  to become available.</p>
-<hr><p align="center">Copyright &copy; 2001 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/CoreTasks/war.html b/docs/manual/CoreTasks/war.html
deleted file mode 100644
index 0c231d8..0000000
--- a/docs/manual/CoreTasks/war.html
+++ /dev/null
@@ -1,169 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>WAR Task</title>
-</head>
-
-<body>
-
-<h2><a name="war">War</a></h2>
-<h3>Description</h3>
-<p>An extension of the <a href="jar.html">Jar</a> task with special
-treatment for files that should end up in the
-<code>WEB-INF/lib</code>, <code>WEB-INF/classes</code> or
-<code>WEB-INF</code> directories of the Web Application Archive.</p>
-<p>(The War task is a shortcut for specifying the particular layout of a WAR file. 
-The same thing can be accomplished by using the <i>prefix</i> and <i>fullpath</i>
-attributes of zipfilesets in a Zip or Jar task.)</p>
-<p>The extended zipfileset element from the zip task (with attributes <i>prefix</i>, <i>fullpath</i>, and <i>src</i>) is available in the War task.</p>
-
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">destfile</td>
-    <td valign="top">the WAR file to create.</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">webxml</td>
-    <td valign="top">The deployment descriptor to use (WEB-INF/web.xml).</td>
-    <td valign="top" align="center">Yes, unless update is set to true</td>
-  </tr>
-  <tr>
-    <td valign="top">basedir</td>
-    <td valign="top">the directory from which to jar the files.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">compress</td>
-    <td valign="top">Not only store data but also compress them, defaults to true</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">encoding</td>
-    <td valign="top">The character encoding to use for filenames
-      inside the archive.  Defaults to UTF8. <strong>It is not
-      recommended to change this value as the created archive will most
-      likely be unreadable for Java otherwise.</strong></td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">filesonly</td>
-    <td valign="top">Store only file entries, defaults to false</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">includes</td>
-    <td valign="top">comma separated list of patterns of files that must be
-      included. All files are included when omitted.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">includesfile</td>
-    <td valign="top">the name of a file. Each line of this file is
-      taken to be an include pattern</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">excludes</td>
-    <td valign="top">comma separated list of patterns of files that must be
-      excluded. No files (except default excludes) are excluded when omitted.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">excludesfile</td>
-    <td valign="top">the name of a file. Each line of this file is
-      taken to be an exclude pattern</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">defaultexcludes</td>
-    <td valign="top">indicates whether default excludes should be used or not
-      (&quot;yes&quot;/&quot;no&quot;). Default excludes are used when omitted.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">manifest</td>
-    <td valign="top">the manifest file to use.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">update</td>
-    <td valign="top">indicates whether to update or overwrite
-      the destination file if it already exists.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-</table>
-<h3>Nested elements</h3>
-<h4>lib</h4>
-<p>The nested <code>lib</code> element specifies a <a
-href="../CoreTypes/fileset.html">FileSet</a>. All files included in this fileset will
-end up in the <code>WEB-INF/lib</code> directory of the war file.</p>
-<h4>classes</h4>
-<p>The nested <code>classes</code> element specifies a <a
-href="../CoreTypes/fileset.html">FileSet</a>. All files included in this fileset will
-end up in the <code>WEB-INF/classes</code> directory of the war file.</p>
-<h4>webinf</h4>
-<p>The nested <code>webinf</code> element specifies a <a
-href="../CoreTypes/fileset.html">FileSet</a>. All files included in this fileset will
-end up in the <code>WEB-INF</code> directory of the war file. If this
-fileset includes a file named <code>web.xml</code>, the file is
-ignored and you will get a warning.</p>
-<h4>metainf</h4>
-<p>The nested <code>metainf</code> element specifies a <a
-href="../CoreTypes/fileset.html">FileSet</a>. All files included in this fileset will
-end up in the <code>META-INF</code> directory of the war file. If this
-fileset includes a file named <code>MANIFEST.MF</code>, the file is
-ignored and you will get a warning.</p>
-<h3>Examples</h3>
-<p>Assume the following structure in the project's base directory:</p>
-<pre>
-thirdparty/libs/jdbc1.jar
-thirdparty/libs/jdbc2.jar
-build/main/com/myco/myapp/Servlet.class
-src/metadata/myapp.xml
-src/html/myapp/index.html
-src/jsp/myapp/front.jsp
-src/graphics/images/gifs/small/logo.gif
-src/graphics/images/gifs/large/logo.gif
-</pre>
-then the war file <code>myapp.war</code> created with
-<pre>
-&lt;war destfile=&quot;myapp.war&quot; webxml=&quot;src/metadata/myapp.xml&quot;&gt;
-  &lt;fileset dir=&quot;src/html/myapp&quot;/&gt;
-  &lt;fileset dir=&quot;src/jsp/myapp&quot;/&gt;
-  &lt;lib dir=&quot;thirdparty/libs&quot;&gt;
-    &lt;exclude name=&quot;jdbc1.jar&quot;/&gt;
-  &lt;/lib&gt;
-  &lt;classes dir=&quot;build/main&quot;/&gt;
-  &lt;zipfileset dir=&quot;src/graphics/images/gifs&quot; 
-              prefix=&quot;images&quot;/&gt;
-&lt;/war&gt;
-</pre>
-will consist of
-<pre>
-WEB-INF/web.xml
-WEB-INF/lib/jdbc2.jar
-WEB-INF/classes/com/myco/myapp/Servlet.class
-META-INF/MANIFEST.MF
-index.html
-front.jsp
-images/small/logo.gif
-images/large/logo.gif
-</pre>
-using Ant's default manifest file. The content of
-<code>WEB-INF/web.xml</code> is identical to
-<code>src/metadata/myapp.xml</code>.
-<hr>
-<p align="center">Copyright &copy; 2001-2002 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/CoreTasks/xmlproperty.html b/docs/manual/CoreTasks/xmlproperty.html
deleted file mode 100644
index c26bdab..0000000
--- a/docs/manual/CoreTasks/xmlproperty.html
+++ /dev/null
@@ -1,93 +0,0 @@
-<html>
-<head>
-<title>XmlProperty Task</title>
-</head>
-
-<body>
-
-
-<h2><a name="xmlproperty">XmlProperty</a></h2>
-<h3>Description</h3>
-<p>
-Loads property values from a valid xml file.
-</p>
-
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">file</td>
-    <td valign="top">The XML file to parse.</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">prefix</td>
-    <td valign="top">The prefix to prepend to each property</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">keepRoot</td>
-    <td valign="top">If false, it doesn't include the xml root tag as a first
-                     value in the property name.</td>
-    <td valign="top" align="center">No, default is <i>true</i>.</td>
-  </tr>  
-  <tr>
-    <td valign="top">validate</td>
-    <td valign="top">If true, it enables validation.</td>
-    <td valign="top" align="center">No, default is <i>false</i>.</td>
-  </tr>
-  <tr>
-    <td valign="top">collapseAttributes</td>
-    <td valign="top">If true, it treats attributes as nested elements.</td>
-    <td valign="top" align="center">No, default is <i>false</i>.</td>
-  </tr>  
-</table>
-
-
-<h3>Examples</h3>
-<pre>   &lt;xmlproperty file="somefile.xml" /&gt;</pre>
-
-<p>Load contents of somefile.xml as Ant properties.</p>
-
-<pre> 
-   &lt;root-tag myattr="true"&gt;
-    &lt;inner-tag someattr="val"&gt;Text&lt;/inner-tag&gt;
-    &lt;a2&gt;&lt;a3&gt;&lt;a4&gt;false&lt;/a4&gt;&lt;/a3&gt;&lt;/a2&gt;
-   &lt;/root-tag&gt;
-</pre>
-
-<p>This is an example xml file.</p>
-
-<pre>   root-tag(myattr)=true
-   root-tag.inner-tag=Text
-   root-tag.inner-tag(someattr)=val
-   root-tag.a2.a3.a4=false
-</pre>
-
-<p>These are the properties loaded by this task from the previous example file.</p>
-
-<pre>   &lt;xmlproperty file="somefile.xml" collapseAttributes="true" /&gt;</pre>
-
-<p>Load contents of somefile.xml as Ant properties collapsing attributes as nodes.</p>
-
-<pre>   root-tag.myattr=true
-   root-tag.inner-tag=Text
-   root-tag.inner-tag.someatt=val
-   root-tag.a2.a3.a4=false
-</pre>
-
-<p>These are the properties loaded by this task from the previous example file, with
-   attribute collapsing true.</p>
-
-<hr/>
-
-<p align="center">Copyright &copy; 2002 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/CoreTasks/zip.html b/docs/manual/CoreTasks/zip.html
deleted file mode 100644
index 71a84f1..0000000
--- a/docs/manual/CoreTasks/zip.html
+++ /dev/null
@@ -1,220 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Zip Task</title>
-</head>
-
-<body>
-
-<h2><a name="zip">Zip</a></h2>
-<h3>Description</h3>
-<p>Creates a zipfile.</p>
-<p>The <i>basedir</i> attribute is the reference directory from where to zip.</p>
-<p>Note that file permissions will not be stored in the resulting zipfile.</p>
-<p>It is possible to refine the set of files that are being zipped. This can be
-done with the <i>includes</i>, <i>includesfile</i>, <i>excludes</i>, <i>excludesfile</i> and <i>defaultexcludes</i>
-attributes. With the <i>includes</i> or <i>includesfile</i> attribute you specify the files you want to
-have included by using patterns. The <i>exclude</i> or <i>excludesfile</i> attribute is used to specify
-the files you want to have excluded. This is also done with patterns. And
-finally with the <i>defaultexcludes</i> attribute, you can specify whether you
-want to use default exclusions or not. See the section on <a
-href="../dirtasks.html#directorybasedtasks">directory based tasks</a>, on how the
-inclusion/exclusion of files works, and how to write patterns. </p>
-<p>This task forms an implicit <a href="../CoreTypes/fileset.html">FileSet</a> and
-supports all attributes of <code>&lt;fileset&gt;</code>
-(<code>dir</code> becomes <code>basedir</code>) as well as the nested
-<code>&lt;include&gt;</code>, <code>&lt;exclude&gt;</code> and
-<code>&lt;patternset&gt;</code> elements.</p>
-<p>Or, you may place within it nested file sets, or references to file sets.
-In this case <code>basedir</code> is optional; the implicit file set is <i>only used</i>
-if <code>basedir</code> is set. You may use any mixture of the implicit file set
-(with <code>basedir</code> set, and optional attributes like <code>includes</code>
-and optional subelements like <code>&lt;include&gt;</code>); explicit nested
-<code>&lt;fileset&gt;</code> elements so long as at least one fileset total is specified. The ZIP file will
-only reflect the relative paths of files <i>within</i> each fileset. The Zip task and its derivatives know a special form of a fileset named zipfileset that has additional attributes (described below). </p>
-<p>The Zip task also supports the merging of multiple zip files into the zip file. 
-This is possible through either the <i>src</i> attribute of any nested filesets 
-or by using the special nested fileset <i>zipgroupfileset</i>.</p>
-<p>The <code>update</code> parameter controls what happens if the
-ZIP file already exists. When set to <code>yes</code>, the ZIP file is
-updated with the files specified. (New files are added; old files are
-replaced with the new versions.) When set to <code>no</code> (the
-default) the ZIP file is overwritten.</p>
-<p>The <code>whenempty</code> parameter controls what happens when no files match.
-If <code>skip</code> (the default), the ZIP is not created and a warning is issued.
-If <code>fail</code>, the ZIP is not created and the build is halted with an error.
-If <code>create</code>, an empty ZIP file (explicitly zero entries) is created,
-which should be recognized as such by compliant ZIP manipulation tools.</p>
-<p>This task will now use the platform's default character encoding
-for filenames - this is consistent with the command line ZIP tools,
-but causes problems if you try to open them from within Java and your
-filenames contain non US-ASCII characters. Use the encoding attribute
-and set it to UTF8 to create zip files that can safely be read by
-Java.</p>
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td valign="top" align="center"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">destfile</td>
-    <td valign="top">the zip-file to create.</td>
-    <td align="center" valign="top">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">basedir</td>
-    <td valign="top">the directory from which to zip the files.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">compress</td>
-    <td valign="top">Not only store data but also compress them, defaults to true</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">encoding</td>
-    <td valign="top">The character encoding to use for filenames
-    inside the zip file.  For a list of possible values see <a
-    href="http://java.sun.com/products/jdk/1.2/docs/guide/internat/encoding.doc.html">http://java.sun.com/products/jdk/1.2/docs/guide/internat/encoding.doc.html</a>.
-    Defaults to the platform's default character encoding.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">filesonly</td>
-    <td valign="top">Store only file entries, defaults to false</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">includes</td>
-    <td valign="top">comma separated list of patterns of files that must be
-      included. All files are included when omitted.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">includesfile</td>
-    <td valign="top">the name of a file. Each line of this file is
-      taken to be an include pattern</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">excludes</td>
-    <td valign="top">comma separated list of patterns of files that must be
-      excluded. No files (except default excludes) are excluded when omitted.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">excludesfile</td>
-    <td valign="top">the name of a file. Each line of this file is
-      taken to be an exclude pattern</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">defaultexcludes</td>
-    <td valign="top">indicates whether default excludes should be used or not
-      (&quot;yes&quot;/&quot;no&quot;). Default excludes are used when omitted.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">update</td>
-    <td valign="top">indicates whether to update or overwrite
-      the destination file if it already exists.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">whenempty</td>
-    <td valign="top">behavior when no files match.  Valid values are &quot;fail&quot;, &quot;skip&quot;, and &quot;create&quot;.  Default is &quot;skip&quot;.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">duplicate</td>
-    <td valign="top">behavior when a duplicate file is found.  Valid values are &quot;add&quot;, &quot;preserve&quot;, and &quot;fail&quot;. The default value is &quot;add&quot;.  </td>
-    <td valign="top" align="center">No</td>
-  </tr>
-</table>
-<h3>Parameters specified as nested elements</h3>
-<h4>fileset</h4>
-<p>The zip task supports any number of nested <a
-href="../CoreTypes/fileset.html"><code>&lt;fileset&gt;</code></a> elements to specify
-the files to be included in the archive.</p>
-<h4>zipfileset</h4>
-<p>A <code>&lt;zipfileset&gt;</code> has three additional attributes: <i>prefix</i>, <i>fullpath</i>, and <i>src</i>.  The 
-<i>prefix</i> and <i>fullpath</i> attributes modify the location of the files when they are placed 
-inside the archive. If the <i>prefix</i> attribute is set, all files in the fileset are prefixed
-with that path in the archive. If the <i>fullpath</i> attribute is set, the file described by the fileset is placed at that 
-exact location in the archive. (The <i>fullpath</i> attribute can only be set for filesets that represent a single file. The <i>prefix</i> and <i>fullpath</i> attributes cannot both be set on the same fileset.)  The <i>src</i> attribute
-may be used in place of the <i>dir</i> attribute to specify a zip file whose
-contents will be extracted and included in the archive.  As with directories, include and exclude patterns may be used to specify a subset of the zip file
-for inclusion in the archive.</p>
-<h4>zipgroupfileset</h4>
-<p>A <code>&lt;zipgroupfileset&gt;</code> allows for multiple zip files to be 
-merged into the archive. Each file found in this fileset is added to the archive 
-the same way that <i>zipfileset src</i> files are added.</p>
-
-
-<h3>Examples</h3>
-<pre>  &lt;zip destfile=&quot;${dist}/manual.zip&quot;
-       basedir=&quot;htdocs/manual&quot;
-  /&gt;</pre>
-<p>zips all files in the <code>htdocs/manual</code> directory into a file called <code>manual.zip</code>
-in the <code>${dist}</code> directory.</p>
-<pre>  &lt;zip destfile=&quot;${dist}/manual.zip&quot;
-       basedir=&quot;htdocs/manual&quot;
-       update=&quot;true&quot;
-  /&gt;</pre>
-<p>zips all files in the <code>htdocs/manual</code> directory into a file called <code>manual.zip</code>
-in the <code>${dist}</code> directory. If <code>manual.zip</code>
-doesn't exist, it is created; otherwise it is updated with the
-new/changed files.</p>
-<pre>  &lt;zip destfile=&quot;${dist}/manual.zip&quot;
-       basedir=&quot;htdocs/manual&quot;
-       excludes=&quot;mydocs/**, **/todo.html&quot;
-  /&gt;</pre>
-<p>zips all files in the <code>htdocs/manual</code> directory. Files in the directory <code>mydocs</code>,
-or files with the name <code>todo.html</code> are excluded.</p>
-<pre>  &lt;zip destfile=&quot;${dist}/manual.zip&quot;
-       basedir=&quot;htdocs/manual&quot;
-       includes=&quot;api/**/*.html&quot;
-       excludes=&quot;**/todo.html&quot;
-  /&gt;</pre>
-<p>zips all files in the <code>htdocs/manual</code> directory. Only html files under the directory <code>api</code>
-are zipped, and files with the name <code>todo.html</code> are excluded.</p>
-<pre>  &lt;zip destfile=&quot;${dist}/manual.zip&quot;&gt;
-    &lt;fileset dir=&quot;htdocs/manual&quot;/&gt;
-    &lt;fileset dir=&quot;.&quot; includes=&quot;ChangeLog.txt&quot;/&gt;
-  &lt;/zip&gt;</pre>
-<p>zips all files in the <code>htdocs/manual</code> directory, and also adds the file <code>ChangeLog.txt</code> in the
-current directory. <code>ChangeLog.txt</code> will be added to the top of the ZIP file, just as if
-it had been located at <code>htdocs/manual/ChangeLog.txt</code>.</p>
-<pre>  &lt;zip destfile=&quot;${dist}/manual.zip&quot;&gt;
-    &lt;zipfileset dir=&quot;htdocs/manual&quot; prefix=&quot;docs/user-guide&quot;/&gt;
-    &lt;zipfileset dir=&quot;.&quot; includes=&quot;ChangeLog27.txt&quot; fullpath=&quot;docs/ChangeLog.txt&quot;/&gt;
-    &lt;zipfileset src=&quot;examples.zip&quot; includes=&quot;**/*.html&quot; prefix=&quot;docs/examples&quot;/&gt;
-  &lt;/zip&gt;</pre>
-<p>zips all files in the <code>htdocs/manual</code> directory into the <code>docs/user-guide</code> directory
-in the archive, adds the file <code>ChangeLog27.txt</code> in the
-current directory as <code>docs/ChangeLog.txt</code>, and includes all the html files in <code>examples.zip</code> 
-under <code>docs/examples</code>.  The archive might end up containing the files:</p>
-<pre><code>    docs/user-guide/html/index.html
-    docs/ChangeLog.txt
-    docs/examples/index.html
-</code></pre>
-<p>
-The code
-<pre>
-  &lt;zip destfile=&quot;${dist}/manual.zip&quot;&gt;
-    &lt;zipfileset dir=&quot;htdocs/manual&quot; prefix=&quot;docs/user-guide&quot;/&gt;
-    &lt;zipgroupfileset dir=&quot;.&quot; includes=&quot;examples*.zip&quot;/&gt;
-  &lt;/zip&gt;</pre>
-</pre>
-<p>
-<p>zips all files in the <code>htdocs/manual</code> directory into the <code>docs/user-guide</code> directory in the archive and includes all the files in any file that maches <code>examples*.zip</code>, such as all files within <code>examples1.zip</code> or <code>examples_for_brian.zip</code>.
-<hr>
-<p align="center">Copyright &copy; 2001-2002 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/CoreTypes/description.html b/docs/manual/CoreTypes/description.html
deleted file mode 100644
index f548f70..0000000
--- a/docs/manual/CoreTypes/description.html
+++ /dev/null
@@ -1,31 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Apache Ant User Manual</title>
-</head>
-
-<body>
-
-<h2><a name="description">Description</a></h2>
-<h3>Description</h3>
-<p>Allows for a description of the project to be specified that
-will be included in the output of the <code>ant &#x2011;projecthelp</code>
-command.</p>
-
-<h3>Parameters</h3>
-<p>(none)</p>
-<h3>Examples</h3>
-<pre>  
-&lt;description&gt;
-This buildfile is used to build the Foo subproject within 
-the large, complex Bar project.
-&lt;/description&gt;
-</pre>
-<hr>
-<p align="center">Copyright &copy; 2001-2002 Apache Software Foundation.
-All rights Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/CoreTypes/dirset.html b/docs/manual/CoreTypes/dirset.html
deleted file mode 100644
index 061adef..0000000
--- a/docs/manual/CoreTypes/dirset.html
+++ /dev/null
@@ -1,103 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>DirSet Type</title>
-</head>
-
-<body>
-
-<h2><a name="dirset">DirSet</a></h2>
-<p>DirSets are groups of directories. These directories can be found in a
-directory tree starting in a base directory and are matched by
-patterns taken from a number of <a
-href="patternset.html">PatternSets</a>. DirSets can appear inside tasks
-that support this feature or at the same level as <code>target</code>
-(i.e., as children of <code>&lt;project&gt;</code>).</p>
-<p>PatternSets can be specified as nested
-<code>&lt;patternset&gt;</code> elements. In addition, DirSet holds
-an implicit PatternSet and supports the nested
-<code>&lt;include&gt;</code>, <code>&lt;includesfile&gt;</code>,
-<code>&lt;exclude&gt;</code> and <code>&lt;excludesfile&gt;</code>
-elements of <code>&lt;patternset&gt;</code> directly, as well as
-<code>&lt;patternset&gt;</code>'s attributes.</p>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">dir</td>
-    <td valign="top">The root of the directory tree of this DirSet.</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">includes</td>
-    <td valign="top">A comma-separated list of patterns of directories that
-     must be included; all directories are included when omitted.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">includesfile</td>
-    <td valign="top">The name of a file; each line of this file is
-      taken to be an include pattern.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">excludes</td>
-    <td valign="top">A comma-separated list of patterns of directories that
-     must be excluded; no directories are excluded when omitted.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">excludesfile</td>
-    <td valign="top">The name of a file; each line of this file is
-      taken to be an exclude pattern.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">casesensitive</td>
-    <td valign="top">Specifies whether case-sensitivty should be applied
-     (<code>true</code>|<code>yes</code>|<code>on</code> or
-     <code>false</code>|<code>no</code>|<code>off</code>).</td>
-    <td valign="top" align="center">No; defaults to true.</td>
-  </tr>
-</table>
-
-<h4>Examples</h4>
-<blockquote><pre>
-&lt;dirset dir=&quot;${build.dir}&quot;&gt;
-  &lt;include name=&quot;apps/**/classes&quot;/&gt;
-  &lt;exclude name=&quot;apps/**/*Test*&quot;/&gt;
-&lt;/dirset&gt;
-</pre></blockquote>
-<p>Groups all directories named <code>classes</code> found under the
-<code>apps</code> subdirectory of <code>${build.dir}</code>, except those
-that have the text <code>Test</code> in their name.</p>
-<blockquote><pre>
-&lt;dirset dir=&quot;${build.dir}&quot;&gt;
-  &lt;patternset id=&quot;non.test.classes&quot;&gt;
-    &lt;include name=&quot;apps/**/classes&quot;/&gt;
-    &lt;exclude name=&quot;apps/**/*Test*&quot;/&gt;
-  &lt;/patternset&gt;
-&lt;/dirset&gt;
-</pre></blockquote>
-<p>Groups the same directories as the above example, but also establishes
-a PatternSet that can be referenced in other
-<code>&lt;dirset&gt;</code> elements, rooted at a different directory.</p>
-<blockquote><pre>
-&lt;dirset dir=&quot;${debug_build.dir}&quot; &gt;
-  &lt;patternset refid=&quot;non.test.classes&quot;/&gt;
-&lt;/dirset&gt;
-</pre></blockquote>
-<p>Groups all directories in directory <code>${debug_build.dir}</code>,
-using the same patterns as the above example.</p>
-
-<hr>
-<p align="center">Copyright &copy; 2002 Apache Software Foundation.
-All rights Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/CoreTypes/filelist.html b/docs/manual/CoreTypes/filelist.html
deleted file mode 100644
index a97c04e..0000000
--- a/docs/manual/CoreTypes/filelist.html
+++ /dev/null
@@ -1,76 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>FileList Type</title>
-</head>
-
-<body>
-
-<h2><a name="filelist">FileList</a></h2> 
-
-<p>FileLists are explicitly named lists of files.  Whereas FileSets
-act as filters, returning only those files that exist in the file
-system and match specified patterns, FileLists are useful for
-specifying files that may or may not exist.  Multiple files are
-specified as a list of files, relative to the specified directory,
-with no support for wildcard expansion (filenames with wildcards will be
-included in the list unchanged).
-FileLists can appear inside tasks that support this feature or at the
-same level as <code>&lt;target&gt;</code> (i.e., as children of
-<code>&lt;project&gt;</code>).
-</p>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">dir</td>
-    <td valign="top">The base directory of this FileList.</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">files</td>
-    <td valign="top">The list of file names.</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-</table>
-
-<h4>Examples</h4>
-<blockquote><pre>
-&lt;filelist 
-    id=&quot;docfiles&quot; 
-    dir=&quot;${doc.src}&quot;
-    files=&quot;foo.xml,bar.xml&quot;/&gt; 
-</pre></blockquote>
-
-<p>The files <code>${doc.src}/foo.xml</code> and
-<code>${doc.src}/bar.xml</code>.  Note that these files may not (yet)
-actually exist.
-</p>
-
-<blockquote><pre>
-&lt;filelist 
-    id=&quot;docfiles&quot; 
-    dir=&quot;${doc.src}&quot;
-    files=&quot;foo.xml
-           bar.xml&quot;/&gt; 
-</pre></blockquote>
-
-<p>Same files as the example above.</p>
-
-<blockquote><pre>
-&lt;filelist refid=&quot;docfiles&quot;/&gt; 
-</pre></blockquote>
-
-<p>Same files as the example above.</p>
-
-<hr>
-<p align="center">Copyright &copy; 2001-2002 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/CoreTypes/fileset.html b/docs/manual/CoreTypes/fileset.html
deleted file mode 100644
index b5b5234..0000000
--- a/docs/manual/CoreTypes/fileset.html
+++ /dev/null
@@ -1,108 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>FileSet Type</title>
-</head>
-
-<body>
-
-<h2><a name="fileset">FileSet</a></h2>
-<p>FileSets are groups of files. These files can be found in a
-directory tree starting in a base directory and are matched by
-patterns taken from a number of <a
-href="patternset.html">PatternSets</a>. FileSets can appear inside tasks
-that support this feature or at the same level as <code>target</code>
-- i.e., as children of <code>project</code>.</p>
-<p>PatternSets can be specified as nested
-<code>&lt;patternset&gt;</code> elements. In addition, FileSet holds
-an implicit PatternSet and supports the nested
-<code>&lt;include&gt;</code>, <code>&lt;includesfile&gt;</code>,
-<code>&lt;exclude&gt;</code> and <code>&lt;excludesfile&gt;</code>
-elements of PatternSet directly, as well as PatternSet's
-attributes.</p>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">dir</td>
-    <td valign="top">the root of the directory tree of this FileSet.</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">defaultexcludes</td>
-    <td valign="top">indicates whether <a href="../dirtasks.html#defaultexcludes">default excludes</a> should be used or not
-      (<code>yes | no</code>); default excludes are used when omitted.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">includes</td>
-    <td valign="top">comma-separated list of patterns of files that must be
-      included; all files are included when omitted.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">includesfile</td>
-    <td valign="top">the name of a file; each line of this file is
-      taken to be an include pattern.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">excludes</td>
-    <td valign="top">comma-separated list of patterns of files that must be
-      excluded; no files (except default excludes) are excluded when omitted.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">excludesfile</td>
-    <td valign="top">the name of a file; each line of this file is
-      taken to be an exclude pattern.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">casesensitive</td>
-    <td valign="top">Must the file system be treated in a case sensitive way?
-        Defaults to true.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-</table>
-
-<h4>Examples</h4>
-<blockquote><pre>
-&lt;fileset dir=&quot;${server.src}&quot; casesensitive=&quot;yes&quot; &gt;
-  &lt;include name=&quot;**/*.java&quot;/&gt;
-  &lt;exclude name=&quot;**/*Test*&quot;/&gt;
-&lt;/fileset&gt;
-</pre></blockquote>
-<p>Groups all files in directory <code>${server.src}</code> that are Java
-source files and don't have the text <code>Test</code> in their
-name.</p>
-<blockquote><pre>
-&lt;fileset dir=&quot;${server.src}&quot; casesensitive=&quot;yes&quot; &gt;
-  &lt;patternset id=&quot;non.test.sources&quot; &gt;
-    &lt;include name=&quot;**/*.java&quot;/&gt;
-    &lt;exclude name=&quot;**/*Test*&quot;/&gt;
-  &lt;/patternset&gt;
-&lt;/fileset&gt;
-</pre></blockquote>
-<p>Groups the same files as the above example, but also establishes
-a PatternSet that can be referenced in other
-<code>&lt;fileset&gt;</code> elements, rooted at a different directory.</p>
-<blockquote><pre>
-&lt;fileset dir=&quot;${client.src}&quot; &gt;
-  &lt;patternset refid=&quot;non.test.sources&quot;/&gt;
-&lt;/fileset&gt;
-</pre></blockquote>
-<p>Groups all files in directory <code>${client.src}</code>, using the
-same patterns as the above example.</p>
-
-<hr>
-<p align="center">Copyright &copy; 2001-2002 Apache Software Foundation.
-All rights Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/CoreTypes/filterchain.html b/docs/manual/CoreTypes/filterchain.html
deleted file mode 100644
index 6bf995f..0000000
--- a/docs/manual/CoreTypes/filterchain.html
+++ /dev/null
@@ -1,488 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-
-<HTML>
-<HEAD>
-  <TITLE>FilterChains and FilterReaders</TITLE>
-</HEAD>
-
-<BODY>
-
-<H2>FilterChains and FilterReaders</H2>
-Look at Unix pipes - they offer you so much flexibility -
-say you wanted to copy just those lines that contained the
-string blee from the first 10 lines of a file 'foo'
-to a file 'bar' - you would do something like<P>
-<code>
-cat foo|head -n10|grep blee > bar
-</code><P>
-Ant was not flexible enough.  There was no way for the
-&lt;copy&gt; task to do something similar.  If you wanted
-the &lt;copy&gt; task to get the first 10 lines, you would have
-had to create special attributes:<P>
-<code>
-&lt;copy file=&quot;foo&quot; tofile=&quot;bar&quot; head=&quot;10&quot; contains=&quot;blee&quot;/&gt;
-</code><P>
-The obvious problem thus surfaced: Ant tasks would not be able
-to accomodate such data transformation attributes as they would
-be endless.  The task would also not know in which order these
-attributes were to be interpreted.  That is, must the task execute the
-contains attribute first and then the head attribute or vice-versa?
-What Ant tasks needed was a mechanism to allow pluggable filter (data
-tranformer) chains.  Ant would provide a few filters for which there
-have been repeated requests.  Users with special filtering needs
-would be able to easily write their own and plug them in.<P>
-
-The solution was to refactor data transformation oriented
-tasks to support FilterChains.  A FilterChain is a group of
-ordered FilterReaders.  Users can define their own FilterReaders
-by just extending the java.io.FilterReader class.  Such custom
-FilterReaders can be easily plugged in as nested elements of
-&lt;filterchain&gt; by using &lt;filterreader&gt; elements.
-<P>
-Example:
-<BLOCKQUOTE><PRE>
-&lt;copy file=&quot;${src.file}&quot; tofile=&quot;${dest.file}&quot;&gt;
-  &lt;filterchain&gt;
-    &lt;filterreader classname=&quot;your.extension.of.java.io.FilterReader&quot;&gt;
-      &lt;param name=&quot;foo&quot; value=&quot;bar&quot;/&gt;
-    &lt;/filterreader&gt;
-    &lt;filterreader classname=&quot;another.extension.of.java.io.FilterReader&quot;&gt;
-      &lt;classpath&gt;
-        &lt;pathelement path="${classpath}"/&gt;
-      &lt;/classpath&gt;
-      &lt;param name=&quot;blah&quot; value=&quot;blee&quot;/&gt;
-      &lt;param type=&quot;abra&quot; value=&quot;cadabra&quot;/&gt;
-    &lt;/filterreader&gt;
-  &lt;/filterchain&gt;
-&lt;/copy&gt;
-</PRE></BLOCKQUOTE>
-
-Ant provides some built-in filter readers.  These filter readers
-can also be declared using a syntax similar to the above syntax.
-However, they can be declared using some simpler syntax also.<P>
-Example:
-<BLOCKQUOTE><PRE>
-&lt;loadfile srcfile=&quot;${src.file}&quot; property=&quot;${src.file.head}&quot;&gt;
-  &lt;filterchain&gt;
-    &lt;headfilter lines=&quot;15&quot;/&gt;
-  &lt;/filterchain&gt;
-&lt;/loadfile&gt;
-</PRE></BLOCKQUOTE>
-is equivalent to:
-<BLOCKQUOTE><PRE>
-&lt;loadfile srcfile=&quot;${src.file}&quot; property=&quot;${src.file.head}&quot;&gt;
-  &lt;filterchain&gt;
-    &lt;filterreader classname=&quot;org.apache.tools.ant.filters.HeadFilter&quot;&gt;
-      &lt;param name=&quot;lines&quot; value=&quot;15&quot;/&gt;
-    &lt;/filterreader&gt;
-  &lt;/filterchain&gt;
-&lt;/loadfile&gt;
-</PRE></BLOCKQUOTE>
-
-The following built-in tasks support nested &lt;filterchain&gt; elements.<BR>
-<a href="../CoreTasks/copy.html">Copy</a>,<BR>
-<a href="../CoreTasks/loadfile.html">LoadFile</a>,<BR>
-<a href="../CoreTasks/loadproperties.html">LoadProperties</a>,<BR>
-<a href="../CoreTasks/move.html">Move</a><BR><BR>
-
-A FilterChain is formed by defining zero or more of the following
-nested elements.<BR>
-<a href="#filterreader">FilterReader</a><BR>
-<a href="#classconstants">ClassConstants</a><BR>
-<a href="#expandproperties">ExpandProperties</a><BR>
-<a href="#headfilter">HeadFilter</a><BR>
-<a href="#linecontains">LineContains</a><BR>
-<a href="#linecontainsregexp">LineContainsRegExp</a><BR>
-<a href="#prefixlines">PrefixLines</a><BR>
-<a href="#replacetokens">ReplaceTokens</a><BR>
-<a href="#stripjavacomments">StripJavaComments</a><BR>
-<a href="#striplinebreaks">StripLineBreaks</a><BR>
-<a href="#striplinecomments">StripLineComments</a><BR>
-<a href="#tabstospaces">TabsToSpaces</a><BR>
-<a href="#tailfilter">TailFilter</a><BR>
-
-<H3><a name="filterreader">FilterReader</a></H3>
-
-The filterreader element is the generic way to
-define a filter.  User defined filter elements are
-defined in the build file using this.  Please note that
-built in filter readers can also be defined using this
-syntax.
-
-A FilterReader element must be supplied with a class name as
-an attribute value.  The class resolved by this name must
-extend java.io.FilterReader.  If the custom filter reader
-needs to be parameterized, it must implement
-org.apache.tools.type.Parameterizable.
-
-<TABLE cellSpacing=0 cellPadding=2 border=1>
-  <TR>
-    <TD vAlign=top><B>Attribute</B></TD>
-    <TD vAlign=top><B>Description</B></TD>
-    <TD vAlign=top align="center"><B>Required</B></TD>
-  </TR>
-  <TR>
-    <TD vAlign=top>classname</TD>
-    <TD vAlign=top>The class name of the filter reader.</TD>
-    <TD vAlign=top align="center">Yes</TD>
-  </TR>
-</TABLE>
-
-<P>
-<H4>Nested Elements:</H4>
-&lt;filterreader&gt; supports &lt;classpath&gt; and &lt;param&gt;
-as nested elements.  Each &lt;param&gt; element may take in the following
-attributes - name, type and value.
-<P>
-The following FilterReaders are supplied with the default
-distribution.
-
-<H3><a name="classconstants">ClassConstants</a></H3>
-<P>
-This filters basic constants defined in a Java Class,
-and outputs them in lines composed of the format name=value
-<P>
-<H4>Example:</H4>
-
-This loads the basic constants defined in a Java class as Ant properties.
-<BLOCKQUOTE><PRE>
-&lt;loadproperties srcfile=&quot;foo.class&quot;&gt;
-  &lt;filterchain&gt;
-    &lt;filterreader classname=&quot;org.apache.tools.ant.filters.ClassConstants&quot;/&gt;
-  &lt;/filterchain&gt;
-&lt;/loadproperties&gt;
-</PRE></BLOCKQUOTE>
-
-Convenience method:
-<BLOCKQUOTE><PRE>
-&lt;loadproperties srcfile=&quot;foo.class&quot;&gt;
-  &lt;filterchain&gt;
-    &lt;classconstants/&gt;
-  &lt;/filterchain&gt;
-&lt;/loadproperties&gt;
-</PRE></BLOCKQUOTE>
-
-<H3><a name="expandproperties">ExpandProperties</a></H3>
-<P>
-If the data contains data that represents Ant
-properties (of the form ${...}), that is substituted
-with the property's actual value.
-<P>
-<H4>Example:</H4>
-
-This results in the property modifiedmessage holding the value
-&quot;All these moments will be lost in time, like teardrops in the rain&quot;
-<BLOCKQUOTE><PRE>
-&lt;echo
-  message=&quot;All these moments will be lost in time, like teardrops in the ${weather}&quot;
-  file=&quot;loadfile1.tmp&quot;
-  /&gt;
-&lt;property name=&quot;weather&quot; value=&quot;rain&quot; /&gt;
-&lt;loadfile property=&quot;modifiedmessage&quot; srcFile=&quot;loadfile1.tmp&quot;&gt;
-  &lt;filterchain&gt;
-    &lt;filterreader classname=&quot;org.apache.tools.ant.filters.ExpandProperties&quot;/&gt;
-  &lt;/filterchain&gt;
-&lt;/loadfile&gt;
-</PRE></BLOCKQUOTE>
-
-Convenience method:
-<BLOCKQUOTE><PRE>
-&lt;echo
-  message=&quot;All these moments will be lost in time, like teardrops in the ${weather}&quot;
-  file=&quot;loadfile1.tmp&quot;
-  /&gt;
-&lt;property name=&quot;weather&quot; value=&quot;rain&quot; /&gt;
-&lt;loadfile property=&quot;modifiedmessage&quot; srcFile=&quot;loadfile1.tmp&quot;&gt;
-  &lt;filterchain&gt;
-    &lt;expandproperties/&gt;
-  &lt;/filterchain&gt;
-&lt;/loadfile&gt;
-</PRE></BLOCKQUOTE>
-
-<H3><a name="headfilter">HeadFilter</a></H3>
-
-This filter reads the first few lines from the data supplied to it.
-
-<TABLE cellSpacing=0 cellPadding=2 border=1>
-  <TR>
-    <TD vAlign=top><B>Parameter Name</B></TD>
-    <TD vAlign=top><B>Parameter Value</B></TD>
-    <TD vAlign=top align="center"><B>Required</B></TD>
-  </TR>
-  <TR>
-    <TD vAlign=top>lines</TD>
-    <TD vAlign=top align="center">Number of lines to be read.
-    Defaults to &quot;10&quot;</TD>
-    <TD vAlign=top align="center">No</TD>
-  </TR>
-</TABLE>
-<P>
-<H4>Example:</H4>
-
-This stores the first 15 lines of the supplied data in the property ${src.file.head}
-<BLOCKQUOTE><PRE>
-&lt;loadfile srcfile=&quot;${src.file}&quot; property=&quot;${src.file.head}&quot;&gt;
-  &lt;filterchain&gt;
-    &lt;filterreader classname=&quot;org.apache.tools.ant.filters.HeadFilter&quot;&gt;
-      &lt;param name=&quot;lines&quot; value=&quot;15&quot;/&gt;
-    &lt;/filterreader&gt;
-  &lt;/filterchain&gt;
-&lt;/loadfile&gt;
-</PRE></BLOCKQUOTE>
-
-Convenience method:
-<BLOCKQUOTE><PRE>
-&lt;loadfile srcfile=&quot;${src.file}&quot; property=&quot;${src.file.head}&quot;&gt;
-  &lt;filterchain&gt;
-    &lt;headfilter lines=&quot;15&quot;/&gt;
-  &lt;/filterchain&gt;
-&lt;/loadfile&gt;
-</PRE></BLOCKQUOTE>
-
-<H3><a name="replacetokens">ReplaceTokens</a></H3>
-
-This filter reader replaces all strings that are
-sandwiched between begintoken and endtoken with
-user defined values.
-
-<TABLE cellSpacing=0 cellPadding=2 border=1>
-  <TR>
-    <TD vAlign=top><B>Parameter Type</B></TD>
-    <TD vAlign=top><B>Parameter Name</B></TD>
-    <TD vAlign=top><B>Parameter Value</B></TD>
-    <TD vAlign=top align="center"><B>Required</B></TD>
-  </TR>
-  <TR>
-    <TD vAlign=top>tokenchar</TD>
-    <TD vAlign=top>begintoken</TD>
-    <TD vAlign=top>Character marking the
-    beginning of a token.  Defaults to @</TD>
-    <TD vAlign=top align="center">No</TD>
-  </TR>
-  <TR>
-    <TD vAlign=top>tokenchar</TD>
-    <TD vAlign=top>endtoken</TD>
-    <TD vAlign=top>Character marking the
-    end of a token.  Defaults to @</TD>
-    <TD vAlign=top align="center">No</TD>
-  </TR>
-  <TR>
-    <TD vAlign=top>token</TD>
-    <TD vAlign=top>User defined String.</TD>
-    <TD vAlign=top>User defined search String</TD>
-    <TD vAlign=top align="center">Yes</TD>
-  </TR>
-</TABLE>
-<P>
-
-<H4>Example:</H4>
-
-This replaces occurences of the string @DATE@ in the data
-with today's date and stores it in the property ${src.file.replaced}
-<BLOCKQUOTE><PRE>
-&lt;tstamp/&gt;
-&lt;loadfile srcfile=&quot;${src.file}&quot; property=&quot;${src.file.replaced}&quot;&gt;
-  &lt;filterchain&gt;
-    &lt;filterreader classname=&quot;org.apache.tools.ant.filters.ReplaceTokens&quot;&gt;
-      &lt;param type=&quot;token&quot; name=&quot;DATE&quot; value=&quot;${TODAY}&quot;/&gt;
-    &lt;/filterreader&gt;
-  &lt;/filterchain&gt;
-&lt;/loadfile&gt;
-</PRE></BLOCKQUOTE>
-
-Convenience method:
-<BLOCKQUOTE><PRE>
-&lt;tstamp/&gt;
-&lt;loadfile srcfile=&quot;${src.file}&quot; property=&quot;${src.file.replaced}&quot;&gt;
-  &lt;filterchain&gt;
-    &lt;replacetokens&gt;
-      &lt;token key=&quot;DATE&quot; value=&quot;${TODAY}&quot;/&gt;
-    &lt;/replacetokens&gt;
-  &lt;/filterchain&gt;
-&lt;/loadfile&gt;
-</PRE></BLOCKQUOTE>
-
-<H3><a name="stripjavacomments">StripJavaComments</a></H3>
-
-This filter reader strips away comments from the data,
-using Java syntax guidelines.  This filter does not
-take in any parameters.
-<P>
-<H4>Example:</H4>
-
-<BLOCKQUOTE><PRE>
-&lt;loadfile srcfile=&quot;${java.src.file}&quot; property=&quot;${java.src.file.nocomments}&quot;&gt;
-  &lt;filterchain&gt;
-    &lt;filterreader classname=&quot;org.apache.tools.ant.filters.StripJavaComments&quot;/&gt;
-  &lt;/filterchain&gt;
-&lt;/loadfile&gt;
-</PRE></BLOCKQUOTE>
-
-Convenience method:
-<BLOCKQUOTE><PRE>
-&lt;loadfile srcfile=&quot;${java.src.file}&quot; property=&quot;${java.src.file.nocomments}&quot;&gt;
-  &lt;filterchain&gt;
-    &lt;stripjavacomments/&gt;
-  &lt;/filterchain&gt;
-&lt;/loadfile&gt;
-</PRE></BLOCKQUOTE>
-
-<H3><a name="striplinebreaks">StripLineBreaks</a></H3>
-
-This filter reader strips away specific characters
-from the data supplied to it.
-
-<TABLE cellSpacing=0 cellPadding=2 border=1>
-  <TR>
-    <TD vAlign=top><B>Parameter Name</B></TD>
-    <TD vAlign=top><B>Parameter Value</B></TD>
-    <TD vAlign=top align="center"><B>Required</B></TD>
-  </TR>
-  <TR>
-    <TD vAlign=top>linebreaks</TD>
-    <TD vAlign=top align="center">Characters that are to
-    be stripped out.  Defaults to &quot;\r\n&quot;</TD>
-    <TD vAlign=top align="center">No</TD>
-  </TR>
-</TABLE>
-<P>
-<H4>Examples:</H4>
-
-This strips the '\r' and '\n' characters.
-<BLOCKQUOTE><PRE>
-&lt;loadfile srcfile=&quot;${src.file}&quot; property=&quot;${src.file.contents}&quot;&gt;
-  &lt;filterchain&gt;
-    &lt;filterreader classname=&quot;org.apache.tools.ant.filters.StripLineBreaks&quot;/&gt;
-  &lt;/filterchain&gt;
-&lt;/loadfile&gt;
-</PRE></BLOCKQUOTE>
-
-Convenience method:
-<BLOCKQUOTE><PRE>
-&lt;loadfile srcfile=&quot;${src.file}&quot; property=&quot;${src.file.contents}&quot;&gt;
-  &lt;filterchain&gt;
-    &lt;striplinebreaks/&gt;
-  &lt;/filterchain&gt;
-&lt;/loadfile&gt;
-</PRE></BLOCKQUOTE>
-
-This treats the '(' and ')' characters as line break characters and
-strips them.
-<BLOCKQUOTE><PRE>
-&lt;loadfile srcfile=&quot;${src.file}&quot; property=&quot;${src.file.contents}&quot;&gt;
-  &lt;filterchain&gt;
-    &lt;filterreader classname=&quot;org.apache.tools.ant.filters.StripLineBreaks&quot;&gt;
-      &lt;param name=&quot;linebreaks&quot; value=&quot;()&quot;/&gt;
-    &lt;/filterreader&gt;
-  &lt;/filterchain&gt;
-&lt;/loadfile&gt;
-</PRE></BLOCKQUOTE>
-
-<H3><a name="tabstospaces">TabsToSpaces</a></H3>
-
-This filter replaces tabs with spaces
-
-<TABLE cellSpacing=0 cellPadding=2 border=1>
-  <TR>
-    <TD vAlign=top><B>Parameter Name</B></TD>
-    <TD vAlign=top><B>Parameter Value</B></TD>
-    <TD vAlign=top align="center"><B>Required</B></TD>
-  </TR>
-  <TR>
-    <TD vAlign=top>lines</TD>
-    <TD vAlign=top align="center">tablength
-    Defaults to &quot;8&quot;</TD>
-    <TD vAlign=top align="center">No</TD>
-  </TR>
-</TABLE>
-<P>
-<H4>Examples:</H4>
-
-This replaces tabs in ${src.file} with spaces.
-<BLOCKQUOTE><PRE>
-&lt;loadfile srcfile=&quot;${src.file}&quot; property=&quot;${src.file.notab}&quot;&gt;
-  &lt;filterchain&gt;
-    &lt;filterreader classname=&quot;org.apache.tools.ant.filters.TabsToSpaces&quot;/&gt;
-  &lt;/filterchain&gt;
-&lt;/loadfile&gt;
-</PRE></BLOCKQUOTE>
-
-Convenience method:
-<BLOCKQUOTE><PRE>
-&lt;loadfile srcfile=&quot;${src.file}&quot; property=&quot;${src.file.notab}&quot;&gt;
-  &lt;filterchain&gt;
-    &lt;tabstospaces/&gt;
-  &lt;/filterchain&gt;
-&lt;/loadfile&gt;
-</PRE></BLOCKQUOTE>
-
-<H3><a name="tailfilter">TailFilter</a></H3>
-
-This filter reads the last few lines from the data supplied to it.
-
-<TABLE cellSpacing=0 cellPadding=2 border=1>
-  <TR>
-    <TD vAlign=top><B>Parameter Name</B></TD>
-    <TD vAlign=top><B>Parameter Value</B></TD>
-    <TD vAlign=top align="center"><B>Required</B></TD>
-  </TR>
-  <TR>
-    <TD vAlign=top>lines</TD>
-    <TD vAlign=top align="center">Number of lines to be read.
-    Defaults to &quot;10&quot;</TD>
-    <TD vAlign=top align="center">No</TD>
-  </TR>
-</TABLE>
-<P>
-<H4>Examples:</H4>
-
-This stores the last 15 lines of the supplied data in the property ${src.file.tail}
-<BLOCKQUOTE><PRE>
-&lt;loadfile srcfile=&quot;${src.file}&quot; property=&quot;${src.file.tail}&quot;&gt;
-  &lt;filterchain&gt;
-    &lt;filterreader classname=&quot;org.apache.tools.ant.filters.TailFilter&quot;&gt;
-      &lt;param name=&quot;lines&quot; value=&quot;15&quot;/&gt;
-    &lt;/filterreader&gt;
-  &lt;/filterchain&gt;
-&lt;/loadfile&gt;
-</PRE></BLOCKQUOTE>
-
-Convenience method:
-<BLOCKQUOTE><PRE>
-&lt;loadfile srcfile=&quot;${src.file}&quot; property=&quot;${src.file.tail}&quot;&gt;
-  &lt;filterchain&gt;
-    &lt;tailfilter lines=&quot;15&quot;/&gt;
-  &lt;/filterchain&gt;
-&lt;/loadfile&gt;
-</PRE></BLOCKQUOTE>
-
-
-This stores the last 5 lines of the first 15 lines of the supplied
-data in the property ${src.file.mid}
-<BLOCKQUOTE><PRE>
-&lt;loadfile srcfile=&quot;${src.file}&quot; property=&quot;${src.file.mid}&quot;&gt;
-  &lt;filterchain&gt;
-    &lt;filterreader classname=&quot;org.apache.tools.ant.filters.HeadFilter&quot;&gt;
-      &lt;param name=&quot;lines&quot; value=&quot;15&quot;/&gt;
-    &lt;/filterreader&gt;
-    &lt;filterreader classname=&quot;org.apache.tools.ant.filters.TailFilter&quot;&gt;
-      &lt;param name=&quot;lines&quot; value=&quot;5&quot;/&gt;
-    &lt;/filterreader&gt;
-  &lt;/filterchain&gt;
-&lt;/loadfile&gt;
-</PRE></BLOCKQUOTE>
-
-Convenience method:
-<BLOCKQUOTE><PRE>
-&lt;loadfile srcfile=&quot;${src.file}&quot; property=&quot;${src.file.mid}&quot;&gt;
-  &lt;filterchain&gt;
-    &lt;HeadFilter lines=&quot;15&quot;/&gt;
-    &lt;TailFilter lines=&quot;5&quot;/&gt;
-  &lt;/filterchain&gt;
-&lt;/loadfile&gt;
-</PRE></BLOCKQUOTE>
-
-<HR>
-
-<P align=center>Copyright &copy; 2002 Apache Software Foundation. All rights
-Reserved.</P></BODY></HTML>
diff --git a/docs/manual/CoreTypes/filterset.html b/docs/manual/CoreTypes/filterset.html
deleted file mode 100644
index a4b3fc0..0000000
--- a/docs/manual/CoreTypes/filterset.html
+++ /dev/null
@@ -1,122 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-
-<HTML>
-<HEAD>
-  <TITLE>FilterSet Type</TITLE>
-</HEAD>
-
-<BODY>
-<H2><A name="filterset">FilterSet</A></H2>
-
-<P>FilterSets are groups of filters. Filters can be defined as token-value
-pairs 
-or be read in from a file. FilterSets can appear inside tasks that support this 
-feature or at the same level as <CODE>&lt;target&gt;</CODE> - i.e., as
-children of 
-<CODE>&lt;project&gt;</CODE>.</P>
-<p>In addition, FilterSets can specify
-<code>begintoken</code> and/or 
-<code>endtoken</code> attributes to define what to match.</p>
-<p>Filtersets are used for doing 
-replacements in tasks such as <code>&lt;copy&gt;</code>, etc.</p>
-
-<H2>Filterset</H2>
-
-<TABLE cellSpacing=0 cellPadding=2 border=1>
-  <TR>
-    <TD vAlign=top><B>Attribute</B></TD>
-    <TD vAlign=top><B>Description</B></TD>
-    <TD vAlign=top><B>Default</B></TD>
-    <TD vAlign=top align="center"><B>Required</B></TD>
-  </TR>
-  <TR>
-    <TD vAlign=top>begintoken</TD>
-    <TD vAlign=top>The string marking the beginning of a token (eg.,
-      <code>@date@</code>).</TD>
-    <TD vAlign=top>@</TD>
-    <TD vAlign=top align="center">No</TD>
-  </TR>
-  <TR>
-    <TD vAlign=top>endtoken</TD>
-    <TD vAlign=top>The string marking the end of a token (eg.,
-      <code>@date@</code>).</TD>
-    <TD vAlign=top>@</TD>
-    <TD vAlign=top align="center">No</TD>
-  </TR>
-</TABLE>
-
-<H2>Filter</H2>
-<TABLE cellSpacing=0 cellPadding=2 border=1>
-  <TR>
-    <TD vAlign=top><B>Attribute</B></TD>
-    <TD vAlign=top><B>Description</B></TD>
-    <TD vAlign=top align="center"><B>Required</B></TD>
-  </TR>
-  <TR>
-    <TD vAlign=top>token</TD>
-    <TD vAlign=top>The token to replace (eg., <code>@date@</code>)</TD>
-    <TD vAlign=top align="center">Yes</TD>
-  </TR>
-  <TR>
-    <TD vAlign=top>value</TD>
-    <TD vAlign=top>The value to replace it with
-     (eg., <code>Thursday, April 26, 2001</code>).</TD>
-    <TD vAlign=top align="center">Yes</TD>
-  </TR>
-</TABLE>
-
-<H2>Filtersfile</H2>
-<TABLE cellSpacing=0 cellPadding=2 border=1>
-  <TR>
-    <TD vAlign=top><B>Attribute</B></TD>
-    <TD vAlign=top><B>Description</B></TD>
-    <TD vAlign=top align="center"><B>Required</B></TD>
-  </TR>
-  <TR>
-    <TD vAlign=top>file</TD>
-    <TD vAlign=top>A properties file of 
-      name-value pairs from which to load the tokens.</TD>
-    <TD vAlign=top align="center">Yes</TD>
-  </TR>
-</TABLE>
-
-<H4>Examples</H4>
-
-<p>You are copying the <code>version.txt</code> file to the <code>dist</code>
-directory from the <code>build</code> directory 
-but wish to replace the token <code>@date@</code> with today's date.</p>
-<BLOCKQUOTE><PRE>
-&lt;copy file=&quot;${build.dir}/version.txt&quot; toFile=&quot;${dist.dir}/version.txt&quot;&gt;
-  &lt;filterset&gt;
-    &lt;filter token=&quot;date&quot; value=&quot;${TODAY}&quot;/&gt;
-  &lt;/filterset&gt;
-&lt;/copy&gt;
-</PRE></BLOCKQUOTE>
-
-<p>You are copying the <code>version.txt</code> file to the <code>dist</code>
-directory from the build directory 
-but wish to replace the token <code>%date*</code> with today's date.</p>
-<BLOCKQUOTE><PRE>
-&lt;copy file=&quot;${build.dir}/version.txt&quot; toFile=&quot;${dist.dir}/version.txt&quot;&gt;
-  &lt;filterset begintoken=&quot;%&quot; endtoken=&quot;*&quot;&gt;
-    &lt;filter token=&quot;date&quot; value=&quot;${TODAY}&quot;/&gt;
-  &lt;/filterset&gt;
-&lt;/copy&gt;
-</PRE></BLOCKQUOTE>
-
-<p>Copy all the docs but change all dates and appropriate notices as stored in a file.</p>
-<BLOCKQUOTE><PRE>
-&lt;copy toDir=&quot;${dist.dir}/docs&quot; &gt;
-  &lt;fileset dir=&quot;${build.dir}/docs&quot;&gt;
-    &lt;include name=&quot;**/*.html&quot;&gt;
-  &lt;/fileset&gt;
-  &lt;filterset begintoken=&quot;%&quot; endtoken=&quot;*&quot;&gt;
-    &lt;filtersfile file=&quot;${user.dir}/dist.properties&quot;/&gt;
-  &lt;/filterset&gt;
-&lt;/copy&gt;
-</PRE></BLOCKQUOTE>
-
-<HR>
-
-<P align=center>Copyright &copy; 2001-2002 Apache Software Foundation.
-All rights Reserved.</P></BODY></HTML>
diff --git a/docs/manual/CoreTypes/mapper.html b/docs/manual/CoreTypes/mapper.html
deleted file mode 100644
index 56a9676..0000000
--- a/docs/manual/CoreTypes/mapper.html
+++ /dev/null
@@ -1,375 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Mapper Type</title>
-</head>
-
-<body>
-
-<h2><a name="mapper">Mapping File Names</a></h2>
-<p>Some tasks take source files and create target files. Depending on
-the task, it may be quite obvious which name a target file will have
-(using <a href="../CoreTasks/javac.html">javac</a>, you know there will be
-<code>.class</code> files for your <code>.java</code> files) - in
-other cases you may want to specify the target files, either to help
-Ant or to get an extra bit of functionality.</p>
-<p>While source files are usually specified as <a
-href="fileset.html">fileset</a>s, you don't specify target files directly -
-instead, you tell Ant how to find the target file(s) for one source file. An
-instance of <code>org.apache.tools.ant.util.FileNameMapper</code> is
-responsible for this. It constructs target file names based on rules
-that can be parameterized with <code>from</code> and <code>to</code>
-attributes - the exact meaning of which is implementation-dependent.</p>
-<p>These instances are defined in <code>&lt;mapper&gt;</code> elements
-with the following attributes:</p>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">type</td>
-    <td valign="top">specifies one of the built-in implementations.</td>
-    <td rowspan="2" align="center" valign="middle">Exactly one of both</td>
-  </tr>
-  <tr>
-    <td valign="top">classname</td>
-    <td valign="top">specifies the implementation by class name.</td>
-  </tr>
-  <tr>
-    <td valign="top">classpath</td> 
-    <td valign="top">the classpath to use when looking up
-      <code>classname</code>.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">classpathref</td>
-    <td valign="top">the classpath to use, given as <a
-      href="../using.html#references">reference</a> to a path defined elsewhere.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">from</td> 
-    <td valign="top">the <code>from</code> attribute for the given
-      implementation.</td>
-    <td align="center" valign="top">Depends on implementation.</td>
-  </tr>
-  <tr>
-    <td valign="top">to</td> 
-    <td valign="top">the <code>to</code> attribute for the given
-      implementation.</td>
-    <td align="center" valign="top">Depends on implementation.</td>
-  </tr>
-</table>
-<p>Note that Ant will not automatically convert / or \ characters in
-the <code>to</code> and <code>from</code> attributes to the correct
-directory separator of your current platform.  If you need to specify
-this separator, use <code>${file.separator}</code> instead.</p>
-<h3>Parameters specified as nested elements</h3>
-<p>The classpath can be specified via a nested
-<code>&lt;classpath&gt;</code>, as well - that is,
-a <a href="../using.html#path">path</a>-like structure.</p>
-<h3>The built-in mapper types are:</h3>
-<h4><a name="identity-mapper">identity</a></h4>
-<p>The target file name is identical to the source file name. Both
-<code>to</code> and <code>from</code> will be ignored.</p>
-<b>Examples:</b>
-<blockquote><pre>
-&lt;mapper type=&quot;identity&quot;/&gt;
-</pre></blockquote>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Source file name</b></td>
-    <td valign="top"><b>Target file name</b></td>
-  </tr>
-  <tr>
-    <td valign="top"><code>A.java</code></td>
-    <td valign="top"><code>A.java</code></td>
-  </tr>
-  <tr>
-    <td valign="top"><code>foo/bar/B.java</code></td>
-    <td valign="top"><code>foo/bar/B.java</code></td>
-  </tr>
-  <tr>
-    <td valign="top"><code>C.properties</code></td>
-    <td valign="top"><code>C.properties</code></td>
-  </tr>
-  <tr>
-    <td valign="top"><code>Classes/dir/dir2/A.properties</code></td>
-    <td valign="top"><code>Classes/dir/dir2/A.properties</code></td>
-  </tr>
-</table>
-<h4><a name="flatten-mapper">flatten</a></h4>
-<p>The target file name is identical to the source file name, with all
-leading directory information stripped off. Both <code>to</code> and
-<code>from</code> will be ignored.</p>
-<b>Examples:</b>
-<blockquote><pre>
-&lt;mapper type=&quot;flatten&quot;/&gt;
-</pre></blockquote>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Source file name</b></td>
-    <td valign="top"><b>Target file name</b></td>
-  </tr>
-  <tr>
-    <td valign="top"><code>A.java</code></td>
-    <td valign="top"><code>A.java</code></td>
-  </tr>
-  <tr>
-    <td valign="top"><code>foo/bar/B.java</code></td>
-    <td valign="top"><code>B.java</code></td>
-  </tr>
-  <tr>
-    <td valign="top"><code>C.properties</code></td>
-    <td valign="top"><code>C.properties</code></td>
-  </tr>
-  <tr>
-    <td valign="top"><code>Classes/dir/dir2/A.properties</code></td>
-    <td valign="top"><code>A.properties</code></td>
-  </tr>
-</table>
-<h4><a name="merge-mapper">merge</a></h4>
-<p>The target file name will always be the same, as defined by
-<code>to</code> - <code>from</code> will be ignored.</p>
-<h5>Examples:</h5>
-<blockquote><pre>
-&lt;mapper type=&quot;merge&quot; to=&quot;archive.tar&quot;/&gt;
-</pre></blockquote>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Source file name</b></td>
-    <td valign="top"><b>Target file name</b></td>
-  </tr>
-  <tr>
-    <td valign="top"><code>A.java</code></td>
-    <td valign="top"><code>archive.tar</code></td>
-  </tr>
-  <tr>
-    <td valign="top"><code>foo/bar/B.java</code></td>
-    <td valign="top"><code>archive.tar</code></td>
-  </tr>
-  <tr>
-    <td valign="top"><code>C.properties</code></td>
-    <td valign="top"><code>archive.tar</code></td>
-  </tr>
-  <tr>
-    <td valign="top"><code>Classes/dir/dir2/A.properties</code></td>
-    <td valign="top"><code>archive.tar</code></td>
-  </tr>
-</table>
-<h4><a name="glob-mapper">glob</a></h4>
-<p>Both <code>to</code> and <code>from</code> define patterns that may
-contain at most one <code>*</code>. For each source file that matches
-the <code>from</code> pattern, a target file name will be constructed
-from the <code>to</code> pattern by substituting the <code>*</code> in
-the <code>to</code> pattern with the text that matches the
-<code>*</code> in the <code>from</code> pattern. Source file names
-that don't match the <code>from</code> pattern will be ignored.</p>
-<b>Examples:</b>
-<blockquote><pre>
-&lt;mapper type=&quot;glob&quot; from=&quot;*.java&quot; to=&quot;*.java.bak&quot;/&gt;
-</pre></blockquote>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Source file name</b></td>
-    <td valign="top"><b>Target file name</b></td>
-  </tr>
-  <tr>
-    <td valign="top"><code>A.java</code></td>
-    <td valign="top"><code>A.java.bak</code></td>
-  </tr>
-  <tr>
-    <td valign="top"><code>foo/bar/B.java</code></td>
-    <td valign="top"><code>foo/bar/B.java.bak</code></td>
-  </tr>
-  <tr>
-    <td valign="top"><code>C.properties</code></td>
-    <td valign="top">ignored</td>
-  </tr>
-  <tr>
-    <td valign="top"><code>Classes/dir/dir2/A.properties</code></td>
-    <td valign="top">ignored</td>
-  </tr>
-</table>
-<blockquote><pre>
-&lt;mapper type=&quot;glob&quot; from=&quot;C*ies&quot; to=&quot;Q*y&quot;/&gt;
-</pre></blockquote>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Source file name</b></td>
-    <td valign="top"><b>Target file name</b></td>
-  </tr>
-  <tr>
-    <td valign="top"><code>A.java</code></td>
-    <td valign="top">ignored</td>
-  </tr>
-  <tr>
-    <td valign="top"><code>foo/bar/B.java</code></td>
-    <td valign="top">ignored</td>
-  </tr>
-  <tr>
-    <td valign="top"><code>C.properties</code></td>
-    <td valign="top"><code>Q.property</code></td>
-  </tr>
-  <tr>
-    <td valign="top"><code>Classes/dir/dir2/A.properties</code></td>
-    <td valign="top"><code>Qlasses/dir/dir2/A.property</code></td>
-  </tr>
-</table>
-<h4><a name="regexp-mapper">regexp</a></h4>
-<p>Both <code>to</code> and <code>from</code> define regular
-expressions. If the source file name matches the <code>from</code>
-pattern, the target file name will be constructed from the
-<code>to</code> pattern, using <code>\0</code> to <code>\9</code> as
-back-references for the full
-match (<code>\0</code>) or the matches of the subexpressions in
-parentheses.
-Source
-files not matching the <code>from</code> pattern will be ignored.</p>
-<p>Note that you need to escape a dollar-sign (<code>$</code>) with
-another dollar-sign in Ant.</p>
-<p>The regexp mapper needs a supporting library and an implementation
-of <code>org.apache.tools.ant.util.regexp.RegexpMatcher</code> that
-hides the specifics of the library. Ant comes with implementations for
-<a href="http://java.sun.com/j2se/1.4/docs/api/java/util/regex/package-summary.html"  target="_top">the java.util.regex package of JDK 1.4</a>,
-<a href="http://jakarta.apache.org/regexp/" target="_top">jakarta-regexp</a> and <a
-href="http://jakarta.apache.org/oro/" target="_top">jakarta-ORO</a>. If you compile
-from sources and plan to use one of them, make sure the libraries are
-in your <code>CLASSPATH</code>. For information about using <a
-href="http://www.cacas.org/~wes/java/" target="_top">gnu.regexp</a> or <a
-href="http://www.crocodile.org/~sts/Rex/" target="_top">gnu.rex</a> with Ant, see <a
-href="http://marc.theaimsgroup.com/?l=ant-dev&m=97550753813481&w=2" target="_top">this</a>
-article.</p>
-<p>This means, you need <code>optional.jar</code> from the Ant release
-you are using <strong>and</strong> one of the supported regular
-expression libraries.  Make sure, both will be loaded from the same
-classpath, that is either put them into your <code>CLASSPATH</code>,
-<code>ANT_HOME/lib</code> directory or a nested
-<code>&lt;classpath&gt;</code> element of the mapper - you cannot have
-<code>optional.jar</code> in <code>ANT_HOME/lib</code> and the library
-in a nested <code>&lt;classpath&gt;</code>.</p>
-<p>Ant will choose the regular-expression library based on the
-following algorithm:</p>
-<ul>
-<li>If the system property
-<code>ant.regexp.matcherimpl</code> has been set, it is taken as the
-name of the class implementing
-<code>org.apache.tools.ant.util.regexp.RegexpMatcher</code> that
-should be used.</li>
-<li>If it has not been set, first try the JDK 1.4 classes, then
-jakarta-ORO and finally try jakarta-regexp.</li>
-</ul>
-
-<b>Examples:</b>
-<blockquote><pre>
-&lt;mapper type=&quot;regexp&quot; from=&quot;^(.*)\.java$$&quot; to=&quot;\1.java.bak&quot;/&gt;
-</pre></blockquote>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Source file name</b></td>
-    <td valign="top"><b>Target file name</b></td>
-  </tr>
-  <tr>
-    <td valign="top"><code>A.java</code></td>
-    <td valign="top"><code>A.java.bak</code></td>
-  </tr>
-  <tr>
-    <td valign="top"><code>foo/bar/B.java</code></td>
-    <td valign="top"><code>foo/bar/B.java.bak</code></td>
-  </tr>
-  <tr>
-    <td valign="top"><code>C.properties</code></td>
-    <td valign="top">ignored</td>
-  </tr>
-  <tr>
-    <td valign="top"><code>Classes/dir/dir2/A.properties</code></td>
-    <td valign="top">ignored</td>
-  </tr>
-</table>
-<blockquote><pre>
-&lt;mapper type=&quot;regexp&quot; from=&quot;^(.*)/([^/]+)/([^/]*)$$&quot; to=&quot;\1/\2/\2-\3&quot;/&gt;
-</pre></blockquote>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Source file name</b></td>
-    <td valign="top"><b>Target file name</b></td>
-  </tr>
-  <tr>
-    <td valign="top"><code>A.java</code></td>
-    <td valign="top">ignored</td>
-  </tr>
-  <tr>
-    <td valign="top"><code>foo/bar/B.java</code></td>
-    <td valign="top"><code>foo/bar/bar-B.java</code></td>
-  </tr>
-  <tr>
-    <td valign="top"><code>C.properties</code></td>
-    <td valign="top">ignored</td>
-  </tr>
-  <tr>
-    <td valign="top"><code>Classes/dir/dir2/A.properties</code></td>
-    <td valign="top"><code>Classes/dir/dir2/dir2-A.properties</code></td>
-  </tr>
-</table>
-<blockquote><pre>
-&lt;mapper type=&quot;regexp&quot; from=&quot;^(.*)\.(.*)$$&quot; to=&quot;\2.\1&quot;/&gt;
-</pre></blockquote>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Source file name</b></td>
-    <td valign="top"><b>Target file name</b></td>
-  </tr>
-  <tr>
-    <td valign="top"><code>A.java</code></td>
-    <td valign="top"><code>java.A</code></td>
-  </tr>
-  <tr>
-    <td valign="top"><code>foo/bar/B.java</code></td>
-    <td valign="top"><code>java.foo/bar/B</code></td>
-  </tr>
-  <tr>
-    <td valign="top"><code>C.properties</code></td>
-    <td valign="top"><code>properties.C</code></td>
-  </tr>
-  <tr>
-    <td valign="top"><code>Classes/dir/dir2/A.properties</code></td>
-    <td valign="top"><code>properties.Classes/dir/dir2/A</code></td>
-  </tr>
-</table>
-
-<h4><a name="package-mapper">package</a></h4>
-<p>Sharing the same syntax as the <a href="#glob-mapper">glob mapper</a>,
-the package mapper replaces
-directory separators found in the matched source pattern with dots in the target
-pattern placeholder. This mapper is particularly useful in combination
-with <code>&lt;uptodate&gt;</code> and <code>&lt;junit&gt;</code> output.</p>
-<b>Example:</b>
-<blockquote><pre>
-&lt;mapper type="package"
-        from="*Test.java" to="TEST-*Test.xml"/&gt;
-</pre></blockquote>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Source file name</b></td>
-    <td valign="top"><b>Target file name</b></td>
-  </tr>
-  <tr>
-    <td valign="top"><code>org/apache/tools/ant/util/PackageMapperTest.java</code></td>
-    <td valign="top"><code>TEST-org.apache.tools.ant.util.PackageMapperTest.xml</code></td>
-  </tr>
-  <tr>
-    <td valign="top"><code>org/apache/tools/ant/util/Helper.java</code></td>
-    <td valign="top">ignored</td>
-  </tr>
-</table>
-
-<hr>
-<p align="center">Copyright &copy; 2001 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/CoreTypes/patternset.html b/docs/manual/CoreTypes/patternset.html
deleted file mode 100644
index 67845b0..0000000
--- a/docs/manual/CoreTypes/patternset.html
+++ /dev/null
@@ -1,171 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>PatternSet Type</title>
-</head>
-
-<body>
-
-<h2><a name="patternset">PatternSet</a></h2>
-<p><a href="../dirtasks.html#patterns">Patterns</a> can be grouped to
-sets and later be referenced by their <code>id</code> attribute. They
-are defined via a <code>patternset</code> element, which can appear
-nested into a <a href="fileset.html">FileSet</a> or a directory-based
-task that constitutes an implicit FileSet. In addition,
-<code>patternset</code>s can be defined as a stand alone element at
-the same level as <code>target</code> &#151; i.e., as children of
-<code>project</code> as well as as children of
-<code>target</code>.</p> <p>Patterns can be specified by nested
-<code>&lt;include&gt;</code>, or <code>&lt;exclude&gt;</code> elements
-or the following attributes.</p>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-  </tr>
-  <tr>
-    <td valign="top">includes</td>
-    <td valign="top">comma-separated list of patterns of files that must be
-      included. All files are included when omitted.</td>
-  </tr>
-  <tr>
-    <td valign="top">includesfile</td>
-    <td valign="top">the name of a file; each line of this file is
-      taken to be an include pattern. You can specify more than one
-      include file by using a nested includesfile elements.</td>
-  </tr>
-  <tr>
-    <td valign="top">excludes</td>
-    <td valign="top">comma-separated list of patterns of files that must be
-      excluded; no files (except default excludes) are excluded when omitted.</td>
-  </tr>
-  <tr>
-    <td valign="top">excludesfile</td>
-    <td valign="top">the name of a file; each line of this file is
-      taken to be an exclude pattern. You can specify more than one
-      exclude file by using a nested excludesfile elements.</td>
-  </tr>
-</table>
-<h3>Parameters specified as nested elements</h3>
-<h4><code>include</code> and <code>exclude</code></h4>
-<p>Each such element defines a single pattern for files to include or
-exclude.</p>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">name</td>
-    <td valign="top">the <a href="../dirtasks.html#patterns">pattern</a>
-      to in/exclude.</td>
-    <td align="center" valign="top">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">if</td>
-    <td valign="top">Only use this pattern if the named property is set.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">unless</td>
-    <td valign="top">Only use this pattern if the named property is
-       <b>not</b> set.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-</table>
-<h4><code>includesfile</code> and <code>excludesfile</code></h4>
-<p>If you want to list the files to include or exclude external to
-your build file, you should use the includesfile/excludesfile
-attributes or elements.  Using the attribute, you can only specify a
-single file of each type, while the nested elements can be specified
-more than once - the nested elements also support if/unless attributes
-you can use to test the existance of a property.</p>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">name</td>
-    <td valign="top">the name of the file holding the patterns to
-      in/exclude.</td>
-    <td align="center" valign="top">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">if</td>
-    <td valign="top">Only read this file if the named property is set.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">unless</td>
-    <td valign="top">Only read this file if the named property is
-      <b>not</b> set.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-</table>
-<h4><code>patternset</code></h4>
-<p>Patternsets may be nested within one another, adding the nested
-patterns to the parent patternset.</p>
-<h3>Examples</h3>
-<blockquote><pre>
-&lt;patternset id=&quot;non.test.sources&quot; &gt;
-  &lt;include name=&quot;**/*.java&quot;/&gt;
-  &lt;exclude name=&quot;**/*Test*&quot;/&gt;
-&lt;/patternset&gt;
-</pre></blockquote>
-<p>Builds a set of patterns that matches all <code>.java</code> files
-that do not contain the text <code>Test</code> in their name. This set
-can be <a href="../using.html#references">referred</a> to via
-<code>&lt;patternset refid=&quot;non.test.sources&quot;/&gt;</code>,
-by tasks that support this feature, or by FileSets.</p>
-<p>Note that while the <code>includes</code> and
-<code>excludes</code> attributes accept
-multiple elements separated by commas or spaces, the nested
-&lt;include&gt; and &lt;exclude&gt; elements expect their name
-attribute to hold a single pattern.</p>
-<p>The nested elements allow you to use if and unless arguments to
-specify that the element should only be used if a property is set, or
-that it should be used only if a property is not set.</p>
-<p>For example</p>
-<blockquote><pre>
-&lt;patternset id=&quot;sources&quot; &gt;
-  &lt;include name=&quot;std/**/*.java&quot;/&gt;
-  &lt;include name=&quot;prof/**/*.java&quot; if=&quot;professional&quot;/&gt;
-  &lt;exclude name=&quot;**/*Test*&quot;/&gt;
-&lt;/patternset&gt;
-</pre></blockquote>
-<p>will only include the files in the sub-directory <em>prof</em> if the property
-<em>professional</em> is set to some value.</p>
-<p>The two sets</p>
-<blockquote><pre>
-&lt;patternset includesfile=&quot;some-file&quot; /&gt;
-</pre></blockquote>
-<p>and</p>
-<blockquote><pre>
-&lt;patternset&gt;
-  &lt;includesfile name=&quot;some-file&quot; /&gt; 
-&lt;patternset/&gt;
-</pre></blockquote>
-<p>are identical.  The include patterns will be read from the file
-<code>some-file</code>, one pattern per line.</p>
-<blockquote><pre>
-&lt;patternset&gt;
-  &lt;includesfile name=&quot;some-file&quot; /&gt; 
-  &lt;includesfile name=&quot;${some-other-file}&quot; 
-                if=&quot;some-other-file&quot;
-  /&gt; 
-&lt;patternset/&gt;
-</pre></blockquote>
-<p>will also read include patterns from the file the property
-<code>some-other-file</code> points to, if a property of that name has
-been defined.</p>
-<hr>
-<p align="center">Copyright &copy; 2001-2002 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/CoreTypes/xmlcatalog.html b/docs/manual/CoreTypes/xmlcatalog.html
deleted file mode 100644
index dfe4fec..0000000
--- a/docs/manual/CoreTypes/xmlcatalog.html
+++ /dev/null
@@ -1,135 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>XMLCatalog Type</title>
-</head>
-
-<body>
-
-<h2><a name="XMLCatalog">XMLCatalog</a></h2>
-<p>An XMLCatalog is a catalog of public resources such as DTDs or entities 
-that
-are referenced in an XML document and are available locally.</p>
-<p>This allows the XML Parser, XSL Processor or other consumer of XML 
-documents
-to efficiently allow a local substitution for a resource available on the 
-web.
-</p>
-<p>For example, in a <code>web.xml</code> file, the DTD is referenced as:
-<pre>
-&lt;!DOCTYPE web-app
-  PUBLIC &quot;-//Sun Microsystems, Inc.//DTD Web Application 
-2.2//EN&quot;
-  &quot;http://java.sun.com/j2ee/dtds/web-app_2_2.dtd&quot;&gt;
-</pre>
-The XML processor, without XMLCatalog support, would need to retrieve the 
-DTD from
-the URL specified whenever validation of the document was required.
-</p>
-<p>This can be very time consuming during the build process, especially 
-where 
-network throughput is limited.</p>
-</p>
-<p>XMLCatalogs can appear inside tasks
-that support this feature or at the same level as <code>target</code>
-- i.e., as children of <code>project</code> for reuse across different 
-tasks,
-e.g. XML Validation and XSL Translation.</p>
-<p>XMLCatalogs are specified as either a reference to another XMLCatalog, 
-defined
-previously in a build file, or as a list of <code>dtd</code> or
-<code>entity</code> locations.</p>
-<h3>XMLCatalog attributes</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">id</td>
-    <td valign="top">a unique name for an XMLCatalog, used for referencing 
-the
-    XMLCatalog's contents from another XMLCatalog</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">refid</td>
-    <td valign="top">the <code>id</code> of another XMLCatalog whose 
-contents
-    you would like to be used for this XMLCatalog</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-</table>
-
-<h3>XMLCatalog nested elements</h3>
-<p>The <code>dtd</code> and <code>entity</code> elements used to specify
-XMLCatalogs are identical in their structure</p>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">publicId</td>
-    <td valign="top">The public identifier used when defining a dtd or 
-entity,
-    e.g. <code>&quot;-//Sun Microsystems, Inc.//DTD Web Application 
-2.2//EN&quot;</code>
-    </td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">location</td>
-    <td valign="top">The location of the local replacement to be used for 
-the
-    public identifier specified. This may be specified as a file name, 
-resource
-    name found on the classpath, or a URL
-    </td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-</table>
-<h3>Examples</h4>
-<p>Set up an XMLCatalog with a single dtd referenced locally in a user's 
-home 
-directory:</p>
-<blockquote><pre>
-    &lt;xmlcatalog&gt;
-        &lt;dtd publicId=&quot;-//OASIS//DTD DocBook XML V4.1.2//EN&quot;
- location=&quot;/home/dion/downloads/docbook/docbookx.dtd&quot;/&gt;
-    &lt;/xmlcatalog&gt;
-</pre></blockquote>
-<p>Set up an XMLCatalog with a multiple dtds referenced locally in a 
-user's home 
-directory:</p>
-<blockquote><pre>
-    &lt;xmlcatalog id=&quot;commonDTDs&quot;&gt;
-        &lt;dtd publicId=&quot;-//OASIS//DTD DocBook XML V4.1.2//EN&quot;
- location=&quot;/home/dion/downloads/docbook/docbookx.dtd&quot;/&gt;
-        &lt;dtd publicId=&quot;-//Sun Microsystems, Inc.//DTD Web 
-Application 2.2//EN&quot;
-             location=&quot;/home/dion/web-app_2_2.dtd&quot;/&gt;
-    &lt;/xmlcatalog&gt;
-</pre></blockquote>
-<p>To reference the above xmlcatalog in a style task:<p>
-<blockquote><pre>
-    &lt;style basedir="${source.doc}"
-           destdir="${dest.xdocs}"
-           extension=".xml"
-           style="${source.xsl.converter.docbook}"
-           includes="**/*.xml"
-           force="true"&gt;
-        &lt;xmlcatalog refid=&quot;commonDTDs&quot;/&gt;
-    &lt;/style&gt;
-</pre></blockquote>
-
-<hr>
-<p align="center">Copyright &copy; 2002 Apache Software Foundation. All 
-rights
-Reserved.</p>
-
-</body>
-</html>
diff --git a/docs/manual/Integration/Antidote.html b/docs/manual/Integration/Antidote.html
deleted file mode 100644
index 63621c8..0000000
--- a/docs/manual/Integration/Antidote.html
+++ /dev/null
@@ -1,98 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "strict.dtd">
-<HTML> 
-  <HEAD> 
-     <TITLE>About Antidote</TITLE> 
-  </HEAD> 
-
-  <BODY> 
-
-    <H1>About Antidote</H1>
-
-    <P>Version 0.1 (2001/02/13)</P>
-
-    <P>Authors: 
-    <A HREF="mailto:simeon@fitch.net">Simeon H.K. Fitch</A>
-    </P>
-
-    <H2>Overview</H2> 
-
-    <P>Antidote is the <A
-    HREF="http://jakarta.apache.org/ant/index.html">Ant</A> subproject
-    for developing a graphical user interface to facilitate the
-    efficient use of Ant. In general, its purpose is to allow the
-    quick generation, modification, and use of Ant build files,
-    helping the user define a build process and track down build
-    problems. It is not meant to be an IDE, but an enabler for the
-    powerful features available in Ant, particularly for novice
-    users, or users who want a rapid way of controlling their build
-    process.</P>
-
-
-    <H2>Status</H2>
-
-    <P>Antidote is still in the early stages of development, but does
-    have a set of usable features, including:</p>
-    <UL>
-      <LI>Reading Ant build files.</LI>
-      <LI>Selecting targets and executing them.</LI>
-      <LI>Context highlighted build status console.</LI>
-      <LI>Modification of (some) build file components.</LI>
-      <LI>Saving modified build file.</LI>
-    </UL>
-
-    <P>Current development tasks include:</p>
-    <UL>
-      <LI>A more complete set of target and task editing
-      capabilities.</LI>
-      <LI>A wizard for creating basic build files, including importing
-      existing code bases.</LI>
-      <LI>Better build progress monitoring.</LI>
-    </UL>
-
-    <P>The Antidote source distribution comes with requirements and
-    design documentation that better cover the details of application
-    architecture, how to develop against it, and what the long term
-    goals are. Furthermore, there is a <code>TODO</code> file listing
-    the detailed, near-term tasks that need accomplishing.</P>
-
-    <H2>Getting Involved</H2>
-
-    <P>The source code for Antidote is located in a separate Module 
-    (<a href="http://cvs.apache.org/viewcvs/jakarta-ant-antidote/">jakarta-ant-antidote</a>) in CVS.
-    All the existing documentation can
-    be found there where new contributors should read:</p>
-    <UL>
-      <LI><A HREF="http://cvs.apache.org/viewcvs/~checkout~/jakarta-ant-antidote/docs/developer/design/design-overview.html">Design Overview</A></LI> 
-      <LI><A HREF="http://cvs.apache.org/viewcvs/~checkout~/jakarta-ant-antidote/docs/developer/design/gui-requirements.html">Feature List</A></LI>
-      <LI><A HREF="http://cvs.apache.org/viewcvs/~checkout~/jakarta-ant-antidote/docs/developer/design/gui-ideas.txt">Idea Refinement</A></LI>
-      <LI><A HREF="http://cvs.apache.org/viewcvs/~checkout~/jakarta-ant-antidote/docs/developer/design/new-module-howto.html">New Module HOWTO</A></LI>
-      <LI><A HREF="http://cvs.apache.org/viewcvs/~checkout~/jakarta-ant-antidote/docs/developer/design/uml/index.html">Static Class Diagrams</A></LI>
-    </UL>
-
-    <P>Online discussions about Antidote occur on the <A
-    HREF="http://jakarta.apache.org/site/mail.html">jakarta-ant
-    mailing list</A>. The application infrastructure is fairly
-    complete, but there are almost unlimited opportunities for feature
-    contributions.</p>
-
-    <P>Aspiring contributors new to the Jakarta Project should
-    (carefully) read the following for details on the contribution
-    process:</p>
-    <UL>
-      <LI><A
-      HREF="http://jakarta.apache.org/site/getinvolved.html">Get
-      Involved</A></LI>
-      <LI><A
-      HREF="http://jakarta.apache.org/site/guidelines.html">Project
-      Guidelines</A></LI>
-      <LI><A HREF="http://jakarta.apache.org/site/source.html">Source
-      Repositories (how to contribute patches)</A></LI>
-    </UL>
-    
-
-    <HR>
-    <P ALIGN="center">Copyright &copy; 2001 Apache Software Foundation. All
-    rights Reserved.</P>
-
-  </BODY>
-</HTML>
diff --git a/docs/manual/Integration/VAJAntTool.html b/docs/manual/Integration/VAJAntTool.html
deleted file mode 100644
index edbab0f..0000000
--- a/docs/manual/Integration/VAJAntTool.html
+++ /dev/null
@@ -1,569 +0,0 @@
-<!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 http-equiv="Content-Language" content="en-us">
-  <title>Visual Age for Java Tasks and Plugin User Manual</title>
-</head>
-<body>
-
-<H1>Visual Age for Java Tasks and Plugin User Manual</H1>
- <a name="authors"></A>by<UL>
-  <LI>Wolf Siberski
-      (<A href="mailto:wolf.siberski@tui.de">
-  wolf.siberski@tui.de</A> )
-  <LI>Christoph Wilhelms
-      (<A href="mailto:christoph.wilhelms@tui.de">
-  christoph.wilhelms@tui.de</A>)</LI></UL>
-Version 1.2 - 2001/06/14<br>
-<hr>
-<h2>Table of Contents</H2>
-<ul>
-  <li><A href="#introduction">Introduction</A>
-  <li><A href="#tasks">The Tasks</A><A href="#introduction"></A>
-  <ul>
-    <li><A href="#vajload">VAJLoad</A>&gt;
-    <li><A href="#vajexport">VAJExport</A>&gt;
-    <li><A href="#vajimport">VAJImport</A>&gt;</LI></UL>
-  <li><A href="#sample_buildfile">A sample build file</A><br>
-  <li><A href="#plugin">The Plugin</A>
-  <ul>
-    <li><A href="#installation">Installation</A>&gt;
-    <li><A href="#usage">Usage</A> </LI></UL>
-  <li><A href="#faq">Frequently Asked Questions</A>&gt;
-  <li><A href="#va_versions">Visual Age Versions</A>&gt;
-  <li><A href="#history">History</A><A href="#history"></A> </LI></UL>
-
-<hr>
-<h2><a name="introduction"></A>Introduction</H2>
-<P>Visual Age for Java is a great Java IDE, but it lacks
-decent build support; for creating deliveries. On the other hand, Ant supports
-the build process very good, but is (at least at the moment) command line based.
-So we decided to write some tasks to access the VAJ repository and a small
-visual Ant frontend to make running Ant from VAJ possible. We use the Tool API
-to integrate Ant in VisualAge for Java. In combination with the VAJ tasks
-(vajload, vajexport, vajimport) you can load defined&nbsp;versions of projects
-into your workspace, export the source code, compile it with an external
-compiler and build a jar without leaving the IDE. Of course compile messages are
-viewed in a logging window. Concluding: This tool provides decent deployment
-support VAJ has not (out of the box).</P>
-<H3>What's new</H3>
-<table cellpadding="2" cellspacing="2" border="0" width="500">
-     <tr valign="top">
-       <td valign="top">2001/06/14</TD>
-       <td valign="top">
-      <UL>
-        <LI>Now all tasks can access VAJ via 'Remote Access
-        To Tool API'. Therefore builds containing VAJ tasks can also be executed
-        from the command line (Kudos to Glenn McAllister for describing the
-        concept and providing source code at
-		<A href="http://www7.software.ibm.com/vad.nsf/Data/Document4366">
-		http://www7.software.ibm.com/vad.nsf/Data/Document4366</A>.&nbsp;
-
-        <LI>It is possible to cancel a running&nbsp;build
-        executed from the plugin
-        <LI>Improved error handling in the plugin. Now all
-        errors should show up either in the log window or in the
-    console.</LI></UL></TD></TR></TABLE>
-
-<h2><a name="tasks"></A>The Tasks</H2>
-At the moment there are three tasks which help integrating the VAJ repository
-contents into an external build process:
-
-<table cellpadding="2" cellspacing="2" border="0" width="500">
-
-     <tr valign="top">
-       <td valign="top"><A href="#vajload">VAJLoad</A><br></TD>
-       <td valign="top"> loads specified versions into the workspace<br></TD></TR>
-     <tr valign="top">
-       <td valign="top"><A href="#vajexport">VAJExport</A><br></TD>
-       <td valign="top"> exports specified packages into the file system<br></TD></TR>
-     <tr valign="top">
-       <td valign="top"><A href="#vajimport">VAJImport</A><br></TD>
-       <td valign="top"> imports specified files into the workspace<br></TD></TR></TABLE>
-<P>These tasks are described in detail below.</P>
-
-
-<hr>
-
-<P></P>
-<h2><a name="vajload"></A>VAJLoad</H2>
-<h3>Description:</H3>
-<p>Loads a specified VAJ project version into the
-workspace.</P>
-
-<h3>Parameters</H3>
-
-<table border="1" cellpadding="2" cellspacing="0">
-     <tr>
-       <td valign="top"><b>Attribute</B></TD>
-       <td valign="top"><b>Description</B></TD>
-       <td align="middle" valign="top"><b>Required</B></TD></TR>
-     <tr>
-       <td valign="top">remote</TD>
-       <td valign="top">
-      <P>name and port of a remote tool server. (format:
-      &lt;servername&gt;:&lt;port no&gt;).<BR>If this
-      attribute is set, the tasks will&nbsp;be executed on the specified tool
-      server.&nbsp;</P></TD>
-       <td valign="top" align="middle">no</TD></TR></TABLE>
-
-<h3>Parameters specified as nested elements</H3>
-<h4>vajproject</H4>
-<table border="1" cellpadding="2" cellspacing="0">
-
-     <tr>
-       <td valign="top"><b>Attribute</B></TD>
-       <td valign="top"><b>Description</B></TD>
-       <td align="middle" valign="top"><b>Required</B></TD></TR>
-     <tr>
-       <td valign="top">name</TD>
-       <td valign="top">name of the VAJ project to load into
-      the workspace</TD>
-       <td valign="top" align="middle">yes</TD></TR>
-     <tr>
-       <td valign="top">version</TD>
-       <td valign="top">name of the requested version</TD>
-       <td valign="top" align="middle">yes</TD></TR>
-     <tr>
-       <td valign="top">remote</TD>
-       <td valign="top">
-      <P>name and port of a remote tool server. (format:
-      &lt;servername&gt;:&lt;port no&gt;).<BR>If this
-      attribute is set, the tasks will&nbsp;be executed on the specified tool
-      server.&nbsp;</P></TD>
-       <td valign="top" align="middle">no</TD></TR></TABLE>
-
-<h3>Example</H3>
-<pre>&lt;vajload remote="localhost:32767"&gt;
-    &lt;vajproject name="My Testcases" version="1.7beta"/&gt;
-    &lt;vajproject name="JUnit" version="3.2" /&gt;
-&lt;/vajload&gt;
-</PRE>
-
-<hr>
-<h2><a name="vajexport"></A>VAJExport</H2>
-
-<h3>Description:</H3>
-<p>Exports Java source files, class files and/or resources from the workspace
-to the file system. Exports can be specified by giving the VAJ project
-name and package name(s). This works very similar to <A href="index.html#fileset">
-FileSets</A>. </P>
-
-<h3>Parameters</H3>
-<table border="1" cellpadding="2" cellspacing="0">
-
-     <tr>
-       <td valign="top"><b>Attribute</B></TD>
-       <td valign="top"><b>Description</B></TD>
-       <td align="middle" valign="top"><b>Required</B></TD></TR>
-     <tr>
-       <td valign="top">destdir</TD>
-       <td valign="top">location to store the exported
-files</TD>
-       <td valign="top" align="middle">yes</TD></TR>
-     <tr>
-       <td valign="top">exportSources</TD>
-       <td valign="top">export source files (default:
-"yes")</TD>
-       <td valign="top" align="middle">no</TD></TR>
-     <tr valign="top">
-       <td valign="top">exportResources</TD>
-       <td valign="top">export resource files (default:
-    "yes")</TD>
-       <td valign="top" align="middle">no</TD></TR>
-     <tr valign="top">
-       <td valign="top">exportClasses</TD>
-       <td valign="top">export class files (default: "no")</TD>
-       <td valign="top" align="middle">no</TD></TR>
-     <tr valign="top">
-       <td valign="top">exportDebugInfo</TD>
-       <td valign="top">include debug info in exported class
-      files (default: "no")</TD>
-       <td valign="top" align="middle">no</TD></TR>
-  <TR>
-    <TD vAlign=top>defaultexcludes</TD>
-    <TD vAlign=top>
-      <P>use default excludes when exporting (default: "yes").<BR>Default excludes are:&nbsp;IBM*/**, Java
-      class libraries/**, Sun class libraries*/**, JSP Page Compile Generated
-      Code/**, VisualAge*/**&nbsp;</P></TD>
-    <TD vAlign=top align="middle">no</TD></TR>
-     <tr valign="top">
-       <td valign="top">overwrite</TD>
-       <td valign="top">  overwrite existing files (default:
-      "yes")</TD>
-       <td valign="top" align="middle">no</TD></TR>
-     <tr>
-       <td valign="top">remote</TD>
-       <td valign="top">
-      <P>name and port of a remote tool server. (format:
-      &lt;servername&gt;:&lt;port no&gt;).<BR>If this
-      attribute is set, the tasks will&nbsp;be executed on the specified tool
-      server.&nbsp;</P></TD>
-       <td valign="top" align="middle">no</TD></TR></TABLE>
-
-<h3>Parameters specified as nested elements</H3>
-
-<h4>include</H4>
-specifies the packages to include into the export
-
-<table border="1" cellpadding="2" cellspacing="0">
-
-     <tr>
-       <td valign="top"><b>Attribute</B></TD>
-       <td valign="top"><b>Description</B></TD>
-       <td align="middle" valign="top"><b>Required</B></TD></TR>
-     <tr>
-       <td valign="top">name</TD>
-       <td valign="top">name of the VAJ project and package to export.<br>
-              The first element of the name must be the project name, <br>
-              then the package name elements
-      separated by '/'.</TD>
-       <td valign="top">yes</TD></TR></TABLE>
-
-<h4>exclude</H4>
-specifies the packages to exclude from the export<br>
-
-<table border="1" cellpadding="2" cellspacing="0">
-
-     <tr>
-       <td valign="top"><b>Attribute</B></TD>
-       <td valign="top"><b>Description</B></TD>
-       <td align="middle" valign="top"><b>Required</B></TD></TR>
-     <tr>
-       <td valign="top">name</TD>
-       <td valign="top">name of the VAJ project/package not to
-      export</TD>
-       <td valign="top" align="middle">yes</TD></TR></TABLE>
-
-<h3>Example</H3>
-<pre>&lt;vajexport destdir="${src.dir}" exportResources="no"&gt;
-    &lt;include name="MyProject/**"/&gt;
-    &lt;exclude name="MyProject/test/**"/&gt;
-&lt;/vajexport&gt;
-</PRE>
-This example exports all packages in the VAJ project 'MyProject', except
-packages starting with 'test'.
-<h3>Default Excludes</H3>
-The default excludes are:<br>
-<pre>	IBM*/**
-	Java class libraries/**
-	Sun class libraries*/**
-	JSP Page Compile Generated Code/**
-	VisualAge*/**
-</PRE>
-<hr>
-<h2><a name="vajimport"></A>VAJImport</H2>
-
-<h3>Description:</H3>
-<p>Imports Java source files, class files and/or resources
-from the file system into VAJ. These imports can be specified with a fileset.
-</P>
-<h3>Parameters</H3>
-<table border="1" cellpadding="2" cellspacing="0">
-
-     <tr>
-       <td valign="top"><b>Attribute</B></TD>
-       <td valign="top"><b>Description</B></TD>
-       <td align="middle" valign="top"><b>Required</B></TD></TR>
-     <tr>
-       <td valign="top">vajProject</TD>
-       <td valign="top">imported files are added to this VAJ
-      project</TD>
-       <td valign="top" align="middle">yes</TD></TR>
-     <tr>
-       <td valign="top">importSources</TD>
-       <td valign="top">export source files (default:
-"yes")</TD>
-       <td valign="top" align="middle">no</TD></TR>
-     <tr valign="top">
-       <td valign="top">importResources</TD>
-       <td valign="top">export resource files (default:
-    "yes")</TD>
-       <td valign="top" align="middle">no</TD></TR>
-     <tr valign="top">
-       <td valign="top">importClasses</TD>
-       <td valign="top">export class files (default: "no")</TD>
-       <td valign="top" align="middle">no</TD></TR>
-     <tr>
-       <td valign="top">remote</TD>
-       <td valign="top">
-      <P>name and port of a remote tool server. (format:
-      &lt;servername&gt;:&lt;port no&gt;).<BR>If this
-      attribute is set, the tasks will&nbsp;be executed on the specified tool
-      server.&nbsp;</P></TD>
-       <td valign="top" align="middle">no</TD></TR></TABLE>
-
-<h3>Parameters specified as nested elements</H3>
-
-<h4>fileset</H4>
-A <A href="index.html#fileset">FileSet</A> specifies the files to import.
-
-<h3>Example</H3>
-<pre>&lt;vajimport project="Test" importClasses="true"&gt;
-    &lt;fileset dir="${import.dir}"&gt;
-        &lt;include name="com/sample/**/*.class"/&gt;
-        &lt;exclude name="com/sample/test/**"/&gt;
-    &lt;/fileset&gt;
-&lt;/vajimport&gt;
-</PRE>
-This example imports all class files in the directory ${import.dir}/com/sample
-excluding those in the subdirectory test<br>
-
-<hr>
-<h2><a name="sample_buildfile"></A>The
-Plugin</H2>
-The tasks are usable within VAJ by running the
-org.apache.tools.ant.Main class, but this is
-quite inconvenient. Therefore a small GUI is
-provided which allows selecting a build file
-and executing its targets. This Plugin is accessible
-from the VAJ Tools menu (see <A href="#usage">Usage</A>).
-
-<hr>
-<h2><a name="installation"></A>Installation</H2>
-<p>At the moment the installation has it's rough edges. If something
-described below doesn't work for You, it's probably not Your fault
-but incomplete/wrong instructions. In this case, please contact one
-of the <A href="#authors">authors</A>.</P>
-<p>We assume <CODE>C:\IBMVJava</CODE> as VAJ
-install directory. If You have installed it elsewhere, adapt the pathes below.
-<h3>Plugin</H3>
-<ul>
-  <li>install the Visual Age IDE Tools (via File-&gt;Quick
-  Start-&gt; Add feature-&gt;'IBM IDE Utility class libraries'
-  <li>import an appropriate XML parser to VAJ (we use Xerces
-  1.2.0 and are happy with it). Unfortunately the XML parser delivered with VAJ
-  (in the project 'IBM XML Parser for Java') doesn't work with Ant. You have to
-  remove that project (temporarily) from the workspace before importing another
-  XML implementation.
-
-  <li>import the Ant sources <STRONG>and </STRONG>   resources into VAJ.
-  <li>Create the directory <CODE>
-      C:\IBMVJava\ide\tools\org-apache-tools-ant</CODE>.
-  <li>export the Ant and XML parser class and resource files
-  into this directory. Be sure to select class files <STRONG>and</STRONG>
-          resources. Sources don't have to
-  be exported. Some optional tasks have errors and can't be exported when You
-  don't have the necessary packages in Your workspace (e.g. junit task, ejbc
-  task). If You need this tasks either import these packages into VAJ, too, or
-  copy the .class files directly from the binary distribution.
-  <li>copy <CODE>default.ini</CODE> (in <CODE>
-      jakarta-ant\src\...\taskdefs\optional\ide</CODE>)     to <CODE>
-      C:\IBMVJava\ide\tools\org-apache-tools-ant\default.ini</CODE>.
-
-  <li>if you want to access this help from the Workbench, create the
-      directory <CODE> C:\IBMVJava\ide\tools\org-apache-tools-ant\doc</CODE>
-      and copy the files     <CODE>VAJAntTool.html</CODE>,
-      <CODE>toolmenu.gif</CODE> and     <CODE>
-      anttool1.gif</CODE> to it.
-  <li>VAJ has to be restarted to recognize the new tool.
-  <li>Now if You open the context menu of a project, You should see the entry
-     'Ant Build' in the Tools submenu (see <A href="#usage">Usage</A>).
-  <li>Make sure the tool works as expected. Now You can
-  remove Ant and the imported XML parser from Your workspace (and optionally add
-  the IBM parser again). </LI></UL>
-  <h3>Servlets for Remote Tool Access</H3>
-<UL>
-  <LI>
-                   For
-        a good introduction into the VAJ Remote Tool Access see the
-        great introduction from Glenn McAllister at
-		<A href="http://www7.software.ibm.com/vad.nsf/Data/Document4366">
-		http://www7.software.ibm.com/vad.nsf/Data/Document4366</A>.&nbsp;It
-  is highly recommended to read this article before doing the installation (to
-  understand what you do :-) ).
-  <LI>insert the following lines into
-  <code>C:\IBMVJava\ide\tools\com-ibm-ivj-toolserver\servlets\servlet.properties</CODE>.
-  Typically this file is empty. If not, be careful not to delete the other lines.
-  <table cellpadding="0" cellspacing="0" border="0" width="500">
-     <tr valign="top">
-       <td valign="top">
-<PRE>servlet.vajload.code=org.apache.tools.ant.taskdefs.optional.ide.VAJLoadServlet
-servlet.vajexport.code=org.apache.tools.ant.taskdefs.optional.ide.VAJExportServlet
-servlet.vajimport.code=org.apache.tools.ant.taskdefs.optional.ide.VAJImportServletName<PRE>  </PRE></PRE></TD></TR></TABLE>
-  <LI>export the following classes from the package
-  <CODE>org.apache.tools.ant</CODE>
-  to <CODE>C:\IBMVJava\ide\tools\com-ibm-ivj-toolserver\servlets\</CODE>:<BR>
-  <CODE>BuildException<BR>
-  DirectoryScanner<BR>
-  FileScanner<BR>
-  Location</CODE>
-  <LI>export the following classes from the package
-  <CODE>org.apache.tools.ant.taksdefs.optional.ide</CODE>
-  to <CODE>C:\IBMVJava\ide\tools\com-ibm-ivj-toolserver\servlets\</CODE>:<BR>
-  <CODE>VAJUtil<BR>
-  VAJExportServlet<BR>
-  VAJImportServlet<BR>
-  VAJLoadServlet<BR>
-  VAJLocalUtil<BR>
-  VAJProjectDescription<BR>
-  VAJToolsServlet<BR>
-  VAJWorkspaceScanner</CODE>
-  <LI>configure the Remote Access (via
-  Window-&gt;Options..., then choose 'Remote Access To Tool API') as shown in
-  the following picture:</LI></UL>
-  <P align=center><IMG height=645 alt="" src="remacc.gif"
- width=587 border=0 ></P>
-<P>Now you should be able to execute VAJ Tasks from the
-command line.</P>
-
-<hr>
-<h2><a name="usage"></A>Usage</H2>
-<H3>Plugin</H3>
-<P>
- When the tool is installed correctly and your Ant build
-file is configured, it is really easy to use.<br>
-Go to your Workbench, select the project you want to deploy and
-open its context menu. In the submenu <i>Tools</I> you should find
-the new entry <i>Ant Build</I>. Klick it to start the tool! </P>
-
-<center><IMG height=246 src="toolmenu.gif" width=393 border=0></CENTER>
-           After a short time this frame should pop up:
-<center><IMG height=241 alt=""
- src="anttool1.gif"
- width=389 border=0></CENTER>
-           This frame contains the following elements:
-<ul>
-  <li>A menubar with some options described later
-  <li>The name of your selected VAJ project
-  <li>An entry field for the Ant XML buildfile with a browse
-  [...] button. The full qualified filename, including the directory is needed
-  here.
-  <li>A list with tasks specified in the buildfile. Until your first save of
-      the build info (described later), this list will be empty. When loading
-      a build file by the ( <EM>Re)Load&nbsp;</EM> button, this list
-      is filled with all tasks which have a description attribute. The
-      task you select in this list will be executed when pressing the
-      <EM>Execute&nbsp;</EM> button.
-  <li>A pulldown box for specifying the log level.
-  <li>Four buttons. Two of them I have already
-  described. The other are the <EM>Stop</EM> button to cancel a running build
-  and the third one is just the <EM>Close</EM> button to exit our small tool!
-  <li>Note that the build is canceled on the next console
-  output after pressing the <EM>Stop</EM> button, not
-  directly after pressing it.</LI></UL>
-<P>
-After you have set up your buildprocess you might find it useful
-to save the data you've just entered, so we implemented an option to
-save it to the  repository into your selected project. Make sure that you
-have an open edition of your project before selecting
-<i>Save
-BuildInfo To Repository</I> from  the <i>File</I> menu.
-Now your information is saved to this edition of your  project and will
-be loaded automatically the next time you start <i>Ant Build</I>.<br>
-If you have closed the log window accidentally, it can be reopened
-with the <i>Log</I> item in the <i>File</I> menu, and if you want to
-know who developed this, just select <i>About</I> in the <i>Help</I> menu. </P>
-<H3>Servlets for Remote Tool Access</H3>
-<P>With the servlets installed and the remote access
-running you can use Ant from the command line without any restrictions. Just
-make sure the remote attribute in your build file is set correctly.</P>
-<hr>
-<h2><a name="faq"></A>Frequently Asked
-Questions</H2>
-<P><STRONG>Q: If I try to load a build
-file, I get the error "Can't load default task list". Why?</STRONG><br>
-A: Ant not only contains class files, but also resource
-files. This messsage appears if the file
-<BR>.../org/apache/tools/ant/taskdefs/defaults.properties is
-missing. Make sure that you import/export not only java/class files, but also
-all resource files when importing/exporting Ant.</P>
-<P><STRONG>Q: I want to load, export
-and build more then one Visual Age project to one jar! How to?</STRONG><br>
-A: The VA tasks are able to load and export several
-Projects all at once. You can choose whatever project you like for storing the
-tool information, it doesn't really matter </P>
-<p><STRONG>Q: When I load my build
-file, the list of targets is empty. Why?</STRONG><br>
-A: You
-need to add the optional "description" parameter to the targets you want to come
-up in the list. Then reload the build file in the "ant build" tool. We chose to
-display only targets with description to allow the build file developer to
-distinguish between targets for end users and helper targets. </P>
-<p><STRONG>Q: Is there a sample build
-file available? </STRONG><br>
-A: Now you can find an <A href="#sample_buildfile">example</A> in this manual </P>
-<p><STRONG>Q: Why does it export my
-entire workspace when I've already implicitly selected a project when starting
-the Tool?</STRONG><br>
-A: This selection does not carry into
-the buildfile you are using. Set the Project name at the beginning of the
-"includes" parameter. </P>
-<p><STRONG>Q: When I import Ant into
-my Workspace, I get Problems reported. Can I ignore them?</STRONG><br>
-A: It depends on the problems reported, and what you want to do with Ant.
-Problems you can't ignore:
-<ul>
-  <li>Classes from javax.xml.parser missing - install a compatible parser
-      (see <A href="#installation">installation</A>)
-  <li>Classes from com.ibm.ivj.util missing - install the Visual Age IDE
-      Utility feature  (see <A href="#installation">installation</A>).
-  <li>Errors in optional tasks you use within your build
-  file</LI></UL>
-<br>
-
-<p><STRONG>Q: I want to use the same
-buildfile both within Visual Age and from the command line using my regular Ant
-environment. What do I need to be aware of?</STRONG><br>
-A:
-You have to specifie a remote server via the 'remote' attribute. Otherwise the
-three Visual Age tasks won't work when executing Ant from the command line. </P>
-
-<p><STRONG>Q: I can export packages
-from project 'ABC', but not from project 'XYZ'! Why?</STRONG><br>
-A: Common reasons are:</P>
-<UL>
-<li>The project is excluded by the default excludes (see
-  attribute 'defaultexcludes' of VAJExport)
-<li>When looking at the project in the workspace, it is
-  often difficult to distinguish between project name and version name (e.g. as
-  in 'My GUI Components Java 2 3.5'). Check if you have the right project name
-  by switching off the version name display temporarilly.</LI></UL>
-<p><STRONG>Q: How do I control the
-import/export of sourcefiles, compiled files and project resources
-explicity?</STRONG><br>
-A: Via the Boolean values
-exportClasses (default false) exportSources (default true) and exportResources
-(default true). In some situations, Resources are not exported correctly without
-this being explicity set. VAJ doesn't export resources correctly if a package
-contains only resources (see below).</P>
-<hr>
-<h2><a name="known_problems"></A>Known
-Problems</H2>
-<ul>
-  <li>Exporting a package containing just resources doesn't
-  work. This is a VAJ Tool API bug. Workaround: create a dummy class and set
-  'exportSources' to false. </LI></UL>
-<hr>
-
-<h2><a name="va_versions"></A>VisualAge
-for Java Versions</H2>
-This tool integration has been tested with versions 3.02 and 3.5
-of VisualAge for Java. It should run with the 2.x Versions, too, but
-we didn't try. The graphical user interface is built with AWT so it is
-JDK independent by now.
-<hr>
-
-<h2><a name="history"></A>History</H2>
-<table cellpadding="2" cellspacing="2" border="1" width="400">
-     <tr valign="top">
-       <td valign="top">1.0</TD>
-       <td valign="top">2000/09/11</TD>
-       <td valign="top">Initial Version</TD></TR>
-  <TR>
-    <TD vAlign=top>1.1</TD>
-    <TD vAlign=top>2001/02/14</TD>
-    <TD vAlign=top>Added Task documentation and more FAQs
-      (thanks to Richard Bourke for the FAQ additions) </TD></TR>
-     <tr valign="top">
-       <td valign="top">1.2</TD>
-       <td valign="top">2001/07/02</TD>
-       <td valign="top">
-      <P>Added documentation of new remote feature.<BR>Minor corrections.</P></TD></TR></TABLE>
-<hr>
-<center>Copyright &amp;#copy 2001,2002 Apache Software
-Foundation. All rights Reserved.</CENTER>
-</body>
-</html>
-
diff --git a/docs/manual/Integration/anttool1.gif b/docs/manual/Integration/anttool1.gif
deleted file mode 100644
index ad450ba..0000000
--- a/docs/manual/Integration/anttool1.gif
+++ /dev/null
Binary files differ
diff --git a/docs/manual/Integration/jext-plugin.html b/docs/manual/Integration/jext-plugin.html
deleted file mode 100644
index c6d05c0..0000000
--- a/docs/manual/Integration/jext-plugin.html
+++ /dev/null
@@ -1,42 +0,0 @@
-<!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 http-equiv="Content-Language" content="en-us">
-  <title>Apache AntWork Plugin for the Jext - Java Text Editor</title>
-</head>
-<body>
-
-<h1>AntWork Plugin for the Jext - Java Text Editor</h1>
- <a name="authors"></a>by<ul>
-  <li>Klaus Hartlage
-      (<a href="mailto:KHartlage@t-online.de">KHartlage@t-online.de</a>)</li>
-</ul>
-<p>Version $Revision$ - $Date$</p>
-<hr>
-
-<p>You can download the plugin at: <a
-href="ftp://jext.sourceforge.net/pub/jext/plugins/AntWork.zip">ftp://jext.sourceforge.net/pub/jext/plugins/AntWork.zip</a></p>
-
-<h2>Installation instructions from the Readme.txt:</h2>
-
-<p>You have to enable the Jext Console to see the Ant output (menu:
-Edit->Options... - General Panel), because the Ant messages are
-redirected to the Jext console.</p>
-
-<p>You can configure the Ant call in the Jext menu: Edit->Options... -
-Plugin Options - Antwork Plugin Panel; here you can set the ant home
-directory and the path to your build file.</p>
-
-<p>You can start AntWork in the menu: Plugins->Ant->Work Now!  In the
-appearing dialog box you can enter the target which you want to
-compile.</p>
-
-<p>If a javac error occurs in the ant run an error-list opens within
-Jext. With a double-click on the error-message you jump to the error
-in the specified java text file.</p>
-
-<hr>
-<p align="center">Copyright &copy; 2001 Apache Software Foundation. All rights
-Reserved.</p>
-</body></html>
\ No newline at end of file
diff --git a/docs/manual/Integration/remacc.gif b/docs/manual/Integration/remacc.gif
deleted file mode 100644
index e02e048..0000000
--- a/docs/manual/Integration/remacc.gif
+++ /dev/null
Binary files differ
diff --git a/docs/manual/Integration/toolmenu.gif b/docs/manual/Integration/toolmenu.gif
deleted file mode 100644
index 164db44..0000000
--- a/docs/manual/Integration/toolmenu.gif
+++ /dev/null
Binary files differ
diff --git a/docs/manual/LICENSE b/docs/manual/LICENSE
deleted file mode 100644
index b279c7a..0000000
--- a/docs/manual/LICENSE
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * ============================================================================
- *                   The Apache Software License, Version 1.1
- * ============================================================================
- * 
- *    Copyright (C) 2000-2002 The Apache Software Foundation. All
- *    rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without modifica-
- * tion, are permitted provided that the following conditions are met:
- * 
- * 1. Redistributions of  source code must  retain the above copyright  notice,
- *    this list of conditions and the following disclaimer.
- * 
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- *    this list of conditions and the following disclaimer in the documentation
- *    and/or other materials provided with the distribution.
- * 
- * 3. The end-user documentation included with the redistribution, if any, must
- *    include  the following  acknowledgment:  "This product includes  software
- *    developed  by the  Apache Software Foundation  (http://www.apache.org/)."
- *    Alternately, this  acknowledgment may  appear in the software itself,  if
- *    and wherever such third-party acknowledgments normally appear.
- * 
- * 4. The names "Ant" and  "Apache Software Foundation"  must not be used to
- *    endorse  or promote  products derived  from this  software without  prior
- *    written permission. For written permission, please contact
- *    apache@apache.org.
- * 
- * 5. Products  derived from this software may not  be called "Apache", nor may
- *    "Apache" appear  in their name,  without prior written permission  of the
- *    Apache Software Foundation.
- * 
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS  FOR A PARTICULAR  PURPOSE ARE  DISCLAIMED.  IN NO  EVENT SHALL  THE
- * APACHE SOFTWARE  FOUNDATION  OR ITS CONTRIBUTORS  BE LIABLE FOR  ANY DIRECT,
- * INDIRECT, INCIDENTAL, SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL  DAMAGES (INCLU-
- * DING, BUT NOT LIMITED TO, PROCUREMENT  OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR  PROFITS; OR BUSINESS  INTERRUPTION)  HOWEVER CAUSED AND ON
- * ANY  THEORY OF LIABILITY,  WHETHER  IN CONTRACT,  STRICT LIABILITY,  OR TORT
- * (INCLUDING  NEGLIGENCE OR  OTHERWISE) ARISING IN  ANY WAY OUT OF THE  USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- * 
- * This software  consists of voluntary contributions made  by many individuals
- * on behalf of the  Apache Software Foundation.  For more  information  on the 
- * Apache Software Foundation, please see <http://www.apache.org/>.
- *
- */
diff --git a/docs/manual/OptionalTasks/BorlandEJBTasks.html b/docs/manual/OptionalTasks/BorlandEJBTasks.html
deleted file mode 100644
index b1ae9f8..0000000
--- a/docs/manual/OptionalTasks/BorlandEJBTasks.html
+++ /dev/null
@@ -1,100 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Borland EJB Tasks</title>
-</head>
-
-<body>
-
-<h2><a name="log">BorlandDeploy</a>Tool</h2>
-<h3>Description</h3>
-<p>The BorlandDeployTool is a vendor specific nested element for the Ejbjar optional task.</p>
-<p>BorlandDeploymentTool is dedicated to the Borland Application Server 4.5. It 
-  generates and compiles the stubs and skeletons for all ejb described into the 
-  Deployment Descriptor, builds the jar file including the support files and 
-  verify whether the produced jar is valid or not.</p>
-<h3>Borland element</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr> 
-    <td valign="top" width="63"><b>Attribute</b></td>
-    <td valign="top" width="915"><b>Description</b></td>
-    <td align="center" valign="top" width="62"><b>Required</b></td>
-  </tr>
-  <tr> 
-    <td valign="top" width="63">destdir</td>
-    <td valign="top" width="915">The base directory into which the generated borland 
-      ready jar files are deposited</td>
-    <td align="center" valign="middle" width="62">yes</td>
-  </tr>
-  <tr> 
-    <td valign="top" width="63">debug</td>
-    <td valign="top" width="915">If true, turn on the debug mode for each borland 
-      tools (java2iiop, iastool ...) default = false</td>
-    <td align="center" valign="middle" width="62">no</td>
-  </tr>
-  <tr> 
-    <td valign="top" width="63">verify</td>
-    <td valign="top" width="915">If true, turn on the verification at the end 
-      of the jar production (default = false)</td>
-    <td align="center" valign="middle" width="62">no</td>
-  </tr>
-  <tr> 
-    <td valign="top" width="63">verifyargs</td>
-    <td valign="top" width="915">extra parameter for verify command</td>
-    <td align="center" valign="middle" width="62">no</td>
-  </tr>
-  <tr> 
-    <td valign="top" width="63">suffix</td>
-    <td valign="top" width="915">String value appended to the basename of the 
-      deployment descriptor to create the filename of the Borland EJB jar file.</td>
-    <td align="center" valign="middle" width="62">No, defaults to '-ejb.jar'.</td>
-  </tr>
-  <tr> 
-    <td valign="top" width="63">basdtd</td>
-    <td valign="top" width="915"><b>Deprecated</b>. Defines the location of the 
-      weblogic-ejb-jar DTD which covers the Borland specific deployment descriptors. 
-      This should not be necessary if you have borland in your classpath. If you 
-      do not, you should use a nested &lt;dtd&gt; element, described above</td>
-    <td align="center" valign="middle" width="62">no</td>
-  </tr>
-  <tr> 
-    <td valign="top" width="63">ejbdtd</td>
-    <td valign="top" width="915"><b>Deprecated</b>. Defines the location of the 
-      ejb-jar DTD in the weblogic class hierarchy. This should not be necessary 
-      if you have weblogic in your classpath. If you do not, you should use a 
-      nested &lt;dtd&gt; element, described above. </td>
-    <td align="center" valign="middle" width="62">no</td>
-  </tr>
-  <tr> 
-    <td valign="top" width="63">generateclient </td>
-    <td valign="top" width="915">If true, turn on the generation of the corresponding 
-      ejbjar (default = false)</td>
-    <td align="center" valign="middle" width="62">no</td>
-  </tr>
-</table>
-
-<h3>Examples</h3>
-<p>The following build.xml snippet is an example of how to use Borland element 
-  into the ejbjar task</p>
-<pre>    &lt;ejbjar srcdir=&quot;${build.classes}&quot;  basejarname=&quot;vsmp&quot;  descriptordir=&quot;${rsc.dir}/hrmanager&quot;&gt;
-        &lt;borland destdir=&quot;lib&quot; verify=&quot;on&quot; generateclient=&quot;on&quot;&gt;
-          &lt;classpath refid=&quot;classpath&quot; /&gt;
-        &lt;/borland&gt;      
-        &lt;include name=&quot;**\ejb-jar.xml&quot;/&gt;
-        &lt;support dir=&quot;${build.classes}&quot;&gt;
-          &lt;include name=&quot;demo\*.class&quot;/&gt;
-          &lt;include name=&quot;demo\helper\*.class&quot;/&gt;
-         &lt;/support&gt;
-     &lt;/ejbjar&gt;</pre>
-<pre>The borland element will generate into the lib dir an ejb jar file using the deployment descriptor placed into the ${rsc.dir}/hrmanager directory.
-The verify phase is turned on and the generate client phase as well. 
-</pre>
-
-<h3>&nbsp;</h3>
-<p align="center">Copyright &copy; 2001 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/OptionalTasks/BorlandGenerateClient.html b/docs/manual/OptionalTasks/BorlandGenerateClient.html
deleted file mode 100644
index fbb201d..0000000
--- a/docs/manual/OptionalTasks/BorlandGenerateClient.html
+++ /dev/null
@@ -1,65 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>BorlandGenerateClient Task</title>
-</head>
-
-<body>
-
-<h2><a name="log">BorlandGenerateClient</a></h2>
-<h3>Description</h3>
-<p>The BorlandGenerateClient is a task dedicated to Borland Application Server 
-  v 4.5. It offers to generate the client jar file corresponding to an ejb jar 
-  file.</p>
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr> 
-    <td valign="top" width="63"><b>Attribute</b></td>
-    <td valign="top" width="915"><b>Description</b></td>
-    <td align="center" valign="top" width="62"><b>Required</b></td>
-  </tr>
-  <tr> 
-    <td valign="top" width="63">ejbjar</td>
-    <td valign="top" width="915">ejb jar file</td>
-    <td align="center" valign="middle" width="62">yes</td>
-  </tr>
-  <tr> 
-    <td valign="top" width="63">debug</td>
-    <td valign="top" width="915">If true, turn on the debug mode for each borland 
-      tools (java2iiop, iastool ...) default = false</td>
-    <td align="center" valign="middle" width="62">no</td>
-  </tr>
-  <tr> 
-    <td valign="top" width="63">clientjar</td>
-    <td valign="top" width="915">client jar file name. If missing the client jar 
-      file name is build using the ejbjar file name: ejbjar = hellobean-ejb.jar 
-      =&gt; hellobean-ejbclient.jar</td>
-    <td align="center" valign="middle" width="62">no</td>
-  </tr>
-  <tr>
-    <td valign="top" width="63">mode</td>
-    <td valign="top" width="915">choose the command launching mode. Two values: 
-      java or fork. default = java. Possibility to specify a classpath.</td>
-    <td align="center" valign="middle" width="62">no</td>
-  </tr>
-</table>
-
-<h3>Examples</h3>
-<p>The following build.xml snippet is an example of how to use Borland element 
-   into the ejbjar task using the java mode.</p>
-<pre>
-&lt;blgenclient ejbjar=&quot;lib/secutest-ejb.jar&quot; clientjar=&quot;lib/client.jar&quot; debug=&quot;true&quot; mode=&quot;java&quot;&gt;
-    &lt;classpath&gt;
-        &lt;pathelement locacation=&quot;mymodule.jar&quot;/&gt;
-    &lt;/classpath&gt;
-&lt;/blgenclient&gt;
-</pre>
-<pre>&nbsp;</pre>
-
-<p align="center">Copyright &copy; 2001 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/OptionalTasks/antlr.html b/docs/manual/OptionalTasks/antlr.html
deleted file mode 100644
index fdffaf7..0000000
--- a/docs/manual/OptionalTasks/antlr.html
+++ /dev/null
@@ -1,113 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>ANTLR Task</title>
-</head>
-
-<body>
-
-<h2><a name="antlr">ANTLR</a></h2>
-<h3>Description</h3>
-<p>
-  Invokes the <a HREF="http://www.antlr.org/" target="_top">ANTLR</a> Translator generator
-  on a grammar file.
-</p>
-<p>
-  To use the ANTLR task, set the <i>target</i> attribute to the name of the
-  grammar file to process.  Optionally, you can also set the
-  <i>outputdirectory</i> to write the generated file to a specific directory.
-  Otherwise ANTLR writes the generated files to the directory containing
-  the grammar file.
-</p>
-<p>
-  This task only invokes ANTLR if the grammar file is newer than the generated
-  files.
-</p>
-<p>
-<i>
-  To successfully run ANTLR, your best option is probably to build the whole
-  jar with the provided script <b>mkalljar</b> and drop the resulting jar (about 300KB)
-  into ${ant.home}/lib. Dropping the default jar (70KB) is probably not enough
-  for most needs and your only option will be to add ANTLR home directory
-  to your classpath as described in ANTLR <tt>install.html</tt> document.
-</i>
-</p>
-
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">target</td>
-    <td valign="top">The grammar file to process.</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">outputdirectory</td>
-    <td valign="top">
-      The directory to write the generated files to.  If not set, the files
-      are written to the directory containing the grammar file.
-    </td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <!--tr>
-    <td valign="top">fork</td>
-    <td valign="top">Run ANTLR in a separate VM.</td>
-    <td align="center" valign="top">No, default is &quot;off&quot;</td>
-  </tr-->
-  <tr>
-    <td valign="top">dir</td>
-    <td valign="top">The directory to invoke the VM in. <!--(ignored if
-      fork is disabled)--></td>
-    <td align="center" valign="top">No</td>
-  </tr>
-</table>
-
-<h3><a name="nested">Nested Elements</a></h3>
-
-<p><code>ANTLR</code> supports a nested <code>&lt;classpath&gt;</code>
-element, that represents a <a href="../using.html#path">PATH like
-structure</a>. It is given as a convenience if you have to specify
-the original ANTLR directory. In most cases, dropping the appropriate
-ANTLR jar in the normal Ant lib repository will be enough.</p>
-
-<h4>jvmarg</h4>
-
-<p><!--If fork is enabled, -->Additional parameters may be passed to the new
-VM via nested <code>&lt;jvmarg&gt;</code> attributes, for example:</p>
-
-<pre>
-&lt;antlr target=...&gt;
-  &lt;jvmarg value=&quot;-Djava.compiler=NONE&quot;/&gt;
-  ...
-&lt;/antlr&gt;
-</pre>
-
-<p>would run ANTLR in a VM without JIT.</p>
-
-<p><code>&lt;jvmarg&gt;</code> allows all attributes described in <a
-href="../using.html#arg">Command line arguments</a>.</p>
-
-<h3>Example</h3>
-<blockquote><pre>
-&lt;antlr
-    target=&quot;etc/java.g&quot;
-    outputdirectory=&quot;build/src&quot;
-/&gt;
-</pre></blockquote>
-<p>
-  This invokes ANTLR on grammar file etc/java.g, writing the generated
-  files to build/src.
-</p>
-<hr>
-
-<p align="center">Copyright &copy; 2001 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/OptionalTasks/cab.html b/docs/manual/OptionalTasks/cab.html
deleted file mode 100644
index bb71716..0000000
--- a/docs/manual/OptionalTasks/cab.html
+++ /dev/null
@@ -1,130 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Cab Task</title>
-</head>
-
-<body>
-
-<h2><a name="cab">Cab</a></h2>
-<h3>Description</h3>
-<p>The cab task creates Microsoft cab archive files.  It is invoked
-similar to the <a href="../CoreTasks/jar.html">jar</a> or <a href="../CoreTasks/zip.html">zip</a> tasks.
-This task will work on Windows using the external cabarc tool (provided by Microsoft)
-which must be located in your executable path.</p>
-<p>To use this task on other platforms you need to download and compile libcabinet from 
-<a href="http://trill.cis.fordham.edu/~barbacha/cabinet_library/">
-http://trill.cis.fordham.edu/~barbacha/cabinet_library/</a>.</p>
-<p>See the section on <a href="../dirtasks.html#directorybasedtasks">directory based
-tasks</a>, on how the inclusion/exclusion of files works, and how to
-write patterns.</p>
-<p>This task forms an implicit <a href="../CoreTypes/fileset.html">FileSet</a> and
-supports all attributes of <code>&lt;fileset&gt;</code>
-(<code>dir</code> becomes <code>basedir</code>) as well as the nested
-<code>&lt;include&gt;</code>, <code>&lt;exclude&gt;</code> and
-<code>&lt;patternset&gt;</code> elements.</p>
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">cabfile</td>
-    <td valign="top">the name of the cab file to create.</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">basedir</td>
-    <td valign="top">the directory to start archiving files from.</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">verbose</td>
-    <td valign="top">set to &quot;yes&quot; if you want to see the output from
-      the cabarc tool.  defaults to &quot;no&quot;.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">compress</td>
-    <td valign="top">set to &quot;no&quot; to store files without compressing.
-      defaults to &quot;yes&quot;.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">options</td>
-    <td valign="top">use to set additional command-line options for
-      the cabarc tool.  should not normally be necessary.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">includes</td>
-    <td valign="top">comma separated list of patterns of files that
-      must be included. All files are included when omitted.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">includesfile</td>
-    <td valign="top">the name of a file. Each line of this file is
-      taken to be an include pattern</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">excludes</td>
-    <td valign="top">comma separated list of patterns of files that
-      must be excluded. No files (except default excludes) are excluded
-      when omitted.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">excludesfile</td>
-    <td valign="top">the name of a file. Each line of this file is
-      taken to be an exclude pattern</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">defaultexcludes</td>
-    <td valign="top">indicates whether default excludes should be used
-      or not (&quot;yes&quot;/&quot;no&quot;). Default excludes are used when omitted.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-</table>
-<h3>Examples</h3>
-<blockquote><pre>
-&lt;cab cabfile=&quot;${dist}/manual.cab&quot;
-     basedir=&quot;htdocs/manual&quot; 
-  /&gt;
-</pre></blockquote>
-<p>cabs all files in the htdocs/manual directory into a file called
-manual.cab in the ${dist} directory.</p>
-<blockquote><pre>
-&lt;cab cabfile=&quot;${dist}/manual.cab&quot;
-     basedir=&quot;htdocs/manual&quot;
-     excludes=&quot;mydocs/**, **/todo.html&quot;
-  /&gt;
-</pre></blockquote>
-<p>cabs all files in the htdocs/manual directory into a file called
-manual.cab in the ${dist} directory. Files in the directory mydocs,
-or files with the name todo.html are excluded.</p>
-<blockquote><pre>
-&lt;cab cabfile=&quot;${dist}/manual.cab&quot;
-     basedir=&quot;htdocs/manual&quot;
-     includes=&quot;api/**/*.html&quot;
-     excludes=&quot;**/todo.html&quot;
-     verbose=&quot;yes&quot;
-  /&gt;
-</pre></blockquote>
-<p>Cab all files in the htdocs/manual directory into a file called
-manual.cab in the ${dist} directory. Only html files under the
-directory api are archived, and files with the name todo.html are
-excluded. Output from the cabarc tool is displayed in the build
-output.</p>
-<hr>
-<p align="center">Copyright &copy; 2001 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/OptionalTasks/ccm.html b/docs/manual/OptionalTasks/ccm.html
deleted file mode 100644
index 339a133..0000000
--- a/docs/manual/OptionalTasks/ccm.html
+++ /dev/null
@@ -1,238 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Continuus Tasks</title>
-</head>
-
-<body>
-
-<h1>Continuus Support</h1>
-<ul>
-  <li><a href="#cccheckin">CCMCheckin</a></li>
-  <li><a href="#cccheckout">CCMCheckout</a></li>
-  <li><a href="#ccmcheckintask">CCMCheckinTask</a></li>
-  <li><a href="#ccmreconfigure">CCMReconfigure</a></li>
-  <li><a href="#ccmcreatetask">CCMCreateTask</a></li>
-</ul>
-
-<p>These ant tasks are wrappers around Continuus Source Manager. They have been tested 
-  with version 5.1 on Windows 2000, but should work on other platforms with ccm installed.</p>
-<hr>
-<h2><a name="cccheckin">CCMCheckin</a></h2>
-<h3>Description</h3>
-Task to checkin a file
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0" width="598">
-  <tr> 
-    <th>Attribute</th>
-    <th>Values</th>
-    <th>Required</th>
-  </tr>
-  <tr> 
-    <td>file</td>
-    <td>Path to the file that the command will operate on</td>
-    <td>Yes</td>
-  </tr>
-  <tr> 
-    <td>comment</td>
-    <td>Specify a comment. Default is &quot;Checkin&quot; plus the date</td>
-    <td>No</td>
-  </tr>
-  <tr> 
-    <td>task</td>
-    <td>Specify the task number used to check in the file (may use 'default')</td>
-    <td>No</td>
-  </tr>
-  <tr> 
-    <td>ccmcommand</td>
-    <td>path to the ccm executable file, required if it is not on the PATH</td>
-    <td>No</td>
-  </tr>
-</table> 
-<h3>Examples</h3>
-<blockquote>
-  <pre>&lt;ccmcheckin file=&quot;c:/wa/com/foo/MyFile.java&quot;
-        comment=&quot;mycomment&quot; /&gt;
-</pre>
-</blockquote>
-<p>Checks in the file <i>c:/wa/com/foo/MyFile.java</i>. 
-  Comment attribute <i>mycomment</i> is added as a task comment. The task 
-  used is the one set as the default.</p>
-<hr>
-<h2><a name="cccheckout">CCMCheckout</a></h2>
-<h3>Description</h3>
-Task to perform a Checkout command to Continuus 
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0" width="614">
-  <tr> 
-    <th>Attribute</th>
-    <th>Values</th>
-    <th>Required</th>
-  </tr>
-  <tr> 
-    <td>file</td>
-    <td>Path to the file that the command will operate on</td>
-    <td>Yes</td>
-  </tr>
-  <tr> 
-    <td>comment</td>
-    <td>Specify a comment.</td>
-    <td>No</td>
-  </tr>
-  <tr> 
-    <td>task</td>
-    <td>Specify the task number used to checkin the file (may use 
-      'default')</td>
-    <td>No</td>
-  </tr>
-  <tr> 
-    <td>ccmcommand</td>
-    <td>path to the ccm executable file, required if it is not on the PATH</td>
-    <td>No</td>
-  </tr>
-</table>
-<h3>Examples</h3>
-<blockquote> 
-  <pre>&lt;ccmcheckout file=&quot;c:/wa/com/foo/MyFile.java&quot;
-        comment=&quot;mycomment&quot;/&gt;
-</pre>
-</blockquote>
-<p>Check out the file <i>c:/wa/com/foo/MyFile.java</i>. 
-  Comment attribute <i>mycomment</i> is added as a task comment
-   The used task is the one set as the default.</p>
-<hr>
-<h2><a name="ccmcheckintask">CCMCheckinTask</a></h2>
-<h3>Description</h3>
-Task to perform a check in default task command to Continuus 
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr> 
-    <th>Attribute</th>
-    <th>Values</th>
-    <th>Required</th>
-  </tr>
-  <tr> 
-    <td>comment</td>
-    <td>Specify a comment.</td>
-    <td>No</td>
-  </tr>
-  <tr> 
-    <td>task</td>
-    <td>Specify the task number used to check in the file (may use 'default')</td>
-    <td>No</td>
-  </tr>
-  <tr> 
-    <td>ccmcommand</td>
-    <td >path to the ccm executable file, required if it is not on the PATH</td>
-    <td>No</td>
-  </tr>
-</table>
-<h3>Examples </h3>
-<blockquote>
-  <pre>&lt;ccmcheckintask comment=&quot;blahblah/&gt;
-</pre>
-</blockquote>
-<p>Does a Checkin default task on all the checked out files in the current task.</p>
-<hr>
-<h2><a name="ccmreconfigure">CCMReconfigure</a></h2>
-<h3>Description</h3>
-Task to perform an reconfigure command to Continuus. 
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr> 
-    <th>Attribute</th>
-    <th>Values</th>
-    <th>Required</th>
-  </tr>
-  <tr> 
-    <td>recurse</td>
-    <td>recurse on subproject (default false)</td>
-    <td>No</td>
-  </tr>
-  <tr> 
-    <td>verbose</td>
-    <td>do a verbose reconfigure operation (default false)</td>
-    <td>No</td>
-  </tr>
-  <tr> 
-    <td>ccmproject</td>
-    <td>Specifies the ccm project on which the operation is applied.</td>
-    <td>Yes</td>
-  </tr>
-  <tr> 
-    <td>ccmcommand</td>
-    <td >path to the ccm executable file, required if it is not on the PATH</td>
-    <td>No</td>
-  </tr>
-</table>
-<h3>Examples</h3>
-<blockquote>
- <pre>&lt;ccmreconfigure ccmproject=&quot;ANTCCM_TEST#BMO_1&quot; 
-         verbose=&quot;true&quot; /&gt;
-</pre>
-</blockquote>
-<p>Does a Continuus <i>reconfigure</i> on the project <i>ANTCCM_TEST#BMO_1</i>. 
-</p>
-<hr>
-<h2><a name="ccmcreatetask">CCMCreateTask</a></h2>
-<h3>Description</h3>
-Create a Continuus task. 
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr> 
-    <th>Attribute</th>
-    <th>Values</th>
-    <th>Required</th>
-  </tr>
-  <tr> 
-    <td>comment</td>
-    <td>Specify a comment.</td>
-    <td>No</td>
-  </tr>
-  <tr> 
-    <td>platform</td>
-    <td>Specify the target platform</td>
-    <td>No</td>
-  </tr>
-  <tr> 
-    <td>ccmcommand</td>
-    <td >path to the ccm executable file, required if it is not on the PATH</td>
-    <td>No</td>
-  </tr>
-  <tr> 
-    <td>resolver</td>
-    <td>Specify the resolver</td>
-    <td>No</td>
-  </tr>
-  <tr> 
-    <td>release</td>
-    <td>Specify the CCM release</td>
-    <td>No</td>
-  </tr>
-  <tr> 
-    <td>subsystem</td>
-    <td>Specify the subsystem</td>
-    <td>No</td>
-  </tr>
-  <tr> 
-    <td>task</td>
-    <td>Specify the task number used to checkin the file (may use 'default')</td>
-    <td>No</td>
-  </tr>
-</table>
-<h3>Examples</h3>
-<blockquote> 
-  <pre>&lt;ccmcreatetask resolver=&quot;${user.name}&quot; 
-            release=&quot;ANTCCM_TEST&quot; comment=&quot;blahblah&quot; /&gt;
-</pre>
-</blockquote>
-<p>Creates a task for the release <i>ANTCCM_TEST</i> with the 
-  current user as the resolver for this task.</p>
-
-<hr>
-<p align="center">Copyright &copy; 2001 Apache Software Foundation. All rights
-Reserved.</p>
-</body>
-
-</html>
diff --git a/docs/manual/OptionalTasks/clearcase.html b/docs/manual/OptionalTasks/clearcase.html
deleted file mode 100644
index 8e6fa3e..0000000
--- a/docs/manual/OptionalTasks/clearcase.html
+++ /dev/null
@@ -1,261 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Clearcase Tasks</title>
-</head>
-
-<body>
-
-<h1>ClearCase Support</h1>
-<ul>
-  <li><a href="#cccheckin">CCCheckin</a></li>
-  <li><a href="#cccheckout">CCCheckout</a></li>
-  <li><a href="#ccuncheckout">CCUnCheckout</a></li>
-  <li><a href="#ccupdate">CCUpdate</a></li>
-</ul>
-
-<hr>
-<h2><a name="cccheckin">CCCheckin</a></h2>
-<h3>Description</h3>
-Task to perform a Checkin command to ClearCase.
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <th>Attribute</th>
-    <th>Values</th>
-    <th>Required</th>
-  </tr>
-  <tr>
-    <td>viewpath</td>
-    <td>Path to the ClearCase view file or directory that the command 
-        will operate on</td>
-    <td>No</td>
-  </tr>
-  <tr>
-    <td>comment</td>
-    <td>Specify a comment. Only one of comment or commentfile may be used.</td>
-    <td>No</td>
-  </tr>
-  <tr>
-    <td>commentfile</td>
-    <td>Specify a file containing a comment. Only one of comment or commentfile 
-        may be used.</td>
-    <td>No</td>
-  </tr>
-  <tr>
-    <td>nowarn</td>
-    <td>Suppress warning messages</td>
-    <td>No</td>
-  </tr>
-  <tr>
-    <td>preservetime</td>
-    <td>Preserve the modification time</td>
-    <td>No</td>
-  </tr>
-  <tr>
-    <td>keepcopy</td>
-    <td>Keeps a copy of the file with a .keep extension</td>
-    <td>No</td>
-  </tr>
-  <tr>
-    <td>identical</td>
-    <td>Allows the file to be checked in even if it is identical 
-        to the original</td>
-    <td>No</td>
-  </tr>
-</table>
-<h3>Examples</h3>
-<blockquote>
-<pre>
-&lt;cccheckin viewpath=&quot;c:/views/viewdir/afile&quot;
-        commentfile=&quot;acomment.txt&quot;/&gt;
-        nowarn=&quot;true&quot;
-        identical=&quot;true&quot;
-</pre>
-</blockquote>
-<p>Does a ClearCase <i>checkin</i> on the file <i>c:/views/viewdir/afile</i>. 
-Comment text from the file <i>acomment.txt</i> is added to ClearCase as a comment.
-All warning messages are suppressed. The file is checked in even if it is
-<i>identical</i> to the original.</p>
-<hr>
-<h2><a name="cccheckout">CCCheckout</a></h2>
-<h3>Description</h3>
-Task to perform a Checkout command to ClearCase.
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <th>Attribute</th>
-    <th>Values</th>
-    <th>Required</th>
-  </tr>
-  <tr>
-    <td>viewpath</td>
-    <td>Path to the ClearCase view file or directory that the command 
-        will operate on</td>
-    <td>No</td>
-  </tr>
-  <tr>
-    <td>reserved</td>
-    <td>Specifies whether to check out the file as reserved or not</td>
-    <td>Yes</td>
-  </tr>
-  <tr>
-    <td>out</td>
-    <td>Creates a writable file under a different filename</td>
-    <td>No</td>
-  </tr>
-  <tr>
-    <td>nodata</td>
-    <td>Checks out the file but does not create an editable file 
-        containing its data</td>
-    <td>No</td>
-  </tr>
-  <tr>
-    <td>branch</td>
-    <td>Specify a branch to check out the file to</td>
-    <td>No</td>
-  </tr>
-  <tr>
-    <td>version</td>
-    <td>Allows checkout of a version other than main latest</td>
-    <td>No</td>
-  </tr>
-  <tr>
-    <td>nowarn</td>
-    <td>Suppress warning messages</td>
-    <td>No</td>
-  </tr>
-  <tr>
-    <td>comment</td>
-    <td>Specify a comment. Only one of comment or commentfile may be used.</td>
-    <td>No</td>
-  </tr>
-  <tr>
-    <td>commentfile</td>
-    <td>Specify a file containing a comment. Only one of comment or 
-        commentfile may be used.</td>
-    <td>No</td>
- </tr>
-</table>
-<h3>Examples</h3>
-<blockquote>
-<pre>
-&lt;cccheckout viewpath=&quot;c:/views/viewdir/afile&quot;
-        reserved=&quot;true&quot; 
-        branch=&quot;abranch&quot;
-        nowarn=&quot;true&quot;
-        comment=&quot;Some comment text&quot;/&gt;
-</pre>
-</blockquote>
-<p>Does a ClearCase <i>checkout</i> on the file <i>c:/views/viewdir/afile</i>. 
-It is checked out as <i>reserved</i> on branch called <i>abranch</i>. All 
-warning messages are suppressed. A <i>Some comment text</i> is added to 
-ClearCase as a comment.</p>
-<hr>
-<h2><a name="ccuncheckout">CCUnCheckout</a></h2>
-<h3>Description</h3>
-Task to perform a UnCheckout command to ClearCase.
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <th>Attribute</th>
-    <th>Values</th>
-    <th>Required</th>
-  </tr>
-  <tr>
-    <td>viewpath</td>
-    <td>Path to the ClearCase view file or directory that the command 
-        will operate on</td>
-    <td>No</td>
-  </tr>
-  <tr>
-    <td>keepcopy</td>
-    <td>Specifies whether to keep a copy of the file with a .keep 
-        extension or not</td>
-    <td>No</td>
-  </tr>
-</table>
-<h3>Examples</h3>
-<blockquote>
-<pre>
-&lt;ccuncheckout viewpath=&quot;c:/views/viewdir/afile&quot;
-        keepcopy=&quot;true&quot;/&gt;
-</pre>
-</blockquote>
-<p>Does a ClearCase <i>uncheckout</i> on the file <i>c:/views/viewdir/afile</i>. 
-A copy of the file called <i>c:/views/viewdir/afile.keep</i> is kept.</p>
-<hr>
-<h2><a name="ccupdate">CCUpdate</a></h2>
-<h3>Description</h3>
-Task to perform an Update command to ClearCase.
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <th>Attribute</th>
-    <th>Values</th>
-    <th>Required</th>
-  </tr>
-  <tr>
-    <td>viewpath</td>
-    <td>Path to the ClearCase view file or directory that the command 
-        will operate on</td>
-    <td>No</td>
-  </tr>
-  <tr>
-    <td>graphical</td>
-    <td>Displays a graphical dialog during the update</td>
-    <td>No</td>
-  </tr>
-  <tr>
-    <td>log</td>
-    <td>Specifies a log file for ClearCase to write to</td>
-    <td>No</td>
-  </tr>
-  <tr>
-    <td>overwrite</td>
-    <td>Specifies whether to overwrite hijacked files or not</td>
-    <td>No</td>
-  </tr>
-  <tr>
-    <td>rename</td>
-    <td>Specifies that hijacked files should be renamed with a .keep extension</td>
-    <td>No</td>
-  </tr>
-  <tr>
-    <td>currenttime</td>
-    <td>Specifies that modification time should be written as the 
-        current time. Either currenttime or preservetime can be 
-        specified.</td>
-    <td>No</td>
-  </tr>
-  <tr>
-    <td>preservetime</td>
-    <td>Specifies that modification time should preserved from the 
-        VOB time. Either currenttime or preservetime can be 
-        specified.</td>
-    <td>No</td>
-  </tr>
-</table>
-<h3>Examples</h3>
-<blockquote>
-<pre>
-&lt;ccupdate viewpath=&quot;c:/views/viewdir&quot;
-        graphical=&quot;false&quot; 
-        log=&quot;log.log&quot;
-        overwrite=&quot;true&quot;
-        currenttime=&quot;true&quot;
-        rename=&quot;false&quot;/&gt;
-</pre>
-</blockquote>
-<p>Does a ClearCase <i>update</i> on the directory <i>c:/views/viewdir</i>. 
-A graphical dialog will be displayed. The output will be logged to 
-<i>log.log</i> and it will overwrite any hijacked files. The modified 
-time will be set to the current time.</p>
-
-<hr>
-<p align="center">Copyright &copy; 2001 Apache Software Foundation. All rights
-Reserved.</p>
-</body>
-
-</html>
diff --git a/docs/manual/OptionalTasks/depend.html b/docs/manual/OptionalTasks/depend.html
deleted file mode 100644
index 6d48337..0000000
--- a/docs/manual/OptionalTasks/depend.html
+++ /dev/null
@@ -1,195 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Depend Task</title>
-</head>
-
-<body>
-
-<h2>Depend</h2>
-
-A task to manage Java class file dependencies.
-
-<h3>Description</h3>
-
-<p>
-The depend task works by determining which classes are out of date with
-respect to their source and then removing the class files of any other
-classes which depend on the out-of-date classes.
-</p>
-
-<p> To determine the class dependencies, the depend task analyses the class 
-files of all class files passed to it. Depend does not parse your source code in 
-any way but relies upon the class references encoded into the class files by the 
-compiler. This is generally faster than parsing the Java source.</p>
-
-<p>
-To learn more about how this information is obtained from the class files, 
-please refer to <a href="http://java.sun.com/docs/books/vmspec/">the Java 
-Virtual Machine Specification</a>
-</p>
-
-<p> Since a class' dependencies only change when the class itself changes, the 
-depend task is able to cache dependency information. Only those class files 
-which have changed will have their dependency information re-analysed. Note that 
-if you change a class' dependencies by changing the source, it will be 
-recompiled anyway. You can examine the dependency files created to understand 
-the  dependencies of your classes. Please do not rely, however, on the format of 
-the information, as it may change in a later release. </p>
-
-<p> Once depend discovers all of the class dependencies, it &quot;inverts&quot; 
-this relation to determine, for each class, which other classes are dependent 
-upon it. This &quot;affects&quot; list is used to discover which classes are 
-invalidated by the out of date class. The class files of the invalidated 
-classes are removed, triggering the compilation of the affected classes. </p>
-
-<p> The depend task supports an attribute, &quot;closure&quot; which controls 
-whether depend will only consider direct class-class relationships or whether it 
-will also consider transitive, indirect relationships. For example, say there 
-are three classes, A, which depends on B, which in-turn depend on C. Now say 
-that class C is out of date. Without closure, only class B would be removed by 
-depend. With closure set, class A would also be removed. Normally direct 
-relationships are sufficient - it is unusual for a class to depend on another 
-without having a direct relationship. With closure set, you will notice that 
-depend typically removes far more class files. </p>
-
-<p>The classpath attribute for <code>&lt;depend&gt;</code> is optional. If it is present, 
-depend will check class dependencies against classes and jars on this classpath.
-Any classes which depend on an element from this classpath and which are older 
-than that element will be deleted. A typical example where you would use this 
-facility would be where you are building a utility jar and want to make sure 
-classes which are out of date with respect to this jar are rebuilt. You should
-<b>not</b> include jars in this classpath which you do not expect to change, 
-such as the JDK runtime jar or third party jars, since doing so will just slow 
-down the dependency check. This means that if you do use a classpath for the 
-depend task it may be different from the classpath necessary to actually 
-compile your code.</p>
-
-<h3>Performance</h3> 
-
-<p> The performance of the depend task is dependent on a 
-number of factors such as class relationship complexity and how many class files 
-are out of date. The decision about whether it is cheaper to just recompile all 
-classes or to use the depend task will depend on the size of your project and 
-how interrelated your classes are. </p>
-
-
-<h3>Limitations</h3>
-
-<p> There are some source dependencies which depend will not detect. </p>
-
-<ul>
-<li>If the Java compiler optimizes away a class relationship, 
-    there can be a source dependency without a class dependency. </li>
-    
-<li>Non public classes cause two problems. Firstly depend cannot relate
-    the class file to a source file. In the future this may be addressed
-    using the source file attribute in the classfile. Secondly, neither 
-    depend nor the compiler tasks can detect when a non public class is
-    missing. Inner classes are handled by the depend task.</li>
-</ul>
-
-The most obvious example of these limitations is that the task can't tell
-which classes to recompile when a constant primitive data type exported 
-by other classes is changed. For example, a change in the definition of
-something like
-<pre>
-public final class Constants {
-  public final static boolean DEBUG=false;
-}
-</pre> will not be picked up by other classes.
-
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">srcDir</td>
-    <td valign="top">This is the directory where the source exists. depend
-will examine this to determine which classes are out of date. If you use multiple
-source directories you can pass this attribute a path of source directories.</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">destDir</td>
-    <td valign="top">This is the root directory of the class files which
-will be analysed. If this is not present, the srcdir is used.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">cache</td>
-    <td valign="top">This is a directory in which depend can store and
-retrieve dependency information. If this is not present, depend will not
-use a cache </td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">closure</td>
-    <td valign="top">This attribute controls whether depend only removes
-classes which directly depend on out of date classes. If this is set to true,
-depend will traverse the class dependency graph deleting all affected
-classes. Defaults to false</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">dump</td>
-    <td valign="top">If true the dependency information will be written to the debug level log
-                     </td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">classpath</td>
-    <td valign="top">The classpath containg jars and classes for which <code>&lt;depend&gt;</code> should also
-                     check dependencies</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-</table>
-
-<h3>Parameters specified as nested elements</h3>
-<p>The <code>depend</code> task's <code>classpath</code> attribute is a 
-<a href="../using.html#path">PATH-like structure</a> and can also be set
-via a nested <code>&lt;classpath&gt;</code> element.</p>
-
-<p>Additionally,
-this task forms an implicit
-<a href="../CoreTypes/fileset.html">FileSet</a>
-and supports all attributes of
-<code>&lt;fileset&gt;</code> (<code>dir</code> becomes <code>srcdir</code>),
-as well as the nested <code>&lt;include&gt;</code>,
-<code>&lt;exclude&gt;</code>, and <code>&lt;patternset&gt;</code> elements.
-
-<h3>Examples</h3>
-<pre>&lt;depend srcdir=&quot;${java.dir}&quot;
-        destdir=&quot;${build.classes}&quot;
-        cache=&quot;depcache&quot;
-        closure=&quot;yes&quot;/&gt;</pre>
-
-<p>removes any classes in the <code>${build.classes}</code> directory
-that depend on out-of-date classes. Classes are considered out-of-date with 
-respect to the source in the <code>${java.dir}</code> directory, using the same
-mechanism as the <code>&lt;javac&gt;</code> task. In this example, the
-<code>&lt;depend&gt;</code> task caches its dependency 
-information in the <code>depcache</code> directory. </p>
-
-<pre>
-&lt;depend srcdir=&quot;${java.dir}&quot; destdir=&quot;${build.classes}&quot;
-        cache=&quot;depcache&quot; closure=&quot;yes&quot;&gt;
-  &lt;include name=&quot;**/*.java&quot;/&gt;
-  &lt;excludesfile name=&quot;${java.dir}/build_excludes&quot;/&gt;
-&lt;/depend&gt;
-</pre>
-<p>does the same as the previous example, but explicitly includes all
-<code>.java</code> files, except those that match the list given
-in <code>${java.dir}/build_excludes</code>.</p>
-
-<hr>
-<p align="center">Copyright &copy; 2001-2002 Apache Software Foundation.
-All rights Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/OptionalTasks/dotnet.html b/docs/manual/OptionalTasks/dotnet.html
deleted file mode 100644
index 2570f7b..0000000
--- a/docs/manual/OptionalTasks/dotnet.html
+++ /dev/null
@@ -1,495 +0,0 @@
-<html>
-<head>
-<title>.NET Tasks</title>
-</head>
-
-<body>
-<h1>.NET tasks</h1>
-
-
-
-<hr>
-<h2>&lt;CSC&gt;</h2>
-
-This task compiles CSharp source into executables or modules.
-
-This task compiles CSharp source into executables or modules. The task will
-only work on win2K/XP or other platforms with csc.exe or an equivalent.
-CSC must be on the execute path.
-
-<p>
-All parameters are optional: &lt;csc/&gt; should suffice to produce a debug
-build of all *.cs files. References to external files do require explicit 
-enumeration, so are one of the first attributes to consider adding. </p>
-
-<p>
-
-The task is a directory based task, so attributes like 
-<b>includes=&quot;**/*.cs&quot;</b> and 
-<b>excludes=&quot;broken.cs&quot;</b> can be used to control 
-the files pulled in. By default, 
-all *.cs files from the project folder down are included in the command. 
-When this happens the destFile -if not specified-
-is taken as the first file in the list, which may be somewhat hard to control.
-Specifying the output file with <b>'destfile'</b> seems prudent. </p>
-<p>
-Also, dependency checking only works if destfile is set.
-
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Example Values</b></td>
-  </tr>
-
-<tr>
-    <td valign="top">additionalModules</td>
-    <td valign="top">Semicolon separated list of modules to refer to</td>
-    </tr>
-  <tr>
-    <td valign="top">defaultexcludes</td>
-    <td valign="top">indicates whether default excludes should be used or not
-      </td>
-    <td valign="top">&quot;true&quot;(default) or &quot;false&quot;</td>
-    </tr>
-<tr>
-    <td valign="top">definitions</td>
-    <td valign="top">defined constants</td>
-    <td valign="top"> &quot;RELEASE;BETA1&quot;</td>
-    </tr>
-<tr>
-    <td valign="top">debug</td>
-    <td valign="top">include debug information</td>
-    <td valign="top">&quot;true&quot;(default)</td>
-    </tr>
-
-<tr>
-    <td valign="top">destFile</td>
-    <td valign="top">name of exe/library to create</td>
-    <td valign="top">&quot;example.exe&quot;</td>
-    </tr>
-<tr>
-    <td valign="top">docFile</td>
-    <td valign="top">name of file for documentation</td>
-    <td valign="top">&quot;doc.xml&quot;</td>
-    </tr>
-  <tr>
-    <td valign="top">excludes</td>
-    <td valign="top">comma separated list of patterns of files that must be
-      excluded. No files (except default excludes) are excluded when omitted.</td>
-  </tr>
-  <tr>
-    <td valign="top">excludesfile</td>
-    <td valign="top">the name of a file. Each line of this file is
-      taken to be an exclude pattern</td>
-  </tr>
-  <tr>
-    <td valign="top">extraOptions</td>
-    <td valign="top">Any extra options which aren't explicitly 
-        supported by the CSharp task </td>
-    <td>&quot;/warnaserror+ /baseaddress:0x12840000&quot;</td>
-  </tr>
-
-  <tr>
-    <td valign="top">failOnError</td>
-    <td valign="top">Should a failed compile halt the build?</td>
-    <td valign="top">&quot;true&quot;(default) or &quot;false&quot;</td>
-  </tr>
-  
-  <tr>
-    <td valign="top">fileAlign</td>
-    <td valign="top">
-     set the file alignment.
-     Valid values are 0,512, 1024, 2048, 4096, 8192, and 16384
-     0 means 'leave to the compiler'    
-    </td>
-    <td valign="top">512</td>
-  </tr>
-  <tr>
-    <td valign="top">fullpaths</td>
-    <td valign="top">print the full path of files on on errors</td>
-  </tr>
-    
-  <tr>
-    <td valign="top">includes</td>
-    <td valign="top">comma separated list of patterns of files that must be
-      included. All files are included when omitted.</td>
-  </tr>
-  <tr>
-    <td valign="top">includeDefaultReferences</td>
-    <td valign="top">Flag which when true automatically includes
-    the common assemblies in dotnet, and tells the compiler to link in
-    mscore.dll
-    </td>
-    <td valign="top">&quot;true&quot;(default) or &quot;false&quot;</td>
-  </tr>
-
-  <tr>
-    <td valign="top">includesfile</td>
-    <td valign="top">the name of a file. Each line of this file is
-      taken to be an include pattern</td>
-  </tr>
-
-<tr>
-    <td valign="top">incremental</td>
-    <td valign="top">Incremental build flag. Avoid till it works</td>
-    <td valign="top">&quot;true&quot; or &quot;false&quot;(default)</td>
-    </tr>
-<tr>
-    <td valign="top">mainClass</td>
-    <td valign="top">name of main class for executables</td>
-    <td valign="top">&quot;com.example.project.entrypoint&quot;</td>
-    </tr>
-<tr>
-    <td valign="top">noConfig</td>
-    <td valign="top">a flag which tells the compiler not
-    to read in the compiler settings files 'csc.rsp' in its
-    bin directory and then the local directory</td>
-    <td valign="top">&quot;true&quot; or &quot;false&quot;(default)</td>
-    </tr>
-<tr>
-    <td valign="top">optimize</td>
-    <td valign="top">optimisation flag</td>
-    <td valign="top">&quot;true&quot; or &quot;false&quot;(default)</td>
-    </tr>
-<tr>
-    <td valign="top">references</td>
-    <td valign="top">Semicolon separated list of dlls to refer to</td>
-    <td valign="top">&quot;mylib.dll;nunit.dll&quot;</td>
-    </tr>
-<tr>
-    <td valign="top">referenceFiles </td>
-    <td valign="top">Ant Path descriptioon of references to include. 
-    Wildcards should work. </td>
-    <td valign="top"></td>
-    </tr>
-    
-<tr>
-    <td valign="top">srcDir</td>
-    <td valign="top">source directory (default = project directory)</td>
-    <td valign="top">&quot;.&quot;</td>
-    </tr>
-<tr>
-    <td valign="top">targetType</td>
-    <td valign="top">Type of target</td>
-    <td valign="top">&quot;exe&quot;, &quot;module&quot;, &quot;winexe&quot; or &quot;library&quot;</td>
-    </tr>
-<tr>
-    <td valign="top">unsafe</td>
-    <td valign="top">enable the <b>unsafe</b> keyword</td>
-    <td valign="top">&quot;true&quot; or &quot;false&quot;(default)</td>
-    </tr>
-<tr>
-    <td valign="top">utf8output</td>
-    <td valign="top">require all compiler output to be in utf-8 format</td>
-    <td valign="top">&quot;true&quot; or &quot;false&quot;(default)</td>
-    </tr>
-<tr>
-    <td valign="top">warnLevel</td>
-    <td valign="top">level of warning currently between 1 and 4 with 4
-    being the strictest. </td>
-    <td valign="top">&quot;1&quot;-&quot;4&quot;</td>
-    </tr>
-<tr>
-    <td valign="top">win32Icon</td>
-    <td valign="top">filename of icon to include</td>
-    <td valign="top">&quot;res/myicon.ico&quot;</td>
-   </tr>
-<tr>
-    <td valign="top">win32res</td>
-    <td valign="top">filename of a win32 resource (.RES)file to include
-    This is not a .NET resource, but it what windows is used to.</td>
-    <td valign="top">&quot;res/myapp.res&quot;</td>
-   </tr>
-
-</table>
-<p>
-Example
-</p>
-<pre>&lt;csc
-        optimize=&quot;true&quot;
-        debug=&quot;false&quot;
-        docFile=&quot;documentation.xml&quot;
-        warnLevel=&quot;4&quot;
-        unsafe=&quot;false&quot;
-        targetType=&quot;exe&quot;
-        incremental=&quot;false&quot;
-        definitions=&quot;RELEASE&quot;
-        excludes=&quot;src/unicode_class.cs&quot;
-        mainClass = &quot;MainApp&quot;
-        destFile=&quot;NetApp.exe&quot;
-        /&gt;   
-</pre>
-<hr>
-<h2>&lt;ilasm&gt;</h2>
-<p>Task to assemble .net 'Intermediate Language' files.
-The task will only work on windows until other platforms support csc.exe or 
-an equivalent. ilasm.exe must be on the execute path too.
-</p>
-<p>
-All parameters are optional: &lt;il/&gt; should suffice to produce a debug
-build of all *.il files.
-The option set is roughly compatible with the CSharp class;
-even though the command line options are only vaguely
-equivalent. [The low level commands take things like /OUT=file,
-csc wants /out:file ... /verbose is used some places; /quiet here in
-ildasm... etc.] It would be nice if someone made all the command line
-tools consistent (and not as brittle as the java cmdline tools) 
-</p>
-
-<p>
-
-The task is a directory based task, so attributes like <b>includes=&quot;*.il&quot;</b> and 
-<b>excludes=&quot;broken.il&quot;</b> can be used to control the files pulled in. 
-Each file is built on its own, producing an appropriately named output file unless
-manually specified with <b>outfile</b>
-</p>
-
-
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Example</b></td>
-  </tr>
-
-  <tr>
-    <td valign="top">defaultexcludes</td>
-    <td valign="top">indicates whether default excludes should be used or not
-      (&quot;yes&quot;/&quot;no&quot;). Default excludes are used when omitted.</td>
-  </tr>
-
-  <tr>
-    <td valign="top">debug</td>
-    <td valign="top">include debug information</td>
-    <td valign="top">true (default)</td>
-  </tr>
-
-  <tr>
-    <td valign="top">excludes</td>
-    <td valign="top">comma separated list of patterns of files that must be
-      excluded. No files (except default excludes) are excluded when omitted.</td>
-  </tr>
-  <tr>
-    <td valign="top">excludesfile</td>
-    <td valign="top">the name of a file. Each line of this file is
-      taken to be an exclude pattern</td>
-  </tr>
-  <tr>
-    <td valign="top">extraOptions</td>
-    <td valign="top">Any extra options which aren't explicitly 
-        supported by the ilasm task, primarily because they
-                arent really documented: use ilasm /? to see them</td>
-    <td></td>
-  </tr>
-  
-  <tr>
-      <td valign="top">failOnError</td>
-      <td valign="top">Should a failed compile halt the build?</td>
-      <td valign="top">&quot;true&quot;(default)</td>
-      </tr>
-  <tr>
-    <td valign="top">fullpaths</td>
-    <td valign="top">Should error text provide the full path to files</td>
-    <td valign="top">&quot;true&quot;(default)</td>
-  </tr>    
-  <tr>
-    <td valign="top">includes</td>
-    <td valign="top">comma separated list of patterns of files that must be
-      included. All files are included when omitted.</td>
-  </tr>
-  <tr>
-    <td valign="top">includesfile</td>
-    <td valign="top">the name of a file. Each line of this file is
-      taken to be an include pattern</td>
-  </tr>
-  <tr>
-    <td valign="top">keyfile</td>
-    <td valign="top">the name of a file containing a private key, with which
-      the assembly output is checksumed and then MD5 signed 
-      to have a <i>strong name</i></td>
-  </tr>
-<tr>
-    <td valign="top">listing</td>
-    <td valign="top">Produce a listing (off by default). Listings go to the
-    current output stream</td>
-    <td valign="top">&quot;on&quot;, &quot;off&quot; (default)</td>
-    </tr>
-<tr>
-    <td valign="top">outputFile</td>
-    <td valign="top">filename of output</td>
-    <td valign="top">&quot;example.exe&quot;</td>
-    </tr>
-<tr>
-    <td valign="top">resourceFile</td>
-    <td valign="top">name of resource file to include</td>
-    <td valign="top">&quot;resources.res&quot;</td>
-    </tr>
-<tr>
-    <td valign="top">srcDir</td>
-    <td valign="top">source directory (default = project directory)</td>
-    <td valign="top"></td>
-    </tr>
-<tr>
-    <td valign="top">targetType</td>
-    <td valign="top">Type of target. library means DLL is output. </td>
-    <td valign="top">&quot;exe&quot;(default), &quot;library&quot;</td>
-    </tr>
-<tr>
-    <td valign="top">verbose</td>
-    <td valign="top">output progress messages</td>
-    <td valign="top">&quot;on&quot;, &quot;off&quot; (default)</td>
-    </tr>
-
-</table>
-<p>
-Example</p>
-<pre>&lt;ilasm
-        outputFile=&quot;app.exe&quot;
-        verbose=&quot;on&quot;
-        listing=&quot;on&quot;
-        owner=&quot;secret&quot;
-        /&gt;
-</pre>
-<h2>&lt;WsdlToDotnet&gt;</h2>
-Why add a wrapper to the MS WSDL tool? 
-So that you can verify that your web services, be they written with Axis or
-anyone else's SOAP toolkit, work with .NET clients.
-<p>
-This task is dependency aware when using a file as a source and destination;
-so if you &lt;get&gt; the file (with <code>usetimestamp="true"</code>) then
-you only rebuild stuff when the WSDL file is changed. Of course,
-if the server generates a new timestamp every time you ask for the WSDL,
-this is not enough...use the &lt;filesmatch&gt; &lt;condition&gt; to
-to byte for byte comparison against a cached WSDL file then make
-the target conditional on that test failing.   
- 
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Example</b></td>
-  </tr>
-  <tr>
-    <td valign="top">destFile</td>
-    <td valign="top">name of file to generate. Required</td>
-    <td valign="top">ApacheNet.cs</td>
-  </tr> 
-  <tr>
-    <td valign="top">srcFile</td>
-    <td valign="top">name of WSDL file to use. 
-      Required if url is not set</td>
-    <td valign="top">service.wsdl</td>
-  </tr>
-   <tr>
-    <td valign="top">url</td>
-    <td valign="top">url to retrive WSDL from.
-    required if srcFile is unset</td>
-    <td valign="top">http://localhost/service?wsdl</td>
-  </tr>  
-  <tr>
-    <td valign="top">server</td>
-    <td valign="top">generate server stubs, not client proxy code.
-      optional; default false</td>
-    <td valign="top">"false"(default)</td>
-  </tr> 
-  <tr>
-    <td valign="top">namespace</td>
-    <td valign="top">namespace to place  the source in.
-      optional; default ""</td>
-    <td valign="top">Apache.Net</td>
-  </tr> 
-  <tr>
-    <td valign="top">language</td>
-    <td valign="top">language; one of "CS", "JS", or "VB"
-      optional; </td>
-    <td valign="top"> "CS" (default)</td>
-  </tr> 
-  <tr>
-    <td valign="top">failOnError</td>
-    <td valign="top">Should failure halt the build?</td>
-    <td valign="top">"true"(default)</td>
-  </tr>
-  <tr>
-    <td valign="top">extraOptions</td>
-    <td valign="top">Any extra options which aren't explicitly 
-        supported by the task, like all the proxy server config stuff</td>
-    <td></td>
-  </tr>  
- 
-  </table>
-<hr>
-
-<hr>
-<h2> Change Log </h2>
-
-<h4>Version 0.5</h4>
-This revision goes along with NET 1.0 (SP1) 
-<ol>
-<li>CSC: added filealign</li>
-<li>CSC: added reference to office.dll</li>
-<li>CSC: dependency checking! only if destFile is set!
-<li>WsdlToDotnet written
-</ol>
-
-<h4>Version 0.4</h4>
-This is the beta-2 revision of the tasks. 
-<ol>
-<li>ILASM: pulled the owner attribute, added keyfile for giving binaries a strong name
-(MD5 hash of the checksum)</li>
-<li>CSC: added win32res , noConfig, utf8output, fullpaths</li>
-<li>CSC: </li>
-</ol>
- 
-<h4>Version 0.3</h4>
-
-The changes here reflect Beta-1 of the dotnet SDK and experience of use in 
-more complex projects. This build does not work with the older SDK, 
-primarily because the automatic reference feature references libraries
-only found in the new SDK version.  
-<p>
-External changes</p>
-<ul>
-<li>Recursive inclusion of .cs and .il files</li>
-
-<li>Documentation enhanced, includes examples and details of all parameters</li>
-
-<li>The csc task automatically includes the common dotnet assemblies, so
-there is no need to remember to refer to 'System.dll', 'System.Web.Services',
- etc. This feature can be disabled by setting the 'includeDefaultReferences' 
- flag to false. </li>
-
- <li> References can also be referred to using the ReferenceFiles parameter, which
-is an ant path specification. The old 'references' string is still retained.</li>
-<li> An 'extraoptions' attribute enables the build file to include any CSC options
-which are not explicitly supported in the CSC task. </li>
-</ul>
-
-Internal changes
-<ul>
-<li>Some minor refactoring (move common code a method)</li>
-<li>Application of Jedits JavaStyle task resulted in a major reshaping of
-the codebase and the insertion of a blank line every second line. Significant
-effort was required to revert some (but not all) changes.</li>
-<li>Removed throws clause from methods which can't throw exceptions </li>
-</ul>
-
-The test harness has been expanded to include unicode source file  
-(the build works but the rest of the system has 'issues' with high unicode
-package and method names)
-
-<h4>Version 0.2</h4>
-First public edition, added to the ant cvs tree. Tested on the PDC build of 
-the dotnet SDK only, and still immature. The command execution code was 
-refactored out into a 'NetCommand' class for re-use. The Ilasm task was added
-at this time.
-
-<h4>Version 0.1</h4>
-Initial proof of concept; very rudimentary support for CSC only. 
-
-
-<p align="center">Copyright &copy; 2000-2002 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
diff --git a/docs/manual/OptionalTasks/echoproperties.html b/docs/manual/OptionalTasks/echoproperties.html
deleted file mode 100644
index 6119526..0000000
--- a/docs/manual/OptionalTasks/echoproperties.html
+++ /dev/null
@@ -1,82 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Echoproperties Task</title>
-</head>
-
-<body>
-
-<h2><a name="echoproperties">echoproperties</a></h2>
-<h3>Description</h3>
-<p>Displays all the current properties in the project.  The output can be
-sent to a file if desired. You can also specify a subset of properties
-to save by naming a prefix: only properties starting with this
-prefix will be saved. This task can be used as a somewhat contrived
-means of returning data from an <tt>&lt;ant&gt;</tt> invocation,
-but is really for debugging build files.</p>
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">destfile</td>
-    <td valign="top">If specified, the value indicates the name of the
-    file to send the output of the statement to.  The generated output file
-    is compatible for loading by any Java application as a property file.
-    If not specified, then the output will go to the Ant log.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">prefix</td>
-    <td valign="top">
-        a prefix which is used to filter the properties
-        only those properties starting with this prefix will be echoed.
-        <P>
-    </td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  
-  
-   
-  <tr>
-    <td valign="top">failonerror</td>
-    <td valign="top">By default, the "failonerror" attribute is enabled.
-    If an error occurs while writing the properties to a file, and this
-    attribute is enabled, then a BuildException will be thrown, causing the
-    build to fail.  If disabled, then IO errors will be reported as a log
-    statement, and the build will continue without failure from this task.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-</table>
-<h3>Examples</h3>
-<blockquote><pre>
-  &lt;echoproperties /&gt;
-</pre></blockquote>
-<p>Report the current properties to the log.</p>
-<blockquote><pre>
-  &lt;echoproperties destfile="my.properties" /&gt;
-</pre></blockquote>
-<p>Report the current properties to the file "my.properties", and will
-fail the build if the file could not be created or written to.</p>
-<blockquote><pre>
-  &lt;echoproperties destfile="my.properties" failonerror="false" /&gt;
-</pre></blockquote>
-<p>Report the current properties to the file "my.properties", and will
-log a message if the file could not be created or written to, but will still
-allow the build to continue.</p>
-<blockquote><pre>
-  &lt;echoproperties prefix="java."/&gt;
-</pre></blockquote>
-<p>List all properties beginning with "java."</p>
-
-<hr>
-<p align="center">Copyright &copy; 2002 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/OptionalTasks/ejb.html b/docs/manual/OptionalTasks/ejb.html
deleted file mode 100644
index 4b19164..0000000
--- a/docs/manual/OptionalTasks/ejb.html
+++ /dev/null
@@ -1,1702 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>EJB Tasks</title>
-
-</head>
-
-<body>
-
-<h1>Ant EJB Tasks User Manual</h1>
-<p>by</p>
-<!-- Names are in alphabetical order, on last name -->
-<ul>
-  <li>Paul Austin (<a href="mailto:p_d_austin@yahoo.com">p_d_austin@yahoo.com</a>)</li>
-  <li>Holger Engels (<a href="mailto:hengels@innovidata.com">hengels@innovidata.com</a>)</li>
-  <li>Tim Fennell (<a href="mailto:tfenne@rcn.com">tfenne@rcn.com</a>)</li>
-  <li>Martin Gee (<a href="mailto:martin.gee@icsynergy.com">martin.gee@icsynergy.com</a>)</li>
-  <li>Conor MacNeill</li>
-  <li>Cyrille Morvan (<a href="mailto:cmorvan@ingenosya.com">cmorvan@ingenosya.com</a>)</li>
-  <li>Greg Nelson (<a href="mailto:gn@sun.com">gn@sun.com</a>)</li>
-</ul>
-
-<p>Version @VERSION@<br>
-$Id$
-</p>
-<hr>
-<h2>Table of Contents</h2>
-<ul>
-  <li><a href="#introduction">Introduction</a></li>
-  <li><a href="#ejbtasks">EJB Tasks</a></li>
-</ul>
-
-<hr>
-<h2><a name="introduction">Introduction</a></h2>
-<p>Ant provides a number of optional tasks for developing
-<a href="http://java.sun.com/products/ejb" target="_top">Enterprise Java Beans (EJBs)</a>.
-In general these tasks are specific to the particular vendor's EJB Server.</p>
-
-<p> At present the tasks support:<br>
-
-<ul>
-  <li><a href="http://www.borland.com">Borland </a>
-  Application Server 4.5</li>
-  <li><a href="http://www.iplanet.com">iPlanet </a>
-  Application Server 6.0</li>
-  <li><a href="http://www.jboss.org/" target="_top">
-  JBoss 2.1</a> and above EJB servers</li>
-  <li><a href="http://www.bea.com" target="_top">Weblogic</a>
-   4.5.1, 5.1, and 6.0 EJB servers</li>
-  <li><a href="http://www.objectweb.org/jonas/" target="_top">JOnAS</a>
-   2.4 Open Source EJB server</li>
-  <li><a href="http://www.ibm.com/websphere">IBM WebSphere</a> 4.0</li>
-</ul>
-  Over time we expect further optional tasks  to support additional EJB Servers.
-</p>
-
-<hr>
-<h2><a name="ejbtasks">EJB Tasks</a></h2>
-<table border="1" cellpadding="5">
- <tr><td>Task</td><td colspan="2">Application Servers</td></tr>
- <tr><td><a href="BorlandGenerateClient.html">blgenclient</a></td><td colspan="2">Borland Application Server 4.5</td></tr>
- <tr><td><a href="#ddcreator">ddcreator</a></td><td colspan="2">Weblogic 4.5.1</td></tr>
- <tr><td><a href="#ejbc">ejbc</a></td><td colspan="2">Weblogic 4.5.1</td></tr>
- <tr><td><a href="#iplanet-ejbc">iplanet-ejbc</a></td><td colspan="2">iPlanet Application Server 6.0</td></tr>
- <tr><td rowspan="7"><a href="#ejbjar">ejbjar</a></td><td colspan="2" align="center"><b>Nested Elements</b></td></tr>
- <tr><td><a href="BorlandEJBTasks.html">borland</a></td><td>Borland Application Server 4.5</td></tr>
- <tr><td><a href="#ejbjar_iplanet">iPlanet</a></td><td>iPlanet Application Server 6.0</td></tr>
- <tr><td><a href="#ejbjar_jboss">jboss</a></td><td>JBoss</td></tr>
- <tr><td><a href="#ejbjar_jonas">jonas</a></td><td>JOnAS 2.4</td></tr>
- <tr><td><a href="#ejbjar_weblogic">weblogic</a></td><td>Weblogic 5.1 &amp; 6.0</td></tr>
- <tr><td><a href="#ejbjar_websphere">websphere</a></td><td>IBM WebSphere 4.0</td></tr>
- <tr><td><a href="#wlrun">wlrun</a></td><td colspan="2">Weblogic 4.5.1, 5.1 &amp; 6.0</td></tr>
- <tr><td><a href="#wlstop">wlstop</a></td><td colspan="2">Weblogic 4.5.1, 5.1 &amp; 6.0</td></tr>
-
-</table>
-
-<hr>
-<h2><a name="ddcreator">ddcreator</a></h2>
-<h3><b>Description:</b></h3>
-<p>ddcreator will compile a set of Weblogic text-based deployment descriptors into a serialized
-EJB deployment descriptor. The selection of which of the text-based descriptors are to be compiled
-is based on the standard Ant include and exclude selection mechanisms.
-</p>
-
-<h3>Parameters:</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">descriptors</td>
-    <td valign="top">This is the base directory from which descriptors are selected.</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">dest</td>
-    <td valign="top">The directory where the serialized deployment descriptors will be written</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">classpath</td>
-    <td valign="top">This is the classpath to use to run the underlying weblogic ddcreator tool.
-                     This must include the <code>weblogic.ejb.utils.DDCreator</code> class</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-</table>
-<h3>Examples</h3>
-<pre>&lt;ddcreator descriptors=&quot;${dd.dir}&quot;
-           dest=&quot;${gen.classes}&quot;
-           classpath=&quot;${descriptorbuild.classpath}&quot;&gt;
-  &lt;include name=&quot;*.txt&quot; /&gt;
-&lt;/ddcreator&gt;
-</pre>
-
-<hr>
-<h2><a name="ejbc">ejbc</a></h2>
-<h3><b>Description:</b></h3>
-<p>The ejbc task will run Weblogic's ejbc tool. This tool will take a serialized deployment descriptor,
-examine the various EJB interfaces and bean classes and then generate the required support classes
-necessary to deploy the bean in a Weblogic EJB container. This will include the RMI stubs and skeletons
-as well as the classes which implement the bean's home and remote interfaces.</p>
-<p>
-The ant task which runs this tool is able to compile several beans in a single operation. The beans to be
-compiled are selected by including their serialized deployment descriptors. The standard ant
-<code>include</code> and <code>exclude</code> constructs can be used to select the deployment descriptors
-to be included. </p>
-<p>
-Each descriptor is examined to determine whether the generated classes are out of date and need to be
-regenerated. The deployment descriptor is de-serialized to discover the home, remote and
-implementation classes. The corresponding source files are determined and checked to see their
-modification times. These times and the modification time of the serialized descriptor itself are
-compared with the modification time of the generated classes. If the generated classes are not present
-or are out of date, the ejbc tool is run to generate new versions.</p>
-<h3>Parameters:</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">descriptors</td>
-    <td valign="top">This is the base directory from which the serialized deployment descriptors are selected.</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">dest</td>
-    <td valign="top">The base directory where the generated classes, RIM stubs and RMI skeletons are written</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">manifest</td>
-    <td valign="top">The name of a manifest file to be written. This manifest will contain an entry for each EJB processed</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">src</td>
-    <td valign="top">The base directory of the source tree containing the source files of the home interface,
-                     remote interface and bean implementation classes.</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">classpath</td>
-    <td valign="top">This classpath must include both the <code>weblogic.ejbc</code> class and the
-                     class files of the bean, home interface, remote interface, etc of the bean being
-                     processed.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-</table>
-<h3>Examples</h3>
-<pre>&lt;ejbc descriptors=&quot;${gen.classes}&quot;
-           src=&quot;${src.dir}&quot;
-           dest=&quot;${gen.classes}&quot;
-           manifest=&quot;${build.manifest}&quot;
-           classpath=&quot;${descriptorbuild.classpath}&quot;&gt;
-  &lt;include name=&quot;*.ser&quot; /&gt;
-&lt;/ejbc&gt;
-</pre>
-
-<hr>
-<h2>
-<a NAME="iplanet-ejbc"></a>iplanet-ejbc</h2>
-
-<h3>
-<b>Description:</b></h3>
-Task to compile EJB stubs and skeletons for the iPlanet Application Server
-6.0.  Given a standard EJB 1.1 XML descriptor as well as an iAS-specific
-EJB descriptor, this task will generate the stubs and skeletons required
-to deploy the EJB to iAS.  Since the XML descriptors can include multiple
-EJBs, this is a convenient way of specifying many EJBs in a single Ant
-task.
-<p>For each EJB specified, the task will locate the three classes that
-comprise the EJB in the destination directory.  If these class files
-cannot be located in the destination directory, the task will fail. The
-task will also attempt to locate the EJB stubs and skeletons in this directory.
-If found, the timestamps on the stubs and skeletons will be checked to
-ensure they are up to date. Only if these files cannot be found or if they
-are out of date will the iAS ejbc utility be called to generate new stubs
-and skeletons.</p>
-<h3>
-Parameters:</h3>
-
-<table BORDER CELLSPACING=0 CELLPADDING=2 >
-<tr>
-<td VALIGN=TOP><b>Attribute</b></td>
-
-<td VALIGN=TOP><b>Description</b></td>
-
-<td ALIGN=CENTER VALIGN=TOP><b>Required</b></td>
-</tr>
-
-<tr>
-<td VALIGN=TOP>ejbdescriptor</td>
-
-<td VALIGN=TOP>Standard EJB 1.1 XML descriptor (typically titled "ejb-jar.xml").</td>
-
-<td ALIGN=CENTER VALIGN=TOP>Yes</td>
-</tr>
-
-<tr>
-<td VALIGN=TOP>iasdescriptor</td>
-
-<td VALIGN=TOP>iAS-specific EJB XML descriptor (typically titled "ias-ejb-jar.xml").</td>
-
-<td ALIGN=CENTER VALIGN=TOP>Yes</td>
-</tr>
-
-<tr>
-<td VALIGN=TOP>dest</td>
-
-<td VALIGN=TOP>The is the base directory where the RMI stubs and skeletons
-are written. In addition, the class files for each bean (home interface,
-remote interface, and EJB implementation) must be found in this directory.</td>
-
-<td ALIGN=CENTER VALIGN=TOP>Yes</td>
-</tr>
-
-<tr>
-<td VALIGN=TOP>classpath</td>
-
-<td VALIGN=TOP>The classpath used when generating EJB stubs and skeletons.
-If omitted, the classpath specified when Ant was started will be used.
-Nested "classpath" elements may also be used.</td>
-
-<td ALIGN=CENTER VALIGN=TOP>No</td>
-</tr>
-
-<tr>
-<td VALIGN=TOP>keepgenerated</td>
-
-<td VALIGN=TOP>Indicates whether or not the Java source files which are
-generated by ejbc will be saved or automatically deleted. If "yes", the
-source files will be retained. If omitted, it defaults to "no". </td>
-
-<td ALIGN=CENTER VALIGN=TOP>No</td>
-</tr>
-
-<tr>
-<td VALIGN=TOP>debug</td>
-
-<td>Indicates whether or not the ejbc utility should log additional debugging
-statements to the standard output. If "yes", the additional debugging statements
-will be generated.  If omitted, it defaults to "no". </td>
-
-<td ALIGN=CENTER VALIGN=TOP>
-<center>No</center>
-</td>
-</tr>
-
-<tr>
-<td VALIGN=TOP>iashome</td>
-
-<td>May be used to specify the "home" directory for this iAS installation.
-This is used to find the ejbc utility if it isn't included in the user's
-system path. If specified, it should refer to the "[install-location]/iplanet/ias6/ias"
-directory. If omitted, the ejbc utility must be on the user's system path. </td>
-
-<td ALIGN=CENTER VALIGN=TOP>No</td>
-</tr>
-</table>
-
-<h3>
-Examples</h3>
-
-<pre>&lt;iplanet-ejbc ejbdescriptor="ejb-jar.xml"
-              iasdescriptor="ias-ejb-jar.xml"
-              dest="${build.classesdir}"
-              classpath="${ias.ejbc.cpath}" />
-
-&lt;iplanet-ejbc ejbdescriptor="ejb-jar.xml"
-              iasdescriptor="ias-ejb-jar.xml"
-              dest="${build.classesdir}"
-              keepgenerated="yes"
-              debug="yes"
-              iashome="${ias.home}" >
-              &lt;classpath>
-                  &lt;pathelement path="." />
-                  &lt;pathelement path="${build.classpath}" />
-              &lt;/classpath>
-&lt;/iplanet-ejbc>
-
-</pre>
-
-<hr>
-<h2><a name="wlrun">wlrun</a></h2>
-<h3><b>Description:</b></h3>
-
-<p>The <code>wlrun</code> task is used to start a weblogic server. The task runs
-a weblogic instance in a separate Java Virtual Machine. A number of parameters
-are used to control the operation of the weblogic instance. Note that the task,
-and hence ant, will not complete until the weblogic instance is stopped.</p>
-
-<h3>Parameters:</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required for 4.5.1 and 5.1</b></td>
-    <td align="center" valign="top"><b>Required for 6.0</b></td>
-  </tr>
-  <tr>
-    <td valign="top">BEA Home</td>
-    <td valign="top">The location of the BEA Home qwhere the server's config is defined.
-                     If this attribute is present, wlrun assumes that the server will
-                     be running under Weblogic 6.0</td>
-    <td valign="top" align="center">N/A</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">home</td>
-    <td valign="top">The location of the weblogic home that is to be used. This is the location
-                     where weblogic is installed.</td>
-    <td valign="top" align="center">Yes</td>
-    <td valign="top" align="center">Yes. Note this is the absolute location, not relative to
-                                    BEA home.</td>
-  </tr>
-  <tr>
-    <td valign="top">Domain</td>
-    <td valign="top">The domain to which the server belongs.</td>
-    <td valign="top" align="center">N/A</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">classpath</td>
-    <td valign="top">The classpath to be used with the Java Virtual Machine that runs the Weblogic
-                     Server. Prior to Weblogic 6.0, this is typically set to the Weblogic
-                     boot classpath. Under Weblogic 6.0 this should include all the
-                     weblogic jars</td>
-    <td valign="top" align="center">Yes</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">wlclasspath</td>
-    <td valign="top">The weblogic classpath used by the Weblogic Server.</td>
-    <td valign="top" align="center">No</td>
-    <td valign="top" align="center">N/A</td>
-  </tr>
-  <tr>
-    <td valign="top">properties</td>
-    <td valign="top">The name of the server's properties file within the weblogic home directory
-                     used to control the weblogic instance.</td>
-    <td valign="top" align="center">Yes</td>
-    <td valign="top" align="center">N/A</td>
-  </tr>
-  <tr>
-    <td valign="top">name</td>
-    <td valign="top">The name of the weblogic server within the weblogic home which is to be run.
-                     This defaults to &quot;myserver&quot;</td>
-    <td valign="top" align="center">No</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">policy</td>
-    <td valign="top">The name of the security policy file within the weblogic home directory that
-                     is to be used. If not specified, the default policy file <code>weblogic.policy</code>
-                     is used.</td>
-    <td valign="top" align="center">No</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">username</td>
-    <td valign="top">The management username used to manage the server</td>
-    <td valign="top" align="center">N/A</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">password</td>
-    <td valign="top">The server's management password</td>
-    <td valign="top" align="center">N/A</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">pkPassword</td>
-    <td valign="top">The private key password so the server can decrypt the SSL
-                     private key file</td>
-    <td valign="top" align="center">N/A</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">jvmargs</td>
-    <td valign="top">Additional argument string passed to the Java Virtual Machine used to run the
-                     Weblogic instance.</td>
-    <td valign="top" align="center">No</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">args</td>
-    <td valign="top">Additional argument string passed to the Weblogic instance.</td>
-    <td valign="top" align="center">No</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-</table>
-
-<h3>Nested Elements</h3>
-
-<p>The wlrun task supports nested &lt;classpath&gt; and &lt;wlclasspath&gt;
-elements to set the repsective classpaths.</p>
-
-<h3>Examples</h3>
-
-<p>This example shows the use of wlrun to run a server under Weblogic 5.1</p>
-
-<pre>
-    &lt;wlrun taskname=&quot;myserver&quot;
-           classpath=&quot;${weblogic.boot.classpath}&quot;
-           wlclasspath=&quot;${weblogic.classes}:${code.jars}&quot;
-           name=&quot;myserver&quot;
-           home=&quot;${weblogic.home}&quot;
-           properties=&quot;myserver/myserver.properties&quot;/&gt;
-</pre>
-
-<p>This example shows wlrun being used to run the petstore server under
-Weblogic 6.0</p>
-
-<pre>
-    &lt;wlrun taskname=&quot;petstore&quot;
-           classpath=&quot;${weblogic.classes}&quot;
-           name=&quot;petstoreServer&quot;
-           domain=&quot;petstore&quot;
-           home=&quot;${weblogic.home}&quot;
-           password=&quot;petstorePassword&quot;
-           beahome=&quot;${bea.home}&quot;/&gt;
-</pre>
-
-<hr>
-<h2><a name="wlstop">wlstop</a></h2>
-<h3><b>Description:</b></h3>
-
-<p>The <code>wlstop</code> task is used to stop a weblogic instance which is
-currently running. To shut down an instance you must supply both a username and
-a password. These will be stored in the clear in the build script used to stop
-the instance. For security reasons, this task is therefore only appropriate in a
-development environment. </p>
-
-<p>This task works for most version of Weblogic, including 6.0. You need to
-specify the BEA Home to have this task work correctly under 6.0</p>
-
-<h3>Parameters:</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">BEAHome</td>
-    <td valign="top">This attribute selects Weblogic 6.0 shutdown.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">classpath</td>
-    <td valign="top">The classpath to be used with the Java Virtual Machine that runs the Weblogic
-                     Shutdown comment.</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">user</td>
-    <td valign="top">The username of the account which will be used to shutdown the server</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">password</td>
-    <td valign="top">The password for the account specified in the user parameter.</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">url</td>
-    <td valign="top">The URL which describes the port to which the server is listening for T3 connections.
-                     For example, t3://localhost:7001</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">delay</td>
-    <td valign="top">The delay in seconds after which the server will stop. This defaults to an
-                     immediate shutdown.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-</table>
-
-<h3>Nested Element</h3>
-
-<p>The classpath of the welstop task can be set by a &lt;classpath&gt; nested element.</p>
-
-<h3>Examples</h3>
-
-<p>This example show the shutdown for a Weblogic 6.0 server</p>
-
-<pre>
-    &lt;wlstop classpath=&quot;${weblogic.classes}&quot;
-            user=&quot;system&quot;
-            url=&quot;t3://localhost:7001&quot;
-            password=&quot;foobar&quot;
-            beahome=&quot;${bea.home}&quot;/&gt;
-</pre>
-
-<hr>
-
-<h2><a name="ejbjar">ejbjar</a></h2>
-<h3><b>Description:</b></h3>
-
-<p>This task is designed to support building of EJB1.1 jar files. Support is
-currently provided for 'vanilla' EJB1.1 jar files - i.e. those containing only
-the user generated class files and the standard deployment descriptor. Nested
-elements provide support for vendor specific deployment tools. These currently
-include: </p>
-<ul>
-  <li>Borland Application Server 4.5</li>
-  <li>iPlanet Application Server 6.0</li>
-  <li>JBoss 2.1 and above</li>
-  <li>Weblogic 5.1/6.0 session/entity beans using the weblogic.ejbc tool</li>
-  <li>IBM WebSphere 4.0</li>
-  <li>TOPLink for WebLogic 2.5.1-enabled entity beans</li>
-  <li><a href="http://www.objectweb.org/jonas/">JOnAS</a> 2.4 Open Source EJB server</li>
-</ul>
-
-
-<p>The task works as a directory scanning task, and performs an action for each
-deployment descriptor found. As such the includes and excludes should be set
-to ensure that all desired EJB1.1 descriptors are found, but no application
-server descriptors are found. For each descriptor found, ejbjar will parse the
-deployment descriptor to determine the necessary class files which implement the
-bean. These files are assembled along with the deployment descriptors into a
-well formed EJB jar file. Any support files which need to be included in the
-generated jar can be added with the &lt;support&gt; nested element. For each
-class included in the jar, ejbjar will scan for any super classes or super
-interfaces. These will be added to the generated jar.</p>
-
-<p>If no nested vendor-specific deployment elements are present, the task will
-simply generate a generic EJB jar. Such jars are typically used as the input to
-vendor-specific deployment tools. For each nested deployment element, a vendor
-specific deployment tool is run to generate a jar file ready for deployment in
-that vendor's EJB container. </p>
-
-<p>The jar files are only built if they are out of date.  Each deployment tool
-element will examine its target jar file and determine if it is out of date with
-respect to the class files and deployment descriptors that make up the bean. If
-any of these files are newer than the jar file the jar will be rebuilt otherwise
-a message is logged that the jar file is up to date.</p>
-
-<p>The task uses the jakarta-bcel framework, to extract all dependent classes. This
-means, that beside the classes, that are mentioned in the deployment descriptor, also
-all classes, that these depend on, are automatically included in the jar file.</p>
-
-
-<h3>Naming Convention</h3>
-
-Ejbjar handles the processing of multiple beans, and it uses a set of naming
-conventions to determine the name of the generated EJB jars. The naming convention
-that is used is controlled by the &quot;naming&quot; attribute. It supports the
-following values
-<ul>
-
-<li>descriptor</li>
-<p>This is the default naming scheme. The name of the generated bean is derived from the
-name of the deployment descriptor.  For an Account bean, for example, the deployment
-descriptor would be named <code>Account-ejb-jar.xml</code>. Vendor specific descriptors are
-located using the same naming convention. The weblogic bean, for example, would be named
-<code>Account-weblogic-ejb-jar.xml</code>. Under this arrangement, the deployment descriptors
-can be separated from the code implementing the beans, which can be useful when the same bean code
-is deployed in separate beans.
-</p>
-
-<p>This scheme is useful when you are using one bean per EJB jar and where you may be
-deploying the same bean classes in different beans, with different deployment characteristics.
-
-<li>ejb-name</li>
-<p> This naming scheme uses the &lt;ejb-name&gt; element from the deployment descriptor to
-determine the bean name. In this situation, the descriptors normally use the generic
-descriptor names, such as <code>ejb-jar.xml</code> along with any associated vendor specific descriptor
-names. For example, If the value of the &lt;ejb-name&gt; were to be given in the deployment descriptor
-as follows:
-<pre>
-&lt;ejb-jar&gt;
-    &lt;enterprise-beans&gt;
-        &lt;entity&gt;
-            &lt;ejb-name&gt;Sample&lt;/ejb-name&gt;
-            &lt;home&gt;org.apache.ant.ejbsample.SampleHome&lt;/home&gt;
-</pre>
-
-then the name of the generated bean would be <code>Sample.jar</code>
-</p>
-<p> This scheme is useful where you want to use the standard deployment descriptor names, which may be more
-compatible with other EJB tools. This scheme must have one bean per jar.
-</p>
-<li>directory</li>
-<p>
-In this mode, the name of the generated bean jar is derived from the directory
-containing the deployment descriptors. Again the deployment descriptors typically use
-the standard filenames. For example, if the path to the deployment descriptor is
-<code>/home/user/dev/appserver/dd/sample</code>, then the generated
-bean will be named <code>sample.jar</code>
-</p>
-<p>
-This scheme is also useful when you want to use standard style descriptor names. It is often
-most useful when the  descriptors are located in the same directory as the bean source code,
-although that is not mandatory. This scheme can handle multiple beans per jar.
-</p>
-
-<li>basejarname</li>
-<p>
-The final scheme supported by the &lt;ejbjar&gt; task is used when you want to specify the generated
-bean jar name directly. In this case the name of the generated jar is specified by the
-&quot;basejarname&quot; attribute. Since all generated beans will have the same name, this task should
-be only used when each descriptor is in its own directory.
-</p>
-
-<p>
-This scheme is most appropriate when you are using multiple beans per jar and only process a single
-deployment descriptor. You typically want to specify the name of the jar and not derive it from the
-beans in the jar.
-</p>
-
-</ul>
-
-<a name="ejbjar_deps"><h3>Dependencies</h3></a>
-<p>In addition to the bean classes, ejbjar is able to ad additional classes to the generated 
-ejbjar. These classes are typically the support classes which are used by the bean's classes or as
-parameters to the bean's methods.</p>
-
-<p>In versions of Ant prior to 1.5, ejbjar used reflection and attempted to add the super 
-classes and super interfaces of the bean classes. For this technique to work the bean 
-classes had to be loaded into Ant's JVM. This was not always possible due to class dependencies.
-</p>
-
-<p>The ejbjar task in Ant 1.5 uses the jakarta-BCEL library to analyze the bean's class 
-files directly, rather than loading them into the JVM. This also allows ejbjar to add all 
-of the required support classes for a bean and not just super classes.
-</p>
-
-<p>In Ant 1.5, a new attribute, <code>dependency</code> has been introduced to allow the 
-buildfile to control what additional classes are added to the generated jar. It takes three 
-possible values</p>
-<ul>
-<li><code>none</code> - only the bean classes and interfaces described in the bean's 
-descriptor are added to the jar.</li>
-<li><code>super</code> - this is the default value and replicates the original ejbjar 
-behaviour where super classes and super interfaces are added to the jar</li>
-<li><code>full</code> - In this mode all classes used by the bean's classes and interfaces
-are added to the jar</li>
-</ul>
-<p>The <code>super</code> and <code>full</code> values require the jakarta-BCEL library 
-to be available. If it is not, ejbjar will drop back to the behaviour corresponding to
-the value <code>none</code>.</p>   
-
-<h3>Parameters:</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">descriptordir</td>
-    <td valign="top">The base directory under which to scan for EJB
-                     deployment descriptors. If this attribute is not
-                     specified, then the deployment descriptors must be
-                     located in the directory specified by the 'srcdir'
-                     attribute.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">srcdir</td>
-    <td valign="top">The base directory containing the .class files that
-                     make up the bean. Included are the home- remote- pk-
-                     and implementation- classes and all classes, that these
-                     depend on. Note that this can be the same as the
-                     descriptordir if all files are in the same directory
-                     tree.</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">destdir</td>
-    <td valign="top">The base directory into which generated jar files are
-                     deposited. Jar files are deposited in directories
-                     corresponding to their location within the descriptordir
-                     namespace. Note that this attribute is only used if the
-                     task is generating generic jars (i.e. no vendor-specific
-                     deployment elements have been specified).</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">naming</td>
-    <td valign="top">Controls the naming convention used to name generated
-                     EJB jars. Please refer to the description above.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">basejarname</td>
-    <td valign="top">The base name that is used for the generated jar files.
-                     If this attribute is specified, the generic jar file name
-                     will use this value as the prefix (followed by the value
-                     specified in the 'genericjarsuffix' attribute) and the
-                     resultant ejb jar file (followed by any suffix specified
-                     in the nested element).</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">basenameterminator</td>
-    <td valign="top">String value used to substring out a string from the name
-                     of each deployment descriptor found, which is then used to
-                     locate related deployment descriptors (e.g. the WebLogic
-                     descriptors). For example, a basename of '.' and a
-                     deployment descriptor called 'FooBean.ejb-jar.xml' would
-                     result in a basename of 'FooBean' which would then be used
-                     to find FooBean.weblogic-ejb-jar.xml and
-                     FooBean.weblogic-cmp-rdbms-jar.xml, as well as to create
-                     the filenames of the jar files as FooBean-generic.jar and
-                     FooBean-wl.jar. This attribute is not used if the
-                     'basejarname' attribute is specified.</td>
-    <td valign="top" align="center">No, defaults to '-'.</td>
-  </tr>
-  <tr>
-    <td valign="top">genericjarsuffix</td>
-    <td valign="top">String value appended to the basename of the deployment
-                     descriptor to create the filename of the generic EJB jar
-                     file.</td>
-    <td valign="top" align="center">No, defaults to '-generic.jar'.</td>
-  </tr>
-  <tr>
-    <td valign="top">classpath</td>
-    <td valign="top">This classpath is used when resolving classes which
-                     are to be added to the jar. Typically nested deployment
-                     tool elements will also support a classpath which
-                     will be combined with this classpath when resolving
-                     classes</td>
-    <td valign="top" align="center">No.</td>
-  </tr>
-  <tr>
-    <td valign="top">flatdestdir</td>
-    <td valign="top">Set this attribute to true if you want all generated jars
-                     to be placed in the root of the destdir, rather than
-                     according to the location of the deployment descriptor
-                     within the descriptor dir hierarchy.</td>
-    <td valign="top" align="center">No.</td>
-  </tr>
-  <tr>
-    <td valign="top">dependency</td>
-    <td valign="top">This attribute controls which additional classes and interfaces
-                     are added to the jar. Please refer to the description 
-                     <a href="#ejbjar_deps">above</a></td>
-    <td valign="top" align="center">No.</td>
-  </tr>
-</table>
-
-<h3>Nested Elements</h3>
-
-<p>In addition to the vendor specific nested elements, the ejbjar task provides
-three nested elements. </p>
-
-<h4>Classpath</h4>
-
-<p>The &lt;classpath&gt; nested element allows the classpath
-to be set. It is useful when setting the classpath from a reference path. In all
-other respects the behaviour is the same as the classpath attribute.</p>
-
-<h4>dtd</h4>
-
-<p>The &lt;dtd&gt; element is used to specify the local location of DTDs to be
-used when parsing the EJB deployment descriptor. Using a local DTD is much
-faster than loading the DTD across the net. If you are running ejbjar behind a
-firewall you may not even be able to access the remote DTD. The supported
-vendor-specific nested elements know the location of the required DTDs within
-the vendor class hierarchy and, in general, this means &lt;dtd&gt; elements are
-not required. It does mean, however, that the vendor's class hierarchy must be
-available in the classpath when Ant is started. If your want to run Ant without
-requiring the vendor classes in the classpath, you would need to use a
-&lt;dtd&gt; element.</p>
-
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">publicId</td>
-    <td valign="top">The public Id of the DTD for which the location is being provided</td>
-    <td align="center" valign="top">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">location</td>
-    <td valign="top">The location of the local copy of the DTD. This can either be a
-                     file or a resource loadable from the classpath.</td>
-    <td align="center" valign="top">Yes</td>
-  </tr>
-</table>
-
-<h4>support</h4>
-
-<p>The &lt;support&gt; nested element is used to supply additional classes
-(files) to be included in the generated jars. The &lt;support&gt; element is a
-FileSet, so it can either reference a fileset declared elsewhere or it can be
-defined in-place with the appropriate &lt;include&gt; and &lt;exclude&gt; nested
-elements. The files in the support fileset are added into the generated EJB jar
-in the same relative location as their location within the support fileset. Note
-that when ejbjar generates more than one jar file, the support files are added
-to each one.</p>
-
-<h3>Vendor-specific deployment elements</h3>
-
-Each vendor-specific nested element controls the generation of a deployable jar
-specific to that vendor's EJB container. The parameters for each supported
-deployment element are detailed here.
-
-
-<h3><a name="ejbjar_jboss">Jboss element</a></h3>
-
-<p>The jboss element searches for the JBoss specific deployment descriptors and adds them
-to the final ejb jar file. JBoss has two deployment descriptors jboss.xml and jaws.xml
-(for container manager persistence only). The JBoss server uses hot deployment and does
-not require compilation of additional stubs and skeletons.</p>
-
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">destdir</td>
-    <td valign="top">The base directory into which the generated weblogic ready
-                     jar files are deposited. Jar files are deposited in
-                     directories corresponding to their location within the
-                     descriptordir namespace. </td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">genericjarsuffix</td>
-    <td valign="top">A generic jar is generated as an intermediate step in
-                     build the weblogic deployment jar. The suffix used to
-                     generate the generic jar file is not particularly
-                     important unless it is desired to keep the generic
-                     jar file. It should not, however, be the same
-                     as the suffix setting.</td>
-    <td valign="top" align="center">No, defaults to '-generic.jar'.</td>
-  </tr>
-  <tr>
-    <td valign="top">suffix</td>
-    <td valign="top">String value appended to the basename of the deployment
-                     descriptor to create the filename of the JBoss EJB
-                     jar file.</td>
-    <td valign="top" align="center">No, defaults to '.jar'.</td>
-  </tr>
-  <tr>
-    <td valign="top">keepgeneric</td>
-    <td valign="top">This controls whether the generic file used as input to
-                     ejbc is retained.</td>
-    <td valign="top" align="center">No, defaults to false</td>
-  </tr>
-</table>
-
-
-<h3><a name="ejbjar_weblogic">Weblogic element</a></h3>
-
-<p>The weblogic element is used to control the weblogic.ejbc compiler for
-generating weblogic EJB jars. Prior to Ant 1.3, the method of locating CMP
-descriptors was to use the ejbjar naming convention. So if your ejb-jar was
-called, Customer-ejb-jar.xml, your weblogic descriptor was called Customer-
-weblogic-ejb-jar.xml and your CMP descriptor had to be Customer-weblogic-cmp-
-rdbms-jar.xml. In addition, the &lt;type-storage&gt; element in the weblogic
-descriptor had to be set to the standard name META-INF/weblogic-cmp-rdbms-
-jar.xml, as that is where the CMP descriptor was mapped to in the generated
-jar.</p>
-
-<p>There are a few problems with this scheme. It does not allow for more than
-one CMP descriptor to be defined in a jar and it is not compatible with the
-deployment descriptors generated by some tools.</p>
-
-<p>In Ant 1.3, ejbjar parses the weblogic deployment descriptor to discover the
-CMP descriptors, which are then included automatically. This behaviour is
-controlled by the newCMP attribute. Note that if you move to the new method of
-determining CMP descriptors, you will need to update your weblogic deployment
-descriptor's &lt;type-storage&gt; element. In the above example, you would
-define this as META-INF/Customer-weblogic-cmp-rdbms-jar.xml.</p>
-
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">destdir</td>
-    <td valign="top">The base directory into which the generated weblogic ready
-                     jar files are deposited. Jar files are deposited in
-                     directories corresponding to their location within the
-                     descriptordir namespace. </td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">genericjarsuffix</td>
-    <td valign="top">A generic jar is generated as an intermediate step in
-                     build the weblogic deployment jar. The suffix used to
-                     generate the generic jar file is not particularly
-                     important unless it is desired to keep the generic
-                     jar file. It should not, however, be the same
-                     as the suffix setting.</td>
-    <td valign="top" align="center">No, defaults to '-generic.jar'.</td>
-  </tr>
-  <tr>
-    <td valign="top">suffix</td>
-    <td valign="top">String value appended to the basename of the deployment
-                     descriptor to create the filename of the WebLogic EJB
-                     jar file.</td>
-    <td valign="top" align="center">No, defaults to '.jar'.</td>
-  </tr>
-  <tr>
-    <td valign="top">classpath</td>
-    <td valign="top">The classpath to be used when running the weblogic ejbc
-                     tool. Note that this tool typically requires the classes
-                     that make up the bean to be available on the classpath.
-                     Currently, however, this will cause the ejbc tool to be
-                     run in a separate VM</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">wlclasspath</td>
-    <td valign="top">Weblogic 6.0 will give a warning if the home and remote interfaces
-                     of a bean are on the system classpath used to run weblogic.ejbc.
-                     In that case, the standard weblogic classes should be set with
-                     this attribute (or equivalent nested element) and the
-                     home and remote interfaces located with the standard classpath
-                     attribute</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">keepgeneric</td>
-    <td valign="top">This controls whether the generic file used as input to
-                     ejbc is retained.</td>
-    <td valign="top" align="center">No, defaults to false</td>
-  </tr>
-  <tr>
-    <td valign="top">compiler</td>
-    <td valign="top">This allows for the selection of a different compiler
-                     to be used for the compilation of the generated Java
-                     files. This could be set, for example, to Jikes to
-                     compile with the Jikes compiler. If this is not set
-                     and the <code>build.compiler</code> property is set
-                     to jikes, the Jikes compiler will be used. If this
-                     is not desired, the value &quot;<code>default</code>&quot;
-                     may be given to use the default compiler</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">rebuild</td>
-    <td valign="top">This flag controls whether weblogic.ejbc is always
-                     invoked to build the jar file. In certain circumstances,
-                     such as when only a bean class has been changed, the jar
-                     can be generated by merely replacing the changed classes
-                     and not rerunning ejbc. Setting this to false will reduce
-                     the time to run ejbjar.
-                     </td>
-    <td valign="top" align="center">No, defaults to true.</td>
-  </tr>
-  <tr>
-    <td valign="top">keepgenerated</td>
-    <td valign="top">Controls whether weblogic will keep the generated Java
-                     files used to build the class files added to the
-                     jar. This can be useful when debugging
-                     </td>
-    <td valign="top" align="center">No, defaults to false.</td>
-  </tr>
-  <tr>
-    <td valign="top">args</td>
-    <td valign="top">Any additional arguments to be passed to the weblogic.ejbc
-                     tool.
-                     </td>
-    <td valign="top" align="center">No.</td>
-  </tr>
-  <tr>
-    <td valign="top">weblogicdtd</td>
-    <td valign="top"><b>Deprecated</b>. Defines the location of the ejb-jar DTD in
-                     the weblogic class hierarchy. This should not be necessary if you
-                     have weblogic in your classpath. If you do not, you should use a
-                     nested &lt;dtd&gt; element, described above. If you do choose
-                     to use an attribute, you should use the ejbdtd attribute in
-                     preference to this one, anyway.
-                     </td>
-    <td valign="top" align="center">No.</td>
-  </tr>
-  <tr>
-    <td valign="top">wldtd</td>
-    <td valign="top"><b>Deprecated</b>. Defines the location of the weblogic-ejb-jar
-                     DTD which covers the Weblogic specific deployment descriptors.
-                     This should not be necessary if you have weblogic in your
-                     classpath. If you do not, you should use a nested &lt;dtd&gt;
-                     element, described above.
-                     </td>
-    <td valign="top" align="center">No.</td>
-  </tr>
-  <tr>
-    <td valign="top">ejbdtd</td>
-    <td valign="top"><b>Deprecated</b>. Defines the location of the ejb-jar DTD in
-                     the weblogic class hierarchy. This should not be necessary if you
-                     have weblogic in your classpath. If you do not, you should use a
-                     nested &lt;dtd&gt; element, described above.
-                     </td>
-    <td valign="top" align="center">No.</td>
-  </tr>
-  <tr>
-    <td valign="top">newCMP</td>
-    <td valign="top">If this is set to true, the new method for locating
-                     CMP descriptors will be used.</td>
-    <td valign="top" align="center">No. Defaults to false</td>
-  </tr>
-  <tr>
-    <td valign="top">oldCMP</td>
-    <td valign="top"><b>Deprecated</b> This is an antonym for newCMP which should be used instead.</td>
-    <td valign="top" align="center">No.</td>
-  </tr>
-  <tr>
-    <td valign="top">noEJBC</td>
-    <td valign="top">If this attribute is set to true, Weblogic's ejbc will not be run on the EJB jar.
-                     Use this if you prefer to run ejbc at deployment time.</td>
-    <td valign="top" align="center">No.</td>
-  </tr>
-  <tr>
-    <td valign="top">ejbcclass</td>
-    <td valign="top">Specifies the classname of the ejbc compiler. Normally ejbjar determines
-                     the appropriate class based on the DTD used for the EJB. The EJB 2.0 compiler
-                     featured in weblogic 6 has, however, been deprecated in version 7. When
-                     using with version 7 this attribute should be set to 
-                     &quot;weblogic.ejbc&quot; to avoid the deprecation warning.</td>
-    <td valign="top" align="center">No.</td>
-  </tr>
-</table>
-
-<p>The weblogic nested element itself supports two nested elements &lt;classpath&gt; and
-&lt;wlclasspath&gt; which are used to set the respective classpaths. These nested elements
-are useful when setting up class paths using reference Ids.</p>
-
-<h3>TOPLink for Weblogic element</h3>
-
-<p><b><i>Deprecated</i></b></p>
-
-<p>The toplink element is no longer required. Toplink beans can now be built with the standard
-weblogic element, as long as the newCMP attribute is set to &quot;true&quot;
-</p>
-
-<p>The TopLink element is used to handle beans which use Toplink for the CMP operations. It
-is derived from the standard weblogic element so it supports the same set of attributes plus these
-additional attributes</p>
-
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">toplinkdescriptor</td>
-    <td valign="top">This specifies the name of the TOPLink deployment descriptor file contained in the
-                     'descriptordir' directory.</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">toplinkdtd</td>
-    <td valign="top">This specifies the location of the TOPLink DTD file. This can be a file path or
-                     a file URL. This attribute is not required, but using a local DTD is recommended.</td>
-    <td valign="top" align="center">No, defaults to dtd file at www.objectpeople.com.</td>
-  </tr>
-</table>
-
-
-<h3>Examples</h3>
-
-<p>This example shows ejbjar being used to generate deployment jars using a
-Weblogic EJB container. This example requires the naming standard to be used for
-the deployment descriptors. Using this format will create a ejb jar file for
-each variation of '*-ejb-jar.xml' that is found in the deployment descriptor
-directory.</p>
-
-<pre>
-    &lt;ejbjar srcdir=&quot;${build.classes}&quot;
-            descriptordir=&quot;${descriptor.dir}&quot;&gt;
-      &lt;weblogic destdir=&quot;${deploymentjars.dir}&quot;
-                classpath=&quot;${descriptorbuild.classpath}&quot;/&gt;
-      &lt;include name=&quot;**/*-ejb-jar.xml&quot;/&gt;
-      &lt;exclude name=&quot;**/*weblogic*.xml&quot;/&gt;
-    &lt;/ejbjar&gt;
-</pre>
-
-<p>If weblogic is not in the Ant classpath, the following example
-shows how to specify the location of the weblogic DTDs. This
-example also show the use of a nested classpath element.</p>
-
-<pre>
-    &lt;ejbjar descriptordir=&quot;${src.dir}&quot; srcdir=&quot;${build.classes}&quot;&gt;
-       &lt;weblogic destdir=&quot;${deployment.webshop.dir}&quot;
-                 keepgeneric=&quot;true&quot;
-                 args=&quot;-g -keepgenerated ${ejbc.compiler}&quot;
-                 suffix=&quot;.jar&quot;
-                 oldCMP=&quot;false&quot;&gt;
-         &lt;classpath&gt;
-           &lt;pathelement path=&quot;${descriptorbuild.classpath}&quot;/&gt;
-         &lt;/classpath&gt;
-       &lt;/weblogic&gt;
-       &lt;include name=&quot;**/*-ejb-jar.xml&quot;/&gt;
-       &lt;exclude name=&quot;**/*-weblogic-ejb-jar.xml&quot;/&gt;
-       &lt;dtd publicId=&quot;-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 1.1//EN&quot;
-            location=&quot;${weblogic.home}/classes/weblogic/ejb/deployment/xml/ejb-jar.dtd&quot;/&gt;
-       &lt;dtd publicId=&quot;-//BEA Systems, Inc.//DTD WebLogic 5.1.0 EJB//EN&quot;
-            location=&quot;${weblogic.home}/classes/weblogic/ejb/deployment/xml/weblogic-ejb-jar.dtd&quot;/&gt;
-    &lt;/ejbjar&gt;
-</pre>
-
-
-<p>This example shows ejbjar being used to generate a single deployment jar
-using a Weblogic EJB container. This example does not require the deployment
-descriptors to use the naming standard. This will create only one ejb jar file -
-'TheEJBJar.jar'.</p>
-
-
-<pre>
-    &lt;ejbjar srcdir=&quot;${build.classes}&quot;
-            descriptordir=&quot;${descriptor.dir}&quot;
-            basejarname=&quot;TheEJBJar&quot;&gt;
-      &lt;weblogic destdir=&quot;${deploymentjars.dir}&quot;
-                classpath=&quot;${descriptorbuild.classpath}&quot;/&gt;
-      &lt;include name=&quot;**/ejb-jar.xml&quot;/&gt;
-      &lt;exclude name=&quot;**/weblogic*.xml&quot;/&gt;
-    &lt;/ejbjar&gt;
-</pre>
-
-<p>This example shows ejbjar being used to generate deployment jars for a TOPLink-enabled entity bean using a
-Weblogic EJB container. This example does not require the deployment descriptors to use the naming standard.
-This will create only one TOPLink-enabled ejb jar file - 'Address.jar'.</p>
-
-<pre>
-    &lt;ejbjar srcdir=&quot;${build.dir}&quot;
-            destdir=&quot;${solant.ejb.dir}&quot;
-            descriptordir=&quot;${descriptor.dir}&quot;
-            basejarname=&quot;Address&quot;&gt;
-            &lt;weblogictoplink destdir=&quot;${solant.ejb.dir}&quot;
-                    classpath=&quot;${java.class.path}&quot;
-                    keepgeneric=&quot;false&quot;
-                    toplinkdescriptor=&quot;Address.xml&quot;
-                    toplinkdtd=&quot;file:///dtdfiles/toplink-cmp_2_5_1.dtd&quot;
-                    suffix=&quot;.jar&quot;/&gt;
-            &lt;include name=&quot;**/ejb-jar.xml&quot;/&gt;
-            &lt;exclude name=&quot;**/weblogic-ejb-jar.xml&quot;/&gt;
-    &lt;/ejbjar&gt;
-</pre>
-
-<p>This final example shows how you would set-up ejbjar under Weblogic 6.0. It also shows the use of the
-&lt;support&gt; element to add support files</p>
-
-<pre>
-    &lt;ejbjar descriptordir=&quot;${dd.dir}&quot; srcdir=&quot;${build.classes.server}&quot;&gt;
-       &lt;include name=&quot;**/*-ejb-jar.xml&quot;/&gt;
-       &lt;exclude name=&quot;**/*-weblogic-ejb-jar.xml&quot;/&gt;
-       &lt;support dir=&quot;${build.classes.server}&quot;&gt;
-            &lt;include name=&quot;**/*.class&quot;/&gt;
-       &lt;/support&gt;
-       &lt;weblogic destdir=&quot;${deployment.dir}&quot;
-                 keepgeneric=&quot;true&quot;
-                 suffix=&quot;.jar&quot;
-                 rebuild=&quot;false&quot;&gt;
-         &lt;classpath&gt;
-            &lt;pathelement path=&quot;${build.classes.server}&quot;/&gt;
-         &lt;/classpath&gt;
-         &lt;wlclasspath&gt;
-            &lt;pathelement path=&quot;${weblogic.classes}&quot;/&gt;
-         &lt;/wlclasspath&gt;
-       &lt;/weblogic&gt;
-    &lt;/ejbjar&gt;
-</pre>
-
-
-<h3><a name="ejbjar_websphere">WebSphere element</a></h3>
-
-<p>The websphere element searches for the websphere specific deployment descriptors and
-adds them to the final ejb jar file. Websphere has two specific descriptors for session
-beans:
-<ul>
-   <li>ibm-ejb-jar-bnd.xmi</li>
-   <li>ibm-ejb-jar-ext.xmi</li>
-</ul>
-and another two for container managed entity beans:
-<ul>
-   <li>Map.mapxmi</li>
-   <li>Schema.dbxmi</li>
-</ul>
-In terms of WebSphere, the generation of container code and stubs is called <code>deployment</code>.
-This step can be performed by the websphere element as part of the jar generation process. If the
-switch <code>ejbdeploy</code> is on, the ejbdeploy tool from the websphere toolset is called for
-every ejb-jar. Unfortunately, this step only works, if you use the ibm jdk. Otherwise, the rmic
-(called by ejbdeploy) throws a ClassFormatError. Be sure to switch ejbdeploy off, if run ant with
-sun jdk.
-</p>
-
-<p>
-For the websphere element to work, you have to provide a complete classpath, that contains all
-classes, that are required to reflect the bean classes. For ejbdeploy to work, you must also provide
-the classpath of the ejbdeploy tool (look at the examples below).
-</p>
-
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">destdir</td>
-    <td valign="top">The base directory into which the generated weblogic ready
-                     jar files are deposited. Jar files are deposited in
-                     directories corresponding to their location within the
-                     descriptordir namespace. </td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">ejbdeploy</td>
-    <td valign="top">Decides wether ejbdeploy is called. When you set this to true,
-                     be sure, to run ant with the ibm jdk.</td>
-    <td valign="top" align="center">No, defaults to true</td>
-  </tr>
-  <tr>
-    <td valign="top">suffix</td>
-    <td valign="top">String value appended to the basename of the deployment
-                     descriptor to create the filename of the WebLogic EJB
-                     jar file.</td>
-    <td valign="top" align="center">No, defaults to '.jar'.</td>
-  </tr>
-  <tr>
-    <td valign="top">keepgeneric</td>
-    <td valign="top">This controls whether the generic file used as input to
-                     ejbdeploy is retained.</td>
-    <td valign="top" align="center">No, defaults to false</td>
-  </tr>
-  <tr>
-    <td valign="top">alwaysrebuild</td>
-    <td valign="top">This controls whether ejbdeploy is called although no changes
-                     have occurred.</td>
-    <td valign="top" align="center">No, defaults to false</td>
-  </tr>
-  <tr>
-    <td valign="top">tempdir</td>
-    <td valign="top">A directory, where ejbdeploy will write temporary files</td>
-    <td valign="top" align="center">No, defaults to '_ejbdeploy_temp'.</td>
-  </tr>
-  <tr>
-    <td valign="top">dbName<br>dbSchema</td>
-    <td valign="top">These options are passed to ejbdeploy.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">dbVendor</td>
-    <td valign="top">This option is passed to ejbdeploy. Valid options are for example:
-                     <ul>
-                     <li>SQL92</li> <li>SQL99</li> <li>DB2UDBWIN_V71</li>
-                     <li>DB2UDBOS390_V6</li> <li>DB2UDBAS400_V4R5</li> <li>ORACLE_V8</li>
-                     <li>INFORMIX_V92</li> <li>SYBASE_V1192</li> <li>MYSQL_V323</li>
-                     </ul>
-                     This is also used to determine the name of the Map.mapxmi and
-                     Schema.dbxmi files, for example Account-DB2UDBWIN_V71-Map.mapxmi
-                     and Account-DB2UDBWIN_V71-Schema.dbxmi.
-                     </td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">codegen<br>quiet<br>novalidate<br>noinform<br>trace<br>
-                     use35MappingRules</td>
-    <td valign="top">These options are all passed to ejbdeploy. All options
-                     except 'quiet' default to false.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">rmicOptions</td>
-    <td valign="top">This option is passed to ejbdeploy and will be passed
-                     on to rmic.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-</table>
-
-<p>This example shows ejbjar being used to generate deployment jars for all deployment descriptors
-in the descriptor dir:</p>
-
-<pre>
-     &lt;ejbjar srcdir="${build.class}" descriptordir="etc/ejb"&gt;
-      &lt;include name="*-ejb-jar.xml"/&gt;
-      &lt;websphere dbvendor="DB2UDBOS390_V6"
-                 ejbdeploy="true"
-                 oldCMP="false"
-		 tempdir="/tmp"
-                 destdir="${dist.server}"&gt;
-        &lt;wasclasspath&gt;
-          &lt;pathelement location="${was4.home}/deploytool/itp/plugins/org.eclipse.core.boot/boot.jar"/&gt;
-          &lt;pathelement location="${was4.home}/deploytool/itp/plugins/com.ibm.etools.ejbdeploy/runtime/batch.jar"/&gt;
-          &lt;pathelement location="${was4.home}/lib/xerces.jar"/&gt;
-          &lt;pathelement location="${was4.home}/lib/ivjejb35.jar"/&gt;
-          &lt;pathelement location="${was4.home}/lib/j2ee.jar"/&gt;
-          &lt;pathelement location="${was4.home}/lib/vaprt.jar"/&gt;
-        &lt;/wasclasspath&gt;
-      &lt;classpath&gt;
-        &lt;path refid="build.classpath"/&gt;
-      &lt;/classpath&gt;
-      &lt;/websphere&gt;
-      &lt;dtd publicId="-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 1.1//EN"
-           location="${lib}/dtd/ejb-jar_1_1.dtd"/&gt;
-    &lt;/ejbjar&gt;
-</pre>
-
-<h3><a name="ejbjar_iplanet">iPlanet Application Server (iAS) element</a></h3>
-
-The &lt;iplanet> nested element is used to build iAS-specific stubs and
-skeletons and construct a JAR file which may be deployed to the iPlanet
-Application Server 6.0.  The build process will always determine if
-the EJB stubs/skeletons and the EJB-JAR file are up to date, and it will
-do the minimum amount of work required.
-<p>Like the WebLogic element, a naming convention for the EJB descriptors
-is most commonly used to specify the name for the completed JAR file.
-For example, if the EJB descriptor ejb/Account-ejb-jar.xml is found in
-the descriptor directory, the iplanet element will search for an iAS-specific
-EJB descriptor file named ejb/Account-ias-ejb-jar.xml (if it isn't found,
-the task will fail) and a JAR file named ejb/Account.jar will be written
-in the destination directory.  Note that when the EJB descriptors
-are added to the JAR file, they are automatically renamed META-INF/ejb-jar.xml
-and META-INF/ias-ejb-jar.xml.</p>
-<p>Of course, this naming behaviour can be modified by specifying attributes
-in the ejbjar task (for example, basejarname, basenameterminator, and flatdestdir)
-as well as the iplanet element (for example, suffix).  Refer to the
-appropriate documentation for more details.</p>
-<h3>
-Parameters:</h3>
-
-<table BORDER CELLSPACING=0 CELLPADDING=2 >
-<tr>
-<td VALIGN=TOP><b>Attribute</b></td>
-
-<td VALIGN=TOP><b>Description</b></td>
-
-<td ALIGN=CENTER VALIGN=TOP><b>Required</b></td>
-</tr>
-
-<tr>
-<td VALIGN=TOP>destdir</td>
-
-<td VALIGN=TOP>The base directory into which the generated JAR files will
-be written. Each JAR file is written in directories which correspond to
-their location within the "descriptordir" namespace.</td>
-
-<td ALIGN=CENTER VALIGN=TOP>Yes</td>
-</tr>
-
-<tr>
-<td VALIGN=TOP>classpath</td>
-
-<td VALIGN=TOP>The classpath used when generating EJB stubs and skeletons.
-If omitted, the classpath specified in the "ejbjar" parent task will be
-used.  If specified, the classpath elements will be prepended to the
-classpath specified in the parent "ejbjar" task. Note that nested "classpath"
-elements may also be used.</td>
-
-<td ALIGN=CENTER VALIGN=TOP>No</td>
-</tr>
-
-<tr>
-<td VALIGN=TOP>keepgenerated</td>
-
-<td VALIGN=TOP>Indicates whether or not the Java source files which are
-generated by ejbc will be saved or automatically deleted. If "yes", the
-source files will be retained.  If omitted, it defaults to "no". </td>
-
-<td ALIGN=CENTER VALIGN=TOP>No</td>
-</tr>
-
-<tr>
-<td VALIGN=TOP>debug</td>
-
-<td>Indicates whether or not the ejbc utility should log additional debugging
-statements to the standard output. If "yes", the additional debugging statements
-will be generated.  If omitted, it defaults to "no". </td>
-
-<td ALIGN=CENTER VALIGN=TOP>No</td>
-</tr>
-
-<tr>
-<td VALIGN=TOP>iashome</td>
-
-<td>May be used to specify the "home" directory for this iAS installation.
-This is used to find the ejbc utility if it isn't included in the user's
-system path.  If specified, it should refer to the [install-location]/iplanet/ias6/ias
-directory.  If omitted, the ejbc utility must be on the user's system
-path. </td>
-
-<td ALIGN=CENTER VALIGN=TOP>No</td>
-</tr>
-
-<tr>
-<td VALIGN=TOP>suffix</td>
-
-<td>String value appended to the JAR filename when creating each JAR.
-If omitted, it defaults to ".jar". </td>
-
-<td ALIGN=CENTER VALIGN=TOP>No</td>
-</tr>
-</table>
-
-<p>As noted above, the iplanet element supports additional &lt;classpath>
-nested elements.</p>
-<h3>
-Examples</h3>
-This example demonstrates the typical use of the &lt;iplanet> nested element.
-It will name each EJB-JAR using the "basename" prepended to each standard
-EJB descriptor.  For example, if the descriptor named "Account-ejb-jar.xml"
-is processed, the EJB-JAR will be named "Account.jar"
-<pre>    &lt;ejbjar srcdir="${build.classesdir}"
-            descriptordir="${src}" >
-            &lt;iplanet destdir="${assemble.ejbjar}"
-                     classpath="${ias.ejbc.cpath}" />
-            &lt;include name="**/*-ejb-jar.xml"/>
-            &lt;exclude name="**/*ias-*.xml"/>
-    &lt;/ejbjar></pre>
-This example demonstrates the use of a nested classpath element as well
-as some of the other optional attributes.
-<pre>    &lt;ejbjar srcdir="${build.classesdir}"
-            descriptordir="${src}" >
-            &lt;iplanet destdir="${assemble.ejbjar}"
-                     iashome="${ias.home}"
-                     debug="yes"
-                     keepgenerated="yes" >
-                     &lt;classpath>
-                         &lt;pathelement path="." />
-                         &lt;pathelement path="${build.classpath}" />
-                     &lt;/classpath>
-            &lt;/iplanet>
-            &lt;include name="**/*-ejb-jar.xml"/>
-            &lt;exclude name="**/*ias-*.xml"/>
-    &lt;/ejbjar></pre>
-This example demonstrates the use of basejarname attribute.  In this
-case, the completed EJB-JAR will be named "HelloWorld.jar"  If multiple
-EJB descriptors might be found, care must be taken to ensure that the completed
-JAR files don't overwrite each other.
-<pre>    &lt;ejbjar srcdir="${build.classesdir}"
-            descriptordir="${src}"
-            basejarname="HelloWorld" >
-            &lt;iplanet destdir="${assemble.ejbjar}"
-                     classpath="${ias.ejbc.cpath}"/>
-            &lt;include name="**/*-ejb-jar.xml"/>
-            &lt;exclude name="**/*ias-*.xml"/>
-    &lt;/ejbjar></pre>
-This example demonstrates the use of the dtd nested element. If the local
-copies of the DTDs are included in the classpath, they will be automatically
-referenced without the nested elements.  In iAS 6.0 SP2, these local DTDs are
-found in the [iAS-install-directory]/APPS directory.  In iAS 6.0 SP3, these
-local DTDs are found in the [iAS-install-directory]/dtd directory.
-<pre>    &lt;ejbjar srcdir="${build.classesdir}"
-            descriptordir="${src}">
-            &lt;iplanet destdir="${assemble.ejbjar}">
-                     classpath="${ias.ejbc.cpath}" />
-            &lt;include name="**/*-ejb-jar.xml"/>
-            &lt;exclude name="**/*ias-*.xml"/>
-            &lt;dtd publicId="-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 1.1//EN"
-                 location="${ias.home}/APPS/ejb-jar_1_1.dtd"/>
-            &lt;dtd publicId="-//Sun Microsystems, Inc.//DTD iAS Enterprise JavaBeans 1.0//EN"
-                 location="${ias.home}/APPS/IASEjb_jar_1_0.dtd"/>
-    &lt;/ejbjar></pre>
-<h3><a name="ejbjar_jonas">
-<h3>JOnAS (Java Open Application Server) element</h3>
-</a>
-</h3>
-<p>The &lt;jonas&gt; nested element is used to build JOnAS-specific stubs
-and skeletons thanks to the GenIC specific tool, and construct a JAR file
-which may be deployed to the JOnAS Application Server. The build process
-will always determine if the EJB stubs/skeletons and the EJB-JAR file are
-up to date, and it will do the minimum amount of work required. </p>
-
-<p>Like the WebLogic element, a naming convention for the EJB descriptors
- is most commonly used to specify the name for the completed JAR file.  For
- example, if the EJB descriptor ejb/Account.xml (or ejb/Account-ejb-jar.xml )
- is found in the descriptor directory, the jonas element will search for a
- JOnAS-specific EJB descriptor file named ejb/Account-jonas-ejb-jar.xml
- (if it isn't found, the task will fail) and a JAR file named ejb/Account.jar
- will be written in the destination directory. Note that when the EJB
- descriptors are added to the JAR file, they are automatically  renamed
- META-INF/ejb-jar.xml and META-INF/jonas-ejb-jar.xml.<br><br>
- But if you prefer, you can use JOnAS convention naming and keep your
- XML file name : ejb/Account.xml and ejb/jonas-Account.xml, a JAR file named
- ejb/Account.jar will be written in the destination directory.
-
- </p>
-<p>Of course, this naming behaviour can be modified by specifying attributes
- in the ejbjar task (for example, basejarname, basenameterminator, and flatdestdir)
- as well as the iplanet element (for example, suffix).  Refer to the appropriate
- documentation for more details.</p>
-<h3> Parameters:</h3>
-<table border="1" cellspacing="0" cellpadding="2">
-  <tbody>
-    <tr>
-      <td valign="Top"><b>Attribute</b></td>
-      <td valign="Top"><b>Description</b></td>
-      <td align="Center" valign="Top"><b>Required</b></td>
-    </tr>
-    <tr>
-      <td valign="Top">destdir</td>
-      <td valign="Top">The base directory into which the generated JAR files
- will be written. Each JAR file is written in directories which correspond
- to their location within the "descriptordir" namespace.</td>
-      <td align="Center" valign="Top">Yes</td>
-    </tr>
-    <tr>
-      <td valign="Top">jonasroot<br>
-      </td>
-      <td valign="Top">The root directory for JOnAS. <br>
-      </td>
-      <td valign="Top">
-      <div align="Center">Yes<br>
-      </div>
-      </td>
-    </tr>
-    <tr>
-      <td valign="Top">workdir<br>
-      </td>
-      <td valign="Top">The work directory to use. Specify where to place
-the generated files, before to add to the jar. The directory should be empty.
-If omitted, it defaults to a temporary directory.<br>
-      </td>
-      <td valign="Top">
-      <div align="Center">No<br>
-      </div>
-      </td>
-    </tr>
-    <tr>
-      <td valign="Top">cleanworkdir<br>
-      </td>
-      <td valign="Top">Clean the working directory after work.
-         If omitted, it defaults to false, but your jar will contain
-         wrong files if you don't clean the workdir yourself.<br>
-         Temporary working directory is always cleaned.<br>
-      </td>
-      <td valign="Top">
-      <div align="Center">No<br>
-      </div>
-      </td>
-    </tr>
-    <tr>
-      <td valign="Top">classpath</td>
-      <td valign="Top">The classpath used when generating EJB stubs and skeletons.
-      If omitted, the classpath specified in the "ejbjar" parent task will
-      be used. If specified, the classpath elements will be prepended to the
-      classpath specified in the parent "ejbjar" task (see also the ORB
-      attribute documentation below). Note that nested "classpath" elements
-      may also be used.</td>
-      <td align="Center" valign="Top">No</td>
-    </tr>
-    <tr>
-      <td valign="Top">keepgenerated</td>
-      <td valign="Top">Indicates whether or not the Java source files which
- are generated by GenIC will be saved or automatically deleted. If "yes", the
-source files will be retained.  If omitted, it defaults to "no". </td>
-      <td align="Center" valign="Top">No</td>
-    </tr>
-  <tr>
-    <td valign="top">keepgeneric</td>
-    <td valign="top">This controls whether the generic file used as input to
-                     GenIC is retained.</td>
-    <td valign="top" align="center">No, defaults to false</td>
-  </tr>
-  <tr>
-    <td valign="top">secpropag</td>
-    <td valign="top">Modify the RMI Skel. and Stub. to implement the
-                     implicit propagation of the security context (note that
-                     the transactional context is always provided).
-                     </td>
-    <td valign="top" align="center">No, defaults to false.</td>
-  </tr>
-    <tr>
-      <td valign="Top">orb<br>
-      </td>
-      <td>Choose your ORB : RMI, JEREMIE, DAVID, ... If omitted, it defaults
-to the one present in classpath. If specified, the corresponding JOnAS JAR is
-automatically added to the classpath. <br>
-      </td>
-      <td align="Center" valign="Top">No</td>
-    </tr>
-    <tr>
-      <td valign="Top">noGENIC<br>
-      </td>
-      <td valign="Top">If this attribute is set to true, JOnAS's GenIC will
- not be run on the EJB jar. Use this if you prefer to
- run GenIC at deployment time.</td>
-      <td>
-      <div align="Center">No</div>
-      </td>
-    </tr>
-    <tr>
-      <td valign="Top">suffix</td>
-      <td>String value appended to the JAR filename when creating each JAR.
-  If omitted, it defaults to ".jar". </td>
-      <td align="Center" valign="Top">No</td>
-    </tr>
-    <tr>
-      <td valign="Top">verbose<br>
-      </td>
-      <td valign="Top">Indicates whether or not to use -verbose switch. If
-omitted, it defaults to "no".</td>
-      <td valign="Top">
-      <div align="Center">No<br>
-      </div>
-      </td>
-    </tr>
-    <tr>
-      <td valign="Top">compiler<br>
-      </td>
-      <td valign="Top">This allows for the selection of a different compiler
-                      to be used for the compilation of the generated Java
-                      files. This could be set, for example, to Jikes to
-                     compile with the Jikes compiler. If this is not set
-                    and the <code>build.compiler</code> property is set
-                    to jikes, the Jikes compiler will be used. If this
-                   is not desired, the value "<code>default</code>"
-                 may be given to use the default compiler<br>
-      </td>
-      <td valign="Top">
-      <div align="Center">No<br>
-      </div>
-      </td>
-    </tr>
-    <tr>
-      <td valign="Top">args<br>
-      </td>
-      <td valign="Top">Add additional args to GenIC.<br>
-      </td>
-      <td valign="Top">
-      <div align="Center">No<br>
-      </div>
-      </td>
-    </tr>
-  </tbody>
-</table>
-<p>As noted above, the jonas element supports additional &lt;classpath&gt;
- nested elements. </p>
-<h3>Examples</h3>
-<p>This example shows ejbjar being used to generate deployment jars using
- a  JOnAS EJB container. This example requires the naming standard to be
- used for  the deployment descriptors. Using this format will create a ejb
- jar file for each variation of &nbsp;'*-jar.xml' that is found in the
-deployment  descriptor  directory.&nbsp;</p>
-<pre>
-      &lt;ejbjar srcdir="${build.classes}"
-              descriptordir="${descriptor.dir}"&gt;
-        &lt;jonas destdir="${deploymentjars.dir}"
-             jonasroot="${jonas.root}"
-             orb="RMI" /&gt;
-        &lt;include name="**/*.xml"/&gt;
-        &lt;exclude name="**/jonas-*.xml"/&gt;
-        &lt;support dir="${build.classes}"&gt;
-             &lt;include name="**/*.class"/&gt;
-        &lt;/support&gt;
-      &lt;/ejbjar&gt;
-</pre>
-<p></p>
-<p>This example shows ejbjar being used to generate a single deployment jar
-  using a JOnAS EJB container. This example does require the deployment
-  descriptors to use the naming standard. This will create only one ejb jar
- file - 'TheEJBJar.jar'.</p>
-<pre>
-      &lt;ejbjar srcdir="${build.classes}"
-              descriptordir="${descriptor.dir}"
-              basejarname="TheEJBJar"&gt;
-        &lt;jonas destdir="${deploymentjars.dir}"
-                  jonasroot="${jonas.root}"
-                  suffix=".jar"
-                  classpath="${descriptorbuild.classpath}" /&gt;
-        &lt;include name="**/ejb-jar.xml"/&gt;
-        &lt;exclude name="**/jonas-ejb-jar.xml"/&gt;
-      &lt;/ejbjar&gt;
-</pre>
-
-<hr>
-<p align="center">Copyright &copy; 2001-2002 Apache Software Foundation. All rights
-Reserved.</p>
-
-
-</body>
-
-</html>
-
diff --git a/docs/manual/OptionalTasks/ftp.html b/docs/manual/OptionalTasks/ftp.html
deleted file mode 100644
index 77a7009..0000000
--- a/docs/manual/OptionalTasks/ftp.html
+++ /dev/null
@@ -1,271 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>FTP Task</title>
-</head>
-
-<body>
-
-<h2><a name="ftp">FTP</a></h2>
-<h3>Description</h3>
-<p>The ftp task implements a basic FTP client that can send, receive,
-list, delete files, and create directories.  See below for descriptions and examples of how
-to perform each task.</p>
-<p><b>Note:</b> This task depends on external libraries not included in the Ant distribution.
-See <a href="../install.html#librarydependencies">Library Dependencies</a> for more information.</p>
-<p>The ftp task makes no attempt to determine what file system syntax is
-required by the remote server, and defaults to Unix standards.
-<i>remotedir</i> must be specified in the exact syntax required by the ftp
-server. If the usual Unix conventions are not supported by the server,
-<i>separator</i> can be used to set the file separator that should be used
-instead.</p>
-<p>See the section on <a href="../dirtasks.html#directorybasedtasks">directory based
-tasks</a>, on how the inclusion/exclusion of files works, and how to
-write patterns.</p>
-<p>
-<b>Warning: </b> for the get and delete actions to work properly 
-with a Windows 2000 ftp server, it needs to be configured to generate
-Unix style listings, and not the default MS-DOS listing. Or someone needs to write
-the code to parse MS-DOS listings -any takers?
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">server</td>
-    <td valign="top">the address of the remote ftp server.</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">port</td>
-    <td valign="top">the port number of the remote ftp server.
-                     Defaults to port 21.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">userid</td>
-    <td valign="top">the login id to use on the ftp server.</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">password</td>
-    <td valign="top">the login password to use on the ftp server.</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">remotedir</td>
-    <td valign="top">the directory to which to upload files on the 
-                     ftp server.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">action</td>
-    <td valign="top">the ftp action to perform, defaulting to &quot;send&quot;.  
-                     Currently supports &quot;put&quot;, &quot;get&quot;,
-                     &quot;del&quot;, &quot;list&quot;, &quot;chmod&quot; and &quot;mkdir&quot;.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">binary</td>
-    <td valign="top">selects binary-mode (&quot;yes&quot;) or text-mode 
-                     (&quot;no&quot;) transfers.  
-                     Defaults to &quot;yes&quot;</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">passive</td>
-    <td valign="top">selects passive-mode (&quot;yes&quot;) transfers.  
-                     Defaults to &quot;no&quot;</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">verbose</td>
-    <td valign="top">displays information on each file transferred if set 
-                     to &quot;yes&quot;. Defaults to &quot;no&quot;.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">depends</td>
-    <td valign="top">transfers only new or changed files if set to 
-                     &quot;yes&quot;. Defaults to &quot;no&quot;.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">newer</td>
-    <td valign="top">a synonym for <i>depends</i>.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">separator</td>
-    <td valign="top">sets the file separator used on the ftp server.
-                     Defaults to &quot;/&quot;.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">umask</td>
-    <td valign="top">sets the default file permissions for new files,
-                     unix only.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">chmod</td>
-    <td valign="top">sets or changes file permissions for new or existing files,
-      unix only. If used with a put action, chmod will be issued for each file.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">listing</td>
-    <td valign="top">the file to write results of the &quot;list&quot; action.
-                     Required for the &quot;list&quot; action, ignored otherwise.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">ignoreNoncriticalErrors</td>
-    <td valign="top">flag which permits the task to ignore some non-fatal error
-      codes sent by some servers during directory creation: wu-ftp in particular.
-      Default: false</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">skipFailedTransfers</td>
-    <td valign="top">flag which enables unsuccessful file put, delete
-    and get operations to be skipped with a warning and the
-    remainder of the files still transferred. Default: false</td>
-    <td valign="top" align="center">No</td>
-  </tr>  
-</table>
-<h3>Sending Files</h3>
-<p>The easiest way to describe how to send files is with a couple of examples:</p>
-<pre>
-  &lt;ftp server=&quot;ftp.apache.org&quot;
-       userid=&quot;anonymous&quot;
-       password=&quot;me@myorg.com&quot;&gt;
-    &lt;fileset dir=&quot;htdocs/manual&quot;/&gt;
-  &lt;/ftp&gt;
-</pre>
-<p>Logs in to <code>ftp.apache.org</code> as <code>anonymous</code> and 
-uploads all files in the <code>htdocs/manual</code> directory 
-to the default directory for that user.</p>
-<pre>  &lt;ftp server=&quot;ftp.apache.org&quot;
-       remotedir=&quot;incoming&quot;
-       userid=&quot;anonymous&quot;
-       password=&quot;me@myorg.com&quot;
-       depends=&quot;yes&quot;
-  &gt;
-    &lt;fileset dir=&quot;htdocs/manual&quot;/&gt;
-  &lt;/ftp&gt;</pre>
-<p>Logs in to <code>ftp.apache.org</code> as <code>anonymous</code> and 
-uploads all new or changed files in the <code>htdocs/manual</code> directory 
-to the <code>incoming</code> directory relative to the default directory
-for <code>anonymous</code>.</p>
-<pre>  &lt;ftp server=&quot;ftp.apache.org&quot;
-       port=&quot;2121&quot;
-       remotedir=&quot;/pub/incoming&quot;
-       userid=&quot;coder&quot;
-       password=&quot;java1&quot;
-       depends=&quot;yes&quot;
-       binary=&quot;no&quot;
-  &gt;
-    &lt;fileset dir=&quot;htdocs/manual&quot;&gt;
-      &lt;include name=&quot;**/*.html&quot;/&gt;
-    &lt;/fileset&gt;
-  &lt;/ftp&gt;</pre>
-<p>Logs in to <code>ftp.apache.org</code> at port <code>2121</code> as 
-<code>coder</code> with password <code>java1</code> and uploads all new or 
-changed HTML files in the <code>htdocs/manual</code> directory to the 
-<code>/pub/incoming</code> directory. The files are transferred in text mode. Passive mode has been switched on to send files from behind a firewall.</p>
-<pre>  &lt;ftp server=&quot;ftp.nt.org&quot;
-       remotedir=&quot;c:\uploads&quot;
-       userid=&quot;coder&quot;
-       password=&quot;java1&quot;
-       separator=&quot;\&quot;
-       verbose=&quot;yes&quot;</pre>
-<PRE>
-  &gt;
-    &lt;fileset dir=&quot;htdocs/manual&quot;&gt;
-      &lt;include name=&quot;**/*.html&quot;/&gt;
-    &lt;/fileset&gt;
-  &lt;/ftp&gt;</PRE><p>Logs in to the Windows-based <code>ftp.nt.org</code> as 
-<code>coder</code> with password <code>java1</code> and uploads all 
-HTML files in the <code>htdocs/manual</code> directory to the 
-<code>c:\uploads</code> directory.  Progress messages are displayed as each
-file is uploaded.</p>
-<h3>Getting Files</h3>
-<p>Getting files from an FTP server works pretty much the same way as 
-sending them does.  The only difference is that the nested filesets
-use the remotedir attribute as the base directory for the files on the
-FTP server, and the dir attribute as the local directory to put the files
-into.  The file structure from the FTP site is preserved on the local machine.</p>
-<pre>
-  &lt;ftp action=&quot;get&quot;
-       server=&quot;ftp.apache.org&quot;
-       userid=&quot;anonymous&quot;
-       password=&quot;me@myorg.com&quot;&gt;
-    &lt;fileset dir=&quot;htdocs/manual&quot; &gt;
-      &lt;include name=&quot;**/*.html&quot;/&gt;
-    &lt;/fileset&gt;
-  &lt;/ftp&gt;
-</pre>
-<p>Logs in to <code>ftp.apache.org</code> as <code>anonymous</code> and 
-recursively downloads all .html files from default directory for that user 
-into the <code>htdocs/manual</code> directory on the local machine.</p>
-. 
-<h3>Deleting Files</h3>
-As you've probably guessed by now, you use nested fileset elements to 
-select the files to delete from the remote FTP server.  Again, the 
-filesets are relative to the remote directory, not a local directory.  In
-fact, the dir attribute of the fileset is ignored completely.
-
-<pre>
-  &lt;ftp action=&quot;del&quot;
-       server=&quot;ftp.apache.org&quot;
-       userid=&quot;anonymous&quot;
-       password=&quot;me@myorg.com&quot; &gt;
-    &lt;fileset&gt;
-      &lt;include name=&quot;**/*.tmp&quot;/&gt;
-    &lt;/fileset&gt;
-  &lt;/ftp&gt;
-</pre>
-<p>Logs in to <code>ftp.apache.org</code> as <code>anonymous</code> and
-tries to delete all *.tmp files from the default directory for that user.
-If you don't have permission to delete a file, a BuildException is thrown.</p>
-<h3>Listing Files</h3>
-<pre>
-  &lt;ftp action=&quot;list&quot;
-       server=&quot;ftp.apache.org&quot;
-       userid=&quot;anonymous&quot;
-       password=&quot;me@myorg.com&quot; 
-       listing=&quot;data/ftp.listing&quot; &gt;
-    &lt;fileset&gt;
-      &lt;include name=&quot;**&quot;/&gt;
-    &lt;/fileset&gt;
-  &lt;/ftp&gt;
-</pre>
-<p>This provides a file listing in <code>data/ftp.listing</code> of all the files on
-the FTP server relative to the default directory of the <code>anonymous</code>
-user. The listing is in whatever format the FTP server normally lists files.</p>
-
-<h3>Creating Directories</h3>
-<p>Note that with the mkdir action, the directory to create is specified using the
-remotedir attribute.</p>
-<pre>
-  &lt;ftp action=&quot;mkdir&quot;
-       server=&quot;ftp.apache.org&quot;
-       userid=&quot;anonymous&quot;
-       password=&quot;me@myorg.com&quot; 
-       remotedir=&quot;some/remote/dir&quot; /&gt;
-</pre>
-<p>This creates the directory <code>some/remote/dir</code> beneath the default root
-directory.  As with all other actions, the directory separator character must be correct
-according to the desires of the FTP server.</p>
-<hr>
-<p align="center">Copyright &copy; 2001-2002 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/OptionalTasks/icontract.html b/docs/manual/OptionalTasks/icontract.html
deleted file mode 100644
index ff06edf..0000000
--- a/docs/manual/OptionalTasks/icontract.html
+++ /dev/null
@@ -1,167 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>IContract Task</title>
-</head>
-
-<body>
-
-<h2><a name="icontract">icontract</a></h2>
-<h3>Description</h3>
-
-<P>
-Instruments Java classes with <a href="http://www.reliable-systems.com/tools/">iContract</a>
- DBC preprocessor.<br>
- The task can generate a properties file for <a href="http://home.sol.no/~hellesoy/icplus.html">iControl</a>,
- a graphical user interface that lets you turn on/off assertions. iControl generates a control file that you can refer to
- from this task using the controlfile attribute.
- </p>
-
-<h3>Parameters</h3>
- <table border="1" cellpadding="2" cellspacing="0">
-   <tr>
-     <td valign="top"><b>Attribute</b></td>
-     <td valign="top"><b>Description</b></td>
-     <td align="center" valign="top"><b>Required</b></td>
-   </tr>
-   <tr>
-     <td valign="top">srcdir</td>
-     <td valign="top">Location of the java files.</td>
-     <td valign="top" align="center">Yes</td>
-   </tr>
-   <tr>
-     <td valign="top">instrumentdir</td>
-     <td valign="top">Indicates where the instrumented source files should go.</td>
-     <td valign="top" align="center">Yes</td>
-   </tr>
-   <tr>
-     <td valign="top">repositorydir</td>
-     <td valign="top">Indicates where the repository source files should go.</td>
-     <td valign="top" align="center">Yes</td>
-   </tr>
-   <tr>
-     <td valign="top">builddir</td>
-     <td valign="top">Indicates where the compiled instrumented classes should go.
-       Defaults to the value of instrumentdir.
-       <em>NOTE:</em> Don't use the same directory for compiled instrumented classes
-       and uninstrumented classes. It will break the dependency checking. (Classes will
-       not be reinstrumented if you change them).</td>
-     <td valign="top" align="center">No</td>
-   </tr>
-   <tr>
-     <td valign="top">repositorybuilddir</td>
-     <td valign="top">Indicates where the compiled repository classes should go.
-       Defaults to the value of repositorydir.</td>
-     <td valign="top" align="center">No</td>
-   </tr>
-   <tr>
-     <td valign="top">pre</td>
-     <td valign="top">Indicates whether or not to instrument for preconditions.
-       Defaults to <code>true</code> unless controlfile is specified, in which case it
-       defaults to <code>false</code>.</td>
-     <td valign="top" align="center">No</td>
-   </tr>
-   <tr>
-     <td valign="top">post</td>
-     <td valign="top">Indicates whether or not to instrument for postconditions.
-       Defaults to <code>true</code> unless controlfile is specified, in which case it
-       defaults to <code>false</code>.</td>
-     <td valign="top" align="center">No</td>
-   </tr>
-   <tr>
-     <td valign="top">invariant</td>
-     <td valign="top">Indicates whether or not to instrument for invariants.
-       Defaults to <code>true</code> unless controlfile is specified, in which case it
-       defaults to <code>false</code>.</td>
-     <td valign="top" align="center">No</td>
-   </tr>
-   <tr>
-     <td valign="top">failthrowable</td>
-     <td valign="top">The full name of the Throwable (Exception) that should be
-       thrown when an assertion is violated. Defaults to <code>java.lang.Error</code></td>
-     <td valign="top" align="center">No</td>
-   </tr>
-   <tr>
-     <td valign="top">verbosity</td>
-     <td valign="top">Indicates the verbosity level of iContract. Any combination
-       of <code>error*,warning*,note*,info*,progress*,debug*</code> (comma separated) can be
-       used. Defaults to <code>error*</code></td>
-     <td valign="top" align="center">No</td>
-   </tr>
-   <tr>
-     <td valign="top">quiet</td>
-     <td valign="top">Indicates if iContract should be quiet. Turn it off if many your classes extend uninstrumented classes
-     and you don't want warnings about this. Defaults to <code>false</code></td>
-     <td valign="top" align="center">No</td>
-   </tr>
-   <tr>
-     <td valign="top">updateicontrol</td>
-     <td valign="top">If set to true, it indicates that the properties file for
-       iControl in the current directory should be updated (or created if it doesn't exist).
-       Defaults to <code>false</code>.</td>
-     <td valign="top" align="center">No</td>
-   </tr>
-   <tr>
-     <td valign="top">controlfile</td>
-     <td valign="top">The name of the control file to pass to iContract. Consider using iControl to generate the file.
-       Default is not to pass a file. </td>
-     <td valign="top" align="center">Only if <code>updateicontrol=true</code></td>
-   </tr>
-   <tr>
-     <td valign="top">classdir</td>
-     <td valign="top">Indicates where compiled (unistrumented) classes are located.
-       This is required in order to properly update the icontrol.properties file, not
-       for instrumentation.</td>
-     <td valign="top" align="center">Only if <code>updateicontrol=true</code></td>
-   </tr>
-   <tr>
-     <td valign="top">targets</td>
-     <td valign="top">Name of the file that will be generated by this task, which lists all the
-        classes that iContract will instrument. If specified, the file will not be deleted after execution.
-        If not specified, a file will still be created, but it will be deleted after execution.</td>
-     <td valign="top" align="center">No</td>
-   </tr>
- </table>
-
-<p>
- <b>Note:</b> iContract will use the java compiler indicated by the project's
- <code>build.compiler</code> property. See documentation of the Javac task for
- more information. Nested includes and excludes are also supported.</p>
-
- <p><b>Example:</b></p>
-
- <p>
- <b>Note:</b> iContract will use the java compiler indicated by the project's
- <code>build.compiler</code> property. See documentation of the Javac task for
- more information.</p>
- <p>
- Nested includes and excludes can be done very much the same way as any subclass
- of MatchingTask.</p>
-
- <p><b>Example:</b></p>
-
- <pre>
- &lt;icontract
-    srcdir=&quot;${build.src}&quot;
-    instrumentdir=&quot;${build.instrument}&quot;
-    repositorydir=&quot;${build.repository}&quot;
-    builddir=&quot;${build.instrclasses}&quot;
-    updateicontrol=&quot;true&quot;
-    classdir=&quot;${build.classes}&quot;
-    controlfile=&quot;control&quot;
-    targets=&quot;targets&quot;
-    verbosity=&quot;error*,warning*&quot;
-    quiet=&quot;true&quot;
- &gt;
-    &lt;classpath refid=&quot;compile-classpath&quot;/&gt;
- &lt;/icontract&gt;
-</pre>
-
-<hr>
-<p align="center">Copyright &copy; 2001 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/OptionalTasks/javacc.html b/docs/manual/OptionalTasks/javacc.html
deleted file mode 100644
index ddec74a..0000000
--- a/docs/manual/OptionalTasks/javacc.html
+++ /dev/null
@@ -1,182 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>JavaCC Task</title>
-</head>
-
-<body>
-
-<h2><a name="javacc">JavaCC</a></h2>
-<h3>Description</h3> 
-<p>
-  Invokes the <a HREF="http://www.webgain.com/products/java_cc/" target="_top">JavaCC</a> compiler 
-  compiler on a grammar file.
-</p>
-<p>
-  To use the javacc task, set the <i>target</i> attribute to the name of the 
-  grammar file to process.  You also need to specify the directory containing 
-  the JavaCC installation using the <i>javacchome</i> attribute, so that ant 
-  can find the JavaCC classes.  Optionally, you can also set the 
-  <i>outputdirectory</i> to write the generated file to a specific directory.
-  Otherwise javacc writes the generated files to the directory containing
-  the grammar file.
-</p>
-<p>
-  This task only invokes JavaCC if the grammar file is newer than the generated 
-  Java files.  javacc assumes that the Java class name of the generated parser
-  is the same as the name of the grammar file, ignoring the .jj.
-  If this is not the case, the javacc task will still work, but it will always 
-  generate the output files.
-</p>
-
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">target</td>
-    <td valign="top">The grammar file to process.</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">javacchome</td>
-    <td valign="top">The directory containing the JavaCC distribution.</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">outputdirectory</td>
-    <td valign="top">
-      The directory to write the generated files to.  If not set, the files
-      are written to the directory containing the grammar file.
-    </td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">buildparser</td>
-    <td valign="top">Sets the BUILD_PARSER grammar option.  This is a boolean option.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">buildtokenmanager</td>
-    <td valign="top">Sets the BUILD_TOKEN_MANAGER grammar option.  This is a boolean option.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">cachetokens</td>
-    <td valign="top">Sets the CACHE_TOKENS grammar option.  This is a boolean option.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">choiceambiguitycheck</td>
-    <td valign="top">Sets the CHOICE_AMBIGUITY_CHECK grammar option.  This is an integer option.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">commontokenaction</td>
-    <td valign="top">Sets the COMMON_TOKEN_ACTION grammar option.  This is a boolean option.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">debuglookahead</td>
-    <td valign="top">Sets the DEBUG_LOOKAHEAD grammar option.  This is a boolean option.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">debugparser</td>
-    <td valign="top">Sets the DEBUG_PARSER grammar option.  This is a boolean option.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">debugtokenmanager</td>
-    <td valign="top">Sets the DEBUG_TOKEN_MANAGER grammar option.  This is a boolean option.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">errorreporting</td>
-    <td valign="top">Sets the ERROR_REPORTING grammar option.  This is a boolean option.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">forcelacheck</td>
-    <td valign="top">Sets the FORCE_LA_CHECK grammar option.  This is a boolean option.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">ignorecase</td>
-    <td valign="top">Sets the IGNORE_CASE grammar option.  This is a boolean option.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">javaunicodeescape</td>
-    <td valign="top">Sets the JAVA_UNICODE_ESCAPE grammar option.  This is a boolean option.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">lookahead</td>
-    <td valign="top">Sets the LOOKAHEAD grammar option.  This is an integer option.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">optimizetokenmanager</td>
-    <td valign="top">Sets the OPTIMIZE_TOKEN_MANAGER grammar option.  This is a boolean option.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">otherambiguitycheck</td>
-    <td valign="top">Sets the OTHER_AMBIGUITY_CHECK grammar option.  This is an integer option.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">sanitycheck</td>
-    <td valign="top">Sets the SANITY_CHECK grammar option.  This is a boolean option.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">static</td>
-    <td valign="top">Sets the STATIC grammar option.  This is a boolean option.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">unicodeinput</td>
-    <td valign="top">Sets the UNICODE_INPUT grammar option.  This is a boolean option.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">usercharstream</td>
-    <td valign="top">Sets the USER_CHAR_STREAM grammar option.  This is a boolean option.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">usertokenmanager</td>
-    <td valign="top">Sets the USER_TOKEN_MANAGER grammar option.  This is a boolean option.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-</table>
-<h3>Example</h3>
-<blockquote><pre>
-&lt;javacc 
-    target=&quot;src/Parser.jj&quot; 
-    outputdirectory=&quot;build/src&quot;
-    javacchome=&quot;c:/program files/JavaCC&quot; 
-    static=&quot;true&quot;
-/&gt;
-</pre></blockquote>
-<p>
-  This invokes JavaCC on grammar file src/Parser.jj, writing the generated
-  files to build/src.  The grammar option STATIC is set to true when
-  invoking JavaCC.
-</p>
-<hr>
-
-<p align="center">Copyright &copy; 2001 Apache Software Foundation.
-All rights
-Reserved.</p>
-
-</body>
-</html>
-
-
diff --git a/docs/manual/OptionalTasks/javah.html b/docs/manual/OptionalTasks/javah.html
deleted file mode 100644
index 2640947..0000000
--- a/docs/manual/OptionalTasks/javah.html
+++ /dev/null
@@ -1,120 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Javah Task</title>
-</head>
-
-<body>
-
-<h2><a name="javah">Javah</a></h2>
-<h3>Description</h3>
-<p>Generates JNI headers from a Java class.</p>
-<p> When this task executes, it will generate the C header and source files that
-are needed to implement native methods. JNI operates differently depending on
-whether <a href="http://java.sun.com/j2se/1.3/docs/tooldocs/win32/javah.html">JDK1.2</a>
-(or later) or <a href="http://java.sun.com/products/jdk/1.1/docs/tooldocs/win32/javah.html">pre-JDK1.2</a>
-systems are used.</p>
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td valign="top" align="center"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">class</td>
-    <td valign="top">the fully-qualified name of the class (or classes,
-      separated by commas)</td>
-    <td align="center" valign="top">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">outputFile</td>
-    <td valign="top">concatenates the resulting header or source files for all the classes listed into this file</td>
-    <td align="center" valign="middle" rowspan="2">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">destdir</td>
-    <td valign="top">sets the directory where javah saves the header files or the
-      stub files.</td>
-  </tr>
-  <tr>
-    <td valign="top">force</td>
-    <td valign="top">specifies that output files should always be written (JDK1.2 only)</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">old</td>
-    <td valign="top">specifies that old JDK1.0-style header files should be generated
-      (otherwise output file contain JNI-style native method      function prototypes) (JDK1.2 only)</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">stubs</td>
-    <td valign="top">generate C declarations from the Java object file (used with old)</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">verbose</td>
-    <td valign="top">causes Javah to print a message concerning the status     of the generated files</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">classpath</td>
-    <td valign="top">the classpath to use.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">bootclasspath</td>
-    <td valign="top">location of bootstrap class files.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">extdirs</td>
-    <td valign="top"> location of installed extensions.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-</table>
-<p>Either outputFile or destdir must be supplied, but not both.&nbsp;</p>
-<h3>Examples</h3>
-<pre>  &lt;javah destdir=&quot;c&quot; class=&quot;org.foo.bar.Wibble&quot; /&gt;</pre>
-<p>makes a JNI header of the named class, using the JDK1.2 JNI model. Assuming
-the directory 'c' already exists, the file <tt>org_foo_bar_Wibble.h</tt>
-is created there. If this file already exists, it is left unchanged.</p>
-<pre>  &lt;javah outputFile=&quot;wibble.h&quot;&gt;
-    &lt;class name=&quot;org.foo.bar.Wibble,org.foo.bar.Bobble&quot;/&gt;
-  &lt;/javah&gt;</pre>
-<p>is similar to the previous example, except the output is written to a file
-called <tt>wibble.h</tt>
-in the current directory.</p>
-<pre>  &lt;javah destdir=&quot;c&quot; force=&quot;yes&quot;&gt;
-    &lt;class name=&quot;org.foo.bar.Wibble&quot;/&gt;
-    &lt;class name=&quot;org.foo.bar.Bobble&quot;/&gt;
-    &lt;class name=&quot;org.foo.bar.Tribble&quot;/&gt;
-  &lt;/javah&gt;</pre>
-<p>writes three header files, one for each of the classes named. Because the
-force option is set, these header files are always written when the Javah task
-is invoked, even if they already exist.</p>
-<pre>  &lt;javah destdir=&quot;c&quot; verbose=&quot;yes&quot; old=&quot;yes&quot; force=&quot;yes&quot;&gt;
-    &lt;class name=&quot;org.foo.bar.Wibble&quot;/&gt;
-    &lt;class name=&quot;org.foo.bar.Bobble&quot;/&gt;
-    &lt;class name=&quot;org.foo.bar.Tribble&quot;/&gt;
-  &lt;/javah&gt;
-  &lt;javah destdir=&quot;c&quot; verbose=&quot;yes&quot; stubs=&quot;yes&quot; old=&quot;yes&quot; force=&quot;yes&quot;&gt;
-    &lt;class name=&quot;org.foo.bar.Wibble&quot;/&gt;
-    &lt;class name=&quot;org.foo.bar.Bobble&quot;/&gt;
-    &lt;class name=&quot;org.foo.bar.Tribble&quot;/&gt;
-  &lt;/javah&gt;</pre>
-<p>writes the headers for the three classes using the 'old' JNI format, then
-writes the corresponding .c stubs. The verbose option will cause Javah to
-describe its progress.</p>
-
-<hr>
-
-<hr>
-<p align="center">Copyright &copy; 2001 Apache Software Foundation. All rights
-Reserved.</p>
-</body>
-
-</html>
-
diff --git a/docs/manual/OptionalTasks/jdepend.html b/docs/manual/OptionalTasks/jdepend.html
deleted file mode 100644
index 134700a..0000000
--- a/docs/manual/OptionalTasks/jdepend.html
+++ /dev/null
@@ -1,126 +0,0 @@
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
-
-<html>
-<head>
-   <title>JDepend Task</title>
-   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-   <meta http-equiv="Content-Language" content="en-us">
-</head>
-
-<body>
-
-<h2><a NAME="JDepend"></a>JDepend</h2>
-
-<h3>Description</h3>
-
-<P>Invokes the <a href="http://www.clarkware.com/software/JDepend.html">JDepend</a> parser.</P>
-
-<P>This parser &quot;traverses a set of Java source file directories and generates design quality metrics for each Java package&quot;.
-It allows to &quot;automatically measure the quality of a design in terms of its extensibility, reusability, and maintainability to
-effectively manage and control package dependencies.&quot;</P>
-
-<p>Source file directories are defined by nested <code>&lt;sourcespath&gt;</code>, see <a href="#nested">nested elements</a>.</p>
-
-<p>Optionally, you can also set the <code>outputfile</code> name where the output is stored. By default the task writes its report to the standard output.</P>
-
-<p> The task requires at least the JDepend 1.2 version. </p>
-
-<P>Note: whereas the JDepend tool can be customized to exclude some packages, the current jdepend And Task does not have parameters to allow these exclusions. Read JDepend specific documentation for that purpose.</P>
-
-<h3>Parameters</h3>
-
-<table BORDER=1 CELLSPACING=0 CELLPADDING=2 >
-  <tr>
-    <td VALIGN=TOP><b>Attribute</b></td>
-    <td VALIGN=TOP><b>Description</b></td>
-    <td ALIGN=CENTER VALIGN=TOP><b>Required</b></td>
-  </tr>
-  <tr>
-    <td VALIGN=TOP>outputfile</td>
-    <td VALIGN=TOP>The output file name. If not set, the output is printed on the standard output.</td>
-    <td ALIGN=CENTER VALIGN=TOP>No</td>
-  </tr>
-  <tr>
-    <td VALIGN=TOP>format</td>
-    <td VALIGN=TOP>The format to write the output in. The default is "text", the alternative is "xml"</td>
-    <td ALIGN=CENTER VALIGN=TOP>No</td>
-  </tr>
-  <tr>
-    <td VALIGN=TOP>fork</td>
-    <td VALIGN=TOP>Run the tests in a separate VM.</td>
-    <td ALIGN=CENTER VALIGN=TOP>No, default is "off"</td>
-  </tr>
-  <tr>
-    <td VALIGN=TOP>haltonerror</td>
-    <td VALIGN=TOP>Stop the build process if an error occurs during the jdepend analysis.</td>
-    <td ALIGN=CENTER VALIGN=TOP>No, default is "off"</td>
-  </tr>
-  <tr>
-    <td VALIGN=TOP>timeout</td>
-    <td VALIGN=TOP>Cancel the operation if it doesn't finish in the given time (measured in milliseconds). (Ignored if fork is disabled.)</td>
-    <td ALIGN=CENTER VALIGN=TOP>No</td>
-  </tr>
-  <tr>
-    <td VALIGN=TOP>jvm</td>
-    <td VALIGN=TOP>The command used to invoke the Java Virtual Machine, default is 'java'. The command is resolved by java.lang.Runtime.exec(). (Ignored if fork is disabled.)</td>
-    <td ALIGN=CENTER VALIGN=TOP>No, default "java"</td>
-  </tr>
-  <tr>
-    <td VALIGN=TOP>dir</td>
-    <td VALIGN=TOP>The directory to invoke the VM in. (Ignored if fork is disabled)</td>
-    <td ALIGN=CENTER VALIGN=TOP>No</td>
-  </tr>
-  <tr>
-    <td VALIGN=TOP>classpathref</td>
-    <td VALIGN=TOP>the classpath to use, given as reference to a PATH defined elsewhere.</td>
-    <td ALIGN=CENTER VALIGN=TOP>No</td>
-  </tr>
-</table>
-
-<h3><a name="nested">Nested Elements</a></h3>
-
-<p><code>jdepend</code> supports two nested elements <code>&lt;classpath&gt;</code> and <code>&lt;sourcespath&gt;</code>,
-that represent <a href="../using.html#path">PATH like structures</a>.</p>
-
-<p><code>&lt;sourcespath&gt;</code> is used to define the paths of the source code to analyze.</p>
-
-<h3>Examples</h3>
-
-<blockquote>
-<pre>
-&lt;jdepend classpathref="base.path">
-&nbsp;&nbsp;&nbsp; &lt;sourcespath>
-&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;pathelement location="src" />
-&nbsp;&nbsp;&nbsp; &lt;/sourcespath>
-&lt;/jdepend>
-</pre>
-</blockquote>
-
-This invokes JDepend on the <code>src</code> directory, writing the output on the standard output.
-The classpath is defined using a classpath reference.
-
-<blockquote>
-<pre>
-&lt;jdepend outputfile="docs/jdepend.xml" fork="yes" format="xml">
-&nbsp;&nbsp;&nbsp; &lt;sourcespath>
-&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;pathelement location="src" />
-&nbsp;&nbsp;&nbsp; &lt;/sourcespath>
-&nbsp;&nbsp;&nbsp; &lt;classpath>
-&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;pathelement location="classes" />
-&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;pathelement location="lib/jdepend.jar" />
-&nbsp;&nbsp;&nbsp; &lt;/classpath>
-&lt;/jdepend>
-</pre>
-</blockquote>
-
-This invokes JDepend in a separate VM on the <code>src</code> and <code>testsrc</code> directories, writing the output to the <code>&lt;docs/jdepend.xml&gt;</code> file in xml format.
-The classpath is defined using nested elements.
-
-<hr>
-<p align="center">Copyright &copy; 2001-2002 Apache Software Foundation. All rights
-Reserved.</p>
-</body>
-</html>
-
-
-
diff --git a/docs/manual/OptionalTasks/jjtree.html b/docs/manual/OptionalTasks/jjtree.html
deleted file mode 100644
index a922db0..0000000
--- a/docs/manual/OptionalTasks/jjtree.html
+++ /dev/null
@@ -1,180 +0,0 @@
-<!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 http-equiv="Content-Language" content="en-us">
-   <title>JJTree Task</title>
-</head>
-<body>
-
-<h2>
-<a NAME="jjtree"></a>JJTree</h2>
-
-<h3>
-Description</h3>
-Invokes the <a href="http://www.webgain.com/products/java_cc/">JJTree</a> preprocessor
-for the JavaCC compiler compiler. It inserts parse tree building actions
-at various places in the JavaCC source that it generates. The output of
-JJTree is run through JavaCC to create the parser.
-<p>To use the jjtree task, set the <i>target</i> attribute to the name
-of the jjtree grammar file to process. You also need to specify the directory
-containing the JavaCC installation using the <i>javacchome</i> attribute,
-so that ant can find the JavaCC classes. Optionally, you can also set the
-<i>outputdirectory</i>
-to write the generated file to a specific directory. Otherwise jjtree writes
-the generated JavaCC grammar file to the directory containing the JJTree
-grammar file.</p>
-<p>This task only invokes JJTree if the grammar file is newer than the
-generated JavaCC file.</p>
-
-<h3>Parameters</h3>
-
-<table BORDER CELLSPACING=0 CELLPADDING=2 >
-<tr>
-<td VALIGN=TOP><b>Attribute</b></td>
-
-<td VALIGN=TOP><b>Description</b></td>
-
-<td ALIGN=CENTER VALIGN=TOP><b>Required</b></td>
-</tr>
-
-<tr>
-<td VALIGN=TOP>target</td>
-
-<td VALIGN=TOP>The jjtree grammar file to process.</td>
-
-<td ALIGN=CENTER VALIGN=TOP>Yes</td>
-</tr>
-
-<tr>
-<td VALIGN=TOP>javacchome</td>
-
-<td VALIGN=TOP>The directory containing the JavaCC distribution.</td>
-
-<td ALIGN=CENTER VALIGN=TOP>Yes</td>
-</tr>
-
-<tr>
-<td VALIGN=TOP>outputdirectory</td>
-
-<td VALIGN=TOP>The directory to write the generated file to. If not set,
-the files are written to the directory containing the grammar file.&nbsp;</td>
-
-<td ALIGN=CENTER VALIGN=TOP>No</td>
-</tr>
-
-<tr>
-<td VALIGN=TOP>buildnodefiles</td>
-
-<td VALIGN=TOP>Sets the BUILD_NODE_FILES grammar option. This is a boolean
-option.</td>
-
-<td ALIGN=CENTER VALIGN=TOP>No</td>
-</tr>
-
-<tr>
-<td VALIGN=TOP>multi</td>
-
-<td VALIGN=TOP>Sets the MULTI grammar option. This is a boolean option.</td>
-
-<td ALIGN=CENTER VALIGN=TOP>No</td>
-</tr>
-
-<tr>
-<td VALIGN=TOP>nodedefaultvoid</td>
-
-<td VALIGN=TOP>Sets the NODE_DEFAULT_VOID grammar option. This is a boolean
-option.</td>
-
-<td ALIGN=CENTER VALIGN=TOP>No</td>
-</tr>
-
-<tr>
-<td VALIGN=TOP>nodefactory</td>
-
-<td VALIGN=TOP>Sets the NODE_FACTORY grammar option. This is boolean option.</td>
-
-<td ALIGN=CENTER VALIGN=TOP>No</td>
-</tr>
-
-<tr>
-<td VALIGN=TOP>nodescopehook</td>
-
-<td VALIGN=TOP>Sets the NODE_SCOPE_HOOK grammar option. This is a boolean
-option.</td>
-
-<td ALIGN=CENTER VALIGN=TOP>No</td>
-</tr>
-
-<tr>
-<td VALIGN=TOP>nodeusesparser</td>
-
-<td VALIGN=TOP>Sets the NODE_USES_PARSER grammar option. This is a boolean
-option.</td>
-
-<td ALIGN=CENTER VALIGN=TOP>No</td>
-</tr>
-
-<tr>
-<td VALIGN=TOP>static</td>
-
-<td VALIGN=TOP>Sets the STATIC grammar option. This is a boolean option.</td>
-
-<td ALIGN=CENTER VALIGN=TOP>No</td>
-</tr>
-
-<tr>
-<td VALIGN=TOP>visitor</td>
-
-<td VALIGN=TOP>Sets the VISITOR grammar option. This is a boolean option.</td>
-
-<td ALIGN=CENTER VALIGN=TOP>No</td>
-</tr>
-
-<tr>
-<td VALIGN=TOP>nodepackage</td>
-
-<td VALIGN=TOP>Sets the NODE_PACKAGE grammar option. This is a string option.</td>
-
-<td ALIGN=CENTER VALIGN=TOP>No</td>
-</tr>
-
-<tr>
-<td VALIGN=TOP>visitorexception</td>
-
-<td VALIGN=TOP>Sets the VISITOR_EXCEPTION grammar option. This is a string
-option.</td>
-
-<td ALIGN=CENTER VALIGN=TOP>No</td>
-</tr>
-
-<tr>
-<td VALIGN=TOP>nodeprefix</td>
-
-<td VALIGN=TOP>Sets the NODE_PREFIX grammar option. This is a string option.</td>
-
-<td ALIGN=CENTER VALIGN=TOP>No</td>
-</tr>
-</table>
-
-<h3>
-Example</h3>
-
-<blockquote>
-<pre>&lt;jjtree&nbsp;
-&nbsp;&nbsp;&nbsp; target="src/Parser.jjt"&nbsp;
-&nbsp;&nbsp;&nbsp; outputdirectory="build/src"
-&nbsp;&nbsp;&nbsp; javacchome="c:/program files/JavaCC"&nbsp;
-&nbsp;&nbsp;&nbsp; nodeusesparser="true"
-/></pre>
-</blockquote>
-This invokes JJTree on grammar file src/Parser.jjt, writing the generated
-grammar file, Parser.jj, file to build/src. The grammar option NODE_USES_PARSER
-is set to true when invoking JJTree.
-<br>
-<hr>
-<p align="center">Copyright &copy; 2001 Apache Software Foundation. All rights
-Reserved.</p>
-</body>
-</html>
-
diff --git a/docs/manual/OptionalTasks/jlink.html b/docs/manual/OptionalTasks/jlink.html
deleted file mode 100644
index 3b3bc48..0000000
--- a/docs/manual/OptionalTasks/jlink.html
+++ /dev/null
@@ -1,145 +0,0 @@
-<html>
-<head>
-<title>JLink Task</title>
-</head>
-<body>
-
-<h2><a name="jlink">Jlink</a></h2>
-<h3><i>Deprecated</i></h3>
-<p><i>This task has been deprecated. Use the zipfileset and zipgroupfileset attributes of the <a href="../CoreTasks/jar.html">Jar task</a> or <a href="../CoreTasks/zip.html">Zip task</a> instead.</i></p>
-
-<h3><b>Description:</b></h3>
-<p>Links entries from sub-builds and libraries.</p>
-
-<p>The jlink task can be used to build jar and zip files, similar to 
-the <i>jar</i> task.
-However, jlink provides options for controlling the way entries from 
-input files
-are added to the output file. Specifically, capabilities for merging 
-entries from
-multiple zip or jar files is available.</p>
-
-<p>If a mergefile is specified directly (eg. at the top level of a 
-<i>mergefiles</i>
-pathelement) <i>and</i> the mergefile ends in &quot;.zip&quot; or 
-&quot;.jar&quot;,
-entries in the mergefile will be merged into the outfile. A file with 
-any other extension
-will be added to the output file, even if it is specified in the 
-mergefiles element.
-Directories specified in either the mergefiles or addfiles element 
-are added to the
-output file as you would expect: all files in subdirectories are 
-recursively added to
-the output file with appropriate prefixes in the output file 
-(without merging).
-</p>
-
-<p>
-In the case where duplicate entries and/or files are found among the 
-files to be merged or
-added, jlink merges or adds the first entry and ignores all subsequent entries.
-</p>
-
-<p>
-jlink ignores META-INF directories in mergefiles. Users should supply their
-own manifest information for the output file.
-</p>
-
-<p>It is possible to refine the set of files that are being jlinked. 
-This can be
-done with the <i>includes</i>, <i>includesfile</i>, <i>excludes</i>, 
-<i>excludesfile</i>,
-and <i>defaultexcludes</i> attributes on the <i>addfiles</i> and 
-<i>mergefiles</i>
-nested elements. With the <i>includes</i> or <i>includesfile</i>
-attribute you specify the files you want to have included by using patterns.
-The <i>exclude</i> or <i>excludesfile</i> attribute is used to specify
-the files you want to have excluded. This is also done with patterns. And
-finally with the <i>defaultexcludes</i> attribute, you can specify whether you
-want to use default exclusions or not. See the section on <a
-href="../dirtasks.html#directorybasedtasks">directory based tasks</a>, on how the
-inclusion/exclusion of files works, and how to write patterns. The patterns are
-relative to the <i>base</i> directory.</p>
-
-
-
-<h3>Parameters:</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-   <tr>
-     <td valign="top"><b>Attribute</b></td>
-     <td valign="top"><b>Description</b></td>
-     <td align="center" valign="top"><b>Required</b></td>
-   </tr>
-   <tr>
-     <td valign="top">outfile</td>
-     <td valign="top">the path of the output file.</td>
-     <td valign="top" align="center">Yes</td>
-   </tr>
-   <tr>
-     <td valign="top">compress</td>
-     <td valign="top">whether or not the output should be compressed. 
-<i>true</i>,
-                      <i>yes</i>, or <i>on</i> result in compressed output.
-                      If omitted, output will be uncompressed (inflated).</td>
-     <td valign="top" align="center">No</td>
-   </tr>
-   <tr>
-     <td valign="top">mergefiles</td>
-     <td valign="top">files to be merged into the output, if possible.</td>
-     <td valign="middle" align="center" rowspan="2">At least one of 
-mergefiles or addfiles</td>
-   </tr>
-   <tr>
-     <td valign="top">addfiles</td>
-     <td valign="top">files to be added to the output.</td>
-   </tr>
-</table>
-
-<h3>Examples</h3>
-
-The following will merge the entries in mergefoo.jar and mergebar.jar 
-into out.jar.
-mac.jar and pc.jar will be added as single entries to out.jar.
-<pre>
-&lt;jlink compress=&quot;false&quot; outfile=&quot;out.jar&quot;&gt;
-   &lt;mergefiles&gt;
-     &lt;pathelement path=&quot;${build.dir}/mergefoo.jar&quot;/&gt;
-     &lt;pathelement path=&quot;${build.dir}/mergebar.jar&quot;/&gt;
-   &lt;/mergefiles&gt;
-   &lt;addfiles&gt;
-     &lt;pathelement path=&quot;${build.dir}/mac.jar&quot;/&gt;
-     &lt;pathelement path=&quot;${build.dir}/pc.zip&quot;/&gt;
-   &lt;/addfiles&gt;
-&lt;/jlink&gt;
-</pre>
-
-Suppose the file foo.jar contains two entries: bar.class and 
-barnone/myClass.zip.
-Suppose the path for file foo.jar is build/tempbuild/foo.jar. The 
-following example
-will provide the entry tempbuild/foo.jar in the out.jar.
-<pre>
-&lt;jlink compress=&quot;false&quot; outfile=&quot;out.jar&quot;&gt;
-   &lt;mergefiles&gt;
-     &lt;pathelement path=&quot;build/tempbuild&quot;/&gt;
-   &lt;/mergefiles&gt;
-&lt;/jlink&gt;
-</pre>
-
-However, the next example would result in two top-level entries in out.jar,
-namely bar.class and barnone/myClass.zip
-<pre>
-&lt;jlink compress=&quot;false&quot; outfile=&quot;out.jar&quot;&gt;
-   &lt;mergefiles&gt;
-     &lt;pathelement path=&quot;build/tempbuild/foo.jar&quot;/&gt;
-   &lt;/mergefiles&gt;
-&lt;/jlink&gt;
-</pre>
-
-<hr>
-<p align="center">Copyright &copy; 2001-2002 Apache Software Foundation. All rights
-Reserved.</p>
-</body>
-
-</html>
diff --git a/docs/manual/OptionalTasks/jpcoverage.html b/docs/manual/OptionalTasks/jpcoverage.html
deleted file mode 100644
index d1def89..0000000
--- a/docs/manual/OptionalTasks/jpcoverage.html
+++ /dev/null
@@ -1,541 +0,0 @@
-<html>
-<head>
-<title>JProbe Tasks</title>
-</head>
-<body>
-
-<h1><a name="jprobe">JProbe</a></h1>
-<p>by</p>
-<ul>
-    <li>Stephane Bailliez (<a href="mailto:sbailliez@imediation.com">sbailliez@imediation.com</a>)</li>
-</ul>
-<h2>Introduction</h2>
-
-<p>This task runs the tools from the JProbe suite.<br>
-For more information, visit <a href="http://www.sitraka.com">http://www.sitraka.com</a>.
-An evaluation version is available for download if you already don't own it.
-</p>
-
-<p>This task has been written using JProbe Suite Server Side 3.0.</p>
-
-<p>It is highly recommended to read the JProbe documentation to understand
-the values of the command line arguments described below. This
-document is less complete than the manual, it only gives the basic information
-and is not intended as a replacement to the manual.
-</p>
-
-<h2>Tasks</h2>
-<table border="0" cellspacing="0" cellpadding="3">
-    <tr>
-        <td><a href="#jpcoverage">JPCoverage</a></td>
-        <td>Measure coverage of Java code.</td>
-    </tr>
-    <tr>
-        <td><a href="#jpcovmerge">JPCovMerge</a></td>
-        <td>Merge different snapshots into one.</td>
-    </tr>
-    <tr>
-        <td><a href="#jpcovreport">JPCovReport</a></td>
-        <td>Create a report from a snapshot</td>
-    </tr>
-</table>
-
-<hr>
-
-<h2><a name="jpcoverage">JPCoverage</a></h2>
-Perform code covering functions by comparing source code line execution to the programÂ’s source code as a whole.
-
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-<tr>
-  <td width="12%" valign="top"><b>Attribute</b></td>
-  <td width="78%" valign="top"><b>Description</b></td>
-  <td width="10%" valign="top"><b>Required</b></td>
-</tr>
-  <tr>
-    <td valign="top">home</td> 
-    <td valign="top">The directory where is intalled JProbe.</td>
-    <td align="center" valign="top">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">vm</td> 
-    <td valign="top">
-	Indicates which virtual machine to run.
-	Must be one of "jdk117", "jdk118" or "java2".If "java2" is specified, the user is
-	also required to specify a path via <tt>javahome</tt>, otherwise it will check if
-	the current executing VM is 1.2+ and use its java.home property to determine its
-	location.
-	in the registry for the default 1.2.x (Java 2) VM.</td>
-    <td align="center" valign="top">No, default to embedded VM if 1.2+</td>
-  </tr>
-  <tr>
-    <td valign="top">javahome</td> 
-    <td valign="top">For Java 2 only, specifies the path of the jdk1.2.x virtual
-	machine to be used. This is only valid when specifying the <tt>vm="java2"</tt>.</td>
-    <td align="center" valign="top">No, use only for java2</td>
-  </tr>
-  <tr>
-    <td valign="top">javaexe</td> 
-    <td valign="top">Similar to <tt>javahome</tt>, except this is the path to
-	the java executable.</td>
-    <td align="center" valign="top">No, use only for java2</td>
-  </tr>
-  
-  <tr>
-    <td valign="top">applet</td> 
-    <td valign="top">Run an applet. The default is false, unless the file under
-	analysis ends with htm or html.</td>
-    <td align="center" valign="top">No, default is "false".</td>
-  </tr>
-  <tr>
-    <td valign="top">seedname</td>
-    <td valign="top">Seed name for the temporary snapshot files (files will be named
-	seed.jpc, seed1.jpc, seed2.jpc, ...)</td>
-    <td align="center" valign="top">No, default to &quot;snapshot&quot;</td>
-  </tr>
-  
-  <tr>
-    <td valign="top">exitprompt</td> 
-    <td valign="top">Toggles display of the console prompt: &quot;Press Enter to close
-	this window.&quot; &quot;always&quot;: Always displays the prompt. &quot;never&quot;: Never displays the
-	prompt. &quot;error&quot;: Only displays prompt after an error.</td>
-    <td align="center" valign="top">No, default is "never"</td>
-  </tr>
-  
-  <tr>
-    <td valign="top">finalsnapshot</td> 
-    <td valign="top">Type of snapshot to send at program termination. Must be one
-	of &quot;none&quot;,&quot;coverage&quot;,&quot;all&quot;</td> 
-    <td align="center" valign="top">No, default to &quot;coverage&quot;</td>
-  </tr>
-  <tr>
-    <td valign="top">recordfromstart</td>
-    <td valign="top">Must be one of "coverage", "all", "none". If you want
-	Coverage to start analyzing as soon as the program begins to run, use "all".
-	If not, select "none".</td>
-    <td align="center" valign="top">No, default to "coverage"</td>
-  </tr>
-  <tr>
-    <td valign="top">warnlevel</td>
-    <td valign="top">Set warning level (0-3, where 0 is the least amount of warnings).</td>
-    <td align="center" valign="top">No, default to 0</td>
-  </tr>
-  <tr>
-    <td valign="top">snapshotdir</td>
-    <td valign="top">The path to the directory where snapshot files are stored.
-	Choose a directory that is reachable by both the remote and local computers,
-	and enter the same path on the command line and in the viewer.</td>
-    <td align="center" valign="top">No, default to current directory</td>
-  </tr>
-  <tr>
-    <td valign="top">workingdir</td>
-    <td valign="top">The physical path to the working directory for the VM.</td>
-    <td align="center" valign="top">No, default is current directory.</td>
-  </tr> 
-  <tr>
-    <td valign="top">tracknatives</td>
-    <td valign="top">Test native methods. Note that testing native methods with
-	Java 2 disables the JIT</td>
-    <td align="center" valign="top">No, default to &quot;false&quot;.</td>
-  </tr> 
-  <tr>
-    <td valign="top">classname</td>
-    <td valign="top">the name of the class to analyze.</td>
-    <td align="center" valign="top">Yes</td>
-  </tr>
-</table>
-
-<h3><a name="nested">Nested Elements</a></h3>
-
-<h4>classpath</h4>
-<p><code>jpcoverage</code> supports a nested <code>&lt;classpath&gt;</code>
-element, that represents a <a href="../using.html#path">PATH like
-structure</a>.</p>
-
-<h4>jvmarg</h4>
-
-<p>Additional parameters may be passed to the VM via nested <code>&lt;jvmarg&gt;</code>
-attributes, for example:</p>
-
-<pre></pre>
-<blockquote>
-<pre>&lt;jpcoverage home=&quot;c:\jprobe&quot; classname=&quot;MyClass&quot;&gt;
-  &lt;jvmarg value=&quot;-classic&quot;/&gt;
-  &lt;classpath path=&quot;.&quot;/&gt;
-&lt;/jpcoverage&gt;
-</pre>
-</blockquote>
-would run the coverage on &quot;MyClass&quot; in classic mode VM.
-
-<p><code>&lt;jvmarg&gt;</code> allows all attributes described in <a
-href="../using.html#arg">Command line arguments</a>.</p>
-
-<h4>arg</h4>
-
-<p>
-Parameters may be passed to the executed class via nested <tt>&lt;arg&gt;</tt>
-attributes, as described in <a href="../using.html#arg">Command line arguments</a>.
-</p>
-
-<h4>socket</h4>
-<p>Define a host and port to connect to if you want to do remote viewing. 
-</p>
-<table border="1" cellpadding="2" cellspacing="0">
-<tr>
-  <td width="12%" valign="top"><b>Attribute</b></td>
-  <td width="78%" valign="top"><b>Description</b></td>
-  <td width="10%" valign="top"><b>Required</b></td>
-</tr>
-  <tr>
-    <td valign="top">host</td> 
-    <td valign="top">the host name/ip of the machine on which the Viewer is running</td>
-    <td align="center">No, default to localhost</td>
-  </tr>
-  <tr>
-    <td valign="top">port</td> 
-    <td valign="top">The port number on which you will connect to the Viewer</td>
-    <td align="center">No, default to 4444</td>
-  </tr>  
-</table>
-
-
-
-<h4>filters</h4>
-
-<p>Defines class/method filters based on pattern matching.
-The syntax is filters is similar to a <a href="../CoreTypes/fileset.html">fileset</a>.
-</p>
-
-<table border="1" cellpadding="2" cellspacing="0">
-<tr>
-  <td width="12%" valign="top"><b>Attribute</b></td>
-  <td width="78%" valign="top"><b>Description</b></td>
-  <td width="10%" valign="top"><b>Required</b></td>
-</tr>
-  <tr>
-    <td valign="top">defaultexclude</td> 
-    <td valign="top">As a default, the coverage exclude all classes and methods.
-     Default filters are equivalent to
-<pre>
-  &lt;filters&gt;
-    &lt;exclude class=&quot;*&quot; method=&quot;*&quot;/&gt;
-  &lt;/filters&gt;
-</pre>	
-	</td>
-    <td align="center">No, default to "true"</td>
-  </tr>
-</table>
-<p>
-As seen above, nested elements are <b><tt>include</tt></b> and <b><tt>exclude</tt></b>
-with a <tt>name</tt> attribute.
-</p>
-<blockquote>
-<table border="1" cellpadding="2" cellspacing="0">
-<tr>
-  <td width="12%" valign="top"><b>Attribute</b></td>
-  <td width="78%" valign="top"><b>Description</b></td>
-  <td width="10%" valign="top"><b>Required</b></td>
-</tr>
-  <tr>
-    <td valign="top">class</td> 
-    <td valign="top">The class mask as a simple regular expression</td>
-    <td align="center">No, default to *</td>
-  </tr>
-  <tr>
-    <td valign="top">method</td> 
-    <td valign="top">The method mask as a simple regular expression</td>
-    <td align="center">No, default to *</td>
-  </tr>
-</table>
-</blockquote>
-
-<h3>Example of filters</h3>
-<blockquote>
-  <pre>&lt;filters&gt;
-    &lt;include class=&quot;com.mycompany.*&quot; method=&quot;*&quot;/&gt;
-    &lt;exclude class=&quot;com.mycompany.MyClass&quot; method=&quot;test*&quot;/&gt;
-&lt;/filters&gt;</pre>
-</blockquote>
-
-reports the coverage on all packages, classes and methods from <tt>com.mycompany</tt>
-except all methods starting by <tt>test</tt> on the class <tt>MyClass</tt>
-in the package <tt>com.mycompany</tt>
-
-<h4>triggers</h4>
-
-<p>Define a number of events to use for interacting with the collection
-of data performed during coverage. For example you may run a whole application
-but only decide to collect data once it reaches a certain method and once it
-exits another one.</p>
-<p>
-The only type of nested element is the <tt>method</tt> element (triggers are performed
-on method) and it has the following attributes:
-</p>
-<table border="1" cellpadding="2" cellspacing="0">
-<tr>
-  <td width="12%" valign="top"><b>Attribute</b></td>
-  <td width="78%" valign="top"><b>Description</b></td>
-  <td width="10%" valign="top"><b>Required</b></td>
-</tr>
-  <tr>
-    <td valign="top">name</td> 
-    <td valign="top">The name of the method(s) as a regular expression. The name
-	is the fully qualified name on the form <tt>package.classname.method</tt></td>
-    <td align="center" valign="top">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">event</td> 
-    <td valign="top">the event on the method that will trigger the action. Must be
-	&quot;enter&quot; or &quot;exit&quot;.</td>
-    <td align="center" valign="top">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">action</td> 
-    <td valign="top">the action to execute. Must be one of &quot;clear&quot;,
-	&quot;pause&quot;, &quot;resume&quot;, &quot;snapshot&quot;, &quot;suspend&quot;,
-	or &quot;exit&quot;. They respectively clear recording, pause recording, 
-	resume recording, take a snapshot, suspend the recording and exit the program.
-</td>
-    <td align="center" valign="top">Yes</td>
-  </tr>
-</table>
-
-<h3>Example of triggers</h3>
-<blockquote>
-<pre>&lt;triggers&gt;
-  &lt;method name=&quot;ClassName.*()&quot; event=&quot;enter&quot; action=&quot;snapshot&quot;/&gt;
-  &lt;method name=&quot;ClassName.MethodName()&quot; event=&quot;exit&quot; action=&quot;exit&quot;/&gt;  
-&lt;/triggers&gt;
-</pre>
-</blockquote>
-
-<p>Will take a snapshot when it enters any method of the class <tt>ClassName</tt>
-and will exit the program once it exits the method <tt>MethodName</tt> of the
-same class.</p>
-
-<hr>
-<h2><a name="jpcovmerge">JPCovMerge</a></h2>
-
-<h3>Description</h3>
-
-<p>Perform the merge of several snapshots into a single one.</p>
-
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-<tr>
-	<td width="12%" valign="top"><b>Attribute</b></td>
-	<td width="78%" valign="top"><b>Description</b></td>
-	<td width="10%" valign="top"><b>Required</b></td>
-</tr>
-<tr>
-	<td valign="top">home</td>
-    <td valign="top">The directory where is installed JProbe.</td>
-    <td align="center" valign="top">Yes</td>
-</tr>
-<tr>
-	<td valign="top">tofile</td>
-	<td valign="top">the output filename that will be the result
-	of the name.</td>
-	<td align="center" valign="top">Yes</td>
-</tr>
-<tr>
-	<td valign="top">verbose</td>
-	<td valign="top">Perform the merge in verbose mode giving
-	details about the snapshot processing.</td>
-	<td align="center" valign="top">No. Default to false</td>
-</tr>
-</table>
-
-<p>
-<tt>jpcovmerge</tt> collects snapshots using the nested <a href="../CoreTypes/fileset.html"><code>&lt;FileSet&gt;</code></a>
-element.
-</p>
-
-<h3>Example of merge</h3>
-<blockquote>
-<pre>&lt;jpcovmerge home=&quot;c:\jprobe&quot; tofile=&quot;merge.jpc&quot; verbose=&quot;true&quot;&gt;
-  &lt;fileset dir=&quot;./snapshots&quot;&gt;
-    &lt;include name=&quot;snap*.jpc&quot;/&gt;
-  &lt;/fileset&gt;
-&lt;/jpcovmerge&gt;
-</pre>
-</blockquote>
-<p>
-would run the merge in verbose mode on all snapshot files starting by <tt>snap</tt> in the
-directory <tt>snapshots</tt>. The resulting file will be named <tt>merge.jpc</tt>.
-</p>
-
-<hr>
-
-<h2><a name="jpcovreport">JPCovReport</a></h2>
-
-<h3>Description</h3>
-
-<p>Generate a readable/printable report of a snapshot. Note that you will need <a href="http://jakarta.apache.org/oro/index.html">Jakarta
-Oro</a> in Ant classpath, to run the <tt>reference</tt> feature.</p>
-
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-<tr>
-	<td width="12%" valign="top"><b>Attribute</b></td>
-	<td width="78%" valign="top"><b>Description</b></td>
-	<td width="10%" valign="top"><b>Required</b></td>
-</tr>
-<tr>
-	<td valign="top">home</td>
-    <td valign="top">The directory where is intalled JProbe.</td>
-    <td align="center" valign="top">Yes</td>
-</tr>
-<tr>
-	<td valign="top">format</td>
-	<td valign="top">The format of the generated report. Must be &quot;xml&quot;, &quot;html&quot; or &quot;text&quot;</td>
-	<td align="center" valign="top">No, default to &quot;html&quot;</td>
-</tr>
-<tr>
-	<td valign="top">type</td>
-	<td valign="top">The type of report to be generated. Must be &quot;executive&quot;,
-	&quot;summary&quot;, &quot;detailed&quot; or &quot;verydetailed&quot;</td>
-	<td align="center" valign="top">No. Default to &quot;detailed&quot;</td>
-</tr>
-<tr>
-	<td valign="top">percent</td>
-	<td valign="top">A numeric value for the threshold for printing methods. Must
-	be between 0 and 100.</td>
-	<td align="center" valign="top">No, default to 100</td>
-</tr>
-<tr>
-	<td valign="top">snapshot</td>
-	<td valign="top">The name of the snapshot file that is the source to the report.</td>
-	<td align="center" valign="top">Yes</td>
-</tr>
-<tr>
-	<td valign="top">tofile</td>
-	<td valign="top">The name of the generated output file</td>
-	<td align="center" valign="top">Yes</td>
-</tr>
-<tr>
-	<td valign="top">includesource</td>
-	<td valign="top">Include text of the source code lines. Only applies to
-      format=&quot;xml&quot; and type=&quot;verydetailed&quot;</td>
-	<td align="center" valign="top">No. Defaults to &quot;yes&quot;</td>
-</tr>
-</table>
-
-<h4>sourcepath</h4>
-
-<p>
-Path to source files can be set via nested sourcepath elements that are <a href="../using.html#path">PATH like structures</a>.
-</p>
-
-<h4>reference (only applies to format=&quot;xml&quot;)</h4>
-
-<p>A reference is a set of classes whose coverage information will be checked
-against. Since Coverage is only able to give you information about loaded
-classes, it will only report classes that were at least used in some points in
-your tests,
-therefore you will not be able to know what classes are not exercised at all
-during your tests. The reference is an additional feature that will analyze the
-bytecode of all classes in a given classpath that match some filters and modify
-the XML report accordingly. In short, it will:
-</p>
-
-<ul>
-  <li>remove the classes that do not exists in the reference classpath. (For
-    example you might have in your report some helper test classes that you do
-    not want to appear in the report, but are unable to filter without adding
-    hundred of filters for all your classes).</li>
-  <li>add classes that exists in the reference set and match the filters but are
-    not reported.</li>
-  <li>remove abstract methods that are incorrectly reported in JProbe 3.0
-    (should be fixed in a later SP)</li>
-  <li>remove classes/methods that do not match the filters.</li>
-</ul>
-<blockquote>
-  <h4>classpath
-</h4>
-
-  <p>
-Path to the reference set of files can be set via nested classpath elements that are <a href="../using.html#path">PATH like structures</a>.
-</p>
-
-  <h4>filters
-</h4>
-
-  <p>Nested elements are <b><tt>include</tt></b> and <b><tt>exclude</tt></b>
-with a <tt>class </tt>and&nbsp; <tt>method </tt>attribute.
-</p>
-</blockquote>
-<blockquote>
-<table border="1" cellpadding="2" cellspacing="0">
-<tr>
-  <td width="12%" valign="top"><b>Attribute</b></td>
-  <td width="78%" valign="top"><b>Description</b></td>
-  <td width="10%" valign="top"><b>Required</b></td>
-</tr>
-  <tr>
-    <td valign="top">class</td> 
-    <td valign="top">The class mask as a simple regular expression</td>
-    <td align="center">No, default to *</td>
-  </tr>
-  <tr>
-    <td valign="top">method</td> 
-    <td valign="top">The method mask as a simple regular expression</td>
-    <td align="center">No, default to *</td>
-  </tr>
-</table>
-</blockquote>
-
-<h3>Example of report</h3>
-<blockquote>
-<pre>&lt;jpcovreport home=&quot;c:\jprobe&quot; snapshot=&quot;merge.jpc&quot; format=&quot;xml&quot; tofile=&quot;result.xml&quot;&gt;
-  &lt;sourcepath path=&quot;./src&quot;/&gt;
-  &lt;reference&gt;
-    &lt;classpath path=&quot;./bin/classes&quot;/&gt;
-    &lt;filters&gt;
-      &lt;include class=&quot;com.mycompany.*&quot;/&gt;
-      &lt;exclude class=&quot;com.mycompany.MyClass&quot; method=&quot;test*&quot;/&gt;
-    &lt;/filters&gt;
-  &lt;/reference&gt;
-&lt;/jpcovreport&gt;
-</pre>
-</blockquote><p>
-would generate the report of the file <tt>merge.jpc</tt> and write it to <tt>result.xml</tt>
-using the source path <tt>src</tt>. As well, it will modify the result.xml by
-analyzing all classes in the <tt>./bin/classes</tt> that are port of the package
-<tt>com.mycompany</tt> except the method that start by <tt>test</tt> from the class <tt>MyClass</tt>.
-</p>
-
-<h3>Recommendation</h3>
-
-<p>If you generate your main code and your testcases in a separate directory,
-say bin/classes and test/classes. You should mostly end up with a reference such
-as:</p>
-<blockquote>
-<pre>&lt;reference&gt;
-&nbsp;&nbsp;&nbsp; &lt;classpath path=&quot;./bin/classes&quot;/&gt;
-&lt;/reference&gt;</pre>
-</blockquote>
-<p>With such a reference, your XML report will be cleaned up against parasite
-classes from your testcases (that as a common practice, generally match the
-exact package structure of the class you exercise).</p>
-<h3>HTML reports</h3>
-<p>You will find in Ant etc directory a stylesheet called coverage-frames.xsl.
-This file can be used to generate a framed report a la javadoc similar to the
-one for JUnit. It needs either Xalan 1.2.2 or Xalan 2.x.</p>
-<p>Xalan 1.2.2 (you must have xalan.jar and bsf.jar in your classpath)
-</p>
-<pre>&lt;style processor=&quot;xalan&quot; in=&quot;./reports/xml/results.xml&quot; out=&quot;./reports/html/dummy.file&quot;
- style=&quot;${ant.home}/etc/coverage-frames.xsl&quot;&gt;
-	&lt;param name=&quot;output.dir&quot; expression=&quot;'${basedir}/reports/html'&quot;/&gt;
-&lt;/style&gt;</pre>
-<p>Xalan 2.x (note the parameter without single quote)</p>
-<pre>&lt;style processor=&quot;trax&quot; in=&quot;./reports/xml/results.xml&quot; out=&quot;./reports/html/dummy.file&quot;
- style=&quot;${ant.home}/etc/coverage-frames.xsl&quot;&gt;
-&nbsp; &lt;param name=&quot;output.dir&quot; expression=&quot;${basedir}/reports/html&quot;/&gt;
-&lt;/style&gt;</pre>
-
-<hr>
-<p align="center">Copyright &copy; 2001 Apache Software Foundation. All rights
-Reserved.</p>
-</body>
-</html>
diff --git a/docs/manual/OptionalTasks/jspc.html b/docs/manual/OptionalTasks/jspc.html
deleted file mode 100644
index 83de862..0000000
--- a/docs/manual/OptionalTasks/jspc.html
+++ /dev/null
@@ -1,211 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>JSPC Task</title>
-</head>
-
-<body>
-
-<h2><a name="jspc">jspc</a></h2>
-<h3>Description</h3>
-
-<p> Ant task to run the JSP compiler and turn JSP pages into Java source.
-<p>
-
-It can be used to precompile JSP pages for fast initial invocation
-of JSP pages, deployment on a server without the full JDK installed, 
-or simply to syntax check the pages without deploying them. 
-In most cases, a javac task is usually the next stage in the build process.
-The task does basic dependency checking to prevent unnecessary recompilation -this
-checking compares source and destination timestamps, and does not factor
-in class or taglib dependencies.  
-
-<p>
-
-The task needs jasper.jar and jasper-runtime.jar, which come with 
-builds of Tomcat 4/Catalina from the 
-<a href="http://jakarta.apache.org/tomcat/">Jakarta Tomcat project</a>
-
-
-<h3>Parameters</h3>
-The Task has the following attributes:<p>
-
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">destdir</td>
-    <td valign="top">Where to place the generated files. They are located
-    under here according to the given package name.</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">srcdir</td>
-    <td valign="top">Where to look for source jsp files.</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">verbose</td>
-    <td valign="top">The verbosity integer to pass to the compiler. Default="0"</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">package</td>
-    <td valign="top">Name of the destination package for generated java
-    classes.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">ieplugin</td>
-    <td valign="top">Java Plugin classid for Internet Explorer.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">mapped</td>
-    <td valign="top">(boolean) Generate separate write() calls for each HTML
-    line in the JSP.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">classpath</td>
-    <td valign="top">The classpath to use to run the jsp compiler.
-    This can also be specified
-    by the nested element <code>classpath</code> 
-    <a href="../using.html#path">Path</a>).</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">classpathref</td>
-    <td valign="top">A <a href="../using.html#references">Reference</a>. As
-    per <code>classpath</code></td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">failonerror</td>
-    <td valign="top">flag to control action on compile failures: default=yes</td>
-    <td valign="top" align="center">No</td>
-  </tr>  
-  <tr>
-    <td valign="top">uribase</td>
-    <td valign="top">
-    The uri context of relative URI 
-    references in the JSP pages. If it does not 
-    exist then it is derived from the location of the file
-    relative to the declared or derived value of <tt>uriroot.</tt> 
-    </td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">uriroot</td>
-    <td valign="top">
-    The root directory that uri files should be resolved
-    against.  
-    </td>
-    <td valign="top" align="center">No</td>
-  </tr>  
-  </table>
-  
-<P>The <tt>mapped</tt> option will, if set to true, split the JSP text content into a
-one line per call format.  There are comments above and below the mapped
-write calls to localize where in the JSP file each line of text comes
-from.  This can lead to a minor performance degradation (but it is bound 
-by a linear complexity).  Without this options all adjacent writes are
-concatenated into a single write.</P>
-
-<P>The <tt>ieplugin</tt> option is used by the <tt>&lt;jsp:plugin&gt;</tt> tags.
-If the Java Plug-in COM Class-ID you want to use changes then it can be
-specified here.  This should not need to be altered.</P>
-
-<P><tt>uriroot</tt> specifies the root of the web 
-application.  This is where all absolute uris will be resolved from.  
-If it is not specified then the first JSP page will be used to derive 
-it.  To derive it each parent directory of the first JSP page is 
-searched for a <tt>WEB-INF</tt> directory, and the directory closest to 
-the JSP page that has one will be used.  If none can be found then the 
-directory Jasperc was called from will be used.  This only affects pages 
-translated from an explicitly declared JSP file -including references
-to taglibs</P>
-
-<P><tt>uribase</tt> is used to establish the uri context of
-relative URI references in the JSP pages.  If it does not exist then it
-is derived from the location of the file relative to the declared or 
-derived value of <tt>uriroot</tt>. This only affects pages 
-translated from an explicitly declared JSP file.</P>
-
-<h3>Parameters specified as nested elements</h3>
-
-This task is a <a href="../dirtasks.html">directory based task</a>, like
-<strong>javac</strong>, so the jsp files to be compiled are located as java
-files are by <strong>javac</strong>. That is, elements such as <tt>includes</tt> and 
-<tt>excludes</tt> can be used directly inside the task declaration. 
-
-<p>
-
-Elements specific to the jspc task are:- 
-
-<h4>classpath</h4>
-
-The classpath used to compile the JSP pages, specified as for any other
-classpath. 
-
-<h4>classpathref</h4>
-a reference to an existing classpath
-
-<h3>Example</h3>
-<pre>
-&lt;jspc srcdir="${basedir}/src/war"
-      destdir="${basedir}/gensrc"
-      package="com.i3sp.jsp"
-      verbose="9"&gt;
-  &lt;include name="**/*.jsp" /&gt;
-&lt;/jspc&gt;
-</pre>
-Build all jsp pages under src/war into the destination /gensrc, in a 
-package heirarchy beginning with com.i3sp.jsp.
-<pre>
-
-&lt;jspc 
-      destdir="interim"
-      verbose="1"&gt;
-      srcdir="src"
-      package="com.i3sp.jsp"
-  &lt;include name="**/*.jsp" /&gt;
-&lt;/jspc&gt;
-&lt;depends 
-         srcdir="interim"
-         destdir="build"
-         cache="build/dependencies"
-         classpath="lib/taglibs.jar"/&gt;
-&lt;javac
-         srcdir="interim"
-         destdir="build"
-         classpath="lib/taglibs.jar"
-         debug="on" /&gt;
-</pre>
-Generate jsp pages then javac them down to
-bytecodes. Include lib/taglib jar in the java compilation.
- Dependency checking is used to scrub the 
-java files if class dependencies indicate it is needed. 
-
-<p><h4>Notes</h4>
-<p> At present, this task only supports the jasper compiler. In future,
-other compilers will be supported by setting the <tt>jsp.compiler</tt> property.
-<p> The jasper compiler option <code>-webapp</code> is not supported. Using
-the <code>package</code> attribute it is possible to identify the resulting
-java files and thus do full dependency checking - this task only rebuilds
-java files if their jsp file has been modified.
-<p>
-Jasper generates JSP pages against the JSP1.3 specification -an implementation of
-version 2.2 of the servlet specification is needed to compile or run the java code.
-
-<hr>
-<p align="center">Copyright &copy; 2001 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/OptionalTasks/junit.html b/docs/manual/OptionalTasks/junit.html
deleted file mode 100644
index d37a724..0000000
--- a/docs/manual/OptionalTasks/junit.html
+++ /dev/null
@@ -1,485 +0,0 @@
-<html>
-<head>
-<title>JUnit Task</title>
-</head>
-<body>
-
-<h2><a name="junit">JUnit</a></h2>
-<h3>Description</h3>
-
-<p>This task runs tests from the JUnit testing framework. The latest
-version of the framework can be found at
-<a href="http://www.junit.org">http://www.junit.org</a>.
-This task has been tested with JUnit 3.0 up to JUnit 3.7; it won't
-work with versions prior to JUnit 3.0.</p>
-<p><strong>Note:</strong> This task depends on external libraries not included
-in the Ant distribution.  See <a href="../install.html#librarydependencies">
-Library Dependencies</a> for more information.
-</p>
-<p>
-<strong>Note</strong>:
-You must have <code>junit.jar</code> and the class files for the
-<code>&lt;junit&gt;</code> task in the same classpath.
-You can do one of:
-<ol>
-<li>
-Put both <code>junit.jar</code> and the optional tasks jar file in
-<code>ANT_HOME/lib</code>.
-</li>
-<li>
-Do not put either in <code>ANT_HOME/lib</code>, and instead
-include their locations in your <code>CLASSPATH</code> environment variable.
-</li>
-<li>
-Do neither of the above, and instead, specify their locations using
-a <code>&lt;classpath&gt;</code> element in the build file.
-
-See <a href="../../faq.html#delegating-classloader" target="_top">the
-FAQ</a> for details.
-</ol>
-</p>
-
-
-<p>Tests are defined by nested <code>test</code> or
-<code>batchtest</code> tags (see <a href="#nested">nested
-elements</a>).</p>
-
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-<tr>
-  <td width="12%" valign="top"><b>Attribute</b></td>
-  <td width="78%" valign="top"><b>Description</b></td>
-  <td width="10%" valign="top"><b>Required</b></td>
-</tr>
-  <tr>
-    <td valign="top">printsummary</td>
-    <td valign="top">Print one-line statistics for each testcase. Can
-      take the values <code>on</code>,
-      <code>off</code>, and
-      <code>withOutAndErr</code>.
-      <code>withOutAndErr</code> is the same
-      as <code>on</code> but also includes the output of the test
-      as written to <code>System.out</code> and <code>System.err</code>.</td>
-    <td align="center" valign="top">No; default is <code>off</code>.</td>
-  </tr>
-  <tr>
-    <td valign="top">fork</td>
-    <td valign="top">Run the tests in a separate VM.</td>
-    <td align="center" valign="top">No; default is <code>off</code>.</td>
-  </tr>
-  <tr>
-    <td valign="top">haltonerror</td>
-    <td valign="top">Stop the build process if an error occurs during the test
-       run.</td>
-    <td align="center" valign="top">No; default is <code>off</code>.</td>
-  </tr>
-<tr>
-    <td valign="top">errorproperty</td>
-    <td valign="top">The name of a property to set in the event of an error.</td>
-    <td align="center" valign="top">No</td>
-</tr>
-  <tr>
-    <td valign="top">haltonfailure</td>
-    <td valign="top">Stop the build process if a test fails (errors are
-      considered failures as well).</td>
-    <td align="center" valign="top">No; default is <code>off</code>.</td>
-  </tr>
-<tr>
-    <td valign="top">failureproperty</td>
-    <td valign="top">The name of a property to set in the event of a failure
-      (errors are considered failures as well).</td>
-    <td align="center" valign="top">No.</td>
-</tr>
-  <tr>
-    <td valign="top">filtertrace</td>
-    <td valign="top">Filter out Junit and Ant stack frames from error and failure stack traces.</td>
-    <td align="center" valign="top">No; default is <code>on</code>.</td>
-  </tr>
-  <tr>
-    <td valign="top">timeout</td>
-    <td valign="top">Cancel the individual tests if they don&apos;t finish
-      in the given time (measured in milliseconds).  Ignored if
-      <code>fork</code> is disabled.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">maxmemory</td>
-    <td valign="top">Maximum amount of memory to allocate to the forked VM.
-      Ignored if <code>fork</code> is disabled.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">jvm</td>
-    <td valign="top">The command used to invoke the Java Virtual Machine,
-      default is 'java'.  The command is resolved by
-      <code>java.lang.Runtime.exec()</code>.
-      Ignored if <code>fork</code> is disabled.</td>
-    <td align="center" valign="top">No; default is <code>java</code>.</td>
-  </tr>
-  <tr>
-    <td valign="top">dir</td>
-    <td valign="top">The directory in which to invoke the VM. Ignored if
-      <code>fork</code> is disabled.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">newenvironment</td>
-    <td valign="top">Do not propagate the old environment when new
-      environment variables are specified. Ignored if <code>fork</code> is
-      disabled.</td>
-    <td align="center" valign="top">No; default is <code>false</code>.</td>
-  </tr>
-  <tr>
-    <td valign="top">includeantruntime</td>
-    <td valign="top">Implicitly add the Ant classes required to run
-      the tests and JUnit to the classpath in forked mode.</td>
-    <td align="center" valign="top">No; default is <code>true</code>.</td>
-  </tr>
-  <tr>
-    <td valign="top">showoutput</td>
-    <td valign="top">Send any output generated by tests to Ant's
-      logging system as well as to the formatters.  By default only the
-      formatters receive the output.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-</table>
-
-<p>By using the <code>errorproperty</code> and <code>failureproperty</code>
-attributes, it is possible to
-perform setup work (such as starting an external server), execute the test,
-clean up, and still fail the build in the event of a failure.</p>
-
-<p>The <code>filtertrace</code> attribute condenses error and failure
-stack traces before reporting them.
-It works with both the plain and XML formatters.  It filters out any lines
-that begin with the following string patterns:<pre>
-   "junit.framework.TestCase"
-   "junit.framework.TestResult"
-   "junit.framework.TestSuite"
-   "junit.framework.Assert."
-   "junit.swingui.TestRunner"
-   "junit.awtui.TestRunner"
-   "junit.textui.TestRunner"
-   "java.lang.reflect.Method.invoke("
-   "org.apache.tools.ant."</pre></p>
-
-<h3><a name="nested">Nested Elements</a></h3>
-
-<p>The <code>&lt;junit&gt;</code> task
-supports a nested <code>&lt;classpath&gt;</code>
-element that represents a <a href="../using.html#path">PATH like
-structure</a>.</p>
-
-<h4>jvmarg</h4>
-
-<p>If <code>fork</code> is enabled, additional parameters may be passed to
-the new VM via nested <code>&lt;jvmarg&gt;</code> elements. For example:</p>
-
-<pre>
-&lt;junit fork=&quot;yes&quot;&gt;
-  &lt;jvmarg value=&quot;-Djava.compiler=NONE&quot;/&gt;
-  ...
-&lt;/junit&gt;
-</pre>
-
-<p>would run the test in a VM without JIT.</p>
-
-<p><code>&lt;jvmarg&gt;</code> allows all attributes described in <a
-href="../using.html#arg">Command-line Arguments</a>.</p>
-
-<h4>sysproperty</h4>
-
-<p>Use nested <code>&lt;sysproperty&gt;</code> elements to specify system
-properties required by the class. These properties will be made available
-to the VM during the execution of the test (either ANT's VM or the forked VM,
-if <code>fork</code> is enabled).
-The attributes for this element are the same as for <a href="../CoreTasks/exec.html#env">environment variables</a>.</p>
-
-<pre>
-&lt;junit fork=&quot;no&quot;&gt;
-  &lt;sysproperty key=&quot;basedir&quot; value=&quot;${basedir}&quot;/&gt;
-  ...
-&lt;/junit&gt;
-</pre>
-
-<p>would run the test in ANT's VM and make the <code>basedir</code> property
-available to the test.</p>
-
-
-<h4>env</h4>
-
-<p>It is possible to specify environment variables to pass to the
-forked VM via nested <code>&lt;env&gt;</code> elements. For a description
-of the <code>&lt;env&gt;</code> element's attributes, see the
-description in the <a href="../CoreTasks/exec.html#env">exec</a> task.</p>
-
-<p>Settings will be ignored if <code>fork</code> is disabled.</p>
-
-<h4>formatter</h4>
-
-<p>The results of the tests can be printed in different
-formats. Output will always be sent to a file, unless you set the
-<code>usefile</code> attribute to <code>false</code>.
-The name of the file is determined by the
-name of the test and can be set by the <code>outfile</code> attribute
-of <code>&lt;test&gt;</code>.</p>
-
-<p>There are three predefined formatters - one prints the test results
-in XML format, the other emits plain text.  The formatter named
-<code>brief</code> will only print detailed information for testcases
-that failed, while <code>plain</code> gives a little statistics line
-for all test cases.  Custom formatters that need to implement
-<code>org.apache.tools.ant.taskdefs.optional.junit.JUnitResultFormatter</code>
-can be specified.</p>
-
-<p>If you use the XML formatter, it may not include the same output
-that your tests have written as some characters are illegal in XML
-documents and will be dropped.</p>
-
-<table border="1" cellpadding="2" cellspacing="0">
-<tr>
-  <td width="12%" valign="top"><b>Attribute</b></td>
-  <td width="78%" valign="top"><b>Description</b></td>
-  <td width="10%" valign="top"><b>Required</b></td>
-</tr>
-  <tr>
-    <td valign="top">type</td>
-    <td valign="top">Use a predefined formatter (either
-      <code>xml</code>, <code>plain</code>, or <code>brief</code>).</td>
-    <td align="center" rowspan="2">Exactly one of these.</td>
-  </tr>
-  <tr>
-    <td valign="top">classname</td>
-    <td valign="top">Name of a custom formatter class.</td>
-  </tr>
-  <tr>
-    <td valign="top">extension</td>
-    <td valign="top">Extension to append to the output filename.</td>
-    <td align="center">Yes, if <code>classname</code> has been used.</td>
-  </tr>
-  <tr>
-    <td valign="top">usefile</td>
-    <td valign="top">Boolean that determines whether output should be
-      sent to a file.</td>
-    <td align="center">No; default is <code>true</code>.</td>
-  </tr>
-</table>
-
-<h4>test</h4>
-
-<p>Defines a single test class.</p>
-
-<table border="1" cellpadding="2" cellspacing="0">
-<tr>
-  <td width="12%" valign="top"><b>Attribute</b></td>
-  <td width="78%" valign="top"><b>Description</b></td>
-  <td width="10%" valign="top"><b>Required</b></td>
-</tr>
-  <tr>
-    <td valign="top">name</td>
-    <td valign="top">Name of the test class.</td>
-    <td align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">fork</td>
-    <td valign="top">Run the tests in a separate VM.
-      Overrides value set in <code>&lt;junit&gt;</code>.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">haltonerror</td>
-    <td valign="top">Stop the build process if an error occurs during the test
-       run. Overrides value set in <code>&lt;junit&gt;</code>.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-<tr>
-    <td valign="top">errorproperty</td>
-    <td valign="top">The name of a property to set in the event of an error.
-      Overrides value set in <code>&lt;junit&gt;</code>.</td>
-    <td align="center" valign="top">No</td>
-</tr>
-  <tr>
-    <td valign="top">haltonfailure</td>
-    <td valign="top">Stop the build process if a test fails (errors are
-      considered failures as well).  Overrides value set in
-      <code>&lt;junit&gt;</code>.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-<tr>
-    <td valign="top">failureproperty</td>
-    <td valign="top">The name of a property to set in the event of a failure
-      (errors are considered failures as well). Overrides value set in
-      <code>&lt;junit&gt;</code>.</td>
-    <td align="center" valign="top">No</td>
-</tr>
-  <tr>
-    <td valign="top">filtertrace</td>
-    <td valign="top">Filter out Junit and Ant stack frames from error and failure stack
-    traces.  Overrides value set in <code>&lt;junit&gt;</code>.</td>
-    <td align="center" valign="top">No; default is <code>on</code>.</td>
-  </tr>
-  <tr>
-    <td valign="top">todir</td>
-    <td valign="top">Directory to write the reports to.</td>
-    <td align="center" valign="top">No; default is the current directory.</td>
-  </tr>
-  <tr>
-    <td valign="top">outfile</td>
-    <td valign="top">Base name of the test result. The full filename is
-      determined by this attribute and the extension of
-      <code>formatter</code>.</td>
-    <td align="center" valign="top">No; default is
-      <code>TEST-</code><em>name</em>, where <em>name</em> is the name of
-      the test specified in the <code>name</code> attribute.</td>
-  </tr>
-  <tr>
-    <td valign="top">if</td>
-    <td valign="top">Only run test if the named property is set.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">unless</td>
-    <td valign="top">Only run test if the named property is <b>not</b> set.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-</table>
-
-<p>Tests can define their own formatters via nested
-<code>&lt;formatter&gt;</code> elements.</p>
-
-<h4>batchtest</h4>
-
-<p>Define a number of tests based on pattern matching.</p>
-
-<p><code>batchtest</code> collects the included files from any number
-of nested <a
-href="../CoreTypes/fileset.html"><code>&lt;fileset&gt;</code></a>s. It then
-generates a test class name for each file that ends in
-<code>.java</code> or <code>.class</code>.</p>
-
-<table border="1" cellpadding="2" cellspacing="0">
-<tr>
-  <td width="12%" valign="top"><b>Attribute</b></td>
-  <td width="78%" valign="top"><b>Description</b></td>
-  <td width="10%" valign="top"><b>Required</b></td>
-</tr>
-  <tr>
-    <td valign="top">fork</td>
-    <td valign="top">Run the tests in a separate VM.
-      Overrides value set in <code>&lt;junit&gt;</code>.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">haltonerror</td>
-    <td valign="top">Stop the build process if an error occurs during the test
-       run. Overrides value set in <code>&lt;junit&gt;</code>.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-<tr>
-    <td valign="top">errorproperty</td>
-    <td valign="top">The name of a property to set in the event of an error.
-      Overrides value set in <code>&lt;junit&gt;</code>.</td>
-    <td align="center" valign="top">No</td>
-</tr>
-  <tr>
-    <td valign="top">haltonfailure</td>
-    <td valign="top">Stop the build process if a test fails (errors are
-      considered failures as well).  Overrides value set in
-      <code>&lt;junit&gt;</code>.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-<tr>
-    <td valign="top">failureproperty</td>
-    <td valign="top">The name of a property to set in the event of a failure
-      (errors are considered failures as well). Overrides value set in
-      <code>&lt;junit&gt;</code></td>
-    <td align="center" valign="top">No</td>
-</tr>
-  <tr>
-    <td valign="top">filtertrace</td>
-    <td valign="top">Filter out Junit and Ant stack frames from error and failure stack
-    traces.  Overrides value set in <code>&lt;junit&gt;</code>.</td>
-    <td align="center" valign="top">No; default is <code>on</code>.</td>
-  </tr>
-  <tr>
-    <td valign="top">todir</td>
-    <td valign="top">Directory to write the reports to.</td>
-    <td align="center" valign="top">No; default is the current directory.</td>
-  </tr>
-  <tr>
-    <td valign="top">if</td>
-    <td valign="top">Only run tests if the named property is set.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">unless</td>
-    <td valign="top">Only run tests if the named property is <strong>not</strong> set.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-</table>
-
-<p>Batchtests can define their own formatters via nested
-<code>&lt;formatter&gt;</code> elements.</p>
-
-<h3>Examples</h3>
-
-<pre>
-&lt;junit&gt;
-  &lt;test name="my.test.TestCase" /&gt;
-&lt;/junit&gt;
-</pre>
-
-<p>Runs the test defined in <code>my.test.TestCase</code> in the same
-VM. No output will be generated unless the test fails.</p>
-
-<pre>
-&lt;junit printsummary="yes" fork="yes" haltonfailure="yes"&gt;
-  &lt;formatter type="plain" /&gt;
-  &lt;test name="my.test.TestCase" /&gt;
-&lt;/junit&gt;
-</pre>
-
-<p>Runs the test defined in <code>my.test.TestCase</code> in a
-separate VM.  At the end of the test, a one-line summary will be
-printed. A detailed report of the test can be found in
-<code>TEST-my.test.TestCase.txt</code>. The build process will be
-stopped if the test fails.</p>
-
-<pre>
-&lt;junit printsummary="yes" haltonfailure="yes"&gt;
-  &lt;classpath&gt;
-    &lt;pathelement location="${build.tests}" /&gt;
-    &lt;pathelement path="${java.class.path}" /&gt;
-  &lt;/classpath&gt;
-
-  &lt;formatter type="plain" /&gt;
-
-  &lt;test name="my.test.TestCase" haltonfailure="no" outfile="result" &gt;
-    &lt;formatter type="xml" /&gt;
-  &lt;/test&gt;
-
-  &lt;batchtest fork="yes" todir="${reports.tests}"&gt;
-    &lt;fileset dir="${src.tests}"&gt;
-      &lt;include name="**/*Test*.java" /&gt;
-      &lt;exclude name="**/AllTests.java" /&gt;
-    &lt;/fileset&gt;
-  &lt;/batchtest&gt;
-&lt;/junit&gt;
-</pre>
-
-<p>Runs <code>my.test.TestCase</code> in the same VM, ignoring the
-given CLASSPATH; only a warning is printed if this test fails. In
-addition to the plain text test results, for this test a XML result
-will be output to <code>result.xml</code>.  
-Then, for each matching file in the directory defined for
-<code>${src.tests}</code> a
-test is run in a separate VM. If a test fails, the build process is
-aborted. Results are collected in files named
-<code>TEST-</code><em>name</em><code>.txt</code> and written to
-<code>${reports.tests}</code>.</p>
-
-<hr>
-<p align="center">Copyright &copy; 2001-2002 Apache Software Foundation. All rights
-Reserved.</p>
-</body>
-</html>
diff --git a/docs/manual/OptionalTasks/junitreport.html b/docs/manual/OptionalTasks/junitreport.html
deleted file mode 100644
index 8469950..0000000
--- a/docs/manual/OptionalTasks/junitreport.html
+++ /dev/null
@@ -1,101 +0,0 @@
-<html>
-<head>
-<title>JUnitReport Task</title>
-</head>
-
-<body>
-
-<h2><a name="junitreport">JUnitReport</a></h2>
-Merge the individual XML files generated by the JUnit task and eventually apply
-a stylesheet on the resulting merged document to provide a browsable report of
-the testcases results.
-<p><strong>Note:</strong> This task depends on external libraries not included in
-the Ant distribution.  See <a href="../install.html#librarydependencies">
-Library Dependencies</a> for more information.</p>
-
-<h3>Requirements</h3>
-<p>The task will run with either <a href="http://xml.apache.org/xalan-j/">Xalan 2.x</a>
-or <a href="http://xml.apache.org/dist/xalan-j/old/xalan-j_1_2_2.zip">Xalan 1.2.2</a>.</p>
-<p>
-Note:<i>For a framed format Xalan 1.2.2 will need Xerces(xerces.jar) as well as BSF(bsf.jar)
-that can be found in the distribution archive. Xerces will need to be before any other
-parser (such as the shipped crimson). It is *highly* recommended to use Xalan2 instead
-because Xalan1 is no more supported.
-</i></p>
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td width="12%" valign="top"><b>Attribute</b></td>
-    <td width="78%" valign="top"><b>Description</b></td>
-    <td width="10%" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">tofile</td>
-    <td valign="top">The name of the XML file that will aggregate all individual
-      XML testsuite previously generated by the JUnit task.</td>
-    <td align="center" valign="top">No. Default to TESTS-TestSuites.xml</td>
-  </tr>
-  <tr>
-    <td valign="top">todir</td>
-    <td valign="top">The directory where should be written the file resulting
-      from the individual XML testsuite aggregation.</td>
-    <td align="center" valign="top">No. Default to current directory</td>
-  </tr>
-</table>
-<h3><a name="nested">Nested Elements</a></h3>
-<h4>fileset</h4>
-<p><code>junitreport</code> collects individual xml files generated by the JUnit
-task using the nested <a href="../CoreTypes/fileset.html"><code>&lt;FileSet&gt;</code></a>
-element.</p>
-<h4>report</h4>
-<p>Generate a browsable report based on the document created by the merge.</p>
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td width="12%" valign="top"><b>Attribute</b></td>
-    <td width="78%" valign="top"><b>Description</b></td>
-    <td width="10%" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">format</td>
-    <td valign="top">The format of the generated report. Must be &quot;noframes&quot;
-      or &quot;frames&quot;.</td>
-    <td align="center" valign="top">No, default to &quot;frames&quot;</td>
-  </tr>
-  <tr>
-    <td valign="top">styledir</td>
-    <td valign="top">The directory where the stylesheets are defined. They must
-      be conforming to the following conventions:
-      <ul>
-        <li>frames format: the stylesheet must be named <i>junit-frames.xsl</i>.</li>
-        <li>noframes format: the stylesheet must be named <i>junit-noframes.xsl</i>.</li>
-      </ul>
-    </td>
-    <td align="center" valign="top">No. Default to embedded stylesheets.</td>
-  </tr>
-  <tr>
-    <td valign="top">todir</td>
-    <td valign="top">The directory where the files resulting from the
-      transformation should be written to.</td>
-    <td align="center" valign="top">No. Default to current directory</td>
-  </tr>
-</table>
-<h3>Example of report</h3>
-<blockquote>
-  <pre>&lt;junitreport todir=&quot;./reports&quot;&gt;
-  &lt;fileset dir=&quot;./reports&quot;&gt;
-    &lt;include name=&quot;TEST-*.xml&quot;/&gt;
-  &lt;/fileset&gt;
-  &lt;report format=&quot;frames&quot; todir=&quot;./report/html&quot;/&gt;
-&lt;/junitreport&gt;
-</pre>
-</blockquote>
-<p>would generate a <tt>TESTS-TestSuites.xml</tt> file in the directory <tt>reports</tt> and
-generate the default framed report in the directory <tt>report/html</tt>.</p>
-
-<hr>
-<p align="center">Copyright &copy; 2001-2002 Apache Software Foundation. All rights
-Reserved.</p>
-</body>
-
-</html>
diff --git a/docs/manual/OptionalTasks/maudit.html b/docs/manual/OptionalTasks/maudit.html
deleted file mode 100644
index cfa5142..0000000
--- a/docs/manual/OptionalTasks/maudit.html
+++ /dev/null
@@ -1,137 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>MAudit Task</title>
-</head>
-
-<body>
-
-<h2><a name="maudit">MAudit</a></h2>
-<ul>
-  <li>Stephane Bailliez (<a href="mailto:sbailliez@imediation.com">sbailliez@imediation.com</a>)</li>
-</ul>
-<h3>Requirements</h3>
-<p>This task requires Metamata Development environment 2.0/Webgain Quality Analyzer 2.0.
-An evaluation version is available at <a href="http://www.webgain.com/products/quality_analyzer/">Webgain</a>.
-, <a href="http://jakarta.apache.org/oro/">Jakarta Oro</a> and a XML parser (via JAXP).</p>
-<h3>Description</h3> 
-<p>
-  Invokes the Metamata Audit/ Webgain Quality Analyzer on a set of Java files.
-</p>
-<p>
-  <i>maudit</i> performs static analysis of the Java source code and byte code files to find and report
-  errors of style and potential problems related to performance, maintenance and robustness.
-.  As a convenience, a stylesheet is given in <tt>etc</tt> directory, so that an HTML report can be generated from the XML file.
-</p>
-
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">tofile</td>
-    <td valign="top">The XML file to which the Audit result should be written to.</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">metamatahome</td>
-    <td valign="top">The home directory containing the Metamata distribution.</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">fix</td>
-    <td valign="top">
-      Automatically fix certain errors (those marked as fixable in the manual).
-    </td>
-    <td valign="top" align="center">No.Default to false.</td>
-  </tr>
-  <tr>
-    <td valign="top">list</td>
-    <td valign="top">
-      Creates listing file for each audited file. A .maudit file will be generated in the
-      same location as the source file.
-    </td>
-    <td valign="top" align="center">No. Default to false.</td>
-  </tr>
-  <tr>
-    <td valign="top">unused</td>
-    <td valign="top">
-      Finds declarations unused in search paths. It will look for unused global declarations
-      in the source code within a use domain specified by the <tt>searchpath</tt> element.
-    </td>
-    <td valign="top" align="center">No. Default to false.</td>
-  </tr>
-  <tr>
-    <td valign="top">maxmemory</td>
-    <td valign="top">Set the maximum memory for the JVM. this is a convenient
-      way to set the -mx or -Xmx argument.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-</table>
-<h3>Nested elements</h3>
-<h4>jvmarg</h4>
-<p>Additional parameters may be passed to the VM via nested <code>&lt;jvmarg&gt;</code>
-attributes. <code>&lt;jvmarg&gt;</code> allows all attributes described in 
-<a href="../using.html#arg">Command line arguments</a>.</p>
-<p>
-You can avoid using the  <code>&lt;jvmarg&gt;</code> by adding these empty 
-entries to <code>metamata.properties</code> located at <code>${metamata.home}/bin</code>
-</p>
-<pre>metamata.classpath=
-metamata.sourcepath=
-metamata.baseclasspath=
-</pre>
-</p>
-<h4>classpath</h4>
-<p>Sets class path (also source path unless one explicitly set). Overrides
-METAPATH/CLASSPATH environment variables. The <tt>classpath</tt> element represents a <a href="../using.html#path">PATH like
-structure</a>.</p>
-<h4>sourcepath</h4>
-<p>Sets source path. Overrides the SOURCEPATH environment variable. The <tt>sourcepath</tt> element represents a <a href="../using.html#path">PATH like
-structure</a>.</p>
-<h4>sourcepath</h4>
-<p>Sets the search path to use as the use domain when looking for unused global declarations. The <tt>searchpath</tt> element represents a <a href="../using.html#path">PATH like
-structure</a>.</p>
-<h4>fileset</h4>
-<p>Sets the Java files to audit via a <a href="../CoreTypes/fileset.html">FILESET</a> structure.
-Whatever the filter is, only the files that ends with <i>.java</i> will be included for processing.
-Note that the base directory used for the fileset MUST be the root of the source files otherwise
-package names deduced from the file path will be incorrect.
-</p>
-<h3>Example</h3>
-<pre>  &lt;maudit tofile=&quot;c:/metamata/examples/auditexamples/audit.xml&quot;
-          metamatahome=&quot;c:/metamata&quot; fix=&quot;yes&quot;&gt;
-    &lt;classpath&gt;
-      &lt;pathelement location=&quot;c:/metamata/examples/auditexamples&quot;/&gt;
-    &lt;/classpath&gt;
-    &lt;sourcepath&gt;
-      &lt;pathelement location=&quot;c:/metamata/examples/auditexamples&quot;/&gt;
-    &lt;/sourcepath&gt;
-    &lt;fileset dir=&quot;c:/metamata/examples/auditexamples&quot;&gt;
-        &lt;include name=&quot;*.java&quot;/&gt;
-    &lt;/fileset&gt;
-  &lt;/maudit&gt;</pre>
-<p>
-  This invokes Metamata Audit installed in <tt>c:/metamata</tt> on the audit examples
-and fix automatically the fixable errors.
-</p>
-<h3>Generating a report</h3>
-As a convenience, there is an XSL file(mmetrics-frames.xsl) that allows you to generate a full framed HTML report of the metrics.
-You can find it in the <i>etc</i> directory of Ant. As it uses the Xalan redirect extensions, you will need Xalan and Xerces to run it.
-The stylesheet takes an <i>output.dir</i> parameter (otherwise it will be generated
-in the current directory), it can be run in Ant as follows:
-<pre>
-&lt;style in=java &quot;${audit.xml}&quot; style=&quot;maudit-frames.xsl&quot; out="null.tmp"&gt;
-    &lt;param name=&quot;output.dir&quot; expression=&quot;${report.dir}&quot;/&gt;
-&lt;/style&gt;
-</pre>
-
-<hr>
-<p align="center">Copyright &copy; 2001-2002 Apache Software Foundation. All rights
-Reserved.</p>
-</body>
-</html>
diff --git a/docs/manual/OptionalTasks/mimemail.html b/docs/manual/OptionalTasks/mimemail.html
deleted file mode 100644
index 2f38e5c..0000000
--- a/docs/manual/OptionalTasks/mimemail.html
+++ /dev/null
@@ -1,99 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>MimeMail Task</title>
-</head>
-
-<body>
-
-<h2><a name="mimemail">MimeMail</a></h2>
-
-<h3><i>Deprecated</i></h3>
-<p><i>This task has been deprecated.  Use the <a href="../CoreTasks/mail.html">mail</a> task instead.</i></p>
-
-<h3>Description</h3>
-<p>Sends SMTP mail with MIME attachments.
-<a href="http://java.sun.com/products/javamail/index.html">JavaMail</a>
-and <a href="http://java.sun.com/products/javabeans/glasgow/jaf.html">Java
-Activation Framework</a> are required for this task.</p>
-<p>Multiple files can be attached using <a href="../CoreTypes/fileset.html">FileSets.</a></p>
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">message</td>
-    <td valign="top">The message body</td>
-    <td valign="top" align="center" rowspan="2">No, but only one of of 'message' or
-      'messageFile' may be specified.&nbsp; If not specified, a fileset must be
-      provided.</td>
-  </tr>
-  <tr>
-    <td valign="top">messageFile</td>
-    <td valign="top">A filename to read and used as the message body</td>
-  </tr>
-  <tr>
-    <td valign="top">messageMimeType</td>
-    <td valign="top">MIME type to use for 'message' or 'messageFile' when
-      attached.</td>
-    <td align="center" valign="top">No, defaults to "text/plain"</td>
-  </tr>
-  <tr>
-    <td valign="top">tolist</td>
-    <td valign="top">Comma-separated list of To: recipients</td>
-    <td valign="top" align="center" rowspan="3">Yes, at least one of 'tolist', 'cclist',
-      or 'bcclist' must be specified.</td>
-  </tr>
-  <tr>
-    <td valign="top">cclist</td>
-    <td valign="top">Comma-separated list of CC: recipients</td>
-    <td valign="top" align="center">&nbsp;</td>
-  </tr>
-  <tr>
-    <td valign="top">bcclist</td>
-    <td valign="top">Comma-separated list of BCC: recipients</td>
-    <td valign="top" align="center">&nbsp;</td>
-  </tr>
-  <tr>
-    <td valign="top">mailhost</td>
-    <td valign="top">Host name of the mail server.</td>
-    <td valign="top" align="center">No, default to &quot;localhost&quot;</td>
-  </tr>
-  <tr>
-    <td valign="top">subject</td>
-    <td valign="top">Email subject line.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">from</td>
-    <td valign="top">Email address of sender.</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">failonerror</td>
-    <td valign="top">Stop the build process if an error occurs sending the
-      e-mail.</td>
-    <td valign="top" align="center">No, default to &quot;true&quot;</td>
-  </tr>
-</table>
-<h3>Examples</h3>
-<p><b>Send a single HTML file as the body of a message</b></p>
-<pre>    &lt;mimemail messageMimeType=&quot;text/html&quot; messageFile=&quot;overview-summary.html&quot;
-        tolist=&quot;you&quot; subject=&quot;JUnit Test Results: ${TODAY}&quot; from=&quot;me&quot;/&gt;</pre>
-<p><b>Sends all files in a directory as attachments</b></p>
-<pre>    &lt;mimemail message=&quot;See attached files&quot; tolist=&quot;you&quot; subject=&quot;Attachments&quot; from=&quot;me&quot;&gt;
-        &lt;fileset dir=&quot;.&quot;&gt;
-            &lt;include name=&quot;dist/*.*&quot;/&gt;
-        &lt;/fileset&gt;
-    &lt;/mimemail&gt;
-</pre>
-<hr><p align="center">Copyright &copy; 2001-2002 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/OptionalTasks/mmetrics.html b/docs/manual/OptionalTasks/mmetrics.html
deleted file mode 100644
index 78e8cdb..0000000
--- a/docs/manual/OptionalTasks/mmetrics.html
+++ /dev/null
@@ -1,122 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>MMetrics Task</title>
-</head>
-
-<body>
-
-<h2>MMetrics</h2>
-<ul>
-  <li>Stephane Bailliez (<a href="mailto:sbailliez@imediation.com">sbailliez@imediation.com</a>)</li>
-</ul>
-<h3>Requirements</h3>
-<p>This task requires Metamata Development environment 2.0/Webgain Quality Analyzer 2.0.
-An evaluation version is available at <a href="http://www.webgain.com/products/quality_analyzer/">Webgain</a>.
-(Though you will not be able to use Metrics from the command line if you do not have a registered version).
-You also need a TRaX compliant processor(such as <a href="http://xml.apache.org/xalan-j/">Xalan 2.x</a>) via JAXP 1.1</p>
-<h3>Description</h3> 
-<p>
-  Invokes the Metamata Metrics / WebGain Quality Analyzer source code 
-  analyzer on a set of Java files.
-</p>
-<p>
-    <i>mmetrics</i> will compute the metrics of a set of Java files and write the results to an XML
-    file. As a convenience, a stylesheet is given in <tt>etc</tt> directory, so that an HTML report can be generated from the XML file.
-</p>
-
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">metamatahome</td>
-    <td valign="top">The home directory containing the Metamata distribution.</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">tofile</td>
-    <td valign="top">The XML were the resulting metrics will be written to.</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">granularity</td>
-    <td valign="top">Metrics granularity of the source files. Must be either
-      <i>files</i> (compilation-units), <i>types</i> (types and compilation-units) or <i>methods</i>
-      (methods, types and compilation-units).
-    </td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">maxmemory</td>
-    <td valign="top">Set the maximum memory for the JVM. this is a convenient
-      way to set the -mx or -Xmx argument.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-</table>
-<h3>Nested elements</h3>
-For specifying the source code to analyze, you can either use a <tt>path</tt> or <tt>fileset</tt> elements (though a single path element is preferred, see note below).
-<h4>jvmarg</h4>
-<p>Additional parameters may be passed to the VM via nested <code>&lt;jvmarg&gt;</code>
-attributes. <code>&lt;jvmarg&gt;</code> allows all attributes described in <a href="../using.html#arg">Command
-line arguments</a>.</p>
-<h4>classpath</h4>
-<p>Sets class path (also source path unless one explicitly set). Overrides
-METAPATH/CLASSPATH environment variables. The <tt>classpath</tt> element represents a <a href="../using.html#path">PATH like
-structure</a>.</p>
-<h4>sourcepath</h4>
-<p>Sets source path. Overrides the SOURCEPATH environment variable. The <tt>sourcepath</tt> element represents a <a href="../using.html#path">PATH like
-structure</a>.</p>
-
-<h4>path</h4>
-<p>Sets the list of directories to analyze the code for metrics.;It represents a <a href="../using.html#path">PATH structure</a>.</p>
-<h4>fileset</h4>
-<p>Sets a set of files to analyze for metrics.source  It represents a <a href="../CoreTypes/fileset.html">FILESET structure</a>.</p>
-
-<p>
-<font color="#FF0000">
-Note: For the sake of readability, it is highly recommended to analyze for a single unique directory instead than
-using filesets or several directories. Otherwise there will be multiple metrics outputs without any way to know
-what metrics refers to what source. Chance are also that the XML handler that does some heuristic will be confused
-by the different outputs.
-</font>
-</p>
-
-<h3>Example</h3>
-<pre>  &lt;mmetrics tofile=&quot;mmetrics.xml&quot;
-          metamatahome=&quot;c:/metamata&quot;
-          granularity=&quot;methods&quot;&gt;
-    &lt;classpath&gt;
-      &lt;pathelement location=&quot;c:/metamata/examples/metricsexamples&quot;/&gt;
-    &lt;/classpath&gt;
-    &lt;sourcepath&gt;
-      &lt;pathelement location=&quot;c:/metamata/examples/metricsexamples&quot;/&gt;
-    &lt;/sourcepath&gt;
-    &lt;path&gt;
-      &lt;pathelement location=&quot;c:/metamata/examples/metricsexamples&quot;/&gt;
-    &lt;/path&gt;
-  &lt;/mmetrics&gt;</pre>
-<p>
-  This invokes Metamata Metrics installed in <tt>c:/metamata</tt> on the metrics example.
-  (Note that here, classpath and sourcepath are not normally not needed)
-</p>
-
-<h3>Generating a report</h3>
-As a convenience, there is an XSL file(mmetrics-frames.xsl) that allows you to generate a full framed HTML report of the metrics.
-You can find it in the <i>etc</i> directory of Ant. As it uses the Xalan redirect extensions, you will need Xalan and Xerces to run it.
-The stylesheet takes an <i>output.dir</i> parameter (otherwise it will be generated
-in the current directory), it can be run in Ant as follows:
-<pre>
-&lt;style in=java &quot;${metrics.xml}&quot; style=&quot;mmetrics-frames.xsl&quot; out="null.tmp"&gt;
-    &lt;param name=&quot;output.dir&quot; expression=&quot;${report.dir}quot;/&gt;
-&lt;/style&gt;
-</pre>
-<hr>
-<p align="center">Copyright &copy; 2001-2002 Apache Software Foundation. All rights
-Reserved.</p>
-</body>
-</html>
diff --git a/docs/manual/OptionalTasks/mparse.html b/docs/manual/OptionalTasks/mparse.html
deleted file mode 100644
index 9ffd5a6..0000000
--- a/docs/manual/OptionalTasks/mparse.html
+++ /dev/null
@@ -1,119 +0,0 @@
-<!-- saved from url=(0022)http://internet.e-mail -->
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>MParse Task</title>
-</head>
-
-<body>
-
-<h2><a name="mparse">MParse</a></h2>
-<p>by</p>
-<ul>
-  <li>Stephane Bailliez (<a href="mailto:sbailliez@imediation.com">sbailliez@imediation.com</a>)</li>
-</ul>
-<h3>Requirements</h3>
-<p>This task requires Metamata Development environment 2.0 freely available at <a href="http://www.metamata.com">Metamata</a>.</p>
-<h3>Description</h3> 
-<p>
-  Invokes the Metamata <a HREF="http://www.metamata.com/parse.html">MParse</a> compiler 
-  compiler on a grammar file.
-</p>
-<p>
-  To use the <i>mparse</i> task, set the <i>target</i> attribute to the name of the 
-  grammar file to process.  You also need to specify the directory containing 
-  the Metamata installation using the <i>metamatahome</i> attribute, so that Ant 
-  can find the MParse classes.
-</p>
-<p>
-  This task only invokes MParse if the grammar file is newer than the generated 
-  Java files. MParse assumes that the Java class name of the generated parser
-  is the same as the name of the grammar file, less the .jj extension.
-</p>
-
-<p>For additional information about MParse, please consult the online manual available <a href="http://download.metamata.com/parse.pdf">here</a>
-(PDF)
-</p>
-
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">target</td>
-    <td valign="top">The .jj grammar file to process. It will only be processed
-      if the grammar is newer than the corresponding .java file.</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">metamatahome</td>
-    <td valign="top">The home directory containing the Metamata distribution.</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">verbose</td>
-    <td valign="top">
-      Enable all messages
-    </td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">debugparser</td>
-    <td valign="top">
-      Enables parser debugging
-    </td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">debugscanner</td>
-    <td valign="top">
-      Enables scanner debugging
-    </td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">cleanup</td>
-    <td valign="top">Remove the intermediate Sun
-      JavaCC file created during the transformation of the grammar file.</td>
-    <td valign="top" align="center">No. Default to false</td>
-  </tr>
-  <tr>
-    <td valign="top">maxmemory</td>
-    <td valign="top">Set the maximum memory for the JVM. this is a convenient
-      way to set the -mx or -Xmx argument.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-</table>
-<h3>Nested elements</h3>
-<h4>jvmarg</h4>
-<p>Additional parameters may be passed to the VM via nested <code>&lt;jvmarg&gt;</code>
-attributes. <code>&lt;jvmarg&gt;</code> allows all attributes described in <a href="../using.html#arg">Command
-line arguments</a>.</p>
-<h4>classpath</h4>
-<p>Sets class path (also source path unless one explicitly set). Overrides
-METAPATH/CLASSPATH environment variables. &nbsp;The <tt>classpath</tt> element represents a <a href="../using.html#path">PATH like
-structure</a>.</p>
-<h4>sourcepath</h4>
-<p>Sets source path. Overrides the SOURCEPATH environment variable.&nbsp;The <tt>sourcepath</tt> element represents a <a href="../using.html#path">PATH like
-structure</a>.</p>
-<h3>Example</h3>
-<pre>  &lt;mparse target=&quot;c:/metamata/examples/parseexamples/javagrammars/singlefile/JavaParser.jj&quot;
-          metamatahome=&quot;c:/metamata&quot; cleanup=&quot;true&quot;&gt;
-    &lt;classpath&gt;
-      &lt;pathelement location=&quot;c:/metamata/examples/&quot;/&gt;
-    &lt;/classpath&gt;
-  &lt;/mparse&gt;</pre>
-<p>
-  This invokes Metamata MParse installed in <tt>c:/metamata</tt> on one of the grammar file
-example <tt>(JavaParser.jj)</tt>
- and cleans up the intermediate Sun JavaCC file.
-</p>
-<hr>
-<p align="center">Copyright &copy; 2001 Apache Software Foundation. All rights
-Reserved.</p>
-</body>
-</html>
diff --git a/docs/manual/OptionalTasks/native2ascii.html b/docs/manual/OptionalTasks/native2ascii.html
deleted file mode 100644
index 6b49462..0000000
--- a/docs/manual/OptionalTasks/native2ascii.html
+++ /dev/null
@@ -1,138 +0,0 @@
-<html>
-  <head><title>Native2Ascii Task</title></head>
-  <body>
-    <h2>Native2Ascii</h2>
-    
-    <h3>Description:</h3>
-    
-    <p>
-      Converts files from native encodings to ASCII with escaped Unicode.
-      A common usage is to convert source files maintained in a native
-      operating system encoding, to ASCII prior to compilation.
-    </p>
-
-    <p>
-      Files in the directory <em>src</em>
-      are converted from a native encoding to ASCII.
-      By default, all files in the directory are converted.
-      However, conversion may be limited to selected files using
-      <em>includes</em> and <em>excludes</em> attributes.
-      For more information on file matching patterns,
-      see the section on
-      <a href="../dirtasks.html#directorybasedtasks">directory based tasks</a>.
-      If no <em>encoding</em> is specified, 
-      the default encoding for the JVM is used.
-      If <em>ext</em> is specified, then output files are renamed
-      to use it as a new extension. 
-      More sophisticated file name translations can be achieved using a nested
-      <em>&lt;mapper&gt;</em> element. By default an 
-      <a href="../CoreTypes/mapper.html#identity-mapper">identity mapper</a> will be used.
-      If <em>dest</em> and <em>src</em> point to the same directory,
-      the <em>ext</em> attribute or a nested <em>&lt;mapper&gt;</em>
-      is required.
-    </p>
-
-    <p>
-      This task forms an implicit <a href="../CoreTypes/fileset.html">File Set</a>,
-      and supports all attributes of <code>&lt;fileset&gt;</code>
-      (<code>dir</code> becomes <code>src</code>) as well as 
-      nested <code>&lt;include&gt;</code>, <code>&lt;exclude&gt;</code>,
-      and <code>&lt;patternset&gt;</code> elements.
-    </p>
-
-    <table border="1" cellpadding="2" cellspacing="0">
-      <tr>
-        <td><b>Attribute</b></td>
-        <td><b>Description</b></td>
-        <td><b>Required</b></td>
-      </tr>
-      <tr>
-        <td>reverse</td>
-        <td>Reverse the sense of the conversion,
-          i.e. convert from ASCII to native</td>
-        <td align="center">No</td>
-      </tr>
-      <tr>
-        <td>encoding</td>
-        <td>The native encoding the files are in
-          (default is the default encoding for the JVM)</td>
-        <td align="center">No</td>
-      </tr>
-      <tr>
-        <td>src</td>
-        <td>The directory to find files in (default is <em>basedir</em>)</td>
-        <td align="center">No</td>
-      </tr>
-      <tr>
-        <td>dest</td>
-        <td>The directory to output file to</td>
-        <td align="center">Yes</td>
-      </tr>
-      <tr>
-        <td>ext</td>
-        <td>File extension to use in renaming output files</td>
-        <td align="center">No</td>
-      </tr>
-      <tr>
-        <td>defaultexcludes</td>
-        <td>indicates whether default excludes should be used or not
-          (&quot;yes&quot;/&quot;no&quot;).
-          Default excludes are used when omitted.
-        </td>
-        <td align="center">No</td>
-      </tr>
-      <tr>
-        <td>includes</td>
-        <td>comma separated list of patterns of files that must be
-          included. All files are included when omitted.</td>
-        <td align="center">No</td>
-      </tr>
-      <tr>
-        <td>includesfile</td>
-        <td>the name of a file. Each line of this file is
-          taken to be an include pattern</td>
-        <td align="center">No</td>
-      </tr>
-      <tr>
-        <td>excludes</td>
-        <td>comma separated list of patterns of files that must be excluded.
-          No files (except default excludes) are excluded when omitted.</td>
-        <td align="center">No</td>
-      </tr>
-      <tr>
-        <td>excludesfile</td>
-        <td>the name of a file. Each line of this file is
-          taken to be an exclude pattern</td>
-        <td align="center">No</td>
-      </tr>
-    </table>
-      
-    <h3>Examples</h3>
-
-    <pre>
-&lt;native2ascii encoding=&quot;EUCJIS&quot; src=&quot;srcdir&quot; dest=&quot;srcdir&quot;
-   includes=&quot;**/*.eucjis&quot; ext=&quot;.java&quot; /&gt;
-    </pre>
-
-    <p>
-      Converts all files in the directory <em>srcdir</em>
-      ending in <code>.eucjis</code> from the EUCJIS encoding to ASCII
-      and renames them to end in <code>.java</code>.
-    </p>
-
-<pre>
-&lt;native2ascii encoding='EUCJIS&quot; src=&quot;native/japanese&quot; dest=&quot;src&quot;
-   includes=&quot;**/*.java /&gt;
-</pre>
-
-    <p>
-      Converts all the files ending in <code>.java</code>
-      in the directory <em>native/japanese</em> to ASCII,
-      placing the results in the directory <em>src</em>.
-      The names of the files remain the same.
-    </p>
-  </body>
-<hr>
-<p align="center">Copyright &copy; 2001 Apache Software Foundation. All rights
-Reserved.</p>
-</html>
diff --git a/docs/manual/OptionalTasks/netrexxc.html b/docs/manual/OptionalTasks/netrexxc.html
deleted file mode 100644
index a1435ce..0000000
--- a/docs/manual/OptionalTasks/netrexxc.html
+++ /dev/null
@@ -1,315 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>NetRexxC Task</title>
-</head>
-
-<body>
-
-<h2><a name="netrexxc">NetRexxC</a></h2>
-<h3>Description</h3>
-<p>Compiles a <a href="http://www2.hursley.ibm.com/netrexx" target="_top">NetRexx</a>
-source tree within the running (Ant) VM.</p>
-<p>The source and destination directory will be recursively scanned for
-NetRexx source files to compile.  Only NetRexx files that have no corresponding
-class file or where the class file is older than the java file will be compiled.</p>
-<p>Files in the source tree are copied to the destination directory,
-allowing support files to be located properly in the classpath. The source
-files are copied because the NetRexx compiler cannot produce class files in a
-specific directory via parameters</p>
-<p>The directory structure of the source tree should follow the package
-hierarchy.</p>
-<p>It is possible to refine the set of files that are being compiled/copied.
-This can be done with the <i>includes</i>, <i>includesfile</i>, <i>excludes</i>, <i>excludesfile</i> and
-<i>defaultexcludes</i> attributes. With the <i>includes</i> or <i>includesfile</i> attribute you
-specify the files you want to have included by using patterns. The
-<i>exclude</i> or <i>excludesfile</i> attribute is used to specify the files you want to have
-excluded.  This is also done with patterns.  And finally with the
-<i>defaultexcludes</i> attribute, you can specify whether you
-want to use default exclusions or not. See the section on <a
-href="../dirtasks.html#directorybasedtasks">directory based tasks</a>, on how the
-inclusion/exclusion of files works, and how to write patterns.</p>
-<p>This task forms an implicit <a href="../CoreTypes/fileset.html">FileSet</a> and
-supports all attributes of <code>&lt;fileset&gt;</code>
-(<code>dir</code> becomes <code>srcdir</code>) as well as the nested
-<code>&lt;include&gt;</code>, <code>&lt;exclude&gt;</code> and
-<code>&lt;patternset&gt;</code> elements.</p>
-<p>All properties except classpath, srcdir and destDir are also available as properties in the form
-<code>ant.netrexxc.<i>attributename</i></code>, eg.<br>
-<code>&lt;property name="ant.netrexxc.verbose" value="noverbose"/&gt;</code><br>
-or from the command line as<br>
-<code>ant -Dant.netrexxc.verbose=noverbose ...</code>
-</p>
-
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">binary</td>
-    <td valign="top">Whether literals are treated as the java binary
-      type rather than the NetRexx types</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">classpath</td>
-    <td valign="top">The classpath to use during compilation</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">comments</td>
-    <td valign="top">Whether comments are passed through to the
-      generated java source</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">compact</td>
-    <td valign="top">Whether error messages come out in compact or
-      verbose format. Default is the compact format.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">compile</td>
-    <td valign="top">Whether the NetRexx compiler should compile the
-      generated java code</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">console</td>
-    <td valign="top">Whether or not messages should be displayed on the
-      'console'</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">crossref</td>
-    <td valign="top">Whether variable cross references are generated</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">decimal</td>
-    <td valign="top">Whether decimal arithmetic should be used for the
-      NetRexx code</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">defaultexcludes</td>
-    <td valign="top">indicates whether default excludes should be used or not
-      (&quot;yes&quot;/&quot;no&quot;). Default excludes are used when
-      omitted.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">destDir</td>
-    <td valign="top">the destination directory into which the NetRexx
-      source files should be copied and then compiled</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">diag</td>
-    <td valign="top">Whether diagnostic information about the compile is
-      generated</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">excludes</td>
-    <td valign="top">comma separated list of patterns of files that must be
-      excluded. No files (except default excludes) are excluded when
-      omitted.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">excludesfile</td>
-    <td valign="top">the name of a file. Each line of this file is
-      taken to be an exclude pattern</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">explicit</td>
-    <td valign="top">Whether variables must be declared explicitly
-      before use</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">format</td>
-    <td valign="top">Whether the generated java code is formatted nicely
-      or left to match NetRexx line numbers for call stack debugging</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">includes</td>
-    <td valign="top">comma separated list of patterns of files that must be
-      included. All files are included when omitted.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">includesfile</td>
-    <td valign="top">the name of a file. Each line of this file is
-      taken to be an include pattern</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">java</td>
-    <td valign="top">Whether the generated java code is produced</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">keep</td>
-    <td valign="top">Sets whether the generated java source file should be kept
-      after compilation. The generated files will have an extension of
-      .java.keep, <b>not</b> .java</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">logo</td>
-    <td valign="top">Whether the compiler text logo is displayed when
-      compiling</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">replace</td>
-    <td valign="top">Whether the generated .java file should be replaced
-      when compiling</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">savelog</td>
-    <td valign="top">Whether the compiler messages will be written to
-      NetRexxC.log as well as to the console</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">sourcedir</td>
-    <td valign="top">Tells the NetRexx compiler to store the class files in the
-      same directory as the source files. The alternative is the working
-      directory</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">srcDir</td>
-    <td valign="top">Set the source dir to find the source NetRexx
-      files</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">strictargs</td>
-    <td valign="top">Tells the NetRexx compiler that method calls always
-      need parentheses, even if no arguments are needed, e.g.
-      <code>aStringVar.getBytes</code> vs.
-      <code>aStringVar.getBytes()</code></td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">strictassign</td>
-    <td valign="top">Tells the NetRexx compile that assignments must
-      match exactly on type</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">strictcase</td>
-    <td valign="top">Specifies whether the NetRexx compiler should be
-      case sensitive or not</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">strictimport</td>
-    <td valign="top">Whether classes need to be imported explicitly using an
-      <code>import</code> statement.  By default the NetRexx compiler will
-      import certain packages automatically</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">strictprops</td>
-    <td valign="top">Whether local properties need to be qualified
-      explicitly using <code>this</code></td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">strictsignal</td>
-    <td valign="top">Whether the compiler should force catching of
-      exceptions by explicitly named types</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">symbols</td>
-    <td valign="top">Whether debug symbols should be generated into the
-      class file</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">time</td>
-    <td valign="top">Asks the NetRexx compiler to print compilation
-      times to the console</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">trace</td>
-    <td valign="top">Turns on or off tracing and directs the resultant
-      trace output</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">utf8</td>
-    <td valign="top">Tells the NetRexx compiler that the source is in UTF8</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">verbose</td>
-    <td valign="top">Whether lots of warnings and error messages should
-      be generated</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">suppressMethodArgumentNotUsed</td>
-    <td valign="top">Tells whether we should filter out the
-      &amp;Method argument not used&amp; messages in strictargs mode.</td>
-    <td valign="top" align="center">no</td>
-  </tr>
-  <tr>
-    <td valign="top">suppressPrivatePropertyNotUsed</td>
-    <td valign="top">Tells whether we should filter out the
-      &amp;Private Property defined, but not used&amp; messages in strictargs mode.</td>
-    <td valign="top" align="center">no</td>
-  </tr>
-  <tr>
-    <td valign="top">suppressVariableNotUsed</td>
-    <td valign="top">Tells whether we should filter out the
-      &amp;Variable set but not used&amp; messages in strictargs mode.
-      Please be careful with this one, as you can hide errors behind it!</td>
-    <td valign="top" align="center">no</td>
-  </tr>
-  <tr>
-    <td valign="top">suppressExceptionNotSignalled</td>
-    <td valign="top">Tells whether we should filter out the
-      &amp;Exception is declared, but not signalled within the method&amp;
-      messages in strictsignal mode.</td>
-    <td valign="top" align="center">no</td>
-  </tr>
-  <tr>
-    <td valign="top">suppressDeprecation</td>
-    <td valign="top">Tells wether we should filter out any deprecation-messages
-      of the compiler out.</td>
-    <td valign="top" align="center">no</td>
-  </tr>
-</table>
-<h3>Examples</h3>
-<blockquote>
-  <p><code>&lt;netrexxc srcDir=&quot;/source/project&quot;
-           includes=&quot;vnr/util/*&quot;
-           destDir=&quot;/source/project/build&quot;
-           classpath=&quot;/source/project2/proj.jar&quot;
-           comments=&quot;true&quot;
-           crossref=&quot;false&quot; replace=&quot;true&quot;
-           keep=&quot;true&quot;/&gt;</code>
-  </p>
-</blockquote>
-<hr>
-<p align="center">Copyright &copy; 2001 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/OptionalTasks/perforce.html b/docs/manual/OptionalTasks/perforce.html
deleted file mode 100644
index 4ffac80..0000000
--- a/docs/manual/OptionalTasks/perforce.html
+++ /dev/null
@@ -1,577 +0,0 @@
-<html>
-<head>
-<title>Perforce Tasks</title>
-</head>
-<body>
-<h1>Perforce Tasks User Manual</h1>
-<p>by</p>
-<ul>
-    <li>Les Hughes (<a href="mailto:leslie.hughes@rubus.com">leslie.hughes@rubus.com</a>)</li>
-    <li>Kirk Wylie (<a href="mailto:kirk@radik.com">kirk@radik.com</a>)</li>
-</ul>
-<p>Version 1.1 - 2001/01/09</p>
-<hr>
-<h2>Contents</h2>
-<ul>
-    <li><a href="#intro">Introduction</a></li>
-    <li><a href="#tasks">The Tasks</a></li>
-    <li><a href="#changes">Change History</a></li>
-</ul>
-<br>
-<h2><a name="intro">Introduction</a></h2>
-<p>These tasks provide an interface to the <a href="http://www.perforce.com" target="_top">Perforce</a> SCM.
-The <code>org.apache.tools.ant.taskdefs.optional.perforce</code> package consists of a simple framework to support 
-p4 functionality as well as some Ant tasks encapsulating frequently used (by me :-) p4 commands. 
-However, the addition of new p4 commands is a pretty simple task (see the source). 
-Although it is possible to use these commands on the desktop, 
-they were primarily intended to be used by automated build systems.</p>
-
-<p><b>Note:</b> These tasks require the <a href="http://jakarta.apache.org/oro" target="_top">oro 2.0.XXX</a> regular
-expression package. Simply download this package and copy the jakarta-oro-2.0.XXX.jar file into Ant's lib directory.
-You will also need the Perforce client executable (p4 or p4.exe but not p4win.exe) in your path.
-</p>
-
-
-
-<h2><a name="tasks">The Tasks</a></h2>
-
-<table border="0" cellspacing="0" cellpadding="3">
-    <tr>
-        <td><a href="#p4sync">P4Sync</a></td>
-        <td>Synchronise a workspace to a depot</td>
-    </tr>
-    <tr>
-        <td><a href="#p4change">P4Change</a></td>
-        <td>Request a new changelist from the Perforce server</td>
-    </tr>
-    <tr>
-        <td><a href="#p4edit">P4Edit</a></td>
-        <td>Open files for edit (checkout)</td>
-    </tr>
-    <tr>
-        <td><a href="#p4submit">P4Submit</a></td>
-        <td>Submit a changelist to the Perforce server (checkin)</td>
-    </tr>
-    <tr>
-        <td><a href="#p4have">P4Have</a></td>
-        <td>List current files in client view, useful for reporting</td>
-    </tr>
-    <tr>
-        <td><a href="#p4label">P4Label</a></td>
-        <td>Create a label reflecting files in the current workspace</td>
-    </tr>
-    <tr>
-        <td><a href="#p4counter">P4Counter</a></td>
-        <td>Obtain or set the value of a counter</td>
-    </tr>
-	    <tr>
-        <td><a href="#p4reopen">P4Reopen</a></td>
-        <td>Move files between changelists</td>
-    </tr>
-
-	    <tr>
-        <td><a href="#p4revert">P4Revert</a></td>
-        <td>Revert files</td>
-    </tr>
-	    
-        <tr>
-        <td><a href="#p4add">P4Add</a></td>
-        <td>Add files</td>
-    </tr>
-</table>
-
-<h3>General P4 Properties</h3>
-<p>Each p4 task requires a number of settings, either through build-wide properties, individual attributes 
-or environment variables. These are
-</p>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Property</b></td>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Env Var</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Default</b></td>
-  </tr>
-  <tr>
-    <td valign="top">p4.port</td>
-    <td valign="top">port</td>
-    <td valign="top">P4PORT</td>
-    <td valign="top">The p4d server and port to connect to</td>
-    <td valign="top">perforce:1666</td>
-  </tr>
-  <tr>
-    <td valign="top">p4.client</td>
-    <td valign="top">client</td>
-    <td valign="top">P4CLIENT</td>
-    <td valign="top">The p4 client spec to use</td>
-    <td valign="top">The logged in username</td>
-  </tr>
-  <tr>
-    <td valign="top">p4.user</td>
-    <td valign="top">user</td>
-    <td valign="top">P4USER</td>
-    <td valign="top">The p4 username</td>
-    <td valign="top">The logged in username</td>
-  </tr>
-<tr>
-    <td valign="top" align="center">--</td>
-    <td valign="top">view</td>
-    <td valign="top" align="center">--</td>
-    <td valign="top">The client, branch or label view to operate upon. See the p4 user guide for more info.</td>
-    <td valign="top">//...</td>
-  </tr>
-
-</table>
-<p>
-Your local installation of Perforce may require other settings (e.g. P4PASSWD, P4CONFIG). At the moment, these can only be set outside of Ant, as environment variables.
-</p>
-<p>
-Additionally, you may also specify the following attributes:
-</p>
-<p>
-<table border="1" cellpadding="2" cellspacing="0">
-<tr>
-  <td valign="top"><b>Attribute</b></td>
-  <td valign="top"><b>Description</b></td>
-  <td align="center" valign="top"><b>Required</b></td>
-</tr>
-<tr>
-    <td valign="top">failonerror</td>
-    <td valign="top">Specifies whether to stop the build
-     (<code>true</code>|<code>yes</code>|<code>on</code>)
-     or keep going (<code>false</code>|<code>no</code>|<code>off</code>)
-     if an error is returned from the p4 command.</td>
-    <td valign="top">No; defaults to true.</td>
-  </tr>
-</table>
-</p>
-
-<h3>Examples</h3>
-<p>Setting in the environment:-</p>
-<p>
-(Unix csh)</p>
-<pre>setenv P4PORT myperforcebox:1666</pre>
-<p>(Unix sh et al)</p>
-<pre>P4USER=myp4userid; export P4USER</pre>
-<p>Using build properties:-</p>
-<pre>&lt;property name=&quot;p4.client&quot; value=&quot;nightlybuild&quot;/&gt;</pre>
-<p>Using task attributes:-</p>
-<pre>
-&lt;p4Whatever
-	port=&quot;myserver:1666&quot;
-	client=&quot;smoketest&quot;
-	user=&quot;smoketestdude&quot;
-	.
-	.
-	.
-/&gt;
-</pre>
-
-<p>
-For more information regarding the underlying 'p4' commands you are referred to the Perforce Command Reference
-available from the <a href="http://www.perforce.com/" target="_top">Perforce website</a>.
-</p>
-
-<h3>Taskdefs</h3>
-<p>Standard taskdefs (for you to copy'n'paste) -- normally this is done automatically if you install this optional task.</p>
-<pre>
-    &lt;taskdef name=&quot;p4sync&quot; classname=&quot;org.apache.tools.ant.taskdefs.optional.perforce.P4Sync&quot; /&gt;
-    &lt;taskdef name=&quot;p4change&quot; classname=&quot;org.apache.tools.ant.taskdefs.optional.perforce.P4Change&quot; /&gt;
-    &lt;taskdef name=&quot;p4edit&quot; classname=&quot;org.apache.tools.ant.taskdefs.optional.perforce.P4Edit&quot; /&gt;
-    &lt;taskdef name=&quot;p4submit&quot; classname=&quot;org.apache.tools.ant.taskdefs.optional.perforce.P4Submit&quot; /&gt;
-    &lt;taskdef name=&quot;p4have&quot; classname=&quot;org.apache.tools.ant.taskdefs.optional.perforce.P4Have&quot; /&gt;
-    &lt;taskdef name=&quot;p4label&quot; classname=&quot;org.apache.tools.ant.taskdefs.optional.perforce.P4Label&quot; /&gt;
-    &lt;taskdef name=&quot;p4counter&quot; classname=&quot;org.apache.tools.ant.taskdefs.optional.perforce.P4Counter&quot; /&gt;
-    &lt;taskdef name=&quot;p4reopen&quot; classname=&quot;org.apache.tools.ant.taskdefs.optional.perforce.P4Reopen&quot; /&gt;
-    &lt;taskdef name=&quot;p4revert&quot; classname=&quot;org.apache.tools.ant.taskdefs.optional.perforce.P4Revert&quot; /&gt;
-    &lt;taskdef name=&quot;p4add&quot; classname=&quot;org.apache.tools.ant.taskdefs.optional.perforce.P4Add&quot; /&gt;
-</pre>
-
-<hr>
-<h2>Task Descriptions</h2>
-<h2><a name="p4sync">P4Sync</a></h2>
-<h3>Description:</h3>
-<p>Synchronize the current workspace with the depot.</p>
-
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">force</td>
-    <td valign="top">force a refresh of files</td>
-    <td valign="top" align="center">no</td>
-  </tr>
-<tr>
-    <td valign="top">label</td>
-    <td valign="top">sync client to label</td>
-    <td valign="top" align="center">no</td>
-  </tr>
-</table>
-
-<h3>Examples</h3>
-<pre>&lt;p4sync label=&quot;nightlybuild-0.0123&quot; force=&quot;yes&quot; /&gt;
-&lt;p4sync view=&quot;//depot/projects/projectfoo/main/src/...&quot; /&gt;
-</pre>
-<hr>
-
-
-
-<h2><a name="p4change">P4Change</a></h2>
-<h3>Description:</h3>
-<p>Request a new changelist from the Perforce server. 
-This task sets the ${p4.change} property which can then be passed to <A HREF="#p4submit">P4Submit</A>,
-<A HREF="#p4edit">P4Edit</A>, or <a HREF="#p4add">P4Add</A>.
-</p>
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">description</td>
-    <td valign="top">Description for ChangeList. If none specified, it will
-                     default to "AutoSubmit By Ant"</td>
-    <td valign="top" align="center">No.</td>
-  </tr>
-</table>
-
-<h3>Examples</h3>
-<pre>&lt;p4change description="Change Build Number in Script"&gt;
-</pre>
-<hr>
-
-
-
-
-<h2><a name="p4edit">P4Edit</a></h2>
-<h3>Description:</h3>
-<p>Open file(s) for edit. P4Change should be used to obtain a new changelist for P4Edit as,
-although P4Edit can open files to the default change,  P4Submit cannot yet submit it.
-</p>
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">view</td>
-    <td valign="top">The filespec to request to edit</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">change</td>
-    <td valign="top">An existing changelist number to assign files to.</td>
-    <td valign="top" align="center">No, but see above.</td>
-  </tr>
-
-</table>
-
-<h3>Examples</h3>
-<pre>
-&lt;p4edit
-	view=&quot;//depot/projects/projectfoo/main/src/Blah.java...&quot;
-	change=&quot;${p4.change}&quot; /&gt;
-</pre>
-<hr>
-
-
-
-
-<h2><a name="p4submit">P4Submit</a></h2>
-<h3>Description:</h3>
-<p>Submit a changelist, usually obtained from P4Change.
-</p>
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">change</td>
-    <td valign="top">The changelist number to submit</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-</table>
-
-<h3>Examples</h3>
-<pre>&lt;p4submit change=&quot;${p4.change}&quot; /&gt;
-</pre>
-<hr>
-
-
-
-
-<h2><a name="p4have">P4Have</a></h2>
-<h3>Description:</h3>
-<p>List handy file info reflecting the current client contents.
-</p>
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">None</td>
-    <td valign="top" align="center">--</td>
-    <td valign="top" align="center">--</td>
-  </tr>
-</table>
-
-<h3>Examples</h3>
-<pre>&lt;p4have /&gt;
-</pre>
-<hr>
-
-
-
-
-<h2><a name="p4label">P4Label</a></h2>
-<h3>Description:</h3>
-<p>Create a new label and set contents to reflect current client file revisions.
-</p>
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">name</td>
-    <td valign="top">The name of the label</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">view</td>
-    <td valign="top">client view to use for label</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">desc</td>
-    <td valign="top">Label Description</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">lock</td>
-    <td valign="top">Lock the label once created.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-
-
-</table>
-<h3>Examples</h3>
-<pre>
-&lt;p4label
-	name=&quot;NightlyBuild:${DSTAMP}:${TSTAMP}&quot; 
-	desc=&quot;Auto Nightly Build&quot;
-	lock=&quot;locked&quot;
-/&gt;
-</pre>
-<hr>
-
-
-<h2><a name="p4counter">P4Counter</a></h2>
-<h3>Description:</h3>
-<p>
-Obtain or set the value of a counter. When used in its base form
-(where only the counter name is provided), the counter value will be
-printed to the output stream. When the value is provided, the counter
-will be set to the value provided. When a property name is provided,
-the property will be filled with the value of the counter. You may
-not specify to both get and set the value of the counter in the same
-Task.
-</p>
-<P>
-The user performing this task must have Perforce &quot;review&quot; permissions
-as defined by Perforce protections in order for this task to succeed.
-</P>
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">name</td>
-    <td valign="top">The name of the counter</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">value</td>
-    <td valign="top">The new value for the counter</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">property</td>
-    <td valign="top">The property to be set with the value of the counter</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-</table>
-
-<h3>Examples</h3>
-Print the value of the counter named &quot;last-clean-build&quot; to the output stream:
-<pre>
-&lt;p4counter name=&quot;last-clean-build&quot; /&gt;
-</PRE>
-Set the value of the counter based on the value of the &quot;TSTAMP&quot; property:
-<PRE>
-&lt;p4counter name=&quot;last-clean-build&quot; value=&quot;${TSTAMP}&quot; /&gt;
-</PRE>
-Set the value of the &quot;p4.last.clean.build&quot; property to the current
-value of the &quot;last-clean-build&quot; counter:
-<PRE>
-&lt;p4counter name=&quot;last-clean-build&quot; property=&quot;${p4.last.clean.build}&quot; /&gt;
-</pre>
-<hr>
-
-
-
-
-<h2><a name="p4reopen">P4Reopen</a></h2>
-<h3>Description:</h3>
-<p>
-Move (or reopen in Perforce speak) checkout files between changelists.
-</p>
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">tochange</td>
-    <td valign="top">The changelist to move files to.</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-</table>
-
-<h3>Examples</h3>
-Move all open files to the default changelist
-<pre>
-&lt;p4reopen view=&quot;//...&quot; tochange=&quot;default&quot; /&gt;
-</PRE>
-Create a new changelist then reopen into it, any files from the view //projects/foo/main/...
-<PRE>
-&lt;p4change description="Move files out of the way" /&gt;
-&lt;p4reopen view=&quot;//projects/foo/main/...&quot; tochange=&quot;${p4.change}&quot; /&gt;
-</pre>
-<hr>
-
-
-
-<h2><a name="p4revert">P4Revert</a></h2>
-<h3>Description:</h3>
-<p>
-Reverts files.
-</p>
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">change</td>
-    <td valign="top">The changelist to revert.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">revertOnlyUnchanged</td>
-    <td valign="top">Revert only unchanged files (p4 revert -a)</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  
-</table>
-
-<h3>Examples</h3>
-Revert everything!
-<pre>
-&lt;p4revert view=&quot;//...&quot; /&gt;
-</PRE>
-Revert any unchanged files in the default change
-<PRE>
-&lt;p4revert change="default" revertonlyunchanged=&quot;true&quot; /&gt;
-</pre>
-<hr>
-
-<h2><a name="p4add">P4Add</a></h2>
-<h3>Description:</h3>
-<p>
-Adds files specified in nested fileset children.
-</p>
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">commandlength</td>
-    <td valign="top">A positive integer specifying the maximum length
-        of the commandline when calling Perforce to add the files. 
-        Defaults to 450, higher values mean faster execution,
-        but also possible failures.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">changelist</td>
-    <td valign="top">If specified the open files are associated with the
-specified pending changelist number; otherwise the open files are
-associated with the default changelist.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  
-</table>
-
-<h3>Examples</h3>
-Require a changelist, add all java files starting from a directory,
-and submit
-
-<pre>
-&lt;p4change/&gt;
-&lt;p4add commandlength=&quot;20000&quot; changelist=&quot;${p4.change}&quot;&gt;
-    &lt;fileset dir=&quot;../dir/src/&quot; includes=&quot;**/*.java&quot;/&gt;
-&lt;p4add&gt;
-&lt;p4submit change=&quot;${p4.change}&quot;/&gt;
-</pre>
-
-<h2><a name="changes">Change History</a></h2>
-<table border="1" cellpadding="2" cellspacing="0">
-<tr>
-    <td valign="top">Sept 2000</td>
-    <td valign="top" align="center">--</td>
-    <td valign="top">Internal Release within Rubus</td>
-</tr>
-
-<tr>
-    <td valign="top">Nov 2000</td>
-    <td valign="top">V1.0</td>
-    <td valign="top">Initial Release donated to ASF :-)</td>
-</tr>
-<tr>
-    <td valign="top">Jan 2001</td>
-    <td valign="top">V1.1</td>
-    <td valign="top">fixed cross platform (NT/Unix) bug<br>refactored p4 output handling code<br>refactored exec'ing code</td>
-</tr>
-</table>
-<hr>
-<p align="center">Copyright &copy; 2001-2002 Apache Software Foundation. All rights
-Reserved.</p>
-</body>
-</html>
diff --git a/docs/manual/OptionalTasks/propertyfile.html b/docs/manual/OptionalTasks/propertyfile.html
deleted file mode 100644
index c8c197d..0000000
--- a/docs/manual/OptionalTasks/propertyfile.html
+++ /dev/null
@@ -1,191 +0,0 @@
-<html>
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>PropertyFile Task</title>
-</head>
-
-<body>
-
-<h1>PropertyFile</h1>
-<p>by</p>
-<!-- Names are in alphabetical order, on last name -->
-<ul>
-  <li>Thomas Christen (<a href="mailto:chr@active.ch">chr@active.ch</a>)</li>
-  <li>Jeremy Mawson (<a href="mailto:jem@loftinspace.com.au">jem@loftinspace.com/au</a>)</li>
-</ul>
-
-<hr>
-<h2>Table of Contents</h2>
-<ul>
-  <li><a href="#introduction">Introduction</a></li>
-  <li><a href="#proptask">PropertyFile Task</a></li>
-  <li><a href="#entryElement">Entry Task</a></li>
-</ul>
-
-<hr>
-<h2><a name="introduction">Introduction</a></h2>
-<p>Ant provides an optional task for editing property files.  This is very useful
-when wanting to make unattended modifications to configuration files for application
-servers and applications.  Currently, the task maintains a working property file with
-the ability to add properties or make changes to existing ones.  However, any comments
-are lost.</p>
-
-<hr>
-<h2><a name="proptask">PropertyFile Task</a></h2>
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-<tr>
-  <td width="12%" valign="top"><b>Attribute</b></td>
-  <td width="78%" valign="top"><b>Description</b></td>
-  <td width="10%" valign="top"><b>Required</b></td>
-</tr>
-<tr>
-  <td width="12%" valign="top">file</td>
-  <td width="78%" valign="top">Location of the property file to be edited</td>
-  <td width="10%" valign="top">Yes</td>
-</tr>
-<tr>
-  <td width="12%" valign="top">comment</td>
-  <td width="78%" valign="top">Header for the file itself</td>
-  <td width="10%" valign="top">no</td>
-</tr>
-</table>
-
-<h3>Parameters specified as nested elements</h3>
-<h4><a name="entryElement">Entry</a></h4>
-<p>Use nested <code>&lt;entry&gt;</code>
-elements to specify actual modifications to the property file itself.</p>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">key</td>
-    <td valign="top">Name of the property name/value pair</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">value</td>
-    <td valign="top">Value to set (=), to add (+) or subtract (-)</td>
-    <td valign="top" align="center" rowspan="2">At least one must be specified</td>
-  </tr>
-  <tr>
-    <td valign="top">default</td>
-    <td valign="top">Initial value to set for a property if it is not
-                     already defined in the property file.<br>
-                     For type date, an additional keyword is allowed: &quot;now&quot;</td>
-    </tr>
-  <tr>
-    <td valign="top">type</td>
-    <td valign="top">Regard the value as : int, date or string (default)</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">operation</td>
-    <td valign="top">&quot;+&quot; or &quot;=&quot; (default) for all datatypes<br>&quot;-&quot; (for date and int only).<br>
-    </td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">pattern</td>
-    <td valign="top">For int and date type only. If present, Values will
-                     be parsed and formatted accordingly.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">unit</td>
-    <td valign="top">The unit of the value to be applied to date +/- operations.
-                     Valid Values are:
-                     <ul>
-                        <li>millisecond</li>
-                        <li>second</li>
-                        <li>minute</li>
-                        <li>hour</li>
-                        <li>day (default)</li>
-                        <li>week</li>
-                        <li>month</li>
-                        <li>year</li>
-                     </ul>
-                     This only applies to date types using a +/- operation.
-    </td>
-    <td align="center" valign="top">No</td>
-  </tr>
-</table>
-<p>The rules used when setting a property value are shown below.&nbsp; The
-operation occurs <b>after</b> these rules are considered.</p>
-
-<ul>
-  <li>If only value is specified, the property is set to it regardless of its
-  previous value.</li>
-  <li>If only default is specified and the property previously existed in the
-  property file, it is unchanged.</li>
-  <li>If only default is specified and the property did not exist in the
-  property file, the property is set to default.</li>
-  <li>If value and default are both specified and the property previously
-  existed in the property file, the property is set to value.</li>
-  <li>If value and default are both specified and the property did not exist in
-  the property file, the property is set to default.</li>
-</ul>
-<p>&nbsp;</p>
-
-<h3>Examples</h3>
-
-<p>The following changes the my.properties file.  Assume my.properties look like:</p>
-
-<pre># A comment
-akey=novalue</pre>
-
-<p>After running, the file would now look like
-</p>
-<pre>#Thu Nov 02 23:41:47 EST 2000
-akey=avalue
-adate=2000/11/02 23\:41
-anint=1
-formated.int=0014
-formated.date=028 17\:34
-</pre>
-<p>
-The slashes conform to the expectations of the Properties class.  The file will be stored in a manner so that each character is examined and escaped if necessary.  Note that the original comment is now lost.  Please keep this in mind when running this task against heavily commented properties files.  It may be best to have a commented version in the source tree, copy it to a deployment area, and then run the modifications on the copy.  Future versions of PropertyFile will hopefully eliminate this shortcoming.
-</p>
-
-<blockquote><pre>&lt;propertyfile
-    file=&quot;my.properties&quot;
-    comment&quot;My properties&quot; &gt;
-  &lt;entry  key=&quot;akey&quot; value=&quot;avalue&quot; /&gt;
-  &lt;entry  key=&quot;adate&quot; type=&quot;date&quot; value=&quot;now&quot;/&gt;
-  &lt;entry  key=&quot;anint&quot; type=&quot;int&quot; operation=&quot;+&quot;/&gt;
-  &lt;entry  key=&quot;formated.int&quot; type=&quot;int&quot; default=&quot;0013&quot; operation=&quot;+&quot; pattern=&quot;0000&quot;/&gt;
-  &lt;entry  key=&quot;formated.date&quot; type=&quot;date&quot; value=&quot;now&quot; pattern=&quot;DDD HH:mm&quot;/&gt;
-&lt;/propertyfile&gt;
-</pre></blockquote>
-<p>
-To produce dates relative from today :</p>
-<blockquote><pre>&lt;propertyfile
-    file=&quot;my.properties&quot;
-    comment=&quot;My properties&quot; &gt;
-  &lt;entry  key=&quot;formated.date-1&quot;
-      type=&quot;date&quot; default=&quot;now&quot; pattern=&quot;DDD&quot;
-      operation=&quot;-&quot; value=&quot;1&quot;/&gt;
-  &lt;entry  key=&quot;formated.tomorrow&quot;
-      type=&quot;date&quot; default=&quot;now&quot; pattern=&quot;DDD&quot;
-      operation=&quot;+&quot; value=&quot;1&quot;/&gt;
-&lt;/propertyfile&gt;
-</pre></blockquote>
-
-<p>
-Concatenation of strings :</p>
-<blockquote><pre>&lt;propertyfile
-    file=&quot;my.properties&quot;
-    comment=&quot;My properties&quot; &gt;
-  &lt;entry  key=&quot;progress&quot; default=&quot;&quot; operation=&quot;+&quot; value=&quot;.&quot;/&gt;
-&lt;/propertyfile&gt;
-</pre></blockquote>
-<p>Each time called, a &quot;.&quot; will be appended to &quot;progress&quot;
-</p>
-<hr>
-<p align="center">Copyright &copy; 2001-2002 Apache Software Foundation. All rights
-Reserved.</p>
-</body>
-</html>
diff --git a/docs/manual/OptionalTasks/pvcstask.html b/docs/manual/OptionalTasks/pvcstask.html
deleted file mode 100644
index 87f30a0..0000000
--- a/docs/manual/OptionalTasks/pvcstask.html
+++ /dev/null
@@ -1,235 +0,0 @@
-<!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 http-equiv="Content-Language" content="en-us">
-   <title>PVCS task</title>
-</head>
-<body>
-
-<h1>
-Ant Pvcs Task User Manual</h1>
-by
-<br><!-- Names are in alphabetical order, on last name -->
-<ul>
-  <li>Thomas Christensen (<a href="mailto:tchristensen@nordija.com">tchristensen@nordija.com</a>)</li>
-  <li>Don Jeffery (<a href="mailto:donj@apogeenet.com">donj@apogeenet.com</a>)</li>
-</ul>
-Version 1.1 - 2001/06/27<br>
-<p>Problems with UNC pathnames and the use of () in paths are fixed and an updateonly 
-  argument introduced.</p>
-Version 1.0 - 2001/01/31<br>
-<p>Initial release.</p>
-<hr>
-<h2>
-Table of Contents</h2>
-<ul>
-  <li><a href="#introduction">Introduction</a></li>
-  <li><a href="#pvcs">Pvcs Task</a></li>
-</ul>
-<hr>
-
-<h2><a NAME="introduction">Introduction</a></h2>
-The pvcs task allows the user of ant to extract the latest edition
-of the source code from a PVCS repository. PVCS is a version control system
-developed by <a href="http://www.merant.com/products/pvcs">Merant</a>.
-<br>
-Before using this tag, the user running ant must have access to the commands 
-of PVCS (get and pcli) and must have access to the repository. Note that the way to specify
-the repository is platform dependent so use property to specify location of repository.
-<br>
-This version has been tested agains PVCS version 6.5 and 6.6 under Windows and Solaris.
-
-<hr>
-<h2><a NAME="pvcs">Pvcs Task</a></h2>
-<h3>Description</h3>
-The pvcs task is set to point at a PVCS repository and optionally a project
-within that repository, and can from that specification get the latest
-version of the files contained by the repository.
-<h3>
-Parameters</h3>
-
-<table BORDER CELLSPACING=0 CELLPADDING=2 >
-<tr>
-<td VALIGN=TOP WIDTH="12%"><b>Attribute</b></td>
-
-<td VALIGN=TOP WIDTH="78%"><b>Description</b></td>
-
-<td VALIGN=TOP WIDTH="10%"><b>Required</b></td>
-</tr>
-
-<tr>
-<td VALIGN=TOP WIDTH="12%">repository</td>
-
-<td VALIGN=TOP WIDTH="78%">The location of the repository (see your PVCS
-manuals)</td>
-
-<td VALIGN=TOP WIDTH="10%">Yes</td>
-</tr>
-
-<tr>
-<td VALIGN=TOP WIDTH="12%">pvcsproject</td>
-
-<td VALIGN=TOP WIDTH="78%">The project within the PVCS repository to extract
-files from (&quot;/&quot; is root project and that is default if this attribute isn't
-specified)</td>
-
-<td VALIGN=TOP WIDTH="10%">No</td>
-</tr>
-
-<tr>
-<td VALIGN=TOP WIDTH="12%">label</td>
-
-<td VALIGN=TOP WIDTH="78%">Only files marked with this label are extracted.</td>
-
-<td VALIGN=TOP WIDTH="10%">No</td>
-</tr>
-
-<tr>
-<td VALIGN=TOP WIDTH="12%">promotiongroup</td>
-
-<td VALIGN=TOP WIDTH="78%">Only files within this promotion group are extracted. Using 
-both the <i>label</i> and the <i>promotiongroup</i> tag will cause the files in the 
-promotion group and with that label to be extracted.
-</td>
-
-<td VALIGN=TOP WIDTH="10%">No</td>
-</tr>
-
-<tr>
-<td VALIGN=TOP WIDTH="12%">force</td>
-
-<td VALIGN=TOP WIDTH="78%">If set to <i>yes</i> all files that exists and are writable are overwritten. Default <i>no</i> causes the files that are writable to be ignored. This stops the PVCS command <i>get</i> to stop asking questions!</td>
-
-<td VALIGN=TOP WIDTH="10%">No</td>
-</tr>
-
-<tr>
-<td VALIGN=TOP WIDTH="12%">workspace</td>
-
-<td VALIGN=TOP WIDTH="78%">By specifying a workspace, the files are extracted to that location. A PVCS workspace is a
-name for a location of the workfiles and isn't as such the location itself. You define the location for a workspace
-using the PVCS GUI clients. If this isn't specified the default workspace for the current user is used.</td>
-
-<td VALIGN=TOP WIDTH="10%">No</td>
-</tr>
-
-<tr>
-<td VALIGN=TOP WIDTH="12%">pvcsbin</td>
-
-<td VALIGN=TOP WIDTH="78%">On some systems the PVCS executables <i>pcli</i>
-and <i>get</i> are not found in the PATH. In such cases this attribute
-should be set to the bin directory of the PVCS installation containing
-the executables mentioned before. If this attribute isn't specified the
-tag expects the executables to be found using the PATH environment variable.</td>
-
-<td VALIGN=TOP WIDTH="10%">No</td>
-</tr>
-    <tr> 
-      <td VALIGN=TOP WIDTH="12%">ignorereturncode</td>
-      <td VALIGN=TOP WIDTH="78%">If set to <i>true</i> the return value from executing 
-        the pvcs commands are ignored.</td>
-      <td VALIGN=TOP WIDTH="10%">No</td>
-    </tr>
-    <tr> 
-      <td VALIGN=TOP WIDTH="12%">updateonly</td>
-      <td VALIGN=TOP WIDTH="78%">If set to <i>true</i> files are gotten only if 
-        newer than existing local files.</td>
-      <td VALIGN=TOP WIDTH="10%">No</td>
-    </tr>
-</table>
-<h3><a name="nested">Nested Elements</a></h3>
-
-<h3>pvcsproject element</h3>
-<p><code>pvcs</code> supports a nested
-<code>&lt;pvcsproject&gt;</code> element, that represents a project
-within the PVCS repository to extract files from.  By nesting multiple
-<code>&lt;pvcsproject&gt;</code> elements under the
-<code>&lt;pvcs&gt;</code> task, multiple projects can be
-specified.</p>
-
-<h3>Parameters</h3>
-
-<table BORDER CELLSPACING=0 CELLPADDING=2 >
-<tr>
-<td VALIGN=TOP WIDTH="12%"><b>Attribute</b></td>
-
-<td VALIGN=TOP WIDTH="78%"><b>Description</b></td>
-
-<td VALIGN=TOP WIDTH="10%"><b>Required</b></td>
-</tr>
-
-<tr>
-<td VALIGN=TOP WIDTH="12%">name</td>
-
-<td VALIGN=TOP WIDTH="78%">The name of the pvcs project</td>
-
-<td VALIGN=TOP WIDTH="10%">Yes</td>
-</tr>
-</table>
-
-<h3>Examples</h3>
-The following set-up extracts the latest version of the files in the pvcs repository.
-<pre>
-  &lt;!-- =================================================================== --&gt;
-  &lt;!-- Get the latest version                                              --&gt;
-  &lt;!-- =================================================================== --&gt;
-  &lt;target name=&quot;getlatest&quot;&gt;
-    &lt;pvcs repository=&quot;/mnt/pvcs&quot; pvcsproject=&quot;/myprj&quot;/&gt;
-  &lt;/target&gt;</ul>
-</pre>
-<p>Now run:</p>
-<code>ant getlatest</code>
-<p>This will cause the following output to appear:</p>
-<pre>
-  getlatest:
-  [pvcs] PVCS Version Manager (VMGUI) v6.6.10 (Build 870) for Windows NT/80x86
-  [pvcs] Copyright 1985-2000 MERANT. All rights reserved.
-  [pvcs] PVCS Version Manager (get) v6.6.10 (Build 870) for Windows NT/80x86
-  [pvcs] Copyright 1985-2000 MERANT. All rights reserved.
-  [pvcs] c:\myws\myprj\main.java &lt;- C:\mypvcs\archives\myprj\main.java-arc
-  [pvcs] rev 1.1
-  [pvcs] c:\myws\myprj\apache\tool.java &lt;- C:\mypvcs\archives\myprj\apache\tools.java-arc
-  [pvcs] rev 1.5
-
-  BUILD SUCCESSFUL
-
-  Total time: 19 seconds</pre>
-
-This next example extracts the latest version of the files in the pvcs
-repository from two projects using nested &lt;pvcsproject&gt; elements.
-<pre>
-  &lt;!-- ===================================================================--&gt;
-  &lt;!-- Get latest from myprj and myprj2                                   --&gt;
-  &lt;!-- ===================================================================--&gt;
-  &lt;target name=&quot;getlatest2&quot;&gt;
-    &lt;pvcs repository=&quot;/mnt/pvcs&quot;&gt;
-      &lt;pvcsproject name=&quot;/myprj&quot;/&gt;
-      &lt;pvcsproject name=&quot;/myprj2&quot;/&gt;
-    &lt;/pvcs&gt;
-  &lt;/target&gt;</ul>
-</pre>
-<p>Now run:</p>
-<code>ant getlatest2</code>
-<p>This will cause the following output to appear:</p>
-<pre>
-  getlatest2:
-  [pvcs] PVCS Version Manager (VMGUI) v6.6.10 (Build 870) for Windows NT/80x86
-  [pvcs] Copyright 1985-2000 MERANT.  All rights reserved.
-  [pvcs] PVCS Version Manager (get) v6.6.10 (Build 870) for Windows NT/80x86
-  [pvcs] Copyright 1985-2000 MERANT.  All rights reserved.
-  [pvcs] c:\myws\myprj\main.java &lt;- C:\mypvcs\archives\myprj\main.java-arc
-  [pvcs] rev 1.1
-  [pvcs] c:\myws\myprj\apache\tool.java &lt;- C:\mypvcs\archives\myprj\apache\tool.java-arc
-  [pvcs] rev 1.5
-  [pvcs] c:\myws\myprj2\apache\tool2.java &lt;- C:\mypvcs\archives\myprj2\apache\tool2.java-arc
-  [pvcs] rev 1.2
-
-  BUILD SUCCESSFUL
-
-  Total time: 22 seconds</pre>
-
-<hr WIDTH="100%">
-PVCS is a registered trademark of MERANT.
-</body>
-</html>
diff --git a/docs/manual/OptionalTasks/renameextensions.html b/docs/manual/OptionalTasks/renameextensions.html
deleted file mode 100644
index a10b440..0000000
--- a/docs/manual/OptionalTasks/renameextensions.html
+++ /dev/null
@@ -1,108 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>RenameExtensions Task</title>
-</head>
-
-<body>
-
-<h2><a name="renameexts">RenameExtensions</a></h2>
-<h3><i>Deprecated</i></h3>
-<p><i>This task has been deprecated.  Use the <a href="../CoreTasks/move.html">move</a>
-task with a <a href="../CoreTypes/mapper.html#glob-mapper">glob mapper</a> instead.</i></p>
-<h3>Description</h3>
-<p>Renames files in the <code>srcDir</code> directory ending with the
-<code>fromExtension</code> string so that they end with the 
-<code>toExtension</code> string. Files are only replaced if 
-<code>replace</code> is true
-</p>
-<p>See the section on 
-<a href="../dirtasks.html#directorybasedtasks">directory based tasks</a>, on how the
-inclusion/exclusion of files works, and how to write patterns. 
-This task forms an implicit <a href="../CoreTypes/fileset.html">FileSet</a> and
-supports all attributes of <code>&lt;fileset&gt;</code>
-(<code>dir</code> becomes <code>srcDir</code>) as well as the nested
-<code>&lt;include&gt;</code>, <code>&lt;exclude&gt;</code> and
-<code>&lt;patternset&gt;</code> elements.</p>
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">defaultexcludes</td>
-    <td valign="top">indicates whether default excludes should be used or not
-      (&quot;yes&quot;/&quot;no&quot;). Default excludes are used when
-      omitted.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">excludes</td>
-    <td valign="top">comma separated list of patterns of files that must be
-      excluded. No files (except default excludes) are excluded when
-      omitted.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">excludesfile</td>
-    <td valign="top">the name of a file. Each line of this file is
-      taken to be an exclude pattern</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">fromExtention</td>
-    <td valign="top">The string that files must end in to be renamed</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">includes</td>
-    <td valign="top">comma separated list of patterns of files that must be
-      included. All files are included when omitted.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">includesfile</td>
-    <td valign="top">the name of a file. Each line of this file is
-      taken to be an include pattern</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">replace</td>
-    <td valign="top">Whether the file being renamed to should be
-      replaced if it already exists</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">srcDir</td>
-    <td valign="top">The starting directory for files to search in</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">toExtension</td>
-    <td valign="top">The string that renamed files will end with on
-      completion</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-</table>
-<h3>Examples</h3>
-<blockquote>
-  <p><code>&lt;renameext srcDir=&quot;/source/project1&quot;
-              includes=&quot;**&quot;
-              excludes=&quot;**/samples/*&quot;
-              fromExtension=&quot;.java.keep&quot;
-              toExtension=&quot;.java&quot;
-              replace=&quot;true&quot;/&gt;
-</code>
-  </p>
-</blockquote>
-
-<hr>
-<p align="center">Copyright &copy; 2001 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/OptionalTasks/replaceregexp.html b/docs/manual/OptionalTasks/replaceregexp.html
deleted file mode 100644
index 19c6d3e..0000000
--- a/docs/manual/OptionalTasks/replaceregexp.html
+++ /dev/null
@@ -1,132 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>ReplaceRegeExp Task</title>
-</head>
-
-<body>
-
-<h2><a name="replace">ReplaceRegExp</a></h2>
-<h3>Description</h3>
-<p>ReplaceRegExp is a directory based task for replacing the
-occurrence of a given regular expression with a substitution pattern
-in a selected file or set of files.</p>
-
-<p>Similar to <a href="../CoreTypes/mapper.html#regexp-mapper">regexp
-type mappers</a> this task needs a supporting regular expression
-library and an implementation of
-<code>org.apache.tools.ant.util.regexp.Regexp</code>.  Ant comes with
-implementations for
-<a href="http://java.sun.com/j2se/1.4/docs/api/java/util/regex/package-summary.html" target="_top">the java.util.regex package of JDK 1.4</a>,
-<a href="http://jakarta.apache.org/regexp/" target="_top">jakarta-regexp</a>
-and <a href="http://jakarta.apache.org/oro/" target="_top">jakarta-ORO</a>,
-but you will still need the library itself.</p>
-<p>
-<i>
-There are cross-platform issues for matches related to line terminator.
-For example if you use $ to anchor your regular expression on the end of a line
-the results might be very different depending on both your platform and the regular
-expression library you use. It is 'highly recommended' that you test your pattern on
-both Unix and Windows platforms before you rely on it.
-<ul>
-    <li>Jakarta Oro defines a line terminator as '\n' and is consistent with Perl.</li>
-    <li>Jakarta RegExp uses a system-dependant line terminator.</li>
-    <li>JDK 1.4 uses '\n', '\r\n', '\u0085', '\u2028', '\u2029' as a default
-    but is configured in the wrapper to use only '\n' (UNIX_LINE)</li>
-</ul>
-We <b>strongly</b> recommend that you use Jakarta Oro.
-</i>
-</p>
-
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">file</td>
-    <td valign="top">file for which the regular expression should be replaced.</td>
-    <td align="center">Yes if no nested &lt;fileset&gt; is used</td>
-  </tr>
-  <tr>
-    <td valign="top">match</td>
-    <td valign="top">The regular expression pattern to match in the file(s)</td>
-    <td align="center">Yes, if no nested &lt;regexp&gt; is used</td>
-  </tr>
-  <tr>
-    <td valign="top">replace</td>
-    <td valign="top">The substitution pattern to place in the file(s) in place
-                     of the regular expression.</td>
-    <td align="center">Yes, if no nested &lt;substitution&gt; is used</td>
-  </tr>
-  <tr>
-    <td valign="top">flags</td>
-    <td valign="top">The flags to use when matching the regular expression.  For more
-                     information, consult the Perl5 syntax<br />
-                     g --> Global replacement.  Replace all occurences found<br />
-                     i --> Case Insensitive.  Do not consider case in the match<br />
-                     m --> Multiline.  Treat the string as multiple lines of input, using "^" and "$" as the start or end of any line, respectively, rather than start or end of string.<br />
-                     s --> Singleline.  Treat the string as a single line of input, using "." to match any character, including a newline, which normally, it would not match.<br />
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">byline</td>
-    <td valign="top">Process the file(s) one line at a time, executing the replacement
-                     on one line at a time (<i>true/false</i>).  This is useful if you
-                     want to only replace the first occurence of a regular expression on
-                     each line, which is not easy to do when processing the file as a whole.
-                     Defaults to <i>false</i>.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-</table>
-<h3>Examples</h3>
-<pre>  &lt;replaceregexp file=&quot;${src}/build.properties&quot;
-                         match=&quot;OldProperty=(.*)&quot;
-                         replace=&quot;NewProperty=\1&quot;
-                         byline=&quot;true&quot; /&gt;
-</pre>
-<p>replaces occurrences of the property name &quot;OldProperty&quot;
- with &quot;NewProperty&quot; in a properties file, preserving the existing
-value, in the file <code>${src}/build.properties</code></p>
-<h3>Parameters specified as nested elements</h3>
-<p>This task supports a nested <a href="../CoreTypes/fileset.html">FileSet</a>
-   element.</p>
-<p>This task supports a nested <i>Regexp</i> element to specify
-   the regular expression.  You can use this element to refer to a previously
-   defined regular expression datatype instance.</p>
-<blockquote>
-     &lt;regexp id="id" pattern="expression" /&gt;<br />
-     &lt;regexp refid="id" /&gt;
-</blockquote>
-<p>This task supports a nested <i>Substitution</i> element to specify
-   the substitution pattern.  You can use this element to refer to a previously
-   defined substitution pattern datatype instance.</p>
-<blockquote>
-     &lt;substitution id="id" pattern="expression" /&gt;<br />
-     &lt;substitution refid="id" /&gt;
-</blockquote>
-<h3>Examples</h3>
-<blockquote>
-  <pre>
-&lt;replaceregexp byline=&quot;true&quot;&gt;
-  &lt;regexp expression=&quot;OldProperty=(.*)&quot; /&gt;
-  &lt;substitution expression=&quot;NewProperty=\1&quot; /&gt;
-  &lt;fileset dir=&quot;.&quot;&gt;
-   &lt;includes=&quot;*.properties&quot; /&gt;
-  &lt;/fileset&gt;
- &lt;/replaceregexp&gt;
-</pre></blockquote>
-<p>replaces occurrences of the property name &quot;OldProperty&quot;
- with &quot;NewProperty&quot; in a properties file, preserving the existing
-value, in all files ending in <code>.properties</code> in the current directory</p>
-
-<hr>
-<p align="center">Copyright &copy; 2001-2002 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/OptionalTasks/rpm.html b/docs/manual/OptionalTasks/rpm.html
deleted file mode 100644
index a1fc945..0000000
--- a/docs/manual/OptionalTasks/rpm.html
+++ /dev/null
@@ -1,67 +0,0 @@
-<html>
-
-<head>
-<title>Rpm Task</title>
-</head>
-
-<body>
-
-<h2><a name="rpm">Rpm</a></h2>
-<h3>Description</h3>
-<p>
-  A basic task for invoking the rpm executable to build a Linux installation
-  file. The task currently only works on Linux or other Unix platforms
-  with rpm support.
-</p>
-
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">specFile</td>
-    <td valign="top">The name of the spec File to be used.</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">topDir</td>
-    <td valign="top">
-      this is the directory which will have the expected
-      subdirectories, SPECS, SOURCES, BUILD, SRPMS.  If this isn't specified,
-      the baseDir value is used
-    </td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">cleanBuildDir</td>
-    <td valign="top">his will remove the generated files in the BUILD
-directory.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">removeSpec</td>
-    <td valign="top">this will remove the spec file from SPECS</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">command</td>
-    <td valign="top">very similar idea to the cvs task.  the default is "-bb"</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">output/error</td>
-    <td valign="top">where standard output and error go</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-</table>
-<hr>
-
-<p align="center">Copyright &copy; 2001 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/OptionalTasks/script.html b/docs/manual/OptionalTasks/script.html
deleted file mode 100644
index 050bf4b..0000000
--- a/docs/manual/OptionalTasks/script.html
+++ /dev/null
@@ -1,123 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Script Task</title>
-</head>
-
-<body>
-
-<h2><a name="script">Script</a></h2>
-<h3>Description</h3>
-<p>Execute a script in a 
-  <a href="http://www-124.ibm.com/developerworks/projects/bsf" target="_top">BSF</a> supported language.</p>
-<p><b>Note:</b> This task depends on external libraries not included in the Ant distribution.
-See <a href="../install.html#librarydependencies">Library Dependencies</a> for more information.</p>
-<p>All items (tasks, targets, etc) of the running project are
-accessible from the script, using either their <code>name</code> or
-<code>id</code> attributes.  The name "project" is a pre-defined reference to the Project, which can be used instead of the project name.</p>
-<p>Scripts can do almost anything a task written in Java could do.</p>
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">language</td>
-    <td valign="top">The programming language the script is written in.
-      Must be a supported BSF language</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">src</td>
-    <td valign="top">The location of the script as a file, if not inline</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-</table>
-<h3>Examples</h3>
-<blockquote><pre>
-&lt;project name=&quot;squares&quot; default=&quot;main&quot; basedir=&quot;.&quot;&gt;
-
-  &lt;target name=&quot;setup&quot;&gt;
-
-    &lt;script language=&quot;javascript&quot;&gt; &lt;![CDATA[
-
-      for (i=1; i&lt;=10; i++) {
-        echo = squares.createTask(&quot;echo&quot;);
-        main.addTask(echo);
-        echo.setMessage(i*i);
-      }
-
-    ]]&gt; &lt;/script&gt;
-
-  &lt;/target&gt;
-
-  &lt;target name=&quot;main&quot; depends=&quot;setup&quot;/&gt;
-
-&lt;/project&gt;
-</pre></blockquote>
-<p>generates</p>
-<blockquote><pre>
-setup:
-
-main:
-1
-4
-9
-16
-25
-36
-49
-64
-81
-100
-
-BUILD SUCCESSFUL
-</pre></blockquote>
-<p>Another example, using <a href="../using.html#references">references by id</a>
-and two different scripting languages:</p>
-<blockquote><pre>
-&lt;project name=&quot;testscript&quot; default=&quot;main&quot;&gt;
-  &lt;target name=&quot;sub&quot;&gt;
-    &lt;echo id=&quot;theEcho&quot;/&gt;
-  &lt;/target&gt;
-
-  &lt;target name=&quot;sub1&quot;&gt;
-    &lt;script language=&quot;netrexx&quot;&gt;&lt;![CDATA[
-      theEcho.setMessage(&quot;In sub1&quot;)
-      sub.execute
-    ]]&gt;&lt;/script&gt;
-  &lt;/target&gt;
-
-  &lt;target name=&quot;sub2&quot;&gt;
-    &lt;script language=&quot;javascript&quot;&gt;&lt;![CDATA[
-      theEcho.setMessage(&quot;In sub2&quot;);
-      sub.execute();
-    ]]&gt;&lt;/script&gt;
-  &lt;/target&gt;
-
-  &lt;target name=&quot;main&quot; depends=&quot;sub1,sub2&quot;/&gt;
-&lt;/project&gt;
-</pre></blockquote>
-<p>generates</p>
-<blockquote><pre>
-sub1:
-In sub1
-
-sub2:
-In sub2
-
-main:
-
-BUILD SUCCESSFUL
-</pre></blockquote>
-
-<hr>
-<p align="center">Copyright &copy; 2001-2002 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/OptionalTasks/serverdeploy.html b/docs/manual/OptionalTasks/serverdeploy.html
deleted file mode 100644
index 39f9c6a..0000000
--- a/docs/manual/OptionalTasks/serverdeploy.html
+++ /dev/null
@@ -1,318 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>ServerDeploy Task</title>
-
-</head>
-
-<body>
-
-<h1><a name="serverdeploy">ANT ServerDeploy User Manual</a></h1>
-<p>by</p>
-<!-- Names are in alphabetical order, on last name -->
-<ul>
-<li>Christopher A. Longo (<a href="mailto:cal@cloud9.net">cal@cloud9.net</a>)</li>
-<li>Cyrille Morvan (<a href="mailto:cmorvan@ingenosya.com">cmorvan@ingenosya.com</a>)</li>
-</ul>
-
-</p>
-<hr>
-<p> At present the tasks support:<br>
-
-<ul>
-<li><a href="http://www.bea.com" target="_top">Weblogic</a> servers</li>
-<li><a href="http://www.objectweb.org/jonas/" target="_top">JOnAS</a>
-2.4 Open Source EJB server</li>
-</ul>
-Over time we expect further optional tasks  to support additional J2EE Servers.
-</p>
-
-<hr>
-
-<table border="1" cellpadding="5">
-<tr><td>Task</td><td colspan="2">Application Servers</td></tr>
-<tr><td rowspan="4"><a href="#serverdeploy_element">serverdeploy</a></td><td colspan="2" align="center"><b>Nested Elements</b></td></tr>
-<tr><td><a href="#serverdeploy_generic">generic</a></td><td>Generic task</td></tr>
-<tr><td><a href="#serverdeploy_jonas">jonas</a></td><td>JOnAS 2.4</td></tr>
-<tr><td><a href="#serverdeploy_weblogic">weblogic</a></td><td>Weblogic</td></tr>
-
-</table>
-
-<a name="serverdeploy_element">
-<h2>ServerDeploy element</h2>
-
-<h3><b>Description:</b></h3>
-
-<p>The <code>serverdeploy</code> task is used to run a "hot" deployment tool for
-vendor-specific J2EE server. The task requires nested elements which define
-the attributes of the vendor-specific deployment tool being executed.
-Vendor-specific deployment tools elements may enforce rules for which
-attributes are required, depending on the tool.
-</p>
-
-<h3>Parameters:</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">action</td>
-    <td valign="top">This is the action to be performed.  For most cases this
-    will be "deploy".  Some tools support additional actions, such as "delete", "list",
-    "undeploy", "update"...</td>
-    <td>Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">source</td>
-    <td valign="top">A fully qualified path/filename of the component to be deployed.
-    This may be an .ear, .jar, .war, or any other type that is supported by the server.
-    </td>
-    <td>Tool dependant</td>
-  </tr>
-</table>
-
-<h3>Nested Elements</h3>
-
-<p>The serverdeploy task supports a nested <code>classpath</code> element to set the classpath.</p>
-
-<h3>Vendor-specific nested elements</h3>
-
-<h3>Parameters used for all tools:</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">classpath</td>
-    <td valign="top">The classpath to be passed to the JVM running the tool.
-    The classpath may also be supplied as a nested element.</td>
-    <td>Tool dependant</td>
-  </tr>
-  <tr>
-    <td valign="top">server</td>
-    <td valign="top">The address or URL for the server where the component will be deployed.</td>
-    <td>Tool dependant</td>
-  </tr>
-  <tr>
-    <td valign="top">username</td>
-    <td valign="top">The user with privileges to deploy applications to the server.</td>
-    <td>Tool dependant</td>
-  </tr>
-  <tr>
-    <td valign="top">password</td>
-    <td valign="top">The password of the user with privileges to deploy applications to the server.</td>
-    <td>Tool dependant</td>
-  </tr>
-</table>
-
-<p>Also supported are nested vendor-specific elements.</p>
-
-<a name="serverdeploy_generic">
-<h3>Generic element</h3>
-This element is provided for generic Java-based deployment tools.
-The generic task accepts (but does not require) nested <code>arg</code>
-and <code>jvmarg</code> elements.
-A JVM will be spawned with the provided attributes.  It is recommended
-that a vendor-specific element be used over the generic one if at all
-possible.
-<p>The following attributes are supported by the generic element.</p>
-<p>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">classname</td>
-    <td valign="top">This is the fully qualified classname of the Java based
-    deployment tool to execute.</td>
-    <td>Yes</td>
-  </tr>
-</table>
-</p>
-
-<h3>Nested Elements</h3>
-<p>The generic element supports nested &lt;arg&gt; and &lt;jvmarg&gt; elements.</p>
-
-<h3>Example</h3>
-
-<p>This example shows the use of generic deploy element to deploy a component
-using a Java based deploy tool:</p>
-
-<pre>
-    &lt;serverdeploy action=&quot;deploy&quot; source=&quot;${lib.dir}/ejb_myApp.ear&quot;&gt;
-        &lt;generic classname="com.yamato.j2ee.tools.deploy.DeployTool"
-            classpath=&quot;${classpath}&quot;
-            username=&quot;${user.name}&quot;
-            password=&quot;${user.password}&quot;&gt;
-            &lt;arg value="-component=WildStar"/&gt;
-            &lt;arg value="-force"/&gt;
-            &lt;jvmarg value="-ms64m"/&gt;
-            &lt;jvmarg value="-mx128m"/&gt;
-        &lt;/generic&gt;
-    &lt;/serverdeploy&gt;
-</pre>
-
-<a name="serverdeploy_weblogic">
-<h3>WebLogic element</h3>
-<p>
-The WebLogic element contains additional attributes to run the
-<code>weblogic.deploy</code> deployment tool.
-<p>Valid actions for the tool are <code>deploy</code>, <code>undeploy</code>,
-<code>list</code>, <code>update</code>, and <code>delete</code>.
-<p>If the action is <code>deploy</code> or <code>update</code>,
-the <code>application</code> and <code>source</code> attributes must be set.
-If the action is <code>undeploy</code> or <code>delete</code>,
-the <code>application</code> attribute must be set.  If the <code>username</code>
-attribute is omitted, it defaults to "system".  The <code>password</code> attribute is
-required for all actions.
-<p>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">application</td>
-    <td valign="top">This is the name of the application being deployed</td>
-    <td>Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">component</td>
-    <td valign="top">This is the component string for deployment targets.
-    It is in the form <code>&lt;component&gt;:&lt;target1&gt;,&lt;target2&gt;...</code>
-    Where component is the archive name (minus the .jar, .ear, .war
-    extension).  Targets are the servers where the components will be deployed</td>
-    <td>Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">debug</td>
-    <td valign="top">If set to true, additional information will be
-    printed during the deployment process.</td>
-    <td>No</td>
-  </tr>
-</table>
-
-
-<h3>Examples</h3>
-
-<p>This example shows the use of serverdeploy to deploy a component to a WebLogic server:</p>
-
-<pre>
-    &lt;serverdeploy action=&quot;deploy&quot; source=&quot;${lib.dir}/ejb_myApp.ear&quot;&gt;
-        &lt;weblogic application=&quot;myapp&quot;
-            server=&quot;t3://myserver:7001&quot;
-            classpath=&quot;${weblogic.home}/lib/weblogic.jar&quot;
-            username=&quot;${user.name}&quot;
-            password=&quot;${user.password}&quot;
-            component=&quot;ejb_foobar:myserver,productionserver&quot;
-            debug=&quot;true&quot;/&gt;
-    &lt;/serverdeploy&gt;
-</pre>
-
-<p>This example shows serverdeploy being used to delete a component from a
-WebLogic server:</p>
-
-<pre>
-    &lt;serverdeploy action=&quot;delete&quot; source=&quot;${lib.dir}/ejb_myApp.jar&quot;/&gt
-        &lt;weblogic application=&quot;myapp&quot
-            server=&quot;t3://myserver:7001&quot;
-            classpath=&quot;${weblogic.home}/lib/weblogic.jar&quot;
-            username=&quot;${user.name}&quot;
-            password=&quot;${user.password}&quot;/&gt;
-    &lt;/serverdeploy&gt;
-</pre>
-
-<a name="serverdeploy_jonas">
-<h3>JOnAS (Java Open Applicaton Server) element</h3>
-<p>
-The JOnAS element contains additional attributes to run the
-<code>JonasAdmin</code> deployment tool.
-<p>Valid actions for the tool are <code>deploy</code>, <code>undeploy</code>,
-<code>list</code> and <code>update</code>.
-<p>You can't use <code>user</code> and <code>password</code> property with this 
-task.
-<p>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">jonasroot</td>
-    <td valign="top">The root directory for JOnAS.</td>
-    <td>Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">orb</td>
-    <td valign="top">Choose your ORB : RMI, JEREMIE, DAVID, ... If omitted, it defaults
-     to the one present in classpath. The corresponding JOnAS JAR is
-     automatically added to the classpath. If your orb is DAVID (RMI/IIOP) you must 
-     specify davidhost and davidport properties.</td>
-    <td>No</td>
-  </tr>
-  <tr>
-    <td valign="top">davidhost</td>
-    <td valign="top">The value for the system property : <code>david.CosNaming.default_host</code> .</td>
-    <td>No</td>
-  </tr>
-  <tr>
-    <td valign="top">davidport</td>
-    <td valign="top">The value for the system property : <code>david.CosNaming.default_port</code> .</td>
-    <td>No</td>
-  </tr>
-  <tr>
-    <td valign="top">classname</td>
-    <td valign="top">This is the fully qualified classname of the Java based
-    deployment tool to execute. Default to <code>org.objectweb.jonas.adm.JonasAdmin</code></td>
-    <td>No</td>
-  </tr>
-
-</table>
-
-<h3>Nested Elements</h3>
-<p>The jonas element supports nested &lt;arg&gt; and &lt;jvmarg&gt; elements.</p>
-
-
-<h3>Examples</h3>
-
-<p>This example shows the use of serverdeploy to deploy a component to a JOnAS server:</p>
-
-<pre>
-    &lt;serverdeploy action=&quot;deploy&quot; source=&quot;${lib.dir}/ejb_myApp.jar&quot;&gt;
-        &lt;jonas server=&quot;MyJOnAS&quot; jonasroot="${jonas.root}" >
-           &lt;classpath&gt;
-               &lt;pathelement path=&quot;${jonas.root}/lib/RMI_jonas.jar&quot; /&gt;
-               &lt;pathelement path=&quot;${jonas.root}/config/&quot; /&gt;
-           &lt;/classpath&gt;
-        &lt;/jonas&gt;
-    &lt;/serverdeploy&gt;
-</pre>
-
-<p>This example shows serverdeploy being used to list the components from a
-JOnAS server and a WebLogic server:</p>
-
-<pre>
-    &lt;serverdeploy action=&quot;list&quot; /&gt
-        &lt;jonas jonasroot=&quot;${jonas.root}&quot; orb=&quot;JEREMIE&quot; /&gt;
-        &lt;weblogic application=&quot;myapp&quot
-            server=&quot;t3://myserver:7001&quot;
-            classpath=&quot;${weblogic.home}/lib/weblogic.jar&quot;
-            username=&quot;${user.name}&quot;
-            password=&quot;${user.password}&quot;/&gt;
-    &lt;/serverdeploy&gt;
-</pre>
-
-
-<hr>
-<p align="center">Copyright &copy; 2002 Apache Software Foundation. All rights Reserved.</p>
-</body>
-</html>
diff --git a/docs/manual/OptionalTasks/sos.html b/docs/manual/OptionalTasks/sos.html
deleted file mode 100644
index 6e74151..0000000
--- a/docs/manual/OptionalTasks/sos.html
+++ /dev/null
@@ -1,526 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-
-  <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
-  <title>SOS Tasks</title>
-
-</head>
-  <body>
-
-<div align="center">
-<h1>SourceOffSite Tasks User Manual</h1>
-
-<div align="left">by
-<ul>
-<li><a href="mailto:jesse@cryptocard.com">Jesse Stockall</a></li>
-</ul>
-Version 1.1 2002/01/23
-<br>
-<br>
-
-<hr width="100%" size="2">
-<h2>Contents</h2>
-
-<ul>
-	<li><a href="#intro">Introduction</a></li>
-    <li><a href="#tasks">The Tasks</a></li>
-
-</ul>
-<br>
-
-<h2><a name="intro">Introduction</a> </h2>
-
-<p>These tasks provide an interface to the <a href="http://msdn.microsoft.com/ssafe/default.asp" target="_top">
-Microsoft Visual SourceSafe</a> SCM via <a href="http://www.sourcegear.com">
-SourceGear's</a> <a href="http://sourcegear.com/sos/index.htm">SourceOffSite</a>
-product. SourceOffSite is an add-on to Microsoft's VSS, that allows remote
-development teams and tele-commuters that need fast and secure read/write
-access to a centralized SourceSafe database via any TCP/IP connection. SOS
-provides Linux ,Solaris &amp; Windows clients. The
-<code> org.apache.tools.ant.taskdefs.optional.sos</code>
-package consists  of a simple framework to support SOS functionality as well
-as some Ant tasks  encapsulating frequently used SOS commands.  Although it
-is possible to use  these commands on the desktop,  they were primarily intended
-to be used by  automated build systems. These tasks have been tested with
-SourceOffSite  version 3.5.1 connecting to VisualSourceSafe 6.0. The tasks
-have been tested with Linux, Solaris &amp; Windows2000.</p>
-
-<h2><a name="tasks">The Tasks</a> </h2>
-
-<table border="0" cellspacing="0" cellpadding="3">
-       <tbody>
-         <tr>
-           <td><a href="#SOSGet">sosget</a></td>
-           <td>Retrieves a read-only copy of the specified project or file.</td>
-         </tr>
-         <tr>
-           <td><a href="#SOSLabel">    soslabel</a></td>
-           <td>Assigns a label to the specified project.</td>
-         </tr>
-         <tr>
-           <td><a href="#SOSCheckIn">     soscheckin</a></td>
-           <td>Updates VSS with changes made to a checked out file or project,
-           and unlocks the VSS master copy.</td>
-         </tr>
-         <tr>
-           <td><a href="#SOSCheckOut">      soscheckout</a></td>
-           <td>Retrieves a read-write copy of&nbsp;the specified project
-           or file, locking the&nbsp;VSS master copy</td>
-         </tr>
-
-  </tbody>
-</table>
-     <br>
-
-<hr width="100%" size="2">
-<h2>Task Descriptions</h2>
-
-<h2><a name="SOSGet"></a>SOSGet<br>
-     </h2>
-<h3>Description</h3>
-             Task to perform GET commands with SOS<br>
-<h3>Parameters</h3>
-     </div>
-     </div>
-
-<table border="1">
-     <tbody>
-       <tr>
-          <th>Attribute</th>
-          <th>Values</th>
-          <th>Required</th>
-        </tr>
-        <tr>
-          <td>soscmd</td>
-          <td>Directory which contains soscmd(.exe) <br>
-          soscmd(.exe) must be in the path if this is not specified</td>
-          <td>No</td>
-        </tr>
-        <tr>
-           <td>vssserverpath</td>
-           <td>path to the srcsafe.ini  - eg. \\server\vss\srcsafe.ini</td>
-           <td>Yes</td>
-        </tr>
-        <tr>
-           <td>sosserverpath</td>
-           <td>address &amp; port of the SOS server  - eg. 192.168.0.1:8888</td>
-           <td>Yes</td>
-        </tr>
-        <tr>
-           <td>projectpath</td>
-           <td>SourceSafe project path without the "$"</td>
-           <td>Yes</td>
-        </tr>
-        <tr>
-           <td>file</td>
-           <td>Filename to act upon<br>
-           If no file is specified then act upon the project</td>
-           <td>No</td>
-        </tr>
-        <tr>
-           <td>username</td>
-           <td>SourceSafe username</td>
-           <td>Yes</td>
-        </tr>
-        <tr>
-           <td>password</td>
-           <td>SourceSafe password</td>
-           <td>No</td>
-        </tr>
-        <tr>
-           <td>localpath</td>
-           <td>Override the working directory and get to the specified path</td>
-           <td>No</td>
-        </tr>
-        <tr>
-           <td>soshome</td>
-           <td>The path to the SourceOffSite home directory</td>
-           <td>No</td>
-        </tr>
-        <tr>
-           <td>nocompress</td>
-           <td>true or false - disable compression</td>
-           <td>No</td>
-        </tr>
-        <tr>
-           <td>recursive</td>
-           <td>true or false - Only works with the GetProject command</td>
-           <td>No</td>
-        </tr>
-        <tr>
-           <td>version</td>
-           <td>a version number to get - Only works with the GetFile command</td>
-           <td>No</td>
-        </tr>
-        <tr>
-           <td>label</td>
-           <td>a label version to get - Only works with the GetProject command</td>
-           <td>No</td>
-        </tr>
-        <tr>
-           <td>nocache</td>
-           <td>true or false - Only needed if SOSHOME is set as an environment variable</td>
-           <td>No</td>
-        </tr>
-        <tr>
-           <td>verbose</td>
-           <td>true or false - Status messages are displayed</td>
-           <td>No</td>
-        </tr>
-  </tbody>
-</table>
-
-<h3>Example</h3>
-&nbsp;&nbsp;&nbsp;
-<small>&lt;sosget&nbsp;&nbsp;&nbsp;verbose="true"<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;recursive="true"<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;username="build"<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;password="build"<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;localpath="tmp"<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;projectpath="/SourceRoot/project1"<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sosserverpath="192.168.10.6:8888"<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vssserverpath="d:\vss\srcsafe.ini"/&gt;</small><br><br>
-
-<small>Connects to a SourceOffsite server on 192.168.10.6:8888 with
-build,build as the username &amp; password. The SourceSafe  database resides
-on the same box as the SOS server  &amp; the VSS database  is at
-"d:\vss\srcsafe.ini" Does a recursive GetProject on $/SourceRoot/project1,
-using tmp as the working directory. </small><br>
-<br>
-
-<hr width="100%" size="2">
-<h2><a name="SOSLabel"></a>SOSLabel</h2>
-
-<h3>Description</h3>
-             Task to perform Label commands with SOS<br>
-<h3>Parameters</h3>
-
-<table border="1">
-    <tr>
-      <th>Attribute</th>
-      <th>Values</th>
-      <th>Required</th>
-    </tr>
-    <tr>
-      <td>soscmd</td>
-      <td>Directory which contains soscmd(.exe) <br>
-      soscmd(.exe) must be in the path if this is not specified</td>
-      <td>No</td>
-    </tr>
-    <tr>
-       <td>vssserverpath</td>
-       <td>path to the srcsafe.ini  - eg. \\server\vss\srcsafe.ini</td>
-       <td>Yes</td>
-    </tr>
-    <tr>
-       <td>sosserverpath</td>
-       <td>address and port of the SOS server  - eg. 192.168.0.1:8888</td>
-       <td>Yes</td>
-    </tr>
-    <tr>
-       <td>projectpath</td>
-       <td>SourceSafe project path without the "$"</td>
-       <td>Yes</td>
-    </tr>
-    <tr>
-       <td>username</td>
-       <td>SourceSafe username</td>
-       <td>Yes</td>
-    </tr>
-    <tr>
-       <td>password</td>
-       <td>SourceSafe password</td>
-       <td>No</td>
-    </tr>
-    <tr>
-       <td>label</td>
-       <td>The label to apply to a project</td>
-       <td>Yes</td>
-    </tr>
-    <tr>
-       <td>comment</td>
-       <td>A comment to be applied to all files being labeled</td>
-       <td>No</td>
-    </tr>
-    <tr>
-       <td>verbose</td>
-       <td>true or false - Status messages are displayed</td>
-       <td>No</td>
-    </tr>
-  </tbody>
-</table>
-
-<h3>Example</h3>
-&nbsp;&nbsp;&nbsp;
-<small>&lt;soslabel&nbsp;&nbsp;&nbsp;username="build"<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-password="build"<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-label="test label"<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-projectpath="/SourceRoot/project1<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-sosserverpath="192.168.10.6:8888"<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-vssserverpath="d:\vss\srcsafe.ini"/&gt;</small><br><br>
-
-<small>Connects to a SourceOffsite server on 192.168.10.6:8888 with
-build,build as the username &amp; password. The SourceSafe database resides
-on the same box as  the  SOS server  &amp; the VSS database is at
-"d:\vss\srcsafe.ini". Labels the $/SourceRoot/project1 project with
-"test label".</small><br>
-<br>
-
-<hr width="100%" size="2"><br>
-
-<h2><a name="SOSCheckIn"></a>SOSCheckIn</h2>
-
-<h3>Description</h3>
-        Task to perform CheckIn commands with SOS<br>
-<h3>Parameters</h3>
-<table border="1">
-       <tbody>
-    <tr>
-      <th>Attribute</th>
-      <th>Values</th>
-      <th>Required</th>
-    </tr>
-    <tr>
-      <td>soscmd</td>
-      <td>Directory which contains soscmd(.exe) <br>
-      soscmd(.exe) must be in the path if this is not specified</td>
-      <td>No</td>
-    </tr>
-    <tr>
-       <td>vssserverpath</td>
-       <td>path to the srcsafe.ini  - eg. \\server\vss\srcsafe.ini</td>
-       <td>Yes</td>
-    </tr>
-    <tr>
-       <td>sosserverpath</td>
-       <td>address and port of the SOS server  - eg. 192.168.0.1:8888</td>
-       <td>Yes</td>
-    </tr>
-    <tr>
-       <td>projectpath</td>
-       <td>SourceSafe project path without the "$"</td>
-       <td>Yes</td>
-    </tr>
-    <tr>
-       <td>file</td>
-       <td>Filename to act upon<br> If no file is specified then act upon the project</td>
-       <td>No</td>
-    </tr>
-    <tr>
-       <td>username</td>
-       <td>SourceSafe username</td>
-       <td>Yes</td>
-    </tr>
-    <tr>
-       <td>password</td>
-       <td>SourceSafe password</td>
-       <td>No</td>
-    </tr>
-    <tr>
-       <td>localpath</td>
-       <td>Override the working directory and get to the specified path</td>
-       <td>No</td>
-    </tr>
-    <tr>
-       <td>soshome</td>
-       <td>The path to the SourceOffSite home directory</td>
-       <td>No</td>
-    </tr>
-    <tr>
-       <td>nocompress</td>
-       <td>true or false - disable compression</td>
-       <td>No</td>
-    </tr>
-    <tr>
-       <td>recursive</td>
-       <td>true or false - Only works with the CheckOutProject command</td>
-       <td>No</td>
-    </tr>
-    <tr>
-       <td>nocache</td>
-       <td>true or false - Only needed if SOSHOME is set as an environment variable</td>
-       <td>No</td>
-    </tr>
-    <tr>
-       <td>verbose</td>
-       <td>true or false - Status messages are displayed</td>
-       <td>No</td>
-    </tr>
-    <td>comment</td>
-       <td>A comment to be applied to all files being checked in</td>
-       <td>No</td>
-    </tr>
- </tbody>
-</table>
-
-<h3>Example</h3>
-&nbsp;&nbsp;&nbsp;
-<small>&lt;soscheckin&nbsp;&nbsp;&nbsp;username="build"<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;password="build"<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;file="foobar.txt"<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;verbose="true"<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;comment="comment abc"<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;projectpath="/SourceRoot/project1"<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sosserverpath="server1:8888"<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vssserverpath="\\server2\vss\srcsafe.ini"/&gt;
-</small><br><br>
-
-<small>Connects to a SourceOffsite server on server1:8888 with build,build as
-the username &amp; password. The SourceSafe database resides on a different
-box (server2) &amp; the VSS database is on a share called "vss". Checks-in
-only the "foobar.txt" file adding a comment of "comment abc". Extra status
-messages will be displayed on screen.</small><br>
-<br>
-
-<hr width="100%" size="2">
-<h2><a name="SOSCheckOut"></a>SOSCheckOut</h2>
-
-<h3>Description</h3>
-       Task to perform CheckOut commands with SOS<br>
-
-<h3>Parameters</h3>
-
-<table border="1">
-       <tbody>
-    <tr>
-      <th>Attribute</th>
-      <th>Values</th>
-      <th>Required</th>
-    </tr>
-    <tr>
-      <td>soscmd</td>
-      <td>Directory which contains soscmd(.exe) <br>
-      soscmd(.exe) must be in the path if this is not specified</td>
-      <td>No</td>
-    </tr>
-    <tr>
-       <td>vssserverpath</td>
-       <td>path to the srcsafe.ini  - eg. \\server\vss\srcsafe.ini</td>
-       <td>Yes</td>
-    </tr>
-    <tr>
-       <td>sosserverpath</td>
-       <td>address and port of the SOS server  - eg. 192.168.0.1:8888</td>
-       <td>Yes</td>
-    </tr>
-    <tr>
-       <td>projectpath</td>
-       <td>SourceSafe project path without the "$"</td>
-       <td>Yes</td>
-    </tr>
-    <tr>
-       <td>file</td>
-       <td>Filename to act upon<br> If no file is specified then act upon the project</td>
-       <td>No</td>
-    </tr>
-    <tr>
-       <td>username</td>
-       <td>SourceSafe username</td>
-       <td>Yes</td>
-    </tr>
-    <tr>
-       <td>password</td>
-       <td>SourceSafe password</td>
-       <td>No</td>
-    </tr>
-    <tr>
-       <td>localpath</td>
-       <td>Override the working directory and get to the specified path</td>
-       <td>No</td>
-    </tr>
-    <tr>
-       <td>soshome</td>
-       <td>The path to the SourceOffSite home directory</td>
-       <td>No</td>
-    </tr>
-    <tr>
-       <td>nocompress</td>
-       <td>true or false - disable compression</td>
-       <td>No</td>
-    </tr>
-    <tr>
-       <td>recursive</td>
-       <td>true or false - Only works with the CheckOutProject command</td>
-       <td>No</td>
-    </tr>
-    <tr>
-       <td>nocache</td>
-       <td>true or false - Only needed if SOSHOME is set as an environment variable</td>
-       <td>No</td>
-    </tr>
-    <tr>
-       <td>verbose</td>
-       <td>true or false - Status messages are displayed</td>
-       <td>No</td>
-    </tr>
-  </tbody>
-</table>
-     <br>
-
-<h3>Example</h3>
-&nbsp;&nbsp;&nbsp;
-<small>&lt;soscheckout&nbsp;&nbsp;&nbsp;soscmd="/usr/local/bin"<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;verbose="true"<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;username="build"<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;password="build"<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;projectpath="/SourceRoot/project1"<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sosserverpath="192.168.10.6:8888"<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vssserverpath="\\server2\vss\srcsafe.ini"/&gt;
-</small><br><br>
-
-<small>Connects to a SourceOffsite server on server1:8888 with build,build as
-the username &amp; password. The SourceSafe database resides on a different
-box (server2) &amp; the VSS database is on a share called "vss". Checks-out
-"project1", Only the "project1" directory will be locked as the recursive
-option was not set. Extra status messages will be displayed on screen. The
-soscmd(.exe) file to be used resides in /usr/local/bin.</small><br>
-<br>
-<hr>
-<p align="center">Copyright &copy; 2002 Apache Software Foundation. All rights
-Reserved.</p>
-</body>
-</html>
diff --git a/docs/manual/OptionalTasks/sound.html b/docs/manual/OptionalTasks/sound.html
deleted file mode 100644
index 0052e8f..0000000
--- a/docs/manual/OptionalTasks/sound.html
+++ /dev/null
@@ -1,104 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Sound Task</title>
-</head>
-
-<body>
-
-<h2><a name="sound">Sound</a></h2>
-<h3>Description</h3>
-<p>Plays a sound-file at the end of the build, according to whether
-the build failed or succeeded. You can specify either a specific
-sound-file to play, or, if a directory is specified, the
-<code>&lt;sound&gt;</code> task will randomly select a file to play.
-Note: At this point, the random selection is based on all the files
-in the directory, not just those ending in appropriate suffixes
-for sound-files, so be sure you only have sound-files in the 
-directory you specify.</p>
-<p>
-Unless you are running on Java 1.3 or later, you need the Java Media Framework
-on the classpath (javax.sound). 
-</p>
-
-
-<h3>Nested Elements</h3>
-<h4>success</h4>
-<p>Specifies the sound to be played if the build succeeded.</p>
-<h4>fail</h4>
-<p>Specifies the sound to be played if the build failed.</p>
-
-<h3>Nested Element Parameters</h3>
-<p>
-The following attributes may be used on the <code>&lt;success&gt;</code> 
-and <code>&lt;fail&gt;</code> elements:</p>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">source</td>
-    <td valign="top">the path to a sound-file directory, or the name of a
-specific sound-file, to be played.
-    </td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">loops</td>
-    <td valign="top">the number of extra times to play the sound-file;
-      default is <code>0</code>.
-    </td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">duration</td>
-    <td valign="top">the amount of time (in milliseconds) to play
-      the sound-file.
-    </td>
-    <td valign="top" align="center">No</td>
-  </tr>
-</table>
-
-<h3>Examples</h3>
-<blockquote>
-<pre>
-&lt;target name=&quot;fun&quot; if=&quot;fun&quot; unless=&quot;fun.done&quot;&gt;
-  &lt;sound&gt;
-    &lt;success source=&quot;${user.home}/sounds/bell.wav&quot;/&gt;
-    &lt;fail source=&quot;${user.home}/sounds/ohno.wav&quot; loops=&quot;2&quot;/&gt;
-  &lt;/sound&gt;
-  &lt;property name=&quot;fun.done&quot; value=&quot;true&quot;/&gt;
-&lt;/target&gt;
-</pre>
-</blockquote>
-plays the <code>bell.wav</code> sound-file if the build succeeded, or
-the <code>ohno.wav</code> sound-file if the build failed, three times,
-if the <code>fun</code> property is set to <code>true</code>.
-If the target
-is a dependency of an &quot;initialization&quot; target that other
-targets depend on, the
-<code>fun.done</code> property prevents the target from being executed
-more than once.
-<blockquote>
-<pre>
-&lt;target name=&quot;fun&quot; if=&quot;fun&quot; unless=&quot;fun.done&quot;&gt;
-  &lt;sound>
-    &lt;success source=&quot;//intranet/sounds/success&quot;/&gt;
-    &lt;fail source=&quot;//intranet/sounds/failure&quot;/&gt;
-  &lt;/sound&gt;
-  &lt;property name=&quot;fun.done&quot; value=&quot;true&quot;/&gt;
-&lt;/target&gt;
-</pre>
-</blockquote>
-randomly selects a sound-file to play when the build succeeds or fails.
-
-<hr>
-<p align="center">Copyright &copy; 2001-2002 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/OptionalTasks/splash.html b/docs/manual/OptionalTasks/splash.html
deleted file mode 100644
index 18c18b9..0000000
--- a/docs/manual/OptionalTasks/splash.html
+++ /dev/null
@@ -1,95 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Ant User Manual</title>
-</head>
-
-<body>
-
-<h2><a name="Splash">Splash</a></h2>
-<p>by Les Hughes (leslie.hughes@rubus.com)
-<h3>Description</h3>
-<p>This task creates a splash screen. The splash screen is displayed
-for the duration of the build and includes a handy progress bar as
-well. Use in conjunction with the sound task to provide interest
-whilst waiting for your builds to complete...</p>
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-    <td align="center" valign="top"><b>Default</b></td>
-  </tr>
-  <tr>
-    <td valign="top">imageurl</td>
-    <td valign="top">A URL pointing to an image to display.</td>
-    <td valign="top" align="center">No</td>
-    <td valign="top" align="center">antlogo.gif from the classpath</td>
-  </tr>
-  <tr>
-    <td valign="top">useproxy</td>
-    <td valign="top">Use a proxy to access imgurl. Note: Only tested
-    on JDK 1.2.2 and above</td>
-    <td valign="top" align="center">No</td>
-    <td valign="top" align="center">None</td>
-  </tr>
-  <tr>
-    <td valign="top">proxy</td>
-    <td valign="top">IP or hostname of the proxy server</td>
-    <td valign="top" align="center">No</td>
-    <td valign="top" align="center">None</td>
-  </tr>
-  <tr>
-    <td valign="top">port</td>
-    <td valign="top">Proxy portnumber</td>
-    <td valign="top" align="center">No</td>
-    <td valign="top" align="center">None</td>
-  </tr>
-  <tr>
-    <td valign="top">user</td>
-    <td valign="top">User to authenticate to the proxy as.</td>
-    <td valign="top" align="center">No</td>
-    <td valign="top" align="center">None</td>
-
-  </tr>
-  <tr>
-    <td valign="top">password</td>
-    <td valign="top">Proxy password</td>
-    <td valign="top" align="center">No</td>
-    <td valign="top" align="center">None</td>
-  </tr>
-  <tr>
-    <td valign="top">showduration</td>
-    <td valign="top">Initial period to pause the build to show the
-    splash in milliseconds.</td>
-    <td valign="top" align="center">No</td>
-    <td valign="top" align="center">5000 ms</td>
-  </tr>
-</table>
-<h3>Examples</h3>
-<blockquote><pre>
-&lt;splash/&gt;
-</pre></blockquote>
-<p>Splash <code>images/ant_logo_large.gif</code> from the classpath.</p>
-<blockquote><pre>
-&lt;splash imageurl=&quot;http://jakarta.apache.org/images/jakarta-logo.gif&quot;
-           useproxy=&quot;true&quot;
-           showduration=&quot;5000&quot;
-           proxy=&quot;proxy.mydomain.com&quot;
-           port=&quot;8080&quot;
-           user=&quot;BuildEng&quot;
-           password=&quot;LetMePass&quot;/>
-
-</pre></blockquote>
-<p>Splashes the jakarta logo, via a connection through the proxy at
-proxy.mydomain.com on port 8080 (as user BuildEng/LetMePass) for
-an initial period of 5 seconds.</p>
-<hr>
-<p align="center">Copyright &copy; 2002 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/OptionalTasks/starteam.html b/docs/manual/OptionalTasks/starteam.html
deleted file mode 100644
index 5bde977..0000000
--- a/docs/manual/OptionalTasks/starteam.html
+++ /dev/null
@@ -1,828 +0,0 @@
-<html>
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>StartTeam Tasks</title>
-</head>
-<body>
-<h1>StarTeam Support</h1>
-<ul>
-  <li><a href="#stcheckout">STCheckout</a></li> 
-  <li><a href="#stcheckin">STCheckin</a></li>
-  <li><a href="#stlabel">STLabel</a></li>
-  <li><a href="#stlist">STList</a></li>
-  <li><a href="#starteam"><i>StarTeam (deprecated) </i></a></li>
-</ul>
-
-<p>
-These tasks make use of functions from the StarTeam API.  As a result
-they are only available to licensed users of StarTeam.  You must have
-<CODE>starteam-sdk.jar</CODE> in your classpath to run these tasks.
-For more information about the StarTeam API and how to license it, see
-the <a href="http://www.starbase.com">StarBase</a> web site.</p>
-
-<hr></hr>
-
-<a name="common-params">
-<h2>Common Parameters for All Starteam Tasks</h2></a>
-<p>
-The following parameters, having to do with making the connection to a StarTeam project, are common to all the following tasks except the deprecated <i>StarTeam</i> task.
-</p>
-
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">username</td>
-    <td valign="top">The username of the account used to log in to the StarTeam server.</td>
-    <td align="center" valign="top">yes</td>
-  </tr>
-  <tr>
-    <td valign="top">password</td>
-    <td valign="top">The password of the account used to log in to the StarTeam server.</td>
-    <td align="center" valign="top">yes</td>
-  </tr>
-
-  <tr>
-    <td valign="top">URL</td>
-    <td valign="top">A string of the form <code>servername:portnum/project/view</code> 
-which enables user to set all of these elements in one string. </td>
-    <td align="center" valign="center"> Either this ...</td>
-  </tr>  
-  <tr>
-    <td valign="top">servername</td>
-    <td valign="top">The name of the StarTeam server.</td>
-    <td align="center" valign="center" rowspan = "4">... or <b>all four</b> of these must be defined.</td>  
-   </tr>
-  <tr>
-    <td valign="top">serverport</td>
-    <td valign="top">The port number of the StarTeam server.</td>
-  </tr>
-  <tr>
-    <td valign="top">projectname</td>
-    <td valign="top">The name of the StarTeam project on which to operate.</td>
-  </tr>
-  <tr>
-    <td valign="top">viewname</td>
-    <td valign="top">The name of the view in the StarTeam project on which to operate.</td>
-  </tr>
-
-
-</table>
-
-<hr></hr>
-
-<a name="stcheckout">
-<h2>STCheckout</h2></a>
-
-<h3>Description</h3>
-
-Checks out files from a StarTeam project.
-
-<p>
-The <i>includes</i> and <i>excludes</i> attributes function differently from
-other tasks in Ant. Inclusion/exclusion by folder is NOT supported.
-</p>
-
-<h3>Parameters</h3>
-See also <A href="#common-params">the required common StarTeam parameters</A>.<br></br>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-
-  <tr>
-    <td valign="top">rootstarteamfolder</td>
-    <td valign="top">The root of the subtree in the StarTeam repository from which to 
-    check out files.  Defaults to the root folder of the view ('/'). </td>
-    <td align="center" valign="top">no</td>
-  </tr>  
-  <tr>
-    <td valign="top">rootlocalfolder</td>
-    <td valign="top">The local folder which will be the root of the tree to which files are checked out.  If this is not supplied, then the StarTeam "default folder" associated with <i>rootstarteamfolder</i> is used.
-   </td>
-    <td align="center" valign="top">no</td>
-  </tr>  
-  
-  <tr>
-    <td valign="top">createworkingdirs</td>
-    <td valign="top">creates local folders even when the corresponding StarTeam folder is empty.  Defaults to "true".</td>
-    <td align="center" valign="top">no</td>
-  </tr>
-  <tr>
-    <td valign="top">deleteuncontrolled</td>
-    <td valign="top">if true, any files NOT in StarTeam will be deleted.  Defaults to "true".</td>
-    <td align="center" valign="top">no</td>
-  </tr>
-    <tr>
-    <td valign="top">includes</td>
-    <td valign="top">Only check out files that match at least one of the patterns in this list.  Patterns must be separated by <i>commas</i>.  Patterns in <i>excludes</i> take precedence over patterns in <i>includes</i>.</td>
-    <td align="center" valign="top">no</td>
-  </tr>
-  <tr>
-    <td valign="top">excludes</td>
-    <td valign="top">Do not check out files that match at least one of the patterns in this list.  Patterns must be separated by  <i>commas</i>.  Patterns in <i>excludes</i> take precedence over patterns in <i>includes</i>.</td>
-    <td align="center" valign="top">no</td>
-  </tr>
-  <tr>
-    <td valign="top">label</td>
-    <td valign="top">Check out files as of this label.  The label must exist in starteam or an exception will be thrown.  If not specified, the most recent version of each file will be checked out.</td>
-    <td align="center" valign="top">no</td>
-  </tr>
-  <tr>
-    <td valign="top">recursive</td>
-    <td valign="top">Indicates if subfolders should be searched for files to check out.  Defaults to "true".</td>
-    <td align="center" valign="top">no</td>
-  </tr>
-  <tr>
-    <td valign="top">forced</td>
-    <td valign="top">If true, checkouts will occur regardless of the status 
-that StarTeam is maintaining for the file.  If rootlocalfolder is set then 
-this should be set "true" as otherwise the checkout will be based on statuses 
-which do not relate to the target folder.  Defaults to "false".</td>
-    <td align="center" valign="top">no</td>
-  </tr> 
- <tr>
-    <td valign="top">locked</td>
-    <td valign="top">If true, file will be locked against changes by other 
-users.  If false (default) has no effect. 
-    <td align="center" valign="center" rowspan="2">Either or neither, but not both, may be true.</td>
-  </tr>
-  <tr>
-    <td valign="top">unlocked</td>
-    <td valign="top">If true, file will be unlocked so that other users may
-change it.  This is a way to reverse changes that have not yet been checked in.
-If false (default) has no effect. 
-  </tr>
-</table>
-
-<h3>Examples</h3>
-
-<pre>
-  &lt;stcheckout servername="STARTEAM" 
-            serverport="49201"
-            projectname="AProject" 
-            viewname="AView"
-            username="auser"
-            password="secret"
-            rootlocalfolder="C:\dev\buildtest\co"
-	    force="true"
-  /&gt;
-</pre>
-
-The minimum necessary to check out files out from a StarTeam server.  This will
-check out all files in the <i>AView</i> view of the <i>AProject</i> project to
-<code>C:\dev\buildtest\co</code>.  Empty folders in StarTeam will have local folders 
-created for them and any non-StarTeam files found in the tree will be deleted.
-
-<pre>
-  &lt;stcheckout URL="STARTEAM:49201/Aproject/AView" 
-            username="auser"
-            password="secret"
-            rootlocalfolder="C:\dev\buildtest\co"
-	    forced="true"
-  /&gt;
-</pre>
-And this is a simpler way of accomplishing the same thing as the previous example, using the URL attribute.
-<br></br>
-<pre>
-  &lt;stcheckout URL="STARTEAM:49201/Aproject/AView" 
-            username="auser"
-            password="secret"
-            rootlocalfolder="C:\dev\buildtest\co"
-            rootstarteamfolder="\Dev"
-            excludes="*.bak *.old"
-            label="v2.6.001"
-	    forced="true"
-  /&gt;
-</pre>
-
-This will check out all files from the <i>Dev</i> folder and below that do not
-end in <i>.bak</i> or <i>.old</i> with the label <i>v2.6.001</i>.  
-
-<pre>
-  &lt;stcheckout URL="STARTEAM:49201/Aproject/AView"
-            username="auser"
-            password="secret"
-            rootlocalfolder="C:\dev\buildtest\co"
-            includes="*.htm,*.html"
-            excludes="index.*"
-	    forced="true"
-  /&gt;
-</pre>
-
-     
-This is an example of overlapping <i>includes</i> and <i>excludes</i> attributes.  Because
-<i>excludes</i> takes precedence over <i>includes</i>, files named <code>index.html</code> will
-not be checked out by this command.
-
-<pre>
-  &lt;stcheckout URL="STARTEAM:49201/Aproject/AView"
-            username="auser"
-            password="secret"
-            rootlocalfolder="C:\dev\buildtest\co"
-            includes="*.htm,*.html"
-            excludes="index.*"
-	    forced="true"
-	    recursive="false"
-  /&gt;
-</pre>
-This example is like the previous one, but will only check out files in 
-C:\dev\buildtest\co, because of the turning off of the recursive attribute.
-
-<pre>
-  &lt;stcheckout URL="STARTEAM:49201/Aproject/AView"
-            username="auser"
-            password="secret"
-            rootstarteamfolder="src/java"
-            rootlocalfolder="C:\dev\buildtest\co"
-	    forced="true"
-  /&gt;
-</pre>
-<br></br>
-<pre>
-  &lt;stcheckout URL="STARTEAM:49201/Aproject/AView"
-            username="auser"
-            password="secret"
-            rootstarteamfolder="src/java"
-  /&gt;
-</pre>
-<br></br>
-<pre>
- &lt;stcheckout URL="STARTEAM:49201/Aproject/AView"
-            username="auser"
-            password="secret"
-            rootstarteamfolder="src/java"
-            rootlocalfolder="C:\dev\buildtest\co\src\java"
-	    forced="true"
-  /&gt;
-</pre>
-
-In the preceding three examples, assuming that the AProject project has a default folder of
-"C:\work\AProject", the first example will check out the tree of files rooted in the src/java folder of the AView view of the AProject in the StarTeam repository to a local tree rooted at C:\dev\buildtest\co, 
-the second to a tree rooted at C:\work\AProject\src\java (since no <i>rootlocalfolder</i> is specified) and the third to a tree rooted at C:\dev\buildtest\co\src\java.  Note also, that since the second example does not set "forced" true, only those files which the repository considers out-of-date will be checked out.
-<hr></hr>
-
-<a name="stcheckin">
-<h2>STCheckin</h2></a>
-
-<h3>Description</h3>
-
-Checks files into a StarTeam project.  Optionally adds files and in the local tree that are not managed by the repository to its control.
-
-<p>
-The <i>includes</i> and <i>excludes</i> attributes function differently from
-other tasks in Ant. Inclusion/exclusion by folder is NOT supported.
-</p>
-
-<h3>Parameters</h3>
-See also <A href="#common-params">the required common StarTeam parameters</A>.<br></br>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">rootstarteamfolder</td>
-    <td valign="top">The root of the subtree in the StarTeam repository into which to 
-    files will be checked.  Defaults to the root folder of the view ('/'). </td>
-    <td align="center" valign="top">no</td>
-  </tr>  
-  <tr>
-    <td valign="top">rootlocalfolder</td>
-    <td valign="top">The local folder which will be the root of the tree to which files are checked out.  If this is not supplied, then the StarTeam "default folder" associated with <i>rootstarteamfolder</i> is used. </td>
-    <td align="center" valign="top">no</td>
-  </tr>  
-  
-
-  <tr>
-    <td valign="top">comment</td>
-    <td valign="top">Checkin comment to be saved with the file.</td>
-    <td align="center" valign="top">no</td>
-  </tr>
-
-  <tr>
-    <td valign="top">adduncontrolled</td>
-    <td valign="top">if true, any files or folders NOT in StarTeam will be 
-added to the repository.  Defaults to "false".</td>
-    <td align="center" valign="top">no</td>
-  </tr>
-    <tr>
-    <td valign="top">includes</td>
-    <td valign="top">Only check in files that match at least one of the patterns in this list.  Patterns must be separated by <i>commas</i>.  Patterns in <i>excludes</i> take precedence over patterns in <i>includes</i>.</td>
-    <td align="center" valign="top">no</td>
-  </tr>
-  <tr>
-    <td valign="top">excludes</td>
-    <td valign="top">Do not check in files that match at least one of the patterns in this list.  Patterns must be separated by  <i>commas</i>.  Patterns in <i>excludes</i> take precedence over patterns in <i>includes</i>.</td>
-    <td align="center" valign="top">no</td>
-  </tr>
-  <tr>
-    <td valign="top">recursive</td>
-    <td valign="top">Indicates if subfolders should be searched for files to check in.  Defaults to "false".</td>
-    <td align="center" valign="top">no</td>
-  </tr>
-  <tr>
-    <td valign="top">forced</td>
-    <td valign="top">If true, checkins will occur regardless of the status 
-that StarTeam is maintaining for the file.  If rootlocalfolder is set then 
-this should be set "true" as otherwise the checkin will be based on statuses 
-which do not relate to the target folder.  Defaults to "false".</td>
-    <td align="center" valign="top">no</td>
-  </tr>
-    <td valign="top">unlocked</td>
-    <td valign="top">If true, file will be unlocked so that other users may
-change it.  If false (default) lock status will not change.
-    <td align="center" valign="top">no</td> 
-  </tr></table>
-
-<h3>Examples</h3>
-
-<pre>
-  &lt;stcheckin servername="STARTEAM" 
-            serverport="49201"
-            projectname="AProject" 
-            viewname="AView"
-            username="auser"
-            password="secret"
-            rootlocalfolder="C:\dev\buildtest\co"
-	    forced="true"
-  /&gt;
-</pre>
-
-The minimum necessary to check files into a StarTeam server.  This will
-check all files on the local tree rooted at <code>C:\dev\buildtest\co</code>
-into the <i>AView</i> view of the <i>AProject</i> project in the repository.
-For files and folders in the local tree but not in starteam, nothing will be done.  Since the <i>forced</i> attribute is set, the files which are checked in will be checked in without regard to what the StarTeam repository considers their status to be.  This is a reasonable choice of attributes since StarTeam's status for a file is calculated based on the local file in the StarTeam default directory, not on the directory we are actually working with.
-
-<pre>
-  &lt;stcheckin URL="STARTEAM:49201/Aproject/AView" 
-            username="auser"
-            password="secret"
-            rootlocalfolder="C:\dev\buildtest\co"
-	    forced="true"
-  /&gt;
-</pre>
-And this is a simpler way of giving the same commands as the command above using the URL shortcut.
-<br></br>
-<pre>
-  &lt;stcheckin URL="STARTEAM:49201/Aproject/AView" 
-            username="auser"
-            password="secret"
-            rootlocalfolder="C:\dev\buildtest\co"
-            rootstarteamfolder="\Dev"
-            excludes="*.bak *.old"
-	    forced="true"
-  /&gt;
-</pre>
-
-This will check all files in to the <i>Dev</i> folder and below that do not
-end in <i>.bak</i> or <i>.old</i> from the tree rooted at"C:\dev\buildtest\co" .  
-
-<pre>
-  &lt;stcheckin URL="STARTEAM:49201/Aproject/AView"
-            username="auser"
-            password="secret"
-            rootlocalfolder="C:\dev\buildtest\co"
-            includes="*.htm,*.html"
-            excludes="index.*"
-	    forced="true"
-  /&gt;
-</pre>
-
-     
-This is an example of overlapping <i>includes</i> and <i>excludes</i> attributes.  Because
-<i>excludes</i> takes precedence over <i>includes</i>, files named <code>index.html</code> will
-not be checked in by this command.
-
-<pre>
-  &lt;stcheckin URL="STARTEAM:49201/Aproject/AView"
-            username="auser"
-            password="secret"
-            rootlocalfolder="C:\dev\buildtest\co"
-            rootstarteamfolder="src/java"
-            includes="*.htm,*.html"
-            excludes="index.*"
-	    forced="true"
-	    recursive="false"
-  /&gt;
-</pre>
-This example is like the previous one, but will only check in files from 
-C:\dev\buildtest\co, because of the turning off of the recursive attribute.
-
-<pre>
-  &lt;stcheckin URL="STARTEAM:49201/Aproject/AView"
-            username="auser"
-            password="secret"
-            rootlocalfolder="C:\dev\buildtest\co"
-            rootstarteamfolder="src/java"
-            includes="version.txt"
-	    forced="true"
-	    recursive="false"
-  /&gt;
-</pre>
-This example is like the previous one, but will only check only in one file, C:\dev\buildtest\co\version.txt to the StarTeam folder src/java.
-
-<pre>
-  &lt;stcheckin URL="STARTEAM:49201/Aproject/AView"
-            username="auser"
-            password="secret"
-            rootlocalfolder="C:\dev\buildtest\co"
-            rootstarteamfolder="src/java"
-            includes="version.java"
-	    forced="true"
-	    recursive="false"
-	    addUncontrolled="true"
-	    comment="Fix Bug #667"
-  /&gt;
-</pre>
-This example is like the previous one, but will only check only in one file, C:\dev\buildtest\co\version.java to the StarTeam folder src/java.  Because the <i>addUncontrolled</i> attribute has been set, if StarTeam does not already control this file in this location, it will be added to the repository.  Also, it will write a comment to the repository for this version of the file.
-
-<pre>
-  &lt;stcheckin URL="STARTEAM:49201/Aproject/AView"
-            username="auser"
-            password="secret"
-            rootstarteamfolder="src/java"
-            rootlocalfolder="C:\dev\buildtest\co"
-	    forced="true"
-  /&gt;
-</pre>
-<br></br>
-<pre>
-  &lt;stcheckin URL="STARTEAM:49201/Aproject/AView"
-            username="auser"
-            password="secret"
-            rootstarteamfolder="src/java"
-  /&gt;
-</pre>
-<br></br>
-<pre>
- &lt;stcheckin URL="STARTEAM:49201/Aproject/AView"
-            username="auser"
-            password="secret"
-            rootstarteamfolder="src/java"
-            rootlocalfolder="C:\dev\buildtest\co\src\java"
-	    forced="true"
-  /&gt;
-</pre>
-
-In the preceding three examples, assuming that the AProject project has a default folder of C:\work\buildtest\co\AProject,  
-the first example will check in files from a tree rooted at C:\dev\buildtest\co, 
-the second from a tree rooted at C:\work\buildtest\co\AProject\src\java, 
-and the third from a tree rooted at C:\dev\buildtest\co\src\java all to a tree rooted at src/java
-
-<hr></hr>
-
-<a name="stlabel">
-<h2>STLabel</h2></a>
-
-<h3>Description</h3>
-
-Creates a view label in StarTeam at the specified view.  The label will be classified by StarTeam as a "build label".  This task will fail if there already exexists in <i>viewname</i> a label with the same name as the <i>label</i> parameter. 
-
-<h3>Parameters</h3>
-See also <A href="#common-params">the required common StarTeam parameters</A>.<br></br>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-
-  <tr>
-    <td valign="top">label</td>
-    <td valign="top">The name to be given to the label</td>
-    <td align="center" valign="top">yes</td>
-  </tr> 
- <tr>
-    <td valign="top">lastbuild</td>
-    <td valign="top">The timestamp of the build that will be stored with the label.  Must be formatted <code>yyyyMMddHHmmss</code></td>
-    <td align="center" valign="top">yes</td>
-  </tr>
-  <tr>
-    <td valign="top">description</td>
-    <td valign="top">A description of the label to be stored in the StarTeam project.</td>
-    <td align="center" valign="top">no</td>
-  </tr>
-</table>
-
-<h3>Examples</h3>
-
-This example shows the use of this tag.  It will create a label named <i>Version 6.2</i> with
-<i>"Thorough description"</i> as its description.
-<pre>
-  &lt;tstamp&gt;
-    &lt;format property="nowstamp" pattern="yyyyMMddHHmmss" locale="en"/&gt;
-  &lt;/tstamp&gt;  
-  &lt;stlabel URL="STARTEAM:49201/Aproject/AView"
-              username="auser"
-              password="secret"
-              label="Version 6.2"
-              lastbuild="${nowstamp}"
-              description="Thorough description"
-  /&gt;
-</pre>
-
-<hr></hr>
-<a name="stlist">
-<h2>STList</h2></a>
-
-<h3>Description</h3>
-
-Produces a listing of the contents of the StarTeam repository at the specified view and StarTeamFolder.  The listing will contain the name of the user, if any, who has the file locked, the size of the file, its lastModifiedDate in the repository, and the name of the file.  Unless the rootLocalFolder is specified, listing will also show the status of the local file in the default local directory relative to the repository. 
-
-<h3>Parameters</h3>
-See also <A href="#common-params">the required common StarTeam parameters</A>.<br></br>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-
-  <tr>
-    <td valign="top">rootstarteamfolder</td>
-    <td valign="top">The root of the subtree in the StarTeam repository to be listed.  Defaults to the root folder of the view ('/'). </td>
-    <td align="center" valign="top">no</td>
-  </tr>  
-  <tr>
-    <td valign="top">rootlocalfolder</td>
-    <td valign="top">The local folder which will be the root of the tree to which files are compared.  If this is not supplied, then the StarTeam "default folder" associated with <i>rootstarteamfolder</i> is used and a status field will appear in the listing.  Otherwise, the status field will not appear.
-   </td>
-    <td align="center" valign="top">no</td>
-  </tr>  
-    <tr>
-    <td valign="top">includes</td>
-    <td valign="top">Only list files that match at least one of the patterns in this list.  Patterns must be separated by <i>commas</i>.  Patterns in <i>excludes</i> take precedence over patterns in <i>includes</i>.</td>
-    <td align="center" valign="top">no</td>
-  </tr>
-  <tr>
-    <td valign="top">excludes</td>
-    <td valign="top">Do not list files that match at least one of the patterns in this list.  Patterns must be separated by  <i>commas</i>.  Patterns in <i>excludes</i> take precedence over patterns in <i>includes</i>.</td>
-    <td align="center" valign="top">no</td>
-  </tr>
-  <tr>
-    <td valign="top">label</td>
-    <td valign="top">List files, dates, and statuses as of this label.  The label must exist in starteam or an exception will be thrown.  If not specified, the most recent version of each file will be listed.</td>
-    <td align="center" valign="top">no</td>
-  </tr>
-  <tr>
-    <td valign="top">recursive</td>
-    <td valign="top">Indicates if subfolders should be searched for files to list.  Defaults to "true".</td>
-    <td align="center" valign="top">no</td>
-  </tr>
-</table>
-<h3>Examples</h3>
-
-<pre>
-
-  &lt;stlist url="WASHINGTON:49201/build"
-             username="auser"
-             password="secret"
- /&gt;
-</pre>
-
-The above command might produce the following listing:
-
-<pre>
-   [stlist] Folder: Build (Default folder: C:/work/build)
-   [stlist] Folder: dev (Default folder: C:/work/build/dev)
-   [stlist] Out of date  Sue Developer        1/1/02 7:25:47 PM CST     4368 build.xml
-   [stlist] Missing      George Hacker        1/1/02 7:25:49 PM CST       36 Test01.properties
-   [stlist] Current                           1/1/02 7:25:49 PM CST     4368 build2.xml
-   [stlist] Folder: test (Default folder C:/work/build/dev/test)
-   [stlist] Missing                           1/1/02 7:25:50 PM CST     4368 build2.xml
-</pre>
-
-while adding a <i>rootlocalfolder</i> and an <i>excludes</i> param ...
-
-<pre>
-
-  &lt;stlist url="WASHINGTON:49201/build"
-             username="auser"
-             password="secret"
-	     rootlocalfolder="srcdir2"
-	     excludes="*.properties"
- /&gt;
-</pre>
-
-might produce this listing. The status is missing because we are not going against the default folder.
-
-<pre>
-   [stlist] overriding local folder to srcdir2
-   [stlist] Folder: Build (Local folder: srcdir2)
-   [stlist] Folder: dev (Local folder: srcdir2/dev)
-   [stlist] Sue Developer        1/1/02 7:25:47 PM CST     4368 build.xml
-   [stlist]                      1/1/02 7:25:49 PM CST     4368 build2.xml
-   [stlist] Folder: test (Local folder: srcdir2/dev/test)
-   [stlist]                      1/1/02 7:25:50 PM CST     4368 build2.xml
- 
-
-</pre>
-
-<hr></hr>
-
-<a name="starteam">
-<h2>Starteam</h2></a>
-<h3><i>Deprecated</i></h3>
-<p><i>This task has been deprecated.  Use the <a href="#stcheckout">STCheckout</a> task instead.</i></p>
-<h3>Description</h3>
-
-Checks out files from a StarTeam project.
-
-<p>
-The <i>includes</i> and <i>excludes</i> attributes function differently from
-other tasks in Ant.  Multiple patterns must be separated by spaces, not
-commas.  See the examples for more information.</p>
-
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">username</td>
-    <td valign="top">The username of the account used to log in to the StarTeam server.</td>
-    <td align="center" valign="top">yes</td>
-  </tr>
-  <tr>
-    <td valign="top">password</td>
-    <td valign="top">The password of the account used to log in to the StarTeam server.</td>
-    <td align="center" valign="top">yes</td>
-  </tr>  
-  <tr>
-    <td valign="top">servername</td>
-    <td valign="top">The name of the StarTeam server.</td>
-    <td align="center" valign="top">yes</td>
-  </tr>
-  <tr>
-    <td valign="top">serverport</td>
-    <td valign="top">The port number of the StarTeam server.</td>
-    <td align="center" valign="top">yes</td>
-  </tr>
-  <tr>
-    <td valign="top">projectname</td>
-    <td valign="top">The name of the StarTeam project.</td>
-    <td align="center" valign="top">yes</td>
-  </tr>
-  <tr>
-    <td valign="top">viewname</td>
-    <td valign="top">The name of the view in the StarTeam project.</td>
-    <td align="center" valign="top">yes</td>
-  </tr>
-
-  <tr>
-    <td valign="top">targetfolder</td>
-    <td valign="top">The folder to which files are checked out.  What this precisely means is determined by the <i>targetFolderAbsolute</i> param.</td>
-    <td align="center" valign="top">yes</td>
-  </tr>  
-  <tr>
-    <td valign="top">targetFolderAbsolute</td>
-    <td valign="top">Determines how <i>targetfolder</i> is interpreted, that is, whether the StarTeam "default folder" for the project is factored in (false) or whether <i>targetFolder</i> is a complete mapping to <i>foldername</i> (true).
-      If "true", the target tree will be rooted at <i>targetfolder+"default folder"</i>.  If false, the target tree will be rooted at <i>targetfolder</i>.  Defaults to "false".  </td>
-    <td align="center" valign="top">no</td>
-  </tr>  
-  <tr>
-    <td valign="top">foldername</td>
-    <td valign="top">The subfolder in the project from which to check out files.</td>
-    <td align="center" valign="top">no</td>
-  </tr>  
-  <tr>
-    <td valign="top">force</td>
-    <td valign="top">Overwrite existing folders if this is set to "true".  Defaults to "false".</td>
-    <td align="center" valign="top">no</td>
-  </tr>
-  <tr>
-    <td valign="top">recursion</td>
-    <td valign="top">Indicates if subfolders should be searched for files to check out.  Defaults to "true".</td>
-    <td align="center" valign="top">no</td>
-  </tr>
-  <tr>
-    <td valign="top">verbose</td>
-    <td valign="top">Provides progress information.  Defaults to "false".</td>
-    <td align="center" valign="top">no</td>
-  </tr>
-  <tr>
-    <td valign="top">includes</td>
-    <td valign="top">Only check out files that match at least one of the patterns in this list.  Patterns must be separated by spaces.  Patterns in <i>excludes</i> take precedence over patterns in <i>includes</i>.</td>
-    <td align="center" valign="top">no</td>
-  </tr>
-  <tr>
-    <td valign="top">excludes</td>
-    <td valign="top">Do not check out files that match at least one of the patterns in this list.  Patterns must be separated by spaces.  Patterns in <i>excludes</i> take precedence over patterns in <i>includes</i>.</td>
-    <td align="center" valign="top">no</td>
-  </tr>
-</table>
-
-<h3>Examples</h3>
-
-<pre>
-  &lt;starteam servername="STARTEAM" 
-            serverport="49201"
-            projectname="AProject" 
-            viewname="AView"
-            username="auser"
-            password="secret"
-            targetfolder="C:\dev\buildtest\co"
-  /&gt;
-</pre>
-
-The minimum necessary to check out files out from a StarTeam server.  This will
-check out all files in the <i>AView</i> view of the <i>AProject</i> project to
-<code>C:\dev\buildtest\co</code>.
-
-<pre>
-  &lt;starteam servername="STARTEAM" 
-            serverport="49201"
-            projectname="AProject" 
-            viewname="AView"
-            username="auser"
-            password="secret"
-            targetfolder="C:\dev\buildtest\co"
-            foldername="\Dev"
-            excludes="*.bak *.old"
-            force="true"
-  /&gt;
-</pre>
-
-This will checkout all files from the <i>Dev</i> folder and below that do not
-end in <i>.bak</i> or <i>.old</i>.  The force flag will cause any existing files to be
-overwritten by the version in StarTeam.
-
-<pre>
-  &lt;starteam servername="STARTEAM" 
-            serverport="49201"
-            projectname="AProject" 
-            viewname="AView"
-            username="auser"
-            password="secret"
-            targetfolder="C:\dev\buildtest\co"
-            includes="*.htm *.html"
-            excludes="index.*"
-  /&gt;
-</pre>
-
-
-       
-This is an example of overlapping <i>includes</i> and <i>excludes</i> attributes.  Because
-<i>excludes</i> takes precedence over <i>includes</i>, files named <code>index.html</code> will
-not be checked out by this command.
-
-
-<pre>
- &lt;starteam servername="STARTEAM" 
-            serverport="49201"
-            projectname="AProject" 
-            foldername="src/java"
-            viewname="AView"
-            username="auser"
-            password="secret"
-            targetfolder="C:\dev\buildtest\co"
-            targetfolderabsolute="true"
-  /&gt;
-</pre>
-<br></br>
-<pre>
- &lt;starteam servername="STARTEAM" 
-            serverport="49201"
-            projectname="AProject" 
-            foldername="src/java"
-            viewname="AView"
-            username="auser"
-            password="secret"
-            targetfolder="C:\dev\buildtest\co"
-            targetfolderabsolute ="false"
-  /&gt;
-</pre>
-<br></br>
-<pre>
- &lt;starteam servername="STARTEAM" 
-            serverport="49201"
-            projectname="AProject" 
-            foldername="src/java"
-            viewname="AView"
-            username="auser"
-            password="secret"
-            targetfolder="C:\dev\buildtest\co\src\java"
-            targetfolderabsolute="true"
-  /&gt;
-</pre>
-
-In the preceding three examples, assuming that the AProject project has a default folder of
-"AProject", the first example will check the files located in starteam under src/java out to a tree rooted at C:\dev\buildtest\co, 
-the second to a tree rooted at C:\dev\buildtest\co\AProject\src\java and the third to a tree rooted at C:\dev\buildtest\co\src\java.
-
-<hr>
-<p align="center">
-Copyright &copy; 2001-2002 Apache Software Foundation. All rights Reserved.
-</p>
-
-</body>
-</html>
diff --git a/docs/manual/OptionalTasks/stylebook.html b/docs/manual/OptionalTasks/stylebook.html
deleted file mode 100644
index 220f48d..0000000
--- a/docs/manual/OptionalTasks/stylebook.html
+++ /dev/null
@@ -1,65 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>StyleBook Task</title>
-</head>
-
-<body>
-
-<h2><a name="stylebook">Stylebook</a></h2>
-<h3>Description</h3>
-<p>This executes the apache Stylebook documentation generator. 
-Unlike the commandline version of this tool, all three arguments
-are required to run stylebook.</p>
-<p><b>Note:</b> This task depends on external libraries not included in the Ant distribution.
-See <a href="../install.html#librarydependencies">Library Dependencies</a> for more information.</p>
-
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">book</td>
-    <td valign="top">the book xml file that the documentation generation starts from
-    </td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">skindirectory</td>
-    <td valign="top">the directory that contains the stylebook skin
-    </td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">targetdirectory</td>
-    <td valign="top">the destination directory where the documentation is generated 
-    </td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-</table>
-<p>
-The user can also specify the nested &lt;classpath&gt; element which defines classpath 
-in which the task is executed.</p>
-
-<h3>Examples</h3>
-<blockquote>
-<pre>
-&lt;stylebook targetdirectory=&quot;build/docs&quot; 
-           book=&quot;src/xdocs/book.xml&quot; 
-           skindirectory=&quot;src/skins/myskin&quot;/&gt;
-</pre>
-</blockquote>
-The above will generate documentation in build/docs starting from the book 
-src/xdocs/book.xml and using the skin located in directory src/skins/myskin.
-
-<hr>
-<p align="center">Copyright &copy; 2001 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/OptionalTasks/telnet.html b/docs/manual/OptionalTasks/telnet.html
deleted file mode 100644
index 585cadf..0000000
--- a/docs/manual/OptionalTasks/telnet.html
+++ /dev/null
@@ -1,140 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Telnet Task</title>
-</head>
-
-<body>
-
-<h2><a name="telnet">Telnet</a></h2>
-<h3>Description</h3>
-Task to automate a remote telnet session. The task uses 
-nested <tt>&lt;read&gt;</tt> to indicate strings to wait for, and
-<tt>&lt;write&gt;</tt> tags to specify text to send.  
-
-<p>If you do specify a userid and password, the system will 
-assume a common unix prompt to wait on. This behavior can be easily over-ridden.</p>
-<p><b>Note:</b> This task depends on external libraries not included in the Ant distribution.
-See <a href="../install.html#librarydependencies">Library Dependencies</a> for more information.</p>
-
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <th>Attribute</th>
-    <th>Values</th>
-    <th>Required</th>
-  </tr>
-  <tr>
-     <td>userid</td>
-     <td>the login id to use on the telnet server.</td>
-     <td>Only if password is specified</td>
-  </tr>
-  <tr>
-     <td>password</td>
-     <td>the login password to use on the telnet server.</td>
-     <td>Only if userid is specified</td>
-  </tr>
-  <tr>
-     <td>server</td>
-     <td>the address of the remote telnet server.</td>
-     <td>Yes</td>
-  </tr>
-  <tr>
-     <td>port</td>
-     <td>the port number of the remote telnet server. Defaults to port 23.</td>
-     <td>No</td>
-  </tr>
-  <tr>
-     <td>initialCR</td>
-     <td>send a cr after connecting (&quot;yes&quot;). Defaults to &quot;no&quot;.</td>
-     <td>No</td>
-  </tr>
-  <tr>
-     <td>timeout</td>
-     <td>set a default timeout to wait for a response. Specified in seconds. Default is no timeout.</td>
-     <td>No</td>
-  </tr>
-</table>
-<h3><a name="nested">Nested Elements</a></h3>
-The commands to send to the server, and responses to wait for, are
-described as nested elements.  
-
-<h4>read</h4>
-
-<p>declare (as a text child of this element) a string to wait for.
-The element supports the timeout attribute, which overrides any
-timeout specified for the task as a whole. It also has a <tt>string</tt>
-attribute, which is an alternative to specifying the string as 
-a text element.
-</p>
-<i>Always declare an opening and closing
-&lt;read&gt; element to ensure that statements are not sent before
-the connection is ready, and that the connection is not broken before
-the final command has completed.
-</i>
-<h4>write</h4>
-
-<p>describes the text to send to the server. The <tt>echo</tt> boolean
-attribute controls whether the string is echoed to the local log; 
-this is "true" by default
-</p>
-<h3>Examples</h3>
-A simple example of connecting to a server and running a command.  This assumes
- a prompt of &quot;ogin:&quot; for the userid, and a prompt of &quot;assword:&quot;
- for the password.
-
-<blockquote><pre>
-&lt;telnet userid=&quot;bob&quot; password=&quot;badpass&quot; server=&quot;localhost&quot;&gt;
-   &lt;read&gt;/home/bob&lt;/read&gt;
-   &lt;write&gt;ls&lt;/write&gt;
-   &lt;read string=&quot;/home/bob&quot;/&gt;
-&lt;/telnet&gt;
-</pre></blockquote>
-
-This task can be rewritten as:
-<blockquote><pre>
-&lt;telnet server=&quot;localhost&quot;&gt;
-   &lt;read&gt;ogin:&lt;/read&gt;
-   &lt;write&gt;bob&lt;/write&gt;
-   &lt;read&gt;assword:&lt;/read&gt;
-   &lt;write&gt;badpass&lt;/write&gt;
-   &lt;read&gt;/home/bob&lt;/read&gt;
-   &lt;write&gt;ls&lt;/write&gt;
-   &lt;read&gt;/home/bob&lt;/read&gt;
-&lt;/telnet&gt;
-</pre></blockquote>
-
-A timeout can be specified at the &lt;telnet&gt; level or at the &lt;read&gt; level. 
-This will connect, issue a sleep command that is suppressed from displaying and wait 
-10 seconds before quitting.
-<blockquote><pre>
-&lt;telnet userid=&quot;bob&quot; password=&quot;badpass&quot; server=&quot;localhost&quot; timeout=&quot;20&quot;&gt;
-   &lt;read&gt;/home/bob&lt;/read&gt;
-   &lt;write echo=&quot;false&quot;&gt;sleep 15&lt;/write&gt;
-   &lt;read timeout=&quot;10&quot;&gt;/home/bob&lt;/read&gt;
-&lt;/telnet&gt;
-</pre></blockquote>
-
-The task can be used with other ports as well:
-<blockquote><pre>
-&lt;telnet port=&quot;80&quot; server=&quot;localhost&quot; timeout=&quot;20&quot;&gt;
-   &lt;read/&gt;
-   &lt;write&gt;GET / http/0.9&lt;/write&gt;
-   &lt;write/&gt;
-   &lt;read timeout=&quot;10&quot;&gt;&amp;lt;/HTML&amp;gt;&lt;/read&gt;
-&lt;/telnet&gt;
-</pre></blockquote>
-<p>
-To use this task against the WinNT telnet service, you need to configure the service to use 
-classic authentication rather than NTLM negotiated authentication. 
-This can be done in the Telnet Server Admin app: 
-select "display/change registry settings", then "NTLM", then set the value of NTLM to 1.
-</p>
-<hr>
-<p align="center">Copyright &copy; 2001-2002 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/OptionalTasks/test.html b/docs/manual/OptionalTasks/test.html
deleted file mode 100644
index 953dff7..0000000
--- a/docs/manual/OptionalTasks/test.html
+++ /dev/null
@@ -1,72 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Test Task</title>
-</head>
-
-<body>
-
-<h2><a name="test">Test</a></h2>
-<h3>Description</h3>
-<p>This is a primitive task to execute a unit test in the org.apache.testlet framework.</p>
-
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">showSuccess</td>
-    <td valign="top">a boolean value indicating whether tests should display a 
-    message on success
-    </td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">showBanner</td>
-    <td valign="top">a boolean value indicating whether a banner should be displayed 
-    when starting testlet engine
-    </td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">forceShowTrace</td>
-    <td valign="top">a boolean indicating that a stack trace is displayed on any failure
-    </td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">showTrace</td>
-    <td valign="top">a boolean indicating that a stack trace is displayed on 
-    error (but not normal failure)
-    </td>
-    <td valign="top" align="center">No</td>
-  </tr>
-</table>
-<p>
-The user can also specify the nested &lt;classpath&gt; element which defines classpath 
-in which the task is executed. The user also specifies a subelement per testlet executed
-which has content that specifies tasklet classname.</p>
-
-<h3>Examples</h3>
-<blockquote>
-<pre>
-&lt;test showSuccess=&quot;false&quot; showBanner=&quot;false&quot; showTrace=&quot;true&quot; forceShowTrace=&quot;true&quot;&gt;
-   &lt;classpath refid=&quot;test.classpath&quot;/&gt;
-   &lt;testlet&gt;org.foo.MyTestlet&lt;/testlet&gt;
-   &lt;testlet&gt;org.foo.MyOtherTestlet&lt;/testlet&gt;
-&lt;/test&gt;
-</pre>
-</blockquote>
-The above will run the testlets org.foo.MyTestlet and org.foo.MyOtherTestlet
-
-<hr>
-<p align="center">Copyright &copy; 2001-2002 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/OptionalTasks/translate.html b/docs/manual/OptionalTasks/translate.html
deleted file mode 100644
index d9d3041..0000000
--- a/docs/manual/OptionalTasks/translate.html
+++ /dev/null
@@ -1,163 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Translate Task</title>
-</head>
-
-<body>
-
-<h2><a name="translate">Translate</a></h2>
-<h3>Description</h3>
-<p>Identifies keys in files delimited by special tokens
-and translates them with values read from resource bundles.
-</p>
-<p>
-A resource bundle contains locale-specific key-value pairs.
-A resource bundle is a hierarchical set of property files.
-A bundle name makes up its base family name.  Each file that
-makes up this bundle has this name plus its locale.  For example,
-if the resource bundle name is MyResources, the file that contains
-German text will take the name MyResources_de.  In addition to
-language, country and variant are also used to form the files in
-the bundle.
-</p>
-<p>
-The resource bundle lookup searches for resource files with various
-suffixes on the basis of (1) the desired locale and (2) the default
-locale (basebundlename), in the following order from lower-level
-(more specific) to parent-level (less specific):
-</p>
-<pre>
-basebundlename + &quot;_&quot; + language1 + &quot;_&quot; + country1 + &quot;_&quot; + variant1
-basebundlename + &quot;_&quot; + language1 + &quot;_&quot; + country1
-basebundlename + &quot;_&quot; + language1
-basebundlename
-basebundlename + &quot;_&quot; + language2 + &quot;_&quot; + country2 + &quot;_&quot; + variant2
-basebundlename + &quot;_&quot; + language2 + &quot;_&quot; + country2
-basebundlename + &quot;_&quot; + language2
-</pre>
-<p>
-The file names generated thus are appended with the string &quot;.properties&quot;
-to make up the file names that are to be used.
-</p>
-<p>
-File encoding is supported.  The encoding scheme of the source files,
-destination files and the bundle files can be specified.
-
-Destination files can be exlicitly overwritten using the
-<var>forceoverwrite</var> attribute.  If <var>forceoverwrite</var>
-is false, the destination file is overwritten only if either the
-source file or any of the files that make up the bundle have been
-modified after the destination file was last modified.
-</p>
-<p><a href="../CoreTypes/fileset.html">FileSet</a>s are used to select files to
-translate.
-</p>
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">todir</td>
-    <td valign="top">Destination directory where destination files are
-      to be created.</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">starttoken</td>
-    <td valign="top">The starting token to identify keys.</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">endtoken</td>
-    <td valign="top">The ending token to identify keys.</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">bundle</td>
-    <td valign="top">Family name of resource bundle.</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">bundlelanguage</td>
-    <td valign="top">
-        Locale specific language of resource bundle.  Defaults to
-        default locale's language.
-    </td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">bundlecountry</td>
-    <td valign="top">
-        Locale specific country of resource bundle.  Defaults to
-        default locale's country.
-    </td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">bundlevariant</td>
-    <td valign="top">
-        Locale specific variant of resource bundle.  Defaults to
-        the default variant of the country and language being used.
-    </td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">srcencoding</td>
-    <td valign="top">Source file encoding scheme.  Defaults to
-    system default file encoding.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">destencoding</td>
-    <td valign="top">Destination file encoding scheme.  Defaults to
-    source file encoding.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">bundleencoding</td>
-    <td valign="top">Resource Bundle file encoding scheme.  Defaults to
-    source file encoding.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">forceoverwrite</td>
-    <td valign="top">Overwrite existing files even if the destination
-      files are newer. Defaults to &quot;no&quot;.</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-</table>
-<h3>Parameters specified as nested elements</h3>
-
-<h4>fileset</h4>
- <p><a href="../CoreTypes/fileset.html">FileSets</a> are used to select files that
- contain keys for which value translated files are to be generated.
-</p>
-<h3>Examples</h3>
-<p><b>Translate source file encoded in english into its japanese
-equivalent using a resource bundle encoded in japanese.
-</b></p>
-<pre>
-  &lt;translate toDir=&quot;$(dest.dir}/ja&quot;
-        starttoken=&quot;#&quot;
-        endtoken=&quot;#&quot;
-        bundle=&quot;resource/BaseResource&quot;
-        bundlelanguage=&quot;ja&quot;
-        forceoverwrite=&quot;yes&quot;
-        srcencoding=&quot;ISO8859_1&quot;
-        destencoding=&quot;SJIS&quot;
-        bundleencoding=&quot;SJIS&quot;&gt;
-        &lt;fileset dir=&quot;${src.dir}&quot;&gt;
-            &lt;include name=&quot;**/*.jsp&quot;/&gt;
-        &lt;/fileset&gt;
-  &lt;/translate&gt;
-</pre>
-<hr>
-<p align="center">Copyright &copy; 2001 Apache Software Foundation. All rights
-Reserved.</p>
-</body>
-</html>
diff --git a/docs/manual/OptionalTasks/vss.html b/docs/manual/OptionalTasks/vss.html
deleted file mode 100644
index 2c27355..0000000
--- a/docs/manual/OptionalTasks/vss.html
+++ /dev/null
@@ -1,734 +0,0 @@
-<html>
-<head>
-<title>Microsoft Visual SourceSafe(VSS) Tasks</title>
-</head>
-<body>
-<h1>Microsoft Visual SourceSafe Tasks User Manual</h1>
-<p>by</p>
-<ul>
-    <li>Craig Cottingham</li>
-    <li>Andrew Everitt</li>
-    <li>Balazs Fejes 2</li>
-    <li><a href="mailto:Glenn_Twiggs@bmc.com">Glenn_Twiggs@bmc.com</a></li>
-    <li>Martin Poeschl (<a href="mailto:mpoeschl@marmot.at">mpoeschl@marmot.at</a>)</li>
-    <li>Phillip Wells</li>
-    <li>Jon Skeet (<a href="mailto:jon.skeet@peramon.com">jon.skeet@peramon.com</a>)</li>
-    <li>Nigel Magnay (<a href="mailto:nigel.magnay@parsec.co.uk">nigel.magnay@parsec.co.uk</a>)</li>
-    <li>Gary S. Weaver</li>
- </ul>
-<p>$Date$</p>
-<hr>
-<h2>Contents</h2>
-<ul>
-    <li><a href="#intro">Introduction</a></li>
-    <li><a href="#tasks">The Tasks</a></li>
-</ul>
-<br>
-<h2><a name="intro">Introduction</a></h2>
-<p>These tasks provide an interface to the 
-<a href="http://msdn.microsoft.com/ssafe/default.asp" target="_top">Microsoft Visual SourceSafe</a> SCM.
-The <code>org.apache.tools.ant.taskdefs.optional.vss</code> package consists of a simple framework to support 
-vss functionality as well as some Ant tasks encapsulating frequently used vss commands. 
-Although it is possible to use these commands on the desktop, 
-they were primarily intended to be used by automated build systems.</p>
-
-<h2><a name="tasks">The Tasks</a></h2>
-
-<table border="0" cellspacing="0" cellpadding="3">
-    <tr>
-        <td><a href="#vssget">vssget</a></td>
-        <td>Retrieves a copy of the specified VSS file(s).</td>
-    </tr>
-    <tr>
-        <td><a href="#vsslabel">vsslabel</a></td>
-        <td>Assigns a label to the specified version or current version of a file or project.</td>
-    </tr>
-    <tr>
-        <td><a href="#vsshistory">vsshistory</a></td>
-        <td>Shows the history of a file or project in VSS.</td>
-    </tr>
-    <tr>
-        <td><a href="#vsscheckin">vsscheckin</a></td>
-        <td>Updates VSS with changes made to a checked out file, and unlocks the VSS master copy.</td>
-    </tr>
-    <tr>
-        <td><a href="#vsscheckout">vsscheckout</a></td>
-        <td>Copies a file from the current project to the current folder, for the purpose of editing.</td>
-    </tr>
-    <tr>
-        <td><a href="#vssadd">vssadd</a></td>
-        <td>Adds a new file into the VSS Archive</td>
-    </tr>
-    <tr>
-        <td><a href="#vsscp">vsscp</a></td>
-        <td>Change the current project being used in VSS</td>
-    </tr>
-    <tr>
-		<td><a href="#vsscreate">vsscreate</a></td>
-		<td>Creates a project in VSS.</td>
-	</tr>
-</table>
-
-<hr>
-<h2>Task Descriptions</h2>
-
-<!-- VSSGET -->
-
-<h2><a name="vssget">VssGet</a></h2>
-<h3>Description</h3>
-Task to perform GET commands to Microsoft Visual SourceSafe.
-<p>If you specify two or more attributes from version, date and 
-label only one will be used in the order version, date, label.</p>
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <th>Attribute</th>
-    <th>Values</th>
-    <th>Required</th>
-  </tr>
-  <tr>
-     <td>vsspath</td>
-     <td>SourceSafe path which specifies the project/file(s) you wish to 
-         perform the action on. You should not specify the leading dollar-sign - 
-         it is prepended by Ant automatically.</td>
-     <td>Yes</td>
-  </tr>
-  <tr>
-     <td>login</td>
-     <td>username[,password] - The username and password needed to get access
-         to VSS. Note that you may need to specify both (if you have a password) - 
-         Ant/VSS will hang if you leave the password out and VSS does not accept 
-         login without a password. </td>
-     <td>No</td>
-  </tr>
-  <tr>
-     <td>localpath</td>
-     <td>Override the working directory and get to the specified path</td>
-     <td>No</td>
-  </tr>
-  <tr>
-     <td>ssdir</td>
-     <td>directory where <code>ss.exe</code> resides. By default the
-         task expects it to be in the PATH.</td>
-     <td>No</td>
-  </tr>
-  <tr>
-     <td>serverPath</td>
-     <td>directory where <code>srssafe.ini</code> resides.</td>
-     <td>No</td>
-  </tr>
-  <tr>
-     <td>writable</td>
-     <td>true or false</td>
-     <td>No</td>
-  </tr>
-  <tr>
-     <td>recursive</td>
-     <td>true or false</td>
-     <td>No</td>
-  </tr>
-  <tr>
-     <td>version</td>
-     <td>a version number to get</td>
-     <td rowspan="3">No, only one of these allowed</td>
-  </tr>
-  <tr>
-     <td>date</td>
-     <td>a date stamp to get at</td>
-  </tr>
-  <tr>
-     <td>label</td>
-     <td>a label to get for</td>
-  </tr>
-  <tr>
-     <td>quiet</td>
-     <td>suppress output (off by default)</td>
-     <td>No</td>
-  </tr>
-  <tr>
-     <td>autoresponse</td>
-     <td>What to respond with (sets the -I option). By default, -I- is
-     used; values of Y or N will be appended to this.</td>
-     <td>No</td>
-  </tr>
-</table>
-<p>Note that only one of version, date or label should be specified</p>
-<h3>Examples</h3>
-<blockquote>
-<pre>
-&lt;vssget localPath=&quot;C:\mysrc\myproject&quot;
-        recursive=&quot;true&quot; 
-        label=&quot;Release1&quot;
-        login=&quot;me,mypassword&quot;
-        vsspath=&quot;/source/aProject&quot;
-        writable=&quot;true&quot;/&gt;
-</pre>
-</blockquote>
-<p>Does a get on the VSS-Project <i>$/source/myproject</i> using the username
-<i>me</i> and the password <i>mypassword</i>. It will recursively get the files 
-which are labeled <i>Release1</i> and write them to the local directory
-<i>C:\mysrc\myproject</i>. The local files will be writable.</p>
-<hr>
-
-<!-- VSSLABEL -->
-
-<h2><a name="vsslabel">VssLabel</a></h2>
-<h3>Description</h3>
-Task to perform LABEL commands to Microsoft Visual SourceSafe.
-<p>Assigns a label to the specified version or current version of a file or
-project.</p>
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-   <tr>
-     <th>Attribute</th>
-     <th>Values</th>
-     <th>Required</th>
-   </tr>
-  <tr>
-     <td>vsspath</td>
-     <td>SourceSafe path which specifies the project/file(s) you wish to 
-         perform the action on. You should not specify the leading dollar-sign - 
-         it is prepended by Ant automatically.</td>
-     <td>Yes</td>
-  </tr>
-  <tr>
-     <td>login</td>
-     <td>username[,password] - The username and password needed to get access
-         to VSS. Note that you may need to specify both (if you have a password) - 
-         Ant/VSS will hang if you leave the password out and VSS does not accept 
-         login without a password. </td>
-     <td>No</td>
-  </tr>
-  <tr>
-     <td>ssdir</td>
-     <td>directory where <code>ss.exe</code> resides. By default the
-         task expects it to be in the PATH.</td>
-     <td>No</td>
-  </tr>
-  <tr>
-     <td>serverPath</td>
-     <td>directory where <code>srssafe.ini</code> resides.</td>
-     <td>No</td>
-  </tr>
-   <tr>
-      <td>label</td>
-      <td>A label to apply to the hierarchy</td>
-      <td>Yes</td>
-   </tr>
-   <tr>
-      <td>version</td>
-      <td>An existing file or project version to label. By default the current
-      version is labelled.</td>
-      <td>No</td>
-   </tr>
-   <tr>
-      <td>comment</td>
-      <td>The comment to use for this label. Empty or '-' for no comment.</td>
-      <td>No</td>
-   </tr>
-  <tr>
-     <td>autoresponse</td>
-     <td>What to respond with (sets the -I option). By default, -I- is
-     used; values of Y or N will be appended to this.</td>
-     <td>No</td>
-  </tr>
-</table>
-<h3>Examples</h3>
-<blockquote>
-<pre>
-&lt;vsslabel vsspath=&quot;/source/aProject&quot;
-          login=&quot;me,mypassword&quot;
-          label=&quot;Release1&quot;/&gt;
-</pre>
-</blockquote>
-<p>Labels the current version of the VSS project <i>$/source/aProject</i> with
-the label <i>Release1</i> using the username <i>me</i> and the password 
-<i>mypassword</i>.
-</p>
-<blockquote>
-<pre>
-&lt;vsslabel vsspath=&quot;/source/aProject/myfile.txt&quot;
-          version=&quot;4&quot;
-          label=&quot;1.03.004&quot;/&gt;
-</pre>
-</blockquote>
-<p>Labels version 4 of the VSS file <i>$/source/aProject/myfile.txt</i> with the
-label <i>1.03.004</i>. If this version already has a label, the operation (and
-the build) will fail.
-</p>
-<hr>
-
-<!-- VSSHISTORY -->
-
-<h2><a name="vsshistory">VssHistory</a></h2>
-<h3>Description</h3>
-Task to perform HISTORY commands to Microsoft Visual SourceSafe.
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr> 
-    <th>Attribute</th>
-    <th>Values</th>
-    <th>Required</th>
-  </tr>
-  <tr>
-     <td>vsspath</td>
-     <td>SourceSafe path which specifies the project/file(s) you wish to 
-         perform the action on. You should not specify the leading dollar-sign - 
-         it is prepended by Ant automatically.</td>
-     <td>Yes</td>
-  </tr>
-  <tr>
-     <td>login</td>
-     <td>username[,password] - The username and password needed to get access
-         to VSS. Note that you may need to specify both (if you have a password) - 
-         Ant/VSS will hang if you leave the password out and VSS does not accept 
-         login without a password. </td>
-     <td>No</td>
-  </tr>
-  <tr>
-     <td>ssdir</td>
-     <td>directory where <code>ss.exe</code> resides. By default the
-         task expects it to be in the PATH.</td>
-     <td>No</td>
-  </tr>
-  <tr>
-     <td>serverPath</td>
-     <td>directory where <code>srssafe.ini</code> resides.</td>
-     <td>No</td>
-  </tr>
-  <tr> 
-    <td>fromDate</td>
-    <td>Start date for comparison</td>
-    <td>See below</td>
-  </tr>
-  <tr> 
-    <td>toDate</td>
-    <td>Start date for comparison</td>
-    <td>See below</td>
-  </tr>
-  <tr>
-    <td>dateFormat</td>
-    <td>Format of dates in fromDate and toDate. Used when calculating dates with 
-      the numdays attribute. This string uses the formatting rules of SimpleDateFormat. 
-      Defaults to DateFormat.SHORT.</td>
-    <td>No</td>
-  </tr>
-  <tr> 
-    <td>fromLabel</td>
-    <td>Start label for comparison</td>
-    <td>No</td>
-  </tr>
-  <tr> 
-    <td>toLabel</td>
-    <td>Start label for comparison</td>
-    <td>No</td>
-  </tr>
-  <tr> 
-    <td>numdays</td>
-    <td>The number of days for comparison.</td>
-    <td>See below</td>
-  </tr>
-  <tr> 
-    <td>output</td>
-    <td>File to write the diff.</td>
-    <td>No</td>
-  </tr>
-  <tr> 
-    <td>recursive</td>
-    <td>true or false</td>
-    <td>No</td>
-  </tr> 
-  <tr> 
-    <td>style</td>
-    <td>brief, codediff, default or nofile. The default is default.</td>
-    <td>No</td>
-  </tr> 
-</table>
-
-<h4>Specifying the time-frame</h4>
-<p>There are different ways to specify what time-frame you wish to evaluate:</p>
-<ul>
-  <li>Changes between two dates: Specify both <code>fromDate</code> and <code>toDate</code> </li>
-  <li>Changes before a date: Specify <code>toDate</code></li>
-  <li>Changes after a date: Specify <code>fromDate</code></li>
-  <li>Changes X Days before a date: Specify <code>toDate</code> and (negative!) <code>numDays</code></li>
-  <li>Changes X Days after a date: Specify <code>fromDate</code> and <code>numDays</code></li>
-</ul>
-
-
-<h3>Examples</h3>
-<blockquote>
-  <pre>
-&lt;vsshistory vsspath=&quot;/myProject&quot; recursive=&quot;true&quot; 
-            fromLabel=&quot;Release1&quot;
-            toLabel=&quot;Release2&quot;/&gt;
-</pre>
-</blockquote>
-<p>Shows all changes between &quot;Release1&quot; and &quot;Release2&quot;.</p>
-
-<blockquote>
-  <pre>
-&lt;vsshistory vsspath=&quot;/myProject&quot; recursive=&quot;true&quot; 
-            fromDate=&quot;01.01.2001&quot;
-            toDate=&quot;31.03.2001&quot;/&gt;
-</pre>
-</blockquote>
-<p>Shows all changes between January 1st 2001 and March 31st 2001 (in Germany, date must be specified according to your locale).</p>
-
-<blockquote> 
-  <pre>
-&lt;tstamp&gt;
-  &lt;format property=&quot;to.tstamp&quot; pattern=&quot;M-d-yy;h:mma&quot; /&gt;
-&lt;/tstamp&gt;
-
-&lt;vsshistory vsspath=&quot;/myProject&quot; recursive=&quot;true&quot; 
-            numDays=&quot;-14&quot;
-            dateFormat=&quot;M-d-yy;h:mma&quot;
-            toDate=&quot;${to.tstamp}&quot;/&gt;
-</pre>
-</blockquote>
-<p>Shows all changes in the 14 days before today.</p>
-<hr>
-
-<!-- VSSCHECKIN -->
-
-<h2><a name="vsscheckin">VssCheckin</a></h2>
-<h3>Description</h3>
-Task to perform CHECKIN commands to Microsoft Visual SourceSafe.
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <th>Attribute</th>
-    <th>Values</th>
-    <th>Required</th>
-  </tr>
-  <tr>
-     <td>vsspath</td>
-     <td>SourceSafe path which specifies the project/file(s) you wish to 
-         perform the action on. You should not specify the leading dollar-sign - 
-         it is prepended by Ant automatically.</td>
-     <td>Yes</td>
-  </tr>
-  <tr>
-     <td>login</td>
-     <td>username[,password] - The username and password needed to get access
-         to VSS. Note that you may need to specify both (if you have a password) - 
-         Ant/VSS will hang if you leave the password out and VSS does not accept 
-         login without a password. </td>
-     <td>No</td>
-  </tr>
-  <tr>
-     <td>localpath</td>
-     <td>Override the working directory and get to the specified path</td>
-     <td>No</td>
-  </tr>
-  <tr>
-     <td>ssdir</td>
-     <td>directory where <code>ss.exe</code> resides. By default the
-         task expects it to be in the PATH.</td>
-     <td>No</td>
-  </tr>
-  <tr>
-     <td>serverPath</td>
-     <td>directory where <code>srssafe.ini</code> resides.</td>
-     <td>No</td>
-  </tr>
-  <tr>
-     <td>writable</td>
-     <td>true or false</td>
-     <td>No</td>
-  </tr>
-  <tr>
-     <td>recursive</td>
-     <td>true or false</td>
-     <td>No</td>
-  </tr>
-  <tr>
-     <td>comment</td>
-     <td>Comment to use for the files that where checked in.</td>
-     <td>No</td>
-  </tr>
-  <tr>
-     <td>autoresponse</td>
-     <td>'Y', 'N' or empty. Specify how to reply to questions from VSS.</td>
-     <td>No</td>
-  </tr>
-</table>
-
-<h3>Examples</h3>
-<blockquote>
-<pre>
-&lt;vsscheckin vsspath=&quot;/test/test*&quot;
-            localpath=&quot;D:\build\&quot;
-            comment=&quot;Modified by automatic build&quot;/&gt;
-</pre>
-</blockquote>
-<p>Checks in the file(s) named <i>test*</i> in the project <i>test</i> using 
-the local directory <i>D:\build</i>.</p>
-<hr>
-
-<!-- VSSCHECKOUT -->
-
-<h2><a name="vsscheckout">VssCheckout</a></h2>
-<h3>Description</h3>
-Task to perform CHECKOUT commands to Microsoft Visual SourceSafe.
-<p>If you specify two or more attributes from version, date and 
-label only one will be used in the order version, date, label.</p>
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <th>Attribute</th>
-    <th>Values</th>
-    <th>Required</th>
-  </tr>
-  <tr>
-     <td>vsspath</td>
-     <td>SourceSafe path which specifies the project/file(s) you wish to 
-         perform the action on. You should not specify the leading dollar-sign - 
-         it is prepended by Ant automatically.</td>
-     <td>Yes</td>
-  </tr>
-  <tr>
-     <td>login</td>
-     <td>username[,password] - The username and password needed to get access
-         to VSS. Note that you may need to specify both (if you have a password) - 
-         Ant/VSS will hang if you leave the password out and VSS does not accept 
-         login without a password. </td>
-     <td>No</td>
-  </tr>
-  <tr>
-     <td>localpath</td>
-     <td>Override the working directory and get to the specified path</td>
-     <td>No</td>
-  </tr>
-  <tr>
-     <td>ssdir</td>
-     <td>directory where <code>ss.exe</code> resides. By default the
-         task expects it to be in the PATH.</td>
-     <td>No</td>
-  </tr>
-  <tr>
-     <td>serverPath</td>
-     <td>directory where <code>srssafe.ini</code> resides.</td>
-     <td>No</td>
-  </tr>
-  <tr>
-     <td>writable</td>
-     <td>true or false</td>
-     <td>No</td>
-  </tr>
-  <tr>
-     <td>recursive</td>
-     <td>true or false</td>
-     <td>No</td>
-  </tr>
-  <tr>
-     <td>version</td>
-     <td>a version number to get</td>
-     <td rowspan="3">No, only one of these allowed</td>
-  </tr>
-  <tr>
-     <td>date</td>
-     <td>a date stamp to get at</td>
-  </tr>
-  <tr>
-     <td>label</td>
-     <td>a label to get for</td>
-  </tr>
-</table>
-
-<h3>Examples</h3>
-<blockquote>
-<pre>
-&lt;vsscheckout vsspath=&quot;/test&quot;
-             localpath=&quot;D:\build&quot;
-             recursive=&quot;true&quot;
-             login=&quot;me,mypass&quot;/&gt;
-</pre>
-</blockquote>
-<p>Does a recursive checkout of the project test to the directory D:\build. 
-</p>
-<hr>
-
-<!-- VSSADD -->
-
-<h2><a name="vssadd">VssAdd</a></h2>
-<h3>Description</h3>
-Task to perform ADD commands to Microsoft Visual SourceSafe.
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <th>Attribute</th>
-    <th>Values</th>
-    <th>Required</th>
-  </tr>
-  <tr>
-     <td>localpath</td>
-     <td>Specify the local file(s) to add to VSS</td>
-     <td>Yes</td>
-  </tr>
-  <tr>
-     <td>login</td>
-     <td>username[,password] - The username and password needed to get access
-         to VSS. Note that you may need to specify both (if you have a password) - 
-         Ant/VSS will hang if you leave the password out and VSS does not accept 
-         login without a password. </td>
-     <td>No</td>
-  </tr>
-  <tr>
-     <td>ssdir</td>
-     <td>directory where <code>ss.exe</code> resides. By default the
-         task expects it to be in the PATH.</td>
-     <td>No</td>
-  </tr>
-  <tr>
-     <td>serverPath</td>
-     <td>directory where <code>srssafe.ini</code> resides.</td>
-     <td>No</td>
-  </tr>
-  <tr>
-     <td>writable</td>
-     <td>true or false</td>
-     <td>No</td>
-  </tr>
-  <tr>
-     <td>recursive</td>
-     <td>true or false</td>
-     <td>No</td>
-  </tr>
-  <tr>
-     <td>comment</td>
-     <td>Comment to use for the files that where checked in.</td>
-     <td>No</td>
-  </tr>
-  <tr>
-     <td>autoresponse</td>
-     <td>'Y', 'N' or empty. Specify how to reply to questions from VSS.</td>
-     <td>No</td>
-  </tr>
-</table>
-
-<h3>Examples</h3>
-<blockquote>
-<pre>
-&lt;vssadd localpath=&quot;D:\build\build.00012.zip&quot;
-            comment=&quot;Added by automatic build&quot;/&gt;
-</pre>
-</blockquote>
-<p>Add the file named build.00012.zip into the project current working
-directory (see vsscp).</p>
-<hr>
-
-<!-- VSSCP -->
-
-<h2><a name="vsscp">VssCp</a></h2>
-<h3>Description</h3>
-<p>Task to perform CP (Change Project) commands to Microsoft Visual SourceSafe.</p>
-<p>This task is typically used before a VssAdd in order to set the target project</p>
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <th>Attribute</th>
-    <th>Values</th>
-    <th>Required</th>
-  </tr>
-  <tr>
-     <td>vsspath</td>
-     <td>SourceSafe path which specifies the project you wish to 
-         make the current project. You should not specify the leading dollar-sign - 
-         it is prepended by Ant automatically.</td>
-     <td>Yes</td>
-  </tr>
-  <tr>
-     <td>login</td>
-     <td>username[,password] - The username and password needed to get access
-         to VSS. Note that you may need to specify both (if you have a password) - 
-         Ant/VSS will hang if you leave the password out and VSS does not accept 
-         login without a password. </td>
-     <td>No</td>
-  </tr>
-  <tr>
-     <td>ssdir</td>
-     <td>directory where <code>ss.exe</code> resides. By default the
-         task expects it to be in the PATH.</td>
-     <td>No</td>
-  </tr>
-  <tr>
-     <td>serverPath</td>
-     <td>directory where <code>srssafe.ini</code> resides.</td>
-     <td>No</td>
-  </tr>
-</table>
-
-<h3>Examples</h3>
-<blockquote>
-<pre>
-&lt;vsscp vsspath=&quot;/Projects/ant&quot;/&gt;
-</pre>
-</blockquote>
-<p>Sets the current VSS project to <i>$/Projects/ant</i>.</p>
-<hr>
-
-<!-- VSSCREATE -->
-
- <h2><a name="vsscreate">VssCreate</a></h2>
- <h3>Description</h3>
- Task to perform CREATE commands to Microsoft Visual Source Safe.
- <p>Creates a new project in VSS.</p>
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <th>Attribute</th>
-    <th>Values</th>
-    <th>Required</th>
-  </tr>
-  <tr>
-    <td>login</td>
-    <td>username,password</td>
-    <td>No</td>
-  </tr>
-  <tr>
-    <td>vsspath</td>
-    <td>SourceSafe path of project to be created</td>
-    <td>Yes</td>
-  </tr>
-  <tr>
-    <td>ssdir</td>
-    <td>directory where <code>ss.exe</code> resides. By default the task expects it to be in the PATH.</td>
-    <td>No</td>
-  </tr>
-  <tr>
-    <td>quiet</td>
-    <td>suppress output (off by default)</td>
-    <td>No</td>
-   </tr>
-  <tr>
-    <td>failOnError</td>
-    <td>fail if there is an error creating the project (true by default)</td>
-    <td>No</td>
-  </tr>
-  <tr>
-    <td>autoresponse</td>
-    <td>What to respond with (sets the -I option). By default, -I- is used; values of Y or N will be appended to this.</td>
-    <td>No</td>
-  </tr>
-  <tr>
-    <td>comment</td>
-    <td>The comment to use for this label. Empty or '-' for no comment.</td>
-    <td>No</td>
-  </tr>
-</table>
-<h3>Examples</h3>
-<blockquote>
-<pre>
-&lt;vsscreate vsspath=&quot;/existingProject/newProject&quot;/&gt;
-</pre>
-</blockquote>
-<p>Creates the VSS-Project <i>$/existingProject/newProject</i>.</p>
-<hr>
-
-<!-- Footer -->
-<p align="center">Copyright &copy; 2001-2002 Apache Software Foundation. All rights
-Reserved.</p>
-</body>
-</html>
diff --git a/docs/manual/OptionalTasks/wljspc.html b/docs/manual/OptionalTasks/wljspc.html
deleted file mode 100644
index b8952c3..0000000
--- a/docs/manual/OptionalTasks/wljspc.html
+++ /dev/null
@@ -1,83 +0,0 @@
-<html>
-<head><title>WLJSPC Task</title></head>
-<body>
-<h1>wljspc</h1>
-<h3>Description</h3>
-<p>Class to precompile JSP's using weblogic's jsp compiler (weblogic.jspc)</p>
-Tested only on Weblogic 4.5.1 - NT4.0 and Solaris 5.7,5.8<br>
-<h3>Parameters</h3>
-<table border="1" cellPadding="2" cellSpacing="0">
-  <tbody>
-    <tr>
-      <th>Attribute</th>
-      <th>Values</th>
-      <th>Required</th>
-    </tr>
-    <tr>
-      <td>src</td>
-      <td>oot of source tree for JSP, ie, the document root for your weblogic server</td>
-      <td>Yes</td>
-    </tr>
-    <tr>
-      <td>
-dest</td>
-      <td> root of destination directory, what you have set as WorkingDir in the weblogic properties</td>
-      <td>Yes</td>
-    </tr>
-    <tr>
-      <td>
-package</td>
-      <td> start package name under which your JSP's would be compiled</td>
-      <td>Yes</td>
-    </tr>
-    <tr>
-      <td>
-classpath</td>
-      <td>Class path to use when compiling jsp's</td>
-      <td>Yes</td>
-    </tr>
-  </tbody>
-</table>
-<p>
-<br>
-
-A classpath should be set which contains the weblogic classes as well as all application classes<br>
-referenced by the JSP. The system classpath is also appended when the jspc is called, so you may<br>
-choose to put everything in the classpath while calling Ant. However, since presumably the JSP's will reference<br>
-classes being build by Ant, it would be better to explicitly add the classpath in the task<br>
-<br>
-The task checks timestamps on the JSP's and the generated classes, and compiles<br>
-only those files that have changed.<br>
-<br>
-It follows the weblogic naming convention of putting classes in<br>
-<b> _dirName/_fileName.class for dirname/fileName.jsp   </b><br>
-<br>
-</p>
-<h3><br>
-Example<br>
-</h3>
-<p>
-&lt;target name="jspcompile" depends="compile"><br>
-&lt;wljspc src="c:\\weblogic\\myserver\\public_html" dest="c:\\weblogic\\myserver\\serverclasses" package="myapp.jsp" ><br>
-&lt;classpath&gt;<br>
-&lt;pathelement location="${weblogic.classpath}" /><br>
-&lt;pathelement path="${compile.dest}" /><br>
-&lt;/classpath&gt;<br>
-<br>
-&lt;/wljspc&gt;<br>
-&lt;/target>
-</p>
-
-<h3>Limitations</h3>
-<ul>
-<li>This works only on weblogic 4.5.1</li>
-<li>It compiles the files thru the Classic compiler only.</li>
-<li>Since it is my experience that weblogic jspc throws out of memory error on being given too
-many files at one go, it is called multiple times with one jsp file each.</li>
-</ul>
-<hr>
-<p align="center">Copyright &copy; 2001 Apache Software Foundation. All rights
-Reserved.</p>
-</body>
-</html>
-
diff --git a/docs/manual/OptionalTasks/xmlvalidate.html b/docs/manual/OptionalTasks/xmlvalidate.html
deleted file mode 100644
index 099f209..0000000
--- a/docs/manual/OptionalTasks/xmlvalidate.html
+++ /dev/null
@@ -1,104 +0,0 @@
-<html>
-
-<head>
-<title>XMLValidate Task</title>
-</head>
-
-<body>
-
-<h2><a name="xmlvalidate">XMLValidate</a></h2>
-<h3>Description</h3>
-
-<p>This task checks xml files are valid (or only well formed). The
-task uses the SAX2 parser implementation provided by JAXP by default
-(probably the one that is used by Ant itself), but one can specify any
-SAX1/2 parser if needed.</p>
-
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">file</td>
-    <td valign="top">the file(s) you want to check. (optionally can use an embedded fileset)</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">lenient</td>
-    <td valign="top">
-      if true, only check the xml document is well formed
-	    (ignored if the specified parser is as SAX1 parser)
-    </td>
-    <td valign="top" align="center">No</td>
-  </tr>
-  <tr>
-    <td valign="top">classname</td>
-    <td valign="top">the parser to use.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">classpathref</td>
-    <td valign="top">where to find the parser class. Optionally can use an embedded classpath element.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">failonerror</td>
-    <td valign="top">fails on a error if set to true (defaults to true).</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">warn</td>
-    <td valign="top">log parser warn events.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-</table>
-
-<h3><a name="nested">Nested Elements</a></h3>
-<h4>dtd</h4>
-&lt;dtd&gt; is used to specify different locations for DTD resolution.
-<table border="1" cellpadding="2" cellspacing="0">
-<tr>
-  <td width="12%" valign="top"><b>Attribute</b></td>
-  <td width="78%" valign="top"><b>Description</b></td>
-  <td width="10%" valign="top"><b>Required</b></td>
-</tr>
-  <tr>
-    <td valign="top">publicId</td> 
-    <td valign="top">Public ID of the DTD to resolve</td>
-    <td align="center" valign="top">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">location</td> 
-    <td valign="top">Location of the DTD to use, which can be a file,
-    a resource, or a URL</td>
-    <td align="center" valign="top">Yes</td>
-  </tr>
-</table>
-
-
-<h3>Examples</h3>
-<blockquote><pre>
-&lt;xmlvalidate file="toto.xml"/&gt;
-
-&lt;xmlvalidate failonerror="no" lenient="yes" warn="yes"
-             classname="org.apache.xerces.parsers.SAXParser" &gt;
-             classpath="lib/xerces.jar"&gt;
-  &lt;fileset dir="src" includes="style/*.xsl"/&gt;  
-&lt;/xmlvalidate&gt;
-    
-&lt;xmlvalidate file="struts-config.xml" warn="false"&gt;
-  &lt;dtd publicId="-//Apache Software Foundation//DTD Struts Configuration 1.0//EN"
-       location="struts-config_1_0.dtd"/&gt;
-&lt;/xmlvalidate&gt;
-</pre></blockquote>
-<hr>
-
-<p align="center">Copyright &copy; 2001-2002 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/OptionalTypes/classfileset.html b/docs/manual/OptionalTypes/classfileset.html
deleted file mode 100644
index ecd1fac..0000000
--- a/docs/manual/OptionalTypes/classfileset.html
+++ /dev/null
@@ -1,104 +0,0 @@
-<html>
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>ClassFileSet Type</title>
-</head>
-
-<body>
-<h2><a name="fileset">ClassFileSet</a></h2>
-<p>A classfileset is a specialised type of fileset which, given a set of 
-&quot;root&quot; classes, will include all of the class files upon which the 
-root classes depend. This is typically used to create a jar with all of the
-required classes for a particular application.
-</p>
-<p>
-classfilesets are typically used by reference. They are declared with an
-&quot;id&quot; value and this is then used as a reference where a normal fileset
-is expected.
-</p>
-<p>
-This type requires the <code>jakarta-BCEL</code> library.
-</p>
-
-
-<h3>Attributes</h3>
-<p>The class fileset support the following attributes in addition
-to those supported by the 
-<a href="../CoreTypes/fileset.html">standard fileset</a>:
-</p>
- 
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">rootclass</td>
-    <td valign="top">A single root class name</td>
-    <td valign="top" align="center">No</td>
-  </tr>
-</table>
-
-<h3>Nested Elements</h3>
-
-<h4>Root</h4>
-<p>
-When more than one root class is required, multiple nested &lt;root&gt; elements
-may be used
-</p>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">classname</td>
-    <td valign="top">The fully qualified name of the root class</td>
-    <td align="center" valign="top">Yes</td>
-  </tr>
-</table>
-
-<h4>RootFileSet</h4>
-<p>
-A root fileset is used to add a set of root classes from a fileset. In this case the entries in 
-the fileset are expected to be Java class files. The name of the Java class is determined by the 
-relative location of the classfile in the fileset. So, the file 
-<code>org/apache/tools/ant/Project.class</code> corresponds to the Java class
-<code>org.apache.tools.ant.Project</code>.</p>
-
-<h4>Examples</h4>
-<blockquote><pre>
-&lt;classfileset id=&quot;reqdClasses" dir=&quot;${classes.dir}&quot;&gt;
-  &lt;root classname=&quot;org.apache.tools.ant.Project&quot; /&gt;
-&lt;/classfileset&gt;
-</pre></blockquote>
-
-<p>This example creates a fileset containing all the class files upon which the 
-<code>org.apache.tools.ant.Project</code> class depends. This fileset could 
-then be used to create a jar. 
-</p>
-
-<blockquote><pre>
-&lt;jar destfile=&quot;minimal.jar&quot; &gt;
-  &lt;fileset refid=&quot;reqdClasses&quot;/&gt;
-&lt;/jar&gt;
-</pre></blockquote>
-
-<blockquote><pre>
-&lt;classfileset id=&quot;reqdClasses&quot; dir=&quot;${classes.dir}&quot;&gt;
-  &lt;rootfileset dir=&quot;${classes.dir}&quot; includes=&quot;org/apache/tools/ant/Project*.class&quot; /&gt;
-&lt;/classfileset&gt;
-</pre></blockquote>
-
-<p>This example constructs the classfileset using all the class with names starting with Project 
-in the org.apache.tools.ant package</p> 
-
-<hr>
-<p align="center">Copyright &copy; 2002 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/anttaskslist.html b/docs/manual/anttaskslist.html
deleted file mode 100644
index 49e229f..0000000
--- a/docs/manual/anttaskslist.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Apache Ant User Manual</title>
-<base target="mainFrame">
-</head>
-
-<body>
-
-
-<h2><a href="toc.html" target="navFrame">Table of Contents</a></h2>
-
-<h3>Ant Tasks</h3>
-<a href="tasksoverview.html" target="mainFrame">Overview of Ant Tasks</a><br>
-<a href="coretasklist.html" target="navFrame">Core Tasks</a><br>
-<a href="optionaltasklist.html" target="navFrame">Optional Tasks</a><br>
-
-</body>
-</html>
diff --git a/docs/manual/api/index.html b/docs/manual/api/index.html
deleted file mode 100644
index 7eab05e..0000000
--- a/docs/manual/api/index.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<html>
-<head>
-<meta http-equiv="refresh" content="1; URL=packages.html">
-<title>Apache Ant API</title>
-</head>
-<body>
-Redirecting to <a href="packages.html">Apache Ant API ...</a>
-</body>
-</html>
-
-
diff --git a/docs/manual/api/packages.html b/docs/manual/api/packages.html
deleted file mode 100644
index 3c9772c..0000000
--- a/docs/manual/api/packages.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<html>
-<head>
-<title>Apache Ant API</title>
-</head>
-<body>
-<b>Apache Ant API has not been generated</b>
-</body>
-</html>
-
-
diff --git a/docs/manual/conceptstypeslist.html b/docs/manual/conceptstypeslist.html
deleted file mode 100644
index 8a056b9..0000000
--- a/docs/manual/conceptstypeslist.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Apache Ant User Manual</title>
-<base target="mainFrame">
-</head>
-
-<body>
-
-<h2><a href="toc.html" target="navFrame">Table of Contents</a></h2>
-
-<h3>Concepts</h3>
-<a href="sysclasspath.html">build.sysclasspath</a><br>
-<a href="CoreTasks/common.html">Common Attributes</a><br>
-
-<h3>Core Types</h3>
-<a href="CoreTypes/description.html">Description Type</a><br>
-<a href="dirtasks.html">Directory-based Tasks</a><br>
-<a href="CoreTypes/dirset.html">DirSet</a><br>
-<a href="CoreTypes/filelist.html">FileList</a><br>
-<a href="CoreTypes/fileset.html">FileSet</a><br>
-<a href="CoreTypes/mapper.html">File Mappers</a><br>
-<a href="CoreTypes/filterchain.html">FilterChains and FilterReaders</a><br>
-<a href="CoreTypes/filterset.html">FilterSet</a><br>
-<a href="CoreTypes/patternset.html">PatternSet</a><br>
-<a href="CoreTypes/xmlcatalog.html">XMLCatalog</a><br>
-
-<h3>Optional Types</h3>
-<a href="OptionalTypes/classfileset.html">Class Fileset</a><br>
-</body>
-</html>
diff --git a/docs/manual/coretasklist.html b/docs/manual/coretasklist.html
deleted file mode 100644
index aa8c41a..0000000
--- a/docs/manual/coretasklist.html
+++ /dev/null
@@ -1,90 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Apache Ant User Manual</title>
-<base target="mainFrame">
-</head>
-
-<body>
-
-<h2><a href="toc.html" target="navFrame">Table of Contents</a></h2>
-
-<a href="optionaltasklist.html" target="navFrame">Optional Tasks</a><br>
-
-<h3>Core Tasks</h3>
-<a href="CoreTasks/ant.html">Ant</a><br>
-<a href="CoreTasks/antcall.html">AntCall</a><br>
-<a href="CoreTasks/antstructure.html">AntStructure</a><br>
-<a href="CoreTasks/apply.html">Apply/<i>ExecOn</i></a><br>
-<a href="CoreTasks/available.html">Available</a><br>
-<a href="CoreTasks/basename.html">Basename</a><br>
-<a href="CoreTasks/buildnumber.html">BuildNumber</a><br>
-<a href="CoreTasks/unpack.html">BUnzip2</a><br>
-<a href="CoreTasks/pack.html">BZip2</a><br>
-<a href="CoreTasks/checksum.html">Checksum</a><br>
-<a href="CoreTasks/chmod.html">Chmod</a><br>
-<a href="CoreTasks/concat.html">Concat</a><br>
-<a href="CoreTasks/condition.html">Condition</a><br>
-&nbsp;&nbsp;<a href="CoreTasks/conditions.html">Supported conditions</a><br>
-<a href="CoreTasks/copy.html">Copy</a><br>
-<a href="CoreTasks/copydir.html"><i>Copydir</i></a><br>
-<a href="CoreTasks/copyfile.html"><i>Copyfile</i></a><br>
-<a href="CoreTasks/cvs.html">Cvs</a><br>
-<a href="CoreTasks/changelog.html">CvsChangeLog</a><br>
-<a href="CoreTasks/cvspass.html">CVSPass</a><br>
-<a href="CoreTasks/cvstagdiff.html">CvsTagDiff</a><br>
-<a href="CoreTasks/delete.html">Delete</a><br>
-<a href="CoreTasks/deltree.html"><i>Deltree</i></a><br>
-<a href="CoreTasks/dependset.html">Dependset</a><br>
-<a href="CoreTasks/dirname.html">Dirname</a><br>
-<a href="CoreTasks/ear.html">Ear</a><br>
-<a href="CoreTasks/echo.html">Echo</a><br>
-<a href="CoreTasks/exec.html">Exec</a><br>
-<a href="CoreTasks/fail.html">Fail</a><br>
-<a href="CoreTasks/filter.html">Filter</a><br>
-<a href="CoreTasks/fixcrlf.html">FixCRLF</a><br>
-<a href="CoreTasks/genkey.html">GenKey</a><br>
-<a href="CoreTasks/get.html">Get</a><br>
-<a href="CoreTasks/unpack.html">GUnzip</a><br>
-<a href="CoreTasks/pack.html">GZip</a><br>
-<a href="CoreTasks/input.html">Input</a><br>
-<a href="CoreTasks/jar.html">Jar</a><br>
-<a href="CoreTasks/java.html">Java</a><br>
-<a href="CoreTasks/javac.html">Javac</a><br>
-<a href="CoreTasks/javadoc.html">Javadoc/<i>Javadoc2</i></a><br>
-<a href="CoreTasks/loadfile.html">LoadFile</a><br>
-<a href="CoreTasks/loadproperties.html">LoadProperties</a><br>
-<a href="CoreTasks/mail.html">Mail</a><br>
-<a href="CoreTasks/manifest.html">Manifest</a><br>
-<a href="CoreTasks/mkdir.html">Mkdir</a><br>
-<a href="CoreTasks/move.html">Move</a><br>
-<a href="CoreTasks/parallel.html">Parallel</a><br>
-<a href="CoreTasks/patch.html">Patch</a><br>
-<a href="CoreTasks/pathconvert.html">PathConvert</a><br>
-<a href="CoreTasks/property.html">Property</a><br>
-<a href="CoreTasks/recorder.html">Record</a><br>
-<a href="CoreTasks/rename.html"><i>Rename</i></a><br>
-<a href="CoreTasks/replace.html">Replace</a><br>
-<a href="CoreTasks/rmic.html">Rmic</a><br>
-<a href="CoreTasks/sequential.html">Sequential</a><br>
-<a href="CoreTasks/signjar.html">SignJar</a><br>
-<a href="CoreTasks/sleep.html">Sleep</a><br>
-<a href="CoreTasks/sql.html">Sql</a><br>
-<a href="CoreTasks/tar.html">Tar</a><br>
-<a href="CoreTasks/taskdef.html">Taskdef</a><br>
-<a href="CoreTasks/touch.html">Touch</a><br>
-<a href="CoreTasks/tstamp.html">TStamp</a><br>
-<a href="CoreTasks/typedef.html">Typedef</a><br>
-<a href="CoreTasks/unzip.html">Unjar</a><br>
-<a href="CoreTasks/unzip.html">Untar</a><br>
-<a href="CoreTasks/unzip.html">Unwar</a><br>
-<a href="CoreTasks/unzip.html">Unzip</a><br>
-<a href="CoreTasks/uptodate.html">Uptodate</a><br>
-<a href="CoreTasks/waitfor.html">Waitfor</a><br>
-<a href="CoreTasks/war.html">War</a><br>
-<a href="CoreTasks/xmlproperty.html">XmlProperty</a><br>
-<a href="CoreTasks/style.html">Xslt/Style</a><br>
-<a href="CoreTasks/zip.html">Zip</a><br>
-</body>
-</html>
diff --git a/docs/manual/cover.html b/docs/manual/cover.html
deleted file mode 100644
index 6f3ff9a..0000000
--- a/docs/manual/cover.html
+++ /dev/null
@@ -1,27 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Apache Ant 1.5 User Manual - Credits</title>
-</head>
-
-<body bgcolor="#FFFFFF">
-<div align="center"> 
-  <h1><img src="../images/ant_logo_large.gif" width="190" height="120"></h1>
-  <h1>Apache Ant 1.5 Manual</h1>
-  <p align="left">This is the manual for version 1.5 of 
-  <a href="http://jakarta.apache.org/ant/index.html">Apache Ant</a>. 
-    If your version 
-    of Ant (as verified with <tt>ant -version</tt>) is older or newer than this 
-    version then this is not the correct manual set. Please use the documentation 
-    appropriate to your current version. Also, if you are using a version
-    older than the most recent release, we recommend an upgrade to fix bugs
-    as well as provide new functionality </p>
-  <p>&nbsp;</p>
-</div>
-<hr>
-<p align="center">Copyright &copy; 2001-2002 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
diff --git a/docs/manual/credits.html b/docs/manual/credits.html
deleted file mode 100644
index a49422e..0000000
--- a/docs/manual/credits.html
+++ /dev/null
@@ -1,50 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Apache Ant User Manual - Credits</title>
-</head>
-
-<body>
-
-<div align="center">
-<h1>Apache Ant User Manual</h1>
-<p>by</p>
-</div>
-<!-- Names are in alphabetical order, on last name -->
-<ul>
-  <li>Stephane Bailliez (<a href="mailto:sbailliez@imediation.com">sbailliez@imediation.com</a>)</li>
-  <li>Nicola Ken Barozzi (<a href="mailto:nicolaken@apache.org">nicolaken@apache.org</a>)</li>
-  <li>Jacques Bergeron (<a href="mailto:jacques.bergeron@dogico.com">jacques.bergeron@dogico.com</a>)</li>
-  <li>Stefan Bodewig (<a href="mailto:stefan.bodewig@epost.de">stefan.bodewig@epost.de</a>)</li>
-  <li>Patrick Chanezon (<a href="mailto:chanezon@netscape.com">chanezon@netscape.com</a>)</li>
-  <li>James Duncan Davidson (<a href="mailto:duncan@x180.com">duncan@x180.com</a>)</li>
-  <li>Tom Dimock (<a href="mailto:tad1@cornell.edu">tad1@cornell.edu</a>)</li>
-  <li>Peter Donald (<a href="mailto:donaldp@apache.org">donaldp@apache.org</a>)</li>
-  <li>dIon Gillard (<a href="mailto:dion@apache.org">dion@apache.org</a>)</li>
-  <li>Erik Hatcher (<a href="mailto:ehatcher@apache.org">ehatcher@apache.org</a>)</li>
-  <li>Diane Holt (<a href="mailto:holtdl@yahoo.com">holtdl@yahoo.com</a>)</li>
-  <li>Bill Kelly (<a href="mailto:bill.kelly@softwired-inc.com">bill.kelly@softwired-inc.com</a>)</li>
-  <li>Arnout J. Kuiper (<a href="mailto:ajkuiper@wxs.nl">ajkuiper@wxs.nl</a>)</li>
-  <li>Conor MacNeill</li>
-  <li>Stefano Mazzocchi (<a href="mailto:stefano@apache.org">stefano@apache.org</a>)</li>
-  <li>Erik Meade (<a href="mailto:emeade@geekfarm.org">emeade@geekfarm.org</a>)</li>
-  <li>Sam Ruby (<a href="mailto:rubys@us.ibm.com">rubys@us.ibm.com</a>)</li>
-  <li>Nico Seessle (<a href="mailto:nico@seessle.de">nico@seessle.de</a>)</li>
-  <li>Jon S. Stevens (<a href="mailto:jon@latchkey.com">jon@latchkey.com</a>)</li>
-  <li>Magesh Umasankar (<a href="mailto:umagesh@apache.org">umagesh@apache.org</a>)</li>
-  <li>Roger Vaughn (<a href="mailto:rvaughn@seaconinc.com">rvaughn@seaconinc.com</a>)</li>
-  <li>Dave Walend (<a href="mailto:dwalend@cs.tufts.edu">dwalend@cs.tufts.edu</a>)</li>
-  <li>Phillip Wells (<a href="mailto:philwells@rocketmail.com">philwells@rocketmail.com</a>)</li>
-</ul>
-
-<center>
-<p>Version: @VERSION@<br>
-$Id$</p>
-</center>
-<hr>
-<p align="center">Copyright &copy; 2001-2002 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
diff --git a/docs/manual/develop.html b/docs/manual/develop.html
deleted file mode 100644
index 246996a..0000000
--- a/docs/manual/develop.html
+++ /dev/null
@@ -1,363 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Writing Your Own Task</title>
-</head>
-
-<body>
-<h1>Developing with Ant</h1>
-
-<h2><a name="writingowntask">Writing Your Own Task</a></h2>
-<p>It is very easy to write your own task:</p>
-<ol>
-  <li>Create a Java class that extends <code>org.apache.tools.ant.Task</code>.</li>
-  <li>For each attribute, write a <i>setter</i> method. The setter method must be a
-    <code>public void</code> method that takes a single argument. The
-    name of the method must begin with <code>set</code>, followed by the
-    attribute name, with the first character of the name in uppercase, and the rest in
-
-    lowercase.  That is, to support an attribute named
-    <code>file</code> you create a method <code>setFile</code>.
-    Depending on the type of the argument, Ant will perform some
-    conversions for you, see <a href="#set-magic">below</a>.</li>
-
-  <li>If your task shall contain other tasks as nested elements (like
-  <a href="CoreTasks/parallel.html"><code>parallel</code></a>), your
-  class must implement the interface
-  <code>org.apache.tools.ant.TaskContainer</code>.  If you do so, your
-  task can not support any other nested elements.  See 
-  <a href="#taskcontainer">below</a>.</li>
-
-<li>If the task should support character data (text nested between the
-start end end tags), write a <code>public void addText(String)</code>
-method.  Note that Ant does <strong>not</strong> expand properties on
-the text it passes to the task.</li>
-
-<li>For each nested element, write a <i>create</i>, <i>add</i> or
-<i>addConfigured</i> method.  A create method must be a
-<code>public</code> method that takes no arguments and returns an
-<code>Object</code> type. The name of the create method must begin
-with <code>create</code>, followed by the element name. An add (or
-addConfigured) method must be a <code>public void</code> method that
-takes a single argument of an <code>Object</code> type with a
-no-argument constructor.  The name of the add (addConfigured) method
-must begin with <code>add</code> (<code>addConfigured</code>),
-followed by the element name.  For a more complete discussion see 
-<a href="#nested-elements">below</a>.</li>
-
-<li>Write a <code>public void execute</code> method, with no arguments, that
-throws a <code>BuildException</code>. This method implements the task
-itself.</li>
-</ol>
-
-<h3>The Life-cycle of a Task</h3>
-<ol>
-  <li>The task gets instantiated using a no-argument constructor, at parser
-    time. This means even tasks that are never executed get
-    instantiated.</li>
-
-  <li>The task gets references to its project and location inside the
-    buildfile via its inherited <code>project</code> and
-    <code>location</code> variables.</li>
-
-  <li>If the user specified an <code>id</code> attribute to this task,
-    the project
-    registers a reference to this newly created task, at parser
-    time.</li>
-
-  <li>The task gets a reference to the target it belongs to via its
-    inherited <code>target</code> variable.</li>
-
-  <li><code>init()</code> is called at parser time.</li>
-
-  <li>All child elements of the XML element corresponding to this task
-    are created via this task's <code>createXXX()</code> methods or
-    instantiated and added to this task via its <code>addXXX()</code>
-    methods, at parser time.</li>
-
-  <li>All attributes of this task get set via their corresponding
-    <code>setXXX</code> methods, at runtime.</li>
-
-  <li>The content character data sections inside the XML element
-    corresponding to this task is added to the task via its
-    <code>addText</code> method, at runtime.</li>
-
-  <li>All attributes of all child elements get set via their corresponding
-    <code>setXXX</code> methods, at runtime.</li>
-
-  <li><a name="execute"><code>execute()</code></a> is called at runtime. While the above initialization
-    steps only occur once, the execute() method may be
-    called more than once, if the task is invoked more than once. For example,
-    if <code>target1</code> and <code>target2</code> both depend
-    on <code>target3</code>, then running
-    <code>'ant target1 target2'</code> will run all tasks in
-    <code>target3</code> twice.</li>
-</ol>
-
-<h3><a name="set-magic">Conversions Ant will perform for attributes</a></h3>
-
-<p>Ant will always expand properties before it passes the value of an
-attribute to the corresponding setter method.</p>
-
-<p>The most common way to write an attribute setter is to use a
-<code>java.lang.String</code> argument.  In this case Ant will pass
-the literal value (after property expansion) to your task.  But there
-is more!  If the argument of you setter method is</p>
-
-<ul>
-
-  <li><code>boolean</code>, your method will be passed the value
-  <i>true</i> if the value specified in the build file is one of
-  <code>true</code>, <code>yes</code>, or <code>on</code> and
-  <i>false</i> otherwise.</li>
-
-  <li><code>char</code> or <code>java.lang.Character</code>, your
-  method will be passed the first character of the value specified in
-  the build file.</li>
-
-  <li>any other primitive type (<code>int</code>, <code>short</code>
-  and so on), Ant will convert the value of the attribute into this
-  type, thus making sure that you'll never receive input that is not a
-  number for that attribute.</li>
-
-  <li><code>java.io.File</code>, Ant will first determine whether the
-  value given in the build file represents an absolute path name.  If
-  not, Ant will interpret the value as a path name relative to the
-  project's basedir.</li>
-
-  <li><code>org.apache.tools.ant.types.Path</code>, Ant will tokenize
-  the value specified in the build file, accepting <code>:</code> and
-  <code>;</code> as path separators.  Relative path names will be
-  interpreted as relative to the project's basedir.</li>
-
-  <li><code>java.lang.Class</code>, Ant will interpret the value
-  given in the build file as a Java class name and load the named
-  class from the system class loader.</li>
-
-  <li>any other type that has a constructor with a single
-  <code>String</code> argument, Ant will use this constructor to
-  create a new instance from the value given in the build file.</li>
-
-  <li>A subclass of
-  <code>org.apache.tools.ant.types.EnumeratedAttribute</code>, Ant
-  will invoke this classes <code>setValue</code> method.  Use this if
-  your task should support enumerated attributes (attributes with
-  values that must be part of a predefined set of values).  See
-  <code>org/apache/tools/ant/taskdefs/FixCRLF.java</code> and the
-  inner <code>AddAsisRemove</code> class used in <code>setCr</code>
-  for an example.</li>
-
-</ul>
-
-<p>What happens if more than one setter method is present for a given
-attribute?  A method taking a <code>String</code> argument will always
-lose against the more specific methods.  If there are still more
-setters Ant could chose from, only one of them will be called, but we
-don't know which, this depends on the implementation of your Java
-virtual machine.</p>
-
-<h3><a name="nested-elements">Supporting nested elements</a></h3>
-
-<p>Let's assume your task shall support nested elements with the name
-<code>inner</code>.  First of all, you need a class that represents
-this nested element.  Often you simply want to use one of Ant's
-classes like <code>org.apache.tools.ant.types.FileSet</code> to
-support nested <code>fileset</code> elements.</p>
-
-<p>Attributes of the nested elements or nested child elements of them
-will be handled using the same mechanism used for tasks (i.e. setter
-methods for attributes, addText for nested text and
-create/add/addConfigured methods for child elements).</p>
-
-<p>Now you have a class <code>NestedElement</code> that is supposed to
-be used for your nested <code>&lt;inner&gt;</code> elements, you have
-three options:</p>
-
-<ol>
-  <li><code>public NestedElement createInner()</code></li>
-  <li><code>public void addInner(NestedElement anInner)</code></li>
-  <li><code>public void addConfiguredInner(NestedElement anInner)</code></li>
-</ol>
-
-<p>What is the difference?</p>
-
-<p>Option 1 makes the task create the instance of
-<code>NestedElement</code>, there are no restrictions on the type.
-For the options 2 and 3, Ant has to create an instance of
-<code>NestedInner</code> before it can pass it to the task, this
-means, <code>NestedInner</code> must have a <code>public</code> no-arg
-constructor.  This is the only difference between options 1 and 2.</p>
-
-<p>The difference between 2 and 3 is what Ant has done to the object
-before it passes it to the method.  <code>addInner</code> will receive
-an object directly after the constructor has been called, while
-<code>addConfiguredInner</code> gets the object <em>after</em> the
-attributes and nested children for this new object have been
-handled.</p>
-
-<p>What happens if you use more than one of the options?  Only one of
-the methods will be called, but we don't know which, this depends on
-the implementation of your Java virtual machine.</p>
-
-<h3><a name="taskcontainer">TaskContainer</a></h3>
-
-<p>The <code>TaskContainer</code> consists of a single method,
-<code>addTask</code> that basically is the same as an <a
-href="#nested-elements">add method</a> for nested elements.  The task
-instances will be configured (their attributes and nested elements
-have been handled) when your task's <code>execute</code> method gets
-invoked, but not before that.</p>
-
-<p>When we <a href="#execute">said</a> <code>execute</code> would be
-called, we lied ;-).  In fact, Ant will call the <code>perform</code>
-method in <code>org.apache.tools.ant.Task</code>, which in turn calls
-<code>execute</code>.  This method makes sure that <a
-href="#buildevents">Build Events</a> will be triggered.  If you
-execute the task instances nested into your task, you should also
-invoke <code>perform</code> on these instances instead of
-<code>execute</code>.</p>
-
-<h3>Example</h3>
-<p>Let's write our own task, which prints a message on the
-<code>System.out</code> stream.
-The
-task has one attribute, called <code>message</code>.</p>
-<blockquote>
-<pre>
-package com.mydomain;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Task;
-
-public class MyVeryOwnTask extends Task {
-    private String msg;
-
-    // The method executing the task
-    public void execute() throws BuildException {
-        System.out.println(msg);
-    }
-
-    // The setter for the &quot;message&quot; attribute
-    public void setMessage(String msg) {
-        this.msg = msg;
-    }
-}
-</pre>
-</blockquote>
-<p>It's really this simple ;-)</p>
-<p>Adding your task to the system is rather simple too:</p>
-<ol>
-  <li>Make sure the class that implements your task is in the classpath when
-    starting Ant.</li>
-  <li>Add a <code>&lt;taskdef&gt;</code> element to your project.
-    This actually adds your task to the system.</li>
-  <li>Use your task in the rest of the buildfile.</li>
-</ol>
-
-
-<h3>Example</h3>
-<blockquote>
-<pre>
-&lt;?xml version=&quot;1.0&quot;?&gt;
-
-&lt;project name=&quot;OwnTaskExample&quot; default=&quot;main&quot; basedir=&quot;.&quot;&gt;
-  &lt;taskdef name=&quot;mytask&quot; classname=&quot;com.mydomain.MyVeryOwnTask&quot;/&gt;
-
-  &lt;target name=&quot;main&quot;&gt;
-    &lt;mytask message=&quot;Hello World! MyVeryOwnTask works!&quot;/&gt;
-  &lt;/target&gt;
-&lt;/project&gt;
-</pre>
-</blockquote>
-<h3>Example 2</h3>
-To use a task directly from the buildfile which created it, place the
-<code>&lt;taskdef&gt;</code> declaration inside a target
-<i>after the compilation</i>. Use the <code>classpath</code> attribute of
-<code>&lt;taskdef&gt;</code> to point to where the code has just been
-compiled.
-<blockquote>
-<pre>
-&lt;?xml version=&quot;1.0&quot;?&gt;
-
-&lt;project name=&quot;OwnTaskExample2&quot; default=&quot;main&quot; basedir=&quot;.&quot;&gt;
-
-  &lt;target name=&quot;build&quot; &gt;
-    &lt;mkdir dir=&quot;build&quot;/&gt;
-    &lt;javac srcdir=&quot;source&quot; destdir=&quot;build&quot;/&gt;
-  &lt;/target&gt;
-
-  &lt;target name=&quot;declare&quot; depends=&quot;build&quot;&gt;
-    &lt;taskdef name=&quot;mytask&quot;
-        classname=&quot;com.mydomain.MyVeryOwnTask&quot;
-        classpath=&quot;build&quot;/&gt;
-  &lt;/target&gt;
-
-  &lt;target name=&quot;main&quot; depends=&quot;declare&quot;&gt;
-    &lt;mytask message=&quot;Hello World! MyVeryOwnTask works!&quot;/&gt;
-  &lt;/target&gt;
-&lt;/project&gt;
-</pre>
-</blockquote>
-
-
-<p>Another way to add a task (more permanently), is to add the task name and
-implementing class name to the <code>default.properties</code> file in the
-<code>org.apache.tools.ant.taskdefs</code>
-package. Then you can use it as if it were a built-in task.</p>
-
-<hr>
-<h2><a name="buildevents">Build Events</a></h2>
-<P>Ant is capable of generating build events as it performs the tasks necessary to build a project.
-Listeners can be attached to Ant to receive these events. This capability could be used, for example,
-to connect Ant to a GUI or to integrate Ant with an IDE.
-</P>
-<p>To use build events you need to create an ant <code>Project</code> object. You can then call the
-<code>addBuildListener</code> method to add your listener to the project. Your listener must implement
-the <code>org.apache.tools.antBuildListener</code> interface. The listener will receive BuildEvents
-for the following events</P>
-<ul>
-<li>Build started</li>
-<li>Build finished</li>
-<li>Target started</li>
-<li>Target finished</li>
-<li>Task started</li>
-<li>Task finished</li>
-<li>Message logged</li>
-</ul>
-
-<p>
-If you wish to attach a listener from the command line you may use the
-<code>-listener</code> option. For example:</p>
-<blockquote>
-  <pre>ant -listener org.apache.tools.ant.XmlLogger</pre>
-</blockquote>
-<p>will run Ant with a listener that generates an XML representation of the build progress. This
-listener is included with Ant, as is the default listener, which generates the logging to standard output.</p>
-
-<hr>
-<h2><a name="integration">Source code integration</a></h2>
-
-
-The other way to extend Ant through Java is to make changes to existing tasks, which is positively encouraged.
-Both changes to the existing source and new tasks can be incorporated back into the Ant codebase, which
-benefits all users and spreads the maintenance load around.
-<p>
-
-Please consult the
-<a href="http://jakarta.apache.org/site/getinvolved.html">Getting Involved</a> pages on the Jakarta web site
-for details on how to fetch the latest source and how to submit changes for reincorporation into the
-source tree.
-<p>
-Ant also has some
-<a href="http://jakarta.apache.org/ant/ant_task_guidelines.html">task guidelines</a>
-which provides some advice to people developing and testing tasks. Even if you intend to
-keep your tasks to yourself, you should still read this as it should be informative.
-
-<hr>
-<p align="center">Copyright &copy; 2001-2002 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/developlist.html b/docs/manual/developlist.html
deleted file mode 100644
index 928d5d3..0000000
--- a/docs/manual/developlist.html
+++ /dev/null
@@ -1,22 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Apache Ant User Manual</title>
-<base target="mainFrame">
-</head>
-
-<body>
-
-<h2><a href="toc.html" target="navFrame">Table of Contents</a></h2>
-
-<h3>Developing with Ant</h3>
-
-<a href="develop.html#writingowntask">Writing Your Own Task</a><br>
-<a href="develop.html#buildevents">Build Events</a><br>
-<a href="develop.html#integration">Source-code Integration</a><br>
-<a href="inputhandler.html">InputHandler</a><br>
-
-</body>
-</html>
-
diff --git a/docs/manual/dirtasks.html b/docs/manual/dirtasks.html
deleted file mode 100644
index 79e1a79..0000000
--- a/docs/manual/dirtasks.html
+++ /dev/null
@@ -1,173 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Directory-based Tasks</title>
-</head>
-
-<body>
-
-<h2><a name="directorybasedtasks">Directory-based Tasks</a></h2>
-<p>Some tasks use directory trees for the task they perform.
-For example, the <a
-href="CoreTasks/javac.html">javac</a> task, which works upon a directory tree
-with <code>.java</code> files.
-Sometimes it can be very useful to work on a subset of that directory tree. This
-section describes how you can select a subset of such a directory tree.</p>
-<p>Ant gives you two ways to create a subset, both of which can be used at the same
-time:</p>
-<ul>
-  <li>Only include files/directories that match at least one pattern of a set of
-    patterns.</li>
-  <li>Exclude files/directories that match at least one pattern a set of
-    patterns.</li>
-</ul>
-<p>When both inclusion and exclusion are used, only files/directories that match
-the include patterns, and don't match the exclude patterns, are used.</p>
-<p>Patterns can be specified inside the buildfile via task attributes or
-nested elements and via external files. Each line of the external file
-is taken as a pattern that is added to the list of include or exclude
-patterns.</p>
-<h3><a name="patterns">Patterns</a></h3>
-<p>As described earlier, patterns are used for the inclusion and exclusion.
-These patterns look very much like the patterns used in DOS and UNIX:</p>
-<p>'*' matches zero or more characters, '?' matches one character.</p>
-<p><b>Examples:</b></p>
-<p>
-<code>*.java</code>&nbsp;&nbsp;matches&nbsp;&nbsp;<code>.java</code>,
-<code>x.java</code> and <code>FooBar.java</code>, but
-not <code>FooBar.xml</code> (does not end with <code>.java</code>).</p>
-<p>
-<code>?.java</code>&nbsp;&nbsp;matches&nbsp;&nbsp;<code>x.java</code>,
-<code>A.java</code>, but not <code>.java</code> or <code>xyz.java</code>
-(both don't have one character before <code>.java</code>).</p>
-<p>
-Combinations of <code>*</code>'s and <code>?</code>'s are allowed.</p>
-<p>Matching is done per-directory. This means that first the first directory in
-the pattern is matched against the first directory in the path to match. Then
-the second directory is matched, and so on. For example, when we have the pattern <code>/?abc/*/*.java</code>
-and the path <code>/xabc/foobar/test.java</code>,
-the first <code>?abc</code> is matched with <code>xabc</code>,
-then <code>*</code> is matched with <code>foobar</code>,
-and finally <code>*.java</code> is matched with <code>test.java</code>.
-They all match, so the path matches the pattern.</p>
-<p>To make things a bit more flexible, we add one extra feature, which makes it
-possible to match multiple directory levels. This can be used to match a
-complete directory tree, or a file anywhere in the directory tree.
-To do this, <code>**</code>
-must be used as the name of a directory.
-When <code>**</code> is used as the name of a
-directory in the pattern, it matches zero or more directories.
-For example:
-<code>/test/**</code> matches all files/directories under <code>/test/</code>,
-such as <code>/test/x.java</code>,
-or <code>/test/foo/bar/xyz.html</code>, but not <code>/xyz.xml</code>.</p>
-<p>There is one &quot;shorthand&quot; - if a pattern ends
-with <code>/</code>
-or <code>\</code>, then <code>**</code>
-is appended.
-For example, <code>mypackage/test/</code> is interpreted as if it were
-<code>mypackage/test/**</code>.</p>
-<p><b>Example patterns:</b></p>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><code>**/CVS/*</code></td>
-    <td valign="top">Matches all files in <code>CVS</code> directories that can be located
-      anywhere in the directory tree.<br>
-      Matches:
-      <pre>
-      CVS/Repository
-      org/apache/CVS/Entries
-      org/apache/jakarta/tools/ant/CVS/Entries
-      </pre>
-      But not:
-      <pre>
-      org/apache/CVS/foo/bar/Entries (<code>foo/bar/</code> part does not match)</td>
-      </pre>
-  </tr>
-  <tr>
-    <td valign="top"><code>org/apache/jakarta/**</code></td>
-    <td valign="top">Matches all files in the <code>org/apache/jakarta</code> directory tree.<br>
-      Matches:
-      <pre>
-      org/apache/jakarta/tools/ant/docs/index.html
-      org/apache/jakarta/test.xml
-      </pre>
-      But not:
-      <pre>
-      org/apache/xyz.java
-      </pre>
-      (<code>jakarta/</code> part is missing).</td>
-  </tr>
-  <tr>
-    <td valign="top"><code>org/apache/**/CVS/*</code></td>
-    <td valign="top">Matches all files in <code>CVS</code> directories
-      that are located anywhere in the directory tree under
-      <code>org/apache</code>.<br>
-      Matches:
-      <pre>
-      org/apache/CVS/Entries
-      org/apache/jakarta/tools/ant/CVS/Entries
-      </pre>
-      But not:
-      <pre>
-      org/apache/CVS/foo/bar/Entries
-      </pre>
-      (<code>foo/bar/</code> part does not match)</td>
-  </tr>
-  <tr>
-    <td valign="top"><code>**/test/**</code></td>
-    <td valign="top">Matches all files that have a <code>test</code>
-        element in their path, including <code>test</code> as a filename.</td>
-  </tr>
-</table>
-<p>When these patterns are used in inclusion and exclusion, you have a powerful
-way to select just the files you want.</p>
-
-<h3>Examples</h3>
-<pre>
-&lt;copy todir=&quot;${dist}&quot;&gt;
-  &lt;fileset dir=&quot;${src}&quot;
-           includes=&quot;**/images/*&quot;
-           excludes=&quot;**/*.gif&quot;
-  /&gt;
-&lt;/copy&gt;</pre>
-<p>This copies all files in directories called <code>images</code> that are
-located in the directory tree defined by <code>${src}</code> to the
-destination directory defined by <code>${dist}</code>,
-but excludes all <code>*.gif</code> files from the copy.</p>
-<p> This example can also be expressed using nested elements:</p>
-<pre>
-&lt;copy todir=&quot;${dist}&quot;&gt;
-  &lt;fileset dir=&quot;${src}&quot;&gt;
-    &lt;include name=&quot;**/images/*&quot;/&gt;
-    &lt;exclude name=&quot;**/*.gif&quot;/&gt;
-  &lt;/fileset&gt;
-&lt;/copy&gt;
-</pre>
-
-<h3><a name="defaultexcludes">Default Excludes</a></h3>
-<p>There are a set of definitions that are excluded by default from all directory-based tasks.
-They are:</p>
-<pre>
-     **/*~
-     **/#*#
-     **/.#*
-     **/%*%
-     **/._*
-     **/CVS
-     **/CVS/**
-     **/.cvsignore
-     **/SCCS
-     **/SCCS/**
-     **/vssver.scc
-</pre>
-<p>If you do not want these default excludes applied, you may disable them with the
-<code>defaultexcludes=&quot;no&quot;</code> attribute.</p>
-<hr>
-<p align="center">Copyright &copy; 2001-2002 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/favicon.ico b/docs/manual/favicon.ico
deleted file mode 100644
index 9dbc258..0000000
--- a/docs/manual/favicon.ico
+++ /dev/null
Binary files differ
diff --git a/docs/manual/feedback.html b/docs/manual/feedback.html
deleted file mode 100644
index cea9baa..0000000
--- a/docs/manual/feedback.html
+++ /dev/null
@@ -1,60 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Apache Ant User Manual - Feedback</title>
-</head>
-
-<body>
-
-<h1><a name="feedback">Feedback</a> and Troubleshooting</h1>
-<p>If things do not work, especially simple things like <tt>ant -version</tt>, 
-  then something is wrong with your configuration. Before filing bug reports and 
-  emailing all the ant mailing lists</p>
-<ol>
-  <li>Check your environment variables. Are ANT_HOME and JAVA_HOME correct? If 
-    they have quotes or trailing slashes, remove them.</li>
-  <li>Unset CLASSPATH; if that is wrong things go horribly wrong. Ant does not 
-    need the CLASSPATH variable defined to anything to work.</li>
-  <li>Make sure there are no versions of crimson.jar or other XML parsers in JRE/ext</li>
-  <li>Is your path correct? is Ant on it? What about JDK/bin? have you tested 
-    this? If you are using Jikes, is it on the path? A createProcess error (especially 
-    with ID=2 on windows) usually means executable not found on the path.</li>
-  <li>Which version of ant are you running? Other applications distribute a copy 
-    -it may be being picked up by accident.</li>
-  <li>If a task is failing to run is optional.jar in ANT_HOME/lib? Are there any 
-    libraries which it depends on missing?</li>
-  <li>If a task doesn't do what you expect, run <tt>ant -verbose</tt> or <tt>ant 
-    -debug</tt> to see what is happening</li>
-</ol>
-<p>If you can't fix your problem, start with the <a href="http://jakarta.apache.org/site/mail.html" target="_top">Ant 
-  User Mailing List</a> . These are other ant users who will help you learn to 
-  use ant. If they cannot fix it then someone may suggest filing a bug report, 
-  which will escalate the issue. Remember of course, that support, like all open 
-  source development tasks, is voluntary. If you haven't invested time in helping 
-  yourself by following the steps above, it is unlikely that anyone will invest 
-  the time in helping you. </p>
-<p>Also, if you don't understand something, the <a href="http://jakarta.apache.org/site/mail.html" target="_top">Ant 
-  User Mailing List</a> is the place to ask questions. Not the developer list, 
-  nor the individuals whose names appears in the source and documentation. If 
-  they answered all such emails, nobody would have any time to improve ant. </p>
-<p>To provide feedback on this software, please subscribe to the <a href="http://jakarta.apache.org/site/mail.html" target="_top">Ant 
-  User Mailing List</a> </p>
-
-<p>If you want to contribute to Ant or stay current with the latest
-development, join the
-<a href="http://jakarta.apache.org/site/mail.html" target="_top">Ant Development Mailing List</a>
-</p>
-<p>Archives of both lists can be found at <a
-href="http://archive.covalent.net/" target="_top">http://archive.covalent.net/</a>. Many
-thanks to Covalent Technologies. A searchable archive can be found at <a
-href="http://marc.theaimsgroup.com" target="_top">http://marc.theaimsgroup.com</a>. If
-you know of any additional archive sites, please report them to the
-lists.</p>
-<hr>
-<p align="center">Copyright &copy; 2001-2002 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/ide.html b/docs/manual/ide.html
deleted file mode 100644
index a2e7f36..0000000
--- a/docs/manual/ide.html
+++ /dev/null
@@ -1,35 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>IDE Integration</title>
-<base target="mainFrame">
-</head>
-
-<body>
-
-<h2><a href="toc.html" target="navFrame">Table of Contents</a></h2>
-
-<h3>IDE Integration</h3>
-<a href="Integration/Antidote.html">
-         Antidote<br>(in development)</a><br><br>
-<a href="http://www.dieter-bogdoll.de/java/AntRunner/">
-         AntRunner For JBuilder <br>(unbundled)</a><br><br>
-<a href="Integration/jext-plugin.html">AntWork Plugin for the Jext -
-         Java Text Editor <br>(unbundled)</a><br><br>
-<a href="http://jde.sunsite.dk/">Emacs JDE</a> has built-in text ANT integration:
-selection of target through text field, execution, hyperlink to compilation
-errors. Installation: built-in JDE  2.2.8 or later. Configuration: through
-customize menu "Jde Build Function"<br><br>
-<a href="http://www.intellij.com/idea/">IDEA</a> has built-in GUI ANT integration: GUI
-selection of targets, execution, hyperlink to compilation errors<br><br>
-<a href="http://ant.netbeans.org/">NetBeans <br>Forte for Java <br>(unbundled)</a><br><br>
-<a href="Integration/VAJAntTool.html">VisualAge for Java</a><br><br>
-
-<hr>
-<p align="center">Copyright &copy; 2001-2002 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/index.html b/docs/manual/index.html
deleted file mode 100644
index 468b7a0..0000000
--- a/docs/manual/index.html
+++ /dev/null
@@ -1,17 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Apache Ant User Manual</title>
-</head>
-
-<frameset cols="25%,75%">
-<frame src="toc.html" name="navFrame">
-<frame src="cover.html" name="mainFrame">
-</frameset>
-<noframes>
-<H2>Apache Ant User Manual</H2>
-
-<a href="toc.html">Apache Ant User Manual</a></noframes>
-
-</html>
diff --git a/docs/manual/inputhandler.html b/docs/manual/inputhandler.html
deleted file mode 100644
index b73eb42..0000000
--- a/docs/manual/inputhandler.html
+++ /dev/null
@@ -1,89 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>InputHandler</title>
-</head>
-
-<body>
-<h1>InputHandler</h1>
-
-<h2>Overview</h2>
-
-<p>When a task wants to prompt a user for input, it doesn't simply
-read the input from the console as this would make it impossible to
-embed Ant in an IDE.  Instead it asks an implementation of the
-<code>org.apache.tools.ant.input.InputHandler</code> interface to
-prompt the user and hand the user input back to the task.</p>
-
-<p>To do this, the task creates an <code>InputRequest</code> object
-and passes it to the <code>InputHandler</code> Such an
-<code>InputRequest</code> may know whether a given user input is valid
-and the <code>InputHandler</code> is supposed to reject all invalid
-input.</p>
-
-<p>Exactly one <code>InputHandler</code> instance is associated with
-every Ant process, users can specify the implementation using the
-<code>-inputhandler</code> command line switch.</p>
-
-<h2>InputHandler</h2>
-
-<p>The <code>InputHandler</code> interface contains exactly one
-method</p>
-
-<pre>
-    void handleInput(InputRequest request) 
-        throws org.apache.tools.ant.BuildException;
-</pre>
-
-<p>with some pre- and postconditions.  The main postcondition is that
-this method must not return unless the <code>request</code> considers
-the user input valid, it is allowed to throw an exception in this
-situation.</p>
-
-<p>Ant comes with two built-in implementations of this interface:</p>
-
-<h3><a name="defaulthandler">DefaultInputHandler</a></h3>
-
-<p>This is the implementation you get, when you don't use the
-<code>-inputhandler</code> command line switch at all.  This
-implementation will print the prompt encapsulated in the
-<code>request</code> object to Ant's logging system and re-prompt for
-input until the user enters something that is considered valid input
-by the <code>request</code> object.  Input will be read from the
-console and the user will need to press the Return key.</p>
-
-<h3>PropertyFileInputHandler</h3>
-
-<p>This implementation is useful if you want to run unattended build
-processes.  It reads all input from a properties file and makes the
-build fail if it cannot find valid input in this file.  The name of
-the properties file must be specified in the Java system property
-<code>ant.input.properties</code>.</p>
-
-<p>The prompt encapsulated in a <code>request</code> will be used as
-the key when looking up the input inside the properties file.  If no
-input can be found, the input is considered invalid and an exception
-will be thrown.</p>
-
-<p><strong>Note</strong> that <code>ant.input.properties</code> must
-be a Java system property, not an Ant property.  I.e. you cannot
-define it as a simple parameter to <code>ant</code>, but you can
-define it inside the <code>ANT_OPTS</code> environment variable.</p>
-
-<h2>InputRequest</h2>
-
-<p>Instances of <code>org.apache.tools.ant.input.InputRequest</code>
-encapsulate the information necessary to ask a user for input and
-validate this input.</p>
-
-<p>The instances of <code>InputRequest</code> itself will accept any
-input, but subclasses may use stricter validations.
-<code>org.apache.tools.ant.input.MultipleChoiceInputRequest</code>
-should be used if the user input must be part of a predefined set of
-choices.</p>
-
-<hr>
-<p align="center">Copyright &copy; 2002 Apache Software Foundation. All rights
-Reserved.</p>
-</html>
diff --git a/docs/manual/install.html b/docs/manual/install.html
deleted file mode 100644
index 9e8e53f..0000000
--- a/docs/manual/install.html
+++ /dev/null
@@ -1,376 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Installing Ant</title>
-</head>
-
-<body>
-<h1>Installing Ant</h1>
-<h2><a name="getting">Getting Ant</a></h2>
-<h3>Binary Edition</h3>
-<p>The latest stable version of Ant is available from the Ant web page <a
-href="http://jakarta.apache.org/ant/">http://jakarta.apache.org/ant/</a>.
-
-If you like living on the edge, you can download the latest version from <a
-href="http://jakarta.apache.org/builds/ant/nightly/">http://jakarta.apache.org/builds/ant/nightly/</a>.</p>
-<h3>Source Edition</h3>
-
-<p>If you prefer the source edition, you can download the source for the latest Ant release from <a
-href="http://jakarta.apache.org/builds/ant/release/v1.4.1/src/">
-http://jakarta.apache.org/builds/ant/release/v1.4.1/src/</a>. 
-
-Again, if you prefer the edge, you can access 
-the code as it is being developed via CVS. The Jakarta website has details on 
-<a href="http://jakarta.apache.org/site/cvsindex.html" target="_top">accessing CVS</a>. Please checkout the 
-jakarta-ant module. 
-
-See the section <a href="#buildingant">Building Ant</a> on how to
-build Ant from the source code.
-You can also access the 
-<a href="http://cvs.apache.org/viewcvs/jakarta-ant/" target="_top">
-Ant CVS repository</a> on-line. </p>
-
-<hr>
-<h2><a name="sysrequirements">System Requirements</a></h2>
-Ant has been used successfully on many platforms, including Linux,
-commercial flavours of Unix such as Solaris and HP-UX,
-Windows 9x and NT, Novell Netware 6 and MacOS X. 
-<p>
-To build and use Ant, you must have a JAXP-compliant XML parser installed and 
-available on your classpath.</p>
-<p>
-The binary distribution of Ant includes the latest version of the
-<a href="http://xml.apache.org/crimson/index.html">Apache Crimson</a> XML parser. 
-Please see 
-<a href="http://java.sun.com/xml/" target="_top">http://java.sun.com/xml/</a> 
-for more information about JAXP. 
-If you wish to use a different JAXP-compliant parser, you should remove
-<code>jaxp.jar</code> and <code>crimson.jar</code>
-from Ant's <code>lib</code> directory.
-
-You can then either put the jars from your preferred parser into Ant's 
-<code>lib</code> directory or put the jars on the system classpath.</p>
-
-<p>
-For the current version of Ant, you will also need a JDK installed on
-your system, version 1.1 or later. Some tasks work better on post-1.1 systems;
-some tasks only work on Java 1.2 and successors. 
-A future version of Ant -Ant 2.0- will require JDK 1.2 or later, though
-Ant 1.x strives to retain 1.1 compatibility.
-</p><p>
-<strong>Note: </strong>The Microsoft JVM/JDK is not adequate on its own, although the MS
-compiler is supported.
-</p>
-<p>
-<strong>Note #2: </strong>If a JDK is not present, only the JRE runtime, then many tasks will not work.
-</p>  
-<hr>
-<h2><a name="installing">Installing Ant</a></h2>
-<p>The binary distribution of Ant consists of three directories:
-<code>bin</code>,
-<code>docs</code> and
-<code>lib</code>
-
-Only the <code>bin</code> and <code>lib</code> directories are 
-required to run Ant. 
-
-To install Ant, choose a directory and copy the distribution
-file there. This directory will be known as ANT_HOME. 
-</p>
-
-<table width="80%">
-<tr>
-  <td colspan="2">
-    <b>Windows 95 and Windows 98 Note:</b> 
-  </td>
-</tr>
-<tr>
-  <td width="5%">&nbsp;</td>
-  <td><i>
-On these systems, the script used to launch Ant will have 
-problems if ANT_HOME is a long filename. This is due to 
-limitations in the OS's handling of the <code>&quot;for&quot;</code> 
-batch-file statement. It is recommended, therefore, that Ant be 
-installed in a <b>short</b> path, such as C:\Ant.</i>
-  </td>
-</tr>
-</table>
-
-<p>
-Before you can run ant there is some additional set up you 
-will need to do:</p>
-<ul>
-<li>Add the <code>bin</code> directory to your path.</li>
-<li>Set the <code>ANT_HOME</code> environment variable to the
-directory where you installed Ant.  On some operating systems the ant
-wrapper scripts can guess <code>ANT_HOME</code> (Unix dialects and
-Windows NT/2000) - but it is better to not rely on this behavior.</li>
-<li>Optionally, set the <code>JAVA_HOME</code> environment variable
-(see the <a href="#advanced">Advanced</a> section below).
-This should be set to the directory where your JDK is installed.</li>
-</ul>
-<p><strong>Note:</strong> Do not install Ant's ant.jar file into the lib/ext
-directory of the JDK/JRE. Ant is an application, whilst the extension 
-directory is intended for JDK extensions. In particular there are security 
-restrictions on the classes which may be loaded by an extension.</p>
-
-<h3><a name="optionalTasks">Optional Tasks</a></h3>
-<p>Ant supports a number of optional tasks. An optional task is a task which
-typically requires an external library to function. The optional tasks are 
-packaged separately from the core Ant tasks. This package is available in 
-the same download directory as the core ant distribution. The current 
-jar containing optional tasks is named <code>jakarta-ant-1.4.1-optional.jar</code>.
-This jar should be downloaded and placed in the lib directory of your Ant 
-installation.</p> 
-
-<p>The external libraries required by each of the optional tasks is detailed
-in the <a href="#librarydependencies">Library Dependencies</a> section. These external
-libraries may either be placed in Ant's lib directory, where they will be picked up
-automatically, or made available on the system CLASSPATH environment variable. 
-</p>
-
-<h3>Windows</h3>
-<p>Assume Ant is installed in <code>c:\ant\</code>. The following sets up the
-environment:</p>
-<pre>set ANT_HOME=c:\ant
-set JAVA_HOME=c:\jdk1.2.2
-set PATH=%PATH%;%ANT_HOME%\bin</pre>
-
-<h3>Unix (bash)</h3>
-<p>Assume Ant is installed in <code>/usr/local/ant</code>. The following sets up
-the environment:</p>
-<pre>export ANT_HOME=/usr/local/ant
-export JAVA_HOME=/usr/local/jdk-1.2.2
-export PATH=${PATH}:${ANT_HOME}/bin</pre>
-
-<h3>Unix (csh)</h3>
-<pre>setenv ANT_HOME /usr/local/ant
-setenv JAVA_HOME /usr/local/jdk-1.2.2
-set path=( $path $ANT_HOME/bin )</pre>
-
-
-<h3><a name="advanced">Advanced</a></h3>
-
-<p>There are lots of variants that can be used to run Ant. What you need is at
-least the following:</p>
-<ul>
-<li>The classpath for Ant must contain <code>ant.jar</code> and any jars/classes 
-needed for your chosen JAXP-compliant XML parser.</li>
-<li>When you need JDK functionality
-(such as for the <a href="CoreTasks/javac.html">javac</a> task or the
-<a href="CoreTasks/rmic.html">rmic</a> task), then for JDK 1.1, the <code>classes.zip</code>
-file of the JDK must be added to the classpath; for JDK 1.2 or JDK 1.3, <code>tools.jar</code>
-must be added. The scripts supplied with Ant,
-in the <code>bin</code> directory, will add 
-the required JDK classes automatically, if the <code>JAVA_HOME</code>
-environment variable is set.</li>
-
-<li>When you are executing platform-specific applications, such as the 
-<a href="CoreTasks/exec.html">exec</a> task or the 
-<a href="CoreTasks/cvs.html">cvs</a> task, the property <code>ant.home</code>
-must be set to the directory containing where you installed Ant. Again
-this is set by the Ant scripts to the value of the ANT_HOME environment
-variable.</li>
-</ul>
-The supplied ant shell scripts all support an <tt>ANT_OPTS</tt>
-environment variable which can be used to supply extra options
-to ant. Some of the scripts also read in an extra script stored
-in the users home directory, which can be used to set such options. Look
-at the source for your platform's invocation script for details.
-
-<hr>  
-<h2><a name="buildingant">Building Ant</a></h2>
-<p>To build Ant from source, you can either install the Ant source distribution
-or checkout the jakarta-ant module from CVS.</p>
-<p>Once you have installed the source, change into the installation
-directory.</p>
-
-<p>Set the <code>JAVA_HOME</code> environment variable
-to the directory where the JDK is installed.
-See <a href="#installing">Installing Ant</a>
-for examples on how to do this for your operating system. </p>
-
-<p>Make sure you have downloaded any auxiliary jars required to
-build tasks you are interested in. These should either be available
-on the CLASSPATH or added to the <code>lib/optional</code>
-directory.
-See <a href="#librarydependencies">Library Dependencies</a>
-for a list of jar requirements for various features.
-Note that this will make the auxiliary jars
-available for the building of Ant only. For running Ant you will
-still need to
-make the jars available as described under 
-<a href="#installing">Installing Ant</a>.</p>
-
-<p>Your are now ready to build Ant:</p>
-<blockquote>
-  <p><code>build -Ddist.dir=&lt;<i>directory_to_contain_Ant_distribution</i>&gt; dist</code>&nbsp;&nbsp;&nbsp;&nbsp;(<i>Windows</i>)</p>
-  <p><code>build.sh -Ddist.dir=&lt;<i>directory_to_contain_Ant_distribution</i>&gt; dist</code>&nbsp;&nbsp;&nbsp;&nbsp;(<i>Unix</i>)</p>
-</blockquote>
-
-<p>This will create a binary distribution of Ant in the directory you specified.</p>
-
-<p>The above action does the following:</p>
-<ul>
-
-<li>If necessary it will bootstrap the Ant code. Bootstrapping involves the manual 
-compilation of enough Ant code to be able to run Ant. The bootstrapped Ant is
-used for the remainder of the build steps. </li>
-
-<li>Invokes the bootstrapped Ant with the parameters passed to the build script. In 
-this case, these parameters define an Ant property value and specify the &quot;dist&quot; target
-in Ant's own <code>build.xml</code> file.</li>
-</ul>
-
-<p>On most occasions you will not need to explicitly bootstrap Ant since the build
-scripts do that for you. If however, the build file you are using makes use of features
-not yet compiled into the bootstrapped Ant, you will need to manually bootstrap.
-Run <code>bootstrap.bat</code> (Windows) or <code>bootstrap.sh</code> (UNIX)
-to build a new bootstrap version of Ant.</p>
-
-If you wish to install the build into the current <code>ANT_HOME</code>
-directory, you can use:
-<blockquote>
-  <p><code>build install</code>&nbsp;&nbsp;&nbsp;&nbsp;(<i>Windows</i>)</p>
-  <p><code>build.sh install</code>&nbsp;&nbsp;&nbsp;&nbsp;(<i>Unix</i>)</p>
-</blockquote>
-
-You can avoid the lengthy Javadoc step, if desired, with:
-<blockquote>
-  <p><code>build install-lite</code>&nbsp;&nbsp;&nbsp;&nbsp;(<i>Windows</i>)</p>
-  <p><code>build.sh install-lite</code>&nbsp;&nbsp;&nbsp;&nbsp;(<i>Unix</i>)</p>
-</blockquote>
-This will only install the <code>bin</code> and <code>lib</code> directories. 
-<p>Both the <code>install</code> and 
-<code>install-lite</code> targets will overwrite 
-the current Ant version in <code>ANT_HOME</code>.</p>
-
-<hr>
-<h2><a name="librarydependencies">Library Dependencies</a></h2>
-<p>The following libraries are needed in your CLASSPATH or in the
-install directory's <code>lib</code> directory if you are using the
-indicated feature. Note that only one of the regexp libraries is
-needed for use with the mappers. You will also need to install the
-Ant optional jar containing the task definitions to make these
-tasks available. Please refer to the <a href="#optionalTasks">
-Installing Ant / Optional Tasks</a> section above.</p>
-
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td><b>Jar Name</b></td>
-    <td><b>Needed For</b></td>
-    <td><b>Available At</b></td>
-  </tr>
-  <tr>
-    <td>An XSL transformer like Xalan or XSL:P</td>
-    <td>style task</td>
-    <td><a href="http://xml.apache.org/xalan-j/index.html"
-    target="_top">http://xml.apache.org/xalan-j/index.html</a> for Xalan.<br> 
-    XSL:P used to live at <a href="http://www.clc-marketing.com/xslp/"
-    target="_top">http://www.clc-marketing.com/xslp/</a>, but the link
-    doesn't work any longer and we are not aware of a replacement site.</td>
-  </tr>
-  <tr>
-    <td>jakarta-regexp-1.2.jar</td>
-    <td>regexp type with mappers</td>
-    <td><a href="http://jakarta.apache.org/regexp/" target="_top">jakarta.apache.org/regexp/</a></td>
-  </tr>
-  <tr>
-    <td>jakarta-oro-2.0.4.jar</td>
-    <td>regexp type with mappers and the perforce tasks</td>
-    <td><a href="http://jakarta.apache.org/oro/" target="_top">jakarta.apache.org/oro/</a></td>
-  </tr>
-  <tr>
-    <td>junit.jar</td>
-    <td>junit tasks</td>
-    <td><a href="http://www.junit.org/" target="_top">www.junit.org</a></td>
-  </tr>
-  <tr>
-    <td>xerces.jar and xalan.jar</td>
-    <td>junitreport task</td>
-    <td><a href="http://xml.apache.org/" target="_top">xml.apache.org</a></td>
-  </tr>
-  <tr>
-    <td>stylebook.jar</td>
-    <td>stylebook task</td>
-    <td>CVS repository of <a href="http://xml.apache.org" target="_top">xml.apache.org</a></td>
-  </tr>
-  <tr>
-    <td>testlet.jar</td>
-    <td>test task</td>
-    <td><a href="http://java.apache.org/framework" target="_top">java.apache.org/framework</a></td>
-  </tr>
-  <tr>
-    <td>antlr.jar</td>
-    <td>antlr task</td>
-    <td><a href="http://www.antlr.org/" target="_top">www.antlr.org</a></td>
-  </tr>
-  <tr>
-    <td >bsf.jar</td>
-    <td>script task</td>
-    <td><a href="http://oss.software.ibm.com/developerworks/projects/bsf" target="_top">
-        oss.software.ibm.com/developerworks/projects/bsf</a></td>
-  </tr>
-  <tr>
-    <td>netrexx.jar</td>
-    <td>netrexx task</td>
-    <td><a href="http://www2.hursley.ibm.com/netrexx" target="_top">
-        www2.hursley.ibm.com/netrexx</a></td>
-  </tr>
-  <tr>
-    <td>rhino.jar</td>
-    <td>javascript with script task</td>
-    <td><a href="http://www.mozilla.org/rhino/" target="_top">www.mozilla.org/rhino</a></td>
-  </tr>
-  <tr>
-    <td>jpython.jar</td>
-    <td>python with script task</td>
-    <td><a href="http://www.jpython.org/" target="_top">www.jpython.org</a></td>
-  </tr>
-  <tr>
-    <td>jacl.jar and tcljava.jar</td>
-    <td>TCL with script task</td>
-    <td><a href="http://www.scriptics.com/java" target="_top">www.scriptics.com/java</a></td>
-  </tr>
-  <tr>
-    <td>netcomponents.jar</td>
-    <td>ftp and telnet tasks</td>
-    <td><a href="http://www.savarese.org/oro/downloads/index.html#NetComponents"
-           target="_top">www.savarese.org/oro/downloads</a></td>
-  </tr>
-  <tr>
-    <td>bcel.jar</td>
-    <td>classfileset data type, 
-        JavaClassHelper used by the ClassConstants filter reader and
-        optionally used by ejbjar for dependency determination
-    </td>
-    <td><a href="http://jakarta.apache.org/bcel/" target="_top">jakarta.apache.org/bcel/</a></td>
-  </tr>
-  <tr>
-    <td>mail.jar</td>
-    <td>Mail task with Mime encoding, and the MimeMail task</td>
-    <td><a href="http://java.sun.com/products/javamail/"
-        target="_top">http://java.sun.com/products/javamail/</a></td>
-  </tr>
-  <tr>
-    <td>activation.jar</td>
-    <td>Mail task with Mime encoding, and the MimeMail task</td>
-    <td><a href="http://java.sun.com/products/javabeans/glasgow/jaf.html"
-        target="_top">http://java.sun.com/products/javabeans/glasgow/jaf.html</a></td>
-  </tr>
-  <tr>
-    <td>jdepend.jar</td>
-    <td>jdepend task</td>
-    <td><a href="http://www.clarkware.com/software/JDepend.html"
-        target="_top">http://www.clarkware.com/software/JDepend.html</a></td>
-  </tr>
-</table>
-<br>
-<hr>
-<p align="center">Copyright &copy; 2001-2002 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/installlist.html b/docs/manual/installlist.html
deleted file mode 100644
index ae6e2ca..0000000
--- a/docs/manual/installlist.html
+++ /dev/null
@@ -1,25 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Apache Ant User Manual</title>
-<base target="mainFrame">
-</head>
-
-<body>
-
-<h2><a href="toc.html" target="navFrame">Table of Contents</a></h2>
-
-<h3>Installing Ant</h3>
-<p><a href="install.html#getting">Getting Ant</a><br>
-  <a href="install.html#sysrequirements">System Requirements</a><br>
-  <a href="install.html#installing">Installing Ant</a><br>
-  <a href="install.html#buildingant">Building Ant</a><br>
-  <a href="install.html#librarydependencies">Library Dependencies</a><br>
-  <a href="platform.html">Platform Specific Issues</a><br>
-</p>
-<p><br>
-</p>
-</body>
-</html>
-
diff --git a/docs/manual/intro.html b/docs/manual/intro.html
deleted file mode 100644
index 73e609a..0000000
--- a/docs/manual/intro.html
+++ /dev/null
@@ -1,54 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Apache Ant User Manual - Introduction</title>
-</head>
-
-<body>
-<h1><a name="introduction">Introduction</a></h1>
-<p>Apache Ant is a Java-based build tool. In theory, it is kind of like
-<i>make</i>, without <i>make</i>'s wrinkles.</p>
-<h3>Why?</h3>
-<p>Why another build tool when there is already
-<i>make</i>,
-<i>gnumake</i>,
-<i>nmake</i>,
-<i>jam</i>,
-and
-others? Because all those tools have limitations that Ant's original author
-couldn't live with when developing software across multiple platforms.
-Make-like
-tools are inherently shell-based: they evaluate a set of dependencies,
-then execute commands not unlike what you would issue on a shell.
-This means that you
-can easily extend these tools by using or writing any program for the OS that
-you are working on; however, this also means that you limit yourself to the OS,
-or at least the OS type, such as Unix, that you are working on.</p>
-<p>Makefiles are inherently evil as well. Anybody who has worked on them for any
-time has run into the dreaded tab problem. &quot;Is my command not executing
-because I have a space in front of my tab?!!&quot; said the original author of
-Ant way too many times. Tools like Jam took care of this to a great degree, but
-still have yet another format to use and remember.</p>
-<p>Ant is different. Instead of a model where it is extended with shell-based
-commands, Ant is extended using Java classes. Instead of writing shell commands,
-the configuration files are XML-based, calling out a target tree where various
-tasks get executed. Each task is run by an object that implements a particular
-Task interface.</p>
-<p>Granted, this removes some of the expressive power that is inherent in being
-able to construct a shell command such as
-<nobr><code>`find . -name foo -exec rm {}`</code></nobr>, but it
-gives you the ability to be cross-platform - to work anywhere and
-everywhere. And
-hey, if you really need to execute a shell command, Ant has an
-&lt;exec&gt; task that
-allows different commands to be executed based on the OS it is executing
-on.</p>
-
-<hr>
-<p align="center">Copyright &copy; 2001-2002 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/listeners.html b/docs/manual/listeners.html
deleted file mode 100644
index 74bca3f..0000000
--- a/docs/manual/listeners.html
+++ /dev/null
@@ -1,316 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Listeners &amp; Loggers</title>
-</head>
-
-<body>
-<h1>Listeners &amp; Loggers</h1>
-
-<h2><a name="Overview">Overview</a></h2>
-
-<p>Ant has two related features to allow the build process to be monitored:
-listeners and loggers.</p>
-
-<h3><a name="Listeners">Listeners</a></h3>
-
-<p>A listener is alerted of the following events:</p>
-
-<ul>
-  <li>build started</li>
-  <li>build finished</li>
-  <li>target started</li>
-  <li>target finished</li>
-  <li>task started</li>
-  <li>task finished</li>
-  <li>message logged</li>
-</ul>
-
-<h3><a name="Loggers">Loggers</a></h3>
-
-<p>Loggers extend the capabilities of listeners and add the following features:</p>
-
-<ul>
-  <li>Receives a handle to the standard output and error print streams and
-  therefore can log information to the console or the -logfile specified file.</li>
-  <li>Logging level (-quiet, -verbose, -debug) aware</li>
-  <li>Emacs-mode aware</li>
-</ul>
-
-<h2><a name="builtin">Built-in Listeners/Loggers</a></h2>
-
-<table border="1" cellspacing="1" width="100%" id="AutoNumber1">
-  <tr>
-    <td width="33%">Classname</td>
-    <td width="33%">Description</td>
-    <td width="34%">Type</td>
-  </tr>
-  <tr>
-    <td width="33%"><code><a href="#DefaultLogger">org.apache.tools.ant.DefaultLogger</a></code></td>
-    <td width="33%">The logger used implicitly unless overridden with the
-    <code>-logger</code> command-line switch.</td>
-    <td width="34%">BuildLogger</td>
-  </tr>
-  <tr>
-    <td width="33%"><code><a href="#NoBannerLogger">
-    org.apache.tools.ant.NoBannerLogger</a></code></td>
-    <td width="33%">This logger omits output of empty target output.</td>
-    <td width="34%">BuildLogger</td>
-  </tr>
-  <tr>
-    <td width="33%"><code><a href="#MailLogger">
-    org.apache.tools.ant.listener.MailLogger</a></code></td>
-    <td width="33%">Extends DefaultLogger such that output is still generated
-    the same, and when the build is finished an e-mail can be sent.</td>
-    <td width="34%">BuildLogger</td>
-  </tr>
-  <tr>
-    <td width="33%"><code><a href="#AnsiColorLogger">
-    org.apache.tools.ant.listener.AnsiColorLogger</a></code></td>
-    <td width="33%">Colorifies the build output.</td>
-    <td width="34%">BuildLogger</td>
-  </tr>
-  <tr>
-    <td width="33%"><code><a href="#Log4jListener">
-    org.apache.tools.ant.listener.Log4jListener</a></code></td>
-    <td width="33%">Passes events to Log4j for highly customizable logging.</td>
-    <td width="34%">BuildListener</td>
-  </tr>
-  <tr>
-    <td width="33%"><code><a href="#XmlLogger">org.apache.tools.ant.XmlLogger</a></code></td>
-    <td width="33%">Writes the build information to an XML file.</td>
-    <td width="34%">BuildLogger</td>
-  </tr>
-</table>
-<h3><a name="DefaultLogger">DefaultLogger</a></h3>
-
-<p>Simply run Ant normally, or:</p>
-
-<blockquote>
-
-<p><code>ant -logger org.apache.tools.ant.DefaultLogger</code></p>
-
-</blockquote>
-
-<h3><a name="NoBannerLogger">NoBannerLogger</a></h3>
-
-<p>Removes output of empty target output.</p>
-
-<blockquote>
-
-<p><code>ant -logger org.apache.tools.ant.NoBannerLogger</code></p>
-
-</blockquote>
-
-<h3><a name="MailLogger">MailLogger</a></h3>
-
-<p>The MailLogger captures all output logged through DefaultLogger (standard Ant
-output) and will send success and failure messages to unique e-mail lists, with
-control for turning off success or failure messages individually.</p>
-<p>Properties controlling the operation of MailLogger:</p>
-<table border="1" cellspacing="1" width="100%" id="AutoNumber2">
-  <tr>
-    <th width="337">Property</th>
-    <th width="63%">Description</th>
-    <th width="63%">Required</th>
-  </tr>
-  <tr>
-    <td width="337">MailLogger.mailhost </td>
-    <td width="63%">Mail server to use</td>
-    <td width="63%">No, default &quot;localhost&quot;</td>
-  </tr>
-  <tr>
-    <td width="337">MailLogger.from</td>
-    <td width="63%">Mail &quot;from&quot; address</td>
-    <td width="63%">Yes, if mail needs to be sent</td>
-  </tr>
-  <tr>
-    <td width="337">MailLogger.failure.notify </td>
-    <td width="63%">Send build failure e-mails?</td>
-    <td width="63%">No, default &quot;true&quot;</td>
-  </tr>
-  <tr>
-    <td width="337">MailLogger.success.notify </td>
-    <td width="63%">Send build success e-mails?</td>
-    <td width="63%">No, default &quot;true&quot;</td>
-  </tr>
-  <tr>
-    <td width="337">MailLogger.failure.to </td>
-    <td width="63%">Address(es) to send failure messages to, comma-separated</td>
-    <td width="63%">Yes, if failure mail is to be sent</td>
-  </tr>
-  <tr>
-    <td width="337">MailLogger.success.to </td>
-    <td width="63%">Address(es) to send success messages to, comma-separated</td>
-    <td width="63%">Yes, if success mail is to be sent</td>
-  </tr>
-  <tr>
-    <td width="337">MailLogger.failure.subject </td>
-    <td width="63%">Subject of failed build</td>
-    <td width="63%">No, default &quot;Build Failure&quot;</td>
-  </tr>
-  <tr>
-    <td width="337">MailLogger.success.subject </td>
-    <td width="63%">Subject of successful build</td>
-    <td width="63%">No, default &quot;Build Success&quot;</td>
-  </tr>
-  <tr>
-    <td width="337">MailLogger.properties.file </td>
-    <td width="63%">Filename of properties file that will override other values.</td>
-    <td width="63%">No</td>
-  </tr>
-</table>
-<blockquote>
-
-<p><code>ant -logger org.apache.tools.ant.listener.MailLogger</code></p>
-
-</blockquote>
-
-<h3><a name="AnsiColorLogger">AnsiColorLogger</a></h3>
-
-<p>The AnsiColorLogger adds color to the standard Ant output
-by prefixing and suffixing ANSI color code escape sequences to
-it.  It is just an extension of <a href="#DefaultLogger">DefaultLogger</a>
-and hence provides all features that DefaultLogger does.</p>
-<p>AnsiColorLogger differentiates the output by assigning
-different colors depending upon the type of the message.</p>
-<p>If used with the -logfile option, the output file
-will contain all the necessary escape codes to
-display the text in colorized mode when displayed
-in the console using applications like cat, more, etc.</p>
-<p>This is designed to work on terminals that support ANSI
-color codes.  It works on XTerm, ETerm, Win9x Console
-(with ANSI.SYS loaded.), etc.</p>
-<p><Strong>NOTE:</Strong>
-It doesn't work on WinNT even when a COMMAND.COM console loaded with
-ANSI.SYS is used.</p>
-<p>If the user wishes to override the default colors
-with custom ones, a file containing zero or more of the
-custom color key-value pairs must be created.  The recognized keys
-and their default values are shown below:</p><code><pre>
-AnsiColorLogger.ERROR_COLOR=2;31
-AnsiColorLogger.WARNING_COLOR=2;35
-AnsiColorLogger.INFO_COLOR=2;36
-AnsiColorLogger.VERBOSE_COLOR=2;32
-AnsiColorLogger.DEBUG_COLOR=2;34</pre></code>
-<p>Each key takes as value a color combination defined as
-<b>Attribute;Foreground;Background</b>.  In the above example, background
-value has not been used.</p>
-<p>This file must be specfied as the value of a system variable
-named ant.logger.defaults and passed as an argument using the -D
-option to the <b>java</b> command that invokes the Ant application.
-An easy way to achieve this is to add -Dant.logger.defaults=
-<i>/path/to/your/file</i> to the ANT_OPTS environment variable.
-Ant's launching script recognizes this flag and will pass it to
-the java command appropriately.</p>
-<p>Format:</p><pre>
-AnsiColorLogger.*=Attribute;Foreground;Background
-
-Attribute is one of the following:
-0 -> Reset All Attributes (return to normal mode)
-1 -> Bright (Usually turns on BOLD)
-2 -> Dim
-3 -> Underline
-5 -> link
-7 -> Reverse
-8 -> Hidden
-
-Foreground is one of the following:
-30 -> Black
-31 -> Red
-32 -> Green
-33 -> Yellow
-34 -> Blue
-35 -> Magenta
-36 -> Cyan
-37 -> White
-
-Background is one of the following:
-40 -> Black
-41 -> Red
-42 -> Green
-43 -> Yellow
-44 -> Blue
-45 -> Magenta
-46 -> Cyan
-47 -> White</pre>
-
-<blockquote>
-
-<p><code>ant -logger org.apache.tools.ant.listener.AnsiColorLogger</code></p>
-
-</blockquote>
-
-<h3><a name="Log4jListener">Log4jListener</a></h3>
-
-<p>Passes build events to Log4j, using the full classname's of the generator of
-each build event as the category:</p>
-
-<ul>
-  <li>build started / build finished - org.apache.tools.ant.Project</li>
-  <li>target started / target finished - org.apache.tools.ant.Target</li>
-  <li>task started / task finished - the fully qualified classname of the task</li>
-  <li>message logged - the classname of one of the above, so if a task logs a
-  message, its classname is the category used, and so on.</li>
-</ul>
-
-<p>All start events are logged as INFO.&nbsp; Finish events are either logged as
-INFO or ERROR depending on whether the build failed during that stage. Message
-events are logged according to their Ant logging level, mapping directly to a
-corresponding Log4j level.</p>
-
-<blockquote>
-
-<p><code>ant -listener org.apache.tools.ant.listener.Log4jListener</code></p>
-
-</blockquote>
-
-<h3><a name="XmlLogger">XmlLogger</a></h3>
-
-<p>Writes all build information out to an XML file named log.xml, or the value
-of the <code>XmlLogger.file</code> property if present, when used as a
-listener. When used as a logger, it writes all output to either the
-console or to the value of <code>-logfile</code>. Whether used as a listener
-or logger, the output is not generated until the build is complete, as it
-buffers the information in order to provide timing information for task,
-targets, and the project.
-<p>
-By default the XML file creates 
-a reference to an XSLT file "log.xsl" in the current directory; look in 
-ANT_HOME/etc for one of these. You can set the property 
-<code>ant.XmlLogger.stylesheet.uri</code> to provide a uri to a style sheet.
-this can be a relative or absolute file path, or an http URL. 
-If you set the property to the empty string, "", no XSLT transform
-is declared at all. 
-
- 
-
-
-</p>
-
-<blockquote>
-
-<p><code>ant -listener org.apache.tools.ant.XmlLogger</code><br/>
-<code>ant -logger org.apache.tools.ant.XmlLogger -verbose -logfile build_log.xml</code></p>
-
-</blockquote>
-
-<h2><a name="dev">Writing your own</a></h2>
-
-<p>See the <a href="develop.html#buildevents">Build Events</a> section for
-developers.</p>
-
-<p>Notes:</p>
-
-<ul>
-  <li>A listener or logger should not write to standard output or error - Ant
-  captures these internally and may cause an infinite loop.</li>
-</ul>
-
-<hr>
-<p align="center">Copyright &copy; 2001-2002 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
diff --git a/docs/manual/optionaltasklist.html b/docs/manual/optionaltasklist.html
deleted file mode 100644
index e54c8de..0000000
--- a/docs/manual/optionaltasklist.html
+++ /dev/null
@@ -1,64 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Apache Ant User Manual</title>
-<base target="mainFrame">
-</head>
-
-<body>
-
-<h2><a href="toc.html" target="navFrame">Table of Contents</a></h2>
-
-<a href="coretasklist.html" target="navFrame">Core Tasks</a><br>
-
-<h3>Optional Tasks</h3>
-<a href="OptionalTasks/dotnet.html">.NET Tasks</a><br>
-<a href="OptionalTasks/antlr.html">ANTLR</a><br>
-<a href="OptionalTasks/cab.html">Cab</a><br>
-<a href="OptionalTasks/clearcase.html">Clearcase Tasks</a><br>
-<a href="OptionalTasks/ccm.html">Continuus/Synergy Tasks</a><br>
-<a href="OptionalTasks/depend.html">Depend</a><br>
-<a href="OptionalTasks/ejb.html">EJB Tasks</a><br>
-<a href="OptionalTasks/echoproperties.html">Echoproperties</a><br>
-<a href="OptionalTasks/ftp.html">FTP</a><br>
-<a href="OptionalTasks/icontract.html">IContract</a><br>
-<a href="OptionalTasks/javacc.html">JavaCC</a><br>
-<a href="OptionalTasks/javah.html">Javah</a><br>
-<a href="OptionalTasks/jspc.html">JspC</a><br>
-<a href="OptionalTasks/jdepend.html">JDepend</a><br>
-<a href="OptionalTasks/jjtree.html">JJTree</a><br>
-<a href="OptionalTasks/jlink.html">Jlink</a><br>
-<a href="OptionalTasks/jpcoverage.html">JProbe Coverage</a><br>
-<a href="OptionalTasks/junit.html">JUnit</a><br>
-<a href="OptionalTasks/junitreport.html">JUnitReport</a><br>
-<a href="OptionalTasks/mmetrics.html">Metamata Metrics</a><br>
-<a href="OptionalTasks/maudit.html">Metamata Audit</a><br>
-<a href="OptionalTasks/mimemail.html"><i>MimeMail</i></a><br>
-<a href="OptionalTasks/mparse.html">MParse</a><br>
-<a href="OptionalTasks/native2ascii.html">Native2Ascii</a><br>
-<a href="OptionalTasks/netrexxc.html">NetRexxC</a><br>
-<a href="OptionalTasks/perforce.html">Perforce Tasks</a><br>
-<a href="OptionalTasks/propertyfile.html">PropertyFile</a><br>
-<a href="OptionalTasks/pvcstask.html">Pvcs</a><br>
-<a href="OptionalTasks/renameextensions.html"><i>RenameExtensions</i></a><br>
-<a href="OptionalTasks/replaceregexp.html">ReplaceRegExp</a><br>
-<a href="OptionalTasks/rpm.html">Rpm</a><br>
-<a href="OptionalTasks/serverdeploy.html">ServerDeploy</a><br>
-<a href="OptionalTasks/script.html">Script</a><br>
-<a href="OptionalTasks/sound.html">Sound</a><br>
-<a href="OptionalTasks/sos.html">SourceOffSite</a><br>
-<a href="OptionalTasks/splash.html">Splash</a><br>
-<a href="OptionalTasks/starteam.html">Starteam Tasks</a><br>
-<a href="OptionalTasks/stylebook.html">Stylebook</a><br>
-<a href="OptionalTasks/telnet.html">Telnet</a><br>
-<a href="OptionalTasks/test.html">Test</a><br>
-<a href="OptionalTasks/translate.html">Translate</a><br>
-<a href="Integration/VAJAntTool.html#tasks">Visual Age for Java Tasks</a><br>
-<a href="OptionalTasks/vss.html#tasks">Microsoft Visual SourceSafe Tasks</a><br>
-<a href="OptionalTasks/wljspc.html">Weblogic JSP Compiler</a><br>
-<a href="OptionalTasks/xmlvalidate.html">XmlValidate</a><br>
-
-</body>
-</html>
-
diff --git a/docs/manual/platform.html b/docs/manual/platform.html
deleted file mode 100644
index 264b818..0000000
--- a/docs/manual/platform.html
+++ /dev/null
@@ -1,84 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Platform Issues</title>
-</head>
-
-<h1>Platform Issues</h1>
-
-
-<h2>Unix</h2>
-
-<ul>
-<li> You should use a GNU version of <tt>tar</tt> to untar the ant source tree,
-if you have downloaded this as a tar file.
-</li>
-<li> Ant does not preserve file permissions when a file is copied, moved or 
-archived. Use <tt>&lt;chmod&gt;</tt> to set permissions, and when creating a 
-tar archive, use the <tt>mode</tt> attribute of <tt>&lt;tarfileset&gt;</tt>
-to set the permissions in the tar file.
-</li>
-<li> Ant is not symbolic link aware in moves, deletes and when recursing down a tree
-of directories to build up a list of files. Unexpected things can happen.
-</ul>
-
-<h2>Microsoft Windows</h2>
-
-Windows 9x (win95, win98, win98SE and winME) has a batch file system which
-does not work fully with long file names, so we recommend that ant and the JDK
-are installed into directories without spaces, and with 8.3 filenames. 
-The Perl and Python launcher scripts do not suffer from this limitation.
-
-<p>
-All versions of windows are usually case insensitive, although mounted 
-file systems (Unix drives, Clearcase views) can be case sensitive underneath,
-confusing patternsets. 
-
-<p>
-Ant can often not delete a directory which is open in an Explorer window. 
-There is nothing we can do about this short of spawning a program to kill
-the shell before deleting directories.  
-
-<h2>Apple MacOS X</h2>
-
-MacOS X is the first of the Apple platforms that Ant supports completely;
-it is treated like any other Unix. 
-
-<h2>Novell Netware</h2>
-
-<p>To give the same level of sophisticated control as Ant's startup scripts on other platforms, it was decided to make the main ant startup on NetWare be via a Perl Script, "runant.pl".  This is found in the bin directory (for instance - bootstrap\bin or dist\bin).</p>
-
-<p>One important item of note is that you need to set up the following to run ant:</p>
-<ul><li><code>CLASSPATH</code> - put ant.jar, crimson.jar, optional.jar, and any other needed jars on the system classpath.</li>
-   <li><code>ANT_OPTS</code> - On NetWare, <code>ANT_OPTS</code> needs to include a parameter of the form, <nobr>"-envCWD=<code>ANT_HOME</code>"</nobr>, with <code>ANT_HOME</code> being the fully expanded location of Ant, <b>not</b> an environment variable.  This is due to the fact that the NetWare System Console has no notion of a current working directory.</li>
-</ul>
-<p>It is suggested that you create up an ant.ncf that sets up these parameters, and calls <code>perl ANT_HOME/dist/bin/runant.pl</code></p>
-<p>The following is an example of such an NCF file(assuming ant is installed in <nobr>'sys:/jakarta-ant/'):</nobr></p>
-<code>
-   &nbsp;&nbsp;&nbsp;envset CLASSPATH=SYS:/jakarta-ant/bootstrap/lib/ant.jar<br />
-   &nbsp;&nbsp;&nbsp;envset CLASSPATH=$CLASSPATH;SYS:/jakarta-ant/lib/crimson.jar <br />
-   &nbsp;&nbsp;&nbsp;envset CLASSPATH=$CLASSPATH;SYS:/jakarta-ant/lib/optional/junit.jar <br />
-   &nbsp;&nbsp;&nbsp;envset CLASSPATH=$CLASSPATH;SYS:/jakarta-ant/bootstrap/lib/optional.jar <br />
-<br />
-   &nbsp;&nbsp;&nbsp;setenv ANT_OPTS=-envCWD=sys:/jakarta-ant <br />
-   &nbsp;&nbsp;&nbsp;envset ANT_OPTS=-envCWD=sys:/jakarta-ant <br />
-   &nbsp;&nbsp;&nbsp;setenv ANT_HOME=sys:/jakarta-ant/dist/lib <br />
-   &nbsp;&nbsp;&nbsp;envset ANT_HOME=sys:/jakarta-ant/dist/lib <br />
-<br />
-   &nbsp;&nbsp;&nbsp;perl sys:/jakarta-ant/dist/bin/runant.pl <br />
-</code>
-
-<p>Ant works on JVM version 1.3 or higher.  You may have some luck running it on JVM 1.2, but serious problems have been found running Ant on JVM 1.1.7B.  These problems are caused by JVM bugs that will not be fixed.</p>
-<p>JVM 1.3 is supported on Novell NetWare versions 5.1 and higher.</p>
-
-
-<h2>Other platforms</h2>
-Support for other platforms is not guaranteed to be complete, as certain 
-techniques to hide platform details from build files need to be written and
-tested on every particular platform. Contributions in this area are welcome.
-
-<hr>
-<p align="center">Copyright &copy; 2002 Apache Software Foundation. All rights
-Reserved.</p>
-</html>
diff --git a/docs/manual/running.html b/docs/manual/running.html
deleted file mode 100644
index 1ceff0e..0000000
--- a/docs/manual/running.html
+++ /dev/null
@@ -1,160 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Running Apache Ant</title>
-</head>
-
-<body>
-
-<h1>Running Ant</h1>
-<h2><a name="commandline">Command Line</a></h2>
-<p> If you've installed Ant as described in the
-<a href="install.html"> Installing Ant</a> section,
-running Ant from the command-line is simple: just type
-<code>ant</code>.</p>
-<p>When no arguments are specified, Ant looks for a <code>build.xml</code>
-file in the current directory and, if found, uses that file as the
-buildfile and runs the &quot;default&quot; target.
-If you use the <code>-find</code> option,
-Ant will search for a buildfile first in the current directory, then in
-the parent directory, and so on, until either a buildfile is found or the root
-of the filesystem has been reached. To make Ant use
-a buildfile other than <code>build.xml</code>, use the command-line
-option <code>-buildfile <i>file</i></code>,
-where <i>file</i> is the name of the buildfile you want to use.</p>
-
-<p>You can also set <a href="using.html#properties">properties</a> that
-override properties specified in the
-buildfile (see the <a href="CoreTasks/property.html">property</a> task).
-This can be done with
-the <nobr><code>-D<i>property</i>=<i>value</i></code></nobr> option,
-where <i>property</i> is the name of the property,
-and <i>value</i> is the value for that property.
-This can also be used to pass in the value of environment variables.
-Just pass <nobr><code>-DMYVAR=%MYVAR%</code></nobr> (Windows) or
-<nobr><code>-DMYVAR=$MYVAR</code></nobr> (Unix)
-to Ant - you can then access
-these variables inside your buildfile as <code>${MYVAR}</code>.
-You can also access environment variables using the <a href="CoreTasks/property.html">
-property</a> task.
-</p>
-
-<p>Options that affect the amount of logging output by Ant are: <nobr><code>-quiet</code></nobr>,
-which instructs Ant to print less
-information on the console when running;
-<nobr><code>-verbose</code></nobr>, which causes Ant to print
-additional information to the console; and <nobr><code>-debug</code></nobr>,
-which causes Ant to print considerably more additional information.
-</p>
-
-<p>It is also possible to specify one or more targets that should be executed.
-When omitted, the target that is specified in the
-<code>default</code> attribute of the
-<a href="using.html#projects"><code>project</code></a> tag is
-used.</p>
-
-<p>The <nobr><code>-projecthelp</code></nobr> option prints out a list
-of the buildfile's targets, along with the
-text in the <code>description</code> attribute of the target,
-if one was specified, followed by a list of those targets without one.</p>
-
-<h3><a name="options">Command-line Options Summary</a></h3>
-<pre>ant [options] [target [target2 [target3] ...]]
-Options:
-  -help                  print this message
-  -projecthelp           print project help information
-  -version               print the version information and exit
-  -quiet                 be extra quiet
-  -verbose               be extra verbose
-  -debug                 print debugging information
-  -emacs                 produce logging information without adornments
-  -logfile &lt;file&gt;        use given file for log
-  -logger &lt;classname&gt;    the class which is to perform logging
-  -listener &lt;classname&gt;  add an instance of class as a project listener
-  -buildfile &lt;file&gt;      use given buildfile
-  -D&lt;property&gt;=&lt;value&gt;   use value for given property
-  -propertyfile &lt;name&gt;   load all properties from file with -D
-                         properties taking precedence
-  -inputhandler &lt;class&gt;  the class which will handle input requests
-  -find &lt;file&gt;           search for buildfile towards the root of the
-                         filesystem and use it
-</pre>
-<p>For more information about <code>-logger</code> and
-<code>-listener</code> see the section <a
-href="listeners.html">Loggers &amp; Listeners</a>
-<p>For more information about <code>-inputhandler</code> see the
-section <a href="inputhandler.html">InputHandler</a>
-<h3>Examples</h3>
-<blockquote>
-  <pre>ant</pre>
-</blockquote>
-<p>runs Ant using the <code>build.xml</code> file in the current directory, on
-the default target.</p>
-<blockquote>
-  <pre>ant -buildfile test.xml</pre>
-</blockquote>
-<p>runs Ant using the <code>test.xml</code> file in the current directory, on
-the default target.</p>
-<blockquote>
-  <pre>ant -buildfile test.xml dist</pre>
-</blockquote>
-<p>runs Ant using the <code>test.xml</code> file in the current directory, on a
-target called <code>dist</code>.</p>
-<blockquote>
-  <pre>ant -buildfile test.xml -Dbuild=build/classes dist</pre>
-</blockquote>
-<p>runs Ant using the <code>test.xml</code> file in the current directory, on a
-target called <code>dist</code>, setting the <code>build</code> property to the
-value <code>build/classes</code>.</p>
-
-<h3><a name="files">Files</a></h3>
-
-<p>The Ant wrapper script for Unix will source (read and evaluate) the
-file <code>~/.antrc</code> before it does anything - the Windows batch
-file invokes <code>%HOME%\antrc_pre.bat</code> at the start and
-<code>%HOME%\antrc_post.bat</code> at the end.  You can use these
-files to set/unset environment variables that should only be visible
-during the execution of Ant.  See the next section for example.</p>
-
-<h3><a name="envvars">Environment Variables</a></h3>
-
-<p>The wrapper scripts use the following environment variables (if
-set):</p>
-
-<ul>
-  <li><code>JAVACMD</code> - full path of the Java executable.  Use this
-  to invoke a different JVM than <code>JAVA_HOME/bin/java(.exe)</code>.</li>
-
-  <li><code>ANT_OPTS</code> - command-line arguments that should be
-  passed to the JVM. For example, you can define system properties or set
-  the maximum Java heap size here.</li>
-
-  <li><code>ANT_ARGS</code> - Ant command-line arguments. For example,
-  set <code>ANT_ARGS</code> to point to a different logger and to
-  include the <code>-find</code> flag.</li>
-</ul>
-
-<h2><a name="viajava">Running Ant via Java</a></h2>
-<p>If you have installed Ant in the do-it-yourself way, Ant can be started
-with:</p>
-<blockquote>
-  <pre>java -Dant.home=c:\ant org.apache.tools.ant.Main [options] [target]</pre>
-</blockquote>
-
-<p>These instructions actually do exactly the same as the <code>ant</code>
-command. The options and target are the same as when running Ant with the <code>ant</code>
-command. This example assumes you have set your classpath to include:</p>
-<ul>
-<li><code>ant.jar</code></li>
-<li>jars/classes for your XML parser</li>
-<li>the JDK's required jar/zip files</li>
-</ul>
-<br>
-<hr>
-<p align="center">Copyright &copy; 2001-2002 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/runninglist.html b/docs/manual/runninglist.html
deleted file mode 100644
index 62fbf52..0000000
--- a/docs/manual/runninglist.html
+++ /dev/null
@@ -1,22 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Apache Ant User Manual</title>
-<base target="mainFrame">
-</head>
-
-<body>
-
-<h2><a href="toc.html" target="navFrame">Table of Contents</a></h2>
-
-<h3>Running Ant</h3>
-<a href="running.html#commandline">Command Line</a><br>
-&nbsp;&nbsp;<a href="running.html#options">Options</a><br>
-&nbsp;&nbsp;<a href="running.html#files">Files</a><br>
-&nbsp;&nbsp;<a href="running.html#envvars">Environment Variables</a><br>
-<a href="running.html#viajava">Running Ant via Java</a><br>
-
-</body>
-</html>
-
diff --git a/docs/manual/sysclasspath.html b/docs/manual/sysclasspath.html
deleted file mode 100644
index e348f58..0000000
--- a/docs/manual/sysclasspath.html
+++ /dev/null
@@ -1,59 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>build.sysclasspath</title>
-</head>
-
-<body>
-
-<h2><a name="sysclasspath">build.sysclasspath</a></h2>
-<p>The value of the build.sysclasspath property
-control how the system classpath, ie. the classpath in effect when
-Ant is run, affects the behaviour of classpaths in Ant.
-The default behavior varies from Ant to Ant task.</p>
-
-The values and their meanings are:
-
-<table cellspacing="20">
-<tr>
-<th align="left" valign="top">only</th>
-<td>Only the system classpath is used and classpaths specified in build files,
-etc are ignored. This situation could be considered as the person running
-the build file knows more about the environment than the person writing the
-build file
-</td>
-</tr>
-
-<tr>
-<th align="left" valign="top">ignore</th>
-<td>
-The system classpath is ignored. This situation is the reverse of the
-above. The person running the build trusts the build file writer to get the
-build file right
-</td>
-</tr>
-
-<tr>
-<th align="left" valign="top">last</th>
-<td>
-The classpath is concatenated to any specified classpaths at the end. This
-is a compromise, where the build file writer has priority.
-</td>
-</tr>
-
-<tr>
-<th align="left" valign="top">first</th>
-<td>
-Any specified classpaths are concatenated to the system classpath. This is
-the other form of compromise where the build runner has priority.
-</td>
-</tr>
-</table>
-
-<hr>
-<p align="center">Copyright &copy; 2001-2002 Apache Software Foundation. All rights
-Reserved.</p>
-</body>
-</html>
-
diff --git a/docs/manual/tasksoverview.html b/docs/manual/tasksoverview.html
deleted file mode 100644
index dba92cf..0000000
--- a/docs/manual/tasksoverview.html
+++ /dev/null
@@ -1,1114 +0,0 @@
-<html>
-<head>
-  <meta http-equiv="Content-Language" content="en-us">
-  <title>Overview of Ant Tasks</title>
-  <base target="mainFrame">
-</head>
-
-<body>
-<a name="top"></a>
-<h2>Overview of Ant Tasks</h2>
-<p>Given the large number of tasks available with Ant, it may be
-difficult to get an overall view of what each task can do.  The following
-tables provide a short description of each task and a link to the complete
-documentation.</p>
-
-<a href="#archive">Archive Tasks</a><br>
-<a href="#audit">Audit/Coverage Tasks</a><br>
-<a href="#compile">Compile Tasks</a><br>
-<a href="#deploy">Deployment Tasks</a><br>
-<a href="#doc">Documentation Tasks</a><br>
-<a href="#ejb">EJB Tasks</a><br>
-<a href="#exec">Execution Tasks</a><br>
-<a href="#file">File Tasks</a><br>
-<a href="#log">Logging Tasks</a><br>
-<a href="#mail">Mail Tasks</a><br>
-<a href="#misc">Miscellaneous Tasks</a><br>
-<a href="#net">.NET Tasks</a><br>
-<a href="#preproc">Pre-process Tasks</a><br>
-<a href="#prop">Property Tasks</a><br>
-<a href="#remote">Remote Tasks</a><br>
-<a href="#scm">SCM Tasks</a><br>
-<a href="#testing">Testing Tasks</a><br>
-<a href="#vaj">Visual Age for Java Tasks</a><br>
-
-
-<p></p>
-<table width="100%" border="0" cellpadding="4" cellspacing="0">
-<th align="left">
-<font size="+0" face="arial,helvetica,sanserif">
-<a name="archive">Archive Tasks</a></th>
-</font>
-<font size="-1" face="arial,helvetica,sanserif">
-<th align="right"><a href="#top">[Back to top]</a></th>
-</font>
-</table>
-<table width="100%" border="1" cellpadding="4" cellspacing="0">
-  <tr valign="top">
-    <th nowrap>Task Name</th>
-    <th nowrap>Description</th>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="CoreTasks/unpack.html">BUnzip2</a></td>
-    <td><p>Expands a file packed using GZip or BZip2.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="CoreTasks/pack.html">BZip2</a></td>
-    <td><p>Packs a file using the GZip or BZip2 algorithm. This task
-     does not do any dependency checking; the output file is always
-     generated</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="OptionalTasks/cab.html">Cab</a></td>
-    <td><p>Creates Microsoft CAB archive files. It is invoked
-     similar to the <a href="CoreTasks/jar.html">Jar</a> or
-     <a href="CoreTasks/zip.html">Zip</a> tasks. This task will work on
-     Windows using the external <i>cabarc</i> tool (provided by Microsoft),
-     which must be located in your executable path.</p></td>
-   </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="CoreTasks/ear.html">Ear</a></td>
-    <td><p>An extension of the <a href="CoreTasks/jar.html">Jar</a> task with
-     special treatment for files that should end up in an
-     Enterprise Application archive.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="CoreTasks/gunzip.html">GUnzip</a></td>
-    <td><p>Expands a GZip file.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="CoreTasks/gzip.html">GZip</a></td>
-    <td><p>GZips a set of files.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="CoreTasks/jar.html">Jar</a></td>
-    <td><p>Jars a set of files.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="OptionalTasks/jlink.html">Jlink</a></td>
-    <td><p>This task can be used to build jar and zip files,
-     similar to the <a href="CoreTasks/jar.html">Jar</a> task.
-     However, Jlink provides options for controlling the way entries from
-     input files are added to the output file. Specifically, capabilities
-     for merging entries from multiple zip or jar files are available.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="CoreTasks/manifest.html">Manifest</a></td>
-    <td><p>Creates a manifest file.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="OptionalTasks/rpm.html">Rpm</a></td>
-    <td><p>Invokes the <i>rpm</i> executable to build a Linux installation
-     file. This task currently only works on Linux or other Unix platforms
-     with RPM support.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="CoreTasks/signjar.html">SignJar</a></td>
-    <td><p>Signs a jar or zip file with the <i>javasign</i>
-     command-line tool.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="CoreTasks/tar.html">Tar</a></td>
-    <td><p>Creates a tar archive.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="CoreTasks/unzip.html">Unjar</a></td>
-    <td><p>Unzips a jarfile.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="CoreTasks/untar.html">Untar</a></td>
-    <td><p>Untars a tarfile.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="CoreTasks/unzip.html">Unwar</a></td>
-    <td><p>Unzips a warfile.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="CoreTasks/unzip.html">Unzip</a></td>
-    <td><p>Unzips a zipfile.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="CoreTasks/war.html">War</a></td>
-    <td><p>An extension of the <a href="CoreTasks/jar.html">Jar</a> task
-     with special treatment for files that should end up in the
-     <code>WEB-INF/lib</code>, <code>WEB-INF/classes</code>, or
-     <code>WEB-INF</code> directories of the Web Application Archive.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="CoreTasks/zip.html">Zip</a></td>
-    <td><p>Creates a zipfile.</p></td>
-  </tr>
-</table>
-
-<p></p>
-<table width="100%" border="0" cellpadding="4" cellspacing="0">
-<th align="left">
-<font size="+0" face="arial,helvetica,sanserif">
-<a name="audit">Audit/Coverage Tasks</a></th>
-</font>
-<font size="-1" face="arial,helvetica,sanserif">
-<th align="right"><a href="#top">[Back to top]</a></th>
-</font>
-</table>
-<table width="100%" border="1" cellpadding="4" cellspacing="0">
-  <tr valign="top">
-    <th nowrap>Task Name</th>
-    <th>Description</th>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="OptionalTasks/jdepend.html">JDepend</a></td>
-    <td><p>Invokes the <a href="http://www.clarkware.com/software/JDepend.html">
-     JDepend</a> parser. This parser &quot;traverses a set of Java source-file
-     directories and generates design-quality metrics for each Java
-     package&quot;.</p></td>
-   </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="OptionalTasks/jpcoverage.html">JProbe</a></td>
-    <td><p>These tasks run the tools from the
-     <a href="http://www.sitraka.com">JProbe</a> suite. This task was written
-      using JProbe Suite Server Side 3.0.</p></td>
-    </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="OptionalTasks/mmetrics.html">MMetrics</a></td>
-    <td><p>Computes the metrics of a set of Java source files, using the
-     <a href="http://www.webgain.com/products/quality_analyzer/">
-     Metamata Metrics/WebGain Quality Analyzer</a> source-code analyzer,
-     and writes the results to an XML file.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="OptionalTasks/maudit.html">Maudit</a></td>
-    <td><p>Performs static analysis on a set of Java source-code and
-     byte-code files, using the
-     <a href="http://www.webgain.com/products/quality_analyzer/">
-     Metamata Metrics/WebGain Quality Analyzer</a> source-code
-     analyzer.</p></td>
-  </tr>
-</table>
-
-<p></p>
-<table width="100%" border="0" cellpadding="4" cellspacing="0">
-<th align="left">
-<font size="+0" face="arial,helvetica,sanserif">
-<a name="compile">Compile Tasks</a></th>
-</font>
-<font size="-1" face="arial,helvetica,sanserif">
-<th align="right"><a href="#top">[Back to top]</a></th>
-</font>
-</table>
-<table width="100%" border="1" cellpadding="4" cellspacing="0">
-  <tr valign="top">
-    <th nowrap>Task Name</th>
-    <th>Description</th>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="OptionalTasks/depend.html">Depend</a></td>
-    <td><p>Determines which classfiles are out-of-date with respect to their
-     source, removing the classfiles of any other classes that depend on the
-     out-of-date classes, forcing the re-compile of the removed classfiles.
-     Typically used in conjunction with the
-     <a href="CoreTasks/javac.html">Javac</a> task.</p></td>
-
-  <tr valign="top">
-    <td nowrap><a href="CoreTasks/javac.html">Javac</a></td>
-    <td><p>Compiles the specified source file(s) within the running
-     (Ant) VM, or in another VM if the <code>fork</code> attribute is
-     specified.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="OptionalTasks/jspc.html">JspC</a></td>
-    <td><p>Runs the JSP compiler. It can be used to precompile JSP pages
-     for fast initial invocation of JSP pages, deployment on a server without
-     the full JDK installed, or simply to syntax-check the pages without
-     deploying them. The <a href="CoreTasks/javac.html">Javac</a> task
-     can be used to compile the generated Java source.
-     (For Weblogic JSP compiles,
-     see the <a href="OptionalTasks/wljspc.html">Wljspc</a> task.)</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="OptionalTasks/netrexxc.html">NetRexxC</a></td>
-    <td><p>Compiles a
-     <a href="http://www2.hursley.ibm.com/netrexx" target="_top">NetRexx</a>
-     source tree within the running (Ant) VM.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="CoreTasks/rmic.html">Rmic</a></td>
-    <td><p>Runs the <i>rmic</i> compiler on the specified file(s).</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="OptionalTasks/wljspc.html">Wljspc</a></td>
-    <td><p>Compiles JSP pages using Weblogic's JSP compiler,
-     <i>weblogic.jspc</i>. (For non-Weblogic JSP compiles, see the
-     <a href="OptionalTasks/jspc.html">JspC</a> task.</p></td>
-  </tr>
-
-</table>
-
-<p></p>
-<table width="100%" border="0" cellpadding="4" cellspacing="0">
-<th align="left">
-<font size="+0" face="arial,helvetica,sanserif">
-<a name="deploy">Deployment Tasks</a></th>
-</font>
-<font size="-1" face="arial,helvetica,sanserif">
-<th align="right"><a href="#top">[Back to top]</a></th>
-</font>
-</table>
-<table width="100%" border="1" cellpadding="4" cellspacing="0">
-  <tr valign="top">
-    <th nowrap>Task Name</th>
-    <th>Description</th>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="OptionalTasks/serverdeploy.html">ServerDeploy</a></td>
-    <td><p>Task to run a &quot;hot&quot; deployment tool for vendor-specific
-     J2EE server.
-    </p></td>
-  </tr>
-</table>
-
-<p></p>
-<table width="100%" border="0" cellpadding="4" cellspacing="0">
-<th align="left">
-<font size="+0" face="arial,helvetica,sanserif">
-<a name="doc">Documentation Tasks</a></th>
-</font>
-<font size="-1" face="arial,helvetica,sanserif">
-<th align="right"><a href="#top">[Back to top]</a></th>
-</font>
-</table>
-<table width="100%" border="1" cellpadding="4" cellspacing="0">
-  <tr valign="top">
-    <th nowrap>Task Name</th>
-    <th>Description</th>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="CoreTasks/javadoc.html">Javadoc/<i>Javadoc2</i></a></td>
-    <td><p>Generates code documentation using the <i>javadoc</i> tool.
-     The Javadoc2 task is deprecated; use the Javadoc task instead.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="OptionalTasks/stylebook.html">Stylebook</a></td>
-    <td><p>Executes the Apache Stylebook documentation generator. 
-     Unlike the command-line version of this tool, all three arguments
-     are required to run the Stylebook task.</p></td>
-  </tr>
-</table>
-  
-<p></p>
-<table width="100%" border="0" cellpadding="4" cellspacing="0">
-<th align="left">
-<font size="+0" face="arial,helvetica,sanserif">
-<a name="ejb">EJB Tasks</a></th>
-</font>
-<font size="-1" face="arial,helvetica,sanserif">
-<th align="right"><a href="#top">[Back to top]</a></th>
-</font>
-</table>
-<table width="100%" border="1" cellpadding="4" cellspacing="0">
-  <tr valign="top">
-    <th nowrap>Task Name</th>
-    <th>Description</th>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="OptionalTasks/ejb.html">EJB Tasks</a></td>
-    <td><p>(See the documentation describing the EJB tasks.)</p></td>
-  </tr>
-</table>
-
-<p></p>
-<table width="100%" border="0" cellpadding="4" cellspacing="0">
-<th align="left">
-<font size="+0" face="arial,helvetica,sanserif">
-<a name="exec">Execution Tasks</a></th>
-</font>
-<font size="-1" face="arial,helvetica,sanserif">
-<th align="right"><a href="#top">[Back to top]</a></th>
-</font>
-</table>
-<table width="100%" border="1" cellpadding="4" cellspacing="0">
-  <tr valign="top">
-    <th nowrap>Task Name</th>
-    <th>Description</th>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="CoreTasks/ant.html">Ant</a></td>
-    <td><p>Runs Ant on a supplied buildfile, optionally
-     passing properties (with possibly new values).
-     This task can be used to build sub-projects.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="CoreTasks/antcall.html">AntCall</a></td>
-    <td><p>Runs another target within the same buildfile, optionally
-     passing properties (with possibly new values).</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="CoreTasks/apply.html">Apply/<i>ExecOn</i></a></td>
-    <td><p>Executes a system command. When the <code>os</code> attribute is
-     specified, the command is only executed when Ant is run on one
-     of the specified operating systems.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="CoreTasks/dependset.html">Dependset</a></td>
-    <td><p>This task compares a set of source files with a set of target
-     files.  If any of the source files is newer than any of
-     the target files, all the target files are removed. </p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="CoreTasks/exec.html">Exec</a></td>
-    <td><p>Executes a system command. When the <code>os</code> attribute
-     is specified, the command is only executed when Ant is run on one of
-     the specified operating systems.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="CoreTasks/java.html">Java</a></td>
-    <td><p>Executes a Java class within the running (Ant) VM, or in
-     another VM if the <code>fork</code> attribute is specified.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="CoreTasks/parallel.html">Parallel</a></td>
-    <td><p>A container task that can contain other Ant tasks.
-     Each nested task specified within the <code>&lt;parallel&gt;</code>
-     tag will be executed in its own thread.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="CoreTasks/sequential.html">Sequential</a></td>
-    <td><p>A container task that can contain other Ant tasks.
-     The nested tasks are simply executed in sequence. Its primary use is
-     to support the sequential execution of a subset of tasks within
-     the <code>&lt;parallel&gt;</code> tag.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="CoreTasks/sleep.html">Sleep</a></td>
-    <td><p> A task for suspending execution for a specified period of time.
-     Useful when a build or deployment process requires an interval between
-     tasks.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="CoreTasks/waitfor.html">Waitfor</a></td>
-    <td><p>Blocks execution until a set of specified conditions become true.
-     This task is intended to be used with the
-     <a href="CoreTasks/parallel.html">Parallel</a> task to synchronize
-     a set of processes.</p></td>
-  </tr>
-</table>
-
-<p></p>
-<table width="100%" border="0" cellpadding="4" cellspacing="0">
-<th align="left">
-<font size="+0" face="arial,helvetica,sanserif">
-<a name="file">File Tasks</a></th>
-</font>
-<font size="-1" face="arial,helvetica,sanserif">
-<th align="right"><a href="#top">[Back to top]</a></th>
-</font>
-</table>
-<table width="100%" border="1" cellpadding="4" cellspacing="0">
-  <tr valign="top">
-    <th nowrap>Task Name</th>
-    <th>Description</th>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="CoreTasks/checksum.html">Checksum</a></td>
-    <td><p>Generates a checksum for a file or set of files. This task can
-     also be used to perform checksum verifications.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="CoreTasks/chmod.html">Chmod</a></td>
-    <td><p>Changes the permissions of a file or all files inside the
-     specified directories. Currently, it has effect only under Unix.
-     The permissions are also UNIX style, like the arguments for the
-    <i>chmod</i> command.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="CoreTasks/concat.html">Concat</a></td>
-    <td><p>Concatenates multiple files into a single one or to Ant's
-     logging system.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="CoreTasks/copy.html">Copy</a></td>
-    <td><p>Copies a file or Fileset to a new file or directory.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="CoreTasks/copydir.html"><i>Copydir</i></a></td>
-    <td><p><i>Deprecated.</i>  Use the
-     <a href="CoreTasks/copy.html">Copy</a> task instead.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="CoreTasks/copyfile.html"><i>Copyfile</i></a></td>
-    <td><p><i>Deprecated.</i>  Use the
-     <a href="CoreTasks/copy.html">Copy</a> task instead.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="CoreTasks/delete.html">Delete</a></td>
-    <td><p>Deletes either a single file, all files and sub-directories
-     in a specified directory, or a set of files specified by one or more
-     <a href="CoreTypes/fileset.html">FileSet</a>s.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="CoreTasks/deltree.html"><i>Deltree</i></a></td>
-    <td><p><i>Deprecated.</i>  Use the
-     <a href="CoreTasks/delete.html">Delete</a> task instead.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="CoreTasks/filter.html">Filter</a></td>
-    <td><p>Sets a token filter for this project, or reads multiple token
-     filters from a specified file and sets these as filters. Token filters
-     are used by all tasks that perform file-copying operations.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="CoreTasks/fixcrlf.html">FixCRLF</a></td>
-    <td><p>Modifies a file to add or remove tabs, carriage returns, linefeeds,
-     and EOF characters.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="CoreTasks/get.html">Get</a></td>
-    <td><p>Gets a file from a URL.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="CoreTasks/mkdir.html">Mkdir</a></td>
-    <td><p>Creates a directory. Non-existent parent directories are created,
-     when necessary.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="CoreTasks/move.html">Move</a></td>
-    <td><p>Moves a file to a new file or directory, or a set(s) of file(s) to
-     a new directory.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="CoreTasks/patch.html">Patch</a></td>
-    <td><p>Applies a &quot;diff&quot; file to originals.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="CoreTasks/rename.html"><i>Rename</i></a></td>
-    <td><p><i>Deprecated.</i>  Use the <a href="CoreTasks/move.html">Move</a>
-    task instead.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="OptionalTasks/renameextensions.html">
-     <i>RenameExtensions</i></a></td>
-    <td><p><i>Deprecated</i>. Use the <a href="CoreTasks/move.html">Move</a>
-     task with a <a href="CoreTypes/mapper.html#glob-mapper">glob mapper</a>
-     instead.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="CoreTasks/replace.html">Replace</a></td>
-    <td><p>Replace is a directory-based task for replacing the occurrence
-     of a given string with another string in selected file.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="OptionalTasks/replaceregexp.html">
-     ReplaceRegExp</a></td>
-    <td><p>Directory-based task for replacing the occurrence of a given
-     regular expression with a substitution pattern in a file or set of
-     files.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="CoreTasks/touch.html">Touch</a></td>
-    <td><p>Changes the modification time of a file and possibly creates it at
-     the same time.</p></td>
-  </tr>
-</table>
-
-<p></p>
-<table width="100%" border="0" cellpadding="4" cellspacing="0">
-<th align="left">
-<font size="+0" face="arial,helvetica,sanserif">
-<a name="log">Logging Tasks</a></th>
-</font>
-<font size="-1" face="arial,helvetica,sanserif">
-<th align="right"><a href="#top">[Back to top]</a></th>
-</font>
-</table>
-<table width="100%" border="1" cellpadding="4" cellspacing="0">
-  <tr valign="top">
-    <th nowrap>Task Name</th>
-    <th>Description</th>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="CoreTasks/recorder.html">Record</a></td>
-    <td><p>Runs a listener that records the logging output of the
-     build-process events to a file. Several recorders can exist
-     at the same time. Each recorder is associated with a file.</p></td>
-  </tr>
-</table>
-
-<p></p>
-<table width="100%" border="0" cellpadding="4" cellspacing="0">
-<th align="left">
-<font size="+0" face="arial,helvetica,sanserif">
-<a name="mail">Mail Tasks</a></th>
-</font>
-<font size="-1" face="arial,helvetica,sanserif">
-<th align="right"><a href="#top">[Back to top]</a></th>
-</font>
-</table>
-<table width="100%" border="1" cellpadding="4" cellspacing="0">
-  <tr valign="top">
-    <th nowrap>Task Name</th>
-    <th>Description</th>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="CoreTasks/mail.html">Mail</a></td>
-    <td><p>A task to send SMTP email.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="OptionalTasks/mimemail.html">MimeMail</a></td>
-    <td><p><i>Deprecated</i>. Use the <a href="CoreTasks/mail.html">Mail</a>
-     task instead.</p></td>
-  </tr>
-
-</table>
-
-<p></p>
-<table width="100%" border="0" cellpadding="4" cellspacing="0">
-<th align="left">
-<font size="+0" face="arial,helvetica,sanserif">
-<a name="misc">Miscellaneous Tasks</a></th>
-</font>
-<font size="-1" face="arial,helvetica,sanserif">
-<th align="right"><a href="#top">[Back to top]</a></th>
-</font>
-</table>
-<table width="100%" border="1" cellpadding="4" cellspacing="0">
-  <tr valign="top">
-    <th nowrap>Task Name</th>
-    <th>Description</th>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="CoreTasks/echo.html">Echo</a></td>
-    <td><p>Echoes text to <code>System.out</code> or to a file.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="CoreTasks/fail.html">Fail</a></td>
-    <td><p>Exits the current build by throwing a BuildException,
-     optionally printing additional information.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="CoreTasks/genkey.html">GenKey</a></td>
-    <td><p>Generates a key in keystore.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="CoreTasks/input.html">Input</a></td>
-    <td><p>Allows user interaction during the build process by displaying a
-     message and reading a line of input from the console.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="CoreTasks/pathconvert.html">PathConvert</a></td>
-    <td><p>Converts a nested path, path reference, or fileset reference
-     to the form usable on a specified platform and stores the result in
-     a given property.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="OptionalTasks/script.html">Script</a></td>
-    <td><p>Executes a script in a 
-     <a href="http://oss.software.ibm.com/developerworks/opensource/bsf/"
-      target="_top">BSF</a>-supported language.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="OptionalTasks/sound.html">Sound</a></td>
-    <td><p>Plays a sound file at the end of the build, according to whether
-     the build failed or succeeded.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="OptionalTasks/splash.html">Splash</a></td>
-    <td><p>Displays a splash screen.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="CoreTasks/sql.html">Sql</a></td>
-    <td><p>Executes a series of SQL statements via JDBC to a database.
-     Statements can either be read in from a text file using the
-     <code>src</code> attribute, or from between the enclosing SQL
-     tags.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="CoreTasks/taskdef.html">Taskdef</a></td>
-    <td><p>Adds a task definition to the current project, such that this
-     new task can be used in the current project.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="CoreTasks/tstamp.html">TStamp</a></td>
-    <td><p>Sets the <code>DSTAMP</code>, <code>TSTAMP</code>, and
-     <code>TODAY</code> properties in the current project, based on
-     the current date and time.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="CoreTasks/typedef.html">Typedef</a></td>
-    <td><p>Adds a data-type definition to the current project, such that this
-     new type can be used in the current project.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="OptionalTasks/xmlvalidate.html">XmlValidate</a></td>
-    <td><p>Checks that XML files are valid (or only well-formed). This task
-     uses the Crimson SAX2 parser implementation by default, but any SAX1/2
-     parser can be specified, if needed.</p></td>
-  </tr>
-</table>
-
-<p></p>
-<table width="100%" border="0" cellpadding="4" cellspacing="0">
-<th align="left">
-<font size="+0" face="arial,helvetica,sanserif">
-<a name="net">.NET Tasks</a></th>
-</font>
-<font size="-1" face="arial,helvetica,sanserif">
-<th align="right"><a href="#top">[Back to top]</a></th>
-</font>
-</table>
-<table width="100%" border="1" cellpadding="4" cellspacing="0">
-  <tr valign="top">
-    <th nowrap>Task Name</th>
-    <th>Description</th>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="OptionalTasks/dotnet.html">.NET Tasks</a></td>
-    <td><p>(See the documentation describing the .NET tasks.)</p></td>
-  </tr>
-</table>
-
-<p></p>
-<table width="100%" border="0" cellpadding="4" cellspacing="0">
-<th align="left">
-<font size="+0" face="arial,helvetica,sanserif">
-<a name="preproc">Pre-process Tasks</a></th>
-</font>
-<font size="-1" face="arial,helvetica,sanserif">
-<th align="right"><a href="#top">[Back to top]</a></th>
-</font>
-</table>
-<table width="100%" border="1" cellpadding="4" cellspacing="0">
-  <tr valign="top">
-    <th nowrap>Task Name</th>
-    <th>Description</th>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="OptionalTasks/antlr.html">ANTLR</a></td>
-    <td><p>Invokes the <a HREF="http://www.antlr.org/" target="_top">ANTLR</a>
-     Translator generator on a grammar file.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="CoreTasks/antstructure.html">AntStructure</a></td>
-    <td><p>Generates a DTD for Ant buildfiles that contains information
-     about all tasks currently known to Ant.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="OptionalTasks/icontract.html">IContract</a></td>
-    <td><p>Instruments Java classes using the
-     <a href="http://www.reliable-systems.com/tools/">iContract</a> DBC
-     preprocessor. This task can generate a properties file for
-     <a href="http://home.sol.no/~hellesoy/icplus.html">iControl</a>,
-     a graphical user interface that lets you turn on/off assertions.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="OptionalTasks/javacc.html">JavaCC</a></td>
-    <td><p>Invokes the
-     <a HREF="http://www.webgain.com/products/java_cc/" target="_top">
-     JavaCC</a> compiler-compiler on a grammar file.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="OptionalTasks/javah.html">Javah</a></td>
-    <td><p>Generates JNI headers from a Java class.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="OptionalTasks/jjtree.html">JJTree</a></td>
-    <td><p>Invokes the <a href="http://www.webgain.com/products/java_cc/">
-     JJTree</a> preprocessor for the JavaCC compiler-compiler. It inserts
-     parse-tree building actions at various places in the JavaCC source that
-     it generates. The output of JJTree is run through JavaCC to create the
-     parser. This task only invokes JJTree if the grammar file is newer than
-     the generated JavaCC file.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="OptionalTasks/mparse.html">MParse</a></td>
-    <td><p>Invokes the Metamata <a HREF="http://www.metamata.com/parse.html">
-     MParse</a> compiler-compiler on a grammar file.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="OptionalTasks/native2ascii.html">
-     Native2Ascii</a></td>
-    <td><p>Converts files from native encodings to ASCII with escaped Unicode.
-      A common usage is to convert source files maintained in a native
-      operating system encoding to ASCII, prior to compilation.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="OptionalTasks/translate.html">Translate</a></td>
-    <td><p>Identifies keys in files, delimited by special tokens, and
-     translates them with values read from resource bundles.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="CoreTasks/style.html">Xslt/Style</a></td>
-    <td><p>Processes a set of documents via XSLT.</p></td>
-  </tr>
-</table>
-
-<p></p>
-<table width="100%" border="0" cellpadding="4" cellspacing="0">
-<th align="left">
-<font size="+0" face="arial,helvetica,sanserif">
-<a name="prop">Property Tasks</a></th>
-</font>
-<font size="-1" face="arial,helvetica,sanserif">
-<th align="right"><a href="#top">[Back to top]</a></th>
-</font>
-</table>
-<table width="100%" border="1" cellpadding="4" cellspacing="0">
-  <tr valign="top">
-    <th nowrap>Task Name</th>
-    <th>Description</th>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="CoreTasks/available.html">Available</a></td>
-    <td><p>Sets a property if a specified file, directory, class in the
-     classpath, or JVM system resource is available at runtime.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="CoreTasks/basename.html">Basename</a></td>
-    <td><p>Sets a property to the last element of a specified path.
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="CoreTasks/buildnumber.html">BuildNumber</a></td>
-    <td><p>Task that can be used to track build numbers.
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="CoreTasks/condition.html">Condition</a></td>
-    <td><p>Sets a property if a certain condition holds true - this is a
-     generalization of <a href="CoreTasks/available.html">Available</a> and
-     <a href="CoreTasks/uptodate.html">Uptodate</a>.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="CoreTasks/dirname.html">Dirname</a></td>
-    <td><p>Sets a property to the value of the specified file up to,
-     but not including, the last path element. 
-  </tr>
-
-  <tr valign="top">
-    <td nowrap>
-    <a href="OptionalTasks/echoproperties.html">Echoproperties</a><br>
-
-    </td>
-    <td><p>Lists the current properties</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="CoreTasks/loadfile.html">LoadFile</a></td>
-    <td><p>Loads a file into a property</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="CoreTasks/loadproperties.html">LoadProperties</a></td>
-    <td><p>Load a file's contents as Ant properties. This task is
-     equivalent to using <code>&lt;property file=&quot;...&quot;/&gt;</code>
-     except that it supports nested <code>&lt;filterchain&gt;</code> elements,
-     and it cannot be specified outside a target.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="CoreTasks/property.html">Property</a></td>
-    <td><p>Sets a property (by name and value), or set of properties
-     (from a file or resource) in the project.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="OptionalTasks/propertyfile.html">
-     PropertyFile</a></td>
-    <td><p>Creates or modifies property files. Useful when wanting to make
-     unattended modifications to configuration files for application
-     servers and applications. Typically used for things such as
-     automatically generating a build number and saving it to a build
-     properties file, or doing date manipulation.<p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="CoreTasks/uptodate.html">Uptodate</a></td>
-    <td><p>Sets a property if a given target file is newer than a set of
-     source files.</p></td>
-  </tr>
-</table>
-
-<p></p>
-<table width="100%" border="0" cellpadding="4" cellspacing="0">
-<th align="left">
-<font size="+0" face="arial,helvetica,sanserif">
-<a name="remote">Remote Tasks</a></th>
-</font>
-<font size="-1" face="arial,helvetica,sanserif">
-<th align="right"><a href="#top">[Back to top]</a></th>
-</font>
-</table>
-<table width="100%" border="1" cellpadding="4" cellspacing="0">
-  <tr valign="top">
-    <th nowrap>Task Name</th>
-    <th>Description</th>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="OptionalTasks/ftp.html">FTP</a></td>
-    <td><p>Implements a basic FTP client that can send, receive,
-     list, and delete files, and create directories.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="OptionalTasks/telnet.html">Telnet</a></td>
-    <td><p>Task to automate a remote <i>telnet</i> session. This task uses 
-     nested <code>&lt;read&gt;</code> and <code>&lt;write&gt;</code> tags
-     to indicate strings to wait for and specify text to send.</p></td>
-  </tr>
-
-</table>
-
-<p></p>
-<table width="100%" border="0" cellpadding="4" cellspacing="0">
-<th align="left">
-<font size="+0" face="arial,helvetica,sanserif">
-<a name="scm">SCM Tasks</a></th>
-</font>
-<font size="-1" face="arial,helvetica,sanserif">
-<th align="right"><a href="#top">[Back to top]</a></th>
-</font>
-</table>
-<table width="100%" border="1" cellpadding="4" cellspacing="0">
-  <tr valign="top">
-    <th nowrap>Task Name</th>
-    <th>Description</th>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="CoreTasks/cvs.html">Cvs</a></td>
-    <td><p>Handles packages/modules retrieved from a
-     <a href="http://www.cvshome.org/" target="_top">CVS</a>
-     repository.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="CoreTasks/changelog.html">CvsChangeLog</a></td>
-    <td><p>Generates an XML report of the changes recorded in a
-     <a href="http://www.cvshome.org/" target="_top">CVS</a>
-     repository.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="CoreTasks/cvspass.html">CVSPass</a></td>
-    <td><p>Adds entries to a .cvspass file. Adding entries to this file
-     has the same affect as a <i>cvs login</i> command.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="CoreTasks/cvstagdiff.html">CvsTagDiff</a></td>
-    <td><p>Generates an XML-formatted report file of the changes between 
-    two tags or dates recorded in a <a href="http://www.cvshome.org/" 
-    target="_top">CVS</a> repository.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="OptionalTasks/clearcase.html">ClearCase</a></td>
-    <td><p>Tasks to perform the ClearCase <i>cccheckin</i>, <i>cccheckout</i>,
-     <i>ccuncheckout</i>, and <i>ccupdate</i> commands.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="OptionalTasks/ccm.html">Continuus/Synergy</a></td>
-    <td><p>Tasks to perform the Continuus <i>ccmcheckin</i>,
-     <i>ccmcheckout</i>, <i>ccmcheckintask</i>, <i>ccmreconfigure</i>, and
-     <i>ccmcreateTask</i> commands.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="OptionalTasks/vss.html">
-     Microsoft Visual SourceSafe</a></td>
-    <td><p>Tasks to perform the Visual SourceSafe <i>vssget</i>,
-     <i>vsslabel</i>, <i>vsshistory</i>, <i>vsscheckin</i>,
-     <i>vsscheckout</i>, <i>vssadd</i>, <i>vsscp</i>, and <i>vsscreate</i>
-     commands.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="OptionalTasks/perforce.html">Perforce</a></td>
-    <td><p>Tasks to perform the Perforce <i>p4sync</i>, <i>p4change</i>,
-     <i>p4edit</i>, <i>p4submit</i>, <i>p4have</i>, <i>p4label</i>,
-     <i>p4counter</i>, <i>p4reopen</i>, <i>p4revert</i>, and <i>p4add</i>
-     commands.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="OptionalTasks/pvcstask.html">Pvcs</a></td>
-    <td><p>Allows the user extract the latest edition of the source code
-     from a PVCS repository.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="OptionalTasks/sos.html">SourceOffSite</a></td>
-    <td><p>Tasks to perform the SourceOffSite <i>sosget</i>, <i>soslabel</i>,
-     <i>soscheckin</i>, and <i>soscheckout</i> commands.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="OptionalTasks/starteam.html">StarTeam</a></td>
-    <td><p>Tasks to perform the StarTeam <i>stcheckout</i>, <i>stcheckin</i>,
-     <i>stlabel</i>, and <i>stlist</i> commands. The
-     <a href="OptionalTasks/starteam.html#starteam">Starteam</a> task
-     is deprecated; use 
-     <a href="OptionalTasks/starteam.html#stcheckout">STCheckout</a>
-     instead.</p></td>
-  </tr>
-</table>
-
-<p></p>
-<table width="100%" border="0" cellpadding="4" cellspacing="0">
-<th align="left">
-<font size="+0" face="arial,helvetica,sanserif">
-<a name="testing">Testing Tasks</a></th>
-</font>
-<font size="-1" face="arial,helvetica,sanserif">
-<th align="right"><a href="#top">[Back to top]</a></th>
-</font>
-</table>
-<table width="100%" border="1" cellpadding="4" cellspacing="0">
-  <tr valign="top">
-    <th nowrap>Task Name</th>
-    <th>Description</th>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="OptionalTasks/junit.html">Junit</a></td>
-    <td><p>Runs tests from the <a href="http://www.junit.org">Junit</a>
-     testing framework. This task has been tested with JUnit 3.0 up to
-     JUnit 3.7; it won't work with versions prior to JUnit 3.0.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="OptionalTasks/junitreport.html">JunitReport</a></td>
-    <td><p>Merges the individual XML files generated by the
-     <a href="OptionalTasks/junit.html">Junit</a> task and applies a
-     stylesheet on the resulting merged document to provide a browsable
-     report of the testcases results.</p></td>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="OptionalTasks/test.html">Test</a></td>
-    <td><p>Executes a unit test in the <code>org.apache.testlet</code>
-     framework.</p></td>
-  </tr>
-</table>
-
-<p></p>
-<table width="100%" border="0" cellpadding="4" cellspacing="0">
-<th align="left">
-<font size="+0" face="arial,helvetica,sanserif">
-<a name="vaj">Visual Age for Java Tasks</a></th>
-</font>
-<font size="-1" face="arial,helvetica,sanserif">
-<th align="right"><a href="#top">[Back to top]</a></th>
-</font>
-</table>
-<table width="100%" border="1" cellpadding="4" cellspacing="0">
-  <tr valign="top">
-    <th nowrap>Task Name</th>
-    <th>Description</th>
-  </tr>
-
-  <tr valign="top">
-    <td nowrap><a href="Integration/VAJAntTool.html">
-     Visual Age for Java Tasks</a></td>
-    <td><p>(See the documentation describing the Visual Age for Java
-     tasks.)</p></td>
-  </tr>
-</table>
-
-
-<hr>
-<p align="center">Copyright &copy; 2001-2002 Apache Software Foundation.
-All rights Reserved.</p>
-
-</body>
-</html>
diff --git a/docs/manual/toc.html b/docs/manual/toc.html
deleted file mode 100644
index 0a05a46..0000000
--- a/docs/manual/toc.html
+++ /dev/null
@@ -1,29 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Apache Ant User Manual</title>
-<base target="mainFrame">
-</head>
-
-<body>
-
-<h2>Table of Contents</h2>
-<a href="intro.html">Introduction</a><br>
-<a href="installlist.html" target="navFrame">Installing Ant</a><br>
-<a href="usinglist.html" target="navFrame">Using Ant</a><br>
-<a href="runninglist.html" target="navFrame">Running Ant</a><br>
-<a href="anttaskslist.html" target="navFrame">Ant Tasks</a><br>
-<a href="conceptstypeslist.html" target="navFrame">Concepts and Types</a><br>
-<a href="listeners.html" target="mainFrame">Loggers &amp; Listeners</a><br>
-<a href="ide.html" target="navFrame">Editor/IDE Integration</a><br>
-<a href="developlist.html" target="navFrame">Developing with Ant</a><br>
-<a href="api/index.html" target="_top">Ant API</a><br>
-<a href="LICENSE">License</a><br>
-<a href="feedback.html">Feedback and Troubleshooting</a><br>
-<br>
-<a href="credits.html">Authors</a><br>
-
-</body>
-</html>
-
diff --git a/docs/manual/using.html b/docs/manual/using.html
deleted file mode 100644
index be070d5..0000000
--- a/docs/manual/using.html
+++ /dev/null
@@ -1,531 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Writing a Simple Buildfile</title>
-</head>
-
-<body>
-<h1>Using Ant</h1>
-<h2><a name="buildfile">Writing a Simple Buildfile</a></h2>
-<p>Ant's buildfiles are written in XML. Each buildfile contains one project
-and at least one (default) target. Targets contain task elements.
-Each task element of the buildfile can have an <code>id</code> attribute and
-can later be referred to by the value supplied to this. The value has
-to be unique. (For additional information, see the
-<a href="#tasks"> Tasks</a> section below.)</p>
-<h3><a name="projects">Projects</a></h3>
-<p>A <i>project</i> has three attributes:</p>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">name</td>
-    <td valign="top">the name of the project.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">default</td>
-    <td valign="top">the default target to use when no target is supplied.</td>
-    <td align="center" valign="top">No. Will default to "main" if not specified.</td>
-  </tr>
-  <tr>
-    <td valign="top">basedir</td>
-    <td valign="top">the base directory from which all path calculations are
-      done. This attribute might be overridden by setting
-      the &quot;basedir&quot;
-      property beforehand. When this is done, it must be omitted in the
-      project tag. If neither the attribute nor the property have
-      been set, the parent directory of the buildfile will be used.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-</table>
-<p>Optionally, a description for the project can be provided as a
-top-level <code>&lt;description&gt;</code> element (see the <a
-href="CoreTypes/description.html">description</a> type).</p>
-
-<p>Each project defines one or more <i>targets</i>.
-A target is a set of <i>tasks</i> you want
-to be executed. When starting Ant, you can select which target(s) you
-want to have executed. When no target is given,
-the project's default is used.</p>
-
-<h3><a name="targets">Targets</a></h3>
-<p>A target can depend on other targets. You might have a target for compiling,
-for example, and a target for creating a distributable. You can only build a
-distributable when you have compiled first, so the distribute target
-<i>depends on</i> the compile target. Ant resolves these dependencies.</p>
-<p>It should be noted, however, that Ant's <code>depends</code> attribute
-only specifies the <i>order</i> in which targets should be executed - it
-does not affect whether the target that specifies the dependency(s) gets
-executed if the dependent target(s) did not (need to) run.
-</p>
-<p>Ant tries to execute the targets in the <code>depends</code>
-attribute in the order
-they appear (from left to right). Keep in mind that it is possible that a target
-can get executed earlier when an earlier target depends on it:</p>
-<blockquote>
-<pre>&lt;target name=&quot;A&quot;/&gt;
-&lt;target name=&quot;B&quot; depends=&quot;A&quot;/&gt;
-&lt;target name=&quot;C&quot; depends=&quot;B&quot;/&gt;
-&lt;target name=&quot;D&quot; depends=&quot;C,B,A&quot;/&gt;</pre>
-</blockquote>
-<p>Suppose we want to execute target D. From its
-<code>depends</code> attribute, you
-might think that first target C, then B and then A is executed.
-Wrong! C depends on B, and B depends on A, so first A is executed, then B, then C, and finally D.</p>
-<p>A target gets executed only once, even when more than one target
-depends on it (see the previous example).</p>
-<p>A target also has the ability to perform its execution if (or
-unless) a property has been set. This allows, for example, better
-control on the building process depending on the state of the system
-(java version, OS, command-line property defines, etc.).  To make a target
-<i>sense</i> this property, you should add the <code>if</code> (or
-<code>unless</code>) attribute with the name of the property that the target
-should react to. For example:</p>
-<blockquote>
-  <pre>&lt;target name=&quot;build-module-A&quot; if=&quot;module-A-present&quot;/&gt;</pre>
-  <pre>&lt;target name=&quot;build-own-fake-module-A&quot; unless=&quot;module-A-present&quot;/&gt;</pre>
-</blockquote>
-<p>In the first example, if the <code>module-A-present</code>
-property is set (to any value), the target will be run. In the second
-example, if the <code>module-A-present</code> property is set
-(again, to any value), the target will not be run.
-</p>
-<p>If no <code>if</code> and no <code>unless</code> attribute is present,
-the target will always be executed.</p>
-<p>The optional <code>description</code> attribute can be used to provide a one-line description of this target, which is printed by the
-<nobr><code>-projecthelp</code></nobr> command-line option. Targets
-without such a description are deemed internal and will not be listed,
-unless either the <nobr><code>-verbose</code></nobr> or
-<nobr><code>-debug</code></nobr> option is used.
-</p>
-<p>It is a good practice to place your <a
-href="CoreTasks/tstamp.html">tstamp</a> tasks in a so-called
-<i>initialization</i> target, on which
-all other targets depend. Make sure that target is always the first one in
-the depends list of the other targets. In this manual, most initialization targets
-have the name <code>&quot;init&quot;</code>.</p>
-<p>A target has the following attributes:</p>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">name</td>
-    <td valign="top">the name of the target.</td>
-    <td align="center" valign="top">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">depends</td>
-    <td valign="top">a comma-separated list of names of targets on which this
-      target depends.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">if</td>
-    <td valign="top">the name of the property that must be set in order for this
-      target to execute.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">unless</td>
-    <td valign="top">the name of the property that must not be set in order
-      for this target to execute.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">description</td>
-    <td valign="top">a short description of this target's function.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-</table>
-</p>
-
-A target name can be any alphanumeric string valid in the encoding of the XML
-file. The empty string &quot;&quot; is in this set, as is
-comma &quot;,&quot; and space &quot; &quot;.
-Please avoid using these, as they will not be supported in future Ant versions
-because of all the confusion they cause. IDE support of unusual target names,
-or any target name containing spaces, varies with the IDE.
-
-<p>
-
-Targets beginning with a hyphen such as <code>&quot;-restart&quot;</code>
-are valid, and can be used
-to name targets that should not be called directly from the command line.
-
-<h3><a name="tasks">Tasks</a></h3>
-<p>A task is a piece of code that can be executed.</p>
-<p>A task can have multiple attributes (or arguments, if you prefer). The value
-of an attribute might contain references to a property. These references will be
-resolved before the task is executed.</p>
-<p>Tasks have a common structure:</p>
-<blockquote>
-  <pre>&lt;<i>name</i> <i>attribute1</i>=&quot;<i>value1</i>&quot; <i>attribute2</i>=&quot;<i>value2</i>&quot; ... /&gt;</pre>
-</blockquote>
-<p>where <i>name</i> is the name of the task,
-<i>attributeN</i> is the attribute name, and
-<i>valueN</i> is the value for this attribute.</p>
-<p>There is a set of <a href="coretasklist.html" target="navFrame">built-in tasks</a>, along with a
-number of
-<a href="optionaltasklist.html" target="navFrame"> optional tasks</a>, but it is also very
-easy to <a href="develop.html#writingowntask">write your own</a>.</p>
-<p>All tasks share a task name attribute. The value of
-this attribute will be used in the logging messages generated by
-Ant.</p>
-Tasks can be assigned an <code>id</code> attribute:
-<blockquote>
-<pre>&lt;<i>taskname</i> id="<i>taskID</i>" ... /&gt;</pre>
-</blockquote>
-where <i>taskname</i> is the name of the task, and <i>taskID</i> is
-a unique identifier for this task.
-You can refer to the
-corresponding task object in scripts or other tasks via this name.
-For example, in scripts you could do:
-<blockquote>
-<pre>
-&lt;script ... &gt;
-  task1.setFoo("bar");
-&lt;/script&gt;
-</pre>
-</blockquote>
-to set the <code>foo</code> attribute of this particular task instance.
-In another task (written in Java), you can access the instance via
-<code>project.getReference("task1")</code>.
-<p>
-Note<sup>1</sup>: If &quot;task1&quot; has not been run yet, then
-it has not been configured (ie., no attributes have been set), and if it is
-going to be configured later, anything you've done to the instance may
-be overwritten.
-</p>
-<p>
-Note<sup>2</sup>: Future versions of Ant will most likely <i>not</i>
-be backward-compatible with this behaviour, since there will likely be no
-task instances at all, only proxies.
-</p>
-
-<h3><a name="properties">Properties</a></h3>
-<p>A project can have a set of properties. These might be set in the buildfile
-by the <a href="CoreTasks/property.html">property</a> task, or might be set outside Ant. A
-property has a name and a value; the name is case-sensitive. Properties may be used in the value of
-task attributes. This is done by placing the property name between
-&quot;<code>${</code>&quot; and &quot;<code>}</code>&quot; in the
-attribute value. For example,
-if there is a &quot;builddir&quot; property with the value
-&quot;build&quot;, then this could be used in an attribute like this:
-<code>${builddir}/classes</code>.
-This is resolved at run-time as <code>build/classes</code>.</p>
-
-<h3><a name="built-in-props">Built-in Properties</a></h3>
-<p>Ant provides access to all system properties as if they had been
-defined using a <code>&lt;property&gt;</code> task.
-For example, <code>${os.name}</code> expands to the
-name of the operating system.</p>
-<p>For a list of system properties see
-<a href="http://java.sun.com/j2se/1.3/docs/api/java/lang/System.html#getProperties()">the Javadoc of System.getProperties</a>.
-</p>
-<p>In addition, Ant has some built-in properties:</p>
-<pre>
-basedir             the absolute path of the project's basedir (as set
-                    with the basedir attribute of &lt;project&gt;).
-ant.file            the absolute path of the buildfile.
-ant.version         the version of Ant
-ant.project.name    the name of the project that is currently executing;
-                    it is set in the name attribute of &lt;project&gt;.
-ant.java.version    the JVM version Ant detected; currently it can hold
-                    the values &quot;1.1&quot;, &quot;1.2&quot;, &quot;1.3&quot; and &quot;1.4&quot;.
-</pre>
-
-<a name="example"><h3>Example Buildfile</h3></a>
-<pre>
-&lt;project name=&quot;MyProject&quot; default=&quot;dist&quot; basedir=&quot;.&quot;&gt;
-    &lt;description&gt;
-        simple example build file
-    &lt;/description&gt;
-  &lt;!-- set global properties for this build --&gt;
-  &lt;property name=&quot;src&quot; location=&quot;src&quot;/&gt;
-  &lt;property name=&quot;build&quot; location=&quot;build&quot;/&gt;
-  &lt;property name=&quot;dist&quot;  location=&quot;dist&quot;/&gt;
-
-  &lt;target name=&quot;init&quot;&gt;
-    &lt;!-- Create the time stamp --&gt;
-    &lt;tstamp/&gt;
-    &lt;!-- Create the build directory structure used by compile --&gt;
-    &lt;mkdir dir=&quot;${build}&quot;/&gt;
-  &lt;/target&gt;
-
-  &lt;target name=&quot;compile&quot; depends=&quot;init&quot;
-        description=&quot;compile the source &quot; &gt;
-    &lt;!-- Compile the java code from ${src} into ${build} --&gt;
-    &lt;javac srcdir=&quot;${src}&quot; destdir=&quot;${build}&quot;/&gt;
-  &lt;/target&gt;
-
-  &lt;target name=&quot;dist&quot; depends=&quot;compile&quot;
-        description=&quot;generate the distribution&quot; &gt;
-    &lt;!-- Create the distribution directory --&gt;
-    &lt;mkdir dir=&quot;${dist}/lib&quot;/&gt;
-
-    &lt;!-- Put everything in ${build} into the MyProject-${DSTAMP}.jar file --&gt;
-    &lt;jar jarfile=&quot;${dist}/lib/MyProject-${DSTAMP}.jar&quot; basedir=&quot;${build}&quot;/&gt;
-  &lt;/target&gt;
-
-  &lt;target name=&quot;clean&quot;
-        description=&quot;clean up&quot; &gt;
-    &lt;!-- Delete the ${build} and ${dist} directory trees --&gt;
-    &lt;delete dir=&quot;${build}&quot;/&gt;
-    &lt;delete dir=&quot;${dist}&quot;/&gt;
-  &lt;/target&gt;
-&lt;/project&gt;
-</pre>
-
-Notice that we are declaring properties outside any target. The
-<tt>&lt;property&gt;</tt>,<tt>&lt;typedef&gt;</tt> and <tt>&lt;taskdef&gt;</tt>
-tasks are special in that they can be declared outside any target. When you
-do this they are evaluated before any targets are executed. No other tasks
-can be declared outside targets.
-
-<p>
-We have given some targets descriptions; this causes the <tt>projecthelp</tt>
-invocation option to list them as public targets with the descriptions; the
-other target is internal and not listed.
-<p>
-Finally, for this target to work the source in the <tt>src</tt> subdirectory
-should be stored in a directory tree which matches the package names. Check the
-<tt>&lt;javac&gt;</tt> task for details.
-
-<a name="filters"><h3>Token Filters</h3></a>
-<p>A project can have a set of tokens that might be automatically expanded if
-found when a file is copied, when the filtering-copy behavior is selected in the
-tasks that support this. These might be set in the buildfile
-by the <a href="CoreTasks/filter.html">filter</a> task.</p>
-<p>Since this can potentially be a very harmful behavior,
-the tokens in the files <b>must</b>
-be of the form <code>@</code><i>token</i><code>@</code>, where
-<i>token</i> is the token name that is set
-in the <code>&lt;filter&gt;</code> task. This token syntax matches the syntax of other build systems
-that perform such filtering and remains sufficiently orthogonal to most
-programming and scripting languages, as well as with documentation systems.</p>
-<p>Note: If a token with the format <code>@</code><i>token</i><code>@</code>
-is found in a file, but no
-filter is associated with that token, no changes take place;
-therefore, no escaping
-method is available - but as long as you choose appropriate names for your
-tokens, this should not cause problems.</p>
-<p><b>Warning:</b> If you copy binary files with filtering turned on, you can corrupt the
-files. This feature should be used with text files <em>only</em>.</p>
-
-<h3><a name="path">Path-like Structures</a></h3>
-<p>You can specify <code>PATH</code>- and <code>CLASSPATH</code>-type
-references using both
-&quot;<code>:</code>&quot; and &quot;<code>;</code>&quot; as separator
-characters. Ant will
-convert the separator to the correct character of the current operating
-system.</p>
-<p>Wherever path-like values need to be specified, a nested element can
-be used. This takes the general form of:</p>
-<pre>
-    &lt;classpath&gt;
-      &lt;pathelement path=&quot;${classpath}&quot;/&gt;
-      &lt;pathelement location=&quot;lib/helper.jar&quot;/&gt;
-    &lt;/classpath&gt;
-</pre>
-<p>The <code>location</code> attribute specifies a single file or
-directory relative to the project's base directory (or an absolute
-filename), while the <code>path</code> attribute accepts colon-
-or semicolon-separated lists of locations. The <code>path</code>
-attribute is intended to be used with predefined paths - in any other
-case, multiple elements with <code>location</code> attributes should be
-preferred.</p>
-<p>As a shortcut, the <code>&lt;classpath&gt;</code> tag
-supports <code>path</code> and
-<code>location</code> attributes of its own, so:</p>
-<pre>
-    &lt;classpath&gt;
-      &lt;pathelement path=&quot;${classpath}&quot;/&gt;
-    &lt;/classpath&gt;
-</pre>
-<p>can be abbreviated to:</p>
-<pre>
-    &lt;classpath path=&quot;${classpath}&quot;/&gt;
-</pre>
-<p>In addition, <a href="CoreTypes/dirset.html">DirSet</a>s,
-<a href="CoreTypes/fileset.html">FileSet</a>s, and
-<a href="CoreTypes/filelist.html">FileList</a>s
-can be specified via nested <code>&lt;dirset&gt;</code>,
-<code>&lt;fileset&gt;</code>, and <code>&lt;filelist&gt;</code>
-elements, respectively. <em>Note</em>: The order in which the files
-building up a FileSet are added to the path-like structure is not
-defined.</p>
-<pre>
-    &lt;classpath&gt;
-      &lt;pathelement path=&quot;${classpath}&quot;/&gt;
-      &lt;fileset dir=&quot;lib&quot;&gt;
-        &lt;include name=&quot;**/*.jar&quot;/&gt;
-      &lt;/fileset&gt;
-      &lt;pathelement location=&quot;classes&quot;/&gt;
-      &lt;dirset dir=&quot;${build.dir}&quot;&gt;
-        &lt;include name=&quot;apps/**/classes&quot;/&gt;
-        &lt;exclude name=&quot;apps/**/*Test*&quot;/&gt;
-      &lt;/dirset&gt;
-      &lt;filelist refid=&quot;third-party_jars&quot;&gt;
-    &lt;/classpath&gt;
-</pre>
-<p>This builds a path that holds the value of <code>${classpath}</code>,
-followed by all jar files in the <code>lib</code> directory,
-the <code>classes</code> directory, all directories named
-<code>classes</code> under the <code>apps</code> subdirectory of
-<code>${build.dir}</code>, except those
-that have the text <code>Test</code> in their name, and
-the files specified in the referenced FileList.</p>
-<p>If you want to use the same path-like structure for several tasks,
-you can define them with a <code>&lt;path&gt;</code> element at the
-same level as <i>target</i>s, and reference them via their
-<i>id</i> attribute - see <a href="#references">References</a> for an
-example.</p>
-<p>A path-like structure can include a reference to another path-like
-structure via nested <code>&lt;path&gt;</code> elements:</p>
-<pre>
-    &lt;path id=&quot;base.path&quot;&gt;
-      &lt;pathelement path=&quot;${classpath}&quot;/&gt;
-      &lt;fileset dir=&quot;lib&quot;&gt;
-        &lt;include name=&quot;**/*.jar&quot;/&gt;
-      &lt;/fileset&gt;
-      &lt;pathelement location=&quot;classes&quot;/&gt;
-    &lt;/path&gt;
-
-    &lt;path id=&quot;tests.path&quot;&gt;
-      &lt;path refid=&quot;base.path&quot;/&gt;
-      &lt;pathelement location=&quot;testclasses&quot;/&gt;
-    &lt;/path&gt;
-</pre>
- The shortcuts previously mentioned for <code>&lt;classpath&gt;</code> are also valid for <code>&lt;path&gt;</code>.For example:
-<pre>
-    &lt;path id=&quot;base.path&quot;&gt;
-      &lt;pathelement path=&quot;${classpath}&quot;/&gt;
-    &lt;/path&gt;
-</pre>
-can be written as:
-<pre>
-    &lt;path id=&quot;base.path&quot; path=&quot;${classpath}&quot;/&gt;
-</pre>
-
-<h3><a name="arg">Command-line Arguments</a></h3>
-<p>Several tasks take arguments that will be passed to another
-process on the command line. To make it easier to specify arguments
-that contain space characters, nested <code>arg</code> elements can be used.</p>
-<table border="1" cellpadding="2" cellspacing="0">
-<tr>
-  <td width="12%" valign="top"><b>Attribute</b></td>
-  <td width="78%" valign="top"><b>Description</b></td>
-  <td width="10%" valign="top"><b>Required</b></td>
-</tr>
-  <tr>
-    <td valign="top">value</td>
-    <td valign="top">a single command-line argument; can contain space
-      characters.</td>
-    <td align="center" rowspan="4">Exactly one of these.</td>
-  </tr>
-  <tr>
-    <td valign="top">line</td>
-    <td valign="top">a space-delimited list of command-line arguments.</td>
-  </tr>
-  <tr>
-    <td valign="top">file</td>
-    <td valign="top">The name of a file as a single command-line
-      argument; will be replaced with the absolute filename of the file.</td>
-  </tr>
-  <tr>
-    <td valign="top">path</td>
-    <td valign="top">A string that will be treated as a path-like
-      string as a single command-line argument; you can use <code>;</code>
-      or <code>:</code> as
-      path separators and Ant will convert it to the platform's local
-      conventions.</td>
-  </tr>
-</table>
-<h4>Examples</h4>
-<blockquote><pre>
-  &lt;arg value=&quot;-l -a&quot;/&gt;
-</pre></blockquote>
-<p>is a single command-line argument containing a space character.</p>
-<blockquote><pre>
-  &lt;arg line=&quot;-l -a&quot;/&gt;
-</pre></blockquote>
-<p>represents two separate command-line arguments.</p>
-<blockquote><pre>
-  &lt;arg path=&quot;/dir;/dir2:\dir3&quot;/&gt;
-</pre></blockquote>
-<p>is a single command-line argument with the value
-<code>\dir;\dir2;\dir3</code> on DOS-based systems and
-<code>/dir:/dir2:/dir3</code> on Unix-like systems.</p>
-
-<h3><a name="references">References</a></h3>
-<p>The <code>id</code> attribute of the buildfile's elements can be
-used to refer to them. This can be useful if you are going to replicate
-the same snippet of XML over and over again - using a
-<code>&lt;classpath&gt;</code> structure more than once, for
-example.</p>
-<p>The following example:</p>
-<blockquote><pre>
-&lt;project ... &gt;
-  &lt;target ... &gt;
-    &lt;rmic ...&gt;
-      &lt;classpath&gt;
-        &lt;pathelement location=&quot;lib/&quot;/&gt;
-        &lt;pathelement path=&quot;${java.class.path}/&quot;/&gt;
-        &lt;pathelement path=&quot;${additional.path}&quot;/&gt;
-      &lt;/classpath&gt;
-    &lt;/rmic&gt;
-  &lt;/target&gt;
-
-  &lt;target ... &gt;
-    &lt;javac ...&gt;
-      &lt;classpath&gt;
-        &lt;pathelement location=&quot;lib/&quot;/&gt;
-        &lt;pathelement path=&quot;${java.class.path}/&quot;/&gt;
-        &lt;pathelement path=&quot;${additional.path}&quot;/&gt;
-      &lt;/classpath&gt;
-    &lt;/javac&gt;
-  &lt;/target&gt;
-&lt;/project&gt;
-</pre></blockquote>
-<p>could be rewritten as:</p>
-<blockquote><pre>
-&lt;project ... &gt;
-  &lt;path id=&quot;project.class.path&quot;&gt;
-    &lt;pathelement location=&quot;lib/&quot;/&gt;
-    &lt;pathelement path=&quot;${java.class.path}/&quot;/&gt;
-    &lt;pathelement path=&quot;${additional.path}&quot;/&gt;
-  &lt;/path&gt;
-
-  &lt;target ... &gt;
-    &lt;rmic ...&gt;
-      &lt;classpath refid=&quot;project.class.path&quot;/&gt;
-    &lt;/rmic&gt;
-  &lt;/target&gt;
-
-  &lt;target ... &gt;
-    &lt;javac ...&gt;
-      &lt;classpath refid=&quot;project.class.path&quot;/&gt;
-    &lt;/javac&gt;
-  &lt;/target&gt;
-&lt;/project&gt;
-</pre></blockquote>
-<p>All tasks that use nested elements for <a
-href="CoreTypes/patternset.html">PatternSet</a>s, <a href="CoreTypes/fileset.html">FileSet</a>s or
-<a href="#path">path-like structures</a> accept references to these
-structures as well.</p>
-
-<hr>
-<p align="center">Copyright &copy; 2001-2002 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
-
diff --git a/docs/manual/usinglist.html b/docs/manual/usinglist.html
deleted file mode 100644
index f37d49d..0000000
--- a/docs/manual/usinglist.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Apache Ant User Manual</title>
-<base target="mainFrame">
-</head>
-
-<body>
-
-<h2><a href="toc.html" target="navFrame">Table of Contents</a></h2>
-
-<h3>Using Ant</h3>
-<a href="using.html#buildfile">Writing a Simple Buildfile</a><br>
-&nbsp;&nbsp;<a href="using.html#projects">Projects</a><br>
-&nbsp;&nbsp;<a href="using.html#targets">Targets</a><br>
-&nbsp;&nbsp;<a href="using.html#tasks">Tasks</a><br>
-&nbsp;&nbsp;<a href="using.html#properties">Properties</a><br>
-&nbsp;&nbsp;<a href="using.html#built-in-props">Built-in Properties</a><br>
-&nbsp;&nbsp;<a href="using.html#example">Example Buildfile</a><br>
-&nbsp;&nbsp;<a href="using.html#filters">Token Filters</a><br>
-&nbsp;&nbsp;<a href="using.html#path">Path-like Structures</a><br>
-&nbsp;&nbsp;<a href="using.html#arg">Command-line Arguments</a><br>
-&nbsp;&nbsp;<a href="using.html#references">References</a><br>
-
-</body>
-</html>
-
diff --git a/docs/problems.html b/docs/problems.html
deleted file mode 100644
index 9771af7..0000000
--- a/docs/problems.html
+++ /dev/null
@@ -1,446 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-
-<!-- Content Stylesheet for Site -->
-
-        
-<!-- start the processing -->
-    <html>
-    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
-    <head>
-      <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
-  
-                      <meta name="author" value="Conor MacNeill">
-  <meta name="email" value="">
-        
-      <title>Apache Ant - Having Problems?</title>
-    </head>
-  
-    <body bgcolor="#ffffff" text="#000000" link="#525D76">    
-      <table border="0" width="100%" cellspacing="0">
-        <!-- TOP IMAGE -->
-        <tr>
-                <td align="left">
-    <a href="http://jakarta.apache.org"><img src="images/jakarta-logo.gif" border="0"/></a>
-    </td>
-    <td align="center">
-    <a href="http://www.sdmagazine.com"><img src="images/sdm_productivity_award.gif" border="0" height="75" width="135"/></a>
-    </td>
-    <td align="center">
-    <a href="http://www.javaworld.com"><img src="images/jw_ec_logo_winner2002.gif" border="0" height="85" width="230"/></a>
-    </td>
-    <td align="right">
-              <a href="http://jakarta.apache.org/ant/"><img src="./images/ant_logo_large.gif" alt="Apache Ant" border="0"/></a>
-        </td>
-          </tr>
-      </table>
-      <table border="0" width="100%" cellspacing="4">
-        <tr><td colspan="2">
-          <hr noshade="" size="1"/>
-        </td></tr>
-        
-        <tr>
-          <!-- LEFT SIDE NAVIGATION -->
-          <td valign="top" nowrap="true">
-                <p><strong>Apache Ant</strong></p>
-    <ul>
-          <li>      <a href="./index.html">Front Page</a>
-  </li>
-          <li>      <a href="./antnews.html">News</a>
-  </li>
-          <li>      <a href="./manual/index.html">Documentation</a>
-  </li>
-          <li>      <a href="./projects.html">Related Projects</a>
-  </li>
-          <li>      <a href="./external.html">External Tools and Tasks</a>
-  </li>
-          <li>      <a href="./resources.html">Resources</a>
-  </li>
-          <li>      <a href="./faq.html">Ant FAQ</a>
-  </li>
-          <li>      <a href="./problems.html">Having Problems?</a>
-  </li>
-        </ul>
-      <p><strong>Download</strong></p>
-    <ul>
-          <li>      <a href="http://jakarta.apache.org/site/binindex.html">Binaries</a>
-  </li>
-          <li>      <a href="http://jakarta.apache.org/site/sourceindex.html">Source Code</a>
-  </li>
-        </ul>
-      <p><strong>Jakarta</strong></p>
-    <ul>
-          <li>      <a href="http://jakarta.apache.org/site/news.html">News & Status</a>
-  </li>
-          <li>      <a href="http://jakarta.apache.org/site/mission.html">Mission</a>
-  </li>
-          <li>      <a href="http://jakarta.apache.org/site/guidelines.html">Guidelines Notes</a>
-  </li>
-          <li>      <a href="http://jakarta.apache.org/site/faqs.html">FAQs</a>
-  </li>
-        </ul>
-      <p><strong>Get Involved</strong></p>
-    <ul>
-          <li>      <a href="http://jakarta.apache.org/site/getinvolved.html">Overview</a>
-  </li>
-          <li>      <a href="http://jakarta.apache.org/site/cvsindex.html">CVS Repositories</a>
-  </li>
-          <li>      <a href="http://jakarta.apache.org/site/mail.html">Mailing Lists</a>
-  </li>
-          <li>      <a href="http://jakarta.apache.org/site/library.html">Reference Library</a>
-  </li>
-          <li>      <a href="http://nagoya.apache.org/bugzilla/enter_bug.cgi?product=Ant">Bug Database</a>
-  </li>
-          <li>      <a href="http://nagoya.apache.org/bugzilla/enter_bug.cgi?product=Ant&bug_severity=Enhancement">Enhancement Requests</a>
-  </li>
-        </ul>
-            </td>
-          <td align="left" valign="top">
-        <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#525D76">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Having Problems?"><strong>Having Problems?</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>
-           This page details some steps you can take to try and resolve
-           any problems you may be having with Ant. If you find you can't
-           resolve the problem, then this page will help you collect some of
-           the relevant information to provide in a bug report. This information
-           will help the Ant developers understand and resolve the problem.
-           Of course, not all the steps here will make sense for every problem
-           you may encounter - these are just some suggestions to point
-           you in the right direction.
-        </p>
-                                  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Read the Manual"><strong>Read the Manual</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>
-            The first step to take when you have a problem with Ant is to read
-            the <a href="manual/index.html">manual</a> entry for the task or
-            concept that is giving you trouble. In particular, check the
-            meaning of a task's attributes and nested elements. Perhaps an
-            attribute is available that would provide the behavior you require.
-            If you have problems with the manual itself, you can submit a
-            documentation bug report (see below) to help us improve the Ant
-            documentation.
-         </p>
-                    </blockquote>
-    </td></tr>
-  </table>
-                                  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Examine Debug Output"><strong>Examine Debug Output</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>
-            If you're still having a problem, the next step is to try and
-            gather additional information about what Ant is doing.
-            Try running Ant with the <code>verbose</code> flag:
-            <br /><br />
-            <font face="verdana" size="-1">ant -verbose</font>
-            <br /><br />
-            or
-            <br /><br />
-            <font face="verdana" size="-1">ant -v</font>
-            <br /><br />
-           
-            This will produce output that starts like the following:</p>
-                                  <table>
-              <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          
-Ant version 1.4.1 compiled on October 11 2001<br />
-Buildfile: build.xml<br />
-Detected Java version: 1.3 in: D:\usr\local\java\jdk13\jre<br />
-Detected OS: Windows NT<br />
-parsing buildfile D:\ant\build.xml
-with URI = file:D:/ant/build.xml<br />
-Project base dir set to: D:\ant<br />
-  [property] Loading Environment env.<br />
-  [property] Loading D:\ant\conf.properties<br />
-Build sequence for target 'debug' is [debug]<br />
-Complete build sequence is [debug, gensrc, compile, jar, test]<br />
-. . .<br />
-
-        </font>
-  </td>
-      </tr>
-        </table>
-                                <p>
-              You should be able to see from the trace more about what Ant
-              is doing and why it's taking a particular course of action.
-              If you need even more information, you can use the
-              <nobr><code>-debug</code></nobr> flag rather than
-              <nobr><code>-verbose</code></nobr>.
-              This will generally produce so much
-              output that you may want to save the output to a file and
-              analyze it in an editor. You can save the output using the
-              <nobr><code>-logfile &lt;filename&gt;</code></nobr> flag, or
-              using redirection.
-           </p>
-                                <p>
-              Once you have all this debug information, how can you use it
-              to solve your problem?  That will depend on the task in question
-              and the nature of your problem. Each task logs different aspects
-              of its operation, but it should give you an idea of what is going
-              on. For example, the <code>&lt;javac&gt;</code> task logs the
-              reasons why it
-              chooses to compile particular class files and not others, along
-              with which compiler it is using and the arguments it will pass
-              to that compiler. The following partial trace shows why
-              <code>&lt;javac&gt;</code> is adding one class file but
-              skipping another.
-              This is followed by which compiler it will be using, the
-              arguments that will get passed to the compiler,
-              and a list of all the class files to be compiled. 
-           </p>
-                                  <table>
-              <tr>
-                  <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          
-[javac] Test.java omitted as D:\classes\Test.class is up to date.<br />
-[javac] Unset.java added as D:\classes\Unset.class is outdated.<br />
-[javac] Compiling 1 source file to D:\classes<br />
-[javac] Using classic compiler<br />
-[javac] Compilation args: -d D:\classes -classpath D:\classes;<br />
-D:\jdk118\classes.zip; -sourcepath D:\src\java -g:none<br />
-[javac] File to be compiled:<br />
-D:\src\java\Unset.java<br />
-
-        </font>
-  </td>
-      </tr>
-        </table>
-                                <p>
-              In many cases, Ant tasks are wrappers around OS commands or
-              other Java classes. In debug mode, many of these tasks will
-              print out the equivalent command line, as the
-              <code>&lt;javac&gt;</code> task
-              output does. If you are having a problem, it is often useful to
-              run the command directly from the command line, in the same way
-              Ant is running it, and see if the problem occurs from there
-              as well. The problem may be in the command that is being run,
-              or it may be in the way the Ant task is running the command.
-              You can also see the effect of changing attribute values on the
-              generated command line. This can help you to understand whether
-              you are using the correct attributes and values.
-            </p>
-                    </blockquote>
-    </td></tr>
-  </table>
-                                  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Has It Been Fixed?"><strong>Has It Been Fixed?</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>
-            After examining the debug output, if you still believe that the
-            problem you are having is caused by Ant, chances are that someone
-            else may have already encountered this problem, and perhaps it has
-            been fixed. The next step, therefore, may be to try a nightly build
-            of Ant to see if the problem has been fixed. Nightly builds for Ant
-            are available from the 
-            <a href="http://www.apache.org/dist/jakarta/jakarta-ant/nightly/">
-            Jakarta web site</a>. While Ant nightly builds are typically quite
-            stable and are used by
-            <a href="http://www.apache.org/dist/jakarta/gump/latest/">Gump</a>
-            to build many other Jakarta projects, these builds should
-            nonetheless be treated as experimental. Note that nightly builds
-            do not build many of the optional tasks the come with Ant.
-            A snapshot of these optional tasks is occasionally uploaded to
-            the nightly download
-            <a href="http://www.apache.org/dist/jakarta/jakarta-ant/nightly/optional/">
-            area</a>. However, even this snapshot does not contain every
-            optional task.
-        </p>
-                    </blockquote>
-    </td></tr>
-  </table>
-                                  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Has It Been Reported?"><strong>Has It Been Reported?</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>
-            If the current nightly build doesn't resolve your problem, it is
-            possible that someone else has reported the issue. It is time to
-            look at the <a href="http://nagoya.apache.org/bugzilla/">
-            Apache Bug Database</a>.  This system is easy to use, and it will
-            let you search the <a href="http://nagoya.apache.org/bugzilla/buglist.cgi?bug_status=UNCONFIRMED&amp;bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED&amp;email1=&amp;emailtype1=substring&amp;emailassigned_to1=1&amp;email2=&amp;emailtype2=substring&amp;emailreporter2=1&amp;bugidtype=include&amp;bug_id=&amp;changedin=&amp;votes=&amp;chfieldfrom=&amp;chfieldto=Now&amp;chfieldvalue=&amp;product=Ant&amp;short_desc=&amp;short_desc_type=substring&amp;long_desc=&amp;long_desc_type=substring&amp;bug_file_loc=&amp;bug_file_loc_type=substring&amp;keywords=&amp;keywords_type=anywords&amp;field0-0-0=noop&amp;type0-0-0=noop&amp;value0-0-0=&amp;order=bugs.bug_id">
-            currently open</a> and resolved bugs to see if your problem has
-            already been reported. If your problem has been reported, you can
-            see whether any of the developers have commented, suggesting
-            workarounds, or the reason for the bug, etc. Or you may have
-            information to add (see about creating and modifying bug reports
-            below), in which case, go right ahead and add the information.
-            If you don't have any additional information, you may just want
-            to vote for this bug, and perhaps
-            add yourself to the <code>CC</code> list to follow the progress
-            of this bug.
-         </p>
-                    </blockquote>
-    </td></tr>
-  </table>
-                                  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Filing a Bug Report"><strong>Filing a Bug Report</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>
-            By this time, you may have decided that there is an unreported
-            bug in Ant. You have a few choices at this point. You can send
-            an email to the <nobr><code>ant-user</code></nobr> mailing list
-            to see if
-            others have encountered your issue and find out how they may
-            have worked around it. If after some discussion, you feel it
-            is time to create
-            a bug report, this is a simple operation in the bug database.
-            Please try to provide as much information as possible in order
-            to assist the developers in resolving the bug. Please try to enter
-            correct values for the various inputs when creating the bug, such
-            as which version of Ant you are running, and on which platform,
-            etc. Once the bug is created, you can also add attachments to
-            the bug report. 
-         </p>
-                                <p> 
-            What information should you include in your bug report? The
-            easiest bugs to fix are those that are most easily reproducible,
-            so it is really helpful if you can produce a small test case that
-            exhibits the problem. In this case, you would attach the build file
-            and any other files necessary to reproduce the problem, probably
-            packed together in an archive. If you can't produce a test case,
-            you should try to include a snippet from your build file and the
-            relevant sections from the verbose or debug output from Ant. Try
-            to include the header information where Ant states the version,
-            the OS and VM information, etc. As debug output is likely to be
-            very large, it's best to remove any output that is not
-            relevant. Once the bug is entered into the bug database, you
-            will be kept informed by email about progress on the bug. If
-            you receive email asking for further information, please try to
-            respond, as it will aid in the resolution of your bug.
-         </p>
-                    </blockquote>
-    </td></tr>
-  </table>
-                                  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Asking for an Enhancement"><strong>Asking for an Enhancement</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>
-            Sometimes, you may find that Ant just doesn't do what you need it
-            to. It isn't a bug, as such, since Ant is working the way it is
-            supposed to work. Perhaps it is some additional functionality for
-            a task that hasn't been thought of yet, or maybe a completely new
-            task. For these situations, you will
-            want to raise an <i>enhancement request</i>. Enhancement requests
-            are managed using the same Apache Bug Database described above.
-            These are just a different type of bug report. If you look in the
-            bug database, you will see that one of the severity settings for
-            a bug is "Enhancement". Just fill the bug report in,
-            set the severity of the bug to "Enhancement", and 
-            state in the description how you would like to have Ant enhanced.
-            Again, you should first check whether there are any existing
-            enhancment requests that cover your needs. If so, just add your
-            vote to these.
-         </p>
-                    </blockquote>
-    </td></tr>
-  </table>
-                                  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Fixing the Bug"><strong>Fixing the Bug</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>
-            If you aren't satisfied with just filing a bug report, you can
-            try to find the cause of the problem and provide a fix yourself.
-            The best way to do that is by working with the latest code from CVS.
-            Alternatively, you can work with the source code available from the
-            <a href="http://jakarta.apache.org/builds/jakarta-ant/release/v1.4.1/src/">
-            source distributions</a>. If you
-            are going to tackle the problem at this level, you may want to
-            discuss some details first on the <nobr><code>ant-dev</code></nobr>
-            mailing list. Once you have a fix for the problem, you may submit
-            the fix as a <i>patch</i> to either the
-            <nobr><code>ant-dev</code></nobr> mailing
-            list, or enter the bug database as described above and attach the
-            patch to the bug report. Using the bug database has the advantage
-            of being able to track the progress of your patch.
-         </p>
-                                <p>
-            If you have a patch to submit and are sending it to the
-            <nobr><code>ant-dev</code></nobr> mailing list,
-            prefix "[PATCH]"
-            to your message subject. Please include any relevant bug numbers.
-            Patch files should be created with the <nobr><code>-u</code></nobr>
-            option of the
-            <code>diff</code> or <code>cvs diff</code> command. For
-            example:<br /><br />
-            <font face="verdana" size="-1">
-            diff -u Javac.java.orig Javac.java &gt; javac.diffs<br /><br />
-            </font>
-            or, if you have source from CVS:<br /><br />
-            <font face="verdana" size="-1">
-            cvs diff -u Javac.java &gt; javac.diffs<br /><br />
-            </font>
-           
-           Note: You should give your patch files meaningful names. 
-           This makes it easier for developers who need to apply a number
-           of different patch files.
-        </p>
-                    </blockquote>
-    </td></tr>
-  </table>
-                    </blockquote>
-    </td></tr>
-  </table>
-              </td>
-        </tr>
-
-        <!-- FOOTER -->
-        <tr><td colspan="2">
-          <hr noshade="" size="1"/>
-        </td></tr>
-        <tr><td colspan="2">
-          <div align="center"><font color="#525D76" size="-1"><em>
-          Copyright &#169; 2000-2002, Apache Software Foundation
-          </em></font></div>
-        </td></tr>
-      </table>
-    </body>
-  </html>
-<!-- end the processing -->
-
-
-
-
diff --git a/docs/projects.html b/docs/projects.html
deleted file mode 100644
index 1d1ad7b..0000000
--- a/docs/projects.html
+++ /dev/null
@@ -1,654 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-
-<!-- Content Stylesheet for Site -->
-
-        
-<!-- start the processing -->
-    <html>
-    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
-    <head>
-      <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
-  
-                      <meta name="author" value="Stefan Bodewig">
-  <meta name="email" value="bodewig@apache.org">
-        
-      <title>Apache Ant - Related Projects</title>
-    </head>
-  
-    <body bgcolor="#ffffff" text="#000000" link="#525D76">    
-      <table border="0" width="100%" cellspacing="0">
-        <!-- TOP IMAGE -->
-        <tr>
-                <td align="left">
-    <a href="http://jakarta.apache.org"><img src="images/jakarta-logo.gif" border="0"/></a>
-    </td>
-    <td align="center">
-    <a href="http://www.sdmagazine.com"><img src="images/sdm_productivity_award.gif" border="0" height="75" width="135"/></a>
-    </td>
-    <td align="center">
-    <a href="http://www.javaworld.com"><img src="images/jw_ec_logo_winner2002.gif" border="0" height="85" width="230"/></a>
-    </td>
-    <td align="right">
-              <a href="http://jakarta.apache.org/ant/"><img src="./images/ant_logo_large.gif" alt="Apache Ant" border="0"/></a>
-        </td>
-          </tr>
-      </table>
-      <table border="0" width="100%" cellspacing="4">
-        <tr><td colspan="2">
-          <hr noshade="" size="1"/>
-        </td></tr>
-        
-        <tr>
-          <!-- LEFT SIDE NAVIGATION -->
-          <td valign="top" nowrap="true">
-                <p><strong>Apache Ant</strong></p>
-    <ul>
-          <li>      <a href="./index.html">Front Page</a>
-  </li>
-          <li>      <a href="./antnews.html">News</a>
-  </li>
-          <li>      <a href="./manual/index.html">Documentation</a>
-  </li>
-          <li>      <a href="./projects.html">Related Projects</a>
-  </li>
-          <li>      <a href="./external.html">External Tools and Tasks</a>
-  </li>
-          <li>      <a href="./resources.html">Resources</a>
-  </li>
-          <li>      <a href="./faq.html">Ant FAQ</a>
-  </li>
-          <li>      <a href="./problems.html">Having Problems?</a>
-  </li>
-        </ul>
-      <p><strong>Download</strong></p>
-    <ul>
-          <li>      <a href="http://jakarta.apache.org/site/binindex.html">Binaries</a>
-  </li>
-          <li>      <a href="http://jakarta.apache.org/site/sourceindex.html">Source Code</a>
-  </li>
-        </ul>
-      <p><strong>Jakarta</strong></p>
-    <ul>
-          <li>      <a href="http://jakarta.apache.org/site/news.html">News & Status</a>
-  </li>
-          <li>      <a href="http://jakarta.apache.org/site/mission.html">Mission</a>
-  </li>
-          <li>      <a href="http://jakarta.apache.org/site/guidelines.html">Guidelines Notes</a>
-  </li>
-          <li>      <a href="http://jakarta.apache.org/site/faqs.html">FAQs</a>
-  </li>
-        </ul>
-      <p><strong>Get Involved</strong></p>
-    <ul>
-          <li>      <a href="http://jakarta.apache.org/site/getinvolved.html">Overview</a>
-  </li>
-          <li>      <a href="http://jakarta.apache.org/site/cvsindex.html">CVS Repositories</a>
-  </li>
-          <li>      <a href="http://jakarta.apache.org/site/mail.html">Mailing Lists</a>
-  </li>
-          <li>      <a href="http://jakarta.apache.org/site/library.html">Reference Library</a>
-  </li>
-          <li>      <a href="http://nagoya.apache.org/bugzilla/enter_bug.cgi?product=Ant">Bug Database</a>
-  </li>
-          <li>      <a href="http://nagoya.apache.org/bugzilla/enter_bug.cgi?product=Ant&bug_severity=Enhancement">Enhancement Requests</a>
-  </li>
-        </ul>
-            </td>
-          <td align="left" valign="top">
-        <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#525D76">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Related Projects"><strong>Related Projects</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>Nothing listed here is directly supported by the Ant
-      developers, if you encounter any problems with them, please use
-      the contact information.</p>
-                                  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="AntContrib"><strong>AntContrib</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>The Ant-Contrib project is a collection of user supplied
-        task (like an <code>&lt;if&gt;</code> task) and a development
-        playground for experimental tasks like a C/C++ compilation
-        task for different compilers.</p>
-                                  <table>
-              <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Compatibility:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          1.4.1 and above
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          URL:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="http://sourceforge.net/projects/ant-contrib/">http://sourcefoge.net/projects/ant-contrib/</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Contact:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="http://sourceforge.net/mail/?group_id=36177">project mailing list</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          License:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Apache Software Foundation license
-        </font>
-  </td>
-      </tr>
-        </table>
-                    </blockquote>
-    </td></tr>
-  </table>
-                                  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="AntHill"><strong>AntHill</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>Anthill is a build tool that promotes a controlled build
-        process by ensuring that every build reflects the source
-        repository contents and tagging the repository with a unique
-        build number after every build. Anthill also encourages the
-        sharing of knowledge within an organization by automatically
-        updating a project intranet site with artifacts from the
-        latest build.</p>
-                                  <table>
-              <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Compatibility:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          bundles Ant 1.3, is compatible with Ant 1.3 to 1.4.1
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          URL:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="http://www.urbancode.com/projects/anthill/">http://www.urbancode.com/projects/anthill/</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Contact:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="mailto:mbz@urbancode.com">Maciej Zawadzki</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          License:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Mozilla-like license
-        </font>
-  </td>
-      </tr>
-        </table>
-                    </blockquote>
-    </td></tr>
-  </table>
-                                  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="CruiseControl"><strong>CruiseControl</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>CruiseControl is a tool for setting up a continuous build
-        process.  CruiseControl provides an Ant wrapper and a set of
-        tasks to automate the checkout/build/test cycle. CruiseControl
-        also comes bundled with a servlet for viewing the status of
-        the current build, as well as previous build results.</p>
-                                  <table>
-              <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Compatibility:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Ant 1.2 and higher
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          URL:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="http://cruisecontrol.sourceforge.net/">http://cruisecontrol.sourceforge.net/</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Contact:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="http://cruisecontrol.sourceforge.net/contact.html">Project Mailing Lists and Administrators</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          License:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Release 1.0 has been licensed under the GNU General Public
-            License.  Starting with release 1.1 the license has been
-            changed to a BSD-like license.
-        </font>
-  </td>
-      </tr>
-        </table>
-                    </blockquote>
-    </td></tr>
-  </table>
-                                  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Krysalis Centipede"><strong>Krysalis Centipede</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>Krysalis Centipede is a template for a software module;
-        gives you build with Ant and Site+Documentation with Apache
-        Cocoon.</p>
-                                <p>Centipede is a starter project, empty in many respects, but
-        has a decent and standardized Ant build file, and some xdocs
-        that render to HTML using Cocoon. A developer would take
-        Centipede and use it to start development. After starting, the
-        build file would evolve as the developer see fit and move away
-        from the Centipede starting point.  Subsequent releases of
-        Centipede will address the issues found using it, and evolve
-        on user requests-issues.</p>
-                                  <table>
-              <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Compatibility:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          1.4.1
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          URL:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="http://krysalis.org/centipede/">http://krysalis.org/centipede/</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Contact:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="http://sourceforge.net/mail/?group_id=36516">mailing lists</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          License:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          The Krysalis Patchy Software License, based on and
-            fully compatible with the Apache Software Foundation
-            license
-        </font>
-  </td>
-      </tr>
-        </table>
-                    </blockquote>
-    </td></tr>
-  </table>
-                                  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="NAnt"><strong>NAnt</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>NAnt is a .NET based build tool. In theory it is kind of
-        like make without make's wrinkles. In practice it's a lot like
-        Ant.</p>
-                                  <table>
-              <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Compatibility:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          compatible in spirit.
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          URL:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="http://nant.sourceforge.net/">http://nant.sourceforge.net/</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Contact:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="http://sourceforge.net/mail/?group_id=31650">project mailing list</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          License:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          GNU General Public License
-        </font>
-  </td>
-      </tr>
-        </table>
-                    </blockquote>
-    </td></tr>
-  </table>
-                                  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Rant"><strong>Rant</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>Rant stands for Remote Ant. It is a distributed build
-        system that allows an Ant build file to launch builds on other
-        systems and receive exceptions should they occur.</p>
-                                  <table>
-              <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Compatibility:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Ant 1.4
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          URL:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="http://sourceforge.net/projects/remoteant/">http://sourceforge.net/projects/remoteant/</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Contact:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="mailto:cnelson@einnovation.com">Chris Nelson</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          License:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          MIT License
-        </font>
-  </td>
-      </tr>
-        </table>
-                    </blockquote>
-    </td></tr>
-  </table>
-                                  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="XML Publication"><strong>XML Publication</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>XML Publication is a set of tools to generate Web pages
-        from desktop documents or other structured documents using
-        XSLT and Ant.</p>
-                                  <table>
-              <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Compatibility:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Ant 1.4
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          URL:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="http://XMLpublication.org/">http://XMLpublication.org/</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Contact:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="mailto:jmvanel@free.fr">Jean-Marc Vanel</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          License:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          GNU General Public License.
-        </font>
-  </td>
-      </tr>
-        </table>
-                    </blockquote>
-    </td></tr>
-  </table>
-                    </blockquote>
-    </td></tr>
-  </table>
-              </td>
-        </tr>
-
-        <!-- FOOTER -->
-        <tr><td colspan="2">
-          <hr noshade="" size="1"/>
-        </td></tr>
-        <tr><td colspan="2">
-          <div align="center"><font color="#525D76" size="-1"><em>
-          Copyright &#169; 2000-2002, Apache Software Foundation
-          </em></font></div>
-        </td></tr>
-      </table>
-    </body>
-  </html>
-<!-- end the processing -->
-
-
-
-
diff --git a/docs/resources.html b/docs/resources.html
deleted file mode 100644
index afac27b..0000000
--- a/docs/resources.html
+++ /dev/null
@@ -1,1164 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-
-<!-- Content Stylesheet for Site -->
-
-        
-<!-- start the processing -->
-    <html>
-    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
-    <head>
-      <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
-  
-                      <meta name="author" value="Stefan Bodewig">
-  <meta name="email" value="bodewig@apache.org">
-        
-      <title>Apache Ant - Resources</title>
-    </head>
-  
-    <body bgcolor="#ffffff" text="#000000" link="#525D76">    
-      <table border="0" width="100%" cellspacing="0">
-        <!-- TOP IMAGE -->
-        <tr>
-                <td align="left">
-    <a href="http://jakarta.apache.org"><img src="images/jakarta-logo.gif" border="0"/></a>
-    </td>
-    <td align="center">
-    <a href="http://www.sdmagazine.com"><img src="images/sdm_productivity_award.gif" border="0" height="75" width="135"/></a>
-    </td>
-    <td align="center">
-    <a href="http://www.javaworld.com"><img src="images/jw_ec_logo_winner2002.gif" border="0" height="85" width="230"/></a>
-    </td>
-    <td align="right">
-              <a href="http://jakarta.apache.org/ant/"><img src="./images/ant_logo_large.gif" alt="Apache Ant" border="0"/></a>
-        </td>
-          </tr>
-      </table>
-      <table border="0" width="100%" cellspacing="4">
-        <tr><td colspan="2">
-          <hr noshade="" size="1"/>
-        </td></tr>
-        
-        <tr>
-          <!-- LEFT SIDE NAVIGATION -->
-          <td valign="top" nowrap="true">
-                <p><strong>Apache Ant</strong></p>
-    <ul>
-          <li>      <a href="./index.html">Front Page</a>
-  </li>
-          <li>      <a href="./antnews.html">News</a>
-  </li>
-          <li>      <a href="./manual/index.html">Documentation</a>
-  </li>
-          <li>      <a href="./projects.html">Related Projects</a>
-  </li>
-          <li>      <a href="./external.html">External Tools and Tasks</a>
-  </li>
-          <li>      <a href="./resources.html">Resources</a>
-  </li>
-          <li>      <a href="./faq.html">Ant FAQ</a>
-  </li>
-          <li>      <a href="./problems.html">Having Problems?</a>
-  </li>
-        </ul>
-      <p><strong>Download</strong></p>
-    <ul>
-          <li>      <a href="http://jakarta.apache.org/site/binindex.html">Binaries</a>
-  </li>
-          <li>      <a href="http://jakarta.apache.org/site/sourceindex.html">Source Code</a>
-  </li>
-        </ul>
-      <p><strong>Jakarta</strong></p>
-    <ul>
-          <li>      <a href="http://jakarta.apache.org/site/news.html">News & Status</a>
-  </li>
-          <li>      <a href="http://jakarta.apache.org/site/mission.html">Mission</a>
-  </li>
-          <li>      <a href="http://jakarta.apache.org/site/guidelines.html">Guidelines Notes</a>
-  </li>
-          <li>      <a href="http://jakarta.apache.org/site/faqs.html">FAQs</a>
-  </li>
-        </ul>
-      <p><strong>Get Involved</strong></p>
-    <ul>
-          <li>      <a href="http://jakarta.apache.org/site/getinvolved.html">Overview</a>
-  </li>
-          <li>      <a href="http://jakarta.apache.org/site/cvsindex.html">CVS Repositories</a>
-  </li>
-          <li>      <a href="http://jakarta.apache.org/site/mail.html">Mailing Lists</a>
-  </li>
-          <li>      <a href="http://jakarta.apache.org/site/library.html">Reference Library</a>
-  </li>
-          <li>      <a href="http://nagoya.apache.org/bugzilla/enter_bug.cgi?product=Ant">Bug Database</a>
-  </li>
-          <li>      <a href="http://nagoya.apache.org/bugzilla/enter_bug.cgi?product=Ant&bug_severity=Enhancement">Enhancement Requests</a>
-  </li>
-        </ul>
-            </td>
-          <td align="left" valign="top">
-        <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#525D76">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="FAQs"><strong>FAQs</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                          <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="At Ant's website"><strong>At Ant's website</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>Starting with the release of Ant 1.4 the Ant's FAQ is
-        bundled with the distribution, the most recent version can
-        always be found at the website.</p>
-                                  <table>
-              <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          FAQ:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="faq.html">http://jakarta.apache.org/ant/faq.html</a>
-        </font>
-  </td>
-      </tr>
-        </table>
-                    </blockquote>
-    </td></tr>
-  </table>
-                                  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="jGuru"><strong>jGuru</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>jGuru hosts an interactive Ant discussion forum and FAQ system</p>
-                                  <table>
-              <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Forum:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="http://www.jguru.com/forums/home.jsp?topic=Ant">http://www.jguru.com/forums/home.jsp?topic=Ant</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          FAQ:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="http://www.jguru.com/faq/home.jsp?topic=Ant">http://www.jguru.com/faq/home.jsp?topic=Ant</a>
-        </font>
-  </td>
-      </tr>
-        </table>
-                    </blockquote>
-    </td></tr>
-  </table>
-                    </blockquote>
-    </td></tr>
-  </table>
-        <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#525D76">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Books"><strong>Books</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                          <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Java Tools for eXtreme Programming"><strong>Java Tools for eXtreme Programming</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>This book covers the following XP subjects:
-            <ul>
-                <li>Automated unit and functional testing</li>
-                <li>Continuous integration through build and deployment automation</li>
-                <li>The value of refactoring and continuous integration</li>
-                <li>How Ant, JUnit, JUnitPerf, Cactus, HTTPUnit, and JMeter
-                can be used to achieve the goals of the XP methodology</li>
-            </ul>
-        </p>
-                                  <table>
-              <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Authors:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Richard Hightower and Nicholas Lesiecki
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          URL:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="http://www.wiley.com/cda/product/0,,047120708X,00.html">http://www.wiley.com/cda/product/0,,047120708X,00.html</a>
-        </font>
-  </td>
-      </tr>
-        </table>
-                    </blockquote>
-    </td></tr>
-  </table>
-                    </blockquote>
-    </td></tr>
-  </table>
-        <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#525D76">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Articles and Presentations"><strong>Articles and Presentations</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>The following sections list articles and presentations written about Apache Ant.  If
-      you've written something that should be included, please post it to one
-      of the mailing lists.</p>
-                    </blockquote>
-    </td></tr>
-  </table>
-        <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#525D76">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Articles"><strong>Articles</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                          <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Ant in Anger: Using Ant in a Production Development       System"><strong>Ant in Anger: Using Ant in a Production Development       System</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>This document describes strategies and some basic examples of how to 
-        use Ant in larger team development projects.</p>
-                                  <table>
-              <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Author:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="mailto:steve_l@iseran.com">Steve Loughran</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          URL:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="ant_in_anger.html">http://jakarta.apache.org/ant/ant_in_anger.html</a>
-        </font>
-  </td>
-      </tr>
-        </table>
-                    </blockquote>
-    </td></tr>
-  </table>
-                                  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Ant Task Guidelines"><strong>Ant Task Guidelines</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>This document describes how to write custom Ant tasks, and how to submit
-        them to potentially be included in Ant.</p>
-                                  <table>
-              <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Author:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="mailto:steve_l@iseran.com">Steve Loughran</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          URL:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="ant_task_guidelines.html">http://jakarta.apache.org/ant/ant_task_guidelines.html</a>
-        </font>
-  </td>
-      </tr>
-        </table>
-                    </blockquote>
-    </td></tr>
-  </table>
-                                  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Automating the build and test process"><strong>Automating the build and test process</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>This article demonstrates an approach to the automated build and test process. Working with Ant 1.3 and the JUnit test framework, it shows how to automate a process that captures pertinent information about each test suite run, generates an attractive report, and e-mails the report.</p>
-                                  <table>
-              <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Author:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="mailto:ehatcher@apache.org">Erik Hatcher</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          URL:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="http://www.ibm.com/developerworks/java/library/j-junitmail/">http://www.ibm.com/developerworks/java/library/j-junitmail/</a>
-        </font>
-  </td>
-      </tr>
-        </table>
-                    </blockquote>
-    </td></tr>
-  </table>
-                                  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Incremental development with Ant and JUnit"><strong>Incremental development with Ant and JUnit</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>This article explores the benefits of unit testing with Ant and
-        JUnit, detailing how to develop automated unit tests and integrate them
-        into your build process.</p>
-                                  <table>
-              <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Author:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="mailto:malcolm@nuearth.com">Malcolm Davis</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          URL:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="http://www-106.ibm.com/developerworks/library/j-ant/?dwzone=java">http://www-106.ibm.com/developerworks/library/j-ant/?dwzone=java</a>
-        </font>
-  </td>
-      </tr>
-        </table>
-                    </blockquote>
-    </td></tr>
-  </table>
-                                  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Automate your build process using Java and Ant"><strong>Automate your build process using Java and Ant</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>This article provides an introduction to using Ant with some basic
-        examples and by highlighting some of the important tasks.</p>
-                                  <table>
-              <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Author:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="mailto:michael.cymerman@javaworld.com">Michael Cymerman</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          URL:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="http://www.javaworld.com/javaworld/jw-10-2000/jw-1020-ant.html">http://www.javaworld.com/javaworld/jw-10-2000/jw-1020-ant.html</a>
-        </font>
-  </td>
-      </tr>
-        </table>
-                    </blockquote>
-    </td></tr>
-  </table>
-                                  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Short tutorial in Cactus' (formerly J2EEUnit)       documentation"><strong>Short tutorial in Cactus' (formerly J2EEUnit)       documentation</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>There is a short tutorial on how to use Ant in Cactus'
-        documentation.  It has a slant towards build files that will be used
-        with Cactus.</p>
-                                  <table>
-              <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Author:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Cactus development team
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          URL:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="http://jakarta.apache.org/cactus/howto_ant_primer.html">http://jakarta.apache.org/cactus/howto_ant_primer.html</a>
-        </font>
-  </td>
-      </tr>
-        </table>
-                    </blockquote>
-    </td></tr>
-  </table>
-                                  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Developing custom Ant tasks with VisualAge for Java"><strong>Developing custom Ant tasks with VisualAge for Java</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>This article outlines how to integrate Ant into VisualAge for Java,
-        and how to write and debug custom tasks using the IDE and the
-        integrated debugger.</p>
-                                  <table>
-              <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Author:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="mailto:glenn@somanetworks.com">Glenn McAllister</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          URL:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="http://www7.software.ibm.com/vad.nsf/data/document2366?OpenDocument&amp;p=1&amp;BCT=1&amp;Footer=1">http://www7.software.ibm.com/vad.nsf/data/document2366?OpenDocument&amp;p=1&amp;BCT=1&amp;Footer=1</a>
-        </font>
-  </td>
-      </tr>
-        </table>
-                    </blockquote>
-    </td></tr>
-  </table>
-                                  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Automated builds with VisualAge for Java and Ant"><strong>Automated builds with VisualAge for Java and Ant</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>This article shows how you can perform command line builds with a
-        VisualAge for Java repository.</p>
-                                  <table>
-              <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Author:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="mailto:glenn@somanetworks.com">Glenn McAllister</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          URL:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="http://www7.software.ibm.com/vad.nsf/Data/Document4366?OpenDocument&amp;p=1&amp;BCT=3&amp;Footer=1">http://www7.software.ibm.com/vad.nsf/Data/Document4366?OpenDocument&amp;p=1&amp;BCT=3&amp;Footer=1</a>
-        </font>
-  </td>
-      </tr>
-        </table>
-                    </blockquote>
-    </td></tr>
-  </table>
-                                  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Ant: A Build Tool from the Jakarta Project"><strong>Ant: A Build Tool from the Jakarta Project</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>This article is from the "Best Practices" section of
-        Sun's Dot-Com Builder Site.</p>
-                                  <table>
-              <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Author:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Laura Geele Wang
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          URL:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="http://dcb.sun.com/practices/profiles/ant.jsp">http://dcb.sun.com/practices/profiles/ant.jsp</a>
-        </font>
-  </td>
-      </tr>
-        </table>
-                    </blockquote>
-    </td></tr>
-  </table>
-                                  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Making a Mountain Out of an Anthill"><strong>Making a Mountain Out of an Anthill</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>This article is from the June 2001 issue of the Java Developer'
-        Journal.  You need to be a registered JDJ subscriber to view this
-        article.</p>
-                                  <table>
-              <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Author:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Neal Ford
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          URL:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="http://www.sys-con.com/java/archivesa.cfm?volume=06&amp;issue=06">http://www.sys-con.com/java/archivesa.cfm?volume=06&amp;issue=06</a>
-        </font>
-  </td>
-      </tr>
-        </table>
-                    </blockquote>
-    </td></tr>
-  </table>
-                                  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Using Ant and Weblogic EJBs"><strong>Using Ant and Weblogic EJBs</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>This article describes how to use Ant to create Weblogic EJBs, and
-        some workarounds for issues you may encounter.</p>
-                                  <table>
-              <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Author:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Jesse E. Tilly
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          URL:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="http://www.onjava.com/pub/a/onjava/2001/06/25/antejb.html">http://www.onjava.com/pub/a/onjava/2001/06/25/antejb.html</a>
-        </font>
-  </td>
-      </tr>
-        </table>
-                    </blockquote>
-    </td></tr>
-  </table>
-                                  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="An Introduction to Ant"><strong>An Introduction to Ant</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>This article is a short introduction into the basic
-        concepts of Ant.</p>
-                                  <table>
-              <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Author:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Jayakrishnan Nair
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          URL:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="http://varnam.org/articles/ant.html">http://varnam.org/articles/ant.html</a>
-        </font>
-  </td>
-      </tr>
-        </table>
-                    </blockquote>
-    </td></tr>
-  </table>
-                                  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Using JavaScript with Ant"><strong>Using JavaScript with Ant</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>A tutorial about using JavaScript and XSLT with Ant.</p>
-                                  <table>
-              <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Author:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Dylan Schiemann
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          URL:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="http://www.sitepen.com/ant/javascript.html">http://www.sitepen.com/ant/javascript.html</a>
-        </font>
-  </td>
-      </tr>
-        </table>
-                    </blockquote>
-    </td></tr>
-  </table>
-                                  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Building with Ant"><strong>Building with Ant</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>Series of articles that describe a framework for web
-        application development based on Ant and JUnit.</p>
-                                  <table>
-              <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Author:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="mailto:alexc@purpletech.com">Alex Chaffee</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          URL:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Introduction: <a href="http://softwaredev.earthweb.com/sdtech/article/0,,12065_989631,00.html">http://softwaredev.earthweb.com/sdtech/article/0,,12065_989631,00.html</a><br />
-                Directory Structure: <a href="http://softwaredev.earthweb.com/sdtech/article/0,,12082_994991,00.html">http://softwaredev.earthweb.com/sdtech/article/0,,12082_994991,00.html</a><br />
-                Deployment and Distribution: <a href="http://softwaredev.earthweb.com/sdtech/article/0,,12077_998241,00.html">http://softwaredev.earthweb.com/sdtech/article/0,,12077_998241,00.html</a>
-        </font>
-  </td>
-      </tr>
-        </table>
-                    </blockquote>
-    </td></tr>
-  </table>
-                                  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Developing with JAXB and Ant"><strong>Developing with JAXB and Ant</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>Series of articles that shows how to use Ant together with
-        the Java API for XML Binding (JAXB).</p>
-                                  <table>
-              <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Author:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Joseph Shelby
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          URL:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="http://www.onjava.com/pub/a/onjava/2002/03/06/jaxant1.html">http://www.onjava.com/pub/a/onjava/2002/03/06/jaxant1.html</a><br />
-                <a href="http://www.onjava.com/pub/a/onjava/2002/03/13/jaxbant2.html">http://www.onjava.com/pub/a/onjava/2002/03/13/jaxbant2.html</a>
-        </font>
-  </td>
-      </tr>
-        </table>
-                    </blockquote>
-    </td></tr>
-  </table>
-                    </blockquote>
-    </td></tr>
-  </table>
-        <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#525D76">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Presentations"><strong>Presentations</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                          <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Ant - presented to the Tucson Java Users Group"><strong>Ant - presented to the Tucson Java Users Group</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>A PowerPoint technical overview presentation on Ant.  Comes complete with a straightforward example demonstrating code compilation, JAR'ing, JUnit testing, JUnit reporting, and Zipping a distribution.  A few advanced topics are touched upon like property immutabality and using &lt;antcall&gt; to get around it, build listeners, and writing custom tasks.</p>
-                                  <table>
-              <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Author:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="mailto:ehatcher@apache.org">Erik Hatcher</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          URL:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="http://erik.hatcher.net/ant-jug.zip">http://erik.hatcher.net/ant-jug.zip</a>
-        </font>
-  </td>
-      </tr>
-        </table>
-                    </blockquote>
-    </td></tr>
-  </table>
-                                  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Ant Build Tool"><strong>Ant Build Tool</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>A PowerPoint presentation on Ant 1.2.  It provides a basic overview
-        of Ant's capabilities.</p>
-                                  <table>
-              <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Author:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="mailto:chanezon@netscape.com">Patrick Chanezon</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          URL:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="http://people.netscape.com/chanezon/tech/ant/ant_preso.ppt">http://people.netscape.com/chanezon/tech/ant/ant_preso.ppt</a>
-        </font>
-  </td>
-      </tr>
-        </table>
-                    </blockquote>
-    </td></tr>
-  </table>
-                                  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Ant"><strong>Ant</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>A detailed Ant 1.3 PowerPoint presentation, made at the St. Louis Java Users Group
-        meeting in March 2001.  Includes a detailed build file and basic
-        descriptions of all the built in and optional tasks.  Updated for Ant 1.4 in October 2001.
-        Available in PDF format now.</p>
-                                  <table>
-              <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Author:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Mark Volkmann
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          URL:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="http://www.ociweb.com/downloads/Ant.pdf">http://www.ociweb.com/downloads/Ant.pdf</a>
-        </font>
-  </td>
-      </tr>
-        </table>
-                    </blockquote>
-    </td></tr>
-  </table>
-                                  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Modern Development Crises"><strong>Modern Development Crises</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>This presentation is an overview of the current state of software
-        development today.  There are a couple of slides that briefly cover
-        Ant.</p>
-                                  <table>
-              <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Author:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="mailto:steve_l@iseran.com">Steve Loughran</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          URL:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="http://www.iseran.com/Steve/modern_development_processes.html">http://www.iseran.com/Steve/modern_development_processes.html</a>
-        </font>
-  </td>
-      </tr>
-        </table>
-                    </blockquote>
-    </td></tr>
-  </table>
-                                  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#828DA6">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="When Web Services Go Bad"><strong>When Web Services Go Bad</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>A presentation from the <a href="http://www.sellsbrothers.com/conference/">Web Services
-        DevCon</a> in March 2002.</p>
-                                  <table>
-              <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          Author:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="mailto:steve_l@iseran.com">Steve Loughran</a>
-        </font>
-  </td>
-      </tr>
-                  <tr>
-                  <td bgcolor="#039acc" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          URL:
-        </font>
-  </td>
-                      <td bgcolor="#a0ddf0" colspan="" rowspan="" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-          <a href="http://www.iseran.com/Steve/papers/when_web_services_go_bad.html">http://www.iseran.com/Steve/papers/when_web_services_go_bad.html</a>
-        </font>
-  </td>
-      </tr>
-        </table>
-                    </blockquote>
-    </td></tr>
-  </table>
-                    </blockquote>
-    </td></tr>
-  </table>
-              </td>
-        </tr>
-
-        <!-- FOOTER -->
-        <tr><td colspan="2">
-          <hr noshade="" size="1"/>
-        </td></tr>
-        <tr><td colspan="2">
-          <div align="center"><font color="#525D76" size="-1"><em>
-          Copyright &#169; 2000-2002, Apache Software Foundation
-          </em></font></div>
-        </td></tr>
-      </table>
-    </body>
-  </html>
-<!-- end the processing -->
-
-
-
-
diff --git a/lib/README b/lib/README
deleted file mode 100644
index 4a12ce8..0000000
--- a/lib/README
+++ /dev/null
@@ -1,8 +0,0 @@
-Please refer to the Ant manual under Installing Ant / Library
-Dependencies for a list of the jar requirements for various optional
-tasks and features.
-
-This directory contains xercesImpl.jar and xmlParserAPIs from the
-2.0.1 release of Apache Xerces.  For more information or newer
-releases see <http://xml.apache.org/xerces2-j/>.
-
diff --git a/lib/optional/.cvsignore b/lib/optional/.cvsignore
deleted file mode 100644
index caad252..0000000
--- a/lib/optional/.cvsignore
+++ /dev/null
@@ -1,2 +0,0 @@
-jdepend*.jar
-s*.jar
\ No newline at end of file
diff --git a/lib/optional/README b/lib/optional/README
deleted file mode 100644
index daf6611..0000000
--- a/lib/optional/README
+++ /dev/null
@@ -1,3 +0,0 @@
-The file junit.jar is version 3.7 of JUnit, see the file LICENSE.junit
-for the terms of distribution.  For more information about JUnit or
-the latest release, see <http://www.junit.org/>.
diff --git a/lib/optional/junit.jar b/lib/optional/junit.jar
deleted file mode 100644
index 914a5cf..0000000
--- a/lib/optional/junit.jar
+++ /dev/null
Binary files differ
diff --git a/lib/xercesImpl.jar b/lib/xercesImpl.jar
deleted file mode 100644
index 205138a..0000000
--- a/lib/xercesImpl.jar
+++ /dev/null
Binary files differ
diff --git a/lib/xmlParserAPIs.jar b/lib/xmlParserAPIs.jar
deleted file mode 100644
index b763999..0000000
--- a/lib/xmlParserAPIs.jar
+++ /dev/null
Binary files differ
diff --git a/proposal/mutant/.cvsignore b/proposal/mutant/.cvsignore
deleted file mode 100644
index 2535fcc..0000000
--- a/proposal/mutant/.cvsignore
+++ /dev/null
@@ -1,4 +0,0 @@
-bin
-dist
-bootstrap
-
diff --git a/proposal/mutant/bootstrap.bat b/proposal/mutant/bootstrap.bat
deleted file mode 100755
index 2db03f2..0000000
--- a/proposal/mutant/bootstrap.bat
+++ /dev/null
@@ -1,30 +0,0 @@
-@echo off
-REM   Copyright (c) 2000-2001 The Apache Software Foundation.  All rights
-REM   reserved.
-
-REM cleanup curretn boot area
-if exist bin rmdir /s/q bin 
-if exist bootstrap rmdir /s/q bootstrap 
-if exist dist rmdir /s/q dist 
-
-REM compile init jar
-mkdir bin\init
-javac -d bin\init src\java\init\org\apache\ant\init\*.java
-
-REM compile bootstrap classes
-mkdir bin\bootstrap
-javac -classpath bin\init -d bin\bootstrap src\java\bootstrap\org\apache\ant\bootstrap\*.java
-
-REM compiler builder classes
-mkdir bin\builder
-javac -classpath bin\init;bin\bootstrap -d bin\builder src\java\bootstrap\org\apache\ant\builder\*.java
-
-REM run bootstrap
-java -classpath bin\init;bin\bootstrap org.apache.ant.bootstrap.Bootstrap
-
-REM run full build using bootstrapped version
-java -jar bootstrap\lib\start.jar %*
-
-REM Use the full build as the build used by the build script
-xcopy /s /y dist bootstrap
-
diff --git a/proposal/mutant/bootstrap.sh b/proposal/mutant/bootstrap.sh
deleted file mode 100755
index 8b192a1..0000000
--- a/proposal/mutant/bootstrap.sh
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/bin/sh
-
-#   Copyright (c) 2000-2001 The Apache Software Foundation.  All rights
-#   reserved.
-
-# cleanup curretn boot area
-rm -rf bin bootstrap dist
-
-# compile init jar
-mkdir -p bin/init
-javac -d bin/init src/java/init/org/apache/ant/init/*.java
-
-# compile bootstrap classes
-mkdir bin/bootstrap
-javac -classpath bin/init -d bin/bootstrap src/java/bootstrap/org/apache/ant/bootstrap/*.java
-
-# compiler builder classes
-mkdir bin/builder
-javac -classpath bin/init:bin/bootstrap -d bin/builder src/java/bootstrap/org/apache/ant/builder/*.java
-
-# run bootstrap
-java -classpath bin/init:bin/bootstrap org.apache.ant.bootstrap.Bootstrap
-
-# run full build using bootstrapped version
-java -jar bootstrap/lib/start.jar $*
-
-# Use the full build as the build used by the build script
-cp -r dist/lib bootstrap
-
diff --git a/proposal/mutant/build.bat b/proposal/mutant/build.bat
deleted file mode 100755
index 173f649..0000000
--- a/proposal/mutant/build.bat
+++ /dev/null
@@ -1,5 +0,0 @@
-@echo off
-REM   Copyright (c) 2002 The Apache Software Foundation.  All rights
-REM   reserved.
-
-java -jar bootstrap\lib\start.jar %*
diff --git a/proposal/mutant/build.sh b/proposal/mutant/build.sh
deleted file mode 100755
index d2cc213..0000000
--- a/proposal/mutant/build.sh
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/sh -x
-
-#   Copyright (c) 2002 The Apache Software Foundation.  All rights
-#   reserved.
-
-java -jar bootstrap/lib/start.jar $@
diff --git a/proposal/mutant/build.xml b/proposal/mutant/build.xml
deleted file mode 100644
index b5af3e7..0000000
--- a/proposal/mutant/build.xml
+++ /dev/null
@@ -1,219 +0,0 @@
-<project default="main" name="Mutant">
-
-  <property name="src.dir" value="src"/>
-  <property name="lib.dir" value="lib"/>
-  <property name="java.dir" value="${src.dir}/java"/>
-
-  <property name="bin.dir" value="bin"/>
-  <property name="dist.dir" value="dist"/>
-  <property name="javadocs.dir" value="${dist.dir}/javadocs"/>
-  <property name="distlib.dir" value="${dist.dir}/lib"/>
-  
-  <property name="debug" value="true"/>
-
-  <path id="classpath.parser">
-    <fileset dir="${lib.dir}/parser" includes="*.jar"/>
-  </path>
-  
-  <path id="classpath.common">
-    <pathelement location="${distlib.dir}/init.jar"/>
-  </path>
-
-  <path id="classpath.antcore">
-    <path refid="classpath.common"/>
-    <pathelement location="${distlib.dir}/common/common.jar"/>
-    <path refid="classpath.parser"/>
-  </path>
-
-  <path id="classpath.frontend">
-    <path refid="classpath.antcore"/>
-    <pathelement location="${distlib.dir}/antcore/antcore.jar"/>
-  </path>
-  
-  <path id="classpath.start">
-    <pathelement location="${distlib.dir}/init.jar"/>
-  </path>
-
-  <target name="buildsetup">
-    <available classname="com.puppycrawl.tools.checkstyle.CheckStyleTask" 
-               property="checkstyle.available"/>
-    <mkdir dir="${bin.dir}"/>
-    <mkdir dir="${distlib.dir}"/>
-    <copy todir="${distlib.dir}/parser">
-      <fileset dir="${lib.dir}/parser"/>
-    </copy>
-  </target>
-
-  <target name="init" depends="buildsetup">
-    <mkdir dir="${bin.dir}/init"/>
-    <depend destdir="${bin.dir}/init" srcdir="${java.dir}/init"/>
-    <javac destdir="${bin.dir}/init" srcdir="${java.dir}/init" debug="${debug}"/>
-    <jar basedir="${bin.dir}/init" jarfile="${distlib.dir}/init.jar"/>
-  </target>
-
-  <target name="common" depends="init">
-    <mkdir dir="${bin.dir}/common"/>
-    <mkdir dir="${distlib.dir}/common"/>
-    <depend destdir="${bin.dir}/common" srcdir="${java.dir}/common">
-      <classpath refid="classpath.common"/>
-    </depend>
-    <javac destdir="${bin.dir}/common" srcdir="${java.dir}/common" debug="${debug}">
-      <classpath refid="classpath.common"/>
-    </javac>
-    <jar basedir="${bin.dir}/common" jarfile="${distlib.dir}/common/common.jar"/>
-  </target>
-
-  <target name="antcore" depends="common">
-    <mkdir dir="${bin.dir}/antcore"/>
-    <mkdir dir="${distlib.dir}/antcore"/>
-    <depend destdir="${bin.dir}/antcore" srcdir="${java.dir}/antcore">
-      <classpath refid="classpath.antcore"/>
-    </depend>
-    <javac destdir="${bin.dir}/antcore" srcdir="${java.dir}/antcore" debug="${debug}">
-      <classpath refid="classpath.antcore"/>
-    </javac>
-    <jar basedir="${bin.dir}/antcore" jarfile="${distlib.dir}/antcore/antcore.jar"/>
-  </target>
-
-  <target name="frontend" depends="antcore, start">
-    <mkdir dir="${bin.dir}/frontend"/>
-    <mkdir dir="${distlib.dir}/frontend"/>
-    <depend destdir="${bin.dir}/frontend" srcdir="${java.dir}/frontend">
-      <classpath refid="classpath.frontend"/>
-    </depend>
-    <javac destdir="${bin.dir}/frontend" srcdir="${java.dir}/frontend" debug="${debug}">
-      <classpath refid="classpath.frontend"/>
-    </javac>
-    <jar basedir="${bin.dir}/frontend" jarfile="${distlib.dir}/frontend/frontend.jar">
-      <include name="**/frontend/*.class"/>
-    </jar>
-    <jar basedir="${bin.dir}/frontend" jarfile="${distlib.dir}/frontend/cli.jar">
-      <include name="**/cli/*.class"/>
-      <manifest>
-        <attribute name="Main-Class" value="org.apache.ant.cli.Commandline"/>
-        <attribute name="Class-Path" value="frontend.jar"/>
-      </manifest>
-    </jar>
-  </target>
-
-  <target name="start" depends="init">
-    <mkdir dir="${bin.dir}/start"/>
-    <depend destdir="${bin.dir}/start" srcdir="${java.dir}/start">
-      <classpath refid="classpath.start"/>
-    </depend>
-    <javac destdir="${bin.dir}/start" srcdir="${java.dir}/start" debug="${debug}">
-      <classpath refid="classpath.start"/>
-    </javac>
-    <jar basedir="${bin.dir}/start" jarfile="${distlib.dir}/start.jar">
-      <manifest>
-        <attribute name="Main-Class" value="org.apache.ant.start.Main"/>
-        <attribute name="Class-Path" value="init.jar"/>
-      </manifest>
-      <include name="org/apache/ant/**/*"/>
-    </jar>
-    <jar basedir="${bin.dir}/start" jarfile="${distlib.dir}/ant.jar">
-      <manifest>
-        <attribute name="Main-Class" value="org.apache.tools.ant.Main"/>
-        <attribute name="Class-Path" value="start.jar"/>
-      </manifest>
-      <include name="org/apache/tools/ant/**/*"/>
-    </jar>
-  </target>
-
-  <target name="ant1compat" depends="common">
-    <ant antfile="build/ant1compat.xml" />
-  </target>
-  
-  <target name="remote" depends="init">
-    <mkdir dir="${bin.dir}/remote"/>
-    <depend destdir="${bin.dir}/remote" srcdir="${java.dir}/remote">
-      <classpath refid="classpath.start"/>
-    </depend>
-    <javac destdir="${bin.dir}/remote" srcdir="${java.dir}/remote" debug="${debug}">
-      <classpath refid="classpath.start"/>
-    </javac>
-    <jar basedir="${bin.dir}/remote" jarfile="${distlib.dir}/remote.jar">
-      <manifest>
-        <attribute name="Main-Class" value="org.apache.ant.remote.RemoteMain"/>
-      </manifest>
-    </jar>
-  </target>
-  
-  <target name="clean">
-    <delete dir="${bin.dir}"/>
-    <delete dir="${dist.dir}"/>
-  </target>
-
-  <target name="antlibs" depends="common, systemlib">
-    <ant antfile="build/script.xml"/> 
-  </target>
-  
-  <target name="systemlib" depends="common">
-    <mkdir dir="${bin.dir}/antlibs/system"/>
-    <mkdir dir="${distlib.dir}/syslibs"/>
-    <path id="classpath.antlibs">
-      <path refid="classpath.common"/>
-      <pathelement location="${distlib.dir}/common/common.jar"/>
-    </path>
-    <depend destdir="${bin.dir}/antlibs/system" srcdir="${java.dir}/antlibs/system">
-      <classpath refid="classpath.antlibs"/>
-    </depend>
-    <javac destdir="${bin.dir}/antlibs/system" srcdir="${java.dir}/antlibs/system" debug="${debug}">
-      <classpath refid="classpath.antlibs"/>
-    </javac>
-    <jar basedir="${bin.dir}/antlibs/system" jarfile="${distlib.dir}/syslibs/system.jar">
-      <metainf dir="${java.dir}/antlibs/system" 
-                includes="antlib.xml"/>
-    </jar>
-  </target>
-
-  <target name="main" depends="frontend, antlibs, ant1compat, remote, checkstyle"/> 
-  
-  <target name="checkstyle" if="checkstyle.available">
-    <taskdef name="checkstyle"
-             classname="com.puppycrawl.tools.checkstyle.CheckStyleTask"/>
-    <mkdir dir="${bin.dir}/check"/>
-    <checkstyle headerFile="../../src/etc/RequiredHeader.txt"
-                headerIgnoreLine="4">
-      <fileset dir="${java.dir}">
-        <include name="**/*.java"/>
-        <exclude name="**/org/apache/tools/ant/Task.java"/>
-        <exclude name="**/org/apache/tools/ant/ProjectComponent.java"/>
-        <exclude name="**/org/apache/tools/ant/types/DataType.java"/>
-        <exclude name="**/builder/MutantBuilder.java"/>
-        <exclude name="**/builder/Ant1CompatBuilder.java"/>
-      </fileset>
-    </checkstyle>
-    <checkstyle allowProtected="true" 
-                headerFile="../../src/etc/RequiredHeader.txt"
-                headerIgnoreLine="4">
-      <fileset dir="${java.dir}">
-        <include name="**/org/apache/tools/ant/Task.java"/>
-        <include name="**/org/apache/tools/ant/ProjectComponent.java"/>
-        <include name="**/org/apache/tools/ant/types/DataType.java"/>
-      </fileset>
-    </checkstyle>
-  </target>
-  
-  <target name="javadocs">
-    <mkdir dir="${javadocs.dir}"/>
-    <javadoc packagenames="org.apache.*"
-             useexternalfile="yes"
-             sourcepath="${java.dir}/antcore:${java.dir}/init:${java.dir}/common:${java.dir}/frontend:${java.dir}/start"
-             destdir="${javadocs.dir}"
-             author="true" 
-             private ="true"
-             version="true"
-             windowtitle="Mutant API"
-             doctitle="Mutant">
-      <group title="Ant Library" packages="org.apache.ant.common.antlib*" />
-      <group title="Services" packages="org.apache.ant.common.service*" />
-      <group title="Common Facilities" packages="org.apache.ant.common*" />
-      <group title="Core" packages="org.apache.ant.antcore*" />
-      <group title="Initialisation" packages="org.apache.ant.init*,org.apache.ant.start*" />
-      <group title="Command Line" packages="org.apache.ant.cli*" />
-      <group title="Ant1 Compatability Layer" packages="org.apache.tools.ant*" />
-      <tag name="created" description="Date Created:" scope="types"/>
-    </javadoc>
-  </target>
-</project>
diff --git a/proposal/mutant/build/ant1compat.xml b/proposal/mutant/build/ant1compat.xml
deleted file mode 100644
index 4594569..0000000
--- a/proposal/mutant/build/ant1compat.xml
+++ /dev/null
@@ -1,497 +0,0 @@
-<project default="ant1compat" name="Ant1Compat" basedir="..">
-
-  <property name="src.dir" value="src"/>
-  <property name="lib.dir" value="lib"/>
-  <property name="java.dir" value="${src.dir}/java"/>
-
-  <property name="bin.dir" value="bin"/>
-  <property name="dist.dir" value="dist"/>
-  <property name="javadocs.dir" value="${dist.dir}/javadocs"/>
-  <property name="distlib.dir" value="${dist.dir}/lib"/>
-
-  <property name="ant1base.dir" value="../.."/>  
-  <property name="ant1src.dir" value="${ant1base.dir}/src"/>
-  <property name="ant1java.dir" value="${ant1src.dir}/main"/>
-  <property name="ant1etc.dir" value="${ant1src.dir}/etc"/>
-
-  <property name="debug" value="true"/>
-
-  <property name="ant.package" value="org/apache/tools/ant"/>
-  <property name="optional.package" value="${ant.package}/taskdefs/optional"/>
-  <property name="optional.type.package" value="${ant.package}/types/optional"/>
-  <property name="util.package" value="${ant.package}/util"/>
-  <property name="regexp.package" value="${util.package}/regexp"/>
-
-  <patternset id="deprecated">
-    <exclude name="org/apache/tools/ant/taskdefs/Copydir.java"/>
-    <exclude name="org/apache/tools/ant/taskdefs/Copyfile.java"/>
-  </patternset>
-  
-  <patternset id="toohard">
-    <exclude name="org/apache/tools/ant/taskdefs/Do.java"/>
-  </patternset>
-  
-  <patternset id="converted">
-    <exclude name="org/apache/tools/ant/taskdefs/Ant.java"/>
-    <exclude name="org/apache/tools/ant/taskdefs/CallTarget.java"/>
-    <exclude name="org/apache/tools/ant/taskdefs/input/InputRequest.java"/>
-    <exclude name="org/apache/tools/ant/types/DataType.java"/>
-    <exclude name="org/apache/tools/ant/Project.java"/>
-    <exclude name="org/apache/tools/ant/Target.java"/>
-    <exclude name="org/apache/tools/ant/TaskContainer.java"/>
-    <exclude name="org/apache/tools/ant/ProjectComponent.java"/>
-    <exclude name="org/apache/tools/ant/ProjectHelper.java"/>
-    <exclude name="org/apache/tools/ant/Task.java"/>
-    <exclude name="org/apache/tools/ant/Main.java"/>
-    <exclude name="org/apache/tools/ant/input/InputRequest.java"/>
-  </patternset>
-
-  <patternset id="notrequired">
-    <exclude name="org/apache/tools/ant/DemuxOutputStream.java"/>
-    <exclude name="org/apache/tools/ant/RuntimeConfigurable.java"/>
-    <exclude name="org/apache/tools/ant/UnknownElement.java"/>
-  </patternset>
-  
-  <fileset id="ant1src_tocopy" dir="${ant1java.dir}">
-    <include name="**/*.properties"/>
-    <include name="**/*.mf"/>
-    <include name="org/apache/tools/ant/taskdefs/**/*.java"/>
-    <include name="org/apache/tools/ant/types/**/*.java"/>
-    <include name="org/apache/tools/ant/filters/**/*.java"/>
-    <include name="org/apache/tools/ant/util/**/*.java"/>
-    <include name="org/apache/tools/zip/**/*.java"/>
-    <include name="org/apache/tools/bzip2/**/*.java"/>
-    <include name="org/apache/tools/mail/**/*.java"/>
-    <include name="org/apache/tools/tar/**/*.java"/>
-    <include name="org/apache/tools/ant/*.java"/>
-    <include name="org/apache/tools/ant/input/*.java"/>
-    <!-- <patternset refid="deprecated"/> -->
-    <patternset refid="toohard"/>
-    <patternset refid="converted"/>
-    <patternset refid="notrequired"/>
-  </fileset>
-
-  <path id="classpath">
-    <pathelement location="${distlib.dir}/init.jar"/>
-    <fileset dir="${lib.dir}/parser" includes="*.jar"/>
-    <fileset dir="${lib.dir}/ant1compat" includes="*.jar"/>
-    <pathelement location="${distlib.dir}/common/common.jar"/>
-    <pathelement location="${distlib.dir}/syslibs/system.jar"/>
-  </path>
-
-  <!--
-       ===================================================================
-         Set up patternsets to be used by javac and junit to exclude
-         files that have dependencies that are not available
-       ===================================================================
-  -->
-  <!-- depends on JDK version -->
-  <patternset id="needs.jdk1.2+">
-    <exclude name="${util.package}/optional/NoExitSecurityManager.java"
-             unless="jdk1.2+" />
-    <exclude name="${optional.package}/Javah.java" 
-             unless="jdk1.2+" />
-    <exclude name="${optional.package}/metamata/*.java" 
-             unless="jdk1.2+" />
-    <exclude name="${optional.package}/ejb/EjbJar.java"
-             unless="jdk1.2+" />
-    <exclude name="${optional.package}/ejb/*DeploymentTool.java"
-             unless="jdk1.2+" />
-    <exclude name="${optional.package}/ejb/IPlanet*.java"
-             unless="jdk1.2+" />
-    <!-- uses the context classloader -->
-    <exclude name="${optional.package}/junit/JUnitClassLoaderTest.java"
-             unless="jdk1.2+" />
-    <!-- use various 1.2 methods -->             
-    <exclude name="${optional.package}/sitraka/**/*.java"
-             unless="jdk1.2+" />
-  </patternset>
-  <patternset id="needs.jdk1.3+">
-    <exclude name="${ant.package}/taskdefs/TestProcess.java"
-             unless="jdk1.3+" />
-  </patternset>
-  <patternset id="needs.jdk1.4+">
-    <exclude name="${regexp.package}/Jdk14Regexp*.java"
-             unless="jdk1.4+" />
-  </patternset>
-
-  <!-- classes that should be present in Sun based JVMs, but not in
-       Kaffe for example -->
-  <patternset id="needs.sun.tools">
-    <exclude name="${optional.package}/Native2Ascii.java"
-             unless="sun.tools.present" />
-    <exclude name="${optional.package}/Javah.java"
-             unless="sun.tools.present" />
-  </patternset>
-  <patternset id="needs.sun.uue">
-    <exclude name="${ant.package}/taskdefs/email/UUMailer.java"
-             unless="sunuue.present" />
-  </patternset>
-  <patternset id="needs.sun.b64">
-    <exclude name="${ant.package}/taskdefs/Get.java"
-             unless="base64.present" />
-    <exclude name="${optional.package}/splash/SplashTask.java"
-             unless="base64.present" />
-  </patternset>
-
-  <!-- depends on external libraries -->
-  <patternset id="needs.trax">
-    <exclude name="${optional.package}/TraXLiaison*.java"
-             unless="trax.present" />
-    <exclude name="${optional.package}/sitraka/**" 
-             unless="trax.present"/>
-    <exclude name="${optional.package}/metamata/MMetrics*" 
-             unless="trax.present"/>
-  </patternset>
-  <patternset id="needs.xalan1">
-    <exclude name="${optional.package}/XalanLiaison*.java"
-             unless="xalan.present" />
-    <exclude name="${optional.package}/junit/Xalan1Executor.java"
-             unless="xalan.present" />
-  </patternset>
-  <patternset id="needs.xalan2">
-    <exclude name="${optional.package}/junit/Xalan2Executor.java"
-             unless="xalan2.present" />
-  </patternset>
-  <patternset id="needs.xslp">
-    <exclude name="${optional.package}/XslpLiaison*.java" 
-             unless="xslp.present" />
-  </patternset>
-  <patternset id="needs.junit">
-    <exclude name="${optional.package}/junit/*.java" unless="junit.present" />
-  </patternset>
-  <patternset id="needs.jakarta.regexp">
-    <exclude name="${regexp.package}/JakartaRegexp*.java"
-             unless="jakarta.regexp.present" />
-  </patternset>
-  <patternset id="needs.jakarta.oro">
-    <exclude name="${regexp.package}/JakartaOro*.java" 
-             unless="jakarta.oro.present" />
-    <exclude name="${optional.package}/perforce/*.java" 
-             unless="jakarta.oro.present" />
-    <exclude name="${optional.package}/metamata/MAudit*.java" 
-             unless="jakarta.oro.present"/>
-  </patternset>
-  <patternset id="needs.jakarta.bcel">
-    <exclude name="${ant.package}/filters/util/JavaClassHelper.java" 
-             unless="bcel.present" />
-    <exclude name="${util.package}/depend/bcel/*.java"
-             unless="bcel.present" />
-    <exclude name="${optional.type.package}/depend/ClassFileSetTest.java"
-             unless="bcel.present" />
-  </patternset>
-  <patternset id="needs.jakarta.log4j">
-    <exclude name="${ant.package}/listener/Log4jListener.java"
-             unless="log4j.present" />
-  </patternset>
-  <patternset id="needs.bsf">
-    <exclude name="${optional.package}/Script.java" 
-             unless="bsf.present" />
-  </patternset>
-  <patternset id="needs.stylebook">
-    <exclude name="${optional.package}/StyleBook.java" 
-             unless="stylebook.present" />
-  </patternset>
-  <patternset id="needs.javamail">
-    <exclude name="${ant.package}/taskdefs/email/MimeMailer.java"
-             unless="javamail.complete" />
-  </patternset>
-  <patternset id="needs.icontract">
-    <exclude name="${optional.package}/IContract.java"
-             unless="icontract.present" />
-  </patternset>
-  <patternset id="needs.netrexx">
-    <exclude name="${optional.package}/NetRexxC.java"
-             unless="netrexx.present" />
-  </patternset>
-  <patternset id="needs.weblogic.ejbc">
-    <exclude name="${optional.package}/ejb/Ejbc*.java" 
-             unless="ejb.ejbc.present" />
-  </patternset>
-  <patternset id="needs.weblogic.ddcreator">
-    <exclude name="${optional.package}/ejb/DDCreator*.java"
-             unless="ejb.DDCreator.present" />
-  </patternset>
-  <patternset id="needs.weblogic.server">
-    <exclude name="${optional.package}/ejb/WLRun.java"
-             unless="ejb.wls.present" />
-    <exclude name="${optional.package}/ejb/WLStop.java" 
-             unless="ejb.wls.present" />
-  </patternset>
-  <patternset id="needs.netcomponents">
-    <exclude name="${optional.package}/net/FTP.java"
-             unless="netcomp.present" />
-    <exclude name="${optional.package}/net/TelnetTask.java"
-             unless="netcomp.present" />
-  </patternset>
-  <patternset id="needs.starteam">
-    <exclude name="${optional.package}/scm/AntStarTeam*.java"
-             unless="starteam.present" />
-    <exclude name="${optional.package}/starteam/*.java"
-             unless="starteam.present" />
-  </patternset>
-  <patternset id="needs.vaj">
-    <exclude name="${optional.package}/ide/VAJ*.java" 
-             unless="vaj.present" />
-  </patternset>
-  <patternset id="needs.antlr">
-    <exclude name="${optional.package}/ANTLR*.java" unless="antlr.present" />
-  </patternset>
-  <patternset id="needs.servletapi">
-    <exclude name="${optional.package}/ide/VAJ*Servlet.java"
-             unless="servlet.present" />
-  </patternset>
-  <patternset id="needs.jmf">
-    <exclude name="${optional.package}/sound/*.java" unless="jmf.present" />
-  </patternset>
-  <patternset id="needs.jdepend">
-    <exclude name="${optional.package}/jdepend/*" unless="jdepend.present" />
-  </patternset>
-  <patternset id="onlinetests">
-    <exclude name="**/GetTest.java" if="offline" />
-  </patternset>
-  <patternset id="needs.swing">
-    <exclude name="${optional.package}/splash/*.java" unless="swing.present" />
-  </patternset>
-
-  <!--
-       ===================================================================
-         Check to see what optional dependencies are available
-       ===================================================================
-  -->
-  <target name="check_for_optional_packages">
-    <available property="jdk1.2+" classname="java.lang.ThreadLocal" />
-    <available property="jdk1.3+" classname="java.lang.StrictMath" />
-    <available property="jdk1.4+" classname="java.lang.CharSequence" />
-    <available property="bsf.present"
-               classname="com.ibm.bsf.BSFManager"
-               classpathref="classpath" />
-    <condition property="netrexx.present">
-      <and>
-        <isset property="jdk1.2+"/>                
-        <available classname="netrexx.lang.Rexx"
-                   classpathref="classpath"/>
-      </and>
-    </condition>
-    <available property="trax.present"
-               classname="javax.xml.transform.Transformer"
-               classpathref="classpath" />
-    <available property="xslp.present"
-               classname="com.kvisco.xsl.XSLProcessor"
-               classpathref="classpath" />
-    <available property="xalan.present"
-               classname="org.apache.xalan.xslt.XSLTProcessorFactory"
-               classpathref="classpath" />
-    <available property="xalan2.present"
-               classname="org.apache.xalan.transformer.TransformerImpl"
-               classpathref="classpath" />
-    <available property="ejb.ejbc.present"
-               classname="weblogic.ejbc"
-               classpathref="classpath" />
-    <available property="ejb.DDCreator.present"
-               classname="weblogic.ejb.utils.DDCreator"
-               classpathref="classpath" />
-    <available property="ejb.wls.present"
-               classname="weblogic.Server"
-               classpathref="classpath" />
-    <available property="junit.present"
-               classname="junit.framework.TestCase"
-               classpathref="classpath" />
-    <available property="netcomp.present"
-               classname="com.oroinc.net.ftp.FTPClient"
-               classpathref="classpath" />
-    <available property="starteam.present"
-               classname="com.starbase.util.Platform"
-               classpathref="classpath" />
-    <available property="antlr.present"
-               classname="antlr.Tool"
-               classpathref="classpath"/>
-    <available property="vaj.present"
-               classname="com.ibm.ivj.util.base.Workspace"
-               classpathref="classpath"/>
-    <available property="stylebook.present"
-               classname="org.apache.stylebook.Engine"
-               classpathref="classpath"/>
-    <available property="jakarta.regexp.present"
-               classname="org.apache.regexp.RE"
-               classpathref="classpath"/>
-    <available property="jakarta.oro.present"
-               classname="org.apache.oro.text.regex.Perl5Matcher"
-               classpathref="classpath" />
-    <available property="jmf.present"
-               classname="javax.sound.sampled.Clip"
-               classpathref="classpath"/>
-    <condition property="icontract.present">
-        <and>
-            <isset property="jdk1.2+"/>                
-            <available classname="com.reliablesystems.iContract.IContracted"
-                       classpathref="classpath"/>
-        </and>
-    </condition>
-    <available property="jdepend.present"
-               classname="jdepend.framework.JDepend"
-               classpathref="classpath"/>
-    <available property="log4j.present"
-               classname="org.apache.log4j.Category"
-               classpathref="classpath"/>
-    <!-- this is just a way to check for a TraX implementation -->
-    <available property="trax.impl.present"
-               resource="META-INF/services/javax.xml.transform.TransformerFactory"
-               classpathref="classpath"/>
-    <available property="xalan.envcheck"
-               classname="org.apache.xalan.xslt.EnvironmentCheck"
-               classpathref="classpath" />
-    <available property="which.present"
-               classname="org.apache.env.Which"
-               classpathref="classpath" />
-
-    <available property="servlet.present"
-               classname="javax.servlet.Servlet"
-               classpathref="classpath"/>
-
-    <available property="xerces.present"
-               classname="org.apache.xerces.parsers.SAXParser"
-               classpathref="classpath" />
-    <condition property="bcel.present">
-        <and>
-            <isset property="jdk1.2+"/>                
-            <available classname="org.apache.bcel.Constants"
-                       classpathref="classpath"/>
-        </and>
-    </condition>
-    <available property="sunuue.present"
-               classname="sun.misc.UUEncoder"
-               classpathref="classpath" />
-
-    <condition property="javamail.complete">
-      <and>
-        <available classname="javax.activation.DataHandler"
-                   classpathref="classpath"/>
-        <available classname="javax.mail.Transport"
-                   classpathref="classpath"/>
-      </and>
-    </condition>
-
-    <condition property="some.regexp.support">
-      <or>
-        <isset property="jdk1.4+" />
-        <isset property="jakarta.regexp.present" />
-        <isset property="jakarta.oro.present" />
-      </or>
-    </condition>
-    
-    <condition property="sun.tools.present">
-      <and>
-        <available classname="sun.tools.native2ascii.Main" />
-        <available classname="com.sun.tools.javah.Main" />
-      </and>
-    </condition>
-
-    <available property="base64.present" classname="sun.misc.BASE64Encoder" />
-
-    <condition property="jasper.present">
-      <and>
-        <available classname="org.apache.jasper.compiler.Compiler" />
-        <available classname="org.apache.jasper.JasperException" />
-      </and>
-    </condition>
-    
-    <available property="swing.present"
-               classname="javax.swing.ImageIcon"
-               classpathref="classpath"/>
-               
-   <condition property="wsdl.found">
-      <or>
-        <available file="wsdl"     filepath="${env.PATH}" />
-        <available file="wsdl.exe" filepath="${env.PATH}" />
-        <available file="wsdl.exe" filepath="${env.Path}" />
-      </or>
-    </condition>
-   <echo level="verbose"> wsdl.found=${wsdl.found}</echo>
-   <condition property="csc.found">
-      <or>
-        <available file="csc"     filepath="${env.PATH}" />
-        <available file="csc.exe" filepath="${env.PATH}" />
-        <available file="csc.exe" filepath="${env.Path}" />
-      </or>
-    </condition>
-   <echo level="verbose"> csc.found=${csc.found}</echo>
-   <condition property="dotnetapps.found">
-      <and>
-        <isset property="csc.found"/>
-        <isset property="wsdl.found"/>
-      </and>
-    </condition>               
-   <echo level="verbose"> csc.found=${csc.found}</echo>
-  </target>
-
-  <target name="ant1compat" depends="check_for_optional_packages">
-    <mkdir dir="${bin.dir}/ant1src_copy"/>
-    <mkdir dir="${bin.dir}/ant1compat"/>
-    <copy todir="${bin.dir}/ant1src_copy">
-      <fileset refid="ant1src_tocopy"/>
-    </copy>
-    <depend destdir="${bin.dir}/ant1compat" srcdir="${bin.dir}/ant1src_copy:${java.dir}/antlibs/ant1compat">
-      <classpath refid="classpath"/>
-    </depend>
-    <javac destdir="${bin.dir}/ant1compat" 
-           srcdir="${bin.dir}/ant1src_copy:${java.dir}/antlibs/ant1compat"
-           debug="${debug}">
-      <classpath refid="classpath" />
-
-      <patternset refid="needs.jdk1.2+" />
-      <patternset refid="needs.jdk1.4+" />
-
-      <patternset refid="needs.jakarta.regexp" />
-      <patternset refid="needs.jakarta.oro" />
-      <patternset refid="needs.jakarta.log4j" />
-      <patternset refid="needs.sun.uue" />
-      <patternset refid="needs.javamail" />
-      <patternset refid="needs.icontract" />
-      <patternset refid="needs.bsf" />
-      <patternset refid="needs.stylebook" />
-      <patternset refid="needs.netrexx" />
-      <patternset refid="needs.trax" />
-      <patternset refid="needs.xslp" />
-      <patternset refid="needs.xalan1" />
-      <patternset refid="needs.weblogic.ejbc" />
-      <patternset refid="needs.weblogic.ddcreator" />
-      <patternset refid="needs.weblogic.server" />
-      <patternset refid="needs.junit" />
-      <patternset refid="needs.netcomponents" />
-      <patternset refid="needs.starteam" />
-      <patternset refid="needs.antlr" />
-      <patternset refid="needs.vaj" />
-      <patternset refid="needs.servletapi" />
-      <patternset refid="needs.jmf" />
-      <patternset refid="needs.xalan2" />
-      <patternset refid="needs.jdepend" />
-      <patternset refid="needs.sun.tools" />
-      <patternset refid="needs.sun.b64" />
-      <patternset refid="needs.jakarta.bcel" />
-      <patternset refid="needs.swing" />
-     </javac>
-    <copy todir="${bin.dir}/ant1compat">
-      <fileset dir="${bin.dir}/ant1src_copy" excludes="**/*.java"/>
-    </copy>
-
-    <copy todir="${bin.dir}/ant1compat/${optional.package}/junit/xsl">
-       <fileset dir="${ant1etc.dir}">
-         <include name="junit-frames.xsl" />
-         <include name="junit-noframes.xsl" />
-       </fileset>
-    </copy>
-
-    <mkdir dir="${distlib.dir}/antlibs/"/>
-    <jar basedir="${bin.dir}/ant1compat" jarfile="${distlib.dir}/antlibs/ant1compat.jar">
-      <metainf dir="${java.dir}/antlibs/ant1compat" 
-                includes="antlib.xml"/>
-    </jar>
-  </target>
-  
-  <target name="clean">
-    <delete dir="${bin.dir}/ant1src_copy"/>
-    <delete dir="${bin.dir}/ant1compat"/>
-  </target>
-
-</project>
diff --git a/proposal/mutant/build/bootstrap.xml b/proposal/mutant/build/bootstrap.xml
deleted file mode 100644
index 9cb40eb..0000000
--- a/proposal/mutant/build/bootstrap.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<project name="mutant-bootstrap" default="main" basedir="..">
-  <target name="main">
-    <style in="build.xml" out="src/java/bootstrap/org/apache/ant/builder/MutantBuilder.java" 
-           style="build/bootstrap.xsl"/>
-    <style in="build/ant1compat.xml" out="src/java/bootstrap/org/apache/ant/builder/Ant1CompatBuilder.java" 
-           style="build/bootstrap.xsl"/>
-  </target>
-</project>
-
diff --git a/proposal/mutant/build/bootstrap.xsl b/proposal/mutant/build/bootstrap.xsl
deleted file mode 100644
index c0f99ec..0000000
--- a/proposal/mutant/build/bootstrap.xsl
+++ /dev/null
@@ -1,172 +0,0 @@
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
-  <xsl:strip-space elements="*"/>
-  <xsl:output method="text" omit-xml-declaration="yes"/>
-
-  <xsl:template match="project">
-    <xsl:text>package org.apache.ant.builder;&#10;</xsl:text>
-    <xsl:text>public class </xsl:text>
-    <xsl:value-of select="attribute::name"/>
-    <xsl:text>Builder {&#10;</xsl:text>
-    <xsl:text>    protected void _init(BuildHelper helper) {&#10;</xsl:text>
-    <xsl:apply-templates select="property"/>
-    <xsl:apply-templates select="path"/>
-    <xsl:text>    }&#10;</xsl:text>
-    <xsl:apply-templates select="target"/>
-    <xsl:text>}&#10;</xsl:text>
-  </xsl:template>
-  
-  <xsl:template match="property">
-    <xsl:text>        helper.setProperty(&quot;</xsl:text>
-    <xsl:value-of select="attribute::name"/>
-    <xsl:text>&quot;, &quot;</xsl:text>
-    <xsl:value-of select="attribute::value"/>
-    <xsl:text>&quot;);&#10;</xsl:text>
-  </xsl:template>
-
-  <xsl:template match="echo">
-  </xsl:template>
-  
-  <xsl:template match="path">
-    <xsl:text>        helper.createPath(&quot;</xsl:text>
-    <xsl:variable name="pathName" select="attribute::id"/>
-    <xsl:value-of select="$pathName"/>
-    <xsl:text>&quot;);&#10;</xsl:text>
-    
-    <xsl:for-each select="fileset">
-      <xsl:text>        </xsl:text>
-      <xsl:text>helper.addFileSetToPath(&quot;</xsl:text>
-      <xsl:value-of select="$pathName"/>
-      <xsl:text>&quot;, &#10;</xsl:text>
-      <xsl:text>                        &quot;</xsl:text>
-      <xsl:value-of select="attribute::dir"/>
-      <xsl:text>&quot;, </xsl:text>
-      <xsl:choose>
-        <xsl:when test="attribute::includes">
-          <xsl:text>&quot;</xsl:text>
-          <xsl:value-of select="attribute::includes"/>
-          <xsl:text>&quot;</xsl:text>
-        </xsl:when>
-        <xsl:otherwise>
-          <xsl:text>null</xsl:text>
-        </xsl:otherwise>
-      </xsl:choose>
-      <xsl:text>);&#10;</xsl:text>
-    </xsl:for-each>
-    
-    <xsl:for-each select="pathelement">
-      <xsl:text>        </xsl:text>
-      <xsl:text>helper.addPathElementToPath(&quot;</xsl:text>
-      <xsl:value-of select="$pathName"/>
-      <xsl:text>&quot;, &quot;</xsl:text>
-      <xsl:value-of select="attribute::location"/>
-      <xsl:text>&quot;);&#10;</xsl:text>
-    </xsl:for-each>
-    
-    <xsl:for-each select="path">
-      <xsl:text>        </xsl:text>
-      <xsl:text>helper.addPathToPath(&quot;</xsl:text>
-      <xsl:value-of select="$pathName"/>
-      <xsl:text>&quot;, &quot;</xsl:text>
-      <xsl:value-of select="attribute::refid"/>
-      <xsl:text>&quot;);&#10;</xsl:text>
-    </xsl:for-each>
-  </xsl:template>
-
-  <xsl:template match="target">
-    <xsl:text>    protected void </xsl:text>
-    <xsl:value-of select="translate(attribute::name, '-', '_')"/>
-    <xsl:text>(BuildHelper helper) {&#10;</xsl:text>
-    <xsl:apply-templates/>
-    <xsl:text>    }&#10;</xsl:text>
-  </xsl:template>
-  
-  <xsl:template match="mkdir">
-    <xsl:text>        helper.mkdir(&quot;</xsl:text>
-    <xsl:value-of select="attribute::dir"/>
-    <xsl:text>&quot;);&#10;</xsl:text>
-  </xsl:template>
-  
-  <xsl:template match="javac">
-    <xsl:text>        helper.javac(&quot;</xsl:text>
-    <xsl:value-of select="attribute::srcdir"/>
-    <xsl:text>&quot;, &quot;</xsl:text>
-    <xsl:value-of select="attribute::destdir"/>
-    <xsl:text>&quot;, </xsl:text>
-    <xsl:choose>
-      <xsl:when test="classpath">
-        <xsl:text>&quot;</xsl:text>
-        <xsl:value-of select="classpath/attribute::refid"/>
-        <xsl:text>&quot;</xsl:text>
-      </xsl:when>
-      <xsl:otherwise>
-        <xsl:text>null</xsl:text>
-      </xsl:otherwise>
-    </xsl:choose>
-    <xsl:text>);&#10;</xsl:text>
-  </xsl:template>
-
-  <xsl:template match="jar">
-    <xsl:text>        helper.jar(&quot;</xsl:text>
-    <xsl:value-of select="attribute::basedir"/>
-    <xsl:text>&quot;, &quot;</xsl:text>
-    <xsl:value-of select="attribute::jarfile"/>
-    <xsl:text>&quot;,&#10;                   </xsl:text>
-    <xsl:choose>
-      <xsl:when test="metainf">
-        <xsl:text>&quot;</xsl:text>
-        <xsl:value-of select="metainf/attribute::dir"/>
-        <xsl:text>&quot;, </xsl:text>
-        <xsl:choose>
-          <xsl:when test="metainf/attribute::includes">
-            <xsl:text>&quot;</xsl:text>
-            <xsl:value-of select="metainf/attribute::includes"/>
-            <xsl:text>&quot;, </xsl:text>
-          </xsl:when>
-          <xsl:otherwise>
-            <xsl:text>null, </xsl:text>
-          </xsl:otherwise>
-        </xsl:choose>
-      </xsl:when>
-      <xsl:otherwise>
-        <xsl:text>null, null, </xsl:text>
-      </xsl:otherwise>
-    </xsl:choose>
-    <xsl:choose>
-      <xsl:when test="manifest/attribute[attribute::name='Class-Path']">
-        <xsl:text>&quot;</xsl:text>
-        <xsl:value-of select="manifest/attribute[attribute::name='Class-Path']/attribute::value"/>
-        <xsl:text>&quot;, </xsl:text>
-      </xsl:when>
-      <xsl:otherwise>null, </xsl:otherwise>
-    </xsl:choose>
-    <xsl:choose>
-      <xsl:when test="manifest/attribute[attribute::name='Main-Class']">
-        <xsl:text>&quot;</xsl:text>
-        <xsl:value-of select="manifest/attribute[attribute::name='Main-Class']/attribute::value"/>
-        <xsl:text>&quot;</xsl:text>
-      </xsl:when>
-      <xsl:otherwise>null</xsl:otherwise>
-    </xsl:choose>
-    <xsl:text>);&#10;</xsl:text>
-  </xsl:template>
-
-  
-  <xsl:template match="copy/fileset">
-    <xsl:choose>
-      <xsl:when test="attribute::refid">
-        <xsl:text>        helper.copyFilesetRef(&quot;</xsl:text>
-        <xsl:value-of select="attribute::refid"/>
-        <xsl:text>&quot;, &quot;</xsl:text>
-        <xsl:value-of select="../attribute::todir"/>
-        <xsl:text>&quot;);&#10;</xsl:text>
-      </xsl:when>
-      <xsl:otherwise>
-        <xsl:text>        helper.copyFileset(&quot;</xsl:text>
-        <xsl:value-of select="attribute::dir"/>
-        <xsl:text>&quot;, &quot;</xsl:text>
-        <xsl:value-of select="../attribute::todir"/>
-        <xsl:text>&quot;);&#10;</xsl:text>
-      </xsl:otherwise>
-    </xsl:choose>
-  </xsl:template>
-</xsl:stylesheet>
diff --git a/proposal/mutant/build/docs.xml b/proposal/mutant/build/docs.xml
deleted file mode 100644
index ca7cf51..0000000
--- a/proposal/mutant/build/docs.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-<project name="build-site" default="docs" basedir=".">
-
-    <!-- Initialization properties -->
-    <property name="project.name" value="mutant"/>
-    <property name="docs.src"     location="xdocs"/>
-    <property name="docs.dest"    location="docs"/>
-    <property name="project.file" value="stylesheets/project.xml" />
-    <property name="site.dir"     location="../../../jakarta-site2" />
-    <property name="templ.path"   location="xdocs/stylesheets" />
-    <property name="velocity.props"   location="${docs.src}/velocity.properties" />
-
-    <path id="anakia.classpath">
-        <fileset dir="${site.dir}/lib">
-            <include name="*.jar"/>
-        </fileset>
-    </path>
-
-    <target name="prepare">    
-        <available classname="org.apache.velocity.anakia.AnakiaTask" 
-                   property="AnakiaTask.present">
-            <classpath refid="anakia.classpath"/>
-        </available>
-    </target>
-
-    <target depends="prepare" name="prepare-error" unless="AnakiaTask.present">
-        <echo>
-            AnakiaTask is not present! Please check to make sure that 
-            velocity.jar is in your classpath.
-        </echo>
-    </target>
-
-    <target name="docs" depends="prepare-error" if="AnakiaTask.present">
-        <taskdef name="anakia" classname="org.apache.velocity.anakia.AnakiaTask">
-            <classpath refid="anakia.classpath"/>
-        </taskdef>
-        
-        <anakia basedir="${docs.src}" destdir="${docs.dest}/"
-             extension=".html" style="./site.vsl"
-             projectFile="${project.file}"
-             excludes="**/stylesheets/** faq.xml"
-             includes="**/*.xml"
-             lastModifiedCheck="true"
-             templatePath="${templ.path}"
-             velocityPropertiesFile="${velocity.props}">
-        </anakia>
-    </target>
-    
-    <target name="all" depends="docs"/>
-</project>
diff --git a/proposal/mutant/build/script.xml b/proposal/mutant/build/script.xml
deleted file mode 100644
index aa1fdac..0000000
--- a/proposal/mutant/build/script.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-<project default="build" name="Ant2 script tasks" basedir="..">
-
-  <property name="src.dir" value="src"/>
-  <property name="lib.dir" value="lib"/>
-  <property name="java.dir" value="${src.dir}/java"/>
-
-  <property name="bin.dir" value="bin"/>
-  <property name="dist.dir" value="dist"/>
-  <property name="javadocs.dir" value="${dist.dir}/javadocs"/>
-  <property name="distlib.dir" value="${dist.dir}/lib"/>
-  
-  <property name="debug" value="true"/>
-
-  <property name="ant.package" value="org/apache/tools/ant"/>
-  <property name="optional.package" value="${ant.package}/taskdefs/optional"/>
-  <property name="optional.type.package" value="${ant.package}/types/optional"/>
-  <property name="util.package" value="${ant.package}/util"/>
-  <property name="regexp.package" value="${util.package}/regexp"/>
-
-  
-  <path id="classpath.script">
-    <pathelement location="${distlib.dir}/init.jar"/>
-    <fileset dir="${lib.dir}/antlib/script" includes="*.jar"/>
-    <pathelement location="${distlib.dir}/common/common.jar"/>
-  </path>
-
-  <target name="check_bsf">
-    <available property="bsf.present"
-               classname="com.ibm.bsf.BSFManager"
-               classpathref="classpath.script" />
-  </target>
-  
-  <target name="nobsf" unless="bsf.present">
-    <echo message="You must provide the bsf.jar library in the ${lib.dir}/antlib/script directory"/>
-  </target>
-  
-  <target name="build" depends="check_bsf, nobsf" if="bsf.present">
-    <mkdir dir="${bin.dir}/antlibs/script"/>
-    <mkdir dir="${distlib.dir}/antlibs"/>
-    <depend destdir="${bin.dir}/antlibs/script" srcdir="${java.dir}/antlibs/script">
-      <classpath refid="classpath.script"/>
-    </depend>
-    <javac destdir="${bin.dir}/antlibs/script" srcdir="${java.dir}/antlibs/script" debug="${debug}">
-      <classpath refid="classpath.script"/>
-    </javac>
-    <jar basedir="${bin.dir}/antlibs/script" jarfile="${distlib.dir}/antlibs/script.tsk">
-      <metainf dir="${java.dir}/antlibs/script" 
-                includes="antlib.xml"/>
-    </jar>
-  </target>
-</project>
diff --git a/proposal/mutant/docs/desc.html b/proposal/mutant/docs/desc.html
deleted file mode 100644
index b295763..0000000
--- a/proposal/mutant/docs/desc.html
+++ /dev/null
@@ -1,693 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-
-<!-- Content Stylesheet for Site -->
-
-        
-<!-- start the processing -->
-    <html>
-    <head>
-      <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
-  
-                      <meta name="author" value="Conor MacNeill">
-        
-      <title>The Jakarta Site - Mutant Design Notes</title>
-    </head>
-  
-    <body bgcolor="#ffffff" text="#000000" link="#525D76">    
-      <table border="0" width="100%" cellspacing="0">
-        <!-- TOP IMAGE -->
-        <tr>
-                <td colspan="2">
-    <a href="http://jakarta.apache.org"><img src="http://jakarta.apache.org/images/jakarta-logo.gif" align="left" border="0"/></a>
-    </td>
-          </tr>
-      </table>
-      <table border="0" width="100%" cellspacing="4">
-        <tr><td colspan="2">
-          <hr noshade="" size="1"/>
-        </td></tr>
-        
-        <tr>
-          <!-- LEFT SIDE NAVIGATION -->
-          <td valign="top" nowrap="true">
-                <p><strong>Apache Ant</strong></p>
-    <ul>
-          <li>      <a href="./index.html">Front Page</a>
-  </li>
-          <li>      <a href="./antnews.html">News</a>
-  </li>
-          <li>      <a href="./manual/index.html">Documentation</a>
-  </li>
-          <li>      <a href="./external.html">External Tools and Tasks</a>
-  </li>
-          <li>      <a href="./resources.html">Resources</a>
-  </li>
-          <li>      <a href="./faq.html">Ant FAQ</a>
-  </li>
-          <li>      <a href="./problems.html">Having Problems?</a>
-  </li>
-        </ul>
-      <p><strong>Download</strong></p>
-    <ul>
-          <li>      <a href="http://jakarta.apache.org/site/binindex.html">Binaries</a>
-  </li>
-          <li>      <a href="http://jakarta.apache.org/site/sourceindex.html">Source Code</a>
-  </li>
-        </ul>
-      <p><strong>Jakarta</strong></p>
-    <ul>
-          <li>      <a href="http://jakarta.apache.org/site/news.html">News & Status</a>
-  </li>
-          <li>      <a href="http://jakarta.apache.org/site/mission.html">Mission</a>
-  </li>
-          <li>      <a href="http://jakarta.apache.org/site/guidelines.html">Guidelines Notes</a>
-  </li>
-          <li>      <a href="http://jakarta.apache.org/site/faqs.html">FAQs</a>
-  </li>
-        </ul>
-      <p><strong>Get Involved</strong></p>
-    <ul>
-          <li>      <a href="http://jakarta.apache.org/site/getinvolved.html">Overview</a>
-  </li>
-          <li>      <a href="http://jakarta.apache.org/site/cvsindex.html">CVS Repositories</a>
-  </li>
-          <li>      <a href="http://jakarta.apache.org/site/mail.html">Mailing Lists</a>
-  </li>
-          <li>      <a href="http://jakarta.apache.org/site/library.html">Reference Library</a>
-  </li>
-          <li>      <a href="http://nagoya.apache.org/bugzilla/enter_bug.cgi?product=Ant">Bug Database</a>
-  </li>
-          <li>      <a href="http://nagoya.apache.org/bugzilla/enter_bug.cgi?product=Ant&bug_severity=Enhancement">Enhancement Requests</a>
-  </li>
-        </ul>
-            </td>
-          <td align="left" valign="top">
-        <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#525D76">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Mutant Design Notes"><strong>Mutant Design Notes</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>
-This is a brief, albeit rambling description of Mutant.
-Mutant has many experimental ideas which may or may not prove useful.
-I'll try to describe what is there and let anyone who is interested
-comment. Mutant is still immature. You'll notice that there is, at this
-time, just one task, a hacked version of the echo task, which I have
-been using to test out ideas. Most tasks would end up being pretty
-similar to their Ant 1.x version.
-</p>
-                                <p>
-OK, let me start with some of the motivating requirements. There are of
-coure many Ant2 requirements but I want to focus on these two for now.
-Mutant does also address many of the other Ant2 requirements. 
-</p>
-                                <p>
-I'll use the terms Ant and mutant somewhat interchangeably - just
-habit, not an assumption of any sort.
-</p>
-                                <p>
-One of the things which is pretty difficult in Ant 1.x is the
-management of classpaths and classloaders. For example, today the
-antlr task requires the antlr classes in the classpath used to start
-ant. I'm talking here about the classpath built up in the ant.bat/ant
-script launchers. At the same time, the checkstyle task
-which uses antlr won't run if the antlr classes are in the classpath
-because then those classes cannot "see" the classes in the taskdef's
-classpath.
-</p>
-                                <p>
-Another requirement I have is extensibility. In Ant 1.x this is
-difficult because whenever a new type is created, each task which
-needs to support this type must be changed to provide the new addXXX
-method. The ejbjar task is on example of this problem with its concept of vendor
-specific tools. The zip/jar task, with its support for different types
-of fileset, is another. The addition of the classfileset to Ant requires
-a change to the zip task.
-</p>
-                    </blockquote>
-    </td></tr>
-  </table>
-        <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#525D76">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Mutant Initialization"><strong>Mutant Initialization</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>
-Mutant defines a classloader hierarchy somewhat similar to that used
-in Tomcat 4. Tasks join into this hierarchy at a particular point to
-ensure they have visibility of the necessary interface classes and no
-visibility of the Ant core itself. There is nothing particularly novel
-about this approach, but tasks are able to request certain additional resources
-as we will see later.
-</p>
-                                <p>
-Mutant starts with two jars. One is the start.jar which contains just
-one class, Main.java which establishes the initial configuration and
-then runs the appropriate front end command line class. If a different
-front end was desired, a different launch class, in its own jar, would
-be used. This would perhaps configure the classloader hierarchy somewhat
-differently and start the approriate GUI front end class.
-</p>
-                                <p> 
-The second jar, init.jar, provides a number of initialisation utilities. These
-are used by Main.java to setup Ant and would also be used by any other front end
-to configure Ant. The important class here is the
-InitConfig which communicates the state of Ant at startup into the the core of
-Ant when it starts up. Main determines the location of ANT_HOME based on the
-location of the start classes and then populates the InitConfig with both
-classloaders and information about the location of various jars and config
-files.
-</p>
-                                <p> 
-At the top of the classloader hierarchy 
-are the bootstrap and system classloaders. I won't really
-distinguish between these in mutant. Combined they provide the JDK
-classes, plus the classes from the init and start jars. One objective is
-to keep the footprint of the init and start jars small so they do not
-require any external classes, which may then become visible lower in the
-hierarchy. Main does not explicitly create these loaders, of course, but
-just adds a reference to the init config as system class loader 
-</p>
-                                <p> 
-The next jar is for the common area. This provides interface definitions
-and utility classes for use by both the core and by tasks/types etc. It
-is loaded from ANT_HOME/lib/common/*.jar. Typically this is just
-lib/common/common.jar but any other jars in here are loaded. This
-pattern is used in the construction of all of the classloaders.
-</p>
-                                <p> 
-Next up is the core loader. It includes the lib/antcore/antcore.jar plus
-any others including the XML parser jars. Mutant's core does not assume that
-the project model will come from an XML description but XML facilities
-are needed in the core for reading in Ant library defs and config files.
-The parser jar locations are also stored in the init config. This lets
-the jars be added to any Ant library that wants to use Ant's XML parser
-rather than providing its own. Similarly tools.jar's location is
-determined automatically and added to the config for use by tasks which
-request it. I'll go into more detail when discussing the antlib processing. 
-</p>
-                                <p> 
-The final jar that is loaded is the jar for the frontend - cli.jar. This
-is not passed in init config since these classes are not visible to the
-core and are not needed by it. So the hierarchy is
-<pre> 
-jdk classes
-    |
-start/init
-    |
- common
-    |
- antcore
-    |
-   cli
-</pre>
-</p>
-                                <p> 
-Task classloaders generally will come in at common, hiding the core classes, front
-end and XML parser classes from tasks.
-</p>
-                                <p> 
-Once Main has setup the initConfig, it creates the front end commandline
-class and launches mutant proper, passing it the command line args and
-the init config. 
-</p>
-                                <p> 
-A GUI would typically replace start.jar and the cli.jar with its own
-versions which manage model construction from GUI processes rather than
-from XML files. It may be possible to move some of Main.java's
-processing into init.jar if it is useful to other front ends. I haven't
-looked at that balance.
-</p>
-                    </blockquote>
-    </td></tr>
-  </table>
-        <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#525D76">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Mutant Frontend"><strong>Mutant Frontend</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>
-The front end is responsible for coordinating execution of Ant. It
-manages command line arguments, builds a model of the Project to be
-evaluated and coordinates the execution services of the core. cli.jar
-contains not only the front-end code but also the XML parsing code for
-building a project model from an XML description. Other front ends may
-choose to build project models in different ways. Commandline is pretty
-similar to Ant 1.x's Main.java - it handles arguments, building loggers,
-listeners, defines, etc - actually I haven't fully implemented 
-command line defines in
-mutant yet but it would be similar to Ant 1.x. 
-</p>
-                                <p>
-Commandline then moves to building a project model from the XML
-representation. I have just expanded the approach in Ant 1's
-ProjectHelper for XML parsing, moving away from a stack of inner classes.
-The classes in the front end XML parsing use some XML utility base
-classes from the core. 
-</p>
-                                <p>
-The XML parsing handles two elements at parse time. One is the &lt;ref&gt;
-element which is used for project references - that is relationships
-between project files. The referenced project is parsed as well. The
-second is the &lt;include&gt; element which includes either another complete
-project or a project &lt;fragment&gt; directly into the project. All the other
-elements are used to build a project model which is later processed in
-the core.
-</p>
-                                <p>
-The project model itself is organized like this
-</p>
-                                <p>
-<ul>
-  <li>A project contains</li>
-    <ul>
-      <li>named references to other projects</li>
-      <li>targets</li>
-      <li>build elements (tasks, type instances)</li>
-    </ul>
-    
-  <li>A target contains</li>
-    <ul>
-      <li>build elements (tasks, type instances)</li>
-    </ul>
- 
-
-  <li>A build element contains</li>
-    <ul>
-      <li>build elements (nested elements)</li>
-    </ul>
-</ul>
-</p>
-                                <p>
-So, for now the project model contains top level tasks and type
-instances. I'm still thinking about those and property scoping
-especially in the face of project refs and property overrides. Anyway,
-the running of these tasks is currently disabled.
-</p>
-                                <p>
-Once the model is built, the commandline creates an execution manager
-instance, passing it the initConfig built by Main.jar. It adds build
-listeners and then starts the build using the services of the
-ExecutionManager.
-</p>
-                    </blockquote>
-    </td></tr>
-  </table>
-        <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#525D76">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Ant Libraries"><strong>Ant Libraries</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>
-Before we get into execution proper, I'll deal with the structure of an
-ant library and how it works. An antlibrary is a jar file with a library
-descriptor located in META-INF/antlib.xml. This defines what
-typedefs/taskdefs/converters the library makes available to Ant. The
-classes or at least some of the classes for the library will normally be
-available in the jar. The descriptor looks like this (I'll provide two
-examples here)
-</p>
-                                <p>
-<pre>
-&lt;antlib libid="ant.io" 
-        home="http://jakarta.apache.org/ant"
-        isolated="true"&gt;
-  &lt;typedef name="thread" classname="java.lang.Thread"/&gt;
-  &lt;taskdef name="echo" classname="org.apache.ant.taskdef.io.Echo"/&gt;
-
-  &lt;converter classname="org.apache.ant.taskdef.io.FileConverter"/&gt;
-&lt;/antlib&gt;
-
-&lt;antlib libid="ant.file" 
-        home="http://jakarta.apache.org/ant"
-        reqxml="true" reqtools="true" extends="ant.io"
-        isolated="true"&gt;
-  &lt;taskdef name="copy" classname="org.apache.ant.file.copy"/&gt;
-&lt;/antlib&gt;        
-</pre>
-</p>
-                                <p>
-the "libid" attribute is used to globally identify a library. It is used
-in Ant to pick which tasks you want to make available to a build file.
-As the number of tasks available goes up, this is used to prevent name
-collisions, etc. The name is constructed similarly to a Java package name -
-i.e Reverse DNS order.
-</p>
-                                <p>
-The "home" attribute is a bit of fluff unused by mutant to allow tools
-to manage libraries and update them etc. More thought could go into
-this.
-</p>
-                                <p>
-"reqxml" allows a library to say that it wants to use Ant's XML parser
-classes. Note that these will be coming from the library's classloader
-so they will not, in fact, be the same runtime classes as used in Ant's core, 
-but it saves tasks packaging their own XML parsers. 
-</p>
-                                <p>
-"reqtools" allows a library to specify that it uses classes from Sun's
-tools.jar file. Again, if tools.jar is available it will be added to the
-list of classes in the library's classloader
-</p>
-                                <p>
-"extends" allows for a single "inheritance" style relationship between
-libraries. I'm not sure how useful this may be yet but it seems
-important for accessing common custom types. It basically translates
-into the class loader for this library using the one identified in
-extends as its parent. 
-</p>
-                                <p>
-"isolate" specifies that each task created from this libary comes from
-its own classloader. This can be used with tasks derived from Java
-applications which have static initialisers. This used to be an issue
-with the Anakia task, for example. Similarly it could be used to ensure that
-tool.jar classes are unloaded to stop memory leaks. Again this is
-experimental so may not prove ultimately useful.
-</p>
-                                <p>
-The &lt;typedef&gt; in the example creates a &lt;thread&gt; type. That is just a bit of fun which
-I'll use in an example later. It does show the typedefing of a type from
-outside the ant library however.
-</p>
-                                <p>
-&lt;taskdef&gt; is pretty obvious. It identifies a taskname with a class from
-the library. The import task, which I have not yet implemented will
-allow this name to be aliased - something like
-</p>
-                                <p>
-&lt;import libid="ant.file" task="echo" alias="antecho"/&gt;
-</p>
-                                <p>
-Tasks are not made available automatically. The build file must state
-which tasks it wants to use using an &lt;import&gt; task. This is similar to
-Java's import statement. Similarly classes whose ids start with "ant."
-are fully imported at the start of execution.
-</p>
-                    </blockquote>
-    </td></tr>
-  </table>
-        <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#525D76">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Mutant Configuration"><strong>Mutant Configuration</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>
-When mutant starts execution, it reads in a config file. Actually it
-attempts to read two files, one from $ANT_HOME/conf/antconfig.xml and
-another from $HOME/.ant/antconfig.xml. Others could be added even
-specified in the command line. These config files are used to provide
-two things - libpaths and task dirs.
-</p>
-                                <p>
-Taskdirs are locations to search for additional ant libraries. As people
-bundle Ant tasks and types with their products, it will not be practical
-to bundle all this into ANT_HOME/lib. These additional dirs are scanned
-for ant libraries. All .zip/.jar/.tsk files which contain the
-META-INF/antlib.xml file will be processed. 
-</p>
-                                <p>
-Sometimes, of course, the tasks and the libraries upon which they depend
-are not produced by the same people. It is not feasible to go in and
-edit manifests to connect the ant library with its required support
-jars, so the libpath element in the config file is used to specify
-additional paths to be added to a library's classloader. An example
-config would be 
-</p>
-                                <p>
-<pre>
-&lt;antconfig&gt;
-  &lt;libpath libid="ant.file" path="fubar"/&gt;
-  &lt;libpath libid="ant.file" url="http://fubar"/&gt;
-&lt;/antconfig&gt;
-</pre>
-</p>
-                                <p>
-Obviously other information can be added to the config - standard
-property values, compiler prefs, etc. I haven't done that yet. User
-level config override system level configs.
-</p>
-                                <p>
-So, when a ant library creates a classloader, it will take a number of
-URLS. One is the task library itself, the XML parser classes if
-requested, the tools.jar if requested, and any additional libraries
-specified in the &lt;antconfig&gt;. The parent loader is the common loader
-from the initconfig. unless this library is an extending library.
-</p>
-                    </blockquote>
-    </td></tr>
-  </table>
-        <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#525D76">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Mutant Execution"><strong>Mutant Execution</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>
-Execution of a build is provided by the core through two key classes.
-One if the ExecutionManager and the other is the ExecutionFrame. An
-execution frame is created for each project in the project model
-hierarchy. It represents the execution state of the project - data
-values, imported tasks, typedefs, taskdefs, etc.
-</p>
-                                <p>
-The ExecutionManager begins by reading configs, searching for ant
-libraries, configuring and appending any additional paths, etc. It then
-creates a root ExecutionFrame which represents the root project. when a
-build is commenced, the project model is validated and then passed to
-the ExecutionFrame.
-</p>
-                                <p>
-the ExecutionFrame is the main execution class. When it is created it
-imports all ant libraries with ids that start with ant.*. All others are
-available but must be explicitly imported with &lt;import&gt; tasks. When the
-project is passed in, ExecutionFrames are created for any referenced
-projects. This builds an ExecutionFrame hierarchy which parallels the
-project hierarchy. Each &lt;ref&gt; uses a name to identify the referenced
-project. All property and target references use these reference names to
-identify the particular frame that hold the data. As an example, look at
-this build file
-</p>
-                                <p>
-<pre>
-&lt;project default="test" basedir=".." doc:Hello="true"&gt;
-
-  &lt;ref project="test.ant" name="reftest"/&gt;
-
-  &lt;target name="test" depends="reftest:test2"&gt;
-    &lt;echo message="hello"/&gt;
-  &lt;/target&gt;
-
-&lt;/project&gt;
-</pre>
-</p>
-                                <p>
-Notice the depends reference to the test2 target in the test.ant project
-file. I am still using the ":" as a separator for refs. It doesn't
-collide with XML namespaces so that should be OK.
-</p>
-                                <p>
-Execution proceeds by determining the targets in the various frames
-which need to be executed. The appropriate frame is requested to execute
-the target's tasks and type instances. The imports for the frame are
-consulted to determine what is the approrpiate library and class from
-that library. A classloader is fetched, the class is instantiated,
-introspected and then configured from the corresponding part of the
-project model. Ant 1.x's IntrospectionHelper has been split into two -
-the ClassIntrospector and the Reflector. When the task is being
-configured, the context classloader is set. Similarly it is set when the
-task is being executed. Types are handled similarly. When a type in
-instantiated or a task executed, and they support the appropriate
-interface, they will be passed a context through which they can access
-the services of the core. Currently the context is an interface although
-I have wondered if an abstract class may be better to handle expansion
-of the services available over time.
-</p>
-                    </blockquote>
-    </td></tr>
-  </table>
-        <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="#525D76">
-      <font color="#ffffff" face="arial,helvetica,sanserif">
-        <a name="Introspection and Polymorphism"><strong>Introspection and Polymorphism</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-                        <p>
-Introspection is not a lot different from Ant 1.x. After some thought I
-have dropped the createXXX method to allow for polymorphic type support, discussed
-below. setXXX methods, coupled with an approriate string to
-type converter are used for attributes. addXXX methods are used for
-nested elements. All of the value setting has been moved to a Reflector
-object. Object creation for addXXX methods is no longer provided in the
-reflector class, just the storage of the value. This allows support for
-add methods defined in terms of interfaces. For example, the hacked Echo
-task I am using has this definition
-</p>
-                                <p>
-<pre>
-    /**
-     * testing
-     *
-     * @param runnable testing
-     */
-    public void addRun(Runnable runnable) {
-        log("Adding runnable of type "
-             + runnable.getClass().getName(), MessageLevel.MSG_WARN);
-    }
-</pre>
-</p>
-                                <p>
-So when mutant encounteres a nested element it does the following checks
-</p>
-                                <p>
-Is the value specified by reference?
-</p>
-                                <p>
-&lt;run ant:refid="test"/&gt;
-</p>
-                                <p>
-Is it specified by as a polymorphic type?
-</p>
-                                <p>
-&lt;run ant:type="thread"/&gt;
-</p>
-                                <p>
-or is it just a normal run o' the mill nested element, which is
-instantiated by a zero arg constructor. 
-</p>
-                                <p>
-Note the use of the ant namespace for the metadata. In essence the
-nested element name &lt;run&gt; identifies the add method to be used, while
-the refId or type elements specify the actual instance or type to be
-used. The ant:type identifies an Ant datatype to be instantiated. If
-neither is specified, the type that is expected by the identified
-method, addRun in this case, is used to create an instance. In this case
-that would fail. 
-</p>
-                                <p>
-Polymorphism, coupled with typedefs is one way, and a good way IMHO, of
-solving the extensibility of tasks such as ejbjar.
-</p>
-                                <p>
-OK, that is about the size of it. Let me finish with two complete build
-files and the result of running mutant on them.
-</p>
-                                <h3>build.ant</h3>
-                                <p>
-<pre>
-&lt;project default="test" basedir=".." doc:Hello="true"&gt;
-
-  &lt;ref project="test.ant" name="reftest"/&gt; 
-
-  &lt;target name="test" depends="reftest:test2"&gt;
-    &lt;echo message="hello"/&gt;
-  &lt;/target&gt;
-
-&lt;/project&gt;
-</pre>
-</p>
-                                <h3>test.ant</h3>
-                                <p>
-<pre>
-&lt;project default="test" basedir="." doc:Hello="true"&gt;
-  &lt;target name="test2"&gt;
-    &lt;thread ant:id="testit"/&gt;
-    &lt;echo message="hello2"&gt;
-        &lt;run ant:refid="testit"&gt;       
-        &lt;/run&gt;
-    &lt;/echo&gt;
-
-    &lt;echo message="hello3"&gt;
-        &lt;run ant:type="thread"&gt;       
-        &lt;/run&gt;
-    &lt;/echo&gt;
-  &lt;/target&gt;
-
-&lt;/project&gt;
-</pre>
-</p>
-                                <p>
-If I run mutant via a simple script which has just one line
-</p>
-                                <p>
-java -jar /home/conor/dev/mutant/dist/lib/start.jar $*
-</p>
-                                <p>
-I get this
-</p>
-                                <p>
-<pre>
-test2:
-     [echo] Adding runnable of type java.lang.Thread
-     [echo] hello2
-     [echo] Adding runnable of type java.lang.Thread
-     [echo] hello3
-
-test:
-     [echo] hello
-
-BUILD SUCCESSFUL
-
-Total time: 0 seconds
-</pre>
-</p>
-                                <p>
-Lets change the &lt;run&gt; definition to 
-</p>
-                                <p>
-&lt;run/&gt; in test.ant and the result becomes
-</p>
-                                <p>
-<pre>
-test2:
-     [echo] Adding runnable of type java.lang.Thread
-     [echo] hello2
-
-BUILD FAILED
-
-/home/conor/dev/mutant/test/test.ant:10: 
-No element can be created for nested element &lt;run&gt;. 
-Please provide a value by reference or specify the value type
-</pre>
-</p>
-                    </blockquote>
-    </td></tr>
-  </table>
-              </td>
-        </tr>
-
-        <!-- FOOTER -->
-        <tr><td colspan="2">
-          <hr noshade="" size="1"/>
-        </td></tr>
-        <tr><td colspan="2">
-          <div align="center"><font color="#525D76" size="-1"><em>
-          Copyright &#169; 2000-2002, Apache Software Foundation
-          </em></font></div>
-        </td></tr>
-      </table>
-    </body>
-  </html>
-<!-- end the processing -->
-
-
-
-
diff --git a/proposal/mutant/lib/ant1compat/readme.txt b/proposal/mutant/lib/ant1compat/readme.txt
deleted file mode 100644
index a0f3eff..0000000
--- a/proposal/mutant/lib/ant1compat/readme.txt
+++ /dev/null
@@ -1 +0,0 @@
-Libraries required to build ant1 components go here
diff --git a/proposal/mutant/lib/antlib/script/readme.txt b/proposal/mutant/lib/antlib/script/readme.txt
deleted file mode 100644
index 3e289ee..0000000
--- a/proposal/mutant/lib/antlib/script/readme.txt
+++ /dev/null
@@ -1 +0,0 @@
-Please any jars in here which should be used when building the script antlib
diff --git a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/antlib/AntLibDefinition.java b/proposal/mutant/src/java/antcore/org/apache/ant/antcore/antlib/AntLibDefinition.java
deleted file mode 100755
index b85d815..0000000
--- a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/antlib/AntLibDefinition.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.antcore.antlib;
-
-/**
- * This class represents a definition in an AntLibrary.
- *
- * @author Conor MacNeill
- * @created 19 January 2002
- */
-public class AntLibDefinition {
-    /** The type of element being defined int his definition */
-    private int definitionType;
-    /** The default name for the defintion */
-    private String definitionName;
-    /** The classname associated with the object */
-    private String definitionClassName;
-
-    /**
-     * Create a definition
-     *
-     * @param definitionName the default name of this definition when it is
-     *      imported
-     * @param definitionClassName the name of the class which is being
-     *      defined
-     * @param definitionType the type of the definition (taskdef, typedef,
-     *      etc)
-     */
-    public AntLibDefinition(int definitionType, String definitionName,
-                            String definitionClassName) {
-        this.definitionName = definitionName;
-        this.definitionType = definitionType;
-        this.definitionClassName = definitionClassName;
-    }
-
-    /**
-     * Get the type of this definition
-     *
-     * @return the definition type
-     * @see AntLibrary for values
-     */
-    public int getDefinitionType() {
-        return definitionType;
-    }
-
-    /**
-     * Get the default name for this definition
-     *
-     * @return the default name for this definition
-     */
-    public String getDefinitionName() {
-        return definitionName;
-    }
-
-    /**
-     * Get the classname being defined
-     *
-     * @return the classname of this definition
-     */
-    public String getClassName() {
-        return definitionClassName;
-    }
-}
-
diff --git a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/antlib/AntLibHandler.java b/proposal/mutant/src/java/antcore/org/apache/ant/antcore/antlib/AntLibHandler.java
deleted file mode 100755
index 705930f..0000000
--- a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/antlib/AntLibHandler.java
+++ /dev/null
@@ -1,191 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.antcore.antlib;
-import org.apache.ant.common.util.ConfigException;
-import org.apache.ant.antcore.xml.ElementHandler;
-import org.xml.sax.Attributes;
-import org.xml.sax.SAXParseException;
-
-/**
- * XML Element Handler for Ant library definitions
- *
- * @author Conor MacNeill
- * @created 13 January 2002
- */
-public class AntLibHandler extends ElementHandler {
-    /** The library identifier attribute name */
-    public static final String LIBID_ATTR = "libid";
-    /** The home attribute name */
-    public static final String HOME_ATTR = "home";
-    /**
-     * The name of the attribute which indicates if Ant's XML parser is to
-     * be made available
-     */
-    public static final String REQXML_ATTR = "reqxml";
-    /** The extends attribute name */
-    public static final String EXTENDS_ATTR = "extends";
-    /** The name of the attribute which indicates tools jar is required */
-    public static final String REQTOOLS_ATTR = "reqtools";
-    /** The extends attribute name */
-    public static final String ISOLATED_ATTR = "isolated";
-
-    
-    /** The list of allowed Attributes */
-    public static final String[] ALLOWED_ATTRIBUTES
-         = {LIBID_ATTR, HOME_ATTR, REQXML_ATTR, REQTOOLS_ATTR,
-        EXTENDS_ATTR, ISOLATED_ATTR};
-
-    /** The Ant Library definition being parsed. */
-    private AntLibrarySpec antLibrarySpec;
-
-    /**
-     * Gets the parsed antLibrary specification
-     *
-     * @return the parsed antLibrary
-     */
-    public AntLibrarySpec getAntLibrarySpec() {
-        return antLibrarySpec;
-    }
-
-    /**
-     * Process the antlib element
-     *
-     * @param elementName the name of the element
-     * @exception SAXParseException if there is a problem parsing the
-     *      element
-     */
-    public void processElement(String elementName)
-         throws SAXParseException {
-        antLibrarySpec = new AntLibrarySpec();
-
-        if (getAttribute(LIBID_ATTR) == null) {
-            throw new SAXParseException("antlib must have an libid sttribute",
-                getLocator());
-        }
-        antLibrarySpec.setLibraryId(getAttribute(LIBID_ATTR));
-        antLibrarySpec.setHome(getAttribute(HOME_ATTR));
-        antLibrarySpec.setExtendsLibraryId(getAttribute(EXTENDS_ATTR));
-        antLibrarySpec.setIsolated(getBooleanAttribute(ISOLATED_ATTR));
-        antLibrarySpec.setAntXML(getBooleanAttribute(REQXML_ATTR));
-        antLibrarySpec.setToolsJarRequired(getBooleanAttribute(REQTOOLS_ATTR));
-    }
-
-    /**
-     * Start a new element in the antlibrary.
-     *
-     * @param uri The Namespace URI.
-     * @param localName The local name (without prefix).
-     * @param qualifiedName The qualified name (with prefix)
-     * @param attributes The attributes attached to the element.
-     * @throws SAXParseException if there is a parsing problem.
-     */
-    public void startElement(String uri, String localName, String qualifiedName,
-                             Attributes attributes)
-         throws SAXParseException {
-        try {
-            if (qualifiedName.equals("taskdef")
-                 || qualifiedName.equals("typedef")) {
-                DefinitionHandler defnHandler
-                     = new DefinitionHandler(qualifiedName);
-                defnHandler.start(getParseContext(), getXMLReader(),
-                    this, getLocator(), attributes, getElementSource(),
-                    qualifiedName);
-                antLibrarySpec.addDefinition(defnHandler.getDefinitionType(),
-                    defnHandler.getName(), defnHandler.getClassName());
-            } else if (qualifiedName.equals("converter")) {
-                ClassNameHandler converterHandler
-                    = new ClassNameHandler();
-                converterHandler.start(getParseContext(), getXMLReader(),
-                    this, getLocator(), attributes, getElementSource(),
-                    qualifiedName);
-                antLibrarySpec.addConverter(converterHandler.getClassName());
-            } else if (qualifiedName.equals("factory")) {
-                ClassNameHandler factoryHandler
-                    = new ClassNameHandler();
-                factoryHandler.start(getParseContext(), getXMLReader(),
-                    this, getLocator(), attributes, getElementSource(),
-                    qualifiedName);
-                String factoryClass = factoryHandler.getClassName();
-                antLibrarySpec.setFactory(factoryClass);
-            } else {
-                super.startElement(uri, localName, qualifiedName, attributes);
-            }
-        } catch (ConfigException e) {
-            throw new SAXParseException(e.getMessage(), getLocator());
-        }
-    }
-
-    /**
-     * Validate that the given attribute and value are valid.
-     *
-     * @param attributeName The name of the attributes
-     * @param attributeValue The value of the attributes
-     * @exception SAXParseException if the attribute is not allowed on the
-     *      element.
-     */
-    protected void validateAttribute(String attributeName,
-                                     String attributeValue)
-         throws SAXParseException {
-        for (int i = 0; i < ALLOWED_ATTRIBUTES.length; ++i) {
-            if (attributeName.equals(ALLOWED_ATTRIBUTES[i])) {
-                return;
-            }
-        }
-        throwInvalidAttribute(attributeName);
-    }
-
-
-}
-
-
diff --git a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/antlib/AntLibManager.java b/proposal/mutant/src/java/antcore/org/apache/ant/antcore/antlib/AntLibManager.java
deleted file mode 100644
index bb8f131..0000000
--- a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/antlib/AntLibManager.java
+++ /dev/null
@@ -1,367 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.antcore.antlib;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import org.apache.ant.antcore.xml.ParseContext;
-import org.apache.ant.antcore.xml.XMLParseException;
-import org.apache.ant.common.util.CircularDependencyChecker;
-import org.apache.ant.common.util.CircularDependencyException;
-import org.apache.ant.common.util.ExecutionException;
-import org.apache.ant.init.InitConfig;
-import org.apache.ant.init.InitUtils;
-import org.apache.ant.init.LoaderUtils;
-
-/**
- * This class manages the configuration of Ant Libraries
- *
- * @author Conor MacNeill
- * @created 29 January 2002
- */
-public class AntLibManager {
-
-    /** The list of extensions which are examined for ant libraries */
-    public static final String[] ANTLIB_EXTENSIONS
-         = new String[]{".tsk", ".jar", ".zip"};
-
-    /** Flag which indicates whether non-file URLS are used */
-    private boolean remoteAllowed;
-
-    /**
-     * Constructor for the AntLibManager object
-     *
-     * @param remoteAllowed true if remote libraries can be used and
-     *      configured
-     */
-    public AntLibManager(boolean remoteAllowed) {
-        this.remoteAllowed = remoteAllowed;
-    }
-
-    /**
-     * Add all the Ant libraries that can be found at the given URL
-     *
-     * @param librarySpecs A map to which additional library specifications
-     *      are added.
-     * @param libURL the URL from which Ant libraries are to be loaded
-     * @exception MalformedURLException if the URL for the individual
-     *      library components cannot be formed
-     * @exception ExecutionException if the library specs cannot be parsed
-     */
-    public void addAntLibraries(Map librarySpecs, URL libURL)
-         throws MalformedURLException, ExecutionException {
-        URL[] libURLs = LoaderUtils.getLocationURLs(libURL, libURL.toString(),
-            ANTLIB_EXTENSIONS);
-
-        if (libURLs == null) {
-            return;
-        }
-
-        // parse each task library to get its library definition
-        for (int i = 0; i < libURLs.length; ++i) {
-            URL antLibraryURL = new URL("jar:" + libURLs[i]
-                 + "!/META-INF/antlib.xml");
-            try {
-                AntLibrarySpec antLibrarySpec = parseLibraryDef(antLibraryURL);
-                if (antLibrarySpec != null) {
-                    String libraryId = antLibrarySpec.getLibraryId();
-                    if (librarySpecs.containsKey(libraryId)) {
-                        AntLibrarySpec currentSpec 
-                            = (AntLibrarySpec) librarySpecs.get(libraryId);
-                        throw new ExecutionException("Found more than one "
-                             + "copy of library with id = " + libraryId 
-                             + " (" + libURLs[i] + ") + existing library at ("
-                             + currentSpec.getLibraryURL() + ")");
-                    }
-                    antLibrarySpec.setLibraryURL(libURLs[i]);
-                    librarySpecs.put(libraryId, antLibrarySpec);
-                }
-            } catch (XMLParseException e) {
-                Throwable t = e.getCause();
-                // ignore file not found exceptions - means the
-                // jar does not provide META-INF/antlib.xml
-                if (!(t instanceof FileNotFoundException)) {
-                    throw new ExecutionException("Unable to parse Ant library "
-                         + libURLs[i], e);
-                }
-            }
-        }
-    }
-
-    /**
-     * Configures the Ant Libraries. Configuration of an Ant Library
-     * involves resolving any dependencies between libraries and then
-     * creating the class loaders for the library
-     *
-     * @param librarySpecs the loaded specifications of the Ant libraries
-     * @param initConfig the Ant initialization configuration
-     * @param libraries the collection of libraries already configured
-     * @param libPathsMap a map of lists of library paths for each library
-     * @exception ExecutionException if a library cannot be configured from
-     *      the given specification
-     */
-    public void configLibraries(InitConfig initConfig, Map librarySpecs,
-                                Map libraries, Map libPathsMap)
-         throws ExecutionException {
-
-        // check if any already defined
-        for (Iterator i = librarySpecs.keySet().iterator(); i.hasNext();) {
-            String libraryId = (String) i.next();
-            if (libraries.containsKey(libraryId)) {
-                AntLibrary currentVersion
-                     = (AntLibrary) libraries.get(libraryId);
-                // same location?
-                AntLibrarySpec spec 
-                    = (AntLibrarySpec) librarySpecs.get(libraryId); 
-                URL specURL = spec.getLibraryURL();
-                if (!specURL.equals(currentVersion.getDefinitionURL())) {
-                    throw new ExecutionException("Ant Library \"" + libraryId
-                         + "\" is already loaded from "
-                         + currentVersion.getDefinitionURL() 
-                         + " new version found at " 
-                         + specURL);
-                }
-            }
-        }
-
-        CircularDependencyChecker configuring
-             = new CircularDependencyChecker("configuring Ant libraries");
-        for (Iterator i = librarySpecs.keySet().iterator(); i.hasNext();) {
-            String libraryId = (String) i.next();
-            if (!libraries.containsKey(libraryId)) {
-                configLibrary(initConfig, librarySpecs, libraryId,
-                    configuring, libraries, libPathsMap);
-            }
-        }
-    }
-
-    /**
-     * Load either a set of libraries or a single library.
-     *
-     * @param libLocationURL URL where libraries can be found
-     * @param librarySpecs A collection of library specs which will be
-     *      populated with the libraries found
-     * @exception ExecutionException if the libraries cannot be loaded
-     * @exception MalformedURLException if the library's location cannot be
-     *      formed
-     */
-    public void loadLibs(Map librarySpecs, URL libLocationURL)
-         throws ExecutionException, MalformedURLException {
-        if (!libLocationURL.getProtocol().equals("file")
-             && !remoteAllowed) {
-            throw new ExecutionException("The config library "
-                 + "location \"" + libLocationURL
-                 + "\" cannot be used because config does "
-                 + "not allow remote libraries");
-        }
-        addAntLibraries(librarySpecs, libLocationURL);
-    }
-    
-    /**
-     * Load either a set of libraries or a single library.
-     *
-     * @param libLocationString URL or file where libraries can be found
-     * @param librarySpecs A collection of library specs which will be
-     *      populated with the libraries found
-     * @exception ExecutionException if the libraries cannot be loaded
-     * @exception MalformedURLException if the library's location cannot be
-     *      formed
-     */
-    public void loadLibs(Map librarySpecs, String libLocationString)
-         throws ExecutionException, MalformedURLException {
-
-        File libLocation = new File(libLocationString);
-        if (!libLocation.exists()) {
-            try {
-                loadLibs(librarySpecs, new URL(libLocationString));
-            } catch (MalformedURLException e) {
-                // XXX
-            }
-        } else {
-            addAntLibraries(librarySpecs, InitUtils.getFileURL(libLocation));
-        }
-    }
-
-    /**
-     * Add a library path to the given library
-     *
-     * @param antLibrary the library to which the path is to be added
-     * @param path the path to be added
-     * @exception ExecutionException if remote paths are not allowed by
-     *      configuration
-     */
-    public void addLibPath(AntLibrary antLibrary, URL path)
-         throws ExecutionException {
-        if (!path.getProtocol().equals("file")
-             && !remoteAllowed) {
-            throw new ExecutionException("Remote libpaths are not"
-                 + " allowed: " + path);
-        }
-        antLibrary.addLibraryURL(path);
-    }
-
-    /**
-     * Configure a library from a specification and the Ant init config.
-     *
-     * @param initConfig Ant's init config passed in from the front end.
-     * @param librarySpecs the library specs from which this library is to
-     *      be configured.
-     * @param libraryId the global identifier for the library
-     * @param configuring A circualr dependency chcker for library
-     *      dependencies.
-     * @param libraries the collection of libraries which have already been
-     *      configured
-     * @param libPathsMap a map of lists of library patsh fro each library
-     * @exception ExecutionException if the library cannot be configured.
-     */
-    private void configLibrary(InitConfig initConfig, Map librarySpecs,
-                               String libraryId,
-                               CircularDependencyChecker configuring,
-                               Map libraries, Map libPathsMap)
-         throws ExecutionException {
-
-        try {
-            configuring.visitNode(libraryId);
-
-            AntLibrarySpec librarySpec
-                 = (AntLibrarySpec) librarySpecs.get(libraryId);
-            String extendsId = librarySpec.getExtendsLibraryId();
-            if (extendsId != null) {
-                if (!libraries.containsKey(extendsId)) {
-                    if (!librarySpecs.containsKey(extendsId)) {
-                        throw new ExecutionException("Could not find library, "
-                             + extendsId + ", upon which library "
-                             + libraryId + " depends");
-                    }
-                    configLibrary(initConfig, librarySpecs, extendsId,
-                        configuring, libraries, libPathsMap);
-                }
-            }
-
-            // now create the library for the specification
-            AntLibrary antLibrary = new AntLibrary(librarySpec);
-
-            // determine the URLs required for this task. These are the
-            // task URL itself, the XML parser URLs if required, the
-            // tools jar URL if required
-            List urlsList = new ArrayList();
-
-            if (librarySpec.getLibraryURL() != null) {
-                urlsList.add(librarySpec.getLibraryURL());
-            }
-            if (librarySpec.isToolsJarRequired()
-                 && initConfig.getToolsJarURL() != null) {
-                urlsList.add(initConfig.getToolsJarURL());
-            }
-
-            if (librarySpec.usesAntXML()) {
-                URL[] parserURLs = initConfig.getParserURLs();
-                for (int i = 0; i < parserURLs.length; ++i) {
-                    urlsList.add(parserURLs[i]);
-                }
-            }
-
-            for (Iterator i = urlsList.iterator(); i.hasNext();) {
-                antLibrary.addLibraryURL((URL) i.next());
-            }
-            if (extendsId != null) {
-                AntLibrary extendsLibrary
-                     = (AntLibrary) libraries.get(extendsId);
-                antLibrary.setExtendsLibrary(extendsLibrary);
-            }
-            antLibrary.setParentLoader(initConfig.getCommonLoader());
-            libraries.put(libraryId, antLibrary);
-
-            if (libPathsMap != null) {
-                List libPaths = (List) libPathsMap.get(libraryId);
-                if (libPaths != null) {
-                    for (Iterator j = libPaths.iterator(); j.hasNext();) {
-                        URL pathURL = (URL) j.next();
-                        addLibPath(antLibrary, pathURL);
-                    }
-                }
-            }
-
-            configuring.leaveNode(libraryId);
-        } catch (CircularDependencyException e) {
-            throw new ExecutionException(e);
-        }
-    }
-
-
-    /**
-     * Read an Ant library definition from a URL
-     *
-     * @param antlibURL the URL of the library definition
-     * @return the AntLibrary specification read from the library XML
-     *      definition
-     * @exception XMLParseException if the library cannot be parsed
-     */
-    private AntLibrarySpec parseLibraryDef(URL antlibURL)
-         throws XMLParseException {
-        ParseContext context = new ParseContext();
-        AntLibHandler libHandler = new AntLibHandler();
-
-        context.parse(antlibURL, "antlib", libHandler);
-
-        return libHandler.getAntLibrarySpec();
-    }
-
-}
-
diff --git a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/antlib/AntLibrary.java b/proposal/mutant/src/java/antcore/org/apache/ant/antcore/antlib/AntLibrary.java
deleted file mode 100755
index 234dccf..0000000
--- a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/antlib/AntLibrary.java
+++ /dev/null
@@ -1,279 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.antcore.antlib;
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import org.apache.ant.common.antlib.AntContext;
-import org.apache.ant.common.antlib.AntLibFactory;
-import org.apache.ant.common.util.ExecutionException;
-
-/**
- * This class represents the Ant library.
- *
- * @author Conor MacNeill
- * @created 14 January 2002
- */
-public class AntLibrary implements ComponentLibrary {
-    /**
-     * This is the globally unique name of this library. It uses the same
-     * conventions as the Java package space - i.e. reverse order DNS names
-     * This name is used when importing tasks from this library
-     */
-    private String libraryId;
-
-    /** THe URL of the antlib.xml library spec which defines this library */
-    private URL definitionURL;
-
-    /**
-     * The URLs to use when contructing a classloader for the components in
-     * this library.
-     */
-    private List libraryURLs = new ArrayList();
-
-    /** The list of converter classnames defined in this library */
-    private List converterClassNames = new ArrayList();
-
-    /** The class name of this library's factory class, if any */
-    private String factoryClassName;
-
-    /** The parent classloader to use when contructing classloaders */
-    private ClassLoader parentLoader;
-
-    /** The library which this library extends, if any */
-    private AntLibrary extendsLibrary;
-
-    /** Indicates if each Task Instance should use its own classloader */
-    private boolean isolated = false;
-
-    /** The classloader for this library if it can be reused */
-    private ClassLoader loader = null;
-
-    /** The definitions in the library */
-    private Map definitions = null;
-
-    /**
-     * Constructor for the AntLibrary object
-     *
-     * @param spec the specification from which this library is created.
-     */
-    public AntLibrary(AntLibrarySpec spec) {
-        this.libraryId = spec.getLibraryId();
-        this.definitions = spec.getDefinitions();
-        this.isolated = spec.isIsolated();
-        this.converterClassNames.addAll(spec.getConverters());
-        this.factoryClassName = spec.getFactory();
-        this.definitionURL = spec.getLibraryURL();
-    }
-
-    /**
-     * Sets the Library which this library extends
-     *
-     * @param extendsLibrary The new ExtendsLibrary value
-     */
-    public void setExtendsLibrary(AntLibrary extendsLibrary) {
-        this.extendsLibrary = extendsLibrary;
-    }
-
-    /**
-     * Sets the ParentLoader of the AntLibrary
-     *
-     * @param parentLoader The new ParentLoader value
-     */
-    public void setParentLoader(ClassLoader parentLoader) {
-        this.parentLoader = parentLoader;
-    }
-
-    /**
-     * Gets the libraryId of the AntLibrary
-     *
-     * @return the libraryId value
-     */
-    public String getLibraryId() {
-        return libraryId;
-    }
-
-    /**
-     * Gets the ClassLoader of the AntLibrary
-     *
-     * @return The ClassLoader value
-     */
-    public ClassLoader getClassLoader() {
-        if (isolated) {
-            return createLoader();
-        } else if (loader == null) {
-            loader = createLoader();
-        }
-        return loader;
-    }
-
-    /**
-     * Gets the definitions (taskdefs and typedefs) of the AntLibrary
-     *
-     * @return an iterator over the definition names
-     */
-    public Iterator getDefinitionNames() {
-        return definitions.keySet().iterator();
-    }
-
-    /**
-     * Get the definition of a particular component
-     *
-     * @param definitionName the name of the component within the library
-     * @return an AntLibDefinition instance with information about the
-     *      component's definition
-     */
-    public AntLibDefinition getDefinition(String definitionName) {
-        return (AntLibDefinition) definitions.get(definitionName);
-    }
-
-    /**
-     * Gets an the converter class names of the AntLibrary
-     *
-     * @return an iterator over a list of String class names
-     */
-    public Iterator getConverterClassNames() {
-        return converterClassNames.iterator();
-    }
-
-    /**
-     * Get the URL to where the library was loaded from
-     *
-     * @return the library's URL
-     */
-    public URL getDefinitionURL() {
-        return definitionURL;
-    }
-
-
-    /**
-     * Gat an instance of a factory object for creating objects in this
-     * library.
-     *
-     * @param context the context to use for the factory creation if
-     *      required
-     * @return an instance of the factory, or null if this library does not
-     *      support a factory
-     * @exception ExecutionException if the factory cannot be created
-     */
-    public AntLibFactory getFactory(AntContext context)
-         throws ExecutionException {
-        try {
-            AntLibFactory libFactory = null;
-            if (factoryClassName != null) {
-                Class factoryClass = Class.forName(factoryClassName,
-                    true, getClassLoader());
-                libFactory
-                     = (AntLibFactory) factoryClass.newInstance();
-                libFactory.init(context);
-            }
-            return libFactory;
-        } catch (ClassNotFoundException e) {
-            throw new ExecutionException("Unable to create factory "
-                 + factoryClassName + " for the \"" + libraryId
-                 + "\" Ant library", e);
-        } catch (NoClassDefFoundError e) {
-            throw new ExecutionException("Could not load a dependent class ("
-                 + e.getMessage() + ") to create the factory "
-                 + factoryClassName + " for the \"" + libraryId
-                 + "\" Ant library", e);
-        } catch (InstantiationException e) {
-            throw new ExecutionException("Unable to instantiate factory "
-                 + factoryClassName + " for the \"" + libraryId
-                 + "\" Ant library", e);
-        } catch (IllegalAccessException e) {
-            throw new ExecutionException("Unable to access factory "
-                 + factoryClassName + " for the \"" + libraryId
-                 + "\" Ant library", e);
-        }
-    }
-
-    /**
-     * Indicate whether this library has any converters defined
-     *
-     * @return true if any converters have been defined
-     */
-    public boolean hasConverters() {
-        return !converterClassNames.isEmpty();
-    }
-
-    /**
-     * Add a library to path to this AntLibrary definition
-     *
-     * @param libraryURL the URL to the library to be added
-     */
-    public void addLibraryURL(URL libraryURL) {
-        libraryURLs.add(libraryURL);
-    }
-
-
-    /**
-     * Create classloader which can be used to load the classes of this ant
-     * library
-     *
-     * @return the classloader for this ant library
-     */
-    private ClassLoader createLoader() {
-        ClassLoader ourParent
-             = extendsLibrary == null ? parentLoader
-             : extendsLibrary.getClassLoader();
-        return new URLClassLoader((URL[]) libraryURLs.toArray(new URL[0]),
-            ourParent);
-    }
-
-}
-
diff --git a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/antlib/AntLibrarySpec.java b/proposal/mutant/src/java/antcore/org/apache/ant/antcore/antlib/AntLibrarySpec.java
deleted file mode 100755
index 130e2a4..0000000
--- a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/antlib/AntLibrarySpec.java
+++ /dev/null
@@ -1,313 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.antcore.antlib;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import org.apache.ant.common.util.ConfigException;
-
-/**
- * This class represents the specification of an Ant library. It is merely
- * the internal representation of the antlib XML definition. An instance of
- * this class is used to contruct an AntLibrary instance.
- *
- * @author Conor MacNeill
- * @created 13 January 2002
- */
-public class AntLibrarySpec {
-    /**
-     * This is the globally unique name of this library. It uses the same
-     * conventions as the Java package space - i.e. reverse order DNS names
-     * This name is used when importing tasks from this library
-     */
-    private String libraryId;
-
-    /**
-     * This string identifies the location where the library is maintained.
-     * It is usually a URL to the location from which the library may be
-     * downloaded or purchased
-     */
-    private String libraryHome;
-
-    /** The list of converter classnames defined in this library */
-    private List converterClassNames = new ArrayList();
-
-    /** The name of the factory class for this library */
-    private String factoryClassName;
-
-    /**
-     * This is the optional id of another Ant library upon which this
-     * library depends.
-     */
-    private String extendsLibraryId;
-
-    /** This is the URL from which this library has been loaded */
-    private URL libraryURL;
-
-    /** This is the list of definitions */
-    private Map definitions = new HashMap();
-
-    /** Indicates if each Task Instance should use its own classloader */
-    private boolean isolated = false;
-
-    /** Flag which indicates if tools.jar is required */
-    private boolean toolsJarRequired = false;
-
-    /**
-     * This flag indicates that this task processes XML and wishes to use
-     * the XML parser packaged with Ant
-     */
-    private boolean requiresAntXMLParser = false;
-
-    /**
-     * Set the library that this library extends, if any
-     *
-     * @param extendsLibraryId The new ExtendsLibraryId value
-     */
-    public void setExtendsLibraryId(String extendsLibraryId) {
-        this.extendsLibraryId = extendsLibraryId;
-    }
-
-    /**
-     * Sets the name of the factory class of the AntLibrarySpec
-     *
-     * @param className the new factory classname
-     */
-    public void setFactory(String className) {
-        this.factoryClassName = className;
-    }
-
-    /**
-     * Indicate that this library requires a separate classloader per task
-     * instance
-     *
-     * @param isolated The new Isolated value
-     */
-    public void setIsolated(boolean isolated) {
-        this.isolated = isolated;
-    }
-
-    /**
-     * Sets the home of the AntLibrary
-     *
-     * @param home The new home value
-     */
-    public void setHome(String home) {
-        this.libraryHome = libraryHome;
-    }
-
-    /**
-     * Sets the libraryId of the AntLibrary
-     *
-     * @param libraryId The new libraryId value
-     */
-    public void setLibraryId(String libraryId) {
-        this.libraryId = libraryId;
-    }
-
-
-    /**
-     * Indicate that this library uses the Sun tools.jar
-     *
-     * @param toolsJarRequired The new ToolsJarRequired value
-     */
-    public void setToolsJarRequired(boolean toolsJarRequired) {
-        this.toolsJarRequired = toolsJarRequired;
-    }
-
-    /**
-     * Sets the libraryURL of the AntLibrary
-     *
-     * @param libraryURL The new libraryURL value
-     */
-    public void setLibraryURL(URL libraryURL) {
-        this.libraryURL = libraryURL;
-    }
-
-    /**
-     * Indicates that this library uses Ant's XML parser libraries
-     *
-     * @param requiresAntXMLParser true if this library uses Ant's XML
-     *      parser libraries
-     */
-    public void setAntXML(boolean requiresAntXMLParser) {
-        this.requiresAntXMLParser = requiresAntXMLParser;
-    }
-
-    /**
-     * Get the list of converter classnames defined in this library spec
-     *
-     * @return the converter classnames list
-     */
-    public List getConverters() {
-        return converterClassNames;
-    }
-
-    /**
-     * Gets the factory classname of the AntLibrarySpec
-     *
-     * @return the factory classname
-     */
-    public String getFactory() {
-        return factoryClassName;
-    }
-
-    /**
-     * Indicate whether this AntLibrary requires the Sun tools.jar
-     *
-     * @return The ToolsJarRequired value
-     */
-    public boolean isToolsJarRequired() {
-        return toolsJarRequired;
-    }
-
-    /**
-     * Get the id of the library that this library extends if any.
-     *
-     * @return The ExtendsLibraryId value
-     */
-    public String getExtendsLibraryId() {
-        return extendsLibraryId;
-    }
-
-    /**
-     * Indicate if this library required an classloader per instance
-     *
-     * @return true if a separate classloader should be used per instance.
-     */
-    public boolean isIsolated() {
-        return isolated;
-    }
-
-
-    /**
-     * Gets the libraryId of the AntLibrary
-     *
-     * @return The libraryId value
-     */
-    public String getLibraryId() {
-        return libraryId;
-    }
-
-    /**
-     * Gets the libraryURL of the AntLibrary
-     *
-     * @return The libraryURL value
-     */
-    public URL getLibraryURL() {
-        return libraryURL;
-    }
-
-
-    /**
-     * Gets the definitions of the AntLibrarySpec
-     *
-     * @return the definitions map
-     */
-    public Map getDefinitions() {
-        return definitions;
-    }
-
-    /**
-     * Add a converter to this library sec
-     *
-     * @param className the name of the converter class
-     */
-    public void addConverter(String className) {
-        converterClassNames.add(className);
-    }
-
-    /**
-     * Indicates if this library requires Ant's XML parser
-     *
-     * @return true if this library requires Ant's XML parser
-     */
-    public boolean usesAntXML() {
-        return requiresAntXMLParser;
-    }
-
-    /**
-     * Adds a definition to the Ant Library
-     *
-     * @param name the name of the library definition
-     * @param classname the name of the class implementing the element
-     * @param definitionTypeName the name of the definition type. This is
-     *      converted to its symbolic value
-     * @exception ConfigException if the definition has already been defined
-     */
-    public void addDefinition(String definitionTypeName, String name,
-                              String classname)
-         throws ConfigException {
-        if (definitions.containsKey(name)) {
-            throw new ConfigException("More than one definition "
-                 + "in library for " + name);
-        }
-        int definitionType = 0;
-
-        if (definitionTypeName.equals("typedef")) {
-            definitionType = AntLibrary.TYPEDEF;
-        } else if (definitionTypeName.equals("taskdef")) {
-            definitionType = AntLibrary.TASKDEF;
-        } else {
-            throw new ConfigException("Unknown type of definition "
-                 + definitionTypeName);
-        }
-        definitions.put(name,
-            new AntLibDefinition(definitionType, name, classname));
-    }
-
-}
-
diff --git a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/antlib/ClassNameHandler.java b/proposal/mutant/src/java/antcore/org/apache/ant/antcore/antlib/ClassNameHandler.java
deleted file mode 100644
index 0b32dad..0000000
--- a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/antlib/ClassNameHandler.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.antcore.antlib;
-
-import org.apache.ant.antcore.xml.ElementHandler;
-import org.xml.sax.SAXParseException;
-
-/**
- * Handler for elements which specify a class
- *
- * @author Conor MacNeill
- */
-public class ClassNameHandler extends ElementHandler {
-    /** The classname attribute name */
-    public static final String CLASSNAME_ATTR = "classname";
-
-    /**
-     * Gets the className of the Converter
-     *
-     * @return the className value
-     */
-    public String getClassName() {
-        return getAttribute(CLASSNAME_ATTR);
-    }
-
-    /**
-     * Process the definition element
-     *
-     * @param elementName the name of the element
-     * @exception SAXParseException if there is a problem parsing the
-     *      element
-     */
-    public void processElement(String elementName)
-         throws SAXParseException {
-        if (getClassName() == null) {
-            throw new SAXParseException(CLASSNAME_ATTR + " must be "
-                 + "specified for a converter", getLocator());
-        }
-    }
-
-    /**
-     * Validate that the given attribute and value are valid.
-     *
-     * @param attributeName The name of the attributes
-     * @param attributeValue The value of the attributes
-     * @exception SAXParseException if the attribute is not allowed on the
-     *      element.
-     */
-    protected void validateAttribute(String attributeName,
-                                     String attributeValue)
-         throws SAXParseException {
-        if (!attributeName.equals(CLASSNAME_ATTR)) {
-            throwInvalidAttribute(attributeName);
-        }
-    }
-}
-
-
diff --git a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/antlib/ComponentLibrary.java b/proposal/mutant/src/java/antcore/org/apache/ant/antcore/antlib/ComponentLibrary.java
deleted file mode 100644
index 4e89117..0000000
--- a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/antlib/ComponentLibrary.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.antcore.antlib;
-import org.apache.ant.common.antlib.AntContext;
-import org.apache.ant.common.antlib.AntLibFactory;
-import org.apache.ant.common.util.ExecutionException;
-
-/**
- * A Component Library supplies components to the Ant core.
- *
- * @author Conor MacNeill
- * @created 8 February 2002
- */
-public interface ComponentLibrary {
-    /** constant indicating a taskdef definition */
-    public static final int TASKDEF = 1;
-    /** constant indicating a typedef definition */
-    public static final int TYPEDEF = 2;
-
-    /**
-     * Gets the ClassLoader of the AntLibrary
-     *
-     * @return The ClassLoader value
-     */
-    ClassLoader getClassLoader();
-
-    /**
-     * Gat an instance of a factory object for creating objects in this
-     * library.
-     *
-     * @param context the context to use for the factory creation if
-     *      required
-     * @return an instance of the factory, or null if this library does not
-     *      support a factory
-     * @exception ExecutionException if the factory cannot be created
-     */
-    AntLibFactory getFactory(AntContext context) throws ExecutionException;
-
-    /**
-     * Gets the libraryId of the AntLibrary
-     *
-     * @return the libraryId value
-     */
-    String getLibraryId();
-
-    /**
-     * Get the definition of a particular component
-     *
-     * @param definitionName the name of the component within the library
-     * @return an AntLibDefinition instance with information about the
-     *      component's definition
-     */
-    AntLibDefinition getDefinition(String definitionName);
-}
-
diff --git a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/antlib/DefinitionHandler.java b/proposal/mutant/src/java/antcore/org/apache/ant/antcore/antlib/DefinitionHandler.java
deleted file mode 100755
index bac2a56..0000000
--- a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/antlib/DefinitionHandler.java
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.antcore.antlib;
-
-import org.apache.ant.antcore.xml.ElementHandler;
-import org.xml.sax.SAXParseException;
-
-/**
- * Handler for definition within an Ant Library
- *
- * @author Conor MacNeill
- * @created 13 January 2002
- */
-public class DefinitionHandler extends ElementHandler {
-    /** The name attribute name */
-    public static final String NAME_ATTR = "name";
-
-    /** The classname attribute name */
-    public static final String CLASSNAME_ATTR = "classname";
-
-    /** the type of the definition */
-    private String definitionType;
-
-    /**
-     * Create a definition handler to handle a specific type of definition
-     *
-     * @param definitionType the type of the definition being handled
-     */
-    public DefinitionHandler(String definitionType) {
-        this.definitionType = definitionType;
-    }
-
-    /**
-     * Get the type of definition being handled
-     *
-     * @return the type of the definition
-     */
-    public String getDefinitionType() {
-        return definitionType;
-    }
-
-    /**
-     * Gets the name of the TaskdefHandler
-     *
-     * @return the name value
-     */
-    public String getName() {
-        return getAttribute(NAME_ATTR);
-    }
-
-    /**
-     * Gets the className of the TaskdefHandler
-     *
-     * @return the className value
-     */
-    public String getClassName() {
-        return getAttribute(CLASSNAME_ATTR);
-    }
-
-    /**
-     * Process the definition element
-     *
-     * @param elementName the name of the element
-     * @exception SAXParseException if there is a problem parsing the
-     *      element
-     */
-    public void processElement(String elementName)
-         throws SAXParseException {
-        if (getName() == null || getClassName() == null) {
-            throw new SAXParseException("name and classname must be "
-                 + "specified for a " + definitionType, getLocator());
-        }
-    }
-
-    /**
-     * Validate that the given attribute and value are valid.
-     *
-     * @param attributeName The name of the attributes
-     * @param attributeValue The value of the attributes
-     * @exception SAXParseException if the attribute is not allowed on the
-     *      element.
-     */
-    protected void validateAttribute(String attributeName,
-                                     String attributeValue)
-         throws SAXParseException {
-        if (!attributeName.equals(NAME_ATTR) &&
-            !attributeName.equals(CLASSNAME_ATTR)) {
-            throwInvalidAttribute(attributeName);
-        }
-    }
-}
-
-
diff --git a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/antlib/DynamicLibrary.java b/proposal/mutant/src/java/antcore/org/apache/ant/antcore/antlib/DynamicLibrary.java
deleted file mode 100644
index 4cc7f1f..0000000
--- a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/antlib/DynamicLibrary.java
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.antcore.antlib;
-import java.util.HashMap;
-import java.util.Map;
-import org.apache.ant.common.antlib.AntContext;
-import org.apache.ant.common.antlib.AntLibFactory;
-
-/**
- * A dynamic library is created at runtime to hold newly defined components.
- *
- * @author Conor MacNeill
- * @created 8 February 2002
- */
-public class DynamicLibrary implements ComponentLibrary {
-    /** The name profix for naming dynamic libraries */
-    public static final String DYNAMIC_LIB_PREFIX = "_internal";
-    /** A static field used to uniquely name dynamic libraries */
-    private static int dynamicIdCounter = 0;
-
-    /**
-     * the factory this dynamic library will use to create instances of its
-     * components
-     */
-    private AntLibFactory factory;
-    /**
-     * the classloader that will be used to create new instances of the
-     * library's components
-     */
-    private ClassLoader loader;
-    /** the library's unique id */
-    private String libraryId;
-    /**
-     * the component definitions of this library. This map contains
-     * AntLibDefinition instances indexed on the definition names.
-     */
-    private Map definitions = new HashMap();
-
-
-    /**
-     * Constructor for the DynamicLibrary object
-     *
-     * @param factory the factory to use to create instances. May be null
-     * @param loader the loader to use to load the instance classes
-     */
-    public DynamicLibrary(AntLibFactory factory, ClassLoader loader) {
-        int dynamicId = 0;
-        synchronized (DynamicLibrary.class) {
-            dynamicId = dynamicIdCounter;
-            dynamicIdCounter++;
-        }
-        this.libraryId = DYNAMIC_LIB_PREFIX + dynamicId;
-        this.loader = loader;
-        this.factory = factory;
-    }
-
-    /**
-     * Gets the ClassLoader of the AntLibrary
-     *
-     * @return The ClassLoader value
-     */
-    public ClassLoader getClassLoader() {
-        return loader;
-    }
-
-    /**
-     * Gat an instance of a factory object for creating objects in this
-     * library.
-     *
-     * @param context the context to use for the factory creation if
-     *      required
-     * @return an instance of the factory, or null if this library does not
-     *      support a factory
-     */
-    public AntLibFactory getFactory(AntContext context) {
-        return factory;
-    }
-
-    /**
-     * Gets the libraryId of the AntLibrary
-     *
-     * @return the libraryId value
-     */
-    public String getLibraryId() {
-        return libraryId;
-    }
-
-    /**
-     * Get the definition of a particular component
-     *
-     * @param definitionName the name of the component within the library
-     * @return an AntLibDefinition instance with information about the
-     *      component's definition
-     */
-    public AntLibDefinition getDefinition(String definitionName) {
-        return (AntLibDefinition) definitions.get(definitionName);
-    }
-
-    /**
-     * Add a new component definition to this library
-     *
-     * @param componentType the type of the component
-     * @param componentName the name of the component
-     * @param componentClassName the component's class
-     */
-    public void addComponent(int componentType, String componentName,
-                             String componentClassName) {
-        AntLibDefinition newDefinition
-             = new AntLibDefinition(componentType, componentName,
-            componentClassName);
-
-        definitions.put(componentName, newDefinition);
-    }
-}
-
diff --git a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/config/AntConfig.java b/proposal/mutant/src/java/antcore/org/apache/ant/antcore/config/AntConfig.java
deleted file mode 100755
index ed16ce7..0000000
--- a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/config/AntConfig.java
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.antcore.config;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import org.apache.ant.common.model.BuildElement;
-
-/**
- * An AntConfig is the java class representation of the antconfig.xml files
- * used to configure Ant.
- *
- * @author Conor MacNeill
- * @created 20 January 2002
- */
-public class AntConfig {
-    /** Indicates if remote libraries may be used */
-    private boolean remoteLibs = false;
-
-    /** Indicates if remote projects may be used */
-    private boolean remoteProjects = false;
-
-    /** Indicates if unset properties are ignored */
-    private boolean unsetProperties = true;
-
-    /**
-     * Configuration tasks. 
-     */
-    private List tasks = new ArrayList();
-    
-    /**
-     * Indicate if unset properties are OK.
-     *
-     * @return true if unset properties will not cause an exception
-     */
-    public boolean isUnsetPropertiesAllowed() {
-        return unsetProperties;
-    }
-
-    /**
-     * Indicate if the use of remote library's is allowe dby this config.
-     *
-     * @return true if this config allows the use of remote libraries,
-     */
-    public boolean isRemoteLibAllowed() {
-        return remoteLibs;
-    }
-
-    /**
-     * Indicate if this config allows the execution of a remote project
-     *
-     * @return true if remote projects are allowed
-     */
-    public boolean isRemoteProjectAllowed() {
-        return remoteProjects;
-    }
-
-    /**
-     * Get the configuration tasks
-     *
-     * @return an iterator over the set of config tasks.
-     */
-    public Iterator getTasks() {
-        return tasks.iterator();
-    }
-
-    /**
-     * Add a config task.
-     *
-     * @param task a task to be executed as part of the configuration process.
-     */
-    public void addTask(BuildElement task) {
-        tasks.add(task);
-    }
-
-    /**
-     * Allow remote libraries to be used
-     *
-     * @param allowRemoteLibs true if remote libraries may be used.
-     */
-    public void allowRemoteLibs(boolean allowRemoteLibs) {
-        this.remoteLibs = allowRemoteLibs;
-    }
-
-    /**
-     * Allow remote projects to be used
-     *
-     * @param allowRemoteProjects true if remote projects may be executed.
-     */
-    public void allowRemoteProjects(boolean allowRemoteProjects) {
-        this.remoteProjects = allowRemoteProjects;
-    }
-
-    /**
-     * Allow properties to be used even when they have not been set
-     *
-     * @param allowUnsetProperties true if un set properties should not
-     *      cause an exception
-     */
-    public void allowUnsetProperties(boolean allowUnsetProperties) {
-        this.unsetProperties = allowUnsetProperties;
-    }
-    
-    /**
-     * Merge in another configuration. The configuration being merged in
-     * takes precedence
-     *
-     * @param otherConfig the other AntConfig to be merged.
-     */
-    public void merge(AntConfig otherConfig) {
-        remoteLibs = otherConfig.remoteLibs;
-        remoteProjects = otherConfig.remoteProjects;
-        unsetProperties = otherConfig.unsetProperties;
-        tasks.addAll(otherConfig.tasks);
-    }
-}
-
diff --git a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/config/AntConfigHandler.java b/proposal/mutant/src/java/antcore/org/apache/ant/antcore/config/AntConfigHandler.java
deleted file mode 100755
index 124ff1d..0000000
--- a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/config/AntConfigHandler.java
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.antcore.config;
-import org.apache.ant.antcore.xml.ElementHandler;
-import org.apache.ant.antcore.modelparser.BuildElementHandler;
-import org.xml.sax.Attributes;
-import org.xml.sax.SAXParseException;
-
-/**
- * XML Element Handler for Ant config files
- *
- * @author Conor MacNeill
- * @created 20 January 2002
- */
-public class AntConfigHandler extends ElementHandler {
-    /** The allowRemoteProject attribute name */
-    public static final String REMOTE_PROJECT_ATTR = "allow-remote-project";
-    
-    /** The allowRemoteLibrary attribute name */
-    public static final String REMOTE_LIBRARY_ATTR = "allow-remote-library";
-
-    /** The allowReportProject attribute name */
-    public static final String UNSET_PROPS_ATTR = "allow-unset-properties";
-
-    /** The list of allowed Attributes */
-    public static final String[] ALLOWED_ATTRIBUTES
-         = {REMOTE_PROJECT_ATTR, REMOTE_LIBRARY_ATTR, UNSET_PROPS_ATTR};
-    /**
-     * The config object which is contructed from the XML representation of
-     * the config
-     */
-    private AntConfig config;
-
-    /**
-     * Get the Ant Config read in by this handler
-     *
-     * @return the AntConfig instance
-     */
-    public AntConfig getAntConfig() {
-        return config;
-    }
-
-    /**
-     * Process the antlib element
-     *
-     * @param elementName the name of the element
-     * @exception SAXParseException if there is a problem parsing the
-     *      element
-     */
-    public void processElement(String elementName)
-         throws SAXParseException {
-        config = new AntConfig();
-        config.allowRemoteLibs(getBooleanAttribute(REMOTE_LIBRARY_ATTR));
-        config.allowRemoteProjects(getBooleanAttribute(REMOTE_PROJECT_ATTR));
-        boolean allowUnsetProperties = true;
-        if (getAttribute(UNSET_PROPS_ATTR) != null) {
-            allowUnsetProperties = getBooleanAttribute(UNSET_PROPS_ATTR);
-        }
-        config.allowUnsetProperties(allowUnsetProperties);
-    }        
-        
-    /**
-     * Start a new element in the ant config.
-     *
-     * @param uri The Namespace URI.
-     * @param localName The local name (without prefix).
-     * @param qualifiedName The qualified name (with prefix)
-     * @param attributes The attributes attached to the element.
-     * @throws SAXParseException if there is a parsing problem.
-     */
-    public void startElement(String uri, String localName, String qualifiedName,
-                             Attributes attributes)
-         throws SAXParseException {
-
-        // everything else is a task
-        BuildElementHandler buildElementHandler = new BuildElementHandler();
-        buildElementHandler.start(getParseContext(), getXMLReader(),
-            this, getLocator(), attributes, getElementSource(),
-            qualifiedName);
-        config.addTask(buildElementHandler.getBuildElement());
-//        try {
-//        } catch (ConfigException e) {
-//            throw new SAXParseException("Unable to process config",
-//                getLocator(), e);
-//        }
-    }
-
-    /**
-     * Validate that the given attribute and value are valid.
-     *
-     * @param attributeName The name of the attributes
-     * @param attributeValue The value of the attributes
-     * @exception SAXParseException if the attribute is not allowed on the
-     *      element.
-     */
-    protected void validateAttribute(String attributeName,
-                                     String attributeValue)
-         throws SAXParseException {
-        for (int i = 0; i < ALLOWED_ATTRIBUTES.length; ++i) {
-            if (attributeName.equals(ALLOWED_ATTRIBUTES[i])) {
-                return;
-            }
-        }
-        throwInvalidAttribute(attributeName);
-    }
-}
-
-
diff --git a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/AttributeSetter.java b/proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/AttributeSetter.java
deleted file mode 100644
index 336749d..0000000
--- a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/AttributeSetter.java
+++ /dev/null
@@ -1,176 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.antcore.execution;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import org.apache.ant.common.antlib.Converter;
-import org.apache.ant.common.util.ExecutionException;
-
-/**
- * AttributeSetters are created at introspection time for each
- * setter method a class provides and for which a conversion from a
- * String value is available.
- *
- * @author Conor MacNeill
- * @created 19 January 2002
- */
-public class AttributeSetter {
-    /** The method that will perform the setting */
-    private Method method;
-    
-    /** 
-     * A converter to convert the string value to a value to be given to 
-     * the setter method 
-     */ 
-    private Converter converter;
-    
-    /**
-     * A constructor used to create the string value to an object to be used
-     * by the setter 
-     */
-    private Constructor valueConstructor;
-    
-    /** The depth of the setter in the class hierarchy */
-    private int depth;
-
-    /**
-     * Create a setter which just uses string values 
-     * 
-     * @param method the method to be invoked.
-     * @param depth the depth of this method declaraion in the class hierarchy.
-     */
-    public AttributeSetter(Method method, int depth) {
-        this.method = method;
-        this.depth = depth;
-    }
-
-    /**
-     * Create a setter which just uses string values 
-     * 
-     * @param method the method to be invoked.
-     * @param depth the depth of this method declaraion in the class hierarchy.
-     * @param converter a converter to convert string values into instances of
-     *        the type expected by the method.
-     */
-    public AttributeSetter(Method method, int depth, Converter converter) {
-        this(method, depth);
-        this.converter = converter;
-    }
-
-    /**
-     * Create a setter which just uses string values 
-     * 
-     * @param method the method to be invoked.
-     * @param depth the depth of this method declaraion in the class hierarchy.
-     * @param valueConstructor an object constructor used to convert string 
-     *        values into instances of the type expected by the method.
-     */
-    public AttributeSetter(Method method, int depth, 
-                           Constructor valueConstructor) {
-        this(method, depth);
-        this.valueConstructor = valueConstructor;
-    }
-    
-    /**
-     * Set the attribute value on an object
-     *
-     * @param obj the object on which the set method is to be invoked
-     * @param stringValue the string representation of the value
-     * @exception InvocationTargetException if the method cannot be
-     *      invoked
-     * @exception IllegalAccessException if the method cannot be invoked
-     * @exception ExecutionException if the conversion of the value
-     *      fails
-     */
-    void set(Object obj, String stringValue)
-         throws InvocationTargetException, IllegalAccessException,
-        ExecutionException {
-        
-        Object value = null;
-        if (converter != null) {
-            Class type = getType();
-            value = converter.convert(stringValue, type);  
-        } else if (valueConstructor != null) {
-            try {
-                value = valueConstructor.newInstance(new String[]{stringValue});
-            } catch (InstantiationException e) {
-                throw new ExecutionException(e);
-            }
-        } else {
-            value = stringValue;
-        }
-        
-        method.invoke(obj, new Object[]{value});
-    }
-    
-    /**
-     * Get the declaration depth of this setter. 
-     *
-     * @return the attribute setter's declaration depth.
-     */
-    public int getDepth() {
-        return depth;
-    }
-    
-    /**
-     * Get the type expected by this setter's method
-     *
-     * @return a Class instance being the type this setter's method accepts.
-     */
-    public Class getType() {
-        return method.getParameterTypes()[0];
-    }
-}
-
diff --git a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/BuildEventSupport.java b/proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/BuildEventSupport.java
deleted file mode 100644
index 0b47ae0..0000000
--- a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/BuildEventSupport.java
+++ /dev/null
@@ -1,250 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.antcore.execution;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.HashMap;
-import java.util.List;
-import org.apache.ant.common.antlib.Task;
-import org.apache.ant.common.event.BuildEvent;
-import org.apache.ant.common.event.BuildListener;
-import org.apache.ant.common.model.ModelElement;
-import org.apache.ant.common.util.DemuxOutputReceiver;
-import org.apache.ant.common.event.MessageLevel;
-import org.apache.ant.common.util.ExecutionException;
-
-/**
- * BuildEventSupport is used by classes which which to send build events to
- * the BuildListeners
- *
- * @author Conor MacNeill
- * @created 15 January 2002
- */
-public class BuildEventSupport implements DemuxOutputReceiver {
-    /**
-     * The listeners attached to the object which contains this support
-     * object
-     */
-    private List listeners = new ArrayList();
-
-    /** Records the latest task to be executed on a thread (Thread to Task). */
-    private Map threadTasks = new HashMap();
-
-    /**
-     * Gets the listeners of the BuildEventSupport
-     *
-     * @return the listeners value
-     */
-    public Iterator getListeners() {
-        return listeners.iterator();
-    }
-
-    /**
-     * Add a listener
-     *
-     * @param listener the listener to be added
-     */
-    public void addBuildListener(BuildListener listener) {
-        listeners.add(listener);
-    }
-
-    /**
-     * Remove a listener
-     *
-     * @param listener the listener to be removed
-     */
-    public void removeBuildListener(BuildListener listener) {
-        listeners.remove(listener);
-    }
-
-    /**
-     * Fire a build started event
-     *
-     * @param element the build element with which the event is associated
-     */
-    public void fireBuildStarted(ModelElement element) {
-        BuildEvent event = new BuildEvent(element, BuildEvent.BUILD_STARTED);
-        for (Iterator i = listeners.iterator(); i.hasNext();) {
-            BuildListener listener = (BuildListener) i.next();
-            listener.buildStarted(event);
-        }
-    }
-
-    /**
-     * Fir a build finished event
-     *
-     * @param element the build element with which the event is associated
-     * @param cause an exception if there was a failure in the build
-     */
-    public void fireBuildFinished(ModelElement element,
-                                  Throwable cause) {
-        BuildEvent event = new BuildEvent(element, BuildEvent.BUILD_FINISHED,
-            cause);
-        for (Iterator i = listeners.iterator(); i.hasNext();) {
-            BuildListener listener = (BuildListener) i.next();
-            listener.buildFinished(event);
-        }
-    }
-
-    /**
-     * fire a target started event
-     *
-     * @param element the build element with which the event is associated
-     */
-    public void fireTargetStarted(ModelElement element) {
-        BuildEvent event = new BuildEvent(element, BuildEvent.TARGET_STARTED);
-        for (Iterator i = listeners.iterator(); i.hasNext();) {
-            BuildListener listener = (BuildListener) i.next();
-            listener.targetStarted(event);
-        }
-    }
-
-    /**
-     * fire a target finished event
-     *
-     * @param element the build element with which the event is associated
-     * @param cause an exception if there was a failure in the target's task
-     */
-    public void fireTargetFinished(ModelElement element,
-                                   Throwable cause) {
-        BuildEvent event = new BuildEvent(element, BuildEvent.TARGET_FINISHED,
-            cause);
-        for (Iterator i = listeners.iterator(); i.hasNext();) {
-            BuildListener listener = (BuildListener) i.next();
-            listener.targetFinished(event);
-        }
-    }
-
-    /**
-     * fire a task started event
-     *
-     * @param task the task with which the event is associated
-     */
-    public void fireTaskStarted(Task task) {
-        synchronized (this) {
-            threadTasks.put(Thread.currentThread(), task);
-        }
-        BuildEvent event = new BuildEvent(task, BuildEvent.TASK_STARTED);
-        for (Iterator i = listeners.iterator(); i.hasNext();) {
-            BuildListener listener = (BuildListener) i.next();
-            listener.taskStarted(event);
-        }
-    }
-
-    /**
-     * fire a task finished event
-     *
-     * @param task the task with which the event is associated
-     * @param cause an exception if there was a failure in the task
-     */
-    public void fireTaskFinished(Task task,
-                                 Throwable cause) {
-        System.out.flush();
-        System.err.flush();
-        synchronized (this) {
-            threadTasks.remove(Thread.currentThread());
-        }
-        BuildEvent event = new BuildEvent(task, BuildEvent.TASK_FINISHED,
-            cause);
-        for (Iterator i = listeners.iterator(); i.hasNext();) {
-            BuildListener listener = (BuildListener) i.next();
-            listener.taskFinished(event);
-        }
-    }
-
-    /**
-     * Send a message event
-     *
-     * @param source the build element with which the event is associated
-     * @param message the message to be sent
-     * @param priority the priority of the message
-     */
-    public void fireMessageLogged(Object source,
-                                  String message, int priority) {
-        BuildEvent event = new BuildEvent(source, message, priority);
-        for (Iterator i = listeners.iterator(); i.hasNext();) {
-            BuildListener listener = (BuildListener) i.next();
-            listener.messageLogged(event);
-        }
-    }
-
-    /**
-     * Demultiplexes output so that each task receives the appropriate
-     * messages. If the current thread is not currently executing a task,
-     * the message is logged directly.
-     *
-     * @param line Message to handle. Should not be <code>null</code>.
-     * @param isError Whether the text represents an error (<code>true</code>
-     *      ) or information (<code>false</code>).
-     */
-    public void threadOutput(String line, boolean isError) {
-        Task task = (Task) threadTasks.get(Thread.currentThread());
-        if (task != null) {
-            try {
-                if (isError) {
-                    task.handleSystemErr(line);
-                } else {
-                    task.handleSystemOut(line);
-                }
-                return;
-            } catch (ExecutionException e) {
-                // ignore just log normally
-            }
-        }
-        fireMessageLogged(this, line, 
-            isError ? MessageLevel.MSG_ERR : MessageLevel.MSG_INFO);
-    }
-}
-
diff --git a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/ClassIntrospector.java b/proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/ClassIntrospector.java
deleted file mode 100755
index ee94a26..0000000
--- a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/ClassIntrospector.java
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.antcore.execution;
-import java.lang.reflect.Method;
-import java.util.Map;
-import java.util.HashMap;
-
-/**
- * Introspects a class and builds a reflector for setting values on
- * instances of the class
- *
- * @author Conor MacNeill
- * @created 19 January 2002
- */
-public class ClassIntrospector {
-    /** The reflector that this introspector populates */
-    private Reflector reflector;
-
-    /**
-     * A Map which maps the classnames to their depth in the class hiearchy,
-     * with the current class being depth=0
-     */
-    private Map classDepth = new HashMap();
-
-    /**
-     * Determine the class hierarchy depths for the given class.
-     *
-     * @param bean the class for which the class depths will be determined.
-     */
-    private void getDepths(Class bean) {
-        Class currentClass = bean;
-        int index = 0;
-        while (currentClass != null) {
-            classDepth.put(currentClass, new Integer(index++));
-            currentClass = currentClass.getSuperclass();
-        }
-    }
-            
-    
-    /**
-     * Create a introspector for the bean
-     *
-     * @param bean the class which is introspected
-     * @param converters a collection of converters for converting values
-     *      from strings
-     */
-    public ClassIntrospector(final Class bean, Map converters) {
-        reflector = new Reflector();
-        getDepths(bean);
-
-        Method[] methods = bean.getMethods();
-        for (int i = 0; i < methods.length; i++) {
-            final Method m = methods[i];
-            final String name = m.getName();
-            Class returnType = m.getReturnType();
-            Class[] args = m.getParameterTypes();
-
-            if (name.equals("addText")
-                 && returnType.equals(Void.TYPE)
-                 && args.length == 1
-                 && args[0].equals(String.class)) {
-                reflector.setAddTextMethod(m);
-            } else if (name.startsWith("set")
-                 && name.length() > 3
-                 && returnType.equals(Void.TYPE)
-                 && args.length == 1
-                 && !args[0].isArray()) {
-                Integer depth = (Integer) classDepth.get(m.getDeclaringClass());
-                reflector.addAttributeMethod(m, depth.intValue(), 
-                    getPropertyName(name, "set"), converters);
-            } else if (name.startsWith("addConfigured")
-                 && name.length() > 13
-                 && returnType.equals(Void.TYPE)
-                 && args.length == 1
-                 && !args[0].equals(String.class)
-                 && !args[0].isArray()
-                 && !args[0].isPrimitive()) {
-                reflector.addElementMethod(m, 
-                    getPropertyName(name, "addConfigured"));
-             } else if (name.startsWith("add")
-                 && name.length() > 3
-                 && returnType.equals(Void.TYPE)
-                 && args.length == 1
-                 && !args[0].equals(String.class)
-                 && !args[0].isArray()
-                 && !args[0].isPrimitive()) {
-                reflector.addElementMethod(m, getPropertyName(name, "add"));
-           } else if (name.startsWith("create")
-                 && name.length() > 6
-                 && !returnType.isArray()
-                 && !returnType.isPrimitive()
-                 && args.length == 0) {
-                reflector.addCreateMethod(m, getPropertyName(name, "create"));
-            }
-        }
-    }
-
-    /**
-     * Gets the reflector associed with the class we are introspecting
-     *
-     * @return the reflector
-     */
-    public Reflector getReflector() {
-        return reflector;
-    }
-
-    /**
-     * extract the name of a property from a method name - subtracting a
-     * given prefix.
-     *
-     * @param methodName the name of the method
-     * @param prefix the prefix to be ignored
-     * @return the property name
-     */
-    private String getPropertyName(String methodName, String prefix) {
-        int start = prefix.length();
-        return methodName.substring(start).toLowerCase();
-    }
-}
-
diff --git a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/ComponentManager.java b/proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/ComponentManager.java
deleted file mode 100644
index eff357c..0000000
--- a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/ComponentManager.java
+++ /dev/null
@@ -1,923 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.antcore.execution;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import org.apache.ant.antcore.antlib.AntLibDefinition;
-import org.apache.ant.antcore.antlib.AntLibManager;
-import org.apache.ant.antcore.antlib.AntLibrary;
-import org.apache.ant.antcore.antlib.ComponentLibrary;
-import org.apache.ant.antcore.antlib.DynamicLibrary;
-import org.apache.ant.common.antlib.AntLibFactory;
-import org.apache.ant.common.antlib.Converter;
-import org.apache.ant.common.antlib.DeferredTask;
-import org.apache.ant.common.antlib.ExecutionComponent;
-import org.apache.ant.common.antlib.StandardLibFactory;
-import org.apache.ant.common.antlib.Task;
-import org.apache.ant.common.antlib.TaskContainer;
-import org.apache.ant.common.event.MessageLevel;
-import org.apache.ant.common.model.BuildElement;
-import org.apache.ant.common.service.ComponentService;
-import org.apache.ant.common.util.ExecutionException;
-import org.apache.ant.common.util.Location;
-import org.apache.ant.init.LoaderUtils;
-import org.apache.ant.antcore.config.AntConfig;
-
-/**
- * The instance of the ComponentServices made available by the core to the
- * ant libraries.
- *
- * @author Conor MacNeill
- * @created 27 January 2002
- */
-public class ComponentManager implements ComponentService {
-    /**
-     * Type converters for this frame. Converters are used when configuring
-     * Tasks to handle special type conversions.
-     */
-    private Map converters = new HashMap();
-
-    /** This is the set of libraries whose converters have been loaded */
-    private Set loadedConverters = new HashSet();
-
-    /** The factory objects for each library, indexed by the library Id */
-    private Map libFactories = new HashMap();
-
-    /** The Frame this service instance is working for */
-    private Frame frame;
-
-    /** The library manager instance used to configure libraries. */
-    private AntLibManager libManager;
-
-    /**
-     * These are AntLibraries which have been loaded into this component
-     * manager
-     */
-    private static Map antLibraries = new HashMap();
-
-    /** dynamic libraries which have been defined */
-    private Map dynamicLibraries;
-
-    /** The definitions which have been imported into this frame. */
-    private Map definitions = new HashMap();
-
-    /**
-     * This map stores a list of additional paths for each library indexed
-     * by the libraryId
-     */
-    private Map libPathsMap = new HashMap();
-
-    /** Reflector objects used to configure Tasks from the Task models. */
-    private Map setters = new HashMap();
-
-
-    /**
-     * Constructor
-     *
-     * @param frame the frame containing this context
-     */
-    protected ComponentManager(Frame frame) {
-        this.frame = frame;
-        AntConfig config = frame.getConfig();
-        libManager = new AntLibManager(config.isRemoteLibAllowed());
-        dynamicLibraries = new HashMap();
-        libPathsMap = new HashMap();
-    }
-
-    /**
-     * Load a library or set of libraries from a location making them
-     * available for use
-     *
-     * @param libLocation the file or URL of the library location
-     * @param importAll if true all tasks are imported as the library is
-     *      loaded
-     * @param autoImport true if libraries in the Ant namespace should be
-     *                   automatically imported.
-     * @exception ExecutionException if the library cannot be loaded
-     */
-    public void loadLib(String libLocation, boolean importAll,
-                        boolean autoImport)
-         throws ExecutionException {
-        try {
-            Map librarySpecs = new HashMap();
-            libManager.loadLibs(librarySpecs, libLocation);
-            libManager.configLibraries(frame.getInitConfig(), librarySpecs,
-                antLibraries, libPathsMap);
-
-            Iterator i = librarySpecs.keySet().iterator();
-            while (i.hasNext()) {
-                String libraryId = (String) i.next();
-                boolean doAuto = autoImport 
-                    && libraryId.startsWith(Constants.ANT_LIB_PREFIX);
-                if (importAll || doAuto) {
-                    importLibrary(libraryId);
-                }
-            }
-        } catch (MalformedURLException e) {
-            throw new ExecutionException("Unable to load libraries from "
-                 + libLocation, e);
-        }
-    }
-
-    /**
-     * Experimental - define a new task
-     *
-     * @param taskName the name by which this task will be referred
-     * @param factory the library factory object to create the task
-     *      instances
-     * @param loader the class loader to use to create the particular tasks
-     * @param className the name of the class implementing the task
-     * @exception ExecutionException if the task cannot be defined
-     */
-    public void taskdef(AntLibFactory factory, ClassLoader loader,
-                        String taskName, String className)
-         throws ExecutionException {
-        defineComponent(factory, loader, ComponentLibrary.TASKDEF,
-            taskName, className);
-    }
-
-    /**
-     * Experimental - define a new type
-     *
-     * @param typeName the name by which this type will be referred
-     * @param factory the library factory object to create the type
-     *      instances
-     * @param loader the class loader to use to create the particular types
-     * @param className the name of the class implementing the type
-     * @exception ExecutionException if the type cannot be defined
-     */
-    public void typedef(AntLibFactory factory, ClassLoader loader,
-                        String typeName, String className)
-         throws ExecutionException {
-        defineComponent(factory, loader, ComponentLibrary.TYPEDEF,
-            typeName, className);
-    }
-
-    /**
-     * Add a library path for the given library
-     *
-     * @param libraryId the unique id of the library for which an additional
-     *      path is being defined
-     * @param libPath the library path (usually a jar)
-     * @exception ExecutionException if the path cannot be specified
-     */
-    public void addLibPath(String libraryId, URL libPath)
-         throws ExecutionException {
-        List libPaths = (List) libPathsMap.get(libraryId);
-        if (libPaths == null) {
-            libPaths = new ArrayList();
-            libPathsMap.put(libraryId, libPaths);
-        }
-        libPaths.add(libPath);
-
-        // If this library already exists give it the new path now
-        AntLibrary library = (AntLibrary) antLibraries.get(libraryId);
-        if (library != null) {
-            libManager.addLibPath(library, libPath);
-        }
-    }
-
-    /**
-     * Import a complete library into the current execution frame
-     *
-     * @param libraryId The id of the library to be imported
-     * @exception ExecutionException if the library cannot be imported
-     */
-    public void importLibrary(String libraryId) throws ExecutionException {
-        AntLibrary library = (AntLibrary) antLibraries.get(libraryId);
-        if (library == null) {
-            throw new ExecutionException("Unable to import library " + libraryId
-                 + " as it has not been loaded");
-        }
-        for (Iterator i = library.getDefinitionNames(); i.hasNext();) {
-            String defName = (String) i.next();
-            importLibraryDef(library, defName, null);
-        }
-        addLibraryConverters(library);
-    }
-
-    /**
-     * Import a single component from a library, optionally aliasing it to a
-     * new name
-     *
-     * @param libraryId the unique id of the library from which the
-     *      component is being imported
-     * @param defName the name of the component within its library
-     * @param alias the name under which this component will be used in the
-     *      build scripts. If this is null, the components default name is
-     *      used.
-     * @exception ExecutionException if the component cannot be imported
-     */
-    public void importComponent(String libraryId, String defName,
-                                String alias) throws ExecutionException {
-        AntLibrary library = (AntLibrary) antLibraries.get(libraryId);
-        if (library == null) {
-            throw new ExecutionException("Unable to import component from "
-                 + "library \"" + libraryId + "\" as it has not been loaded");
-        }
-        importLibraryDef(library, defName, alias);
-        addLibraryConverters(library);
-    }
-
-    /**
-     * Imports a component defined in a nother frame.
-     *
-     * @param relativeName the qualified name of the component relative to
-     *      this execution frame
-     * @param alias the name under which this component will be used in the
-     *      build scripts. If this is null, the components default name is
-     *      used.
-     * @exception ExecutionException if the component cannot be imported
-     */
-    public void importFrameComponent(String relativeName, String alias)
-         throws ExecutionException {
-        ImportInfo definition
-             = frame.getReferencedDefinition(relativeName);
-
-        if (definition == null) {
-            throw new ExecutionException("The reference \"relativeName\" does"
-                 + " not refer to a defined component");
-        }
-
-        String label = alias;
-        if (label == null) {
-            label = frame.getNameInFrame(relativeName);
-        }
-
-        frame.log("Adding referenced component <" + definition.getLocalName()
-             + "> as <" + label + "> from library \""
-             + definition.getComponentLibrary().getLibraryId() + "\", class: "
-             + definition.getClassName(), MessageLevel.MSG_DEBUG);
-        definitions.put(label, definition);
-    }
-
-    /**
-     * Create a component. The component will have a context but will not be
-     * configured. It should be configured using the appropriate set methods
-     * and then validated before being used.
-     *
-     * @param componentName the name of the component
-     * @return the created component. The return type of this method depends
-     *      on the component type.
-     * @exception ExecutionException if the component cannot be created
-     */
-    public Object createComponent(String componentName)
-         throws ExecutionException {
-        return createComponent(componentName, null);
-    }
-
-    /**
-     * Create a component given its class. The component will have a context
-     * but will not be configured. It should be configured using the
-     * appropriate set methods and then validated before being used.
-     *
-     * @param componentClass the component's class
-     * @param factory the factory to create the component
-     * @param loader the classloader associated with the component
-     * @param addTaskAdapter whenther the returned component should be a
-     *      task, potentially being wrapped in an adapter
-     * @param componentName the name of the component type
-     * @return the created component. The return type of this method depends
-     *      on the component type.
-     * @exception ExecutionException if the component cannot be created
-     */
-    public Object createComponent(AntLibFactory factory, ClassLoader loader,
-                                  Class componentClass, boolean addTaskAdapter,
-                                  String componentName)
-         throws ExecutionException {
-        return createComponent(loader, factory, componentClass,
-            componentName, componentName, addTaskAdapter, null);
-    }
-
-    /**
-     * Get the collection ov converters currently configured
-     *
-     * @return A map of converter instances indexed on the class they can
-     *      convert
-     */
-    protected Map getConverters() {
-        return converters;
-    }
-
-    /**
-     * Get the collection of Ant Libraries defined for this frame Gets the
-     * factory object for the given library
-     *
-     * @param componentLibrary the compnent library for which a factory
-     *      objetc is required
-     * @return the library's factory object
-     * @exception ExecutionException if the factory cannot be created
-     */
-    protected AntLibFactory getLibFactory(ComponentLibrary componentLibrary)
-         throws ExecutionException {
-        String libraryId = componentLibrary.getLibraryId();
-        if (libFactories.containsKey(libraryId)) {
-            return (AntLibFactory) libFactories.get(libraryId);
-        }
-        ExecutionContext context
-             = new ExecutionContext(frame, null, Location.UNKNOWN_LOCATION);
-        AntLibFactory libFactory = componentLibrary.getFactory(context);
-        if (libFactory == null) {
-            libFactory = new StandardLibFactory();
-        }
-        libFactories.put(libraryId, libFactory);
-        return libFactory;
-    }
-
-    /**
-     * Get an imported definition from the component manager
-     *
-     * @param name the name under which the component has been imported
-     * @return the ImportInfo object detailing the import's library and
-     *      other details
-     */
-    protected ImportInfo getDefinition(String name) {
-        return (ImportInfo) definitions.get(name);
-    }
-
-    /**
-     * Create a component from a build model
-     *
-     * @param model the build model representing the component and its
-     *      configuration
-     * @return the configured component
-     * @exception ExecutionException if there is a problem creating or
-     *      configuring the component
-     */
-    protected Object createComponent(BuildElement model)
-         throws ExecutionException {
-        String componentName = model.getType();
-        return createComponent(componentName, model);
-    }
-
-    /**
-     * Create a component.
-     *
-     * @param componentName the name of the component which is used to
-     *      select the object type to be created
-     * @param model the build model of the component. If this is null, the
-     *      component is created but not configured.
-     * @return the configured component
-     * @exception ExecutionException if there is a problem creating or
-     *      configuring the component
-     */
-    protected Object createComponent(String componentName, BuildElement model)
-         throws ExecutionException {
-
-        Location location = Location.UNKNOWN_LOCATION;
-        if (model != null) {
-            location = model.getLocation();
-        }
-        ImportInfo definition = getDefinition(componentName);
-        if (definition == null) {
-            throw new ExecutionException("There is no definition of the <"
-                 + componentName + "> component");
-        }
-        String className = definition.getClassName();
-
-        ComponentLibrary componentLibrary
-             = definition.getComponentLibrary();
-        boolean isTask = definition.getDefinitionType() == AntLibrary.TASKDEF;
-        String localName = definition.getLocalName();
-        try {
-            ClassLoader componentLoader = componentLibrary.getClassLoader();
-            Class componentClass
-                 = Class.forName(className, true, componentLoader);
-            AntLibFactory libFactory = getLibFactory(componentLibrary);
-            return createComponent(componentLoader, libFactory, componentClass,
-                componentName, localName, isTask, model);
-        } catch (ClassNotFoundException e) {
-            throw new ExecutionException("Class " + className
-                 + " for component <" + componentName + "> was not found", e,
-                location);
-        } catch (NoClassDefFoundError e) {
-            throw new ExecutionException("Could not load a dependent class ("
-                 + e.getMessage() + ") for component " + componentName,
-                e, location);
-        } catch (ExecutionException e) {
-            e.setLocation(model.getLocation(), false);
-            throw e;
-        }
-    }
-
-    /**
-     * Import a single component from the given library
-     *
-     * @param library the library which provides the component
-     * @param defName the name of the component in the library
-     * @param alias the name to be used for the component in build files. If
-     *      this is null, the component's name within its library is used.
-     */
-    protected void importLibraryDef(ComponentLibrary library, String defName,
-                                    String alias) {
-        String label = alias;
-        if (label == null) {
-            label = defName;
-        }
-
-        AntLibDefinition libDef = library.getDefinition(defName);
-        frame.log("Adding component <" + defName + "> as <" + label
-             + "> from library \"" + library.getLibraryId() + "\", class: "
-             + libDef.getClassName(), MessageLevel.MSG_DEBUG);
-        definitions.put(label, new ImportInfo(library, libDef));
-    }
-
-    /**
-     * Gets the setter for the given class
-     *
-     * @param c the class for which the reflector is desired
-     * @return the reflector
-     */
-    private Setter getSetter(Class c) {
-        if (setters.containsKey(c)) {
-            return (Setter) setters.get(c);
-        }
-        Setter setter = null;
-        if (DeferredTask.class.isAssignableFrom(c)) {
-            setter = new DeferredSetter();
-        } else {
-            ClassIntrospector introspector
-                 = new ClassIntrospector(c, getConverters());
-            setter = introspector.getReflector();
-        }
-
-        setters.put(c, setter);
-        return setter;
-    }
-
-    /**
-     * Create a component - handles all the variations
-     *
-     * @param loader the component's classloader
-     * @param componentClass The class of the component.
-     * @param componentName The component's name in the global context
-     * @param addTaskAdapter whether the component should add a Task adapter
-     *      to make this component a Task.
-     * @param localName The name of the component within its library
-     * @param model the BuildElement model of the component's configuration
-     * @param factory the facrtory object used to create the component
-     * @return the required component potentially wrapped in a wrapper
-     *      object.
-     * @exception ExecutionException if the component cannot be created
-     */
-    private Object createComponent(ClassLoader loader, AntLibFactory factory,
-                                   Class componentClass, String componentName,
-                                   String localName, boolean addTaskAdapter,
-                                   BuildElement model)
-         throws ExecutionException {
-        // set the location to unknown unless we have a build model to use
-        Location location = Location.UNKNOWN_LOCATION;
-        if (model != null) {
-            location = model.getLocation();
-        }
-
-        try {
-            // create the component using the factory
-            Object component
-                 = factory.createComponent(componentClass, localName);
-
-            // wrap the component in an adapter if required.
-            ExecutionComponent execComponent = null;
-            if (addTaskAdapter) {
-                if (component instanceof Task) {
-                    execComponent = (Task) component;
-                } else {
-                    execComponent = new TaskAdapter(componentName, component);
-                }
-            } else if (component instanceof ExecutionComponent) {
-                execComponent = (ExecutionComponent) component;
-            }
-
-            // set the context loader to that for the component
-            ClassLoader currentLoader
-                 = LoaderUtils.setContextLoader(loader);
-
-            // if the component is an execution component create a context and
-            // initialise the component with it.
-            if (execComponent != null) {
-                ExecutionContext context
-                     = new ExecutionContext(frame, execComponent, location);
-                context.setClassLoader(loader);
-                execComponent.init(context, componentName);
-            }
-
-            // if we have a model, use it to configure the component. Otherwise
-            // the caller is expected to configure thre object
-            if (model != null) {
-                configureElement(factory, component, model);
-                // if the component is an execution component and we have a
-                // model, validate it
-                if (execComponent != null) {
-                    execComponent.validateComponent();
-                }
-            }
-
-            // reset the loader
-            LoaderUtils.setContextLoader(currentLoader);
-
-            // if we have an execution component, potentially a wrapper,
-            // return it otherwise the component directly
-            if (execComponent != null) {
-                return execComponent;
-            } else {
-                return component;
-            }
-        } catch (InstantiationException e) {
-            throw new ExecutionException("Unable to instantiate component "
-                 + "class " + componentClass.getName() + " for component <"
-                 + componentName + ">", e, location);
-        } catch (IllegalAccessException e) {
-            throw new ExecutionException("Unable to access task class "
-                 + componentClass.getName() + " for component <"
-                 + componentName + ">", e, location);
-        } catch (ExecutionException e) {
-            e.setLocation(location, false);
-            throw e;
-        } catch (RuntimeException e) {
-            throw new ExecutionException(e, location);
-        }
-    }
-
-    /**
-     * Create an instance of a type given its required class
-     *
-     * @param typeClass the class from which the instance should be created
-     * @param model the model describing the required configuration of the
-     *      instance
-     * @param libFactory the factory object of the typeClass's Ant library
-     * @param localName the name of the type within its Ant library
-     * @return an instance of the given class appropriately configured
-     * @exception ExecutionException if there is a problem creating the type
-     *      instance
-     */
-    private Object createTypeInstance(Class typeClass, AntLibFactory libFactory,
-                                      BuildElement model, String localName)
-         throws ExecutionException {
-        try {
-            Object typeInstance
-                 = libFactory.createComponent(typeClass, localName);
-
-            if (typeInstance instanceof ExecutionComponent) {
-                ExecutionComponent component 
-                    = (ExecutionComponent) typeInstance;
-                ExecutionContext context = new ExecutionContext(frame,
-                    component, model.getLocation());
-                component.init(context, localName);
-                configureElement(libFactory, typeInstance, model);
-                component.validateComponent();
-            } else {
-                configureElement(libFactory, typeInstance, model);
-            }
-            return typeInstance;
-        } catch (InstantiationException e) {
-            throw new ExecutionException("Unable to instantiate type class "
-                 + typeClass.getName() + " for type <" + model.getType() + ">",
-                e, model.getLocation());
-        } catch (IllegalAccessException e) {
-            throw new ExecutionException("Unable to access type class "
-                 + typeClass.getName() + " for type <" + model.getType() + ">",
-                e, model.getLocation());
-        } catch (ExecutionException e) {
-            e.setLocation(model.getLocation(), false);
-            throw e;
-        } catch (RuntimeException e) {
-            throw new ExecutionException(e, model.getLocation());
-        }
-    }
-
-    /**
-     * Create and add a nested element
-     *
-     * @param setter The Setter instance for the container element
-     * @param element the container element in which the nested element will
-     *      be created
-     * @param model the model of the nested element
-     * @param factory Ant Library factory associated with the element to
-     *      which the attribute is to be added.
-     * @exception ExecutionException if the nested element cannot be created
-     */
-    private void addNestedElement(AntLibFactory factory, Setter setter,
-                                  Object element, BuildElement model)
-         throws ExecutionException {
-        String nestedElementName = model.getType();
-        Class nestedType = setter.getType(nestedElementName);
-
-        // is there a polymorph indicator - look in Ant aspects
-        String typeName = model.getAspectValue(Constants.ANT_ASPECT, "type");
-        String refId = model.getAspectValue(Constants.ANT_ASPECT, "refid");
-        if (refId != null && typeName != null) {
-            throw new ExecutionException("Only one of " + Constants.ANT_ASPECT
-                 + ":type and " + Constants.ANT_ASPECT
-                 + ":refid may be specified at a time", model.getLocation());
-        }
-
-        Object typeInstance = null;
-        if (typeName != null) {
-            // the build file has specified the actual type of the element.
-            // we need to look up that type and use it
-            typeInstance = createComponent(typeName, model);
-        } else if (refId != null) {
-            // We have a reference to an existing instance. Need to check if
-            // it is compatible with the type expected by the nested element's
-            // adder method
-            typeInstance = frame.getDataValue(refId);
-            if (model.getAttributeNames().hasNext() ||
-                model.getNestedElements().hasNext() ||
-                model.getText().length() != 0) {
-                throw new ExecutionException("Element <" + nestedElementName
-                     + "> is defined by reference and hence may not specify "
-                     + "any attributes, nested elements or content",
-                    model.getLocation());
-            }
-            if (typeInstance == null) {
-                throw new ExecutionException("The given ant:refid value '"
-                     + refId + "' is not defined", model.getLocation());
-            }
-        } else if (nestedType != null) {
-            // We need to create an instance of the class expected by the nested
-            // element's adder method if that is possible
-            if (nestedType.isInterface()) {
-                throw new ExecutionException("No element can be created for "
-                     + "nested element <" + nestedElementName + ">. Please "
-                     + "provide a value by reference or specify the value type",
-                    model.getLocation());
-            }
-            typeInstance = createTypeInstance(nestedType, factory, model, null);
-        } else {
-            throw new ExecutionException("The type of the <"
-                 + nestedElementName + "> nested element is not known. "
-                 + "Please specify by the type using the \"ant:type\" "
-                 + "attribute or provide a reference to an instance with "
-                 + "the \"ant:id\" attribute");
-        }
-
-        // is the typeInstance compatible with the type expected
-        // by the element's add method
-        if (!nestedType.isInstance(typeInstance)) {
-            if (refId != null) {
-                throw new ExecutionException("The value specified by refId "
-                     + refId + " is not compatible with the <"
-                     + nestedElementName + "> nested element",
-                    model.getLocation());
-            } else if (typeName != null) {
-                throw new ExecutionException("The type "
-                     + typeName + " is not compatible with the <"
-                     + nestedElementName + "> nested element",
-                    model.getLocation());
-            }
-        }
-        setter.addElement(element, nestedElementName, typeInstance);
-    }
-
-    /**
-     * Create a nested element for the given object according to the model.
-     *
-     * @param setter the Setter instance of the container object
-     * @param element the container object for which a nested element is
-     *      required.
-     * @param model the build model for the nestd element
-     * @param factory Ant Library factory associated with the element
-     *      creating the nested element
-     * @exception ExecutionException if the nested element cannot be
-     *      created.
-     */
-    private void createNestedElement(AntLibFactory factory, Setter setter,
-                                     Object element, BuildElement model)
-         throws ExecutionException {
-        String nestedElementName = model.getType();
-        try {
-            Object nestedElement
-                 = setter.createElement(element, nestedElementName);
-            factory.registerCreatedElement(nestedElement);
-            if (nestedElement instanceof ExecutionComponent) {
-                ExecutionComponent component
-                     = (ExecutionComponent) nestedElement;
-                ExecutionContext context = new ExecutionContext(frame,
-                    component, model.getLocation());
-                component.init(context, nestedElementName);
-                configureElement(factory, nestedElement, model);
-                component.validateComponent();
-            } else {
-                configureElement(factory, nestedElement, model);
-            }
-        } catch (ExecutionException e) {
-            e.setLocation(model.getLocation(), false);
-            throw e;
-        } catch (RuntimeException e) {
-            throw new ExecutionException(e, model.getLocation());
-        }
-    }
-
-
-    /**
-     * Configure an element according to the given model.
-     *
-     * @param element the object to be configured
-     * @param model the BuildElement describing the object in the build file
-     * @param factory Ant Library factory associated with the element being
-     *      configured
-     * @exception ExecutionException if the element cannot be configured
-     */
-    private void configureElement(AntLibFactory factory, Object element,
-                                  BuildElement model)
-         throws ExecutionException {
-        Setter setter = getSetter(element.getClass());
-        // start by setting the attributes of this element
-        for (Iterator i = model.getAttributeNames(); i.hasNext();) {
-            String attributeName = (String) i.next();
-            String attributeValue = model.getAttributeValue(attributeName);
-            if (!setter.supportsAttribute(attributeName)) {
-                throw new ExecutionException(model.getType()
-                     + " does not support the \"" + attributeName
-                     + "\" attribute", model.getLocation());
-            }
-            setter.setAttribute(element, attributeName,
-                frame.replacePropertyRefs(attributeValue));
-        }
-
-        String modelText = model.getText().trim();
-        if (modelText.length() != 0) {
-            if (!setter.supportsText()) {
-                throw new ExecutionException(model.getType()
-                     + " does not support content", model.getLocation());
-            }
-            setter.addText(element,
-                frame.replacePropertyRefs(modelText));
-        }
-
-        // now do the nested elements
-        for (Iterator i = model.getNestedElements(); i.hasNext();) {
-            BuildElement nestedElementModel = (BuildElement) i.next();
-            String nestedElementName = nestedElementModel.getType();
-            ImportInfo info = getDefinition(nestedElementName);
-            if (element instanceof TaskContainer
-                 && info != null
-                 && info.getDefinitionType() == AntLibrary.TASKDEF
-                 && !setter.supportsNestedElement(nestedElementName)) {
-                // it is a nested task
-                Task nestedTask
-                     = (Task) createComponent(nestedElementModel);
-                TaskContainer container = (TaskContainer) element;
-                container.addNestedTask(nestedTask);
-            } else {
-                if (setter.supportsNestedAdder(nestedElementName)) {
-                    addNestedElement(factory, setter, element,
-                        nestedElementModel);
-                } else if (setter.supportsNestedCreator(nestedElementName)) {
-                    createNestedElement(factory, setter, element,
-                        nestedElementModel);
-                } else {
-                    throw new ExecutionException(model.getType()
-                         + " does not support the \"" + nestedElementName
-                         + "\" nested element",
-                        nestedElementModel.getLocation());
-                }
-            }
-        }
-    }
-
-    /**
-     * Define a new component
-     *
-     * @param componentName the name this component will take
-     * @param defType the type of component being defined
-     * @param factory the library factory object to create the component
-     *      instances
-     * @param loader the class loader to use to create the particular
-     *      components
-     * @param className the name of the class implementing the component
-     * @exception ExecutionException if the component cannot be defined
-     */
-    private void defineComponent(AntLibFactory factory, ClassLoader loader,
-                                 int defType, String componentName,
-                                 String className)
-         throws ExecutionException {
-        DynamicLibrary dynamicLibrary
-             = new DynamicLibrary(factory, loader);
-        dynamicLibrary.addComponent(defType, componentName, className);
-        dynamicLibraries.put(dynamicLibrary.getLibraryId(), dynamicLibrary);
-        importLibraryDef(dynamicLibrary, componentName, null);
-    }
-
-
-    /**
-     * Add the converters from the given library to those managed by this
-     * frame.
-     *
-     * @param library the library from which the converters are required
-     * @exception ExecutionException if a converter defined in the library
-     *      cannot be instantiated
-     */
-    private void addLibraryConverters(AntLibrary library)
-         throws ExecutionException {
-        if (!library.hasConverters()
-             || loadedConverters.contains(library.getLibraryId())) {
-            return;
-        }
-
-        String className = null;
-        try {
-            AntLibFactory libFactory = getLibFactory(library);
-            ClassLoader converterLoader = library.getClassLoader();
-            for (Iterator i = library.getConverterClassNames(); i.hasNext();) {
-                className = (String) i.next();
-                Class converterClass
-                     = Class.forName(className, true, converterLoader);
-                if (!Converter.class.isAssignableFrom(converterClass)) {
-                    throw new ExecutionException("In Ant library \""
-                         + library.getLibraryId() + "\" the converter class "
-                         + converterClass.getName()
-                         + " does not implement the Converter interface");
-                }
-                Converter converter
-                     = libFactory.createConverter(converterClass);
-                ExecutionContext context = new ExecutionContext(frame,
-                    null, Location.UNKNOWN_LOCATION);
-                converter.init(context);
-                Class[] converterTypes = converter.getTypes();
-                for (int j = 0; j < converterTypes.length; ++j) {
-                    converters.put(converterTypes[j], converter);
-                }
-            }
-            loadedConverters.add(library.getLibraryId());
-        } catch (ClassNotFoundException e) {
-            throw new ExecutionException("In Ant library \""
-                 + library.getLibraryId() + "\" converter class "
-                 + className + " was not found", e);
-        } catch (NoClassDefFoundError e) {
-            throw new ExecutionException("In Ant library \""
-                 + library.getLibraryId()
-                 + "\" could not load a dependent class ("
-                 + e.getMessage() + ") for converter " + className);
-        } catch (InstantiationException e) {
-            throw new ExecutionException("In Ant library \""
-                 + library.getLibraryId()
-                 + "\" unable to instantiate converter class "
-                 + className, e);
-        } catch (IllegalAccessException e) {
-            throw new ExecutionException("In Ant library \""
-                 + library.getLibraryId()
-                 + "\" unable to access converter class "
-                 + className, e);
-        }
-    }
-}
-
diff --git a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/Constants.java b/proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/Constants.java
deleted file mode 100644
index 7b93c42..0000000
--- a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/Constants.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.antcore.execution;
-
-/**
- * Core constants
- *
- * @author Conor MacNeill
- * @created 20 February 2002
- */
-public abstract class Constants {
-    /** The prefix for library ids that are automatically imported */
-    public static final String ANT_LIB_PREFIX = "ant.";
-
-    /** The Ant aspect used to identify Ant metadata */
-    public static final String ANT_ASPECT = "ant";
-}
-
diff --git a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/CoreDataService.java b/proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/CoreDataService.java
deleted file mode 100644
index ec54346..0000000
--- a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/CoreDataService.java
+++ /dev/null
@@ -1,234 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.antcore.execution;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import org.apache.ant.common.service.DataService;
-import org.apache.ant.common.util.ExecutionException;
-import org.apache.ant.common.util.PropertyUtils;
-
-/**
- * This is the core's implementation of the DataService service interface.
- * It gives Ant libraries access to property values maintained in the
- * Frame.
- *
- * @author Conor MacNeill
- * @created 31 January 2002
- */
-public class CoreDataService implements DataService {
-    /** The Frame this service instance is working for */
-    private Frame frame;
-
-    /** all properties to be unset without throwing an exception */
-    private boolean allowUnsetProperties;
-
-    /**
-     * Constructor
-     *
-     * @param frame the frame containing this context
-     * @param allowUnsetProperties true if the reference to an unset
-     *      property should not throw an exception
-     */
-    protected CoreDataService(Frame frame,
-                                boolean allowUnsetProperties) {
-        this.frame = frame;
-        this.allowUnsetProperties = allowUnsetProperties;
-    }
-
-    /**
-     * Set a data value. If an existing data value exists, associated with
-     * the given name, the value will not be changed
-     *
-     * @param valueName the name of the data value
-     * @param value the value to be associated with the name
-     * @exception ExecutionException if the value cannot be set
-     */
-    public void setDataValue(String valueName, Object value)
-         throws ExecutionException {
-        frame.setDataValue(valueName, value, false);
-    }
-
-    /**
-     * Set a data value which can be overwritten
-     *
-     * @param valueName the name of the data value
-     * @param value the value to be associated with the name
-     * @exception ExecutionException if the value cannot be set
-     */
-    public void setMutableDataValue(String valueName, Object value)
-         throws ExecutionException {
-        frame.setDataValue(valueName, value, true);
-    }
-
-    /**
-     * Get a data value
-     *
-     * @param valueName the name of the data value
-     * @return the current object associated with the name or null if no
-     *      value is currently associated with the name
-     * @exception ExecutionException if the value cannot be retrieved.
-     */
-    public Object getDataValue(String valueName) throws ExecutionException {
-        return frame.getDataValue(valueName);
-    }
-
-    /**
-     * Indicate if a data value has been set
-     *
-     * @param name the name of the data value - may contain reference
-     *      delimiters
-     * @return true if the value exists
-     * @exception ExecutionException if the containing frame for the value
-     *      does not exist
-     */
-    public boolean isDataValueSet(String name) throws ExecutionException {
-        return frame.isDataValueSet(name);
-    }
-
-    /**
-     * Get all the properties from the frame and any references frames. This
-     * is an expensive operation since it must clone all of the property
-     * stores in all frames
-     *
-     * @return a Map containing the frames properties indexed by their full
-     *      name.
-     */
-    public Map getAllProperties() {
-        return frame.getAllProperties();
-    }
-
-    /**
-     * Replace ${} style constructions in the given value with the string
-     * value of the corresponding data values in the frame
-     *
-     * @param value the string to be scanned for property references.
-     * @return the string with all property references replaced
-     * @exception ExecutionException if any of the properties do not exist
-     */
-    public String replacePropertyRefs(String value)
-         throws ExecutionException {
-        if (value == null) {
-            return null;
-        }
-
-        List fragments = new ArrayList();
-        List propertyRefs = new ArrayList();
-        PropertyUtils.parsePropertyString(value, fragments, propertyRefs);
-
-        StringBuffer sb = new StringBuffer();
-        Iterator i = fragments.iterator();
-        Iterator j = propertyRefs.iterator();
-        while (i.hasNext()) {
-            String fragment = (String) i.next();
-            if (fragment == null) {
-                String propertyName = (String) j.next();
-                if (!isDataValueSet(propertyName)) {
-                    if (!allowUnsetProperties) {
-                        throw new ExecutionException("Property \""
-                             + propertyName + "\" has not been set");
-                    }
-                    fragment = "${" + propertyName + "}";
-                } else {
-                    fragment = getDataValue(propertyName).toString();
-                }
-            }
-            sb.append(fragment);
-        }
-
-        return sb.toString();
-    }
-
-    /**
-     * Replace ${} style constructions in the given value with the string
-     * value of the objects in the given map. Any values which are not found
-     * are left unchanged.
-     *
-     * @param value the string to be scanned for property references.
-     * @param replacementValues the collection of replacement values
-     * @return the string with all property references replaced
-     * @exception ExecutionException if any of the properties do not exist
-     */
-    public String replacePropertyRefs(String value, Map replacementValues)
-         throws ExecutionException {
-        if (value == null) {
-            return null;
-        }
-
-        List fragments = new ArrayList();
-        List propertyRefs = new ArrayList();
-        PropertyUtils.parsePropertyString(value, fragments, propertyRefs);
-
-        StringBuffer sb = new StringBuffer();
-        Iterator i = fragments.iterator();
-        Iterator j = propertyRefs.iterator();
-        while (i.hasNext()) {
-            String fragment = (String) i.next();
-            if (fragment == null) {
-                String propertyName = (String) j.next();
-                if (!replacementValues.containsKey(propertyName)) {
-                    fragment = "${" + propertyName + "}";
-                } else {
-                    fragment
-                         = replacementValues.get(propertyName).toString();
-                }
-            }
-            sb.append(fragment);
-        }
-
-        return sb.toString();
-    }
-}
-
diff --git a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/CoreEventService.java b/proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/CoreEventService.java
deleted file mode 100644
index ca9d1c8..0000000
--- a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/CoreEventService.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.antcore.execution;
-import org.apache.ant.common.event.BuildListener;
-import org.apache.ant.common.service.EventService;
-import org.apache.ant.common.util.ExecutionException;
-
-/**
- * Core implementation of the event service
- *
- * @author Conor MacNeill
- * @created 7 February 2002
- */
-public class CoreEventService implements EventService {
-    /** The Frame this service instance is working for */
-    private Frame frame;
-
-    /**
-     * Constructor
-     *
-     * @param frame the frame for which this instance is providing service
-     */
-    protected CoreEventService(Frame frame) {
-        this.frame = frame;
-    }
-
-    /**
-     * Add a build listener to the current frame
-     *
-     * @param listener the lister which will receive build events
-     * @exception ExecutionException if the listener cannot be added
-     */
-    public void addBuildListener(BuildListener listener)
-         throws ExecutionException {
-        frame.addBuildListener(listener);
-    }
-
-    /**
-     * Remove a listener from the current frame
-     *
-     * @param listener the listener to be removed
-     * @exception ExecutionException if the listener could not be removed
-     */
-    public void removeBuildListener(BuildListener listener)
-         throws ExecutionException {
-        frame.removeBuildListener(listener);
-    }
-}
-
diff --git a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/CoreExecService.java b/proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/CoreExecService.java
deleted file mode 100644
index a12ffc7..0000000
--- a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/CoreExecService.java
+++ /dev/null
@@ -1,272 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.antcore.execution;
-import java.io.File;
-import java.net.MalformedURLException;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import org.apache.ant.antcore.modelparser.XMLProjectParser;
-import org.apache.ant.antcore.xml.XMLParseException;
-import org.apache.ant.common.antlib.AntContext;
-import org.apache.ant.common.antlib.Task;
-import org.apache.ant.common.model.Project;
-import org.apache.ant.common.service.ExecService;
-import org.apache.ant.common.util.ExecutionException;
-import org.apache.ant.init.InitUtils;
-import org.apache.ant.init.LoaderUtils;
-
-/**
- * This is the core's implementation of the Execution Service.
- *
- * @author Conor MacNeill
- * @created 8 February 2002
- */
-public class CoreExecService implements ExecService {
-
-    /** The Frame this service instance is working for */
-    private Frame frame;
-
-    /** A map of subbuild keys to the frame of the subbuild. */
-    private Map subBuilds = new HashMap();
-
-
-    /**
-     * Constructor
-     *
-     * @param frame the frame containing this context
-     */
-    protected CoreExecService(Frame frame) {
-        this.frame = frame;
-    }
-
-
-    /**
-     * Execute a task. The task should have already been initialised by the
-     * core. This is checked
-     *
-     * @param task the task to be executed
-     * @exception ExecutionException if there is an execution problem
-     */
-    public void executeTask(Task task) throws ExecutionException {
-        AntContext context = task.getAntContext();
-
-        if (!(context instanceof ExecutionContext)) {
-            throw new ExecutionException("The Task was not configured with an"
-                 + " appropriate context");
-        }
-        ExecutionContext execContext = (ExecutionContext) context;
-
-        frame.getEventSupport().fireTaskStarted(task);
-
-        Throwable failureCause = null;
-
-        try {
-            ClassLoader currentLoader
-                 = LoaderUtils.setContextLoader(execContext.getClassLoader());
-
-            task.execute();
-            LoaderUtils.setContextLoader(currentLoader);
-        } catch (ExecutionException e) {
-            failureCause = e;
-            throw e;
-        } catch (Throwable e) {
-            ExecutionException ee =
-                new ExecutionException(e);
-
-            failureCause = ee;
-            throw ee;
-        } finally {
-            frame.getEventSupport().fireTaskFinished(task, failureCause);
-        }
-    }
-
-
-    /**
-     * Get the base directory for this execution of this frame
-     *
-     * @return the base directory
-     */
-    public File getBaseDir() {
-        return frame.getBaseDir();
-    }
-
-
-    /**
-     * get the name of the project associated with this execution.
-     *
-     * @return the project's name
-     */
-    public String getProjectName() {
-        return frame.getProjectName();
-    }
-
-
-    /**
-     * Gets the Frame for a subbuild based on the key
-     *
-     * @param key Description of the Parameter
-     * @return the subbuild's Frame
-     * @exception ExecutionException if the build cannot be found.
-     */
-    private Frame getSubbuildFrame(Object key) throws ExecutionException {
-        Frame subFrame = (Frame) subBuilds.get(key);
-
-        if (subFrame == null) {
-            throw new ExecutionException("Could not find execution frame "
-                 + "for subbuild");
-        }
-        return subFrame;
-    }
-
-
-    /**
-     * Handle subbuild output.
-     *
-     * @param subbuildKey the core's key for managing the subbuild.
-     * @param line the content produce by the current thread.
-     * @param isErr true if this content is from the thread's error stream.
-     * @exception ExecutionException if the subbuild cannot be found.
-     */
-    public void handleBuildOutput(Object subbuildKey, String line,
-                                  boolean isErr) throws ExecutionException {
-        getSubbuildFrame(subbuildKey).threadOutput(line, isErr);
-    }
-
-
-    /**
-     * Run a build which have been previously setup
-     *
-     * @param targets A list of targets to be run
-     * @param key Description of the Parameter
-     * @exception ExecutionException if the build cannot be run
-     */
-    public void runBuild(Object key, List targets) throws ExecutionException {
-        getSubbuildFrame(key).runBuild(targets);
-        subBuilds.remove(key);
-    }
-
-
-    /**
-     * Parse an XML file into a build model.
-     *
-     * @param xmlBuildFile The file containing the XML build description.
-     * @return A Project model for the build.
-     * @exception ExecutionException if the build cannot be parsed
-     */
-    public Project parseXMLBuildFile(File xmlBuildFile)
-         throws ExecutionException {
-        try {
-            // Parse the build file into a project
-            XMLProjectParser parser = new XMLProjectParser();
-
-            return parser.parseBuildFile(InitUtils.getFileURL(xmlBuildFile));
-        } catch (MalformedURLException e) {
-            throw new ExecutionException(e);
-        } catch (XMLParseException e) {
-            throw new ExecutionException(e);
-        }
-    }
-
-
-    /**
-     * Create a project reference.
-     *
-     * @param referenceName the name under which the project will be
-     *      referenced.
-     * @param model the project model.
-     * @param initialData the project's initial data load.
-     * @exception ExecutionException if the project cannot be referenced.
-     */
-    public void createProjectReference(String referenceName, Project model, 
-                                       Map initialData)
-         throws ExecutionException {
-        frame.createProjectReference(referenceName, model, initialData);     
-    }
-
-
-    /**
-     * Setup a sub-build.
-     *
-     * @param model the project model to be used for the build
-     * @param properties the initiali properties to be used in the build
-     * @return Description of the Return Value
-     * @exception ExecutionException if the subbuild cannot be run
-     */
-    public Object setupBuild(Project model, Map properties)
-         throws ExecutionException {
-        Frame newFrame = frame.createFrame(model);
-
-        newFrame.setInitialProperties(properties);
-
-        Object key = new Object();
-
-        subBuilds.put(key, newFrame);
-        return key;
-    }
-
-
-    /**
-     * Setup a sub-build using the current frame's project model
-     *
-     * @param properties the initiali properties to be used in the build
-     * @return Description of the Return Value
-     * @exception ExecutionException if the subbuild cannot be run
-     */
-    public Object setupBuild(Map properties)
-         throws ExecutionException {
-        return setupBuild(frame.getProject(), properties);
-    }
-}
-
diff --git a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/CoreFileService.java b/proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/CoreFileService.java
deleted file mode 100644
index d860b4a..0000000
--- a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/CoreFileService.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.antcore.execution;
-import java.io.File;
-import org.apache.ant.common.service.FileService;
-import org.apache.ant.common.util.ExecutionException;
-import org.apache.ant.common.util.FileUtils;
-
-/**
- * The core's implementation of the File Service. The File Service is used
- * by Ant Library components to perform operations on the local file system
- *
- * @author Conor MacNeill
- * @created 27 January 2002
- */
-public class CoreFileService implements FileService {
-    /** The Frame this service instance is working for */
-    private Frame frame;
-
-    /** General file utilities */
-    private FileUtils fileUtils = FileUtils.newFileUtils();
-
-    /**
-     * Constructor
-     *
-     * @param frame the frame containing this context
-     */
-    protected CoreFileService(Frame frame) {
-        this.frame = frame;
-    }
-
-    /**
-     * Resolve a file according to the base directory of the project
-     * associated with this context
-     *
-     * @param fileName the file name to be resolved.
-     * @return the file resolved to the project's base dir
-     * @exception ExecutionException if the file cannot be resolved.
-     */
-    public File resolveFile(String fileName) throws ExecutionException {
-        File base = frame.getBaseDir();
-        return fileUtils.resolveFile(fileUtils.normalize(base.getPath()),
-            fileName);
-    }
-}
-
diff --git a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/CoreInputService.java b/proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/CoreInputService.java
deleted file mode 100644
index 690dee1..0000000
--- a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/CoreInputService.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.antcore.execution;
-import org.apache.ant.common.service.InputService;
-import org.apache.ant.common.util.ExecutionException;
-import org.apache.ant.common.input.InputRequest;
-
-/**
- * The core's implementation of the Input Service.
- *
- * @author Conor MacNeill
- * @created 30 April 2002
- */
-public class CoreInputService implements InputService {
-    /** The Frame this service instance is working for */
-    private Frame frame;
-
-    /**
-     * Constructor
-     *
-     * @param frame the frame containing this context
-     */
-    protected CoreInputService(Frame frame) {
-        this.frame = frame;
-    }
-
-    /**
-     * Handle an input request
-     *
-     * @param request an input request
-     * @exception ExecutionException if the request cannot be handled
-     */
-    public void handleInput(InputRequest request) throws ExecutionException {
-        // XXX
-    }
-}
-
diff --git a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/DeferredSetter.java b/proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/DeferredSetter.java
deleted file mode 100644
index 0f7dbcb..0000000
--- a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/DeferredSetter.java
+++ /dev/null
@@ -1,191 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.antcore.execution;
-import org.apache.ant.common.antlib.DeferredTask;
-import org.apache.ant.common.util.ExecutionException;
-
-/**
- * An implementation of the Setter interface for configuring instances of
- * the DeferredTask interface
- *
- * @author Conor MacNeill
- * @created 11 February 2002
- */
-public class DeferredSetter implements Setter {
-    /**
-     * Set an attribute value on an object
-     *
-     * @param obj the object on which the value is being set
-     * @param attributeName the name of the attribute
-     * @param value the string represenation of the attribute's value
-     * @exception ExecutionException if the object does not support the
-     *      attribute or the object has a problem setting the value
-     */
-    public void setAttribute(Object obj, String attributeName,
-                             String value) throws ExecutionException {
-        DeferredTask task = (DeferredTask) obj;
-        task.setAttribute(attributeName, value);
-    }
-
-
-    /**
-     * Get the type of the given nested element
-     *
-     * @param elementName the nested element whose type is desired
-     * @return the class instance representing the type of the element adder
-     */
-    public Class getType(String elementName) {
-        return null;
-    }
-
-    /**
-     * Adds PCDATA to the element
-     *
-     * @param obj the instance whose content is being provided
-     * @param text the required content
-     * @exception ExecutionException if the object does not support
-     *      contentor the object has a problem setting the content
-     */
-    public void addText(Object obj, String text)
-         throws ExecutionException {
-        DeferredTask task = (DeferredTask) obj;
-        task.addText(text);
-    }
-
-    /**
-     * Add an element to the given object
-     *
-     * @param obj The object to which the element is being added
-     * @param elementName the name of the element
-     * @param value the object to be added - the nested element
-     * @exception ExecutionException if the object does not support content
-     *      or the object has a problem setting the content
-     */
-    public void addElement(Object obj, String elementName, Object value)
-         throws ExecutionException {
-        DeferredTask task = (DeferredTask) obj;
-        task.addElement(elementName, value);
-    }
-
-    /**
-     * Create a nested element using the object's element factory method.
-     *
-     * @param container the object in which the nested element is required.
-     * @param elementName the name of the nested element
-     * @return the new instance of the nested element
-     * @exception ExecutionException if the nested element cannot be
-     *      created.
-     */
-    public Object createElement(Object container, String elementName)
-         throws ExecutionException {
-        throw new ExecutionException("Deferred Tasks do not support "
-             + "creation of nested elements");
-    }
-
-    /**
-     * Indicate if the class assocated with this reflector supports the
-     * addition of text content.
-     *
-     * @return true if the class supports an addText method
-     */
-    public boolean supportsText() {
-        return true;
-    }
-
-    /**
-     * Indicate if the class assocated with this reflector supports the
-     * given attribute
-     *
-     * @param attributeName the name of the attribute
-     * @return true if the given attribute is supported
-     */
-    public boolean supportsAttribute(String attributeName) {
-        return true;
-    }
-
-    /**
-     * Determine if the class associated with this reflector supports a
-     * particular nested element via a create factory method
-     *
-     * @param elementName the name of the element
-     * @return true if the class supports creation of that element
-     */
-    public boolean supportsNestedCreator(String elementName) {
-        return false;
-    }
-
-    /**
-     * Determine if the class associated with this reflector supports a
-     * particular nested element via an add method
-     *
-     * @param elementName the name of the element
-     * @return true if the class supports addition of that element
-     */
-    public boolean supportsNestedAdder(String elementName) {
-        return true;
-    }
-
-    /**
-     * Determine if the class associated with this reflector supports a
-     * particular nested element
-     *
-     * @param elementName the name of the element
-     * @return true if the class supports the given type of nested element
-     */
-    public boolean supportsNestedElement(String elementName) {
-        return true;
-    }
-
-}
-
diff --git a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/ExecutionContext.java b/proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/ExecutionContext.java
deleted file mode 100755
index 2287a4c..0000000
--- a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/ExecutionContext.java
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.antcore.execution;
-import org.apache.ant.common.antlib.AntContext;
-import org.apache.ant.common.antlib.ExecutionComponent;
-import org.apache.ant.common.util.ExecutionException;
-import org.apache.ant.common.util.Location;
-
-/**
- * This is the core's implementation of the AntContext for all core objects.
- * Specific subclasses handle types and tasks
- *
- * @author Conor MacNeill
- * @created 20 January 2002
- */
-public class ExecutionContext implements AntContext {
-    /** The Frame containing this context */
-    private Frame frame;
-
-    /** the event support instance used to manage build events */
-    private BuildEventSupport eventSupport;
-
-    /** The location of the object associated with this context */
-    private Location location;
-
-    /** the execution component associated with the context, if any */
-    private ExecutionComponent component;
-
-    /**
-     * the loader used to load this context. Note that this is not
-     * necessarily the loader which is used to load the component as loading
-     * may have been delegated to a parent loader.
-     */
-    private ClassLoader loader;
-
-    /**
-     * Initilaise this context's environment
-     *
-     * @param frame the frame containing this context
-     * @param component the component associated with this context - may be null
-     * @param location the location associated with the component
-     */
-    protected ExecutionContext(Frame frame, ExecutionComponent component,
-                               Location location) {
-        this.frame = frame;
-        this.eventSupport = frame.getEventSupport();
-        this.location = location;
-        this.component = component;
-    }
-
-    /**
-     * Get an implementation of one of the core's service interfaces
-     *
-     * @param serviceInterfaceClass the interface class for which an
-     *      implementation is required
-     * @return the core's implementation of the interface.
-     * @exception ExecutionException if there is a problem finding the
-     *      interface
-     */
-    public Object getCoreService(Class serviceInterfaceClass)
-         throws ExecutionException {
-        return frame.getCoreService(serviceInterfaceClass);
-    }
-
-
-    /**
-     * Gets the location associated with the ExecutionContext
-     *
-     * @return the location in the build model associated with this context.
-     */
-    public Location getLocation() {
-        return location;
-    }
-
-    /**
-     * Log a message as a build event
-     *
-     * @param message the message to be logged
-     * @param level the priority level of the message
-     */
-    public void log(String message, int level) {
-        Object source = component;
-        if (source == null) {
-            source = frame.getProject();
-            if (source == null) {
-                source = frame;
-            }
-        }
-        eventSupport.fireMessageLogged(source, message, level);
-    }
-
-    /**
-     * Sets the classLoader of the ExecutionContext
-     *
-     * @param loader the new classLoader value
-     */
-    protected void setClassLoader(ClassLoader loader) {
-        this.loader = loader;
-    }
-
-    /**
-     * Gets the loader for this context
-     *
-     * @return the context's loader
-     */
-    public ClassLoader getClassLoader() {
-        return loader;
-    }
-
-    /**
-     * Gets the executionComponent of the ExecutionContext
-     *
-     * @return the executionComponent value
-     */
-    protected ExecutionComponent getExecutionComponent() {
-        return component;
-    }
-}
-
diff --git a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/ExecutionException.java b/proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/ExecutionException.java
deleted file mode 100755
index f66cf5f..0000000
--- a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/ExecutionException.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.antcore.execution;
-
-import org.apache.ant.common.util.AntException;
-import org.apache.ant.common.util.Location;
-
-/**
- * An ExecutionException indicates a problem while executing tasks in a
- * build
- *
- * @author Conor MacNeill
- * @created 20 January 2002
- */
-public class ExecutionException extends AntException {
-    /**
-     * Constructs an exception with the given descriptive message.
-     *
-     * @param msg Description of or information about the exception.
-     */
-    public ExecutionException(String msg) {
-        super(msg);
-    }
-
-
-    /**
-     * Constructs an exception with the given descriptive message and a
-     * location in a file.
-     *
-     * @param msg Description of or information about the exception.
-     * @param location Location in the project file where the error occured.
-     */
-    public ExecutionException(String msg, Location location) {
-        super(msg, location);
-    }
-
-
-    /**
-     * Constructs an exception with the given message and exception as a
-     * root cause.
-     *
-     * @param msg Description of or information about the exception.
-     * @param cause Throwable that might have cause this one.
-     */
-    public ExecutionException(String msg, Throwable cause) {
-        super(msg, cause);
-    }
-
-
-    /**
-     * Constructs an exception with the given message and exception as a
-     * root cause and a location in a file.
-     *
-     * @param msg Description of or information about the exception.
-     * @param cause Exception that might have cause this one.
-     * @param location Location in the project file where the error occured.
-     */
-    public ExecutionException(String msg, Throwable cause, Location location) {
-        super(msg, cause, location);
-    }
-
-
-    /**
-     * Constructs an exception with the given exception as a root cause.
-     *
-     * @param cause Exception that might have caused this one.
-     */
-    public ExecutionException(Throwable cause) {
-        super(cause);
-    }
-
-
-    /**
-     * Constructs an exception with the given exception as a root cause and
-     * a location in a file.
-     *
-     * @param cause Exception that might have cause this one.
-     * @param location Location in the project file where the error occured.
-     */
-    public ExecutionException(Throwable cause, Location location) {
-        super(cause, location);
-    }
-
-}
-
diff --git a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/ExecutionManager.java b/proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/ExecutionManager.java
deleted file mode 100755
index 2965147..0000000
--- a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/ExecutionManager.java
+++ /dev/null
@@ -1,199 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.antcore.execution;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import org.apache.ant.antcore.config.AntConfig;
-import org.apache.ant.common.event.BuildListener;
-import org.apache.ant.common.model.Project;
-import org.apache.ant.common.util.AntException;
-import org.apache.ant.common.util.ExecutionException;
-import org.apache.ant.common.util.DemuxOutputReceiver;
-import org.apache.ant.init.InitConfig;
-
-/**
- * The ExecutionManager is used to manage the execution of a build. The
- * Execution manager is responsible for loading the Ant task libraries,
- * creating Frames for each project that is part of the build and then
- * executing the tasks within those Execution Frames.
- *
- * @author Conor MacNeill
- * @created 12 January 2002
- */
-public class ExecutionManager implements DemuxOutputReceiver {
-    /** BuildEvent support used to fire events and manage listeners */
-    private BuildEventSupport eventSupport = new BuildEventSupport();
-
-    /** The Execution Frame for the top level project being executed */
-    private Frame mainFrame;
-
-    /**
-     * The configuration to be used in this execution of Ant. It is formed
-     * from the system, user and any runtime configs.
-     */
-    private AntConfig config;
-
-    /**
-     * Ant's initialization configuration with information on the location
-     * of Ant and its libraries.
-     */
-    private InitConfig initConfig;
-
-    /**
-     * Create an ExecutionManager. When an ExecutionManager is created, it
-     * loads the ant libraries which are installed in the Ant lib/task
-     * directory.
-     *
-     * @param initConfig Ant's configuration - classloaders etc
-     * @param config The user config to use - may be null
-     * @exception ExecutionException if there is a problem with one of Ant's
-     *      tasks
-     */
-    public ExecutionManager(InitConfig initConfig, AntConfig config)
-         throws ExecutionException {
-        this.config = config;
-        this.initConfig = initConfig;
-        init();
-    }
-
-    /**
-     * Initialise the execution manager
-     *
-     * @exception ExecutionException if the standard ant libraries cannot be
-     *      loaded
-     */
-    public void init() throws ExecutionException {
-    }
-
-    /**
-     * Run a build, executing each of the targets on the given project
-     *
-     * @param project the project model to be used for the build
-     * @param targets a list of target names to be executed.
-     * @param commandProperties the properties defined by the front end to
-     *      control the build
-     * @exception AntException if there is a problem in the build
-     */
-    public void runBuild(Project project, List targets, Map commandProperties)
-         throws AntException {
-        Throwable buildFailureCause = null;
-        try {
-            
-            // start by validating the project we have been given.
-            project.validate();
-
-            mainFrame = new Frame(initConfig, config);
-            for (Iterator j = eventSupport.getListeners(); j.hasNext();) {
-                BuildListener listener = (BuildListener) j.next();
-                mainFrame.addBuildListener(listener);
-            }
-
-            mainFrame.setProject(project);
-            mainFrame.setInitialProperties(commandProperties);
-
-            eventSupport.fireBuildStarted(project);
-            mainFrame.runBuild(targets);
-        } catch (RuntimeException e) {
-            buildFailureCause = e;
-            throw e;
-        } catch (AntException e) {
-            buildFailureCause = e;
-            throw e;
-        } finally {
-            eventSupport.fireBuildFinished(project, buildFailureCause);
-        }
-    }
-
-    /**
-     * Add a build listener to the build
-     *
-     * @param listener the listener to be added to the build
-     */
-    public void addBuildListener(BuildListener listener) {
-        eventSupport.addBuildListener(listener);
-        if (mainFrame != null) {
-            mainFrame.addBuildListener(listener);
-        }
-    }
-
-    /**
-     * Remove a build listener from the execution
-     *
-     * @param listener the listener to be removed
-     */
-    public void removeBuildListener(BuildListener listener) {
-        eventSupport.removeBuildListener(listener);
-        if (mainFrame != null) {
-            mainFrame.removeBuildListener(listener);
-        }
-    }
-
-    /**
-     * Handle the content from a single thread. This method will be called
-     * by the thread producing the content. The content is broken up into
-     * separate lines
-     *
-     * @param line the content produce by the current thread.
-     * @param isErr true if this content is from the thread's error stream.
-     */
-    public void threadOutput(String line, boolean isErr) {
-        if (mainFrame == null) {
-            eventSupport.threadOutput(line, isErr);
-        } else {
-            mainFrame.threadOutput(line, isErr);
-        }
-    }
-}
-
diff --git a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/Frame.java b/proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/Frame.java
deleted file mode 100644
index fe59c54..0000000
--- a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/Frame.java
+++ /dev/null
@@ -1,1043 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.antcore.execution;
-import java.io.File;
-import java.net.URL;
-import java.net.MalformedURLException;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.StringTokenizer;
-import java.util.List;
-import java.util.ArrayList;
-import org.apache.ant.antcore.config.AntConfig;
-import org.apache.ant.common.antlib.Task;
-import org.apache.ant.common.event.BuildListener;
-import org.apache.ant.common.event.MessageLevel;
-import org.apache.ant.common.model.BuildElement;
-import org.apache.ant.common.model.Project;
-import org.apache.ant.common.model.Target;
-import org.apache.ant.common.service.ComponentService;
-import org.apache.ant.common.service.DataService;
-import org.apache.ant.common.service.EventService;
-import org.apache.ant.common.service.ExecService;
-import org.apache.ant.common.service.FileService;
-import org.apache.ant.common.service.InputService;
-import org.apache.ant.common.service.MagicProperties;
-import org.apache.ant.common.util.DemuxOutputReceiver;
-import org.apache.ant.common.util.ExecutionException;
-import org.apache.ant.common.util.FileUtils;
-import org.apache.ant.init.InitConfig;
-
-/**
- * An Frame maintains the state of a project during an execution. The Frame
- * contains the data values set by Ant tasks as they are executed, including
- * task definitions, property values, etc.
- *
- * @author Conor MacNeill
- * @created 14 January 2002
- */
-public class Frame implements DemuxOutputReceiver {
-    /** the base dir of the project */
-    private File baseDir;
-
-    /** The Project that this execution frame is processing */
-    private Project project = null;
-
-    /** The referenced frames corresponding to the referenced projects */
-    private Map referencedFrames = new HashMap();
-
-    /** 
-     * The property overrides for the referenced frames. This map is indexed 
-     * by the reference names of the frame. Each entry is another Map of 
-     * property values indexed by their relative name.
-     */
-    private Map overrides = new HashMap();
-    
-    /**
-     * The context of this execution. This contains all data object's created
-     * by tasks that have been executed
-     */
-    private Map dataValues = new HashMap();
-
-    /**
-     * Ant's initialization configuration with information on the location of
-     * Ant and its libraries.
-     */
-    private InitConfig initConfig;
-
-    /** BuildEvent support used to fire events and manage listeners */
-    private BuildEventSupport eventSupport = new BuildEventSupport();
-
-    /**
-     * The services map is a map of service interface classes to instances
-     * which provide the service.
-     */
-    private Map services = new HashMap();
-
-    /**
-     * The configuration to be used in this execution of Ant. It is formed
-     * from the system, user and any runtime configs.
-     */
-    private AntConfig config;
-
-    /**
-     * The Data Service instance used by the frame for data management
-     */
-    private DataService dataService;
-
-    /** The execution file service instance */
-    private FileService fileService;
-
-    /**
-     * the Component Manager used to manage the importing of library
-     * components from the Ant libraries
-     */
-    private ComponentManager componentManager;
-
-    /** The core's execution Service */
-    private CoreExecService execService;
-
-
-    /**
-     * Create an Execution Frame for the given project
-     *
-     * @param config the user config to use for this execution of Ant
-     * @param initConfig Ant's initialisation config
-     * @exception ExecutionException if a component of the library cannot be
-     *      imported
-     */
-    protected Frame(InitConfig initConfig,
-                    AntConfig config) throws ExecutionException {
-        this.config = config;
-        this.initConfig = initConfig;
-    }
-
-
-    /**
-     * Replace ${} style constructions in the given value with the string
-     * value of the corresponding data values in the frame
-     *
-     * @param value the string to be scanned for property references.
-     * @return the string with all property references replaced
-     * @exception ExecutionException if any of the properties do not exist
-     */
-    protected String replacePropertyRefs(String value) 
-         throws ExecutionException {
-        return dataService.replacePropertyRefs(value);
-    }
-
-
-    /**
-     * Sets the Project of the Frame
-     *
-     * @param project The new Project value
-     * @exception ExecutionException if any required sub-frames cannot be
-     *      created and configured
-     */
-    protected void setProject(Project project) throws ExecutionException {
-        this.project = project;
-        referencedFrames.clear();
-    }
-
-
-    /**
-     * get the name of the project associated with this frame.
-     *
-     * @return the project's name
-     */
-    protected String getProjectName() {
-        if (project != null) {
-            return project.getName();
-        }
-        return null;
-    }
-
-
-    /**
-     * Set a value in this frame or any of its imported frames.
-     *
-     * @param name the name of the value
-     * @param value the actual value
-     * @param mutable if true, existing values can be changed
-     * @exception ExecutionException if the value name is invalid
-     */
-    protected void setDataValue(String name, Object value, boolean mutable)
-         throws ExecutionException {
-        Frame frame = getContainingFrame(name);
-
-        if (frame == null) {
-            setOverrideProperty(name, value, mutable);
-            return;
-        }
-
-        if (frame == this) {
-            if (dataValues.containsKey(name) && !mutable) {
-                log("Ignoring oveeride for data value " + name,
-                    MessageLevel.MSG_VERBOSE);
-            } else {
-                dataValues.put(name, value);
-            }
-        } else {
-            frame.setDataValue(getNameInFrame(name), value, mutable);
-        }
-    }
-
-    /**
-     * When a frame has not yet been referenced, this method is used
-     * to set the initial properties for the frame when it is introduced.
-     *
-     * @param name the name of the value
-     * @param value the actual value
-     * @param mutable if true, existing values can be changed
-     * @exception ExecutionException if attempting to override a property in 
-     *                               the current frame. 
-     */
-    private void setOverrideProperty(String name, Object value, 
-                                     boolean mutable) 
-         throws ExecutionException {
-        int refIndex = name.indexOf(Project.REF_DELIMITER);
-        if (refIndex == -1) {
-            throw new ExecutionException("Property overrides can only be set" 
-                + " for properties in referenced projects - not " 
-                + name);
-        }
-        
-        String firstFrameName = name.substring(0, refIndex);
-        
-        String relativeName 
-            = name.substring(refIndex + Project.REF_DELIMITER.length());
-
-        Map frameOverrides = (Map) overrides.get(firstFrameName);
-        if (frameOverrides == null) {
-            frameOverrides = new HashMap();
-            overrides.put(firstFrameName, frameOverrides);
-        }
-
-        if (mutable || !frameOverrides.containsKey(relativeName)) {
-            frameOverrides.put(relativeName, value);
-        }            
-    }
-    
-    /**
-     * Get a value which exists in the frame property overrides awaiting 
-     * the frame to be introduced.
-     *
-     * @param name the name of the value
-     * @return the value of the property or null if the property does not 
-     * exist.
-     * @exception ExecutionException if attempting to get an override in 
-     *                               the current frame. 
-     */
-    private Object getOverrideProperty(String name) throws ExecutionException {
-        int refIndex = name.indexOf(Project.REF_DELIMITER);
-        if (refIndex == -1) {
-            throw new ExecutionException("Property overrides can only be" 
-                + " returned for properties in referenced projects - not " 
-                + name);
-        }
-        
-        String firstFrameName = name.substring(0, refIndex);
-        
-        String relativeName 
-            = name.substring(refIndex + Project.REF_DELIMITER.length());
-
-        Map frameOverrides = (Map) overrides.get(firstFrameName);
-        if (frameOverrides == null) {
-            return null;
-        }
-
-        return frameOverrides.get(relativeName);
-    }
-    
-    /**
-     * Get a value which exists in the frame property overrides awaiting 
-     * the frame to be introduced.
-     *
-     * @param name the name of the value
-     * @return the value of the property or null if the property does not 
-     * exist.
-     * @exception ExecutionException if attempting to check an override in 
-     *                               the current frame. 
-     */
-    private boolean isOverrideSet(String name) throws ExecutionException {
-        int refIndex = name.indexOf(Project.REF_DELIMITER);
-        if (refIndex == -1) {
-            throw new ExecutionException("Property overrides can only be" 
-                + " returned for properties in referenced projects - not " 
-                + name);
-        }
-        
-        String firstFrameName = name.substring(0, refIndex);
-        
-        String relativeName 
-            = name.substring(refIndex + Project.REF_DELIMITER.length());
-
-        Map frameOverrides = (Map) overrides.get(firstFrameName);
-        if (frameOverrides == null) {
-            return false;
-        }
-
-        return frameOverrides.containsKey(relativeName);
-    }
-    
-
-    /**
-     * Set the initial properties to be used when the frame starts execution
-     *
-     * @param properties a Map of named properties which may in fact be any
-     *      object
-     * @exception ExecutionException if the properties cannot be set
-     */
-    protected void setInitialProperties(Map properties)
-         throws ExecutionException {
-        if (properties != null) {
-            addProperties(properties);
-        }
-
-        // add in system properties
-        addProperties(System.getProperties());
-    }
-
-
-    /**
-     * Set the values of various magic properties
-     *
-     * @exception ExecutionException if the properties cannot be set
-     */
-    protected void setMagicProperties() throws ExecutionException {
-        URL antHomeURL = initConfig.getAntHome();
-        String antHomeString = null;
-
-        if (antHomeURL.getProtocol().equals("file")) {
-            File antHome = new File(antHomeURL.getFile());
-
-            antHomeString = antHome.getAbsolutePath();
-        } else {
-            antHomeString = antHomeURL.toString();
-        }
-        setDataValue(MagicProperties.ANT_HOME, antHomeString, true);
-    }
-
-
-    /**
-     * Get a definition from a referenced frame
-     *
-     * @param definitionName the name of the definition relative to this frame
-     * @return the appropriate import info object from the referenced frame's
-     *      imports
-     * @exception ExecutionException if the referenced definition cannot be
-     *      found
-     */
-    protected ImportInfo getReferencedDefinition(String definitionName)
-         throws ExecutionException {
-        Frame containingFrame = getContainingFrame(definitionName);
-        String localName = getNameInFrame(definitionName);
-
-        if (containingFrame == null) {
-            throw new ExecutionException("There is no project corresponding "
-                 + "to the name \"" + definitionName + "\"");
-        }
-        if (containingFrame == this) {
-            return componentManager.getDefinition(localName);
-        } else {
-            return containingFrame.getReferencedDefinition(localName);
-        }
-    }
-
-
-    /**
-     * Gets the project model this frame is working with
-     *
-     * @return the project model
-     */
-    protected Project getProject() {
-        return project;
-    }
-
-
-    /**
-     * Get all the properties from the frame and any references frames. This
-     * is an expensive operation since it must clone all of the property
-     * stores in all frames
-     *
-     * @return a Map containing the frames properties indexed by their full
-     *      name.
-     */
-    protected Map getAllProperties() {
-        Map allProperties = new HashMap(dataValues);
-        Iterator i = referencedFrames.keySet().iterator();
-
-        while (i.hasNext()) {
-            String refName = (String) i.next();
-            Frame refFrame = getReferencedFrame(refName);
-            Map refProperties = refFrame.getAllProperties();
-            Iterator j = refProperties.keySet().iterator();
-
-            while (j.hasNext()) {
-                String name = (String) j.next();
-                Object value = refProperties.get(name);
-
-                allProperties.put(refName + Project.REF_DELIMITER + name,
-                    value);
-            }
-        }
-
-        return allProperties;
-    }
-
-
-    /**
-     * Get the Ant initialization configuration for this frame.
-     *
-     * @return Ant's initialization configuration
-     */
-    protected InitConfig getInitConfig() {
-        return initConfig;
-    }
-
-
-    /**
-     * Get the config instance being used by this frame.
-     *
-     * @return the config associated with this frame.
-     */
-    protected AntConfig getConfig() {
-        return config;
-    }
-
-
-    /**
-     * Get the core's implementation of the given service interface.
-     *
-     * @param serviceInterfaceClass the service interface for which an
-     *      implementation is require
-     * @return the core's implementation of the service interface
-     * @exception ExecutionException if the core does not provide an
-     *      implementatin of the requested interface
-     */
-    protected Object getCoreService(Class serviceInterfaceClass)
-         throws ExecutionException {
-        Object service = services.get(serviceInterfaceClass);
-
-        if (service == null) {
-            throw new ExecutionException("No service of interface class "
-                 + serviceInterfaceClass);
-        }
-        return service;
-    }
-
-
-    /**
-     * Get the EventSupport instance for this frame. This tracks the build
-     * listeners on this frame
-     *
-     * @return the EventSupport instance
-     */
-    protected BuildEventSupport getEventSupport() {
-        return eventSupport;
-    }
-
-
-    /**
-     * Gets the baseDir of the Frame
-     *
-     * @return the baseDir value
-     */
-    protected File getBaseDir() {
-        return baseDir;
-    }
-
-
-    /**
-     * Get a referenced frame by its reference name
-     *
-     * @param referenceName the name under which the frame was imported.
-     * @return the Frame asscociated with the given reference name or null if
-     *      there is no such project.
-     */
-    protected Frame getReferencedFrame(String referenceName) {
-        return (Frame) referencedFrames.get(referenceName);
-    }
-
-
-    /**
-     * Get the frames representing referenced projects.
-     *
-     * @return an iterator which returns the referenced ExeuctionFrames..
-     */
-    protected Iterator getReferencedFrames() {
-        return referencedFrames.values().iterator();
-    }
-
-
-    /**
-     * Get the name of an object in its frame
-     *
-     * @param fullname The name of the object
-     * @return the name of the object within its containing frame
-     */
-    protected String getNameInFrame(String fullname) {
-        int index = fullname.lastIndexOf(Project.REF_DELIMITER);
-
-        if (index == -1) {
-            return fullname;
-        }
-        return fullname.substring(index + Project.REF_DELIMITER.length());
-    }
-
-
-    /**
-     * Get a value from this frame or any imported frame
-     *
-     * @param name the name of the data value - may contain reference
-     *      delimiters
-     * @return the data value fetched from the appropriate frame
-     * @exception ExecutionException if the value is not defined
-     */
-    protected Object getDataValue(String name) throws ExecutionException {
-        Frame frame = getContainingFrame(name);
-
-        if (frame == null) {
-            return getOverrideProperty(name);
-        }
-        if (frame == this) {
-            return dataValues.get(name);
-        } else {
-            return frame.getDataValue(getNameInFrame(name));
-        }
-    }
-
-
-    /**
-     * Indicate if a data value has been set
-     *
-     * @param name the name of the data value - may contain reference
-     *      delimiters
-     * @return true if the value exists
-     * @exception ExecutionException if the containing frame for the value
-     *      does not exist
-     */
-    protected boolean isDataValueSet(String name) throws ExecutionException {
-        Frame frame = getContainingFrame(name);
-
-        if (frame == null) {
-            return isOverrideSet(name);
-        }
-        if (frame == this) {
-            return dataValues.containsKey(name);
-        } else {
-            return frame.isDataValueSet(getNameInFrame(name));
-        }
-    }
-
-
-    /**
-     * Get the execution frame which contains, directly, the named element
-     * where the name is relative to this frame
-     *
-     * @param elementName The name of the element
-     * @return the execution frame for the project that contains the given
-     *      target
-     */
-    protected Frame getContainingFrame(String elementName) {
-        int index = elementName.lastIndexOf(Project.REF_DELIMITER);
-
-        if (index == -1) {
-            return this;
-        }
-
-        Frame currentFrame = this;
-        String relativeName = elementName.substring(0, index);
-        StringTokenizer tokenizer
-             = new StringTokenizer(relativeName, Project.REF_DELIMITER);
-
-        while (tokenizer.hasMoreTokens()) {
-            String refName = tokenizer.nextToken();
-
-            currentFrame = currentFrame.getReferencedFrame(refName);
-            if (currentFrame == null) {
-                return null;
-            }
-        }
-
-        return currentFrame;
-    }
-
-
-    /**
-     * Add a collection of properties to this frame
-     *
-     * @param properties the collection of property values, indexed by their
-     *      names
-     * @exception ExecutionException if the frame cannot be created.
-     */
-    protected void addProperties(Map properties) throws ExecutionException {
-        for (Iterator i = properties.keySet().iterator(); i.hasNext();) {
-            String name = (String) i.next();
-            Object value = properties.get(name);
-
-            setDataValue(name, value, false);
-        }
-    }
-
-    /**
-     * Create a project reference.
-     *
-     * @param name the name under which the project will be
-     *      referenced.
-     * @param project the project model.
-     * @param initialData the project's initial data load.
-     * @exception ExecutionException if the project cannot be referenced.
-     */
-    protected void createProjectReference(String name, Project project,
-                                          Map initialData) 
-        throws ExecutionException {
-       Frame referencedFrame = createFrame(project);
-
-       if (initialData != null) {
-           referencedFrame.setInitialProperties(initialData);
-       }
-       
-       // does the frame have any overrides?
-       Map initialProperties = (Map) overrides.get(name);
-       if (initialProperties != null) {
-           referencedFrame.setInitialProperties(initialProperties);
-           overrides.remove(name);
-       }
-
-
-        
-       referencedFrames.put(name, referencedFrame);
-       referencedFrame.initialize();
-    }
-
-    /**
-     * Create a new frame for a given project
-     *
-     * @param project the project model the frame will deal with
-     * @return an Frame ready to build the project
-     * @exception ExecutionException if the frame cannot be created.
-     */
-    protected Frame createFrame(Project project)
-         throws ExecutionException {
-        Frame newFrame
-             = new Frame(initConfig, config);
-
-        newFrame.setProject(project);
-        for (Iterator j = eventSupport.getListeners(); j.hasNext();) {
-            BuildListener listener = (BuildListener) j.next();
-
-            newFrame.addBuildListener(listener);
-        }
-        
-        return newFrame;
-    }
-
-
-    /**
-     * Log a message as a build event
-     *
-     * @param message the message to be logged
-     * @param level the priority level of the message
-     */
-    protected void log(String message, int level) {
-        eventSupport.fireMessageLogged(project, message, level);
-    }
-
-
-    /**
-     * Add a build listener to this execution frame
-     *
-     * @param listener the listener to be added to the frame
-     */
-    protected void addBuildListener(BuildListener listener) {
-        for (Iterator i = getReferencedFrames(); i.hasNext();) {
-            Frame referencedFrame = (Frame) i.next();
-
-            referencedFrame.addBuildListener(listener);
-        }
-        eventSupport.addBuildListener(listener);
-    }
-
-
-    /**
-     * Remove a build listener from the execution
-     *
-     * @param listener the listener to be removed
-     */
-    protected void removeBuildListener(BuildListener listener) {
-        for (Iterator i = getReferencedFrames(); i.hasNext();) {
-            Frame subFrame = (Frame) i.next();
-
-            subFrame.removeBuildListener(listener);
-        }
-        eventSupport.removeBuildListener(listener);
-    }
-
-
-    /**
-     * Run the given list of targets
-     *
-     * @param targets a list of target names which are to be evaluated
-     * @exception ExecutionException if there is a problem in the build
-     */
-    protected void runBuild(List targets) throws ExecutionException {
-        initialize();
-        if (targets.isEmpty()) {
-            // we just execute the default target if any
-            String defaultTarget = project.getDefaultTarget();
-
-            if (defaultTarget != null) {
-                log("Executing default target: " + defaultTarget,
-                    MessageLevel.MSG_DEBUG);
-                executeTarget(defaultTarget);
-            }
-        } else {
-            for (Iterator i = targets.iterator(); i.hasNext();) {
-                String targetName = (String) i.next();
-
-                log("Executing target: " + targetName, MessageLevel.MSG_DEBUG);
-                executeTarget(targetName);
-            }
-        }
-    }
-
-
-
-    /**
-     * Given a fully qualified target name, this method returns the fully
-     * qualified name of the project
-     *
-     * @param fullTargetName the full qualified target name
-     * @return the full name of the containing project
-     */
-    private String getFullProjectName(String fullTargetName) {
-        int index = fullTargetName.lastIndexOf(Project.REF_DELIMITER);
-        if (index == -1) {
-            return null;
-        }
-
-        return fullTargetName.substring(0, index);
-    }
-
-    /**
-     * Flatten the dependencies to the given target
-     *
-     * @param flattenedList the List of targets that must be executed before
-     *      the given target
-     * @param fullTargetName the fully qualified name of the target
-     * @exception ExecutionException if the given target does not exist in the
-     *      project hierarchy
-     */
-    private void flattenDependency(List flattenedList, String fullTargetName)
-         throws ExecutionException {
-        if (flattenedList.contains(fullTargetName)) {
-            return;
-        }
-        String fullProjectName = getFullProjectName(fullTargetName);
-        Frame frame = getContainingFrame(fullTargetName);
-        String localTargetName = getNameInFrame(fullTargetName);
-        Target target = frame.getProject().getTarget(localTargetName);
-        if (target == null) {
-            throw new ExecutionException("Target " + fullTargetName
-                 + " does not exist");
-        }
-        for (Iterator i = target.getDependencies(); i.hasNext();) {
-            String localDependencyName = (String) i.next();
-            String fullDependencyName = localDependencyName;
-            if (fullProjectName != null) {
-                fullDependencyName = fullProjectName + Project.REF_DELIMITER 
-                    + localDependencyName;
-            }
-            flattenDependency(flattenedList, fullDependencyName);
-            if (!flattenedList.contains(fullDependencyName)) {
-                flattenedList.add(fullDependencyName);
-            }
-        }
-    }
-
-    /**
-     * get the list of dependent targets which must be evaluated for the
-     * given target.
-     *
-     * @param fullTargetName the full name (in reference space) of the
-     *      target
-     * @return the flattened list of targets
-     * @exception ExecutionException if the given target could not be found
-     */
-    protected List getTargetDependencies(String fullTargetName)
-         throws ExecutionException {
-        List flattenedList = new ArrayList();
-        flattenDependency(flattenedList, fullTargetName);
-        flattenedList.add(fullTargetName);
-        return flattenedList;
-    }
-
-
-    /**
-     * Execute the tasks of a target in this frame with the given name
-     *
-     * @param targetName the name of the target whose tasks will be evaluated
-     * @exception ExecutionException if there is a problem executing the tasks
-     *      of the target
-     */
-    protected void executeTarget(String targetName) throws ExecutionException {
-
-        // to execute a target we must determine its dependencies and
-        // execute them in order.
-
-        // firstly build a list of fully qualified target names to execute.
-        List dependencyOrder = getTargetDependencies(targetName);
-
-        for (Iterator i = dependencyOrder.iterator(); i.hasNext();) {
-            String fullTargetName = (String) i.next();
-            Frame frame = getContainingFrame(fullTargetName);
-            String localTargetName = getNameInFrame(fullTargetName);
-
-            frame.executeTargetTasks(localTargetName);
-        }
-    }
-
-
-    /**
-     * Run the tasks returned by the given iterator
-     *
-     * @param taskIterator the iterator giving the tasks to execute
-     * @exception ExecutionException if there is execution problem while
-     *      executing tasks
-     */
-    protected void executeTasks(Iterator taskIterator)
-         throws ExecutionException {
-        while (taskIterator.hasNext()) {
-            BuildElement model = (BuildElement) taskIterator.next();
-
-            // what sort of element is this.
-            try {
-                Object component = componentManager.createComponent(model);
-
-                if (component instanceof Task) {
-                    execService.executeTask((Task) component);
-                } else {
-                    String typeId
-                         = model.getAspectValue(Constants.ANT_ASPECT, "id");
-
-                    if (typeId != null) {
-                        setDataValue(typeId, component, true);
-                    }
-                }
-            } catch (ExecutionException e) {
-                e.setLocation(model.getLocation(), false);
-                throw e;
-            } catch (RuntimeException e) {
-                ExecutionException ee =
-                    new ExecutionException(e, model.getLocation());
-
-                throw ee;
-            }
-        }
-
-    }
-
-
-    /**
-     * Execute the given target's tasks. The target must be local to this
-     * frame's project
-     *
-     * @param targetName the name of the target within this frame that is to
-     *      be executed.
-     * @exception ExecutionException if there is a problem executing tasks
-     */
-    protected void executeTargetTasks(String targetName)
-         throws ExecutionException {
-        Throwable failureCause = null;
-        Target target = project.getTarget(targetName);
-        String ifCondition = target.getIfCondition();
-        String unlessCondition = target.getUnlessCondition();
-
-        if (ifCondition != null) {
-            ifCondition = dataService.replacePropertyRefs(ifCondition.trim());
-            if (!isDataValueSet(ifCondition)) {
-                return;
-            }
-        }
-
-        if (unlessCondition != null) {
-            unlessCondition
-                 = dataService.replacePropertyRefs(unlessCondition.trim());
-            if (isDataValueSet(unlessCondition)) {
-                return;
-            }
-        }
-
-        try {
-            Iterator taskIterator = target.getTasks();
-
-            eventSupport.fireTargetStarted(target);
-            executeTasks(taskIterator);
-        } catch (ExecutionException e) {
-            e.setLocation(target.getLocation(), false);
-            failureCause = e;
-            throw e;
-        } catch (RuntimeException e) {
-            ExecutionException ee =
-                new ExecutionException(e, target.getLocation());
-
-            failureCause = ee;
-            throw ee;
-        } finally {
-            eventSupport.fireTargetFinished(target, failureCause);
-        }
-    }
-
-
-    /**
-     * Initialize the frame by executing the project level tasks if any
-     *
-     * @exception ExecutionException if the top level tasks of the frame
-     *      failed
-     */
-    protected void initialize() throws ExecutionException {
-        configureServices();
-        setMagicProperties();
-        determineBaseDir();
-
-        try {        
-            // load system ant lib
-            URL systemLibs 
-                = new URL(initConfig.getLibraryURL(), "syslibs/");
-            componentManager.loadLib(systemLibs.toString(), true, true);
-            
-            // execute any config tasks
-            executeTasks(config.getTasks());
-    
-            // now load other system libraries
-            URL antLibs = new URL(initConfig.getLibraryURL(), "antlibs/");
-            componentManager.loadLib(antLibs.toString(), false, true);
-            
-            executeTasks(project.getTasks());
-        } catch (MalformedURLException e) {
-            throw new ExecutionException("Unable to initialize antlibs", e);
-        }
-    }
-
-
-    /**
-     * Determine the base directory for each frame in the frame hierarchy
-     *
-     * @exception ExecutionException if the base directories cannot be
-     *      determined
-     */
-    private void determineBaseDir() throws ExecutionException {
-        if (isDataValueSet(MagicProperties.BASEDIR)) {
-            baseDir
-                 = new File(getDataValue(MagicProperties.BASEDIR).toString());
-        } else {
-            URL projectURL = project.getSourceURL();
-
-            if (projectURL.getProtocol().equals("file")) {
-                File projectFile = new File(projectURL.getFile());
-                File projectFileParent = projectFile.getParentFile();
-                String base = project.getBase();
-
-                if (base == null) {
-                    baseDir = projectFileParent;
-                } else {
-                    FileUtils fileUtils = FileUtils.newFileUtils();
-
-                    baseDir = fileUtils.resolveFile(projectFileParent, base);
-                }
-            } else {
-                baseDir = new File(".");
-            }
-        }
-        setDataValue(MagicProperties.BASEDIR, baseDir.getAbsolutePath(), true);
-    }
-
-
-    /**
-     * Configure the services that the frame makes available to its library
-     * components
-     */
-    private void configureServices() {
-        // create services and make them available in our services map
-        fileService = new CoreFileService(this);
-        componentManager = new ComponentManager(this);
-        dataService = new CoreDataService(this,
-            config.isUnsetPropertiesAllowed());
-        execService = new CoreExecService(this);
-
-        services.put(FileService.class, fileService);
-        services.put(ComponentService.class, componentManager);
-        services.put(DataService.class, dataService);
-        services.put(EventService.class, new CoreEventService(this));
-        services.put(ExecService.class, execService);
-        services.put(InputService.class, new CoreInputService(this));
-    }
-
-
-    /**
-     * Handle the content from a single thread. This method will be called by
-     * the thread producing the content. The content is broken up into
-     * separate lines
-     *
-     * @param line the content produce by the current thread.
-     * @param isErr true if this content is from the thread's error stream.
-     */
-    public void threadOutput(String line, boolean isErr) {
-        eventSupport.threadOutput(line, isErr);
-    }
-}
-
-
diff --git a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/ImportInfo.java b/proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/ImportInfo.java
deleted file mode 100644
index 8c38ee8..0000000
--- a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/ImportInfo.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.antcore.execution;
-
-import org.apache.ant.antcore.antlib.AntLibDefinition;
-import org.apache.ant.antcore.antlib.ComponentLibrary;
-
-/**
- * This class is used to maintain information about imports
- *
- * @author Conor MacNeill
- * @created 16 January 2002
- */
-public class ImportInfo {
-    /** the component library from which the import is made */
-    private ComponentLibrary library;
-    /** the library definition information */
-    private AntLibDefinition libDefinition;
-
-    /**
-     * ImportInfo records what has been imported from an Ant Library
-     *
-     * @param library The library from which the import was made
-     * @param libDefinition the library definition information
-     */
-    public ImportInfo(ComponentLibrary library,
-                      AntLibDefinition libDefinition) {
-        this.library = library;
-        this.libDefinition = libDefinition;
-    }
-
-    /**
-     * Get the classname that has been imported
-     *
-     * @return the classname that was imported.
-     */
-    public String getClassName() {
-        return libDefinition.getClassName();
-    }
-
-    /**
-     * Get the library from which the import was made
-     *
-     * @return the library from which the import was made
-     */
-    public ComponentLibrary getComponentLibrary() {
-        return library;
-    }
-
-    /**
-     * Get the type of the definition that was imported
-     *
-     * @return the type of definition
-     */
-    public int getDefinitionType() {
-        return libDefinition.getDefinitionType();
-    }
-
-    /**
-     * Get the name of the component within its library.
-     *
-     * @return the name of the component within its library
-     */
-    public String getLocalName() {
-        return libDefinition.getDefinitionName();
-    }
-
-}
-
diff --git a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/Reflector.java b/proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/Reflector.java
deleted file mode 100755
index 06c030d..0000000
--- a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/Reflector.java
+++ /dev/null
@@ -1,486 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.antcore.execution;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-import org.apache.ant.common.antlib.Converter;
-import org.apache.ant.common.util.ExecutionException;
-
-/**
- * A reflector is used to set attributes and add nested elements to an
- * instance of an object using reflection. It is the result of class
- * introspection.
- *
- * @author Conor MacNeill
- * @created 19 January 2002
- */
-public class Reflector implements Setter {
-
-    /**
-     * An element adder is used to add an instance of an element to an of an
-     * object. The object being added will have been fully configured by Ant
-     * prior to calling this method.
-     *
-     * @author Conor MacNeill
-     * @created 19 January 2002
-     */
-    private interface ElementAdder {
-        /**
-         * Add an object to the this container object
-         *
-         * @param container the object to which the element is the be added
-         * @param obj an instance of the nested element
-         * @exception InvocationTargetException if the method cannot be
-         *      invoked
-         * @exception IllegalAccessException if the method cannot be invoked
-         */
-        void add(Object container, Object obj)
-             throws InvocationTargetException, IllegalAccessException;
-    }
-
-    /**
-     * Element Creator's a factory method provided by an Ant Library
-     * Component for creating its own nested element instances. These
-     * methods are now deprecated. It is better to use the add style methods
-     * and support polymorphic interfaces.
-     *
-     * @author Conor MacNeill
-     * @created 31 January 2002
-     */
-    private interface ElementCreator {
-        /**
-         * Create a nested element object for the given container object
-         *
-         * @param container the object in which the nested element is to be
-         *      created.
-         * @return the nested element.
-         * @exception InvocationTargetException if the create method fails
-         * @exception IllegalAccessException if the create method cannot be
-         *      accessed
-         * @exception InstantiationException if the nested element instance
-         *      cannot be created.
-         */
-        Object create(Object container)
-             throws InvocationTargetException, IllegalAccessException,
-            InstantiationException;
-    }
-
-
-    /** The method used to add content to the element */
-    private Method addTextMethod;
-
-    /** the list of attribute setters indexed by their property name */
-    private Map attributeSetters = new HashMap();
-
-    /**
-     * A list of the Java class or interface accetpted by each element adder
-     * indexed by the element name
-     */
-    private Map elementTypes = new HashMap();
-
-    /** the collection of element adders indexed by their element names */
-    private Map elementAdders = new HashMap();
-
-    /** the collection of element creators indexed by their element names */
-    private Map elementCreators = new HashMap();
-
-    /**
-     * Set an attribute value on an object
-     *
-     * @param obj the object on which the value is being set
-     * @param attributeName the name of the attribute
-     * @param value the string represenation of the attribute's value
-     * @exception ExecutionException if the object does not support the
-     *      attribute or the object has a problem setting the value
-     */
-    public void setAttribute(Object obj, String attributeName,
-                             String value)
-         throws ExecutionException {
-        String name = attributeName.toLowerCase();
-        AttributeSetter as
-             = (AttributeSetter) attributeSetters.get(name);
-        if (as == null) {
-            throw new ExecutionException("Class " + obj.getClass().getName()
-                 + " doesn't support the \"" + attributeName + "\" attribute");
-        }
-        try {
-            as.set(obj, value);
-        } catch (IllegalAccessException e) {
-            // impossible as getMethods should only return public methods
-            throw new ExecutionException(e);
-        } catch (InvocationTargetException ite) {
-            Throwable t = ite.getTargetException();
-            if (t instanceof ExecutionException) {
-                throw (ExecutionException) t;
-            }
-            throw new ExecutionException(t);
-        }
-    }
-
-    /**
-     * Set the method used to add content to the element
-     *
-     * @param addTextMethod the new addTextMethod value
-     */
-    public void setAddTextMethod(Method addTextMethod) {
-        this.addTextMethod = addTextMethod;
-    }
-
-    /**
-     * Get the type of the given nested element
-     *
-     * @param elementName the nested element whose type is desired
-     * @return the class instance representing the type of the element adder
-     */
-    public Class getType(String elementName) {
-        return (Class) elementTypes.get(elementName);
-    }
-
-    /**
-     * Adds PCDATA to the element
-     *
-     * @param obj the instance whose content is being provided
-     * @param text the required content
-     * @exception ExecutionException if the object does not support
-     *      contentor the object has a problem setting the content
-     */
-    public void addText(Object obj, String text)
-         throws ExecutionException {
-
-        if (addTextMethod == null) {
-            throw new ExecutionException("Class " + obj.getClass().getName() +
-                " doesn't support content");
-        }
-        try {
-            addTextMethod.invoke(obj, new String[]{text});
-        } catch (IllegalAccessException ie) {
-            // impossible as getMethods should only return public methods
-            throw new ExecutionException(ie);
-        } catch (InvocationTargetException ite) {
-            Throwable t = ite.getTargetException();
-            if (t instanceof ExecutionException) {
-                throw (ExecutionException) t;
-            }
-            throw new ExecutionException(t);
-        }
-    }
-
-    /**
-     * Add an element to the given object
-     *
-     * @param obj The object to which the element is being added
-     * @param elementName the name of the element
-     * @param value the object to be added - the nested element
-     * @exception ExecutionException if the object does not support content
-     *      or the object has a problem setting the content
-     */
-    public void addElement(Object obj, String elementName, Object value)
-         throws ExecutionException {
-        String name = elementName.toLowerCase();
-        ElementAdder adder = (ElementAdder) elementAdders.get(name);
-        if (adder == null) {
-            throw new ExecutionException("Class " + obj.getClass().getName()
-                 + " doesn't support the \"" + elementName
-                 + "\" nested element");
-        }
-        try {
-            adder.add(obj, value);
-        } catch (IllegalAccessException ie) {
-            // impossible as getMethods should only return public methods
-            throw new ExecutionException(ie);
-        } catch (InvocationTargetException ite) {
-            Throwable t = ite.getTargetException();
-            if (t instanceof ExecutionException) {
-                throw (ExecutionException) t;
-            }
-            throw new ExecutionException(t);
-        }
-
-    }
-
-    /**
-     * Create a nested element using the object's element factory method.
-     *
-     * @param container the object in which the nested element is required.
-     * @param elementName the name of the nested element
-     * @return the new instance of the nested element
-     * @exception ExecutionException if the nested element cannot be
-     *      created.
-     */
-    public Object createElement(Object container, String elementName)
-         throws ExecutionException {
-
-        ElementCreator creator
-             = (ElementCreator) elementCreators.get(elementName.toLowerCase());
-        if (creator == null) {
-            throw new ExecutionException("Class "
-                 + container.getClass().getName()
-                 + " doesn't support the \"" + elementName
-                 + "\" nested element");
-        }
-
-        try {
-            return creator.create(container);
-        } catch (IllegalAccessException e) {
-            // impossible as getMethods should only return public methods
-            throw new ExecutionException(e);
-        } catch (InstantiationException e) {
-            // impossible as getMethods should only return public methods
-            throw new ExecutionException(e);
-        } catch (InvocationTargetException e) {
-            Throwable t = e.getTargetException();
-            if (t instanceof ExecutionException) {
-                throw (ExecutionException) t;
-            }
-            throw new ExecutionException(t);
-        }
-    }
-
-    /**
-     * Indicate if the class assocated with this reflector supports the
-     * addition of text content.
-     *
-     * @return true if the class supports an addText method
-     */
-    public boolean supportsText() {
-        return addTextMethod != null;
-    }
-
-    /**
-     * Indicate if the class assocated with this reflector supports the
-     * given attribute
-     *
-     * @param attributeName the name of the attribute
-     * @return true if the given attribute is supported
-     */
-    public boolean supportsAttribute(String attributeName) {
-        return attributeSetters.containsKey(attributeName.toLowerCase());
-    }
-
-    /**
-     * Determine if the class associated with this reflector supports a
-     * particular nested element via a create factory method
-     *
-     * @param elementName the name of the element
-     * @return true if the class supports creation of that element
-     */
-    public boolean supportsNestedCreator(String elementName) {
-        return elementCreators.containsKey(elementName.toLowerCase());
-    }
-
-    /**
-     * Determine if the class associated with this reflector supports a
-     * particular nested element via an add method
-     *
-     * @param elementName the name of the element
-     * @return true if the class supports addition of that element
-     */
-    public boolean supportsNestedAdder(String elementName) {
-        return elementAdders.containsKey(elementName.toLowerCase());
-    }
-
-    /**
-     * Add an attribute setter for the given property. The setter will only
-     * be added if it does not override a higher priorty setter
-     *
-     * @param attributeName the name of the attribute that the setter operates 
-     *        upon.
-     * @param setter the AttribnuteSetter instance to use.
-     */
-    private void addAttributeSetter(String attributeName, 
-                                    AttributeSetter setter) {
-        String name = attributeName.toLowerCase();
-        AttributeSetter currentSetter 
-            = (AttributeSetter) attributeSetters.get(name);
-        if (currentSetter != null) {
-            // there is a setter, is it lower down in the class hierarchy
-            int currentDepth = currentSetter.getDepth();
-            if (currentDepth < setter.getDepth()) {
-                return;
-            } else if (currentDepth == setter.getDepth()) {
-                // now check the types
-                Class currentType = currentSetter.getType();
-                if (currentType != String.class) {
-                    return;
-                }
-            }
-        }                                         
-        attributeSetters.put(name, setter);
-    }
-    
-    
-    /**
-     * Determine if the class associated with this reflector supports a
-     * particular nested element
-     *
-     * @param elementName the name of the element
-     * @return true if the class supports the given type of nested element
-     */
-    public boolean supportsNestedElement(String elementName) {
-        return supportsNestedAdder(elementName)
-             || supportsNestedCreator(elementName);
-    }
-
-    /**
-     * Add a method to the reflector for setting an attribute value
-     *
-     * @param m the method, obtained by introspection.
-     * @param depth the depth of this method's declaration in the class 
-     *        hierarchy
-     * @param propertyName the property name the method will set.
-     * @param converters A map of converter classes used to convert strings
-     *      to different types.
-     */
-    public void addAttributeMethod(Method m, int depth, 
-                                   String propertyName, Map converters) {
-        Class type = m.getParameterTypes()[0];
-
-        if (converters != null && converters.containsKey(type)) {
-            // we have a converter to use to convert the String
-            // value into something the set method expects.
-            Converter converter = (Converter) converters.get(type);
-            addConvertingSetter(m, depth, propertyName, converter);
-            return;
-        }
-
-        if (type.equals(String.class)) {
-            addAttributeSetter(propertyName, new AttributeSetter(m, depth));
-            return;
-        }
-
-        try {
-            final Constructor c =
-                type.getConstructor(new Class[]{java.lang.String.class});
-            addAttributeSetter(propertyName, new AttributeSetter(m, depth, c));
-            return;
-        } catch (NoSuchMethodException nme) {
-            // ignore
-        }
-
-        if (converters != null) {
-            // desparate by now - try top find a converter which handles a super
-            // class of this type and which supports subclass instantiation
-            for (Iterator i = converters.keySet().iterator(); i.hasNext();) {
-                Class converterType = (Class) i.next();
-                if (converterType.isAssignableFrom(type)) {
-                    // could be a candidate
-                    Converter converter
-                         = (Converter) converters.get(converterType);
-                    if (converter.canConvertSubType(type)) {
-                        addConvertingSetter(m, depth, propertyName, converter);
-                        return;
-                    }
-                }
-            }
-        }
-    }
-
-    /**
-     * Add an element adder method to the list of element adders in the
-     * reflector
-     *
-     * @param m the adder method
-     * @param elementName The name of the element for which this adder works
-     */
-    public void addElementMethod(final Method m, String elementName) {
-        final Class type = m.getParameterTypes()[0];
-        elementTypes.put(elementName, type);
-        elementAdders.put(elementName.toLowerCase(),
-            new ElementAdder() {
-                public void add(Object container, Object obj)
-                     throws InvocationTargetException, IllegalAccessException {
-                    m.invoke(container, new Object[]{obj});
-                }
-            });
-    }
-
-
-    /**
-     * Add a create factory method.
-     *
-     * @param m the create method
-     * @param elementName the name of the nested element the create method
-     *      supports.
-     */
-    public void addCreateMethod(final Method m, String elementName) {
-        elementCreators.put(elementName.toLowerCase(),
-            new ElementCreator() {
-                public Object create(Object container)
-                     throws InvocationTargetException, IllegalAccessException {
-                    return m.invoke(container, new Object[]{});
-                }
-            });
-    }
-
-    /**
-     * Add an attribute setter with an associated converter
-     *
-     * @param m the attribute setter method
-     * @param depth the depth of this method's declaration in the class 
-     *        hierarchy
-     * @param propertyName the name of the attribute this method supports
-     * @param converter the converter to be used to construct the value
-     *      expected by the method.
-     */
-    private void addConvertingSetter(Method m, int depth,
-                                     String propertyName, Converter converter) {
-        addAttributeSetter(propertyName, 
-            new AttributeSetter(m, depth, converter));
-    }
-}
-
diff --git a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/Setter.java b/proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/Setter.java
deleted file mode 100644
index 50b9083..0000000
--- a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/Setter.java
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.antcore.execution;
-import org.apache.ant.common.util.ExecutionException;
-
-/**
- * The Setter interface is used by the Ant core to set values and nested
- * elements in objects being configured.
- *
- * @author Conor MacNeill
- * @created 11 February 2002
- */
-public interface Setter {
-    /**
-     * Set an attribute value on an object
-     *
-     * @param obj the object on which the value is being set
-     * @param attributeName the name of the attribute
-     * @param value the string represenation of the attribute's value
-     * @exception ExecutionException if the object does not support the
-     *      attribute or the object has a problem setting the value
-     */
-    void setAttribute(Object obj, String attributeName,
-                      String value)
-         throws ExecutionException;
-
-    /**
-     * Get the type of the given nested element
-     *
-     * @param elementName the nested element whose type is desired
-     * @return the class instance representing the type of the element adder
-     */
-    Class getType(String elementName);
-
-    /**
-     * Adds PCDATA to the element
-     *
-     * @param obj the instance whose content is being provided
-     * @param text the required content
-     * @exception ExecutionException if the object does not support
-     *      contentor the object has a problem setting the content
-     */
-    void addText(Object obj, String text)
-         throws ExecutionException;
-
-    /**
-     * Add an element to the given object
-     *
-     * @param obj The object to which the element is being added
-     * @param elementName the name of the element
-     * @param value the object to be added - the nested element
-     * @exception ExecutionException if the object does not support content
-     *      or the object has a problem setting the content
-     */
-    void addElement(Object obj, String elementName, Object value)
-         throws ExecutionException;
-
-    /**
-     * Create a nested element using the object's element factory method.
-     *
-     * @param container the object in which the nested element is required.
-     * @param elementName the name of the nested element
-     * @return the new instance of the nested element
-     * @exception ExecutionException if the nested element cannot be
-     *      created.
-     */
-    Object createElement(Object container, String elementName)
-         throws ExecutionException;
-
-    /**
-     * Indicate if the class assocated with this reflector supports the
-     * addition of text content.
-     *
-     * @return true if the class supports an addText method
-     */
-    boolean supportsText();
-
-    /**
-     * Indicate if the class assocated with this reflector supports the
-     * given attribute
-     *
-     * @param attributeName the name of the attribute
-     * @return true if the given attribute is supported
-     */
-    boolean supportsAttribute(String attributeName);
-
-    /**
-     * Determine if the class associated with this reflector supports a
-     * particular nested element via a create factory method
-     *
-     * @param elementName the name of the element
-     * @return true if the class supports creation of that element
-     */
-    boolean supportsNestedCreator(String elementName);
-
-    /**
-     * Determine if the class associated with this reflector supports a
-     * particular nested element via an add method
-     *
-     * @param elementName the name of the element
-     * @return true if the class supports addition of that element
-     */
-    boolean supportsNestedAdder(String elementName);
-
-    /**
-     * Determine if the class associated with this reflector supports a
-     * particular nested element
-     *
-     * @param elementName the name of the element
-     * @return true if the class supports the given type of nested element
-     */
-    boolean supportsNestedElement(String elementName);
-
-}
-
diff --git a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/TaskAdapter.java b/proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/TaskAdapter.java
deleted file mode 100755
index 54d250a..0000000
--- a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/TaskAdapter.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.antcore.execution;
-import java.lang.reflect.Method;
-
-import org.apache.ant.common.antlib.AbstractTask;
-import org.apache.ant.common.util.ExecutionException;
-
-/**
- * Use introspection to "adapt" an arbitrary Bean (not extending Task, but
- * with similar patterns).
- *
- * @author Conor MacNeill
- * @created 16 January 2002
- */
-public class TaskAdapter extends AbstractTask {
-
-    /** The real object that is performing the work */
-    private Object worker;
-
-    /** the execute method of the real object */
-    private Method executeMethod = null;
-
-    /**
-     * Create an adapter for an arbitraty bean
-     *
-     * @param taskType the name of the task
-     * @param worker an instance of the actual object that does the work
-     * @exception ExecutionException if the worker object does not support
-     *      an execute method
-     */
-    public TaskAdapter(String taskType, Object worker)
-         throws ExecutionException {
-        this.worker = worker;
-        try {
-            Class workerClass = worker.getClass();
-            executeMethod = workerClass.getMethod("execute", new Class[0]);
-            if (executeMethod == null) {
-                throw new ExecutionException("No execute method in the class"
-                     + " for the <" + taskType + "> task.");
-            }
-        } catch (NoSuchMethodException e) {
-            throw new ExecutionException(e);
-        }
-    }
-
-
-    /**
-     * Standard Task execute method. This invokes the execute method of the
-     * worker instance
-     *
-     * @exception ExecutionException if the proxied object throws an exception
-     */
-    public void execute() throws ExecutionException {
-        try {
-            executeMethod.invoke(worker, null);
-        } catch (Throwable t) {
-            throw new ExecutionException(t);
-        }
-    }
-}
-
diff --git a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/modelparser/BuildElementHandler.java b/proposal/mutant/src/java/antcore/org/apache/ant/antcore/modelparser/BuildElementHandler.java
deleted file mode 100644
index 7695ff7..0000000
--- a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/modelparser/BuildElementHandler.java
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.antcore.modelparser;
-import java.util.Iterator;
-
-import org.apache.ant.common.model.BuildElement;
-import org.xml.sax.Attributes;
-import org.xml.sax.SAXParseException;
-
-/**
- * A BuildElementHandler parses the task elements of a build. Task elements
- * include tasks themselves plus all their nested elements to any depth.
- *
- * @author Conor MacNeill
- * @created 9 January 2002
- */
-public class BuildElementHandler extends ModelElementHandler {
-    /** The task element being parsed by this handler. */
-    private BuildElement buildElement;
-
-    /**
-     * Get the task element being parsed by this handler.
-     *
-     * @return the BuildElement being parsed.
-     */
-    public BuildElement getBuildElement() {
-        return buildElement;
-    }
-
-    /**
-     * Create a task element handler to parse a task element
-     *
-     * @param elementName the name of the element - always target
-     */
-    public void processElement(String elementName) {
-        buildElement
-             = new BuildElement(getLocation(), elementName);
-        setModelElement(buildElement);
-        
-        for (Iterator i = getAttributes(); i.hasNext();) {
-            String attributeName = (String) i.next();
-            buildElement.addAttribute(attributeName,
-                getAttribute(attributeName));
-        }
-        buildElement.setAspects(getAspects());
-    }
-
-
-    /**
-     * Process a nested element of this task element. All nested elements of
-     * a buildElement are themselves buildElements.
-     *
-     * @param uri The Namespace URI.
-     * @param localName The local name (without prefix).
-     * @param qualifiedName The qualified name (with prefix)
-     * @param attributes The attributes attached to the element.
-     * @throws SAXParseException if there is a parsing problem.
-     */
-    public void startElement(String uri, String localName, String qualifiedName,
-                             Attributes attributes)
-         throws SAXParseException {
-        // everything within a task element is also a task element
-        BuildElementHandler nestedHandler
-             = new BuildElementHandler();
-        nestedHandler.start(getParseContext(), getXMLReader(),
-            this, getLocator(), attributes, getElementSource(), qualifiedName);
-        buildElement.addNestedElement(nestedHandler.getBuildElement());
-    }
-
-
-    /**
-     * This method is called when this element is finished being processed.
-     * This is a template method allowing subclasses to complete any
-     * necessary processing.
-     */
-    protected void finish() {
-        String content = getContent();
-        if (content != null && content.trim().length() != 0) {
-            buildElement.addText(getContent());
-        }
-    }
-
-    /**
-     * Validate that the given attribute and value are valid.
-     *
-     * @param attributeName The name of the attributes
-     * @param attributeValue The value of the attributes
-     */
-    protected void validateAttribute(String attributeName,
-                                     String attributeValue) {
-        // do nothing - all attributes are OK by default.
-    }
-}
-
diff --git a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/modelparser/IncludeHandler.java b/proposal/mutant/src/java/antcore/org/apache/ant/antcore/modelparser/IncludeHandler.java
deleted file mode 100644
index e7734bb..0000000
--- a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/modelparser/IncludeHandler.java
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.antcore.modelparser;
-
-import java.net.MalformedURLException;
-import java.net.URL;
-import org.apache.ant.common.model.Project;
-import org.apache.ant.antcore.xml.ElementHandler;
-import org.apache.ant.antcore.xml.XMLParseException;
-import org.xml.sax.SAXParseException;
-
-/**
- * The include handler is used to read in included projects or fragments
- * into a project.
- *
- * @author Conor MacNeill
- * @created 11 January 2002
- */
-public class IncludeHandler extends ElementHandler {
-    /** The attribute name which identifies the fragment to be included */
-    public static final String SYSTEMID_ATTR = "fragment";
-
-    /** The including project */
-    private Project project;
-
-
-    /**
-     * Create an IncludeHandler.
-     *
-     * @param project the project into which the include fragment is to be
-     *      placed
-     */
-    public IncludeHandler(Project project) {
-        this.project = project;
-    }
-
-
-    /**
-     * Process the element.
-     *
-     * @param elementName the name of the element
-     * @exception SAXParseException if there is a problem parsing the
-     *      element
-     */
-    public void processElement(String elementName)
-         throws SAXParseException {
-
-        String includeSystemId = getAttribute(SYSTEMID_ATTR);
-        if (includeSystemId == null) {
-            throw new SAXParseException("Attribute " + SYSTEMID_ATTR +
-                " is required in an <include> element", getLocator());
-        }
-
-        // create a new parser to read this project relative to the
-        // project's URI
-        try {
-            URL includeURL = new URL(getElementSource(), includeSystemId);
-            ProjectHandler includedProjectHandler = new ProjectHandler(project);
-            getParseContext().parse(includeURL,
-                new String[]{"project", "fragment"},
-                includedProjectHandler);
-        } catch (MalformedURLException e) {
-            throw new SAXParseException("Unable to include " + includeSystemId
-                 + ": " + e.getMessage(), getLocator());
-        } catch (XMLParseException e) {
-            throw new SAXParseException("Error parsing included project "
-                 + includeSystemId + ": " + e.getMessage(), getLocator());
-        }
-    }
-
-    /**
-     * Validate that the given attribute and value are valid.
-     *
-     * @param attributeName The name of the attributes
-     * @param attributeValue The value of the attributes
-     * @exception SAXParseException if the attribute is not allowed on the
-     *      element.
-     */
-    protected void validateAttribute(String attributeName,
-                                     String attributeValue)
-         throws SAXParseException {
-        if (!attributeName.equals(SYSTEMID_ATTR)) {
-            throwInvalidAttribute(attributeName);
-        }
-    }
-}
-
-
diff --git a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/modelparser/ModelElementHandler.java b/proposal/mutant/src/java/antcore/org/apache/ant/antcore/modelparser/ModelElementHandler.java
deleted file mode 100644
index e577632..0000000
--- a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/modelparser/ModelElementHandler.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.antcore.modelparser;
-import org.apache.ant.antcore.xml.ElementHandler;
-
-import org.apache.ant.common.model.ModelElement;
-
-/**
- *  A BuildElementHandler parses the task elements of a build. Task elements
- *  include tasks themselves plus all their nested elements to any depth.
- *
- * @author  Conor MacNeill
- * @created  9 January 2002
- */
-public abstract class ModelElementHandler extends ElementHandler {
-    /**  The model element being parsed by this handler. */
-    private ModelElement modelElement;
-
-
-    /**
-     *  Set the model element being handled by this handler
-     *
-     * @param  modelElement The new modelElement value
-     */
-    protected void setModelElement(ModelElement modelElement) {
-        this.modelElement = modelElement;
-    }
-
-
-    /**  Set the end location of the element.  */
-    protected void finish() {
-        if (modelElement != null) {
-            modelElement.setEndLocation(getLocation());
-        }
-    }
-}
-
diff --git a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/modelparser/NoProjectReadException.java b/proposal/mutant/src/java/antcore/org/apache/ant/antcore/modelparser/NoProjectReadException.java
deleted file mode 100644
index 98f08fd..0000000
--- a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/modelparser/NoProjectReadException.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.antcore.modelparser;
-
-/**
- * A NoProjectReadException is used to indicate that a project was not read
- * from the particular source. This will happen if the source is empty.
- *
- * @author Conor MacNeill
- * @created 15 January 2002
- */
-public class NoProjectReadException extends Exception {
-}
-
diff --git a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/modelparser/ProjectHandler.java b/proposal/mutant/src/java/antcore/org/apache/ant/antcore/modelparser/ProjectHandler.java
deleted file mode 100644
index 7b37970..0000000
--- a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/modelparser/ProjectHandler.java
+++ /dev/null
@@ -1,205 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.antcore.modelparser;
-import org.apache.ant.common.model.ModelException;
-import org.apache.ant.common.model.Project;
-import org.xml.sax.Attributes;
-import org.xml.sax.SAXParseException;
-
-/**
- * Element to parse the project element. The project handler creates a
- * number of different handlers to which it delegates processing of child
- * elements.
- *
- * @author Conor MacNeill
- * @created 9 January 2002
- */
-public class ProjectHandler extends ModelElementHandler {
-    /** The basedir attribute tag */
-    public static final String BASEDIR_ATTR = "basedir";
-
-    /** The name attribute */
-    public static final String NAME_ATTR = "name";
-
-    /** The default attribute name */
-    public static final String DEFAULT_ATTR = "default";
-
-    /** The name of the element used to define references */
-    public static final String REF_ELEMENT = "ant:ref";
-    
-    /** The name of the element used to define references */
-    public static final String INCLUDE_ELEMENT = "ant:include";
-    
-    /** The name of the element used to define references */
-    public static final String TARGET_ELEMENT = "target";
-
-    /** The project being parsed. */
-    private Project project;
-
-    /** Constructor parsing a new project */
-    public ProjectHandler() {
-        project = null;
-    }
-
-    /**
-     * Constructor for including a project or fragment into an existing
-     * project
-     *
-     * @param project The project to be configured by the handler
-     */
-    public ProjectHandler(Project project) {
-        this.project = project;
-    }
-
-    /**
-     * Get the project that has been parsed from the element
-     *
-     * @return the project that has been parsed from the build source
-     * @throws NoProjectReadException thrown if no project was read in.
-     */
-    public Project getProject()
-         throws NoProjectReadException {
-        if (project == null) {
-            throw new NoProjectReadException();
-        }
-        return project;
-    }
-
-
-    /**
-     * Process the project element
-     *
-     * @param elementName the name of the element
-     * @exception SAXParseException if there is a problem parsing the
-     *      element
-     */
-    public void processElement(String elementName)
-         throws SAXParseException {
-        if (project == null) {
-            project = new Project(getElementSource(), getLocation());
-            setModelElement(project);
-            
-            project.setDefaultTarget(getAttribute(DEFAULT_ATTR));
-            project.setBase(getAttribute(BASEDIR_ATTR));
-            project.setName(getAttribute(NAME_ATTR));
-            project.setAspects(getAspects());
-        }
-    }
-
-
-    /**
-     * Start a new element in the project. Project currently handles the
-     * following elements
-     * <ul>
-     *   <li> ref</li>
-     *   <li> include</li>
-     *   <li> target</li>
-     * </ul>
-     * Everything else is treated as a task.
-     *
-     * @param uri The Namespace URI.
-     * @param localName The local name (without prefix).
-     * @param qualifiedName The qualified name (with prefix)
-     * @param attributes The attributes attached to the element.
-     * @throws SAXParseException if there is a parsing problem.
-     */
-    public void startElement(String uri, String localName, String qualifiedName,
-                             Attributes attributes)
-         throws SAXParseException {
-
-        if (qualifiedName.equals(INCLUDE_ELEMENT)) {
-            IncludeHandler includeHandler = new IncludeHandler(project);
-            includeHandler.start(getParseContext(), getXMLReader(),
-                this, getLocator(), attributes, getElementSource(),
-                qualifiedName);
-        } else if (qualifiedName.equals(TARGET_ELEMENT)) {
-            TargetHandler targetHandler = new TargetHandler();
-            targetHandler.start(getParseContext(), getXMLReader(),
-                this, getLocator(), attributes,
-                getElementSource(), qualifiedName);
-            try {
-                project.addTarget(targetHandler.getTarget());
-            } catch (ModelException e) {
-                throw new SAXParseException(e.getMessage(), getLocator(), e);
-            }
-        } else {
-            // everything else is a task
-            BuildElementHandler buildElementHandler = new BuildElementHandler();
-            buildElementHandler.start(getParseContext(), getXMLReader(),
-                this, getLocator(), attributes, getElementSource(),
-                qualifiedName);
-            project.addTask(buildElementHandler.getBuildElement());
-        }
-    }
-
-    /**
-     * Validate that the given attribute and value are valid.
-     *
-     * @param attributeName The name of the attributes
-     * @param attributeValue The value of the attributes
-     * @exception SAXParseException if the attribute is not allowed on the
-     *      element.
-     */
-    protected void validateAttribute(String attributeName,
-                                     String attributeValue)
-         throws SAXParseException {
-        if (!attributeName.equals(BASEDIR_ATTR) &&
-            !attributeName.equals(NAME_ATTR) &&
-            !attributeName.equals(DEFAULT_ATTR)) {
-            throwInvalidAttribute(attributeName);
-        }
-    }
-}
-
-
diff --git a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/modelparser/TargetHandler.java b/proposal/mutant/src/java/antcore/org/apache/ant/antcore/modelparser/TargetHandler.java
deleted file mode 100644
index 2f98316..0000000
--- a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/modelparser/TargetHandler.java
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.antcore.modelparser;
-import java.util.StringTokenizer;
-
-import org.apache.ant.common.model.Target;
-import org.xml.sax.Attributes;
-import org.xml.sax.SAXParseException;
-
-/**
- * Element handler for the target element
- *
- * @author Conor MacNeill
- * @created 9 January 2002
- */
-public class TargetHandler extends ModelElementHandler {
-    /** The name attribute */
-    public static final String NAME_ATTR = "name";
-
-    /** The depends attribute name */
-    public static final String DEPENDS_ATTR = "depends";
-
-    /** The depends attribute name */
-    public static final String DESC_ATTR = "description";
-
-    /** The if attribute name */
-    public static final String IF_ATTR = "if";
-    
-    /** The unless attribute name */
-    public static final String UNLESS_ATTR = "unless";
-
-    /** The target being configured. */
-    private Target target;
-
-    /**
-     * Get the target parsed by this handler.
-     *
-     * @return the Target model object parsed by this handler.
-     */
-    public Target getTarget() {
-        return target;
-    }
-
-
-    /**
-     * Process the target element.
-     *
-     * @param elementName the name of the element
-     * @exception SAXParseException if there is a problem parsing the
-     *      element
-     */
-    public void processElement(String elementName)
-         throws SAXParseException {
-        target = new Target(getLocation(), getAttribute(NAME_ATTR));
-        setModelElement(target);
-        target.setDescription(getAttribute(DESC_ATTR));
-        target.setAspects(getAspects());
-
-        String depends = getAttribute(DEPENDS_ATTR);
-        if (depends != null) {
-            StringTokenizer tokenizer = new StringTokenizer(depends, ",");
-            while (tokenizer.hasMoreTokens()) {
-                String dependency = tokenizer.nextToken().trim();
-                target.addDependency(dependency);
-            }
-        }
-        target.setIfCondition(getAttribute(IF_ATTR));
-        target.setUnlessCondition(getAttribute(UNLESS_ATTR));
-    }
-
-
-    /**
-     * Process an element within this target. All elements within the target
-     * are treated as tasks.
-     *
-     * @param uri The Namespace URI.
-     * @param localName The local name (without prefix).
-     * @param qualifiedName The qualified name (with prefix)
-     * @param attributes The attributes attached to the element.
-     * @throws SAXParseException if there is a parsing problem.
-     */
-    public void startElement(String uri, String localName, String qualifiedName,
-                             Attributes attributes)
-         throws SAXParseException {
-        // everything is a task
-        BuildElementHandler taskHandler = new BuildElementHandler();
-        taskHandler.start(getParseContext(), getXMLReader(), this, getLocator(),
-            attributes, getElementSource(), qualifiedName);
-        target.addTask(taskHandler.getBuildElement());
-    }
-
-    /**
-     * Validate that the given attribute and value are valid.
-     *
-     * @param attributeName The name of the attributes
-     * @param attributeValue The value of the attributes
-     * @exception SAXParseException if the attribute is not allowed on the
-     *      element.
-     */
-    protected void validateAttribute(String attributeName,
-                                     String attributeValue)
-         throws SAXParseException {
-        if (!attributeName.equals(NAME_ATTR) 
-            && !attributeName.equals(DEPENDS_ATTR) 
-            && !attributeName.equals(DESC_ATTR) 
-            && !attributeName.equals(IF_ATTR)
-            && !attributeName.equals(UNLESS_ATTR)) {
-            throwInvalidAttribute(attributeName);
-        }
-    }
-}
-
-
diff --git a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/modelparser/XMLProjectParser.java b/proposal/mutant/src/java/antcore/org/apache/ant/antcore/modelparser/XMLProjectParser.java
deleted file mode 100644
index bb568d3..0000000
--- a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/modelparser/XMLProjectParser.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.antcore.modelparser;
-import java.net.URL;
-
-import org.apache.ant.common.util.Location;
-import org.apache.ant.common.model.Project;
-import org.apache.ant.antcore.xml.ParseContext;
-import org.apache.ant.antcore.xml.XMLParseException;
-
-/**
- * Parses an Ant project model from an XML source using a SAX Parser.
- *
- * @author Conor MacNeill
- * @created 9 January 2002
- */
-public class XMLProjectParser {
-    /**
-     * Parse a build file from the given URL.
-     *
-     * @param buildSource the URL from where the build source may be read.
-     * @return a project model representing the project
-     * @exception XMLParseException if there is an problem parsing the XML
-     *      representation
-     */
-    public Project parseBuildFile(URL buildSource)
-         throws XMLParseException {
-        try {
-            ParseContext context = new ParseContext();
-            ProjectHandler projectHandler = new ProjectHandler();
-
-            context.parse(buildSource, "project", projectHandler);
-
-            return projectHandler.getProject();
-        } catch (NoProjectReadException e) {
-            throw new XMLParseException("No project defined in build source ",
-                e, new Location(buildSource.toString()));
-        }
-    }
-}
-
diff --git a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/xml/ElementHandler.java b/proposal/mutant/src/java/antcore/org/apache/ant/antcore/xml/ElementHandler.java
deleted file mode 100755
index 189302a..0000000
--- a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/xml/ElementHandler.java
+++ /dev/null
@@ -1,369 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.antcore.xml;
-import java.net.URL;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-
-import org.apache.ant.common.util.Location;
-import org.xml.sax.Attributes;
-import org.xml.sax.ContentHandler;
-import org.xml.sax.Locator;
-import org.xml.sax.SAXParseException;
-import org.xml.sax.XMLReader;
-import org.xml.sax.helpers.DefaultHandler;
-import org.apache.ant.common.util.PropertyUtils;
-
-/**
- * An Element Handler is a handler which handles a single element by
- * becoming the handler for the parser while processing the element. Any sub
- * elements must be delegated to separate handlers. When this element is
- * finished, control returns to the parent handler.
- *
- * @author Conor MacNeill
- * @created 9 January 2002
- */
-public abstract class ElementHandler extends DefaultHandler {
-    /** The parsing context for parsing this element */
-    private ParseContext context;
-
-    /**
-     * Locator used to identify where in the build source particular
-     * elements occur.
-     */
-    private Locator locator;
-
-    /** The actual XML parser used to parse the build source */
-    private XMLReader reader;
-
-    /** The parent element handler */
-    private ContentHandler parent;
-
-    /** The URL from which we are reading source */
-    private URL source;
-
-    /** The name of this element */
-    private String elementName;
-
-    /** The attributes read from this element */
-    private Map elementAttributes;
-
-    /** The aspect attributes read from the element definition */
-    private Map aspects;
-
-    /** The content of this element */
-    private String content;
-
-    /**
-     * Get the source which contains this element
-     *
-     * @return the URL from which this element is being read
-     */
-    public URL getElementSource() {
-        return source;
-    }
-
-    /**
-     * Gets the attributeValue attribute of the ElementHandler object
-     *
-     * @param attributeName th name of the attribute
-     * @return The corresponding attribute value or null if the attribute wa
-     *      snot defined.
-     */
-    public String getAttribute(String attributeName) {
-        return (String) elementAttributes.get(attributeName);
-    }
-
-    /**
-     * Get an attribute as a boolean value
-     *
-     * @param attributeName the name of the attribute
-     * @return the attribute value as a boolean
-     */
-    protected boolean getBooleanAttribute(String attributeName) {
-        return PropertyUtils.toBoolean(getAttribute(attributeName));
-    }
-    
-    /**
-     * Get an iterator to this elements attributes
-     *
-     * @return an iterator over the attribute names
-     */
-    public Iterator getAttributes() {
-        return elementAttributes.keySet().iterator();
-    }
-
-    /**
-     * Get the aspect attributes of this element.
-     *
-     * @return The aspect attributes.
-     */
-    public Map getAspects() {
-        return aspects;
-    }
-
-    /**
-     * Gets the content of the element
-     *
-     * @return The content value
-     */
-    public String getContent() {
-        return content;
-    }
-
-
-    /**
-     * Start this element handler.
-     *
-     * @param parent the element handler for the element which contains this
-     *      one.
-     * @param locator the locator is used to get location information from
-     *      elements.
-     * @param attributes the element's attributes.
-     * @param source the URL from which the XML source is being parsed.
-     * @param xmlReader the parser being used
-     * @param context the parser context for this element
-     * @param elementName the actual element Name for this element in the
-     *      XML
-     * @exception SAXParseException if there is a problem parsing the
-     *      element
-     */
-    public final void start(ParseContext context, XMLReader xmlReader,
-                            ContentHandler parent, Locator locator,
-                            Attributes attributes, URL source,
-                            String elementName)
-         throws SAXParseException {
-        this.context = context;
-        this.reader = xmlReader;
-        this.parent = parent;
-        this.locator = locator;
-        this.source = source;
-        this.elementName = elementName;
-        processAttributes(attributes);
-        processElement(elementName);
-        reader.setContentHandler(this);
-    }
-
-
-    /**
-     * By default an element handler does not support nested elements. This
-     * method will always throw an exception. Subclasses should override
-     * this method to support their own nested elements
-     *
-     * @param uri The Namespace URI.
-     * @param localName The local name (without prefix).
-     * @param qualifiedName The qualified name (with prefix)
-     * @param attributes The attributes attached to the element.
-     * @throws SAXParseException if there is a problem parsng the subelement
-     */
-    public void startElement(String uri, String localName, String qualifiedName,
-                             Attributes attributes)
-         throws SAXParseException {
-        // everything is a task
-        throw new SAXParseException("<" + elementName + "> does not support a <"
-             + qualifiedName + "> nested element", getLocator());
-    }
-
-
-    /**
-     * Handle the end of this element by making the parent element handler
-     * the current content handler
-     *
-     * @param localName The local name (without prefix).
-     * @param namespaceURI The Namespace URI.
-     * @param qName the qualified name of the element
-     */
-    public final void endElement(String namespaceURI, String localName,
-                                 String qName) {
-        finish();
-        reader.setContentHandler(parent);
-    }
-
-    /**
-     * Record content of this element
-     *
-     * @param buf the buffer containing the content to be added
-     * @param start start position in the buffer
-     * @param end end position in the buffer
-     * @exception SAXParseException if there is a parsing error.
-     * @see org.xml.sax.ContentHandler.characters()
-     */
-    public void characters(char[] buf, int start, int end)
-         throws SAXParseException {
-        if (content == null) {
-            content = "";
-        }
-        content += new String(buf, start, end);
-    }
-
-
-    /**
-     * Get the current parsing location
-     *
-     * @return a location instance representing the current parse position
-     */
-    protected Location getLocation() {
-        return new Location(locator.getSystemId(), locator.getLineNumber(),
-            locator.getColumnNumber());
-    }
-
-
-    /**
-     * Get the XML Reader being used to parse the XML.
-     *
-     * @return the XML Reader.
-     */
-    protected XMLReader getXMLReader() {
-        return reader;
-    }
-
-
-    /**
-     * Get the parsing context
-     *
-     * @return the parsing context of this element
-     */
-    protected ParseContext getParseContext() {
-        return context;
-    }
-
-
-    /**
-     * Get the locator used to locate elements in the XML source as they are
-     * parsed.
-     *
-     * @return the locator object which can be used to determine an elements
-     *      location within the XML source
-     */
-    protected Locator getLocator() {
-        return locator;
-    }
-
-
-    /**
-     * Process the element.
-     *
-     * @param elementName the name of the element
-     * @exception SAXParseException if there is a problem parsing the
-     *      element
-     */
-    protected abstract void processElement(String elementName)
-         throws SAXParseException;
-
-
-    /**
-     * Process all of the attributes of the element into maps, one for
-     * aspects and one for other attributes
-     *
-     * @param attributes The SAX attributes collection for the element
-     * @exception SAXParseException if there is a problem reading the
-     *      attributes
-     */
-    protected final void processAttributes(Attributes attributes)
-         throws SAXParseException {
-        aspects = new HashMap();
-        elementAttributes = new HashMap();
-        int length = attributes.getLength(); 
-        for (int i = 0; i < length; ++i) {
-            String attributeName = attributes.getQName(i);
-            String attributeValue = attributes.getValue(i);
-            if (attributeName.indexOf(":") != -1) {
-                aspects.put(attributeName, attributeValue);
-            } else {
-                validateAttribute(attributeName, attributeValue);
-                elementAttributes.put(attributeName, attributeValue);
-            }
-        }
-    }
-
-    /**
-     * Validate that the given attribute and value are valid. By default all
-     * attributes are considered invalid. This method should be overrider by
-     * subclasses to allow specific attributes
-     *
-     * @param attributeName The name of the attributes
-     * @param attributeValue The value of the attributes
-     * @exception SAXParseException if the attribute is not allowed on the
-     *      element.
-     */
-    protected void validateAttribute(String attributeName,
-                                     String attributeValue)
-         throws SAXParseException {
-        throwInvalidAttribute(attributeName);
-    }
-
-    /**
-     * Throws an invalid attribute exception
-     *
-     * @param attributeName The name of the invalid attribute
-     * @exception SAXParseException always - indicating attribute is invalid
-     */
-    protected final void throwInvalidAttribute(String attributeName)
-         throws SAXParseException {
-        throw new SAXParseException("The attribute '" + attributeName
-             + "' is not " + "supported by the <" + elementName
-             + "> element", getLocator());
-    }
-
-
-    /**
-     * This method is called when this element is finished being processed.
-     * This is a template method allowing subclasses to complete any
-     * necessary processing.
-     */
-    protected void finish() {
-    }
-}
-
diff --git a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/xml/ParseContext.java b/proposal/mutant/src/java/antcore/org/apache/ant/antcore/xml/ParseContext.java
deleted file mode 100755
index ed9711f..0000000
--- a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/xml/ParseContext.java
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.antcore.xml;
-
-import java.io.IOException;
-import java.net.URL;
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.parsers.SAXParser;
-import javax.xml.parsers.SAXParserFactory;
-import org.apache.ant.common.util.Location;
-import org.apache.ant.common.util.CircularDependencyChecker;
-import org.apache.ant.common.util.CircularDependencyException;
-import org.apache.ant.common.util.AntException;
-import org.xml.sax.SAXException;
-import org.xml.sax.SAXParseException;
-import org.xml.sax.XMLReader;
-
-/**
- * Holds the current parsing context.
- *
- * @author Conor MacNeill
- * @created 9 January 2002
- */
-public class ParseContext {
-    /**
-     * Used to check if we are trying to parse a build file within its own
-     * context.
-     */
-    private CircularDependencyChecker checker
-         = new CircularDependencyChecker("parsing XML");
-
-    /** The factory used to create SAX parsers. */
-    private SAXParserFactory parserFactory = SAXParserFactory.newInstance();
-
-
-    /**
-     * Parse a URL using the given root handler
-     *
-     * @param source The URL to the source to be parsed
-     * @param rootElementName The required root element name
-     * @param rootElementHandler The handler for the root element
-     * @exception XMLParseException if the element cannot be parsed
-     */
-    public void parse(URL source, String rootElementName,
-                      ElementHandler rootElementHandler)
-         throws XMLParseException {
-        parse(source, new String[]{rootElementName}, rootElementHandler);
-    }
-
-
-    /**
-     * Parse a URL using the given root handler
-     *
-     * @param source The URL to the source to be parsed
-     * @param rootElementNames The allowable root element names
-     * @param rootElementHandler The handler for the root element
-     * @exception XMLParseException if the element cannot be parsed
-     */
-    public void parse(URL source, String[] rootElementNames,
-                      ElementHandler rootElementHandler)
-         throws XMLParseException {
-        try {
-            checker.visitNode(source);
-
-            // create a parser for this source
-            SAXParser saxParser = parserFactory.newSAXParser();
-            XMLReader xmlReader = saxParser.getXMLReader();
-
-            // create a root handler for this
-            RootHandler rootHandler = new RootHandler(this, source, xmlReader,
-                rootElementNames, rootElementHandler);
-            saxParser.parse(source.toString(), rootHandler);
-
-            checker.leaveNode(source);
-        } catch (ParserConfigurationException e) {
-            throw new XMLParseException(e);
-        } catch (SAXParseException e) {
-            Location location = new Location(e.getSystemId(),
-                e.getLineNumber(), e.getColumnNumber());
-            if (e.getException() != null) {
-                Throwable nestedException = e.getException();
-                if (nestedException instanceof AntException) {
-                    location = ((AntException) nestedException).getLocation();
-                }
-                throw new XMLParseException(nestedException, location);
-            } else {
-                throw new XMLParseException(e, location);
-            }
-        } catch (SAXException e) {
-            throw new XMLParseException(e);
-        } catch (IOException e) {
-            throw new XMLParseException(e);
-        } catch (CircularDependencyException e) {
-            throw new XMLParseException(e);
-        }
-    }
-}
-
diff --git a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/xml/RootHandler.java b/proposal/mutant/src/java/antcore/org/apache/ant/antcore/xml/RootHandler.java
deleted file mode 100755
index e671f2b..0000000
--- a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/xml/RootHandler.java
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.antcore.xml;
-
-import java.net.URL;
-import org.xml.sax.Attributes;
-import org.xml.sax.Locator;
-import org.xml.sax.SAXParseException;
-import org.xml.sax.XMLReader;
-import org.xml.sax.helpers.DefaultHandler;
-
-/**
- * Handle the root of an XML parse. This class recognizes the root document
- * element and then passes control to the handler for that root element.
- *
- * @author Conor MacNeill
- * @created 9 January 2002
- */
-public class RootHandler extends DefaultHandler {
-    /** The parsing context for this document */
-    private ParseContext context;
-
-    /**
-     * Locator used to identify where in the build source particular
-     * elements occur.
-     */
-    private Locator locator;
-
-    /** The actual XML parser used to parse the build source */
-    private XMLReader reader;
-
-    /** The URL from which the XML source is being read. */
-    private URL sourceURL;
-
-    /** The allowed names of the root element in this document */
-    private String[] allowedRootNames;
-
-    /** The handler for the root element */
-    private ElementHandler rootElementHandler;
-
-
-    /**
-     * Handler to handle the document root.
-     *
-     * @param context The Parser context for this parse operation
-     * @param sourceURL URL of the source containing the XML definition
-     * @param reader XML parser
-     * @param allowedRootNames An array of allowed element names
-     * @param rootElementHandler The element handler for the root element
-     */
-    public RootHandler(ParseContext context, URL sourceURL, XMLReader reader,
-                       String[] allowedRootNames, 
-                       ElementHandler rootElementHandler) {
-        this.context = context;
-        this.sourceURL = sourceURL;
-        this.reader = reader;
-        this.allowedRootNames = allowedRootNames;
-        this.rootElementHandler = rootElementHandler;
-    }
-
-
-    /**
-     * Set the locator to use when parsing elements. This is passed onto
-     * child elements.
-     *
-     * @param locator the locator for locating elements in the build source.
-     */
-    public void setDocumentLocator(Locator locator) {
-        this.locator = locator;
-    }
-
-
-    /**
-     * Start a new element in the root. This must be an allowed root element.
-     * All other elements are invalid.
-     *
-     * @param uri The Namespace URI.
-     * @param localName The local name (without prefix).
-     * @param qualifiedName The qualified name (with prefix)
-     * @param attributes The attributes attached to the element.
-     * @throws SAXParseException if there is a parsing problem.
-     */
-    public void startElement(String uri, String localName, String qualifiedName,
-                             Attributes attributes)
-         throws SAXParseException {
-        boolean allowed = false;
-        for (int i = 0; i < allowedRootNames.length; ++i) {
-            if (qualifiedName.equals(allowedRootNames[i])) {
-                allowed = true;
-                break;
-            }
-        }
-
-        if (allowed) {
-            rootElementHandler.start(context, reader, this,
-                locator, attributes, sourceURL, qualifiedName);
-        } else {
-            throw new SAXParseException("<" + qualifiedName
-                 + "> element was not expected as the root element", locator);
-        }
-    }
-}
-
diff --git a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/xml/XMLParseException.java b/proposal/mutant/src/java/antcore/org/apache/ant/antcore/xml/XMLParseException.java
deleted file mode 100755
index 516bfe7..0000000
--- a/proposal/mutant/src/java/antcore/org/apache/ant/antcore/xml/XMLParseException.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.antcore.xml;
-
-import org.apache.ant.common.util.AntException;
-import org.apache.ant.common.util.Location;
-
-/**
- * An XMLParseException is thrown when there is an error parsing the XML
- * representation of an Ant build file.
- *
- * @author Conor MacNeill
- * @created 11 January 2002
- */
-public class XMLParseException extends AntException {
-    /**
-     * Constructs an exception with the given descriptive message.
-     *
-     * @param msg Description of or information about the exception.
-     */
-    public XMLParseException(String msg) {
-        super(msg);
-    }
-
-    /**
-     * Constructs an exception with the given descriptive message and a
-     * location in a file.
-     *
-     * @param msg Description of or information about the exception.
-     * @param location Location in the project file where the error occured.
-     */
-    public XMLParseException(String msg, Location location) {
-        super(msg, location);
-    }
-
-    /**
-     * Constructs an exception with the given message and exception as a
-     * root cause.
-     *
-     * @param msg Description of or information about the exception.
-     * @param cause Throwable that might have cause this one.
-     */
-    public XMLParseException(String msg, Throwable cause) {
-        super(msg, cause);
-    }
-
-    /**
-     * Constructs an exception with the given message and exception as a
-     * root cause and a location in a file.
-     *
-     * @param msg Description of or information about the exception.
-     * @param cause Exception that might have cause this one.
-     * @param location Location in the project file where the error occured.
-     */
-    public XMLParseException(String msg, Throwable cause, Location location) {
-        super(msg, cause, location);
-    }
-
-    /**
-     * Constructs an exception with the given exception as a root cause.
-     *
-     * @param cause Exception that might have caused this one.
-     */
-    public XMLParseException(Throwable cause) {
-        super(cause);
-    }
-
-    /**
-     * Constructs an exception with the given exception as a root cause and
-     * a location in a file.
-     *
-     * @param cause Exception that might have cause this one.
-     * @param location Location in the project file where the error occured.
-     */
-    public XMLParseException(Throwable cause, Location location) {
-        super(cause, location);
-    }
-}
-
diff --git a/proposal/mutant/src/java/antlibs/ant1compat/antlib.xml b/proposal/mutant/src/java/antlibs/ant1compat/antlib.xml
deleted file mode 100644
index 8d0399e..0000000
--- a/proposal/mutant/src/java/antlibs/ant1compat/antlib.xml
+++ /dev/null
@@ -1,169 +0,0 @@
-<antlib libid="ant.ant1compat" 
-        home="http://jakarta.apache.org/ant"
-        reqxml="true" reqtools="true"
-        extends="ant.system">
-
-  <factory classname="org.apache.tools.ant.Ant1Factory"/>
-          
-  <converter classname="org.apache.tools.ant.Ant1Converter"/>          
-
-  <!-- typedefs -->  
-  <taskdef name="antlr" classname="org.apache.tools.ant.taskdefs.optional.ANTLR"/>
-  <taskdef name="antstructure" classname="org.apache.tools.ant.taskdefs.AntStructure"/>
-  <taskdef name="apply" classname="org.apache.tools.ant.taskdefs.Transform"/>
-  <taskdef name="available" classname="org.apache.tools.ant.taskdefs.Available"/>
-  <taskdef name="blgenclient" classname="org.apache.tools.ant.taskdefs.optional.ejb.BorlandGenerateClient"/>
-  <taskdef name="bunzip2" classname="org.apache.tools.ant.taskdefs.BUnzip2"/>
-  <taskdef name="bzip2" classname="org.apache.tools.ant.taskdefs.BZip2"/>
-  <taskdef name="cab" classname="org.apache.tools.ant.taskdefs.optional.Cab"/>
-  <taskdef name="cccheckin" classname="org.apache.tools.ant.taskdefs.optional.clearcase.CCCheckin"/>
-  <taskdef name="cccheckout" classname="org.apache.tools.ant.taskdefs.optional.clearcase.CCCheckout"/>
-  <taskdef name="ccmcheckin" classname="org.apache.tools.ant.taskdefs.optional.ccm.CCMCheckin"/>
-  <taskdef name="ccmcheckintask" classname="org.apache.tools.ant.taskdefs.optional.ccm.CCMCheckinDefault"/>
-  <taskdef name="ccmcheckout" classname="org.apache.tools.ant.taskdefs.optional.ccm.CCMCheckout"/>
-  <taskdef name="ccmcreatetask" classname="org.apache.tools.ant.taskdefs.optional.ccm.CCMCreateTask"/>
-  <taskdef name="ccmreconfigure" classname="org.apache.tools.ant.taskdefs.optional.ccm.CCMReconfigure"/>
-  <taskdef name="ccuncheckout" classname="org.apache.tools.ant.taskdefs.optional.clearcase.CCUnCheckout"/>
-  <taskdef name="ccupdate" classname="org.apache.tools.ant.taskdefs.optional.clearcase.CCUpdate"/>
-  <taskdef name="checksum" classname="org.apache.tools.ant.taskdefs.Checksum"/>
-  <taskdef name="chmod" classname="org.apache.tools.ant.taskdefs.Chmod"/>
-  <taskdef name="condition" classname="org.apache.tools.ant.taskdefs.ConditionTask"/>
-  <taskdef name="copy" classname="org.apache.tools.ant.taskdefs.Copy"/>
-  <taskdef name="csc" classname="org.apache.tools.ant.taskdefs.optional.dotnet.CSharp"/>
-  <taskdef name="cvs" classname="org.apache.tools.ant.taskdefs.Cvs"/>
-  <taskdef name="cvspass" classname="org.apache.tools.ant.taskdefs.CVSPass"/>
-  <taskdef name="ddcreator" classname="org.apache.tools.ant.taskdefs.optional.ejb.DDCreator"/>
-  <taskdef name="delete" classname="org.apache.tools.ant.taskdefs.Delete"/>
-  <taskdef name="depend" classname="org.apache.tools.ant.taskdefs.optional.depend.Depend"/>
-  <taskdef name="dependset" classname="org.apache.tools.ant.taskdefs.DependSet"/>
-  <taskdef name="ear" classname="org.apache.tools.ant.taskdefs.Ear"/>
-  <taskdef name="echo" classname="org.apache.tools.ant.taskdefs.Echo"/>
-  <taskdef name="echoproperties" classname="org.apache.tools.ant.taskdefs.optional.EchoProperties"/>
-  <taskdef name="ejbc" classname="org.apache.tools.ant.taskdefs.optional.ejb.Ejbc"/>
-  <taskdef name="ejbjar" classname="org.apache.tools.ant.taskdefs.optional.ejb.EjbJar"/>
-  <taskdef name="exec" classname="org.apache.tools.ant.taskdefs.ExecTask"/>
-  <taskdef name="execon" classname="org.apache.tools.ant.taskdefs.ExecuteOn"/>
-  <taskdef name="fail" classname="org.apache.tools.ant.taskdefs.Exit"/>
-  <taskdef name="filter" classname="org.apache.tools.ant.taskdefs.Filter"/>
-  <taskdef name="fixcrlf" classname="org.apache.tools.ant.taskdefs.FixCRLF"/>
-  <taskdef name="ftp" classname="org.apache.tools.ant.taskdefs.optional.net.FTP"/>
-  <taskdef name="genkey" classname="org.apache.tools.ant.taskdefs.GenerateKey"/>
-  <taskdef name="get" classname="org.apache.tools.ant.taskdefs.Get"/>
-  <taskdef name="gunzip" classname="org.apache.tools.ant.taskdefs.GUnzip"/>
-  <taskdef name="gzip" classname="org.apache.tools.ant.taskdefs.GZip"/>
-  <taskdef name="icontract" classname="org.apache.tools.ant.taskdefs.optional.IContract"/>
-  <taskdef name="ilasm" classname="org.apache.tools.ant.taskdefs.optional.dotnet.Ilasm"/>
-  <taskdef name="input" classname="org.apache.tools.ant.taskdefs.Input"/>
-  <taskdef name="iplanet-ejbc" classname="org.apache.tools.ant.taskdefs.optional.ejb.IPlanetEjbcTask"/>
-  <taskdef name="jar" classname="org.apache.tools.ant.taskdefs.Jar"/>
-  <taskdef name="java" classname="org.apache.tools.ant.taskdefs.Java"/>
-  <taskdef name="javac" classname="org.apache.tools.ant.taskdefs.Javac"/>
-  <taskdef name="javacc" classname="org.apache.tools.ant.taskdefs.optional.javacc.JavaCC"/>
-  <taskdef name="javadoc" classname="org.apache.tools.ant.taskdefs.Javadoc"/>
-  <taskdef name="javah" classname="org.apache.tools.ant.taskdefs.optional.Javah"/>
-  <taskdef name="jdepend" classname="org.apache.tools.ant.taskdefs.optional.jdepend.JDependTask"/>
-  <taskdef name="jjtree" classname="org.apache.tools.ant.taskdefs.optional.javacc.JJTree"/>
-  <taskdef name="jlink" classname="org.apache.tools.ant.taskdefs.optional.jlink.JlinkTask"/>
-  <taskdef name="jpcoverage" classname="org.apache.tools.ant.taskdefs.optional.sitraka.Coverage"/>
-  <taskdef name="jpcovmerge" classname="org.apache.tools.ant.taskdefs.optional.sitraka.CovMerge"/>
-  <taskdef name="jpcovreport" classname="org.apache.tools.ant.taskdefs.optional.sitraka.CovReport"/>
-  <taskdef name="jspc" classname="org.apache.tools.ant.taskdefs.optional.jsp.JspC"/>
-  <taskdef name="junit" classname="org.apache.tools.ant.taskdefs.optional.junit.JUnitTask"/>
-  <taskdef name="junitreport" classname="org.apache.tools.ant.taskdefs.optional.junit.XMLResultAggregator"/>
-  <taskdef name="loadfile" classname="org.apache.tools.ant.taskdefs.LoadFile"/>
-  <taskdef name="mail" classname="org.apache.tools.ant.taskdefs.SendEmail"/>
-  <taskdef name="manifest" classname="org.apache.tools.ant.taskdefs.Manifest"/>
-  <taskdef name="maudit" classname="org.apache.tools.ant.taskdefs.optional.metamata.MAudit"/>
-  <taskdef name="mimemail" classname="org.apache.tools.ant.taskdefs.optional.net.MimeMail"/>
-  <taskdef name="mkdir" classname="org.apache.tools.ant.taskdefs.Mkdir"/>
-  <taskdef name="mmetrics" classname="org.apache.tools.ant.taskdefs.optional.metamata.MMetrics"/>
-  <taskdef name="move" classname="org.apache.tools.ant.taskdefs.Move"/>
-  <taskdef name="mparse" classname="org.apache.tools.ant.taskdefs.optional.metamata.MParse"/>
-  <taskdef name="native2ascii" classname="org.apache.tools.ant.taskdefs.optional.Native2Ascii"/>
-  <taskdef name="netrexxc" classname="org.apache.tools.ant.taskdefs.optional.NetRexxC"/>
-  <taskdef name="p4add" classname="org.apache.tools.ant.taskdefs.optional.perforce.P4Add"/>
-  <taskdef name="p4change" classname="org.apache.tools.ant.taskdefs.optional.perforce.P4Change"/>
-  <taskdef name="p4counter" classname="org.apache.tools.ant.taskdefs.optional.perforce.P4Counter"/>
-  <taskdef name="p4edit" classname="org.apache.tools.ant.taskdefs.optional.perforce.P4Edit"/>
-  <taskdef name="p4have" classname="org.apache.tools.ant.taskdefs.optional.perforce.P4Have"/>
-  <taskdef name="p4label" classname="org.apache.tools.ant.taskdefs.optional.perforce.P4Label"/>
-  <taskdef name="p4submit" classname="org.apache.tools.ant.taskdefs.optional.perforce.P4Submit"/>
-  <taskdef name="p4sync" classname="org.apache.tools.ant.taskdefs.optional.perforce.P4Sync"/>
-  <taskdef name="patch" classname="org.apache.tools.ant.taskdefs.Patch"/>
-  <taskdef name="pathconvert" classname="org.apache.tools.ant.taskdefs.PathConvert"/>
-  <taskdef name="property" classname="org.apache.tools.ant.taskdefs.Property"/>
-  <taskdef name="propertyfile" classname="org.apache.tools.ant.taskdefs.optional.PropertyFile"/>
-  <taskdef name="pvcs" classname="org.apache.tools.ant.taskdefs.optional.pvcs.Pvcs"/>
-  <taskdef name="record" classname="org.apache.tools.ant.taskdefs.Recorder"/>
-  <taskdef name="renameext" classname="org.apache.tools.ant.taskdefs.optional.RenameExtensions"/>
-  <taskdef name="replace" classname="org.apache.tools.ant.taskdefs.Replace"/>
-  <taskdef name="replaceregexp" classname="org.apache.tools.ant.taskdefs.optional.ReplaceRegExp"/>
-  <taskdef name="rmic" classname="org.apache.tools.ant.taskdefs.Rmic"/>
-  <taskdef name="rpm" classname="org.apache.tools.ant.taskdefs.optional.Rpm"/>
-  <taskdef name="script" classname="org.apache.tools.ant.taskdefs.optional.Script"/>
-  <taskdef name="signjar" classname="org.apache.tools.ant.taskdefs.SignJar"/>
-  <taskdef name="sleep" classname="org.apache.tools.ant.taskdefs.Sleep"/>
-  <taskdef name="soscheckin" classname="org.apache.tools.ant.taskdefs.optional.sos.SOSCheckin"/>
-  <taskdef name="soscheckout" classname="org.apache.tools.ant.taskdefs.optional.sos.SOSCheckout"/>
-  <taskdef name="sosget" classname="org.apache.tools.ant.taskdefs.optional.sos.SOSGet"/>
-  <taskdef name="soslabel" classname="org.apache.tools.ant.taskdefs.optional.sos.SOSLabel"/>
-  <taskdef name="sound" classname="org.apache.tools.ant.taskdefs.optional.sound.SoundTask"/>
-  <taskdef name="splash" classname="org.apache.tools.ant.taskdefs.optional.splash.SplashTask"/>
-  <taskdef name="sql" classname="org.apache.tools.ant.taskdefs.SQLExec"/>
-  <taskdef name="stcheckin" classname="org.apache.tools.ant.taskdefs.optional.starteam.StarTeamCheckin"/>
-  <taskdef name="stcheckout" classname="org.apache.tools.ant.taskdefs.optional.starteam.StarTeamCheckout"/>
-  <taskdef name="stlabel" classname="org.apache.tools.ant.taskdefs.optional.starteam.StarTeamLabel"/>
-  <taskdef name="stlist" classname="org.apache.tools.ant.taskdefs.optional.starteam.StarTeamList"/>
-  <taskdef name="style" classname="org.apache.tools.ant.taskdefs.XSLTProcess"/>
-  <taskdef name="stylebook" classname="org.apache.tools.ant.taskdefs.optional.StyleBook"/>
-  <taskdef name="tar" classname="org.apache.tools.ant.taskdefs.Tar"/>
-  <taskdef name="taskdef" classname="org.apache.tools.ant.taskdefs.Taskdef"/>
-  <taskdef name="telnet" classname="org.apache.tools.ant.taskdefs.optional.net.TelnetTask"/>
-  <taskdef name="test" classname="org.apache.tools.ant.taskdefs.optional.Test"/>
-  <taskdef name="touch" classname="org.apache.tools.ant.taskdefs.Touch"/>
-  <taskdef name="translate" classname="org.apache.tools.ant.taskdefs.optional.i18n.Translate"/>
-  <taskdef name="tstamp" classname="org.apache.tools.ant.taskdefs.Tstamp"/>
-  <taskdef name="typedef" classname="org.apache.tools.ant.taskdefs.Typedef"/>
-  <taskdef name="unjar" classname="org.apache.tools.ant.taskdefs.Expand"/>
-  <taskdef name="untar" classname="org.apache.tools.ant.taskdefs.Untar"/>
-  <taskdef name="unwar" classname="org.apache.tools.ant.taskdefs.Expand"/>
-  <taskdef name="unzip" classname="org.apache.tools.ant.taskdefs.Expand"/>
-  <taskdef name="uptodate" classname="org.apache.tools.ant.taskdefs.UpToDate"/>
-  <taskdef name="vajexport" classname="org.apache.tools.ant.taskdefs.optional.ide.VAJExport"/>
-  <taskdef name="vajimport" classname="org.apache.tools.ant.taskdefs.optional.ide.VAJImport"/>
-  <taskdef name="vajload" classname="org.apache.tools.ant.taskdefs.optional.ide.VAJLoadProjects"/>
-  <taskdef name="vsscheckin" classname="org.apache.tools.ant.taskdefs.optional.vss.MSVSSCHECKIN"/>
-  <taskdef name="vsscheckout" classname="org.apache.tools.ant.taskdefs.optional.vss.MSVSSCHECKOUT"/>
-  <taskdef name="vssget" classname="org.apache.tools.ant.taskdefs.optional.vss.MSVSSGET"/>
-  <taskdef name="vsshistory" classname="org.apache.tools.ant.taskdefs.optional.vss.MSVSSHISTORY"/>
-  <taskdef name="vsslabel" classname="org.apache.tools.ant.taskdefs.optional.vss.MSVSSLABEL"/>
-  <taskdef name="waitfor" classname="org.apache.tools.ant.taskdefs.WaitFor"/>
-  <taskdef name="war" classname="org.apache.tools.ant.taskdefs.War"/>
-  <taskdef name="wljspc" classname="org.apache.tools.ant.taskdefs.optional.jsp.WLJspc"/>
-  <taskdef name="wlrun" classname="org.apache.tools.ant.taskdefs.optional.ejb.WLRun"/>
-  <taskdef name="wlstop" classname="org.apache.tools.ant.taskdefs.optional.ejb.WLStop"/>
-  <taskdef name="xmlvalidate" classname="org.apache.tools.ant.taskdefs.optional.XMLValidateTask"/>
-  <taskdef name="zip" classname="org.apache.tools.ant.taskdefs.Zip"/>
-  
-  <!-- Deprecated tasks -->
-  <taskdef name="copydir" classname="org.apache.tools.ant.taskdefs.Copydir"/>
-  <taskdef name="copyfile" classname="org.apache.tools.ant.taskdefs.Copyfile"/>
-  <taskdef name="deltree" classname="org.apache.tools.ant.taskdefs.Deltree"/>
-  <taskdef name="rename" classname="org.apache.tools.ant.taskdefs.Rename"/>
-
-  <!-- typedefs -->  
-  <typedef name="path" classname="org.apache.tools.ant.types.Path"/>
-  <typedef name="fileset" classname="org.apache.tools.ant.types.FileSet"/>
-  <typedef name="filelist" classname="org.apache.tools.ant.types.FileList"/>
-  <typedef name="patternset" classname="org.apache.tools.ant.types.PatternSet"/>
-  <typedef name="mapper" classname="org.apache.tools.ant.types.Mapper"/>
-  <typedef name="filterchain" classname="org.apache.tools.ant.types.FilterChain"/>
-  <typedef name="filterreader" classname="org.apache.tools.ant.types.AntFilterReader"/>
-  <typedef name="filterset" classname="org.apache.tools.ant.types.FilterSet"/>
-  <typedef name="description" classname="org.apache.tools.ant.types.Description"/>
-  <typedef name="classfileset" classname="org.apache.tools.ant.types.optional.depend.ClassfileSet"/>
-  <typedef name="substitution" classname="org.apache.tools.ant.types.Substitution"/>
-  <typedef name="regexp" classname="org.apache.tools.ant.types.RegularExpression"/>
-  <typedef name="regularexpression" classname="org.apache.tools.ant.types.RegularExpression"/>
-  <typedef name="xmlcatalog" classname="org.apache.tools.ant.types.XMLCatalog"/>
-</antlib>
diff --git a/proposal/mutant/src/java/antlibs/ant1compat/org/apache/tools/ant/Ant1Converter.java b/proposal/mutant/src/java/antlibs/ant1compat/org/apache/tools/ant/Ant1Converter.java
deleted file mode 100644
index 20b77d3..0000000
--- a/proposal/mutant/src/java/antlibs/ant1compat/org/apache/tools/ant/Ant1Converter.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant;
-
-import org.apache.ant.common.antlib.AbstractConverter;
-import org.apache.ant.common.util.ExecutionException;
-import org.apache.tools.ant.types.EnumeratedAttribute;
-import org.apache.tools.ant.types.Path;
-
-/**
- * A converter to convert to the types supported by the Ant1 Ant library
- *
- * @author Conor MacNeill
- * @created 1 February 2002
- */
-public class Ant1Converter extends AbstractConverter {
-
-    /** The project instance for this converter */
-    private Project project;
-
-    /**
-     * Constructor for the Ant1Converter object
-     *
-     * @param project the project for this converter. It is used in the
-     *      conversion of some of the supported types.
-     */
-    public Ant1Converter(Project project) {
-        this.project = project;
-    }
-
-    /**
-     * Get the list of classes this converter is able to convert to.
-     *
-     * @return an array of Class objects representing the classes this
-     *      converter handles.
-     */
-    public Class[] getTypes() {
-        return new Class[]{Path.class, EnumeratedAttribute.class};
-    }
-
-    /**
-     * Convert a string from the value given to an instance of the given
-     * type.
-     *
-     * @param value The value to be converted
-     * @param type the desired type of the converted object
-     * @return the value of the converted object
-     * @exception ExecutionException if the conversion cannot be made
-     */
-    public Object convert(String value, Class type) throws ExecutionException {
-        if (type.equals(Path.class)) {
-            return new Path(project, value);
-        } else if (EnumeratedAttribute.class.isAssignableFrom(type)) {
-            try {
-                EnumeratedAttribute ea
-                     = (EnumeratedAttribute) type.newInstance();
-                ea.setValue(value);
-                return ea;
-            } catch (InstantiationException e) {
-                throw new ExecutionException(e);
-            } catch (IllegalAccessException e) {
-                throw new ExecutionException(e);
-            }
-
-        } else {
-            throw new ExecutionException("This converter does not handle "
-                 + type.getName());
-        }
-    }
-
-    /**
-     * This method allows a converter to indicate whether it can create the
-     * given type which is a sub-type of one of the converter's main types
-     * indicated in getTypes. Most converters can return false here.
-     *
-     * @param subType the sub-type
-     * @return true if this converter can convert a string representation to
-     *      the given subclass of one of its main class
-     */
-    public boolean canConvertSubType(Class subType) {
-        return EnumeratedAttribute.class.isAssignableFrom(subType);
-    }
-
-}
-
diff --git a/proposal/mutant/src/java/antlibs/ant1compat/org/apache/tools/ant/Ant1Factory.java b/proposal/mutant/src/java/antlibs/ant1compat/org/apache/tools/ant/Ant1Factory.java
deleted file mode 100644
index 47102c3..0000000
--- a/proposal/mutant/src/java/antlibs/ant1compat/org/apache/tools/ant/Ant1Factory.java
+++ /dev/null
@@ -1,212 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant;
-import org.apache.ant.common.antlib.AntContext;
-import org.apache.ant.common.antlib.Converter;
-import org.apache.ant.common.antlib.StandardLibFactory;
-import org.apache.ant.common.service.EventService;
-import org.apache.ant.common.util.ExecutionException;
-import org.apache.ant.init.LoaderUtils;
-
-/**
- * The factory object for the Ant1 compatability Ant library
- *
- * @author Conor MacNeill
- * @created 31 January 2002
- */
-public class Ant1Factory extends StandardLibFactory {
-    /**
-     * A Project instance associated with the factory - used in the creation
-     * of tasks and types
-     */
-    private Project project;
-    /** The Ant context for this factory */
-    private AntContext context;
-
-    /**
-     * Initialise the factory
-     *
-     * @param context the context for this factory to use to access core
-     *      services.
-     * @exception ExecutionException if the factory cannot be initialised.
-     */
-    public void init(AntContext context) throws ExecutionException {
-        if (project != null) {
-            return;
-        }
-
-        this.context = context;
-        // set the system classpath. In Ant2, the system classpath will not
-        // in general, have any useful information. For Ant1 compatability
-        // we set it now to include the Ant1 facade classes
-        System.setProperty("java.class.path", getAnt1Classpath());
-
-        project = new Project(this);
-        project.init(context);
-
-        EventService eventService =
-            (EventService) context.getCoreService(EventService.class);
-        eventService.addBuildListener(project);
-    }
-
-
-    /**
-     * Create an instance of the given component class
-     *
-     * @param componentClass the class for which an instance is required
-     * @param localName the name within the library under which the task is
-     *      defined
-     * @return an instance of the required class
-     * @exception InstantiationException if the class cannot be instantiated
-     * @exception IllegalAccessException if the instance cannot be accessed
-     * @exception ExecutionException if there is a problem creating the task
-     */
-    public Object createComponent(Class componentClass, String localName)
-         throws InstantiationException, IllegalAccessException,
-        ExecutionException {
-        try {
-            java.lang.reflect.Constructor constructor = null;
-            // DataType can have a "no arg" constructor or take a single
-            // Project argument.
-            Object component = null;
-            try {
-                constructor = componentClass.getConstructor(new Class[0]);
-                component = constructor.newInstance(new Object[0]);
-            } catch (NoSuchMethodException nse) {
-                constructor 
-                    = componentClass.getConstructor(new Class[]{Project.class});
-                component = constructor.newInstance(new Object[]{project});
-            }
-
-            if (component instanceof ProjectComponent) {
-                ((ProjectComponent) component).setProject(project);
-            }
-            return component;
-        } catch (java.lang.reflect.InvocationTargetException ite) {
-            Throwable t = ite.getTargetException();
-            String msg = "Could not create component of type: "
-                 + componentClass.getName() + " due to " + t;
-            throw new ExecutionException(msg, t);
-        } catch (NoSuchMethodException e) {
-            throw new ExecutionException("Unable to find an appropriate "
-                 + "constructor for component " + componentClass.getName(), e);
-        }
-    }
-
-    /**
-     * Create a converter.
-     *
-     * @param converterClass the class of the converter.
-     * @return an instance of the requested converter class
-     * @exception InstantiationException if the converter cannot be
-     *      instantiated
-     * @exception IllegalAccessException if the converter cannot be accessed
-     * @exception ExecutionException if the converter cannot be created
-     */
-    public Converter createConverter(Class converterClass)
-         throws InstantiationException, IllegalAccessException,
-        ExecutionException {
-
-        java.lang.reflect.Constructor c = null;
-
-        Converter converter = null;
-        try {
-            try {
-                c = converterClass.getConstructor(new Class[0]);
-                converter = (Converter) c.newInstance(new Object[0]);
-            } catch (NoSuchMethodException nse) {
-                c = converterClass.getConstructor(new Class[]{Project.class});
-                converter = (Converter) c.newInstance(new Object[]{project});
-            }
-
-            return converter;
-        } catch (java.lang.reflect.InvocationTargetException ite) {
-            Throwable t = ite.getTargetException();
-            String msg = "Could not create converter of type: "
-                 + converterClass.getName() + " due to " + t;
-            throw new ExecutionException(msg, t);
-        } catch (NoSuchMethodException e) {
-            throw new ExecutionException("Unable to find an appropriate "
-                 + "constructor for converter " + converterClass.getName(), e);
-        }
-    }
-
-    /**
-     * Register an element which has been created as the result of calling a
-     * create method.
-     *
-     * @param createdElement the element that the component created
-     * @exception ExecutionException if there is a problem registering the
-     *      element
-     */
-    public void registerCreatedElement(Object createdElement)
-         throws ExecutionException {
-        if (createdElement instanceof ProjectComponent) {
-            ProjectComponent component = (ProjectComponent) createdElement;
-            component.setProject(project);
-        }
-    }
-
-    /**
-     * Get an Ant1 equivalent classpath
-     *
-     * @return an Ant1 suitable classpath
-     */
-    String getAnt1Classpath() {
-        ClassLoader classLoader = getClass().getClassLoader();
-        String path = LoaderUtils.getClasspath(classLoader);
-        return path;
-    }
-}
-
diff --git a/proposal/mutant/src/java/antlibs/ant1compat/org/apache/tools/ant/Ant1InputHandler.java b/proposal/mutant/src/java/antlibs/ant1compat/org/apache/tools/ant/Ant1InputHandler.java
deleted file mode 100644
index 7a352c4..0000000
--- a/proposal/mutant/src/java/antlibs/ant1compat/org/apache/tools/ant/Ant1InputHandler.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant;
-
-import org.apache.ant.common.service.InputService;
-import org.apache.ant.common.util.ExecutionException;
-import org.apache.tools.ant.input.InputHandler;
-import org.apache.tools.ant.input.InputRequest;
-
-/**
- * Uses the core's input service to handle input
- *
- * @author Conor MacNeill
- * @created 30 April 2002
- */
-public class Ant1InputHandler implements InputHandler {
-    /** Core's input service instance */
-    private InputService inputService;
-
-    /**
-     * Constructor for the Ant1InputHandler
-     *
-     * @param inputService the core's input service instance to which input
-     * requests will be delgated.
-     */
-    public Ant1InputHandler(InputService inputService) {
-        this.inputService = inputService;
-    }
-
-    /**
-     * Pass input request into the core service
-     *
-     * @param request the input request
-     * @exception BuildException if there is a problem handling the request.
-     */
-    public void handleInput(InputRequest request) throws BuildException {
-        try {
-            inputService.handleInput(request);
-        } catch (ExecutionException e) {
-            throw new BuildException(e);
-        }
-    }
-}
-
diff --git a/proposal/mutant/src/java/antlibs/ant1compat/org/apache/tools/ant/Project.java b/proposal/mutant/src/java/antlibs/ant1compat/org/apache/tools/ant/Project.java
deleted file mode 100644
index 37e00d5..0000000
--- a/proposal/mutant/src/java/antlibs/ant1compat/org/apache/tools/ant/Project.java
+++ /dev/null
@@ -1,1253 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Enumeration;
-import java.util.Hashtable;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Properties;
-import java.util.Stack;
-import java.util.Vector;
-import org.apache.ant.common.antlib.AntContext;
-import org.apache.ant.common.antlib.AntLibFactory;
-import org.apache.ant.common.event.MessageLevel;
-import org.apache.ant.common.service.ComponentService;
-import org.apache.ant.common.service.DataService;
-import org.apache.ant.common.service.ExecService;
-import org.apache.ant.common.service.FileService;
-import org.apache.ant.common.service.InputService;
-import org.apache.ant.common.util.ExecutionException;
-import org.apache.ant.common.util.PropertyUtils;
-import org.apache.tools.ant.input.InputHandler;
-import org.apache.tools.ant.types.FilterSet;
-import org.apache.tools.ant.types.FilterSetCollection;
-import org.apache.tools.ant.util.FileUtils;
-
-/**
- * Project facade
- *
- * @author Conor MacNeill
- * @created 30 January 2002
- */
-public class Project implements org.apache.ant.common.event.BuildListener {
-
-    /** String which indicates Java version 1.0 */
-    public static final String JAVA_1_0 = "1.0";
-    /** String which indicates Java version 1.1 */
-    public static final String JAVA_1_1 = "1.1";
-    /** String which indicates Java version 1.2 */
-    public static final String JAVA_1_2 = "1.2";
-    /** String which indicates Java version 1.3 */
-    public static final String JAVA_1_3 = "1.3";
-    /** String which indicates Java version 1.4 */
-    public static final String JAVA_1_4 = "1.4";
-
-    /**
-     * @see MessageLevel.MSG_ERR
-     */
-    public static final int MSG_ERR = MessageLevel.MSG_ERR;
-    /**
-     * @see MessageLevel.MSG_WARN
-     */
-    public static final int MSG_WARN = MessageLevel.MSG_WARN;
-    /**
-     * @see MessageLevel.MSG_INFO
-     */
-    public static final int MSG_INFO = MessageLevel.MSG_INFO;
-    /**
-     * @see MessageLevel.MSG_VERBOSE
-     */
-    public static final int MSG_VERBOSE = MessageLevel.MSG_VERBOSE;
-    /**
-     * @see MessageLevel.MSG_DEBUG
-     */
-    public static final int MSG_DEBUG = MessageLevel.MSG_DEBUG;
-
-    /** The java version detected that Ant is running on */
-    private static String javaVersion;
-
-    /** Called to handle any input requests. */
-    private InputHandler inputHandler = null;
-
-    /**
-     * the factory which created this project instance. This is used to define
-     * new types and tasks
-     */
-    private AntLibFactory factory;
-
-    /** Collection of Ant1 type definitions */
-    private Hashtable dataClassDefinitions = new Hashtable();
-    /** Collection of Ant1 task definitions */
-    private Hashtable taskClassDefinitions = new Hashtable();
-
-    /** The project description */
-    private String description;
-
-    /** The global filters of this project */
-    private FilterSet globalFilterSet = new FilterSet();
-
-    /** The AntContext that is used to access core services */
-    private AntContext context;
-
-    /** The core's FileService instance */
-    private FileService fileService;
-
-    /** The core's DataService instance */
-    private DataService dataService;
-
-    /** Th ecore's execution service */
-    private ExecService execService;
-
-    /** The core's Component Service instance */
-    private ComponentService componentService;
-
-    /** Ant1 FileUtils instance for manipulating files */
-    private FileUtils fileUtils;
-    /** The collection of global filters */
-    private FilterSetCollection globalFilters
-         = new FilterSetCollection(globalFilterSet);
-
-    /** This project's listeners */
-    private Vector listeners = new Vector();
-
-    /** the target's we have seen */
-    private Stack targetStack = new Stack();
-
-    static {
-
-        // Determine the Java version by looking at available classes
-        // java.lang.StrictMath was introduced in JDK 1.3
-        // java.lang.ThreadLocal was introduced in JDK 1.2
-        // java.lang.Void was introduced in JDK 1.1
-        // Count up version until a NoClassDefFoundError ends the try
-
-        try {
-            javaVersion = JAVA_1_0;
-            Class.forName("java.lang.Void");
-            javaVersion = JAVA_1_1;
-            Class.forName("java.lang.ThreadLocal");
-            javaVersion = JAVA_1_2;
-            Class.forName("java.lang.StrictMath");
-            javaVersion = JAVA_1_3;
-            Class.forName("java.lang.CharSequence");
-            javaVersion = JAVA_1_4;
-        } catch (ClassNotFoundException cnfe) {
-            // swallow as we've hit the max class version that
-            // we have
-        }
-    }
-
-    /**
-     * Create the project
-     *
-     * @param factory the factory object creating this project
-     */
-    public Project(AntLibFactory factory) {
-        this.factory = factory;
-        fileUtils = FileUtils.newFileUtils();
-    }
-
-    /**
-     * The old constructor fopr Project instances - not used now.
-     *
-     * @deprecated
-     */
-    public Project() {
-        throw new BuildException("Projects can not be constructed to "
-             + "invoke Ant");
-    }
-
-    /**
-     * static query of the java version
-     *
-     * @return a string indicating the Java version
-     */
-    public static String getJavaVersion() {
-        return javaVersion;
-    }
-
-    /**
-     * returns the boolean equivalent of a string, which is considered true if
-     * either "on", "true", or "yes" is found, ignoring case.
-     *
-     * @param s the string value to be interpreted at a boolean
-     * @return the value of s as a boolean
-     */
-    public static boolean toBoolean(String s) {
-        return PropertyUtils.toBoolean(s);
-    }
-
-    /**
-     * Translate a path into its native (platform specific) format. <p>
-     *
-     * This method uses the PathTokenizer class to separate the input path
-     * into its components. This handles DOS style paths in a relatively
-     * sensible way. The file separators are then converted to their platform
-     * specific versions.
-     *
-     * @param toProcess the path to be converted
-     * @return the native version of to_process or an empty string if
-     *      to_process is null or empty
-     */
-    public static String translatePath(String toProcess) {
-        if (toProcess == null || toProcess.length() == 0) {
-            return "";
-        }
-
-        StringBuffer path = new StringBuffer(toProcess.length() + 50);
-        PathTokenizer tokenizer = new PathTokenizer(toProcess);
-        while (tokenizer.hasMoreTokens()) {
-            String pathComponent = tokenizer.nextToken();
-            pathComponent = pathComponent.replace('/', File.separatorChar);
-            pathComponent = pathComponent.replace('\\', File.separatorChar);
-            if (path.length() != 0) {
-                path.append(File.pathSeparatorChar);
-            }
-            path.append(pathComponent);
-        }
-
-        return path.toString();
-    }
-
-    /**
-     * The old initialisation method for Projects. Not used now
-     *
-     * @exception BuildException if the default task list cannot be loaded
-     * @deprecated
-     */
-    public void init() throws BuildException {
-        throw new BuildException("Projects can not be initialized in this "
-             + "manner any longer.");
-    }
-
-
-    /**
-     * Old method used to execute targets
-     *
-     * @param targetNames A vector of target name strings to execute. Must not
-     *      be <code>null</code>.
-     * @exception BuildException always
-     * @deprecated
-     */
-    public void executeTargets(Vector targetNames) throws BuildException {
-        throw new BuildException("Targets within the project cannot be "
-             + "executed with this method.");
-    }
-
-    /**
-     * set the project description
-     *
-     * @param description text
-     */
-    public void setDescription(String description) {
-        this.description = description;
-    }
-
-    /**
-     * Set a project property
-     *
-     * @param name the property name
-     * @param value the property value
-     */
-    public void setProperty(String name, String value) {
-        try {
-            dataService.setMutableDataValue(name, value);
-        } catch (ExecutionException e) {
-            throw new BuildException(e);
-        }
-    }
-
-    /**
-     * Set a property which must be a new value
-     *
-     * @param name the property name
-     * @param value the property value
-     */
-    public void setNewProperty(String name, String value) {
-        try {
-            dataService.setDataValue(name, value);
-        } catch (ExecutionException e) {
-            throw new BuildException(e);
-        }
-    }
-
-    /**
-     * Sets a userProperty of the Project. Note under Ant2, there is no
-     * distinction between user and system properties
-     *
-     * @param name the property name
-     * @param value the property value
-     */
-    public void setUserProperty(String name, String value) {
-        try {
-            dataService.setMutableDataValue(name, value);
-        } catch (ExecutionException e) {
-            throw new BuildException(e);
-        }
-    }
-
-    /**
-     * Returns a description of the type of the given element, with
-     * special handling for instances of tasks and data types.
-     * <p>
-     * This is useful for logging purposes.
-     * 
-     * @param element The element to describe.
-     *                Must not be <code>null</code>.
-     * 
-     * @return a description of the element type
-     *
-     * @since 1.95, Ant 1.5
-     */
-    public String getElementName(Object element) {
-        Hashtable elements = taskClassDefinitions;
-        Class elementClass = element.getClass();
-        String typeName = "task";
-        if (!elements.contains(elementClass)) {
-            elements = dataClassDefinitions;
-            typeName = "data type";
-            if (!elements.contains(elementClass)) {
-                elements = null;
-            }
-        }
-
-        if (elements != null) {
-            Enumeration e = elements.keys();
-            while (e.hasMoreElements()) {
-                String name = (String) e.nextElement();
-                Class clazz = (Class) elements.get(name);
-                if (elementClass.equals(clazz)) {
-                    return "The <" + name + "> " + typeName;
-                }
-            }
-        }
-
-        return "Class " + elementClass.getName();
-    }
-
-    /**
-     * Gets the Antlib factory of the Project
-     *
-     * @return The project's associated factory object
-     */
-    public AntLibFactory getFactory() {
-        return factory;
-    }
-
-    /**
-     * get the target hashtable
-     *
-     * @return hashtable, the contents of which can be cast to Target
-     */
-    public Hashtable getTargets() {
-        return new Hashtable();// XXX can't get targets
-    }
-
-    /**
-     * Returns the current datatype definition hashtable. The returned
-     * hashtable is "live" and so should not be modified.
-     *
-     * @return a map of from datatype name to implementing class (String to
-     *      Class).
-     */
-    public Hashtable getDataTypeDefinitions() {
-        return dataClassDefinitions;
-    }
-
-    /**
-     * Returns the current task definition hashtable. The returned hashtable
-     * is "live" and so should not be modified.
-     *
-     * @return a map of from task name to implementing class (String to
-     *      Class).
-     */
-    public Hashtable getTaskDefinitions() {
-        return taskClassDefinitions;
-    }
-
-    /**
-     * Gets the buildListeners of the Project
-     *
-     * @return A Vector of BuildListener instances
-     */
-    public Vector getBuildListeners() {
-        return listeners;
-    }
-
-    /**
-     * Gets the AntContext of the Project
-     *
-     * @return the AntContext
-     */
-    public AntContext getContext() {
-        return context;
-    }
-
-    /**
-     * get the project description
-     *
-     * @return description or null if no description has been set
-     */
-    public String getDescription() {
-        return description;
-    }
-
-    /**
-     * Get the Project's default Target, if any
-     *
-     * @return the project's default target or null if there is no default.
-     * @deprecated
-     */
-    public String getDefaultTarget() {
-        throw new BuildException("The default project target is no longer "
-             + "available through this method.");
-    }
-
-    /**
-     * Get a project property
-     *
-     * @param name the property name
-     * @return the value of the property
-     */
-    public String getProperty(String name) {
-        try {
-            Object value = dataService.getDataValue(name);
-            return value == null ? null : value.toString();
-        } catch (ExecutionException e) {
-            throw new BuildException(e);
-        }
-    }
-
-    /**
-     * Get a project property. Ant2 does not distinguish between User and
-     * system proerties
-     *
-     * @param name the property name
-     * @return the value of the property
-     */
-    public String getUserProperty(String name) {
-        try {
-            return dataService.getDataValue(name).toString();
-        } catch (ExecutionException e) {
-            throw new BuildException(e);
-        }
-    }
-
-    /**
-     * Get a reference to a project property. Note that in Ant2, properties
-     * and references occupy the same namespace.
-     *
-     * @param refId the reference Id
-     * @return the object specified by the reference id
-     */
-    public Object getReference(String refId) {
-        try {
-            return dataService.getDataValue(refId);
-        } catch (ExecutionException e) {
-            throw new BuildException(e);
-        }
-    }
-
-    /**
-     * Gets the globalFilterSet of the Project
-     *
-     * @return the globalFilterSet
-     */
-    public FilterSet getGlobalFilterSet() {
-        return globalFilterSet;
-    }
-
-    /**
-     * Gets the baseDir of the Project
-     *
-     * @return the baseDir
-     */
-    public File getBaseDir() {
-        return execService.getBaseDir();
-    }
-
-    /**
-     * Gets the coreLoader of the Project
-     *
-     * @return the coreLoader value
-     */
-    public ClassLoader getCoreLoader() {
-        return getClass().getClassLoader();
-    }
-
-    /**
-     * get a copy of the property hashtable
-     *
-     * @return the hashtable containing all properties, user included
-     */
-    public Hashtable getProperties() {
-        Map properties = dataService.getAllProperties();
-        Hashtable result = new Hashtable();
-        for (Iterator i = properties.keySet().iterator(); i.hasNext();) {
-            String name = (String) i.next();
-            Object value = properties.get(name);
-            if (value instanceof String) {
-                result.put(name, value);
-            }
-        }
-
-        return result;
-    }
-
-    /**
-     * get a copy of the property hashtable
-     *
-     * @return the hashtable containing all properties, user included
-     */
-    public Hashtable getUserProperties() {
-        return getProperties();
-    }
-
-    /**
-     * Get all references in the project
-     *
-     * @return the hashtable containing all references
-     */
-    public Hashtable getReferences() {
-        Map properties = dataService.getAllProperties();
-        Hashtable result = new Hashtable();
-        for (Iterator i = properties.keySet().iterator(); i.hasNext();) {
-            String name = (String) i.next();
-            Object value = properties.get(name);
-            if (!(value instanceof String)) {
-                result.put(name, value);
-            }
-        }
-
-        return result;
-    }
-
-    /**
-     * Register a task as the current task for a thread. If the task is null,
-     * the thread's entry is removed.
-     *
-     * @param thread the thread on which the task is registered.
-     * @param task the task to be registered.
-     * @since 1.102, Ant 1.5
-     */
-    public void registerThreadTask(Thread thread, Task task) {
-//        if (task != null) {
-//            threadTasks.put(thread, task);
-//        } else {
-//            threadTasks.remove(thread);
-//        }
-    }
-
-    /**
-     * Get the current task assopciated with a thread, if any
-     *
-     * @param thread the thread for which the task is required.
-     * @return the task which is currently registered for the given thread or
-     *      null if no task is registered.
-     */
-    public Task getThreadTask(Thread thread) {
-        return null;
-        // return (Task)threadTasks.get(thread);
-    }
-
-    /**
-     * build started event
-     *
-     * @param event build started event
-     */
-    public void buildStarted(org.apache.ant.common.event.BuildEvent event) {
-        fireBuildStarted();
-    }
-
-    /**
-     * build finished event
-     *
-     * @param event build finished event
-     */
-    public void buildFinished(org.apache.ant.common.event.BuildEvent event) {
-        fireBuildFinished(event.getCause());
-    }
-
-    /**
-     * target started event.
-     *
-     * @param event target started event.
-     */
-    public void targetStarted(org.apache.ant.common.event.BuildEvent event) {
-        Target newTarget = new Target(this);
-        org.apache.ant.common.model.Target realTarget =
-            (org.apache.ant.common.model.Target) event.getSource();
-        newTarget.setName(realTarget.getName());
-        targetStack.push(newTarget);
-        fireTargetStarted(newTarget);
-    }
-
-    /**
-     * target finished event
-     *
-     * @param event target finished event
-     */
-    public void targetFinished(org.apache.ant.common.event.BuildEvent event) {
-        org.apache.ant.common.model.Target realTarget =
-            (org.apache.ant.common.model.Target) event.getSource();
-        Target currentTarget = (Target) targetStack.pop();
-        fireTargetFinished(currentTarget, event.getCause());
-        currentTarget = null;
-    }
-
-    /**
-     * task started event
-     *
-     * @param event task started event
-     */
-    public void taskStarted(org.apache.ant.common.event.BuildEvent event) {
-    }
-
-    /**
-     * task finished event
-     *
-     * @param event task finished event
-     */
-    public void taskFinished(org.apache.ant.common.event.BuildEvent event) {
-    }
-
-    /**
-     * message logged event
-     *
-     * @param event message logged event
-     */
-    public void messageLogged(org.apache.ant.common.event.BuildEvent event) {
-    }
-
-    /**
-     * add a build listener to this project
-     *
-     * @param listener the listener to be added to the project
-     */
-    public void addBuildListener(BuildListener listener) {
-        listeners.addElement(listener);
-    }
-
-    /**
-     * remove a build listener from this project
-     *
-     * @param listener the listener to be removed
-     */
-    public void removeBuildListener(BuildListener listener) {
-        listeners.removeElement(listener);
-    }
-
-    /**
-     * Add a reference to an object. NOte that in Ant2 objects and properties
-     * occupy the same namespace.
-     *
-     * @param name the reference name
-     * @param value the object to be associated with the given name.
-     */
-    public void addReference(String name, Object value) {
-        try {
-            dataService.setDataValue(name, value);
-        } catch (ExecutionException e) {
-            throw new BuildException(e);
-        }
-    }
-
-
-    /**
-     * Convienence method to copy a file from a source to a destination. No
-     * filtering is performed.
-     *
-     * @param sourceFile the source file to be copied
-     * @param destFile the destination to which the file is copied
-     * @exception IOException if the file cannot be copied
-     * @deprecated
-     */
-    public void copyFile(String sourceFile, String destFile)
-         throws IOException {
-        fileUtils.copyFile(sourceFile, destFile);
-    }
-
-    /**
-     * Convienence method to copy a file from a source to a destination
-     * specifying if token filtering must be used.
-     *
-     * @param sourceFile the source file to be copied
-     * @param destFile the destination to which the file is copied
-     * @param filtering true if the copy should apply filters
-     * @exception IOException if the file cannot be copied
-     * @deprecated
-     */
-    public void copyFile(String sourceFile, String destFile, boolean filtering)
-         throws IOException {
-        fileUtils.copyFile(sourceFile, destFile,
-            filtering ? globalFilters : null);
-    }
-
-    /**
-     * Convienence method to copy a file from a source to a destination
-     * specifying if token filtering must be used and if source files may
-     * overwrite newer destination files.
-     *
-     * @param sourceFile the source file to be copied
-     * @param destFile the destination to which the file is copied
-     * @param filtering true if the copy should apply filters
-     * @param overwrite true if the destination can be overwritten
-     * @exception IOException if the file cannot be copied
-     * @deprecated
-     */
-    public void copyFile(String sourceFile, String destFile, boolean filtering,
-                         boolean overwrite) throws IOException {
-        fileUtils.copyFile(sourceFile, destFile,
-            filtering ? globalFilters : null, overwrite);
-    }
-
-    /**
-     * Convienence method to copy a file from a source to a destination
-     * specifying if token filtering must be used, if source files may
-     * overwrite newer destination files and the last modified time 
-     * of <code>destFile</code> file should be made equal to the last 
-     * modified time of <code>sourceFile</code>.
-     *
-     * @param sourceFile the source file to be copied
-     * @param destFile the destination to which the file is copied
-     * @param filtering true if the copy should apply filters
-     * @param overwrite true if the destination can be overwritten
-     * @param preserveLastModified true if the last modified time of the
-     *      source file is preserved
-     * @exception IOException if the file cannot be copied
-     * @deprecated
-     */
-    public void copyFile(String sourceFile, String destFile, boolean filtering,
-                         boolean overwrite, boolean preserveLastModified)
-         throws IOException {
-        fileUtils.copyFile(sourceFile, destFile,
-            filtering ? globalFilters : null,
-            overwrite, preserveLastModified);
-    }
-
-    /**
-     * Convienence method to copy a file from a source to a destination. No
-     * filtering is performed.
-     *
-     * @param sourceFile the source file to be copied
-     * @param destFile the destination to which the file is copied
-     * @exception IOException if the file cannot be copied
-     * @deprecated
-     */
-    public void copyFile(File sourceFile, File destFile) throws IOException {
-        fileUtils.copyFile(sourceFile, destFile);
-    }
-
-    /**
-     * Convienence method to copy a file from a source to a destination
-     * specifying if token filtering must be used.
-     *
-     * @param sourceFile the source file to be copied
-     * @param destFile the destination to which the file is copied
-     * @param filtering true if the copy should apply filters
-     * @exception IOException if the file cannot be copied
-     * @deprecated
-     */
-    public void copyFile(File sourceFile, File destFile, boolean filtering)
-         throws IOException {
-        fileUtils.copyFile(sourceFile, destFile,
-            filtering ? globalFilters : null);
-    }
-
-    /**
-     * Convienence method to copy a file from a source to a destination
-     * specifying if token filtering must be used and if source files may
-     * overwrite newer destination files.
-     *
-     * @param sourceFile the source file to be copied
-     * @param destFile the destination to which the file is copied
-     * @param filtering true if the copy should apply filters
-     * @param overwrite true if the destination can be overwritten
-     * @exception IOException if the file cannot be copied
-     * @deprecated
-     */
-    public void copyFile(File sourceFile, File destFile, boolean filtering,
-                         boolean overwrite) throws IOException {
-        fileUtils.copyFile(sourceFile, destFile,
-            filtering ? globalFilters : null, overwrite);
-    }
-
-    /**
-     * Convienence method to copy a file from a source to a destination
-     * specifying if token filtering must be used, if source files may
-     * overwrite newer destination files and the last modified time of 
-     * <code>destFile</code> file should be made equal to the last 
-     * modified time of <code>sourceFile</code>.
-     *
-     * @param sourceFile the source file to be copied
-     * @param destFile the destination to which the file is copied
-     * @param filtering true if the copy should apply filters
-     * @param overwrite true if the destination can be overwritten
-     * @param preserveLastModified true if the last modified time of the
-     *      source file is preserved
-     * @exception IOException if the file cannot be copied
-     * @deprecated
-     */
-    public void copyFile(File sourceFile, File destFile, boolean filtering,
-                         boolean overwrite, boolean preserveLastModified)
-         throws IOException {
-        fileUtils.copyFile(sourceFile, destFile,
-            filtering ? globalFilters : null, overwrite, preserveLastModified);
-    }
-
-    /**
-     * Initialise this porject
-     *
-     * @param context the context the project uses to access core services
-     * @exception ExecutionException if the project cannot be initialised.
-     */
-    public void init(AntContext context) throws ExecutionException {
-        this.context = context;
-        fileService = (FileService) context.getCoreService(FileService.class);
-        dataService = (DataService) context.getCoreService(DataService.class);
-        execService = (ExecService) context.getCoreService(ExecService.class);
-        componentService = (ComponentService) 
-            context.getCoreService(ComponentService.class);
-
-        InputService inputService
-             = (InputService) context.getCoreService(InputService.class);
-        setInputHandler(new Ant1InputHandler(inputService));
-
-        String defs = "/org/apache/tools/ant/taskdefs/defaults.properties";
-
-        try {
-            Properties props = new Properties();
-            InputStream in = this.getClass().getResourceAsStream(defs);
-            if (in == null) {
-                throw new BuildException("Can't load default task list");
-            }
-            props.load(in);
-            in.close();
-
-            Enumeration enum = props.propertyNames();
-            while (enum.hasMoreElements()) {
-                String key = (String) enum.nextElement();
-                String value = props.getProperty(key);
-                try {
-                    Class taskClass = Class.forName(value);
-                    taskClassDefinitions.put(key, taskClass);
-                } catch (NoClassDefFoundError ncdfe) {
-                    log("Could not load a dependent class ("
-                         + ncdfe.getMessage() + ") for task " + key, MSG_DEBUG);
-                } catch (ClassNotFoundException cnfe) {
-                    log("Could not load class (" + value
-                         + ") for task " + key, MSG_DEBUG);
-                }
-            }
-        } catch (IOException ioe) {
-            throw new BuildException("Can't load default task list");
-        }
-
-        String dataDefs = "/org/apache/tools/ant/types/defaults.properties";
-
-        try {
-            Properties props = new Properties();
-            InputStream in = this.getClass().getResourceAsStream(dataDefs);
-            if (in == null) {
-                throw new BuildException("Can't load default datatype list");
-            }
-            props.load(in);
-            in.close();
-
-            Enumeration enum = props.propertyNames();
-            while (enum.hasMoreElements()) {
-                String key = (String) enum.nextElement();
-                String value = props.getProperty(key);
-                try {
-                    Class dataClass = Class.forName(value);
-                    dataClassDefinitions.put(key, dataClass);
-                } catch (NoClassDefFoundError ncdfe) {
-                    log("Could not load a dependent class ("
-                         + ncdfe.getMessage() + ") for type " + key, MSG_DEBUG);
-                } catch (ClassNotFoundException cnfe) {
-                    log("Could not load class (" + value
-                         + ") for type " + key, MSG_DEBUG);
-                }
-            }
-        } catch (IOException ioe) {
-            throw new BuildException("Can't load default datatype list");
-        }
-    }
-
-    /**
-     * Output a message to the log with the default log level of MSG_INFO
-     *
-     * @param msg text to log
-     */
-
-    public void log(String msg) {
-        log(msg, MSG_INFO);
-    }
-
-    /**
-     * Output a message to the log with the given log level and an event scope
-     * of project
-     *
-     * @param msg text to log
-     * @param msgLevel level to log at
-     */
-    public void log(String msg, int msgLevel) {
-        context.log(msg, msgLevel);
-    }
-
-    /**
-     * Retrieves the current input handler.
-     *
-     * @return the Project's current input handler.
-     */
-    public InputHandler getInputHandler() {
-        return inputHandler;
-    }
-
-    /**
-     * Sets the input handler
-     *
-     * @param handler the new input handler to use.
-     */
-    public void setInputHandler(InputHandler handler) {
-        inputHandler = handler;
-    }
-
-    /**
-     * Output a message to the log with the given log level and an event scope
-     * of a task
-     *
-     * @param task task to use in the log
-     * @param msg text to log
-     * @param msgLevel level to log at
-     */
-    public void log(Task task, String msg, int msgLevel) {
-        context.log(msg, msgLevel);
-    }
-
-    /**
-     * Resolve a file relative to the project's basedir
-     *
-     * @param fileName the file name
-     * @return the file as a File resolved relative to the project's basedir
-     */
-    public File resolveFile(String fileName) {
-        try {
-            return fileService.resolveFile(fileName);
-        } catch (ExecutionException e) {
-            throw new BuildException(e);
-        }
-    }
-
-    /**
-     * Replace property references (${} values) in the given string
-     *
-     * @param value the string in which property references are replaced
-     * @return the string with the properties replaced.
-     */
-    public String replaceProperties(String value) {
-        try {
-            return dataService.replacePropertyRefs(value);
-        } catch (ExecutionException e) {
-            throw new BuildException(e);
-        }
-    }
-
-    /**
-     * define a new task
-     *
-     * @param taskName the anme of the task in build files
-     * @param taskClass the class that implements the task
-     * @exception BuildException if the task cannot be defined
-     */
-    public void addTaskDefinition(String taskName, Class taskClass)
-         throws BuildException {
-        try {
-            componentService.taskdef(factory, taskClass.getClassLoader(),
-                taskName, taskClass.getName());
-            taskClassDefinitions.put(taskName, taskClass);
-        } catch (ExecutionException e) {
-            throw new BuildException(e);
-        }
-    }
-
-    /**
-     * Add a new type definition
-     *
-     * @param typeName the name of the type
-     * @param typeClass the class which implements the type
-     */
-    public void addDataTypeDefinition(String typeName, Class typeClass) {
-        try {
-            componentService.typedef(factory, typeClass.getClassLoader(),
-                typeName, typeClass.getName());
-            dataClassDefinitions.put(typeName, typeClass);
-        } catch (ExecutionException e) {
-            throw new BuildException(e);
-        }
-    }
-
-    /**
-     * Create a Task. This faced hard codes a few well known tasks at this
-     * time
-     *
-     * @param taskType the name of the task to be created.
-     * @return the created task instance
-     * @exception BuildException if there is a build problem
-     */
-    public Task createTask(String taskType) throws BuildException {
-        Task task = null;
-        Class taskClass = (Class) taskClassDefinitions.get(taskType);
-
-        if (taskClass == null) {
-            return null;
-        }
-
-        try {
-            Object taskObject = componentService.createComponent(factory,
-                context.getClassLoader(), taskClass, false, taskType);
-            if (taskObject instanceof Task) {
-                task = (Task) taskObject;
-            } else {
-                TaskAdapter adapter = new TaskAdapter();
-                adapter.setProxy(taskObject);
-                task = adapter;
-            }
-            task.setTaskType(taskType);
-            task.setTaskName(taskType);
-            return task;
-        } catch (Throwable e) {
-            throw new BuildException(e);
-        }
-    }
-
-    /**
-     * Creates a new instance of a data type.
-     *
-     * @param typeName The name of the data type to create an instance of.
-     *      Must not be <code>null</code>.
-     * @return an instance of the specified data type, or <code>null</code> if
-     *      the data type name is not recognised.
-     * @exception BuildException if the data type name is recognised but
-     *      instance creation fails.
-     */
-    public Object createDataType(String typeName) throws BuildException {
-        Class typeClass = (Class) dataClassDefinitions.get(typeName);
-
-        if (typeClass == null) {
-            return null;
-        }
-
-        try {
-            Object dataInstance = componentService.createComponent(factory,
-                context.getClassLoader(), typeClass, false, typeName);
-            return dataInstance;
-        } catch (Throwable e) {
-            throw new BuildException(e);
-        }
-    }
-
-    /** send build started event to the listeners */
-    protected void fireBuildStarted() {
-        BuildEvent event = new BuildEvent(this);
-        for (int i = 0; i < listeners.size(); i++) {
-            BuildListener listener = (BuildListener) listeners.elementAt(i);
-            listener.buildStarted(event);
-        }
-    }
-
-    /**
-     * send build finished event to the listeners
-     *
-     * @param exception exception which indicates failure if not null
-     */
-    protected void fireBuildFinished(Throwable exception) {
-        BuildEvent event = new BuildEvent(this);
-        event.setException(exception);
-        for (int i = 0; i < listeners.size(); i++) {
-            BuildListener listener = (BuildListener) listeners.elementAt(i);
-            listener.buildFinished(event);
-        }
-    }
-
-
-    /**
-     * send target started event to the listeners
-     *
-     * @param target the target which has started
-     */
-    protected void fireTargetStarted(Target target) {
-        BuildEvent event = new BuildEvent(target);
-        for (int i = 0; i < listeners.size(); i++) {
-            BuildListener listener = (BuildListener) listeners.elementAt(i);
-            listener.targetStarted(event);
-        }
-    }
-
-    /**
-     * send build finished event to the listeners
-     *
-     * @param exception exception which indicates failure if not null
-     * @param target the target which is just finished
-     */
-    protected void fireTargetFinished(Target target, Throwable exception) {
-        BuildEvent event = new BuildEvent(target);
-        event.setException(exception);
-        for (int i = 0; i < listeners.size(); i++) {
-            BuildListener listener = (BuildListener) listeners.elementAt(i);
-            listener.targetFinished(event);
-        }
-    }
-
-    /**
-     * fire a task started event
-     *
-     * @param task the task which has started
-     */
-    protected void fireTaskStarted(Task task) {
-        // register this as the current task on the current thread.
-        // threadTasks.put(Thread.currentThread(), task);
-        BuildEvent event = new BuildEvent(task);
-        for (int i = 0; i < listeners.size(); i++) {
-            BuildListener listener = (BuildListener) listeners.elementAt(i);
-            listener.taskStarted(event);
-        }
-    }
-
-    /**
-     * Fire a task finished event
-     *
-     * @param task the task which has finsihed
-     * @param exception the exception associated with the task
-     */
-    protected void fireTaskFinished(Task task, Throwable exception) {
-        // threadTasks.remove(Thread.currentThread());
-        //System.out.flush();
-        // System.err.flush();
-        BuildEvent event = new BuildEvent(task);
-        event.setException(exception);
-        for (int i = 0; i < listeners.size(); i++) {
-            BuildListener listener = (BuildListener) listeners.elementAt(i);
-            listener.taskFinished(event);
-        }
-    }
-
-    /**
-     * Fire a message event from the project
-     *
-     * @param project the project sending the event
-     * @param message the message
-     * @param priority the messsage priority
-     */
-    protected void fireMessageLogged(Project project, String message,
-                                     int priority) {
-        BuildEvent event = new BuildEvent(project);
-        fireMessageLoggedEvent(event, message, priority);
-    }
-
-    /**
-     * Fire a message event from the project
-     *
-     * @param message the message
-     * @param priority the messsage priority
-     * @param target the target sending the message
-     */
-    protected void fireMessageLogged(Target target, String message,
-                                     int priority) {
-        BuildEvent event = new BuildEvent(target);
-        fireMessageLoggedEvent(event, message, priority);
-    }
-
-    /**
-     * Fire a message event from the project
-     *
-     * @param message the message
-     * @param priority the messsage priority
-     * @param task the task sending the message
-     */
-    protected void fireMessageLogged(Task task, String message,
-                                     int priority) {
-        BuildEvent event = new BuildEvent(task);
-        fireMessageLoggedEvent(event, message, priority);
-    }
-
-    /**
-     * Fire a message event from the project
-     *
-     * @param message the message
-     * @param priority the messsage priority
-     * @param event the message event
-     */
-    private void fireMessageLoggedEvent(BuildEvent event, String message,
-                                        int priority) {
-        event.setMessage(message, priority);
-        for (int i = 0; i < listeners.size(); i++) {
-            BuildListener listener = (BuildListener) listeners.elementAt(i);
-            listener.messageLogged(event);
-        }
-    }
-
-    /**
-     * Get the name of the project.
-     *
-     * @return the project name
-     */
-    public String getName() {
-        return execService.getProjectName();
-    }
-}
-
diff --git a/proposal/mutant/src/java/antlibs/ant1compat/org/apache/tools/ant/ProjectComponent.java b/proposal/mutant/src/java/antlibs/ant1compat/org/apache/tools/ant/ProjectComponent.java
deleted file mode 100644
index 964c1e0..0000000
--- a/proposal/mutant/src/java/antlibs/ant1compat/org/apache/tools/ant/ProjectComponent.java
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant;
-
-import org.apache.ant.common.antlib.AntContext;
-import org.apache.ant.common.util.ExecutionException;
-
-/**
- * ProjectComponent facade
- *
- * @author Conor MacNeill
- * @created 31 January 2002
- */
-public abstract class ProjectComponent {
-    /** The project in which the project component operates */
-    protected Project project;
-    /** The core context for this component */
-    private AntContext context;
-    /** The type of the component bneing created */
-    private String componentType;
-
-    /**
-     * Sets the project of the ProjectComponent
-     *
-     * @param project the project object with which this component is
-     *      associated
-     */
-    public void setProject(Project project) {
-        this.project = project;
-    }
-
-    /**
-     * Gets the project of the ProjectComponent
-     *
-     * @return the project
-     */
-    public Project getProject() {
-        return project;
-    }
-
-    /**
-     * Gets the componentType of the ProjectComponent
-     *
-     * @return the componentType value
-     */
-    public String getComponentType() {
-        return componentType;
-    }
-
-
-    /**
-     * Get the context associated with this component
-     *
-     * @return the AntContext
-     */
-    public AntContext getAntContext() {
-        return context;
-    }
-
-    /**
-     * Initialise this component
-     *
-     * @param context the core context for this component
-     * @param componentType the component type of this component
-     * @exception ExecutionException if the component cannot be initialized
-     */
-    public void init(AntContext context, String componentType) 
-            throws ExecutionException {
-        this.context = context;
-        this.componentType = componentType;
-
-    }
-
-    /**
-     * Log a message as a build event
-     *
-     * @param message the message to be logged
-     * @param level the priority level of the message
-     */
-    public void log(String message, int level) {
-        if (context != null) {
-            context.log(message, level);
-        }
-    }
-
-    /**
-     * Log a message as a build event
-     *
-     * @param message the message to be logged
-     */
-    public void log(String message) {
-        log(message, Project.MSG_INFO);
-    }
-}
-
diff --git a/proposal/mutant/src/java/antlibs/ant1compat/org/apache/tools/ant/ProjectHelper.java b/proposal/mutant/src/java/antlibs/ant1compat/org/apache/tools/ant/ProjectHelper.java
deleted file mode 100644
index 739847a..0000000
--- a/proposal/mutant/src/java/antlibs/ant1compat/org/apache/tools/ant/ProjectHelper.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant;
-import java.util.Hashtable;
-import java.util.Vector;
-import java.io.File;
-import org.apache.ant.common.antlib.AntContext;
-import org.apache.ant.common.service.DataService;
-import org.apache.ant.common.util.AntException;
-import org.apache.ant.common.util.ExecutionException;
-import org.apache.ant.common.util.PropertyUtils;
-
-/**
- * Ant1 ProjectHelper facade
- *
- * @author Conor MacNeill
- * @created 31 January 2002
- */
-public class ProjectHelper {
-    /**
-     * This method will parse a string containing ${value} style property
-     * values into two lists. The first list is a collection of text
-     * fragments, while the other is a set of string property names null
-     * entries in the first list indicate a property reference from the
-     * second list.
-     *
-     * @param value the string to be parsed
-     * @param fragments the fragments parsed out of the string
-     * @param propertyRefs the property refs to be replaced
-     */
-    public static void parsePropertyString(String value, Vector fragments,
-                                           Vector propertyRefs) {
-        try {
-            PropertyUtils.parsePropertyString(value, fragments, propertyRefs);
-        } catch (AntException e) {
-            throw new BuildException(e);
-        }
-    }
-
-    /**
-     * Replace ${} style constructions in the given value with the string
-     * value of the corresponding data types.
-     *
-     * @param value the string to be scanned for property references.
-     * @param project the project object which contains the property values
-     * @return the string with the property references replaced with their
-     *      project values
-     * @exception BuildException if there is a problem replacing the
-     *      property values.
-     */
-    public static String replaceProperties(Project project, String value)
-         throws BuildException {
-        try {
-            AntContext context = project.getContext();
-            DataService dataService
-                 = (DataService) context.getCoreService(DataService.class);
-            return dataService.replacePropertyRefs(value);
-        } catch (ExecutionException e) {
-            throw new BuildException(e);
-        }
-    }
-
-    /**
-     * Replace ${} style constructions in the given value with the string
-     * value of the corresponding data types.
-     *
-     * @param value the string to be scanned for property references.
-     * @param project the project object
-     * @param keys the collection of property values to use
-     * @return the string with the property references replaced with their
-     *      project values
-     */
-    public static String replaceProperties(Project project, String value,
-                                           Hashtable keys) {
-        try {
-            AntContext context = project.getContext();
-            DataService dataService
-                 = (DataService) context.getCoreService(DataService.class);
-            return dataService.replacePropertyRefs(value, keys);
-        } catch (ExecutionException e) {
-            throw new BuildException(e);
-        }
-    }
-
-    /**
-     * Old method to build a project.
-     * 
-     * @param project The project to configure. Must not be <code>null</code>.
-     * @param buildFile An XML file giving the project's configuration.
-     *                  Must not be <code>null</code>.
-     * 
-     * @exception BuildException always
-     * @deprecated
-     */
-    public static void configureProject(Project project, File buildFile) 
-        throws BuildException {
-        throw new BuildException("Project are not built by ProjectHelper " 
-            + "any longer.");
-    }
-}
-
diff --git a/proposal/mutant/src/java/antlibs/ant1compat/org/apache/tools/ant/Target.java b/proposal/mutant/src/java/antlibs/ant1compat/org/apache/tools/ant/Target.java
deleted file mode 100644
index 533a329..0000000
--- a/proposal/mutant/src/java/antlibs/ant1compat/org/apache/tools/ant/Target.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant;
-
-/**
- * Ant1 Target facade.
- *
- * @author Conor MacNeill
- * @created 31 January 2002
- */
-public class Target {
-    /** The project to which this target belongs */
-    private Project project;
-
-    /** The name of this target */
-    private String name;
-
-    /**
-     * Construct a Target that is part of the project
-     *
-     * @param project the target's project
-     */
-    public Target(Project project) {
-        this.project = project;
-    }
-
-    /**
-     * set the name of the target
-     *
-     * @param name the new name value
-     */
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    /**
-     * get the project to which this target belongs
-     *
-     * @return the target's project.
-     */
-    public Project getProject() {
-        return project;
-    }
-
-    /**
-     * Gets the name of the Target
-     *
-     * @return the target's name
-     */
-    public String getName() {
-        return name;
-    }
-
-}
-
diff --git a/proposal/mutant/src/java/antlibs/ant1compat/org/apache/tools/ant/Task.java b/proposal/mutant/src/java/antlibs/ant1compat/org/apache/tools/ant/Task.java
deleted file mode 100644
index 1553684..0000000
--- a/proposal/mutant/src/java/antlibs/ant1compat/org/apache/tools/ant/Task.java
+++ /dev/null
@@ -1,295 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant;
-
-import org.apache.ant.common.antlib.AntContext;
-import org.apache.ant.common.service.ExecService;
-import org.apache.ant.common.util.ExecutionException;
-
-/**
- * Ant1 Task facade
- *
- * @author Conor MacNeill
- * @created 31 January 2002
- */
-public abstract class Task extends ProjectComponent
-     implements org.apache.ant.common.antlib.Task {
-    /** the name of this task */
-    protected String taskName;
-    /** The target with which this target is associated */
-    protected Target target = null;
-    /** The type of this target */
-    protected String taskType = null;
-    /** The description of this task */
-    protected String description = null;
-    /** The location within the build file of this project component */
-    protected Location location;
-
-    /**
-     * Called by the project to let the task do its work. This method may be 
-     * called more than once, if the task is invoked more than once. 
-     * For example, 
-     * if target1 and target2 both depend on target3, then running 
-     * "ant target1 target2" will run all tasks in target3 twice.
-     *
-     * @exception BuildException if something goes wrong with the build
-     */
-    public void execute() throws BuildException {}
-
-    /**
-     * Set the name to use in logging messages.
-     *
-     * @param name the name to use in logging messages.
-     */
-    public void setTaskName(String name) {
-        this.taskName = name;
-    }
-
-
-    /**
-     * Sets the target object of this task.
-     *
-     * @param target Target in whose scope this task belongs.
-     */
-    public void setOwningTarget(Target target) {
-        this.target = target;
-    }
-
-    /**
-     * Sets a description of the current action. It will be usefull in
-     * commenting what we are doing.
-     *
-     * @param desc the new description value
-     */
-    public void setDescription(String desc) {
-        description = desc;
-    }
-
-    /**
-     * Get the name to use in logging messages.
-     *
-     * @return the name to use in logging messages.
-     */
-    public String getTaskName() {
-        return taskName;
-    }
-
-
-    /**
-     * Get the Target to which this task belongs
-     *
-     * @return the task's target.
-     */
-    public Target getOwningTarget() {
-        return target;
-    }
-
-    /**
-     * Gets the description of the Task
-     *
-     * @return the task's description
-     */
-    public String getDescription() {
-        return description;
-    }
-
-    /**
-     * Gets the location of the ProjectComponent's associated model element
-     * in the build file
-     *
-     * @return the location of the associated model element
-     */
-    public Location getLocation() {
-        return location;
-    }
-
-
-    /**
-     * Add a nested task to this Ant1 task.
-     *
-     * @param task The task to be added
-     * @exception ExecutionException if the task cannot be added.
-     */
-    public void addNestedTask(org.apache.ant.common.antlib.Task task)
-         throws ExecutionException {
-
-        if (!(this instanceof TaskContainer)) {
-            throw new BuildException("Can't add tasks to this task");
-        }
-        // wrap the Ant2 task in a TaskAdapter
-        TaskContainer container = (TaskContainer) this;
-        if (task instanceof Task) {
-            container.addTask((Task) task);
-        } else {
-            TaskAdapter adapter = new TaskAdapter();
-            adapter.setProxy(task);
-            adapter.setProject(getProject());
-            adapter.init(task.getAntContext(), task.getComponentType());
-            container.addTask(adapter);
-        }
-    }
-
-    /**
-     * Initialise this component
-     *
-     * @param context the core context for this component
-     * @param componentType the component type of this component
-     * @exception ExecutionException if the component cannot be initialized
-     */
-    public void init(AntContext context, String componentType)
-         throws ExecutionException {
-        super.init(context, componentType);
-
-        taskType = componentType;
-        taskName = componentType;
-        
-        org.apache.ant.common.util.Location contextLocation
-             = context.getLocation();
-
-        if (contextLocation
-             == org.apache.ant.common.util.Location.UNKNOWN_LOCATION) {
-            location = Location.UNKNOWN_LOCATION;
-        } else {
-            location = new Location(contextLocation.getSource(),
-                contextLocation.getLineNumber(),
-                contextLocation.getColumnNumber());
-        }
-        init();
-    }
-
-
-    /** Initialise this task */
-    public void init() {
-    }
-
-    /** Validate this component */
-    public void validateComponent() {
-        // no default validation for Ant1 tasks
-    }
-
-    /** Execute this task sending the appropriate build events */
-    public final void perform() {
-        try {
-            AntContext context = getAntContext();
-            ExecService execService
-                 = (ExecService) context.getCoreService(ExecService.class);
-            execService.executeTask(this);
-        } catch (ExecutionException e) {
-            throw new BuildException(e);
-        }
-    }
-
-    /**
-     * Handle Output produced by the task. When a task prints to System.out
-     * the container may catch this and redirect the content back to the
-     * task by invoking this method. This method must NOT call System.out,
-     * directly or indirectly.
-     *
-     * @param line The line of content produce by the task
-     */
-    public void handleSystemOut(String line) {
-        handleOutput(line);
-    }
-
-    /**
-     * Handle error information produced by the task. When a task prints to
-     * System.err the container may catch this and redirect the content back
-     * to the task by invoking this method. This method must NOT call
-     * System.err, directly or indirectly.
-     *
-     * @param line The line of error info produce by the task
-     */
-    public void handleSystemErr(String line) {
-        // default behaviout is to log at WARN level
-        handleErrorOutput(line);
-    }
-
-    /**
-     * Handle output captured for this task
-     *
-     * @param line the captured output
-     */
-    protected void handleOutput(String line) {
-        log(line, Project.MSG_INFO);
-    }
-
-    /**
-     * Handle error output captured for this task
-     *
-     * @param line the captured error output
-     */
-    protected void handleErrorOutput(String line) {
-        log(line, Project.MSG_ERR);
-    }
-
-    /**
-     * Set the name with which the task has been invoked.
-     *
-     * @param type the name the task has been invoked as.
-     */
-    void setTaskType(String type) {
-        this.taskType = type;
-    }
-    
-    /**
-     * Sets the file location where this task was defined.
-     *
-     * @param location the new location value
-     */
-    public void setLocation(Location location) {
-        this.location = location;
-    }
-
-}
-
diff --git a/proposal/mutant/src/java/antlibs/ant1compat/org/apache/tools/ant/TaskContainer.java b/proposal/mutant/src/java/antlibs/ant1compat/org/apache/tools/ant/TaskContainer.java
deleted file mode 100644
index 89ed5b8..0000000
--- a/proposal/mutant/src/java/antlibs/ant1compat/org/apache/tools/ant/TaskContainer.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant;
-
-/**
- * TaskContainer facade
- *
- * @author Conor MacNeill
- * @created 31 January 2002
- */
-public interface TaskContainer
-     extends org.apache.ant.common.antlib.TaskContainer {
-    /**
-     * Add a task to this container
-     *
-     * @param task the task to be added
-     */
-    void addTask(Task task);
-}
-
diff --git a/proposal/mutant/src/java/antlibs/ant1compat/org/apache/tools/ant/input/InputRequest.java b/proposal/mutant/src/java/antlibs/ant1compat/org/apache/tools/ant/input/InputRequest.java
deleted file mode 100644
index a6df903..0000000
--- a/proposal/mutant/src/java/antlibs/ant1compat/org/apache/tools/ant/input/InputRequest.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.input;
-
-/**
- * Encapsulates an input request.
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- * @version $Revision$
- * @since Ant 1.5
- */
-public class InputRequest extends org.apache.ant.common.input.InputRequest {
-    /**
-     * @param prompt The prompt to show to the user.  Must not be null.
-     */
-    public InputRequest(String prompt) {
-        super(prompt);
-    }
-}
diff --git a/proposal/mutant/src/java/antlibs/ant1compat/org/apache/tools/ant/taskdefs/Ant.java b/proposal/mutant/src/java/antlibs/ant1compat/org/apache/tools/ant/taskdefs/Ant.java
deleted file mode 100644
index bd0481b..0000000
--- a/proposal/mutant/src/java/antlibs/ant1compat/org/apache/tools/ant/taskdefs/Ant.java
+++ /dev/null
@@ -1,217 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs;
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import org.apache.ant.antlib.system.AntBase;
-import org.apache.ant.common.antlib.AntContext;
-import org.apache.ant.common.antlib.AntLibFactory;
-import org.apache.ant.common.service.ComponentService;
-import org.apache.ant.common.util.ExecutionException;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Task;
-
-/**
- * Ant facade over system version of Ant
- *
- * @author Conor MacNeill
- * @created 31 January 2002
- */
-public class Ant extends Task {
-    /** The core Ant implementation to actually use */
-    private org.apache.ant.antlib.system.Ant realAnt = null;
-
-    /** The properties created by this task */
-    private List properties = new ArrayList();
-
-    /**
-     * If true, inherit all properties from parent Project If false, inherit
-     * only userProperties and those defined inside the ant call itself
-     *
-     * @param value true if the sub-build should receive all properties from
-     *      this build
-     */
-    public void setInheritAll(boolean value) {
-        realAnt.setInheritAll(value);
-    }
-
-    /**
-     * If true, inherit all references from parent Project If false, inherit
-     * only those defined inside the ant call itself
-     *
-     * @param value true if the subbuild should receive all references from
-     *      the current build.
-     */
-    public void setInheritRefs(boolean value) {
-        realAnt.setInheritRefs(value);
-    }
-
-    /**
-     * The directory which will be the base directory for the build
-     *
-     * @param d the base directory for the new build
-     */
-    public void setDir(File d) {
-        realAnt.setDir(d);
-    }
-
-    /**
-     * set the build file, it can be either absolute or relative. If it is
-     * absolute, <tt>dir</tt> will be ignored, if it is relative it will be
-     * resolved relative to <tt>dir</tt> .
-     *
-     * @param s the name of the ant file either absolute or relative to the
-     *      sub-build's basedir
-     */
-    public void setAntfile(String s) {
-        realAnt.setAntFile(s);
-    }
-
-    /**
-     * set the target to execute. If none is defined it will execute the
-     * default target of the build file
-     *
-     * @param s the target to eb executed in the sub-build
-     */
-    public void setTarget(String s) {
-        realAnt.setTarget(s);
-    }
-
-    /**
-     * Set the output file in which Ant stores output
-     *
-     * @param s name of the file to store output.
-     */
-    public void setOutput(String s) {
-        // realAnt.setOutput(s);
-    }
-
-    /** Initialize the task */
-    public void init() {
-        AntContext context = getAntContext();
-        try {
-            ComponentService componentService = getComponentService();
-            AntLibFactory factory = getProject().getFactory();
-            realAnt = (org.apache.ant.antlib.system.Ant)
-                componentService.createComponent(factory,
-                context.getClassLoader(),
-                org.apache.ant.antlib.system.Ant.class, false, "antcall");
-        } catch (ExecutionException e) {
-            throw new BuildException(e);
-        }
-    }
-
-
-    /**
-     * Do the execution.
-     *
-     * @exception BuildException if the execution of the sub-build has a 
-     *            problem
-     */
-    public void execute() throws BuildException {
-        for (Iterator i = properties.iterator(); i.hasNext();) {
-            Property property = (Property) i.next();
-            AntBase.Property newProperty = new AntBase.Property();
-            newProperty.setName(property.getName());
-            newProperty.setValue(property.getValue());
-            realAnt.addProperty(newProperty);
-        }
-        try {
-            realAnt.execute();
-        } catch (ExecutionException e) {
-            throw new BuildException(e);
-        }
-    }
-
-    /**
-     * Create a nested property element.
-     *
-     * @return the Property object to be configured.
-     */
-    public Property createProperty() {
-        Property property = new Property();
-        properties.add(property);
-        return property;
-    }
-
-    /**
-     * create a reference element that identifies a data type that should be
-     * carried over to the new project.
-     *
-     * @param r the reference to be added to the call
-     */
-    public void addReference(AntBase.Reference r) {
-        try {
-            realAnt.addReference(r);
-        } catch (ExecutionException e) {
-            throw new BuildException(e);
-        }
-    }
-
-    /**
-     * Gets the componentService
-     *
-     * @return the componentService instance provided by the core
-     * @exception ExecutionException if the service is not available.
-     */
-    private ComponentService getComponentService() throws ExecutionException {
-        AntContext context = getAntContext();
-        return (ComponentService) 
-            context.getCoreService(ComponentService.class);
-    }
-
-}
-
diff --git a/proposal/mutant/src/java/antlibs/ant1compat/org/apache/tools/ant/taskdefs/CallTarget.java b/proposal/mutant/src/java/antlibs/ant1compat/org/apache/tools/ant/taskdefs/CallTarget.java
deleted file mode 100644
index bfc3f42..0000000
--- a/proposal/mutant/src/java/antlibs/ant1compat/org/apache/tools/ant/taskdefs/CallTarget.java
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import org.apache.ant.antlib.system.AntBase;
-import org.apache.ant.antlib.system.AntCall;
-import org.apache.ant.common.antlib.AntContext;
-import org.apache.ant.common.antlib.AntLibFactory;
-import org.apache.ant.common.service.ComponentService;
-import org.apache.ant.common.util.ExecutionException;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Task;
-
-/**
- * CallTarget facade over AntCall
- *
- * @author Conor MacNeill
- * @created 31 January 2002
- */
-public class CallTarget extends Task {
-    /** The core AntCall implementation to actually use */
-    private AntCall antCall = null;
-
-    /** The properties created by this task */
-    private List properties = new ArrayList();
-
-    /**
-     * If true, inherit all properties from parent Project If false, inherit
-     * only userProperties and those defined inside the antcall call itself
-     *
-     * @param inherit the new inheritAll value
-     */
-    public void setInheritAll(boolean inherit) {
-        antCall.setInheritAll(inherit);
-    }
-
-    /**
-     * Sets the target of the CallTarget
-     *
-     * @param target the new target value
-     */
-    public void setTarget(String target) {
-        antCall.setTarget(target);
-    }
-
-    /** Initialize the task */
-    public void init() {
-        AntContext context = getAntContext();
-        try {
-            ComponentService componentService = getComponentService();
-            AntLibFactory factory = getProject().getFactory();
-            antCall = (AntCall) componentService.createComponent(factory,
-                context.getClassLoader(), AntCall.class, false, "antcall");
-        } catch (ExecutionException e) {
-            throw new BuildException(e);
-        }
-    }
-
-    /** execute the call */
-    public void execute() {
-        for (Iterator i = properties.iterator(); i.hasNext();) {
-            Property property = (Property) i.next();
-            AntBase.Property newProperty = new AntBase.Property();
-            newProperty.setName(property.getName());
-            newProperty.setValue(property.getValue());
-            antCall.addProperty(newProperty);
-        }
-        try {
-            antCall.execute();
-        } catch (ExecutionException e) {
-            throw new BuildException(e);
-        }
-    }
-
-    /**
-     * Create a nested param element.
-     *
-     * @return the Property object to be configured.
-     */
-    public Property createParam() {
-        Property property = new Property();
-        properties.add(property);
-        return property;
-    }
-
-    /**
-     * create a reference element that identifies a data type that should be
-     * carried over to the new project.
-     *
-     * @param r the reference to be added to the call
-     */
-    public void addReference(AntBase.Reference r) {
-        try {
-            antCall.addReference(r);
-        } catch (ExecutionException e) {
-            throw new BuildException(e);
-        }
-    }
-
-    /**
-     * Gets the componentService
-     *
-     * @return the componentService instance provided by the core
-     * @exception ExecutionException if the service is not available.
-     */
-    private ComponentService getComponentService() throws ExecutionException {
-        AntContext context = getAntContext();
-        return 
-            (ComponentService) context.getCoreService(ComponentService.class);
-    }
-}
-
diff --git a/proposal/mutant/src/java/antlibs/ant1compat/org/apache/tools/ant/types/DataType.java b/proposal/mutant/src/java/antlibs/ant1compat/org/apache/tools/ant/types/DataType.java
deleted file mode 100644
index 297eaea..0000000
--- a/proposal/mutant/src/java/antlibs/ant1compat/org/apache/tools/ant/types/DataType.java
+++ /dev/null
@@ -1,240 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.types;
-import java.util.Stack;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-
-import org.apache.tools.ant.ProjectComponent;
-
-/**
- * Ant1 DataType facade
- *
- * @author Conor MacNeill
- * @created 31 January 2002
- */
-public abstract class DataType extends ProjectComponent
-     implements org.apache.ant.common.antlib.DataType {
-
-    /** The description the user has set. */
-    protected String description = null;
-    /** Value to the refid attribute. */
-    protected Reference ref = null;
-    /**
-     * Are we sure we don't hold circular references? <p>
-     *
-     * Subclasses are responsible for setting this value to false if we'd
-     * need to investigate this condition (usually because a child element
-     * has been added that is a subclass of DataType).</p>
-     */
-    protected boolean checked = true;
-
-    /**
-     * Sets a description of the current data type. It will be useful in
-     * commenting what we are doing.
-     *
-     * @param desc the new description value
-     */
-    public void setDescription(String desc) {
-        description = desc;
-    }
-
-    /**
-     * Set the value of the refid attribute. <p>
-     *
-     * Subclasses may need to check whether any other attributes have been
-     * set as well or child elements have been created and thus override
-     * this method. if they do the must call <code>super.setRefid</code>.
-     * </p>
-     *
-     * @param ref the new refid value
-     */
-    public void setRefid(Reference ref) {
-        this.ref = ref;
-        checked = false;
-    }
-
-    /**
-     * Sets the id of the DataType
-     *
-     * @param id the name under which the data type is to be referenced
-     */
-    public void setId(String id) {
-        project.addReference(id, this);
-    }
-
-    /**
-     * Return the description for the current data type.
-     *
-     * @return the data type's description
-     */
-    public String getDescription() {
-        return description;
-    }
-
-    /**
-     * Has the refid attribute of this element been set?
-     *
-     * @return true if this data type is a refeence to another instance
-     */
-    public boolean isReference() {
-        return ref != null;
-    }
-
-    /** Validate this component */
-    public void validateComponent() {
-        // no default validation for Ant1 types
-    }
-
-
-    /**
-     * Performs the check for circular references and returns the referenced
-     * object.
-     *
-     * @param requiredClass the class which the object being referenced must
-     *      support
-     * @param dataTypeName the name of the data type
-     * @return the refenced object
-     */
-    protected Object getCheckedRef(Class requiredClass, String dataTypeName) {
-        if (!checked) {
-            Stack stk = new Stack();
-            stk.push(this);
-            dieOnCircularReference(stk, getProject());
-        }
-
-        Object o = ref.getReferencedObject(getProject());
-        if (!(requiredClass.isAssignableFrom(o.getClass()))) {
-            String msg = ref.getRefId() + " doesn\'t denote a " + dataTypeName;
-            throw new BuildException(msg);
-        } else {
-            return o;
-        }
-    }
-
-    /**
-     * Check to see whether any DataType we hold references to is included
-     * in the Stack (which holds all DataType instances that directly or
-     * indirectly reference this instance, including this instance itself).
-     * <p>
-     *
-     * If one is included, throw a BuildException created by {@link
-     * #circularReference circularReference}.</p> <p>
-     *
-     * This implementation is appropriate only for a DataType that cannot
-     * hold other DataTypes as children.</p> <p>
-     *
-     * The general contract of this method is that it shouldn't do anything
-     * if {@link #checked <code>checked</code>} is true and set it to true
-     * on exit.</p>
-     *
-     * @param stk stack used to check for a circular reference
-     * @param p the project
-     * @exception BuildException if this data type is a reference to an
-     *      instance which depends on this data type
-     */
-    protected void dieOnCircularReference(Stack stk, Project p)
-         throws BuildException {
-
-        if (checked || !isReference()) {
-            return;
-        }
-        Object o = ref.getReferencedObject(p);
-
-        if (o instanceof DataType) {
-            if (stk.contains(o)) {
-                throw circularReference();
-            } else {
-                stk.push(o);
-                ((DataType) o).dieOnCircularReference(stk, p);
-                stk.pop();
-            }
-        }
-        checked = true;
-    }
-
-    /**
-     * Creates an exception that indicates that refid has to be the only
-     * attribute if it is set.
-     *
-     * @return an appropriate excpetion instance
-     */
-    protected BuildException tooManyAttributes() {
-        return new BuildException("You must not specify more than "
-             + "one attribute when using refid");
-    }
-
-    /**
-     * Creates an exception that indicates that this XML element must not
-     * have child elements if the refid attribute is set.
-     *
-     * @return an appropriate excpetion instance
-     */
-    protected BuildException noChildrenAllowed() {
-        return new BuildException("You must not specify nested "
-             + "elements when using refid");
-    }
-
-    /**
-     * Creates an exception that indicates the user has generated a loop of
-     * data types referencing each other.
-     *
-     * @return an appropriate excpetion instance
-     */
-    protected BuildException circularReference() {
-        return new BuildException("This data type contains a "
-             + "circular reference.");
-    }
-}
-
diff --git a/proposal/mutant/src/java/antlibs/script/antlib.xml b/proposal/mutant/src/java/antlibs/script/antlib.xml
deleted file mode 100644
index c573eba..0000000
--- a/proposal/mutant/src/java/antlibs/script/antlib.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<antlib libid="antopt.script" 
-        home="http://jakarta.apache.org/ant">
-
-  <factory classname="org.apache.ant.antlib.script.ScriptFactory"/>
-  <taskdef name="scriptdef" classname="org.apache.ant.antlib.script.ScriptDef"/>
-</antlib>
diff --git a/proposal/mutant/src/java/antlibs/script/org/apache/ant/antlib/script/ScriptBase.java b/proposal/mutant/src/java/antlibs/script/org/apache/ant/antlib/script/ScriptBase.java
deleted file mode 100644
index 957abb9..0000000
--- a/proposal/mutant/src/java/antlibs/script/org/apache/ant/antlib/script/ScriptBase.java
+++ /dev/null
@@ -1,192 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.antlib.script;
-import com.ibm.bsf.BSFEngine;
-import com.ibm.bsf.BSFException;
-import com.ibm.bsf.BSFManager;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import org.apache.ant.common.antlib.AbstractTask;
-import org.apache.ant.common.antlib.DeferredTask;
-import org.apache.ant.common.util.ExecutionException;
-import org.apache.ant.common.antlib.AntContext;
-
-/**
- * Task to import a component or components from a library
- *
- * @author Conor MacNeill
- * @created 27 January 2002
- */
-public class ScriptBase extends AbstractTask implements DeferredTask {
-    /** The script factory instance to be used by this script */
-    private ScriptFactory factory;
-    /** the name to which this script has been defined */
-    private String scriptName;
-
-    /** the attribute values set by the core */
-    private Map attributes = new HashMap();
-
-    /** Any embedded set by the core */
-    private String text = "";
-
-    /** A list of the nested element names which have been configured */
-    private List nestedElementNames = new ArrayList();
-    /** A list of the nested elements objects which have been configured */
-    private List nestedElements = new ArrayList();
-
-    /**
-     * Set the given attribute
-     *
-     * @param name the name of the attribute
-     * @param attributeValue the new attribute value
-     */
-    public void setAttribute(String name, String attributeValue) {
-        attributes.put(name, attributeValue);
-    }
-
-    /**
-     * Add a nested element
-     *
-     * @param nestedElementName the nested element's name
-     * @param value the object being added
-     */
-    public void addElement(String nestedElementName, Object value) {
-        nestedElementNames.add(nestedElementName);
-        nestedElements.add(value);
-    }
-
-
-    /**
-     * Execute the script
-     *
-     * @exception ExecutionException if tghe script execution fails
-     */
-    public void execute() throws ExecutionException {
-        String language = factory.getScriptLanguage(scriptName);
-        String script = factory.getScript(scriptName);
-
-        try {
-            BSFManager manager = new BSFManager();
-            manager.declareBean("self", this, getClass());
-            manager.declareBean("context", getAntContext(), AntContext.class);
-            
-            // execute the script
-            BSFEngine engine = manager.loadScriptingEngine(language);
-            
-            engine.exec(scriptName, 0, 0, script);
-            for (Iterator i = attributes.keySet().iterator(); i.hasNext();) {
-                String attributeName = (String) i.next();
-                String value = (String) attributes.get(attributeName);
-                StringBuffer setter = new StringBuffer(attributeName);
-                setter.setCharAt(0, Character.toUpperCase(setter.charAt(0)));
-                engine.call(null, "set" + setter, new Object[]{value});
-            }
-            
-            Iterator i = nestedElementNames.iterator();
-            Iterator j = nestedElements.iterator();
-            while (i.hasNext()) {
-                String nestedName = (String) i.next();
-                Object nestedElement = j.next();
-                StringBuffer adder = new StringBuffer(nestedName);
-                adder.setCharAt(0, Character.toUpperCase(adder.charAt(0)));
-                engine.call(null, "add" + adder, new Object[]{nestedElement});
-            }
-            
-            engine.call(null, "execute", new Object[]{});
-        } catch (BSFException e) {
-            Throwable t = e;
-            Throwable te = e.getTargetException();
-            if (te != null) {
-                if (te instanceof ExecutionException) {
-                    throw (ExecutionException) te;
-                } else {
-                    t = te;
-                }
-            }
-            throw new ExecutionException(t);
-        }
-    }
-
-    /**
-     * Defines the script.
-     *
-     * @param text Sets the value for the script variable.
-     */
-    public void addText(String text) {
-        this.text += text;
-    }
-
-    /**
-     * Sets the factory of the ScriptBase
-     *
-     * @param factory the script factory this script instance will use
-     */
-    protected void setFactory(ScriptFactory factory) {
-        this.factory = factory;
-    }
-
-    /**
-     * set the name of the script
-     *
-     * @param scriptName the script's defined name
-     */
-    protected void setScriptName(String scriptName) {
-        this.scriptName = scriptName;
-    }
-
-}
-
diff --git a/proposal/mutant/src/java/antlibs/script/org/apache/ant/antlib/script/ScriptDef.java b/proposal/mutant/src/java/antlibs/script/org/apache/ant/antlib/script/ScriptDef.java
deleted file mode 100644
index d41ae98..0000000
--- a/proposal/mutant/src/java/antlibs/script/org/apache/ant/antlib/script/ScriptDef.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.antlib.script;
-
-import org.apache.ant.common.antlib.AbstractTask;
-import org.apache.ant.common.util.ExecutionException;
-
-/**
- * Define a task using a script
- *
- * @author Conor MacNeill
- * @created 11 February 2002
- */
-public class ScriptDef extends AbstractTask {
-    /** The script factor to use */
-    private ScriptFactory factory;
-
-    /** the name by which this script will be activated */
-    private String name;
-
-    /** the scripting language used by the script */
-    private String language;
-
-    /** the script itself */
-    private String script = "";
-
-    /**
-     * set the name under which this script will be activated in a build
-     * file
-     *
-     * @param name the name of the script
-     */
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    /**
-     * Set the scripting language used by this script
-     *
-     * @param language the scripting language used by this script.
-     */
-    public void setLanguage(String language) {
-        this.language = language;
-    }
-
-    /**
-     * Define the script. The script itself is stored in the factory where
-     * it is retried by the ScriptBase instance
-     *
-     * @exception ExecutionException if the script cannot be defined
-     */
-    public void execute() throws ExecutionException {
-        // tell the factory about this script, under this name.
-        factory.defineScript(name, language, script);
-    }
-
-    /**
-     * Defines the script.
-     *
-     * @param text Sets the value for the script variable.
-     */
-    public void addText(String text) {
-        this.script += text;
-    }
-
-    /**
-     * Set the script factory that will be used to store the script for
-     * later execution
-     *
-     * @param factory the script factory used to store script information.
-     */
-    protected void setFactory(ScriptFactory factory) {
-        this.factory = factory;
-    }
-
-}
-
diff --git a/proposal/mutant/src/java/antlibs/script/org/apache/ant/antlib/script/ScriptFactory.java b/proposal/mutant/src/java/antlibs/script/org/apache/ant/antlib/script/ScriptFactory.java
deleted file mode 100644
index af62a21..0000000
--- a/proposal/mutant/src/java/antlibs/script/org/apache/ant/antlib/script/ScriptFactory.java
+++ /dev/null
@@ -1,206 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.antlib.script;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.ant.common.antlib.AntContext;
-import org.apache.ant.common.antlib.StandardLibFactory;
-import org.apache.ant.common.service.ComponentService;
-import org.apache.ant.common.util.ExecutionException;
-
-/**
- * The ScriptFactory class is a factory for the Scripting tasks. It stores
- * the scripts as they are defined
- *
- * @author Conor MacNeill
- * @created 11 February 2002
- */
-public class ScriptFactory extends StandardLibFactory {
-    /**
-     * An inner class used to record information about defined scripts.
-     *
-     * @author Conor MacNeill
-     * @created 11 February 2002
-     */
-    private static class ScriptInfo {
-        /** the scripting langauge to use */
-        private String language;
-        /** the script itself */
-        private String script;
-
-        /**
-         * Constructor for the ScriptInfo object
-         *
-         * @param language the language the script is written in
-         * @param script the script
-         */
-        public ScriptInfo(String language, String script) {
-            this.language = language;
-            this.script = script;
-        }
-
-        /**
-         * Gets the language of the Script
-         *
-         * @return the language value
-         */
-        public String getLanguage() {
-            return language;
-        }
-
-        /**
-         * Gets the script.
-         *
-         * @return the script text
-         */
-        public String getScript() {
-            return script;
-        }
-    }
-
-    /** The core's Component Service instance */
-    private ComponentService componentService;
-
-    /** the scripts that have been defined */
-    private Map scripts = new HashMap();
-
-    /**
-     * Initialise the factory
-     *
-     * @param context the factory's context
-     * @exception ExecutionException if the factory cannot be initialized
-     */
-    public void init(AntContext context) throws ExecutionException {
-        super.init(context);
-        componentService = (ComponentService) 
-            context.getCoreService(ComponentService.class);
-        try {
-            Class.forName("com.ibm.bsf.BSFManager");
-        } catch (ClassNotFoundException e) {
-            throw new ExecutionException("The script Ant library requires "
-                 + "bsf.jar to be available");
-        } catch (NoClassDefFoundError e) {
-            throw new ExecutionException("The script Ant library requires "
-                 + "bsf.jar to be available. The class " + e.getMessage()
-                 + "appears to be missing");
-        }
-    }
-
-    /**
-     * Create an instance of the given component class
-     *
-     * @param componentClass the class for which an instance is required
-     * @param localName the name within the library undeer which the task is
-     *      defined
-     * @return an instance of the required class
-     * @exception InstantiationException if the class cannot be instantiated
-     * @exception IllegalAccessException if the instance cannot be accessed
-     * @exception ExecutionException if there is a problem creating the task
-     */
-    public Object createComponent(Class componentClass, String localName)
-         throws InstantiationException, IllegalAccessException,
-        ExecutionException {
-        Object component = super.createComponent(componentClass, localName);
-
-        if (component instanceof ScriptDef) {
-            ScriptDef scriptDef = (ScriptDef) component;
-            scriptDef.setFactory(this);
-        } else if (component instanceof ScriptBase) {
-            ScriptBase scriptBase = (ScriptBase) component;
-            scriptBase.setFactory(this);
-            scriptBase.setScriptName(localName);
-        }
-        return component;
-    }
-
-    /**
-     * Get the script language of a script
-     *
-     * @param scriptName the name the script is defined under
-     * @return the script language name
-     */
-    protected String getScriptLanguage(String scriptName) {
-        ScriptInfo scriptInfo = (ScriptInfo) scripts.get(scriptName);
-        return scriptInfo.getLanguage();
-    }
-
-    /**
-     * Get a script.
-     *
-     * @param scriptName the name the script is defined under
-     * @return the script text
-     */
-    protected String getScript(String scriptName) {
-        ScriptInfo scriptInfo = (ScriptInfo) scripts.get(scriptName);
-        return scriptInfo.getScript();
-    }
-
-    /**
-     * Define a script
-     *
-     * @param name the name the script is to be defined under
-     * @param language the language of the scripr
-     * @param script the script text
-     * @exception ExecutionException if the script cannot be defined
-     */
-    protected void defineScript(String name, String language, String script)
-         throws ExecutionException {
-        ScriptInfo scriptDefinition = new ScriptInfo(language, script);
-        scripts.put(name, scriptDefinition);
-        componentService.taskdef(this, ScriptBase.class.getClassLoader(),
-            name, ScriptBase.class.getName());
-    }
-}
-
diff --git a/proposal/mutant/src/java/antlibs/system/antlib.xml b/proposal/mutant/src/java/antlibs/system/antlib.xml
deleted file mode 100644
index 2142466..0000000
--- a/proposal/mutant/src/java/antlibs/system/antlib.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<antlib libid="ant.system" 
-        home="http://jakarta.apache.org/ant">
-
-  <taskdef name="libpath" classname="org.apache.ant.antlib.system.LibPath"/>
-  <taskdef name="loadlib" classname="org.apache.ant.antlib.system.LoadLib"/>
-  <taskdef name="import" classname="org.apache.ant.antlib.system.Import"/>
-
-  <taskdef name="ant" classname="org.apache.ant.antlib.system.Ant"/>
-  <taskdef name="antcall" classname="org.apache.ant.antlib.system.AntCall"/>
-
-  <taskdef name="ref" classname="org.apache.ant.antlib.system.Ref"/>
- 
-  <taskdef name="parallel" classname="org.apache.ant.antlib.system.Parallel"/>
-  <taskdef name="sequential" classname="org.apache.ant.antlib.system.Sequential"/>
-  
-  <converter classname="org.apache.ant.antlib.system.FileConverter"/>          
-  <converter classname="org.apache.ant.antlib.system.URLConverter"/>          
-  <converter classname="org.apache.ant.antlib.system.PrimitiveConverter"/>          
-</antlib>
diff --git a/proposal/mutant/src/java/antlibs/system/org/apache/ant/antlib/system/Ant.java b/proposal/mutant/src/java/antlibs/system/org/apache/ant/antlib/system/Ant.java
deleted file mode 100644
index 09ee90d..0000000
--- a/proposal/mutant/src/java/antlibs/system/org/apache/ant/antlib/system/Ant.java
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.antlib.system;
-import java.io.File;
-import org.apache.ant.common.model.Project;
-import org.apache.ant.common.service.ExecService;
-import org.apache.ant.common.service.MagicProperties;
-import org.apache.ant.common.util.ExecutionException;
-import org.apache.ant.common.util.FileUtils;
-
-/**
- * The Ant task - used to execute a different build file
- *
- * @author Conor MacNeill
- * @created 4 February 2002
- */
-public class Ant extends AntBase {
-    /** The ant file to be run */
-    private String antFileName;
-    /** the base directory to use for the run */
-    private File baseDir;
-    /** File to capture any output */
-    private File outputFile;
-
-
-    /**
-     * sets the file containing the XML representation model to build
-     *
-     * @param antFileName the file to build
-     */
-    public void setAntFile(String antFileName) {
-        this.antFileName = antFileName;
-    }
-
-
-    /**
-     * Set the base directory for the execution of the build
-     *
-     * @param baseDir the base directory for the build
-     */
-    public void setDir(File baseDir) {
-        this.baseDir = baseDir;
-    }
-
-
-    /**
-     * The output file for capturing the build output
-     *
-     * @param outputFile the output file for capturing the build output
-     */
-    public void setOutput(File outputFile) {
-        this.outputFile = outputFile;
-    }
-
-
-    /**
-     * Run the sub-build
-     *
-     * @exception ExecutionException if the build can't be run
-     */
-    public void execute() throws ExecutionException {
-        if (baseDir == null) {
-            baseDir = getExecService().getBaseDir();
-        }
-
-        File antFile = null;
-
-        if (antFileName == null) {
-            antFile = new File(baseDir, "build.ant");
-            if (!antFile.exists()) {
-                antFile = new File(baseDir, "build.xml");
-            }
-        } else {
-            antFile
-                 = FileUtils.newFileUtils().resolveFile(baseDir, antFileName);
-        }
-
-        setProperty(MagicProperties.BASEDIR, baseDir.getAbsolutePath());
-
-        ExecService execService = getExecService();
-        Project model = execService.parseXMLBuildFile(antFile);
-        Object key = execService.setupBuild(model, getProperties());
-
-        setSubBuildKey(key);
-        execService.runBuild(key, getTargets());
-    }
-}
-
diff --git a/proposal/mutant/src/java/antlibs/system/org/apache/ant/antlib/system/AntBase.java b/proposal/mutant/src/java/antlibs/system/org/apache/ant/antlib/system/AntBase.java
deleted file mode 100644
index 760bc35..0000000
--- a/proposal/mutant/src/java/antlibs/system/org/apache/ant/antlib/system/AntBase.java
+++ /dev/null
@@ -1,197 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.antlib.system;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import org.apache.ant.common.util.ExecutionException;
-
-/**
- * Common Base class for the Ant and AntCall tasks
- *
- * @author Conor MacNeill
- * @created 4 February 2002
- */
-public abstract class AntBase extends SubBuild {
-
-    /**
-     * flag which indicates if all current properties should be passed to the
-     * subbuild
-     */
-    private boolean inheritAll = true;
-
-    /**
-     * flag which indicates if all current references should be passed to the
-     * subbuild
-     */
-    private boolean inheritRefs = false;
-
-    /**
-     * The key to the subbuild with which the Ant task can manage the subbuild
-     */
-    private Object subbuildKey;
-
-    /** The name of the target to be evaluated in the sub-build */
-    private String targetName;
-
-    /**
-     * Get the properties to be used with the sub-build
-     *
-     * @return the properties the sub-build will start with
-     */
-    protected Map getProperties() {
-        if (!inheritAll) {
-            return super.getProperties();
-        }
-
-        // need to combine existing properties with new ones
-        Map subBuildProperties = getDataService().getAllProperties();
-
-        subBuildProperties.putAll(super.getProperties());
-        return subBuildProperties;
-    }
-
-
-    /**
-     * Get the list of targets to be executed
-     *
-     * @return A List of string target names.
-     */
-    protected List getTargets() {
-        List targets = new ArrayList();
-
-        if (targetName != null) {
-            targets.add(targetName);
-        }
-        return targets;
-    }
-
-
-    /**
-     * Handle error information produced by the task. When a task prints to
-     * System.err the container may catch this and redirect the content back
-     * to the task by invoking this method. This method must NOT call
-     * System.err, directly or indirectly.
-     *
-     * @param line The line of error info produce by the task
-     * @exception ExecutionException if the output cannot be handled.
-     */
-    public void handleSystemErr(String line) throws ExecutionException {
-        if (subbuildKey == null) {
-            super.handleSystemErr(line);
-        } else {
-            getExecService().handleBuildOutput(subbuildKey, line, true);
-        }
-    }
-
-
-    /**
-     * Handle Output produced by the task. When a task prints to System.out
-     * the container may catch this and redirect the content back to the task
-     * by invoking this method. This method must NOT call System.out, directly
-     * or indirectly.
-     *
-     * @param line The line of content produce by the task
-     * @exception ExecutionException if the output cannot be handled.
-     */
-    public void handleSystemOut(String line) throws ExecutionException {
-        if (subbuildKey == null) {
-            super.handleSystemOut(line);
-        } else {
-            getExecService().handleBuildOutput(subbuildKey, line, false);
-        }
-    }
-
-
-    /**
-     * Indicate if all properties should be passed
-     *
-     * @param inheritAll true if all properties should be passed
-     */
-    public void setInheritAll(boolean inheritAll) {
-        this.inheritAll = inheritAll;
-    }
-
-
-    /**
-     * Indicate if all references are to be passed to the subbuild
-     *
-     * @param inheritRefs true if the sub-build should be given all the
-     *      current references
-     */
-    public void setInheritRefs(boolean inheritRefs) {
-        this.inheritRefs = inheritRefs;
-    }
-
-
-    /**
-     * Set the key of the subbuild
-     *
-     * @param key the key returned by the Ant core for managing the subbuild
-     */
-    protected void setSubBuildKey(Object key) {
-        this.subbuildKey = key;
-    }
-
-
-    /**
-     * Sets the target to be executed in the subbuild
-     *
-     * @param targetName the name of the target to build
-     */
-    public void setTarget(String targetName) {
-        this.targetName = targetName;
-    }
-}
-
diff --git a/proposal/mutant/src/java/antlibs/system/org/apache/ant/antlib/system/AntCall.java b/proposal/mutant/src/java/antlibs/system/org/apache/ant/antlib/system/AntCall.java
deleted file mode 100644
index d5e6211..0000000
--- a/proposal/mutant/src/java/antlibs/system/org/apache/ant/antlib/system/AntCall.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.antlib.system;
-import org.apache.ant.common.util.ExecutionException;
-import org.apache.ant.common.service.MagicProperties;
-
-/**
- * The Ant task - used to execute a different build file
- *
- * @author Conor MacNeill
- * @created 4 February 2002
- */
-public class AntCall extends AntBase {
-    /**
-     * Execute the sub-build
-     *
-     * @exception ExecutionException if the build fails
-     */
-    public void execute() throws ExecutionException {
-        setProperty(MagicProperties.BASEDIR, 
-            getExecService().getBaseDir().getAbsolutePath());
-
-        Object key = getExecService().setupBuild(getProperties());
-        setSubBuildKey(key);
-        getExecService().runBuild(key, getTargets());
-    }
-
-    /**
-     * Alias to add a property to the sub-build
-     *
-     * @param param descriptor for the property to be passed
-     */
-    public void addParam(Property param) {
-        super.addProperty(param);
-    }
-
-}
-
diff --git a/proposal/mutant/src/java/antlibs/system/org/apache/ant/antlib/system/FileConverter.java b/proposal/mutant/src/java/antlibs/system/org/apache/ant/antlib/system/FileConverter.java
deleted file mode 100644
index e255899..0000000
--- a/proposal/mutant/src/java/antlibs/system/org/apache/ant/antlib/system/FileConverter.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.antlib.system;
-
-import java.io.File;
-import org.apache.ant.common.antlib.AbstractConverter;
-import org.apache.ant.common.util.ExecutionException;
-import org.apache.ant.common.util.AntException;
-import org.apache.ant.common.service.FileService;
-
-/**
- * A converter to convert to File objects, resolving against the
- * project's basedir
- *
- * @author Conor MacNeill
- * @created 21 January 2002
- */
-public class FileConverter extends AbstractConverter {
-
-    /**
-     * Get the list of classes this converter is able to convert to.
-     *
-     * @return an array of Class objects representing the classes this
-     *      converter handles.
-     */
-    public Class[] getTypes() {
-        return new Class[]{File.class};
-    }
-
-    /**
-     * Convert a string from the value given to an instance of the given
-     * type.
-     *
-     * @param value The value to be converted
-     * @param type the desired type of the converted object
-     * @return the value of the converted object
-     * @exception ExecutionException if the conversion cannot be made
-     */
-    public Object convert(String value, Class type) throws ExecutionException {
-        try {
-            FileService fileService 
-                = (FileService) getContext().getCoreService(FileService.class);
-            return fileService.resolveFile(value);
-        } catch (AntException e) {
-            throw new ExecutionException("Unable to resolve file: " 
-                + value, e);
-        }
-    }
-}
-
diff --git a/proposal/mutant/src/java/antlibs/system/org/apache/ant/antlib/system/Import.java b/proposal/mutant/src/java/antlibs/system/org/apache/ant/antlib/system/Import.java
deleted file mode 100644
index 481f312..0000000
--- a/proposal/mutant/src/java/antlibs/system/org/apache/ant/antlib/system/Import.java
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.antlib.system;
-
-import org.apache.ant.common.antlib.AbstractTask;
-import org.apache.ant.common.antlib.AntContext;
-import org.apache.ant.common.service.ComponentService;
-import org.apache.ant.common.util.ExecutionException;
-
-/**
- * Task to import a component or components from a library
- *
- * @author Conor MacNeill
- * @created 27 January 2002
- */
-public class Import extends AbstractTask {
-    /** The Ant LIbrary Id from which the component must be imported */
-    private String libraryId = null;
-    /** The name of the component to be imported */
-    private String name = null;
-    /**
-     * A ref is used to import a task which has been declared in another
-     * project
-     */
-    private String ref = null;
-    /** The alias that is to be used for the name */
-    private String alias = null;
-
-    /**
-     * Sets the libraryId of the Import
-     *
-     * @param libraryId the new libraryId value
-     */
-    public void setLibraryId(String libraryId) {
-        this.libraryId = libraryId;
-    }
-
-    /**
-     * Sets the name of the Import
-     *
-     * @param name the new name value
-     */
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    /**
-     * Set the reference name of a task defined in a referenced frame
-     *
-     * @param ref the new ref value
-     */
-    public void setRef(String ref) {
-        this.ref = ref;
-    }
-
-    /**
-     * Sets the alias of the Import
-     *
-     * @param alias the new alias value
-     */
-    public void setAlias(String alias) {
-        this.alias = alias;
-    }
-
-    /**
-     * Validate this task is properly configured
-     *
-     * @exception ExecutionException if the task is not configured correctly
-     */
-    public void validateComponent() throws ExecutionException {
-        if (ref != null) {
-            if (libraryId != null || name != null) {
-                throw new ExecutionException("The \"ref\" attribute can only "
-                     + "be used when \"libraryId\" and \"name\" attributes are "
-                     + "not present");
-            }
-        } else {
-            if (libraryId == null) {
-                throw new ExecutionException("You must specify a library "
-                     + "identifier with the \"libraryid\" attribute");
-            }
-            if (alias != null && name == null) {
-                throw new ExecutionException("You may only specify an alias"
-                     + " when you specify the \"name\" or \"ref\" attributes");
-            }
-        }
-    }
-
-    /**
-     * Do the work and import the component or components
-     *
-     * @exception ExecutionException if the components cannot be imported
-     */
-    public void execute() throws ExecutionException {
-        AntContext context = getAntContext();
-        ComponentService componentService = (ComponentService)
-            context.getCoreService(ComponentService.class);
-        if (ref != null) {
-            componentService.importFrameComponent(ref, alias);
-        } else if (name == null) {
-            componentService.importLibrary(libraryId);
-        } else {
-            componentService.importComponent(libraryId, name, alias);
-        }
-    }
-}
-
diff --git a/proposal/mutant/src/java/antlibs/system/org/apache/ant/antlib/system/LibPath.java b/proposal/mutant/src/java/antlibs/system/org/apache/ant/antlib/system/LibPath.java
deleted file mode 100644
index bbd5473..0000000
--- a/proposal/mutant/src/java/antlibs/system/org/apache/ant/antlib/system/LibPath.java
+++ /dev/null
@@ -1,175 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.antlib.system;
-import java.io.File;
-import java.net.MalformedURLException;
-import java.net.URL;
-
-import org.apache.ant.common.antlib.AbstractTask;
-import org.apache.ant.common.antlib.AntContext;
-import org.apache.ant.common.service.ComponentService;
-import org.apache.ant.common.util.ExecutionException;
-import org.apache.ant.common.event.MessageLevel;
-import org.apache.ant.init.InitUtils;
-
-/**
- * Task to add an additional classpath to the given library
- *
- * @author Conor MacNeill
- * @created 27 January 2002
- */
-public class LibPath extends AbstractTask {
-    /** The id of the library for which this additional path is being set */
-    private String libraryId;
-    /**
-     * This is the location, either file or URL of the library or libraries
-     * to be loaded
-     */
-    private URL url;
-
-    /**
-     * Sets the libraryId of the LibPath
-     *
-     * @param libraryId the new libraryId value
-     */
-    public void setLibraryId(String libraryId) {
-        this.libraryId = libraryId;
-    }
-
-    /**
-     * Sets the URL of the library to be loaded
-     *
-     * @param url the URL from which the library is to be loaded
-     * @exception ExecutionException if the URL cannot be set
-     */
-    public void setURL(URL url) throws ExecutionException {
-        checkNullURL();
-        this.url = url;
-    }
-
-    /**
-     * Set the file from which the library should be loaded.
-     *
-     * @param file the file from which the library should be loaded
-     * @exception ExecutionException if the file attribute cannot be set
-     */
-    public void setFile(File file) throws ExecutionException {
-        checkNullURL();
-        try {
-            this.url = InitUtils.getFileURL(file);
-        } catch (MalformedURLException e) {
-            throw new ExecutionException(e);
-        }
-    }
-
-    /**
-     * Set the dir in which to search for AntLibraries.
-     *
-     * @param dir the dir from which all Ant Libraries found will be loaded.
-     * @exception ExecutionException if the dir attribute cannot be set
-     */
-    public void setDir(File dir) throws ExecutionException {
-        checkNullURL();
-        try {
-            this.url = InitUtils.getFileURL(dir);
-        } catch (MalformedURLException e) {
-            throw new ExecutionException(e);
-        }
-    }
-
-    /**
-     * Validate this task is configured correctly
-     *
-     * @exception ExecutionException if the task is not configured correctly
-     */
-    public void validateComponent() throws ExecutionException {
-        if (libraryId == null) {
-            throw new ExecutionException("You must specify the id of the"
-                 + "library for which you are providing additional classpaths");
-        }
-        if (url == null) {
-            throw new ExecutionException("You must provide an additional "
-                 + "classpath using one of the file, dir or url attributes");
-        }
-    }
-
-    /**
-     * Add the libpath to the set of paths associated with the library
-     *
-     * @exception ExecutionException if the library path cannot be addded to
-     *      the library
-     */
-    public void execute() throws ExecutionException {
-        AntContext context = getAntContext();
-        ComponentService componentService = (ComponentService)
-            context.getCoreService(ComponentService.class);
-        log("Adding lib path " + url + " for " + libraryId, 
-            MessageLevel.MSG_DEBUG);    
-        componentService.addLibPath(libraryId, url);
-    }
-
-    /**
-     * Check if any of the location specifying attributes have already been
-     * set.
-     *
-     * @exception ExecutionException if the search URL has already been set
-     */
-    private void checkNullURL() throws ExecutionException {
-        if (url != null) {
-            throw new ExecutionException("Location of library has already been "
-                 + "set. Please use only one of file, dir or url attributes");
-        }
-    }
-}
-
diff --git a/proposal/mutant/src/java/antlibs/system/org/apache/ant/antlib/system/LoadLib.java b/proposal/mutant/src/java/antlibs/system/org/apache/ant/antlib/system/LoadLib.java
deleted file mode 100644
index 11cf851..0000000
--- a/proposal/mutant/src/java/antlibs/system/org/apache/ant/antlib/system/LoadLib.java
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.antlib.system;
-import java.io.File;
-import java.net.MalformedURLException;
-import java.net.URL;
-import org.apache.ant.common.antlib.AbstractTask;
-import org.apache.ant.common.antlib.AntContext;
-import org.apache.ant.common.service.ComponentService;
-import org.apache.ant.common.util.ExecutionException;
-import org.apache.ant.init.InitUtils;
-
-/**
- * Load an AntLibrary and optionally import all its components
- *
- * @author Conor MacNeill
- * @created 29 January 2002
- */
-public class LoadLib extends AbstractTask {
-    /** Flag which indicates if all components should be imported */
-    private boolean importAll;
-
-    /**
-     * This is the location, either file or URL of the library or libraries
-     * to be loaded
-     */
-    private URL url;
-
-    /**
-     * Sets the URL of the library to be loaded
-     *
-     * @param url the URL from which the library is to be loaded
-     * @exception ExecutionException if the URL cannot be set
-     */
-    public void setURL(URL url) throws ExecutionException {
-        checkNullURL();
-        this.url = url;
-    }
-
-    /**
-     * Set the file from which the library should be loaded.
-     *
-     * @param file the file from which the library should be loaded
-     * @exception ExecutionException if the file attribute cannot be set
-     */
-    public void setFile(File file) throws ExecutionException {
-        checkNullURL();
-        try {
-            this.url = InitUtils.getFileURL(file);
-        } catch (MalformedURLException e) {
-            throw new ExecutionException(e);
-        }
-    }
-
-    /**
-     * Set the dir in which to search for AntLibraries.
-     *
-     * @param dir the dir from which all Ant Libraries found will be loaded.
-     * @exception ExecutionException if the dir attribute cannot be set
-     */
-    public void setDir(File dir) throws ExecutionException {
-        checkNullURL();
-        try {
-            this.url = InitUtils.getFileURL(dir);
-        } catch (MalformedURLException e) {
-            throw new ExecutionException(e);
-        }
-    }
-
-    /**
-     * Indicate whether all components from the library should be imported
-     *
-     * @param importAll true if all components in the library should be
-     *      imported.
-     */
-    public void setImportAll(boolean importAll) {
-        this.importAll = importAll;
-    }
-
-    /**
-     * Validate this task is configured correctly
-     *
-     * @exception ExecutionException if the task is not configured correctly
-     */
-    public void validateComponent() throws ExecutionException {
-        if (url == null) {
-            throw new ExecutionException("A location from which to load "
-                 + "libraries must be provided");
-        }
-    }
-
-
-    /**
-     * Load the library or libraries and optiinally import their components
-     *
-     * @exception ExecutionException if the library or libraries cannot be
-     *      loaded.
-     */
-    public void execute() throws ExecutionException {
-        AntContext context = getAntContext();
-        ComponentService componentService = (ComponentService)
-            context.getCoreService(ComponentService.class);
-        componentService.loadLib(url.toString(), importAll, false);
-    }
-
-    /**
-     * Check if any of the location specifying attributes have already been
-     * set.
-     *
-     * @exception ExecutionException if the search URL has already been set
-     */
-    private void checkNullURL() throws ExecutionException {
-        if (url != null) {
-            throw new ExecutionException("Location of library has already been "
-                 + "set. Please use only one of file, dir or url attributes");
-        }
-    }
-}
-
diff --git a/proposal/mutant/src/java/antlibs/system/org/apache/ant/antlib/system/Parallel.java b/proposal/mutant/src/java/antlibs/system/org/apache/ant/antlib/system/Parallel.java
deleted file mode 100644
index 298be76..0000000
--- a/proposal/mutant/src/java/antlibs/system/org/apache/ant/antlib/system/Parallel.java
+++ /dev/null
@@ -1,205 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.antlib.system;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import org.apache.ant.common.antlib.AbstractTask;
-import org.apache.ant.common.antlib.AntContext;
-
-import org.apache.ant.common.antlib.Task;
-import org.apache.ant.common.antlib.TaskContainer;
-import org.apache.ant.common.service.ExecService;
-import org.apache.ant.common.util.ExecutionException;
-import org.apache.ant.common.util.Location;
-
-/**
- * Implements a multi threaded task execution.
- *
- * @author Thomas Christen <a href="mailto:chr@active.ch">chr@active.ch</a>
- * @author Conor MacNeill
- * @created 27 February 2002
- */
-public class Parallel extends AbstractTask
-     implements TaskContainer {
-
-    /**
-     * Class which stores information about the thread to which each task is
-     * associated
-     *
-     * @author Conor MacNeill
-     * @created 27 February 2002
-     */
-    private class TaskThread extends Thread {
-        /** The exception thrown, if any, by the task running in this thread */
-        private Throwable exception;
-        /** The task running is this thread */
-        private Task task;
-        /** An identifier for the thread */
-        private int taskNumber;
-
-        /**
-         * Construct a new TaskThread
-         *
-         * @param task the Task to be executed in a seperate thread
-         * @param taskNumber the thread's identifier
-         */
-        TaskThread(int taskNumber, Task task) {
-            this.task = task;
-            this.taskNumber = taskNumber;
-        }
-
-        /**
-         * Get the exception thrown by the task, if any.
-         *
-         * @return the Throwable instance thrown by the task or null if
-         *      nothing was thrown.
-         */
-        public Throwable getException() {
-            return exception;
-        }
-
-        /**
-         * Executes the task within a thread and takes care about Exceptions
-         * raised within the task.
-         */
-        public void run() {
-            try {
-                AntContext context = getAntContext();
-                ExecService execService
-                     = (ExecService) context.getCoreService(ExecService.class);
-                execService.executeTask(task);
-            } catch (Throwable t) {
-                exception = t;
-            }
-        }
-    }
-
-    /** Collection holding the nested tasks */
-    private List nestedTasks = new ArrayList();
-
-
-    /**
-     * Add a nested task to execute parallel (asynchron).
-     *
-     * @param nestedTask Nested task to be executed in parallel
-     */
-    public void addNestedTask(Task nestedTask) {
-        nestedTasks.add(nestedTask);
-    }
-
-    /**
-     * Block execution until the specified time or for a specified amount of
-     * milliseconds and if defined, execute the wait status.
-     *
-     * @exception ExecutionException if any of the nested tasks throws an
-     *      exception
-     */
-    public void execute() throws ExecutionException {
-        TaskThread[] threads = new TaskThread[nestedTasks.size()];
-        int threadNumber = 0;
-        for (Iterator i = nestedTasks.iterator(); i.hasNext(); threadNumber++) {
-            Task nestedTask = (Task) i.next();
-            threads[threadNumber] = new TaskThread(threadNumber, nestedTask);
-        }
-
-        // now start all threads
-        for (int i = 0; i < threads.length; ++i) {
-            threads[i].start();
-        }
-
-        // now join to all the threads
-        for (int i = 0; i < threads.length; ++i) {
-            try {
-                threads[i].join();
-            } catch (InterruptedException ie) {
-                // who would interrupt me at a time like this?
-            }
-        }
-
-        // now did any of the threads throw an exception
-        StringBuffer exceptionMessage = new StringBuffer();
-        String lSep = System.getProperty("line.separator");
-        int numExceptions = 0;
-        Throwable firstException = null;
-        Location firstLocation = Location.UNKNOWN_LOCATION;
-        for (int i = 0; i < threads.length; ++i) {
-            Throwable t = threads[i].getException();
-            if (t != null) {
-                numExceptions++;
-                if (firstException == null) {
-                    firstException = t;
-                }
-                if (t instanceof ExecutionException &&
-                    firstLocation == Location.UNKNOWN_LOCATION) {
-                    firstLocation = ((ExecutionException) t).getLocation();
-                }
-                exceptionMessage.append(lSep);
-                exceptionMessage.append(t.getMessage());
-            }
-        }
-
-        if (numExceptions == 1) {
-            if (firstException instanceof ExecutionException) {
-                throw (ExecutionException) firstException;
-            } else {
-                throw new ExecutionException(firstException);
-            }
-        } else if (numExceptions > 1) {
-            throw new ExecutionException(exceptionMessage.toString(),
-                firstLocation);
-        }
-    }
-}
-
diff --git a/proposal/mutant/src/java/antlibs/system/org/apache/ant/antlib/system/PrimitiveConverter.java b/proposal/mutant/src/java/antlibs/system/org/apache/ant/antlib/system/PrimitiveConverter.java
deleted file mode 100644
index 1d3fac0..0000000
--- a/proposal/mutant/src/java/antlibs/system/org/apache/ant/antlib/system/PrimitiveConverter.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.antlib.system;
-
-import org.apache.ant.common.antlib.AbstractConverter;
-import org.apache.ant.common.util.ExecutionException;
-import org.apache.ant.common.util.PropertyUtils;
-
-/**
- * A converter to convert to Java's primitie types
- *
- * @author Conor MacNeill
- */
-public class PrimitiveConverter extends AbstractConverter {
-
-    /**
-     * Get the list of classes this converter is able to convert to.
-     *
-     * @return an array of Class objects representing the classes this
-     *      converter handles.
-     */
-    public Class[] getTypes() {
-        return new Class[] {
-            Character.class, Character.TYPE, Byte.TYPE, Short.TYPE, 
-            Integer.TYPE, Long.TYPE, Float.TYPE, Double.TYPE, 
-            Boolean.class, Boolean.TYPE};
-    }
-
-    /**
-     * Convert a string from the value given to an instance of the given
-     * type.
-     *
-     * @param value The value to be converted
-     * @param type the desired type of the converted object
-     * @return the value of the converted object
-     * @exception ExecutionException if the conversion cannot be made
-     */
-    public Object convert(String value, Class type) throws ExecutionException {
-        if (type.equals(Character.class) 
-                || type.equals(Character.TYPE)) {
-            return new Character(value.charAt(0));
-        } else if (type.equals(Byte.TYPE)) {
-            return new Byte(value);
-        } else if (type.equals(Short.TYPE)) {
-            return new Short(value);
-        } else if (type.equals(Integer.TYPE)) {
-            return new Integer(value);
-        } else if (type.equals(Long.TYPE)) {
-            return new Long(value);
-        } else if (type.equals(Float.TYPE)) {
-            return new Float(value);
-        } else if (type.equals(Double.TYPE)) {
-            return new Double(value);
-        } else if (type.equals(Boolean.class) 
-                || type.equals(Boolean.TYPE)) {
-            return new Boolean(PropertyUtils.toBoolean(value));
-        }
-        throw new ExecutionException("This converter does not handle " 
-            + type.getName()); 
-    }
-}
-
diff --git a/proposal/mutant/src/java/antlibs/system/org/apache/ant/antlib/system/Ref.java b/proposal/mutant/src/java/antlibs/system/org/apache/ant/antlib/system/Ref.java
deleted file mode 100644
index 7a689ea..0000000
--- a/proposal/mutant/src/java/antlibs/system/org/apache/ant/antlib/system/Ref.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.antlib.system;
-import java.io.File;
-import org.apache.ant.common.antlib.AntContext;
-import org.apache.ant.common.model.Project;
-import org.apache.ant.common.util.ExecutionException;
-
-/**
- * A Task to create a project reference.
- *
- * @author Conor MacNeill
- * @created 17 April 2002
- */
-public class Ref extends SubBuild {
-
-    /** The project file containing the project to be referenced. */
-    private File projectFile;
-
-    /** THe name under which this project is to be referenced. */
-    private String name;
-
-    /**
-     * Initialise this task
-     *
-     * @param context core's context
-     * @param componentType the component type of this component (i.e its
-     *      defined name in the build file)
-     * @exception ExecutionException if we can't access the data service
-     */
-    public void init(AntContext context, String componentType)
-         throws ExecutionException {
-        super.init(context, componentType);
-    }
-
-
-    /**
-     * Sets the file containing the XML representation model of the referenced
-     * project
-     *
-     * @param projectFile the file to build
-     */
-    public void setProject(File projectFile) {
-        this.projectFile = projectFile;
-    }
-
-
-    /**
-     * Set the name under which the project will be referenced
-     *
-     * @param name the reference label
-     */
-    public void setName(String name) {
-        this.name = name;
-    }
-
-
-    /**
-     * Create the project reference
-     *
-     * @exception ExecutionException if the project cannot be referenced.
-     */
-    public void execute() throws ExecutionException {
-        Project model = getExecService().parseXMLBuildFile(projectFile);
-
-        getExecService().createProjectReference(name, model, getProperties());
-    }
-}
-
diff --git a/proposal/mutant/src/java/antlibs/system/org/apache/ant/antlib/system/Sequential.java b/proposal/mutant/src/java/antlibs/system/org/apache/ant/antlib/system/Sequential.java
deleted file mode 100644
index e2e2538..0000000
--- a/proposal/mutant/src/java/antlibs/system/org/apache/ant/antlib/system/Sequential.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.antlib.system;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import org.apache.ant.common.antlib.AbstractTask;
-import org.apache.ant.common.antlib.AntContext;
-
-import org.apache.ant.common.antlib.Task;
-import org.apache.ant.common.antlib.TaskContainer;
-import org.apache.ant.common.service.ExecService;
-import org.apache.ant.common.util.ExecutionException;
-
-/**
- * Implements a single threaded task execution. <p>
- *
- *
- *
- * @author Thomas Christen <a href="mailto:chr@active.ch">chr@active.ch</a>
- * @created 27 February 2002
- */
-public class Sequential extends AbstractTask
-     implements TaskContainer {
-
-    /** Collection holding the nested tasks */
-    private List nestedTasks = new ArrayList();
-
-
-    /**
-     * Add a nested task to Sequential. <p>
-     *
-     *
-     *
-     * @param nestedTask Nested task to execute Sequential <p>
-     *
-     *
-     */
-    public void addNestedTask(Task nestedTask) {
-        nestedTasks.add(nestedTask);
-    }
-
-    /**
-     * Execute all nestedTasks.
-     *
-     * @exception ExecutionException if any of the nested tasks throws an
-     *      exception
-     */
-    public void execute() throws ExecutionException {
-        AntContext context = getAntContext();
-        ExecService execService
-             = (ExecService) context.getCoreService(ExecService.class);
-        for (Iterator i = nestedTasks.iterator(); i.hasNext();) {
-            Task nestedTask = (Task) i.next();
-            execService.executeTask(nestedTask);
-        }
-    }
-}
-
diff --git a/proposal/mutant/src/java/antlibs/system/org/apache/ant/antlib/system/SubBuild.java b/proposal/mutant/src/java/antlibs/system/org/apache/ant/antlib/system/SubBuild.java
deleted file mode 100644
index a446f80..0000000
--- a/proposal/mutant/src/java/antlibs/system/org/apache/ant/antlib/system/SubBuild.java
+++ /dev/null
@@ -1,313 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.antlib.system;
-import java.util.HashMap;
-import java.util.Map;
-import org.apache.ant.common.antlib.AbstractComponent;
-import org.apache.ant.common.antlib.AbstractTask;
-import org.apache.ant.common.antlib.AntContext;
-import org.apache.ant.common.service.DataService;
-import org.apache.ant.common.service.ExecService;
-import org.apache.ant.common.util.ExecutionException;
-
-/**
- * Common Base class all tasks that can pass references and property overrides
- * to a subbuild
- *
- * @author Conor MacNeill
- * @created 22 April 2002
- */
-public abstract class SubBuild extends AbstractTask {
-
-    /**
-     * Simple Property value storing class
-     *
-     * @author Conor MacNeill
-     * @created 5 February 2002
-     */
-    public static class Property extends AbstractComponent {
-        /** The property name */
-        private String name;
-
-        /** The property value */
-        private String value;
-
-
-        /**
-         * Gets the name of the Property
-         *
-         * @return the name value
-         */
-        public String getName() {
-            return name;
-        }
-
-
-        /**
-         * Gets the value of the Property
-         *
-         * @return the value value
-         */
-        public String getValue() {
-            return value;
-        }
-
-
-        /**
-         * Sets the name of the Property
-         *
-         * @param name the new name value
-         */
-        public void setName(String name) {
-            this.name = name;
-        }
-
-
-        /**
-         * Sets the value of the Property
-         *
-         * @param value the new value value
-         */
-        public void setValue(String value) {
-            this.value = value;
-        }
-
-
-        /**
-         * Validate this data type instance
-         *
-         * @exception ExecutionException if either attribute has not been set
-         */
-        public void validateComponent() throws ExecutionException {
-            if (name == null) {
-                throw new ExecutionException("\"name\" attribute of "
-                     + "<property> must be supplied");
-            }
-            if (value == null) {
-                throw new ExecutionException("\"value\" attribute of "
-                     + "<property> must be supplied");
-            }
-        }
-    }
-
-
-    /**
-     * A simple class to store information about references being passed
-     *
-     * @author Conor MacNeill
-     * @created 5 February 2002
-     */
-    public static class Reference extends AbstractComponent {
-        /** The id of the reference to be passed */
-        private String refId;
-        /** The id to be used in the sub-build for this reference */
-        private String toId;
-
-
-        /**
-         * Gets the refId of the Reference
-         *
-         * @return the refId value
-         */
-        public String getRefId() {
-            return refId;
-        }
-
-
-        /**
-         * Gets the toId of the Reference
-         *
-         * @return the toId value
-         */
-        public String getToId() {
-            return toId;
-        }
-
-
-        /**
-         * Sets the refId of the Reference
-         *
-         * @param refId the new refId value
-         */
-        public void setRefId(String refId) {
-            this.refId = refId;
-        }
-
-
-        /**
-         * Sets the toId of the Reference
-         *
-         * @param toId the new toId value
-         */
-        public void setToId(String toId) {
-            this.toId = toId;
-        }
-
-
-        /**
-         * Validate this data type instance
-         *
-         * @exception ExecutionException if the refid attribute has not been
-         *      set
-         */
-        public void validateComponent() throws ExecutionException {
-            if (refId == null) {
-                throw new ExecutionException("\"refid\" attribute of "
-                     + "<reference> must be supplied");
-            }
-        }
-    }
-
-
-    /** The core's data service for manipulating the properties */
-    private DataService dataService;
-
-    /** The core's ExecutionService for running builds and external programs */
-    private ExecService execService;
-
-    /** The properties which will be passed to the sub-build */
-    private Map properties = new HashMap();
-
-
-    /**
-     * Add a property to be passed to the subbuild
-     *
-     * @param property descriptor for the property to be passed
-     */
-    public void addProperty(Property property) {
-        properties.put(property.getName(), property.getValue());
-    }
-
-
-    /**
-     * Add a reference to be passed
-     *
-     * @param reference the descriptor of the reference to be passed
-     * @exception ExecutionException if the reference does not reference a
-     *      valid object
-     */
-    public void addReference(Reference reference) throws ExecutionException {
-        String refId = reference.getRefId();
-
-        if (!dataService.isDataValueSet(refId)) {
-            throw new ExecutionException("RefId \"" + refId + "\" is not set");
-        }
-        Object value = dataService.getDataValue(refId);
-        String toId = reference.getToId();
-
-        if (toId == null) {
-            toId = refId;
-        }
-
-        properties.put(toId, value);
-    }
-
-
-    /**
-     * Get the core's execution service
-     *
-     * @return the core's execution service.
-     */
-    protected ExecService getExecService() {
-        return execService;
-    }
-
-
-    /**
-     * Get the core's date service
-     *
-     * @return the core's data service.
-     */
-    protected DataService getDataService() {
-        return dataService;
-    }
-
-
-    /**
-     * Get the properties to be used with the sub-build
-     *
-     * @return the properties the sub-build will start with
-     */
-    protected Map getProperties() {
-        return properties;
-    }
-
-
-    /**
-     * Initialise this task
-     *
-     * @param context core's context
-     * @param componentType the component type of this component (i.e its
-     *      defined name in the build file)
-     * @exception ExecutionException if we can't access the data service
-     */
-    public void init(AntContext context, String componentType)
-         throws ExecutionException {
-        super.init(context, componentType);
-        dataService = (DataService) getCoreService(DataService.class);
-        execService = (ExecService) getCoreService(ExecService.class);
-    }
-
-
-    /**
-     * Set a property for the subbuild
-     *
-     * @param propertyName the property name
-     * @param propertyValue the value of the property
-     */
-    protected void setProperty(String propertyName, Object propertyValue) {
-        properties.put(propertyName, propertyValue);
-    }
-}
-
diff --git a/proposal/mutant/src/java/antlibs/system/org/apache/ant/antlib/system/Taskdef.java b/proposal/mutant/src/java/antlibs/system/org/apache/ant/antlib/system/Taskdef.java
deleted file mode 100644
index ca56d51..0000000
--- a/proposal/mutant/src/java/antlibs/system/org/apache/ant/antlib/system/Taskdef.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.antlib.system;
-
-import org.apache.ant.common.antlib.AbstractTask;
-
-/**
- * Define a new task for use in the build file
- *
- * @author Conor MacNeill
- * @created 27 January 2002
- */
-public class Taskdef extends AbstractTask {
-    /** Define the new task */
-    public void execute() {
-    }
-}
-
diff --git a/proposal/mutant/src/java/antlibs/system/org/apache/ant/antlib/system/Typedef.java b/proposal/mutant/src/java/antlibs/system/org/apache/ant/antlib/system/Typedef.java
deleted file mode 100644
index e3a10ee..0000000
--- a/proposal/mutant/src/java/antlibs/system/org/apache/ant/antlib/system/Typedef.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.antlib.system;
-
-import org.apache.ant.common.antlib.AbstractTask;
-
-/**
- * Define a new type to be used in the build
- *
- * @author Conor MacNeill
- * @created 27 January 2002
- */
-public class Typedef extends AbstractTask {
-    /** define the type */
-    public void execute() {
-    }
-}
-
diff --git a/proposal/mutant/src/java/antlibs/system/org/apache/ant/antlib/system/URLConverter.java b/proposal/mutant/src/java/antlibs/system/org/apache/ant/antlib/system/URLConverter.java
deleted file mode 100644
index b115b25..0000000
--- a/proposal/mutant/src/java/antlibs/system/org/apache/ant/antlib/system/URLConverter.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.antlib.system;
-
-import java.net.URL;
-import java.net.MalformedURLException;
-import org.apache.ant.common.antlib.AbstractConverter;
-import org.apache.ant.common.util.ExecutionException;
-
-/**
- * A converter to convert to URLs relative to the project base dir 
- *
- * @author Conor MacNeill
- */
-public class URLConverter extends AbstractConverter {
-
-    /**
-     * Get the list of classes this converter is able to convert to.
-     *
-     * @return an array of Class objects representing the classes this
-     *      converter handles.
-     */
-    public Class[] getTypes() {
-        return new Class[]{URL.class};
-    }
-
-    /**
-     * Convert a string from the value given to an instance of the given
-     * type.
-     *
-     * @param value The value to be converted
-     * @param type the desired type of the converted object
-     * @return the value of the converted object
-     * @exception ExecutionException if the conversion cannot be made
-     */
-    public Object convert(String value, Class type) throws ExecutionException {
-        try {
-            return new URL(value);
-        } catch (MalformedURLException e) {
-            throw new ExecutionException(e);
-        }
-    }
-}
-
diff --git a/proposal/mutant/src/java/bootstrap/org/apache/ant/bootstrap/Bootstrap.java b/proposal/mutant/src/java/bootstrap/org/apache/ant/bootstrap/Bootstrap.java
deleted file mode 100644
index 641b8a3..0000000
--- a/proposal/mutant/src/java/bootstrap/org/apache/ant/bootstrap/Bootstrap.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.bootstrap;
-import java.lang.reflect.Method;
-import java.net.URL;
-import java.net.URLClassLoader;
-
-import org.apache.ant.init.ClassLocator;
-
-/**
- * The Bootstrap class initailses the boot strap build, then loads the 
- * Builder class to perform the bootstrap build.
- *
- * @author Conor MacNeill
- * @created 18 February 2002
- */
-public class Bootstrap {
-    /**
-     * The main program - adds tools.jar and runs build
-     *
-     * @param args The command line arguments
-     * @exception Exception if there is a bootstrap problem
-     */
-    public static void main(String[] args) throws Exception {
-        System.out.println("Bootstrapping mutant");
-        URL bootstrapURL = ClassLocator.getClassLocationURL(Bootstrap.class);
-        URL builderURL = new URL(bootstrapURL, "../builder/");
-        URL toolsJarURL = ClassLocator.getToolsJarURL();
-
-        URL[] urls = new URL[]{builderURL, toolsJarURL};
-        ClassLoader builderLoader = new URLClassLoader(urls);
-        // org.apache.ant.init.LoaderUtils.dumpLoader(System.out,
-        //    builderLoader);
-
-        Class builderClass = Class.forName("org.apache.ant.builder.Builder",
-            true, builderLoader);
-        final Class[] param = {Class.forName("[Ljava.lang.String;")};
-        final Method main = builderClass.getMethod("main", param);
-        final Object[] argument = {args};
-        main.invoke(null, argument);
-    }
-}
-
diff --git a/proposal/mutant/src/java/bootstrap/org/apache/ant/builder/Ant1CompatBuilder.java b/proposal/mutant/src/java/bootstrap/org/apache/ant/builder/Ant1CompatBuilder.java
deleted file mode 100644
index 4d73a07..0000000
--- a/proposal/mutant/src/java/bootstrap/org/apache/ant/builder/Ant1CompatBuilder.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package org.apache.ant.builder;
-public class Ant1CompatBuilder {
-    protected void _init(BuildHelper helper) {
-        helper.setProperty("src.dir", "src");
-        helper.setProperty("lib.dir", "lib");
-        helper.setProperty("java.dir", "${src.dir}/java");
-        helper.setProperty("bin.dir", "bin");
-        helper.setProperty("dist.dir", "dist");
-        helper.setProperty("javadocs.dir", "${dist.dir}/javadocs");
-        helper.setProperty("distlib.dir", "${dist.dir}/lib");
-        helper.setProperty("ant1base.dir", "../..");
-        helper.setProperty("ant1src.dir", "${ant1base.dir}/src");
-        helper.setProperty("ant1java.dir", "${ant1src.dir}/main");
-        helper.setProperty("ant1etc.dir", "${ant1src.dir}/etc");
-        helper.setProperty("debug", "true");
-        helper.setProperty("ant.package", "org/apache/tools/ant");
-        helper.setProperty("optional.package", "${ant.package}/taskdefs/optional");
-        helper.setProperty("optional.type.package", "${ant.package}/types/optional");
-        helper.setProperty("util.package", "${ant.package}/util");
-        helper.setProperty("regexp.package", "${util.package}/regexp");
-        helper.createPath("classpath");
-        helper.addFileSetToPath("classpath", 
-                        "${lib.dir}/parser", "*.jar");
-        helper.addFileSetToPath("classpath", 
-                        "${lib.dir}/ant1compat", "*.jar");
-        helper.addPathElementToPath("classpath", "${distlib.dir}/init.jar");
-        helper.addPathElementToPath("classpath", "${distlib.dir}/common/common.jar");
-        helper.addPathElementToPath("classpath", "${distlib.dir}/syslibs/system.jar");
-    }
-    protected void check_for_optional_packages(BuildHelper helper) {
-    }
-    protected void ant1compat(BuildHelper helper) {
-        helper.mkdir("${bin.dir}/ant1src_copy");
-        helper.mkdir("${bin.dir}/ant1compat");
-        helper.copyFilesetRef("ant1src_tocopy", "${bin.dir}/ant1src_copy");
-        helper.javac("${bin.dir}/ant1src_copy:${java.dir}/antlibs/ant1compat", "${bin.dir}/ant1compat", "classpath");
-        helper.copyFileset("${bin.dir}/ant1src_copy", "${bin.dir}/ant1compat");
-        helper.copyFileset("${ant1etc.dir}", "${bin.dir}/ant1compat/${optional.package}/junit/xsl");
-        helper.mkdir("${distlib.dir}/antlibs/");
-        helper.jar("${bin.dir}/ant1compat", "${distlib.dir}/antlibs/ant1compat.jar",
-                   "${java.dir}/antlibs/ant1compat", "antlib.xml", null, null);
-    }
-    protected void clean(BuildHelper helper) {
-    }
-}
diff --git a/proposal/mutant/src/java/bootstrap/org/apache/ant/builder/BuildHelper.java b/proposal/mutant/src/java/bootstrap/org/apache/ant/builder/BuildHelper.java
deleted file mode 100644
index 673669b..0000000
--- a/proposal/mutant/src/java/bootstrap/org/apache/ant/builder/BuildHelper.java
+++ /dev/null
@@ -1,574 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.builder;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.FilenameFilter;
-import java.io.IOException;
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.StringTokenizer;
-import java.util.jar.Attributes;
-import java.util.jar.JarOutputStream;
-import java.util.jar.Manifest;
-import java.util.zip.ZipEntry;
-
-/**
- * A helper class which allows the build files which have been converted to
- * code to be built.
- *
- * @author Conor MacNeill
- * @created 16 February 2002
- */
-public class BuildHelper {
-
-    /**
-     * Simple data class for storing info about a fileset.
-     *
-     * @author Conor MacNeill
-     * @created 18 February 2002
-     */
-    private static class FileSetInfo {
-        /** The root directory of this fileset */
-        private File root;
-        /** the list of files in the file set */
-        private File[] files;
-
-    }
-
-
-    /** The properties which have been defined in the build */
-    private Map properties = new HashMap();
-
-    /** Path objects created in the build */
-    private Map paths = new HashMap();
-
-    /** Filesets created in the build */
-    private Map filesets = new HashMap();
-
-
-    /**
-     * Set a property for the build
-     *
-     * @param propertyName the name of the property
-     * @param propertyValue the value of the property
-     */
-    protected void setProperty(String propertyName, String propertyValue) {
-        if (!properties.containsKey(propertyName)) {
-            String value = resolve(propertyValue);
-
-            properties.put(propertyName, value);
-        }
-    }
-
-
-    /**
-     * Create a Jar
-     *
-     * @param basedir the base directpory from which files are added to the
-     *      jar
-     * @param metaInfDir the directory containing the META-INF for the jar
-     * @param metaInfIncludes the files to be included in the META-INF area of
-     *      the jar
-     * @param jarFile the file in which the Jar is created
-     * @param classpath Class-Path attribute in manifest
-     * @param mainClass Main-Class attribute in manifest
-     */
-    protected void jar(String basedir, String jarFile, String metaInfDir,
-                       String metaInfIncludes,
-                       String classpath, String mainClass) {
-        try {
-            File base = new File(resolve(basedir));
-            File jar = new File(resolve(jarFile));
-            Manifest manifest = new Manifest();
-            Attributes attributes = manifest.getMainAttributes();
-            attributes.putValue("Manifest-Version", "1.0");
-            attributes.putValue("Created-By", "Mutant Bootstrap");
-
-            if (classpath != null) {
-                attributes.putValue("Class-Path", classpath);
-            }
-            if (mainClass != null) {
-                attributes.putValue("Main-Class", mainClass);
-            }
-
-            JarOutputStream jos
-                 = new JarOutputStream(new FileOutputStream(jar), manifest);
-
-            addToJar(jos, base, null);
-            if (metaInfDir != null) {
-                File[] metaFileSet = buildFileSet(metaInfDir, metaInfIncludes);
-
-                addFilesToJar(jos, new File(resolve(metaInfDir)),
-                    metaFileSet, "META-INF");
-            }
-            jos.close();
-        } catch (IOException e) {
-            e.printStackTrace();
-            throw new RuntimeException("Unable to Jar file");
-        }
-    }
-
-
-    /**
-     * Compile a set of files
-     *
-     * @param srcDir the source directory
-     * @param destDir where the compiled classes will go
-     * @param classpathRef the id of a path object with the classpath for the
-     *      build
-     */
-    protected void javac(String srcDir, String destDir, String classpathRef) {
-        List javaFiles = new ArrayList();
-        String src = resolve(srcDir);
-        StringTokenizer tokenizer = new StringTokenizer(src, ":");
-
-        while (tokenizer.hasMoreTokens()) {
-            File srcLocation = new File(tokenizer.nextToken());
-
-            getJavaFiles(srcLocation, javaFiles);
-        }
-
-        File dest = new File(resolve(destDir));
-        int numArgs = javaFiles.size() + 2;
-
-        if (classpathRef != null) {
-            numArgs += 2;
-        }
-        String[] args = new String[numArgs];
-        int index = 0;
-
-        args[index++] = "-d";
-        args[index++] = dest.getPath();
-        if (classpathRef != null) {
-            String path = (String) paths.get(resolve(classpathRef));
-
-            args[index++] = "-classpath";
-            args[index++] = path;
-        }
-        for (Iterator i = javaFiles.iterator(); i.hasNext();) {
-            args[index++] = ((File) i.next()).getPath();
-        }
-
-        try {
-            Class c = Class.forName("com.sun.tools.javac.Main");
-            Object compiler = c.newInstance();
-            Method compile = c.getMethod("compile",
-                new Class[]{(new String[]{}).getClass()});
-
-            compile.invoke(compiler, new Object[]{args});
-        } catch (Exception e) {
-            e.printStackTrace();
-            throw new RuntimeException("Compile failed");
-        }
-    }
-
-
-    /**
-     * Copy a directory
-     *
-     * @param fromDir the source directory name
-     * @param toDir the destination directory name
-     */
-    protected void copyFileset(String fromDir, String toDir) {
-        File from = new File(resolve(fromDir));
-        File to = new File(resolve(toDir));
-
-        copyDir(from, to);
-    }
-
-
-    /**
-     * Add a fileset to this build helper
-     *
-     * @param name the name of the fileset (its id)
-     * @param root the root directory of the fileset
-     * @param files the files in the fileset
-     */
-    protected void addFileSet(String name, File root, File[] files) {
-        FileSetInfo info = new FileSetInfo();
-
-        info.root = root;
-        info.files = files;
-        filesets.put(name, info);
-    }
-
-
-    /**
-     * Copy a fileset given a reference to the source fileset
-     *
-     * @param toDir the name of the destination directory
-     * @param fileSetRef the fileset to be copied
-     */
-    protected void copyFilesetRef(String fileSetRef, String toDir) {
-        FileSetInfo fileset = (FileSetInfo) filesets.get(resolve(fileSetRef));
-
-        if (fileset != null) {
-            File to = new File(resolve(toDir));
-
-            copyFileList(fileset.root, fileset.files, to);
-        }
-    }
-
-
-    /**
-     * Make a directory
-     *
-     * @param dirName the name of the directory path to be created.
-     */
-    protected void mkdir(String dirName) {
-        File dir = new File(resolve(dirName));
-
-        dir.mkdirs();
-    }
-
-
-    /**
-     * Create a path object
-     *
-     * @param pathName the name of the path object in the build
-     */
-    protected void createPath(String pathName) {
-        String path = "";
-
-        paths.put(pathName, path);
-    }
-
-
-    /**
-     * Add a fileset to a path
-     *
-     * @param pathName the name of the path
-     * @param filesetDir the base directory of the fileset
-     * @param filesetIncludes the files to be included in the fileset
-     */
-    protected void addFileSetToPath(String pathName, String filesetDir,
-                                    String filesetIncludes) {
-        File[] files = buildFileSet(filesetDir, filesetIncludes);
-        String currentPath = (String) paths.get(pathName);
-
-        for (int i = 0; i < files.length; ++i) {
-            if (currentPath == null || currentPath.length() == 0) {
-                currentPath = files[i].getPath();
-            } else {
-                currentPath = currentPath + File.pathSeparator
-                     + files[i].getPath();
-            }
-        }
-        paths.put(pathName, currentPath);
-    }
-
-
-    /**
-     * Add a new element to a path
-     *
-     * @param pathName the name of the path object to be updated
-     * @param location the location to be added to the path
-     */
-    protected void addPathElementToPath(String pathName, String location) {
-        String pathElement = resolve(location).replace('/', File.separatorChar);
-        String currentPath = (String) paths.get(pathName);
-
-        if (currentPath == null || currentPath.length() == 0) {
-            currentPath = pathElement;
-        } else {
-            currentPath = currentPath + File.pathSeparator + pathElement;
-        }
-        paths.put(pathName, currentPath);
-    }
-
-
-    /**
-     * Add an existing path to another path
-     *
-     * @param pathName the name of the path to which the path is to be added
-     * @param pathNameToAdd the name of the path to be added.
-     */
-    protected void addPathToPath(String pathName, String pathNameToAdd) {
-        String pathToAdd = (String) paths.get(pathNameToAdd);
-
-        if (pathToAdd == null || pathToAdd.length() == 0) {
-            return;
-        }
-
-        String currentPath = (String) paths.get(pathName);
-
-        if (currentPath == null || currentPath.length() == 0) {
-            currentPath = pathToAdd;
-        } else {
-            currentPath = currentPath + File.pathSeparator + pathToAdd;
-        }
-        paths.put(pathName, currentPath);
-    }
-
-
-    /**
-     * Get the set of Java files to be compiled
-     *
-     * @param srcDir the directory to search (recursively searched)
-     * @param javaFiles the list of files to which Java files are added
-     */
-    private void getJavaFiles(File srcDir, List javaFiles) {
-        File[] files = srcDir.listFiles();
-
-        for (int i = 0; i < files.length; ++i) {
-            if (files[i].isDirectory()) {
-                getJavaFiles(files[i], javaFiles);
-            } else if (files[i].getPath().endsWith(".java")) {
-                javaFiles.add(files[i]);
-            }
-        }
-    }
-
-
-    /**
-     * Copy a file
-     *
-     * @param from the source location
-     * @param dest the destination location
-     */
-    private void copyFile(File from, File dest) {
-        if (from.exists()) {
-            dest.getParentFile().mkdirs();
-            try {
-                FileInputStream in = new FileInputStream(from);
-                FileOutputStream out = new FileOutputStream(dest);
-                byte[] buf = new byte[1024 * 16];
-                int count = 0;
-
-                count = in.read(buf, 0, buf.length);
-                while (count != -1) {
-                    out.write(buf, 0, count);
-                    count = in.read(buf, 0, buf.length);
-                }
-
-                in.close();
-                out.close();
-            } catch (IOException ioe) {
-                ioe.printStackTrace();
-                throw new RuntimeException("Unable to copy files");
-            }
-        }
-    }
-
-
-    /**
-     * Copy a list of files from one directory to another, preserving the
-     * relative paths
-     *
-     * @param root the root of the source directory
-     * @param files the files to be copied
-     * @param to the destination directory
-     */
-    private void copyFileList(File root, File[] files, File to) {
-        for (int i = 0; i < files.length; ++i) {
-            if (files[i].getName().equals("CVS")) {
-                continue;
-            }
-            String name
-                 = files[i].getPath().substring(root.getPath().length() + 1);
-            File dest = new File(to, name);
-
-            if (files[i].isDirectory()) {
-                copyDir(files[i], dest);
-            } else {
-                copyFile(files[i], dest);
-            }
-        }
-    }
-
-
-    /**
-     * Copy a directory
-     *
-     * @param from the source directory
-     * @param to the destination directory
-     */
-    private void copyDir(File from, File to) {
-        to.mkdirs();
-
-        File[] files = from.listFiles();
-
-        copyFileList(from, files, to);
-    }
-
-
-    /**
-     * Add a directory to a Jar
-     *
-     * @param jos the JarOutputStream representing the Jar being created
-     * @param dir the directory to be added to the jar
-     * @param prefix the prefix in the jar at which the directory is to be
-     *      added
-     * @exception IOException if the files cannot be added to the jar
-     */
-    private void addToJar(JarOutputStream jos, File dir, String prefix)
-         throws IOException {
-        File[] files = dir.listFiles();
-
-        addFilesToJar(jos, dir, files, prefix);
-    }
-
-
-    /**
-     * Add a set of files to a jar
-     *
-     * @param jos the JarOutputStream representing the Jar being created
-     * @param dir the directory fro which the files are taken
-     * @param prefix the prefix in the jar at which the directory is to be
-     *      added
-     * @param files the list of files to be added to the jar
-     * @exception IOException if the files cannot be added to the jar
-     */
-    private void addFilesToJar(JarOutputStream jos, File dir,
-                               File[] files, String prefix) throws IOException {
-        for (int i = 0; i < files.length; i++) {
-            String name = files[i].getPath().replace('\\', '/');
-
-            name = name.substring(dir.getPath().length() + 1);
-            if (prefix != null) {
-                name = prefix + "/" + name;
-            }
-            ZipEntry ze = new ZipEntry(name);
-
-            jos.putNextEntry(ze);
-            if (files[i].isDirectory()) {
-                addToJar(jos, files[i], name);
-            } else {
-                FileInputStream fis = new FileInputStream(files[i]);
-                int count = 0;
-                byte[] buf = new byte[8 * 1024];
-
-                count = fis.read(buf, 0, buf.length);
-                while (count != -1) {
-                    jos.write(buf, 0, count);
-                    count = fis.read(buf, 0, buf.length);
-                }
-                fis.close();
-            }
-        }
-    }
-
-
-    /**
-     * Build a simple fileset. Only simple inclusion filtering is supported -
-     * no complicated patterns.
-     *
-     * @param filesetDir the base directory of the fileset
-     * @param filesetIncludes the simple includes spec for the fileset
-     * @return the fileset expressed as an array of File instances.
-     */
-    private File[] buildFileSet(String filesetDir, String filesetIncludes) {
-        if (filesetDir == null) {
-            return new File[0];
-        }
-        final String includes = resolve(filesetIncludes);
-
-        if (includes.indexOf("**") != -1) {
-            throw new RuntimeException("Simple fileset cannot handle ** "
-                 + "style includes");
-        }
-        int index = 0;
-
-        if (includes.charAt(0) == '*') {
-            index = 1;
-        }
-        if (includes.indexOf("*", index) != -1) {
-            throw new RuntimeException("Simple fileset cannot handle * "
-                 + "style includes except at start");
-        }
-
-        File base = new File(resolve(filesetDir));
-
-        return base.listFiles(
-            new FilenameFilter() {
-                public boolean accept(File dir, String name) {
-                    if (includes.startsWith("*")) {
-                        return name.endsWith(includes.substring(1));
-                    } else {
-                        return name.equals(includes);
-                    }
-                }
-            });
-    }
-
-
-    /**
-     * Resolve the property references in a string
-     *
-     * @param propertyValue the string to be resolved
-     * @return the string with property references replaced by their current
-     *      value.
-     */
-    private String resolve(String propertyValue) {
-        String newValue = propertyValue;
-
-        while (newValue.indexOf("${") != -1) {
-            int index = newValue.indexOf("${");
-            int endIndex = newValue.indexOf("}", index);
-            String propertyName = newValue.substring(index + 2, endIndex);
-            String repValue = (String) properties.get(propertyName);
-
-            newValue = newValue.substring(0, index) +
-                repValue + newValue.substring(endIndex + 1);
-        }
-        return newValue;
-    }
-}
-
diff --git a/proposal/mutant/src/java/bootstrap/org/apache/ant/builder/Builder.java b/proposal/mutant/src/java/bootstrap/org/apache/ant/builder/Builder.java
deleted file mode 100644
index 63f99ba..0000000
--- a/proposal/mutant/src/java/bootstrap/org/apache/ant/builder/Builder.java
+++ /dev/null
@@ -1,221 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.builder;
-import java.io.File;
-import java.util.ArrayList;
-
-import java.util.List;
-
-/**
- * The Builder object builds the code for bootstrap purposes. It invokes the
- * mathods of the required targets in the converted build files.
- *
- * @author Conor MacNeill
- * @created 18 February 2002
- */
-public class Builder {
-    /** The root of the Ant1 source tree */
-    private static final File ANT1_SRC_ROOT = new File("../../src/main");
-    /** the root of the Ant package in the Ant1 source tree */
-    private static final File PACKAGE_ROOT
-         = new File(ANT1_SRC_ROOT, "org/apache/tools/ant");
-    /** The zip utilities root */
-    private static final File ZIP_ROOT
-         = new File(ANT1_SRC_ROOT, "org/apache/tools/zip");
-
-    /** the taskdefs root */
-    private static final File TASKDEFS_ROOT
-         = new File(PACKAGE_ROOT, "taskdefs");
-    /** the types root */
-    private static final File TYPES_ROOT
-         = new File(PACKAGE_ROOT, "types");
-    /** the filters root */
-    private static final File FILTERS_ROOT
-         = new File(PACKAGE_ROOT, "filters");
-    /** the util root */
-    private static final File UTIL_ROOT
-         = new File(PACKAGE_ROOT, "util");
-    /** the input root */
-    private static final File INPUT_ROOT
-         = new File(PACKAGE_ROOT, "input");
-    /** the input root */
-         
-    /** the root forthe depend task's support classes */
-    private static final File DEPEND_ROOT
-         = new File(TASKDEFS_ROOT, "optional/depend");
-
-    /**
-     * The main program - create a builder and run the build
-     *
-     * @param args the command line arguments - not currently used
-     */
-    public static void main(String[] args) {
-        Builder builder = new Builder();
-        builder.runBuild(args);
-    }
-
-    /**
-     * Add all the java files from a given directory.
-     *
-     * @param files the list to which the files are to be added.
-     * @param dir the directory from which the Java files are added.
-     * @param recurse true if subdirectories should be searched.
-     */
-    private void addJavaFiles(List files, File dir, boolean recurse) {
-        File[] javaFiles = dir.listFiles();
-        
-        if (javaFiles != null) {
-            for (int i = 0; i < javaFiles.length; ++i) {
-                if (javaFiles[i].isDirectory() && recurse) {
-                    addJavaFiles(files, javaFiles[i], recurse);
-                } else if (javaFiles[i].getName().endsWith(".java")) {
-                    files.add(javaFiles[i]);
-                }
-            }
-        }
-    }
-    
-    /**
-     * Get the Ant1 files currently required to build a bootstrap build.
-     *
-     * @return an array of files which need to be copied into the bootstrap
-     *      build.
-     */
-    private File[] getAnt1Files() {
-        List files = new ArrayList();
-        addJavaFiles(files, TASKDEFS_ROOT, false);
-        addJavaFiles(files, new File(TASKDEFS_ROOT, "compilers"), true);
-        addJavaFiles(files, new File(TASKDEFS_ROOT, "condition"), true);
-        addJavaFiles(files, DEPEND_ROOT, true);
-        addJavaFiles(files, TYPES_ROOT, true);
-        addJavaFiles(files, FILTERS_ROOT, false);
-        addJavaFiles(files, UTIL_ROOT, false);
-        addJavaFiles(files, new File(UTIL_ROOT, "depend"), false);
-        addJavaFiles(files, new File(UTIL_ROOT, "facade"), true);
-        addJavaFiles(files, ZIP_ROOT, true);
-        addJavaFiles(files, INPUT_ROOT, true);
-
-        files.add(new File(PACKAGE_ROOT, "BuildException.java"));
-        files.add(new File(PACKAGE_ROOT, "Location.java"));
-        files.add(new File(PACKAGE_ROOT, "AntClassLoader.java"));
-        files.add(new File(PACKAGE_ROOT, "BuildListener.java"));
-        files.add(new File(PACKAGE_ROOT, "BuildEvent.java"));
-        files.add(new File(PACKAGE_ROOT, "DirectoryScanner.java"));
-        files.add(new File(PACKAGE_ROOT, "FileScanner.java"));
-        files.add(new File(PACKAGE_ROOT, "PathTokenizer.java"));
-        files.add(new File(PACKAGE_ROOT, "TaskAdapter.java"));
-        files.add(new File(PACKAGE_ROOT, "MatchingTask.java"));
-        files.add(new File(PACKAGE_ROOT, "defaultManifest.mf"));
-        
-        files.add(new File(TASKDEFS_ROOT, "defaults.properties"));
-        files.add(new File(TYPES_ROOT, "defaults.properties"));
-
-        files.add(new File(UTIL_ROOT, "regexp/Regexp.java"));
-        files.add(new File(UTIL_ROOT, "regexp/RegexpMatcher.java"));
-        files.add(new File(UTIL_ROOT, "regexp/RegexpFactory.java"));
-        files.add(new File(UTIL_ROOT, "regexp/RegexpMatcherFactory.java"));
-        files.add(new File(FILTERS_ROOT, "util/ChainReaderHelper.java"));
-        
-        // these should not be included
-        files.remove(new File(TYPES_ROOT, "DataType.java"));
-        files.remove(new File(TASKDEFS_ROOT, "Ant.java"));
-        files.remove(new File(TASKDEFS_ROOT, "CallTarget.java"));
-        files.remove(new File(TASKDEFS_ROOT, "AntStructure.java"));
-        files.remove(new File(TASKDEFS_ROOT, "Recorder.java"));
-        files.remove(new File(TASKDEFS_ROOT, "RecorderEntry.java"));
-        files.remove(new File(TASKDEFS_ROOT, "SendEmail.java"));
-        files.remove(new File(TASKDEFS_ROOT, "Do.java"));
-        files.remove(new File(INPUT_ROOT, "InputRequest.java"));
-        
-        // not needed for bootstrap
-        files.remove(new File(TASKDEFS_ROOT, "Java.java"));
-        files.remove(new File(TASKDEFS_ROOT, "Tar.java"));
-        files.remove(new File(TASKDEFS_ROOT, "Untar.java"));
-        files.remove(new File(TASKDEFS_ROOT, "BZip2.java"));
-        files.remove(new File(TASKDEFS_ROOT, "BUnzip2.java"));
-        files.remove(new File(TASKDEFS_ROOT, "Rmic.java"));
-        files.remove(new File(TASKDEFS_ROOT, "SendEmail.java"));
-        
-        
-        return (File[]) files.toArray(new File[0]);
-    }
-
-    /**
-     * Run the build
-     *
-     * @param args the command line arguments for the build - currently not
-     *      used.
-     */
-    private void runBuild(String[] args) {
-        BuildHelper mainBuild = new BuildHelper();
-        mainBuild.setProperty("dist.dir", "bootstrap");
-        MutantBuilder mutantBuilder = new MutantBuilder();
-        mutantBuilder._init(mainBuild);
-        mutantBuilder.buildsetup(mainBuild);
-        mutantBuilder.init(mainBuild);
-        mutantBuilder.common(mainBuild);
-        mutantBuilder.antcore(mainBuild);
-        mutantBuilder.start(mainBuild);
-        mutantBuilder.frontend(mainBuild);
-        mutantBuilder.systemlib(mainBuild);
-
-        Ant1CompatBuilder ant1Builder = new Ant1CompatBuilder();
-        BuildHelper ant1Build = new BuildHelper();
-        ant1Build.setProperty("dist.dir", "bootstrap");
-        ant1Build.addFileSet("ant1src_tocopy", ANT1_SRC_ROOT, getAnt1Files());
-        ant1Builder._init(ant1Build);
-        ant1Builder.ant1compat(ant1Build);
-    }
-}
-
diff --git a/proposal/mutant/src/java/bootstrap/org/apache/ant/builder/MutantBuilder.java b/proposal/mutant/src/java/bootstrap/org/apache/ant/builder/MutantBuilder.java
deleted file mode 100644
index c7b2a77..0000000
--- a/proposal/mutant/src/java/bootstrap/org/apache/ant/builder/MutantBuilder.java
+++ /dev/null
@@ -1,99 +0,0 @@
-package org.apache.ant.builder;
-public class MutantBuilder {
-    protected void _init(BuildHelper helper) {
-        helper.setProperty("src.dir", "src");
-        helper.setProperty("lib.dir", "lib");
-        helper.setProperty("java.dir", "${src.dir}/java");
-        helper.setProperty("bin.dir", "bin");
-        helper.setProperty("dist.dir", "dist");
-        helper.setProperty("javadocs.dir", "${dist.dir}/javadocs");
-        helper.setProperty("distlib.dir", "${dist.dir}/lib");
-        helper.setProperty("debug", "true");
-        helper.createPath("classpath.parser");
-        helper.addFileSetToPath("classpath.parser", 
-                        "${lib.dir}/parser", "*.jar");
-        helper.createPath("classpath.common");
-        helper.addPathElementToPath("classpath.common", "${distlib.dir}/init.jar");
-        helper.createPath("classpath.antcore");
-        helper.addPathElementToPath("classpath.antcore", "${distlib.dir}/common/common.jar");
-        helper.addPathToPath("classpath.antcore", "classpath.common");
-        helper.addPathToPath("classpath.antcore", "classpath.parser");
-        helper.createPath("classpath.frontend");
-        helper.addPathElementToPath("classpath.frontend", "${distlib.dir}/antcore/antcore.jar");
-        helper.addPathToPath("classpath.frontend", "classpath.antcore");
-        helper.createPath("classpath.start");
-        helper.addPathElementToPath("classpath.start", "${distlib.dir}/init.jar");
-    }
-    protected void buildsetup(BuildHelper helper) {
-        helper.mkdir("${bin.dir}");
-        helper.mkdir("${distlib.dir}");
-        helper.copyFileset("${lib.dir}/parser", "${distlib.dir}/parser");
-    }
-    protected void init(BuildHelper helper) {
-        helper.mkdir("${bin.dir}/init");
-        helper.javac("${java.dir}/init", "${bin.dir}/init", null);
-        helper.jar("${bin.dir}/init", "${distlib.dir}/init.jar",
-                   null, null, null, null);
-    }
-    protected void common(BuildHelper helper) {
-        helper.mkdir("${bin.dir}/common");
-        helper.mkdir("${distlib.dir}/common");
-        helper.javac("${java.dir}/common", "${bin.dir}/common", "classpath.common");
-        helper.jar("${bin.dir}/common", "${distlib.dir}/common/common.jar",
-                   null, null, null, null);
-    }
-    protected void antcore(BuildHelper helper) {
-        helper.mkdir("${bin.dir}/antcore");
-        helper.mkdir("${distlib.dir}/antcore");
-        helper.javac("${java.dir}/antcore", "${bin.dir}/antcore", "classpath.antcore");
-        helper.jar("${bin.dir}/antcore", "${distlib.dir}/antcore/antcore.jar",
-                   null, null, null, null);
-    }
-    protected void frontend(BuildHelper helper) {
-        helper.mkdir("${bin.dir}/frontend");
-        helper.mkdir("${distlib.dir}/frontend");
-        helper.javac("${java.dir}/frontend", "${bin.dir}/frontend", "classpath.frontend");
-        helper.jar("${bin.dir}/frontend", "${distlib.dir}/frontend/frontend.jar",
-                   null, null, null, null);
-        helper.jar("${bin.dir}/frontend", "${distlib.dir}/frontend/cli.jar",
-                   null, null, "frontend.jar", "org.apache.ant.cli.Commandline");
-    }
-    protected void start(BuildHelper helper) {
-        helper.mkdir("${bin.dir}/start");
-        helper.javac("${java.dir}/start", "${bin.dir}/start", "classpath.start");
-        helper.jar("${bin.dir}/start", "${distlib.dir}/start.jar",
-                   null, null, "init.jar", "org.apache.ant.start.Main");
-        helper.jar("${bin.dir}/start", "${distlib.dir}/ant.jar",
-                   null, null, "start.jar", "org.apache.tools.ant.Main");
-    }
-    protected void ant1compat(BuildHelper helper) {
-    }
-    protected void remote(BuildHelper helper) {
-        helper.mkdir("${bin.dir}/remote");
-        helper.javac("${java.dir}/remote", "${bin.dir}/remote", "classpath.start");
-        helper.jar("${bin.dir}/remote", "${distlib.dir}/remote.jar",
-                   null, null, null, "org.apache.ant.remote.RemoteMain");
-    }
-    protected void clean(BuildHelper helper) {
-    }
-    protected void antlibs(BuildHelper helper) {
-    }
-    protected void systemlib(BuildHelper helper) {
-        helper.mkdir("${bin.dir}/antlibs/system");
-        helper.mkdir("${distlib.dir}/syslibs");
-        helper.createPath("classpath.antlibs");
-        helper.addPathElementToPath("classpath.antlibs", "${distlib.dir}/common/common.jar");
-        helper.addPathToPath("classpath.antlibs", "classpath.common");
-        helper.javac("${java.dir}/antlibs/system", "${bin.dir}/antlibs/system", "classpath.antlibs");
-        helper.jar("${bin.dir}/antlibs/system", "${distlib.dir}/syslibs/system.jar",
-                   "${java.dir}/antlibs/system", "antlib.xml", null, null);
-    }
-    protected void main(BuildHelper helper) {
-    }
-    protected void checkstyle(BuildHelper helper) {
-        helper.mkdir("${bin.dir}/check");
-    }
-    protected void javadocs(BuildHelper helper) {
-        helper.mkdir("${javadocs.dir}");
-    }
-}
diff --git a/proposal/mutant/src/java/common/org/apache/ant/common/antlib/AbstractComponent.java b/proposal/mutant/src/java/common/org/apache/ant/common/antlib/AbstractComponent.java
deleted file mode 100644
index 1afc960..0000000
--- a/proposal/mutant/src/java/common/org/apache/ant/common/antlib/AbstractComponent.java
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.common.antlib;
-
-import org.apache.ant.common.util.ExecutionException;
-
-/**
- * Abstract implementation of the ExecutionComponent
- *
- * @author Conor MacNeill
- * @created 5 February 2002
- */
-public abstract class AbstractComponent implements ExecutionComponent {
-    /** The components's context */
-    private AntContext context;
-
-    /**
-     * the type of the component. The type is the name of the component in
-     * the build file. This may be different from the name under which this
-     * componenent is known in its library due to aliasing
-     */
-    private String componentType;
-
-    /**
-     * Get this component's context
-     *
-     * @return the component context
-     */
-    public AntContext getAntContext() {
-        return context;
-    }
-
-    /**
-     * Gets the componentType of the AbstractComponent
-     *
-     * @return the componentType value
-     */
-    public String getComponentType() {
-        return componentType;
-    }
-
-    /**
-     * Initialise the component. The component may use the AntContext to
-     * request services from the Ant core.
-     *
-     * @param context the component's context
-     * @param componentType the type of the component
-     * @exception ExecutionException if initialisation fails
-     */
-    public void init(AntContext context, String componentType)
-         throws ExecutionException {
-        this.context = context;
-        this.componentType = componentType;
-    }
-
-    /**
-     * Validate the component. This is called after the element has been
-     * configured from its build model. The element may perform validation
-     * of its configuration
-     *
-     * @exception ExecutionException if validation fails
-     */
-    public void validateComponent() throws ExecutionException {
-        // no validation by default
-    }
-
-    /**
-     * Short cut to get a core service instance
-     *
-     * @param serviceClass the required interface of which an instance is
-     *      required
-     * @return the core's instance of the requested service
-     * @exception ExecutionException if the core does not support the
-     *      requested service
-     */
-    protected Object getCoreService(Class serviceClass)
-         throws ExecutionException {
-        return context.getCoreService(serviceClass);
-    }
-
-    /**
-     * Log a message as a build event
-     *
-     * @param message the message to be logged
-     * @param level the priority level of the message
-     */
-    protected void log(String message, int level) {
-        context.log(message, level);
-    }
-}
-
diff --git a/proposal/mutant/src/java/common/org/apache/ant/common/antlib/AbstractConverter.java b/proposal/mutant/src/java/common/org/apache/ant/common/antlib/AbstractConverter.java
deleted file mode 100644
index 2673a77..0000000
--- a/proposal/mutant/src/java/common/org/apache/ant/common/antlib/AbstractConverter.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.common.antlib;
-
-
-/**
- * Abstract implementation of the Converter interface
- *
- * @author Conor MacNeill
- */
-public abstract class AbstractConverter implements Converter {
-    /** The converters's context */
-    private AntContext context;
-
-    /**
-     * Initialise the converter. The converter may use the AntContext to request
-     * services from the Ant core.
-     *
-     * @param context the Converter's context
-     */
-    public void init(AntContext context) {
-        this.context = context;
-    }
-
-    /**
-     * Get this converter's context
-     *
-     * @return the converter context
-     */
-    protected AntContext getContext() {
-        return context;
-    }
-
-    /**
-     * This method allows a converter to indicate whether it can create 
-     * the given type which is a sub-type of one of the converter's main
-     * types indicated in getTypes. Most converters can return false here.
-     *
-     * @param subType the sub-type
-     * @return true if this converter can convert a string representation to 
-     *              the given subclass of one of its main class
-     */
-    public boolean canConvertSubType(Class subType) {
-        return false;
-    }
-
-}
-
diff --git a/proposal/mutant/src/java/common/org/apache/ant/common/antlib/AbstractTask.java b/proposal/mutant/src/java/common/org/apache/ant/common/antlib/AbstractTask.java
deleted file mode 100644
index 2703dab..0000000
--- a/proposal/mutant/src/java/common/org/apache/ant/common/antlib/AbstractTask.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.common.antlib;
-import org.apache.ant.common.event.MessageLevel;
-import org.apache.ant.common.util.ExecutionException;
-
-/**
- * Abstract implementation of the Task interface
- *
- * @author Conor MacNeill
- * @created 16 January 2002
- */
-public abstract class AbstractTask extends AbstractComponent implements Task {
-    /** The name of this task. */
-    private String taskName;
-
-    /**
-     * Sets the taskName of the AbstractTask
-     *
-     * @param taskName the new taskName value
-     */
-    public final void setTaskName(String taskName) {
-        this.taskName = taskName;
-    }
-
-    /**
-     * Gets the taskName of the AbstractTask
-     *
-     * @return the taskName value
-     */
-    public final String getTaskName() {
-        return taskName;
-    }
-
-    /**
-     * Handle Output produced by the task. When a task prints to System.out
-     * the container may catch this and redirect the content back to the
-     * task by invoking this method. This method must NOT call System.out,
-     * directly or indirectly.
-     *
-     * @param line The line of content produce by the task
-     * @exception ExecutionException if the output cannot be handled.
-     */
-    public void handleSystemOut(String line) throws ExecutionException {
-        // default behaviout is to log at INFO level
-        log(line, MessageLevel.MSG_INFO);
-    }
-
-    /**
-     * Handle error information produced by the task. When a task prints to
-     * System.err the container may catch this and redirect the content back
-     * to the task by invoking this method. This method must NOT call
-     * System.err, directly or indirectly.
-     *
-     * @param line The line of error info produce by the task
-     * @exception ExecutionException if the output cannot be handled.
-     */
-    public void handleSystemErr(String line) throws ExecutionException {
-        // default behaviout is to log at WARN level
-        log(line, MessageLevel.MSG_WARN);
-    }
-}
-
diff --git a/proposal/mutant/src/java/common/org/apache/ant/common/antlib/AntContext.java b/proposal/mutant/src/java/common/org/apache/ant/common/antlib/AntContext.java
deleted file mode 100644
index 02770ce..0000000
--- a/proposal/mutant/src/java/common/org/apache/ant/common/antlib/AntContext.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.common.antlib;
-import org.apache.ant.common.util.ExecutionException;
-import org.apache.ant.common.util.Location;
-
-/**
- * The AntContext is the interface through which the Ant container and the
- * Ant components communicate. Common operations are provided directly in
- * this interface. Other core services are available through the generic
- * service objects supported by the core.
- *
- * @author Conor MacNeill
- * @created 14 January 2002
- */
-public interface AntContext {
-    /**
-     * Log a message
-     *
-     * @param message the message to be logged
-     * @param level the priority level of the message
-     */
-    void log(String message, int level);
-
-    /**
-     * Get a instance of the specified service interface with which to
-     * interact with the core.
-     *
-     * @param serviceInterfaceClass the class object for the required
-     *      interface
-     * @return an instance of the requested interface
-     * @exception ExecutionException if the core service is not supported
-     */
-    Object getCoreService(Class serviceInterfaceClass)
-         throws ExecutionException;
-
-    /**
-     * Gets the location associated with the AntContext
-     *
-     * @return the location
-     */
-    Location getLocation();
-    
-    /**
-     * Get the classloader associated with this context
-     *
-     * @return a classloader instance.
-     */
-    ClassLoader getClassLoader();
-}
-
diff --git a/proposal/mutant/src/java/common/org/apache/ant/common/antlib/AntLibFactory.java b/proposal/mutant/src/java/common/org/apache/ant/common/antlib/AntLibFactory.java
deleted file mode 100644
index 4d0fe43..0000000
--- a/proposal/mutant/src/java/common/org/apache/ant/common/antlib/AntLibFactory.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.common.antlib;
-import org.apache.ant.common.util.ExecutionException;
-
-/**
- * An Ant Library Factory is a class is used to create instances of the
- * classes in the AntLibrary. An separate instance of the factory will be
- * created by each ExecutiuonFrame which uses this library. The factory will
- * be created before any instances are required.
- *
- * @author Conor MacNeill
- * @created 31 January 2002
- */
-public interface AntLibFactory {
-    /**
-     * Initialise the factory
-     *
-     * @param context the factory's context
-     * @exception ExecutionException if the factory cannot be initialized
-     */
-    void init(AntContext context) throws ExecutionException;
-
-    /**
-     * Create an instance of the given component class
-     *
-     * @param componentClass the class for which an instance is required
-     * @param localName the name within the library under which the task is
-     *      defined
-     * @return an instance of the required class
-     * @exception InstantiationException if the class cannot be instantiated
-     * @exception IllegalAccessException if the instance cannot be accessed
-     * @exception ExecutionException if there is a problem creating the task
-     */
-    Object createComponent(Class componentClass, String localName)
-         throws InstantiationException, IllegalAccessException,
-        ExecutionException;
-
-    /**
-     * Create an instance of the given converter class
-     *
-     * @param converterClass the converter class for which an instance is
-     *      required
-     * @return a converter instance
-     * @exception InstantiationException if the class cannot be instantiated
-     * @exception IllegalAccessException if the instance cannot be accessed
-     * @exception ExecutionException if there is a problem creating the
-     *      converter
-     */
-    Converter createConverter(Class converterClass)
-         throws InstantiationException, IllegalAccessException,
-        ExecutionException;
-
-
-    /**
-     * Register an element which has been created as the result of calling a
-     * create method.
-     *
-     * @param createdElement the element that the component created
-     * @exception ExecutionException if there is a problem registering the
-     *      element
-     */
-    void registerCreatedElement(Object createdElement)
-         throws ExecutionException;
-
-}
-
diff --git a/proposal/mutant/src/java/common/org/apache/ant/common/antlib/Converter.java b/proposal/mutant/src/java/common/org/apache/ant/common/antlib/Converter.java
deleted file mode 100644
index f87c917..0000000
--- a/proposal/mutant/src/java/common/org/apache/ant/common/antlib/Converter.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.common.antlib;
-
-import org.apache.ant.common.util.ExecutionException;
-
-/**
- * Convert between a string and a data type
- *
- * @author Conor MacNeill
- * @created 19 January 2002
- */
-public interface Converter {
-    /**
-     * Convert a string from the value given to an instance of the given
-     * type.
-     *
-     * @param value The value to be converted
-     * @param type the desired type of the converted object
-     * @return the value of the converted object
-     * @exception ExecutionException if the conversion cannot be made
-     */
-    Object convert(String value, Class type) throws ExecutionException;
-
-    /**
-     * Initialise the converter. The converter may use the AntContext to
-     * request services from the Ant core.
-     *
-     * @param context the Converter's AntContext
-     */
-    void init(AntContext context);
-
-    /**
-     * Get the list of classes this converter is able to convert to.
-     *
-     * @return an array of Class objects representing the classes this
-     *      converter handles.
-     */
-    Class[] getTypes();
-
-
-    /**
-     * This method allows a converter to indicate whether it can create 
-     * the given type which is a sub-type of one of the converter's main
-     * types indicated in getTypes. Most converters can return false here.
-     *
-     * @param subType the sub-type
-     * @return true if this converter can convert a string representation to 
-     *              the given subclass of one of its main class
-     */
-    boolean canConvertSubType(Class subType);
-}
-
diff --git a/proposal/mutant/src/java/common/org/apache/ant/common/antlib/DataType.java b/proposal/mutant/src/java/common/org/apache/ant/common/antlib/DataType.java
deleted file mode 100644
index d941160..0000000
--- a/proposal/mutant/src/java/common/org/apache/ant/common/antlib/DataType.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.common.antlib;
-
-/**
- * This is the interface used to descibe Ant types. A class used as a
- * datatype which implements this interface will be given an AntContext
- * instance through which it may interact with the Ant core.
- *
- * @author Conor MacNeill
- * @created 20 January 2002
- */
-public interface DataType extends ExecutionComponent {
-}
-
diff --git a/proposal/mutant/src/java/common/org/apache/ant/common/antlib/DeferredTask.java b/proposal/mutant/src/java/common/org/apache/ant/common/antlib/DeferredTask.java
deleted file mode 100644
index 46dd8b2..0000000
--- a/proposal/mutant/src/java/common/org/apache/ant/common/antlib/DeferredTask.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.common.antlib;
-
-/**
- * A deferred task is one where the task task responsibility for configuring
- * itself at execution time. The attributes and nested elements are stored
- * by the task for later use
- *
- * @author Conor MacNeill
- * @created 11 February 2002
- */
-public interface DeferredTask extends Task {
-    /**
-     * Sets the attribute of the DeferredTask
-     *
-     * @param name the attribute name
-     * @param attributeValue the new attribute value
-     */
-    void setAttribute(String name, String attributeValue);
-
-    /**
-     * Add a nested element
-     *
-     * @param nestedElementName the name of the nested element
-     * @param value the object which is the nested element
-     */
-    void addElement(String nestedElementName, Object value);
-
-    /**
-     * Add any text content
-     *
-     * @param text the value of the content
-     */
-    void addText(String text);
-}
-
diff --git a/proposal/mutant/src/java/common/org/apache/ant/common/antlib/ExecutionComponent.java b/proposal/mutant/src/java/common/org/apache/ant/common/antlib/ExecutionComponent.java
deleted file mode 100644
index 4240c35..0000000
--- a/proposal/mutant/src/java/common/org/apache/ant/common/antlib/ExecutionComponent.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.common.antlib;
-import org.apache.ant.common.util.ExecutionException;
-
-/**
- * An execution component is a component from an AntLibrary which is used in
- * the execution of an Ant build. A component can have a context.
- *
- * @author Conor MacNeill
- * @created 1 February 2002
- */
-public interface ExecutionComponent {
-    /**
-     * Initialise the task. The task may use the AntContext to request
-     * services from the Ant core.
-     *
-     * @param context the Task's context
-     * @param componentType the type of the component
-     * @exception ExecutionException if the component cannot be initialised
-     */
-    void init(AntContext context, String componentType)
-         throws ExecutionException;
-
-    /**
-     * Validate the component. This is called after the element has been
-     * configured from its build model. The element may perform validation
-     * of its configuration
-     *
-     * @exception ExecutionException if the component is not validly
-     *      configured
-     */
-    void validateComponent() throws ExecutionException;
-
-    /**
-     * Get the AntContext associated with this component
-     *
-     * @return the component's context
-     */
-    AntContext getAntContext();
-
-    /**
-     * Get the type of the component in the build file
-     *
-     * @return the type of the component
-     */
-    String getComponentType();
-}
-
diff --git a/proposal/mutant/src/java/common/org/apache/ant/common/antlib/StandardLibFactory.java b/proposal/mutant/src/java/common/org/apache/ant/common/antlib/StandardLibFactory.java
deleted file mode 100644
index 81b5f55..0000000
--- a/proposal/mutant/src/java/common/org/apache/ant/common/antlib/StandardLibFactory.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.common.antlib;
-import org.apache.ant.common.util.ExecutionException;
-
-/**
- * Standard Ant Library Factory
- *
- * @author Conor MacNeill
- * @created 1 February 2002
- * @see AntLibFactory
- */
-public class StandardLibFactory implements AntLibFactory {
-    /** The context the factory can use to interact with the core */
-    private AntContext context;
-
-    /**
-     * Create an instance of the given component class
-     *
-     * @param componentClass the class for which an instance is required
-     * @param localName the name within the library under which the task is
-     *      defined
-     * @return an instance of the required class
-     * @exception InstantiationException if the class cannot be instantiated
-     * @exception IllegalAccessException if the instance cannot be accessed
-     * @exception ExecutionException if there is a problem creating the task
-     */
-    public Object createComponent(Class componentClass, String localName)
-         throws InstantiationException, IllegalAccessException,
-        ExecutionException {
-        return componentClass.newInstance();
-    }
-
-    /**
-     * Initilaise the factory
-     *
-     * @param context the factory's context
-     * @exception ExecutionException if the factory cannot be initialized
-     */
-    public void init(AntContext context) throws ExecutionException {
-        this.context = context;
-    }
-
-    /**
-     * Create an instance of the given converter class
-     *
-     * @param converterClass the converter class for which an instance is
-     *      required
-     * @return a converter instance
-     * @exception InstantiationException if the class cannot be instantiated
-     * @exception IllegalAccessException if the instance cannot be accessed
-     * @exception ExecutionException if there is a problem creating the
-     *      converter
-     */
-    public Converter createConverter(Class converterClass)
-         throws InstantiationException, IllegalAccessException,
-        ExecutionException {
-        return (Converter) converterClass.newInstance();
-    }
-
-    /**
-     * Register an element which has been created as the result of calling a
-     * create method.
-     *
-     * @param createdElement the element that the component created
-     * @exception ExecutionException if there is a problem registering the
-     *      element
-     */
-    public void registerCreatedElement(Object createdElement)
-         throws ExecutionException {
-        // do nothing
-    }
-
-    /**
-     * Gets the context of the factory
-     *
-     * @return the context object
-     */
-    protected AntContext getContext() {
-        return context;
-    }
-
-}
-
diff --git a/proposal/mutant/src/java/common/org/apache/ant/common/antlib/Task.java b/proposal/mutant/src/java/common/org/apache/ant/common/antlib/Task.java
deleted file mode 100644
index 67d3462..0000000
--- a/proposal/mutant/src/java/common/org/apache/ant/common/antlib/Task.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.common.antlib;
-import org.apache.ant.common.util.ExecutionException;
-
-/**
- * The Task interface defines the methods that a Task must implement.
- *
- * @author Conor MacNeill
- * @created 16 January 2002
- */
-public interface Task extends ExecutionComponent {
-    /**
-     * Execute the task.
-     *
-     * @exception ExecutionException if the task has a problem executing.
-     */
-    void execute() throws ExecutionException;
-
-    /**
-     * Sets the taskName of the Task
-     *
-     * @param name the new taskName value
-     */
-    void setTaskName(String name);
-
-    /**
-     * Gets the taskName of the Task
-     *
-     * @return the taskName value
-     */
-    String getTaskName();
-
-    /**
-     * Handle Output produced by the task. When a task prints to System.out
-     * the container may catch this and redirect the content back to the
-     * task by invoking this method. This method must NOT call System.out,
-     * directly or indirectly.
-     *
-     * @param line The line of content produce by the task
-     * @exception ExecutionException if the output cannot be handled.
-     */
-    void handleSystemOut(String line) throws ExecutionException;
-
-    /**
-     * Handle error information produced by the task. When a task prints to
-     * System.err the container may catch this and redirect the content back
-     * to the task by invoking this method. This method must NOT call
-     * System.err, directly or indirectly.
-     *
-     * @param line The line of error info produce by the task
-     * @exception ExecutionException if the output cannot be handled.
-     */
-    void handleSystemErr(String line) throws ExecutionException;
-}
-
diff --git a/proposal/mutant/src/java/common/org/apache/ant/common/antlib/TaskContainer.java b/proposal/mutant/src/java/common/org/apache/ant/common/antlib/TaskContainer.java
deleted file mode 100644
index 06cdaf6..0000000
--- a/proposal/mutant/src/java/common/org/apache/ant/common/antlib/TaskContainer.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.common.antlib;
-import org.apache.ant.common.util.ExecutionException;
-
-/**
- * A TaskContainer is an object which can contain and manage ExecutionTasks.
- *
- * @author Conor MacNeill
- * @created 19 January 2002
- */
-public interface TaskContainer {
-    /**
-     * Add a task to the container.
-     *
-     * @param task the task tobe added
-     * @exception ExecutionException if the container cannot add the task
-     */
-    void addNestedTask(Task task) throws ExecutionException;
-}
-
diff --git a/proposal/mutant/src/java/common/org/apache/ant/common/event/BuildEvent.java b/proposal/mutant/src/java/common/org/apache/ant/common/event/BuildEvent.java
deleted file mode 100644
index 6d4fafa..0000000
--- a/proposal/mutant/src/java/common/org/apache/ant/common/event/BuildEvent.java
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.common.event;
-
-import java.util.EventObject;
-
-/**
- * A BuildEvent indicates the occurence of a significant event in the build.
- * All build events come from an Frame or an ExecutionManager.
- * There are a number of different types of event and they will generally be
- * associated with some build element from the build model.
- *
- * @author Conor MacNeill
- * @created 15 January 2002
- */
-public class BuildEvent extends EventObject {
-
-    /** Build Started Event type */
-    public static final int BUILD_STARTED = 1;
-    /** Build Finished Event Type */
-    public static final int BUILD_FINISHED = 2;
-    /** Start of target event type */
-    public static final int TARGET_STARTED = 3;
-    /** Target finished event type */
-    public static final int TARGET_FINISHED = 4;
-    /** Start of task event type */
-    public static final int TASK_STARTED = 5;
-    /** end of task event type */
-    public static final int TASK_FINISHED = 6;
-    /** message event type */
-    public static final int MESSAGE = 7;
-
-    /** The type of this event */
-    private int eventType;
-    /** The cause of this event if appropriate */
-    private Throwable cause = null;
-    /** message associated wuth this event */
-    private String message = null;
-    /** The priority of this message */
-    private int messagePriority;
-
-    /**
-     * Create a build event.
-     *
-     * @param eventType the type of the buildEvent.
-     * @param source the element with which this event is associated
-     */
-    public BuildEvent(Object source, int eventType) {
-        super(source);
-        this.eventType = eventType;
-    }
-
-    /**
-     * Create a build event with an associated exception.
-     *
-     * @param eventType the type of the buildEvent.
-     * @param cause An exception if associated with the event
-     * @param source the object with which this event is associated
-     */
-    public BuildEvent(Object source, int eventType,
-                      Throwable cause) {
-        this(source, eventType);
-        this.cause = cause;
-    }
-
-    /**
-     * Create a build event for a message
-     *
-     * @param source the object with which the event is associated.
-     * @param message the message associated with this event
-     * @param priority the message priority
-     */
-    public BuildEvent(Object source, String message,
-                      int priority) {
-        super(source);
-        this.eventType = MESSAGE;
-        this.message = message;
-        this.messagePriority = priority;
-    }
-
-    /**
-     * Get the type of this event
-     *
-     * @return the event type
-     */
-    public int getEventType() {
-        return eventType;
-    }
-
-    /**
-     * Returns the logging message. This field will only be set for
-     * "messageLogged" events.
-     *
-     * @return the message value
-     */
-    public String getMessage() {
-        return message;
-    }
-
-    /**
-     * Returns the priority of the logging message. This field will only be
-     * set for "messageLogged" events.
-     *
-     * @return the priority value
-     */
-    public int getPriority() {
-        return messagePriority;
-    }
-
-    /**
-     * Returns the exception that was thrown, if any. This field will only
-     * be set for "taskFinished", "targetFinished", and "buildFinished"
-     * events.
-     *
-     * @return the cause value
-     */
-    public Throwable getCause() {
-        return cause;
-    }
-
-}
-
diff --git a/proposal/mutant/src/java/common/org/apache/ant/common/event/BuildListener.java b/proposal/mutant/src/java/common/org/apache/ant/common/event/BuildListener.java
deleted file mode 100644
index 63a1384..0000000
--- a/proposal/mutant/src/java/common/org/apache/ant/common/event/BuildListener.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.common.event;
-
-import java.util.EventListener;
-
-/**
- * Classes that implement this interface will be notified when things
- * happend during a build.
- *
- * @author Conor MacNeill
- * @created 15 January 2002
- * @see BuildEvent
- */
-public interface BuildListener extends EventListener {
-    /**
-     * Fired before any targets are started.
-     *
-     * @param event the build event for this notification
-     */
-    void buildStarted(BuildEvent event);
-
-    /**
-     * Fired after the last target has finished. This event will still be
-     * thrown if an error occured during the build.
-     *
-     * @param event the build event for this notification
-     */
-    void buildFinished(BuildEvent event);
-
-    /**
-     * Fired when a target is started.
-     *
-     * @param event the build event for this notification
-     */
-    void targetStarted(BuildEvent event);
-
-    /**
-     * Fired when a target has finished. This event will still be thrown if
-     * an error occured during the build.
-     *
-     * @param event the build event for this notification
-     */
-    void targetFinished(BuildEvent event);
-
-    /**
-     * Fired when a task is started.
-     *
-     * @param event the build event for this notification
-     */
-    void taskStarted(BuildEvent event);
-
-    /**
-     * Fired when a task has finished. This event will still be throw if an
-     * error occured during the build.
-     *
-     * @param event the build event for this notification
-     */
-    void taskFinished(BuildEvent event);
-
-    /**
-     * Fired whenever a message is logged.
-     *
-     * @param event the build event for this notification
-     */
-    void messageLogged(BuildEvent event);
-}
-
diff --git a/proposal/mutant/src/java/common/org/apache/ant/common/event/BuildListenerAdapter.java b/proposal/mutant/src/java/common/org/apache/ant/common/event/BuildListenerAdapter.java
deleted file mode 100644
index 4713bb2..0000000
--- a/proposal/mutant/src/java/common/org/apache/ant/common/event/BuildListenerAdapter.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.common.event;
-
-/**
- * Abstract adapter for build listeners which don't want to implement all of
- * the BuildListener methods
- *
- * @author    Conor MacNeill
- * @created   9 April 2002
- */
-public abstract class BuildListenerAdapter implements BuildListener {
-    /**
-     * Fired before any targets are started.
-     *
-     * @param event  the build event for this notification
-     */
-    public void buildStarted(BuildEvent event) {
-    }
-
-
-    /**
-     * Fired after the last target has finished. This event will still be
-     * thrown if an error occured during the build.
-     *
-     * @param event  the build event for this notification
-     */
-    public void buildFinished(BuildEvent event) {
-    }
-
-
-
-    /**
-     * Fired when a target is started.
-     *
-     * @param event  the build event for this notification
-     */
-    public void targetStarted(BuildEvent event) {
-    }
-
-
-
-    /**
-     * Fired when a target has finished. This event will still be thrown if an
-     * error occured during the build.
-     *
-     * @param event  the build event for this notification
-     */
-    public void targetFinished(BuildEvent event) {
-    }
-
-
-
-    /**
-     * Fired when a task is started.
-     *
-     * @param event  the build event for this notification
-     */
-    public void taskStarted(BuildEvent event) {
-    }
-
-
-
-    /**
-     * Fired when a task has finished. This event will still be throw if an
-     * error occured during the build.
-     *
-     * @param event  the build event for this notification
-     */
-    public void taskFinished(BuildEvent event) {
-    }
-
-
-
-    /**
-     * Fired whenever a message is logged.
-     *
-     * @param event  the build event for this notification
-     */
-    public void messageLogged(BuildEvent event) {
-    }
-
-}
-
diff --git a/proposal/mutant/src/java/common/org/apache/ant/common/event/MessageLevel.java b/proposal/mutant/src/java/common/org/apache/ant/common/event/MessageLevel.java
deleted file mode 100644
index ac7b2aa..0000000
--- a/proposal/mutant/src/java/common/org/apache/ant/common/event/MessageLevel.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.common.event;
-
-/**
- * The levels at which a log message may be sent.
- *
- * @author Conor MacNeill
- * @created 16 January 2002
- */
-public class MessageLevel {
-    /** Error message level */
-    public static final int MSG_ERR = 0;
-    /** Warnign message level */
-    public static final int MSG_WARN = 1;
-    /** Informational message level */
-    public static final int MSG_INFO = 2;
-    /** Verbose message level */
-    public static final int MSG_VERBOSE = 3;
-    /** Debug Message level */
-    public static final int MSG_DEBUG = 4;
-}
-
diff --git a/proposal/mutant/src/java/common/org/apache/ant/common/input/InputRequest.java b/proposal/mutant/src/java/common/org/apache/ant/common/input/InputRequest.java
deleted file mode 100644
index d4c50a5..0000000
--- a/proposal/mutant/src/java/common/org/apache/ant/common/input/InputRequest.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.ant.common.input;
-
-/**
- * Encapsulates an input request.
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- * @version $Revision$
- * @since Ant 1.5
- */
-public class InputRequest {
-    /** Prompt to show the user */
-    private String prompt;
-    
-    /** Input collected from user */
-    private String input;
-
-    /**
-     * @param prompt The prompt to show to the user.  Must not be null.
-     */
-    public InputRequest(String prompt) {
-        if (prompt == null) {
-            throw new IllegalArgumentException("prompt must not be null");
-        }
-        
-        this.prompt = prompt;
-    }
-
-    /**
-     * Retrieves the prompt text.
-     *
-     * @return the prompt text.
-     */
-    public String getPrompt() {
-        return prompt;
-    }
-
-    /**
-     * Sets the user provided input.
-     *
-     * @param input the user provided input.
-     */
-    public void setInput(String input) {
-        this.input = input;
-    }
-    
-    /**
-     * Is the user input valid?
-     *
-     * @return true if the input is valid.
-     */
-    public boolean isInputValid() {
-        return true;
-    }
-
-    /**
-     * Retrieves the user input.
-     *
-     * @return the user's input.
-     */
-    public String getInput() {
-        return input;
-    }
-}
diff --git a/proposal/mutant/src/java/common/org/apache/ant/common/model/BuildElement.java b/proposal/mutant/src/java/common/org/apache/ant/common/model/BuildElement.java
deleted file mode 100644
index 2a93a29..0000000
--- a/proposal/mutant/src/java/common/org/apache/ant/common/model/BuildElement.java
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.common.model;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.ant.common.util.Location;
-
-/**
- * A BuildElement is a holder of configuration information for an element of
- * the build. BuildElements may be grouped into a hierarchy to capture any
- * level of element nesting.
- *
- * @author Conor MacNeill
- * @created 20 January 2002
- */
-public class BuildElement extends ModelElement {
-    /** The attributes of this build element */
-    private Map attributes = new HashMap();
-
-    /** The element's name or type  */
-    private String type;
-
-    /** The nested task elements that make up this task element.  */
-    private List nestedElements = new ArrayList();
-
-    /** The content (text) of this element */
-    private String text = "";
-
-    /**
-     * Create a Build Element of the given type
-     *
-     * @param location the location of the element
-     * @param type the element's type
-     */
-    public BuildElement(Location location, String type) {
-        super(location);
-        this.type = type;
-    }
-
-    /**
-     * Get the text of this element
-     *
-     * @return the elements's text.
-     */
-    public String getText() {
-        return text;
-    }
-
-    /**
-     * Get an iterator over this element's nested elements
-     *
-     * @return an iterator which provides BuildElement instances
-     */
-    public Iterator getNestedElements() {
-        return nestedElements.iterator();
-    }
-
-    /**
-     * Get the type of this element
-     *
-     * @return the element's type
-     */
-    public String getType() {
-        return type;
-    }
-
-    /**
-     * Get an iterator over the elements's attributes
-     *
-     * @return an iterator which provide's attribute names
-     */
-    public Iterator getAttributeNames() {
-        return attributes.keySet().iterator();
-    }
-
-    /**
-     * Get the value of an attribute.
-     *
-     * @param attributeName the name of the attribute
-     * @return the value of the attribute or null if there is no such
-     *      attribute.
-     */
-    public String getAttributeValue(String attributeName) {
-        return (String) attributes.get(attributeName);
-    }
-
-    /**
-     * Add text to this element.
-     *
-     * @param text the element text to add.
-     */
-    public void addText(String text) {
-        this.text += text;
-    }
-
-    /**
-     * Add a nested element to this element
-     *
-     * @param nestedElement the build element to be added.
-     */
-    public void addNestedElement(BuildElement nestedElement) {
-        nestedElements.add(nestedElement);
-    }
-
-    /**
-     * Add an attribute to this element
-     *
-     * @param attributeName the name of the attribute
-     * @param attributeValue the attribute's value.
-     */
-    public void addAttribute(String attributeName, String attributeValue) {
-        attributes.put(attributeName, attributeValue);
-    }
-}
-
diff --git a/proposal/mutant/src/java/common/org/apache/ant/common/model/ModelElement.java b/proposal/mutant/src/java/common/org/apache/ant/common/model/ModelElement.java
deleted file mode 100644
index 4c84b12..0000000
--- a/proposal/mutant/src/java/common/org/apache/ant/common/model/ModelElement.java
+++ /dev/null
@@ -1,197 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.common.model;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-
-import org.apache.ant.common.util.Location;
-
-/**
- * A ModelElement is an element of a build model. A location may be
- * associated with the model element for error reporting and debugging
- * purposes.
- *
- * @author Conor MacNeill
- * @created 11 January 2002
- */
-public abstract class ModelElement {
-    /** The aspects defined for this element. */
-    private Map aspectMaps;
-
-    /** The starting location of this element */
-    private Location location = Location.UNKNOWN_LOCATION;
-    
-    /** The ending location of this element */
-    private Location endLocation = Location.UNKNOWN_LOCATION;
-
-    /** A comment associated with this element, if any */
-    private String comment;
-
-    /**
-     * Create a model element giving its location.
-     *
-     * @param location identifies where this element is defined
-     */
-    public ModelElement(Location location) {
-        this.location = location;
-    }
-
-    /**
-     * Set a comment associated with this element
-     *
-     * @param comment the comment to be associated with this element.
-     */
-    public void setComment(String comment) {
-        this.comment = comment;
-    }
-
-    /**
-     * Set the end location of this element
-     *
-     * @param endLocation the location where this element's definition ends
-     */
-    public void setEndLocation(Location endLocation) {
-        this.endLocation = endLocation;
-    }
-    
-    /**
-     * Set the aspects of this element
-     *
-     * @param aspects a Map of apects that relate to this model element.
-     */
-    public void setAspects(Map aspects) {
-        aspectMaps = new HashMap();
-        for (Iterator i = aspects.keySet().iterator(); i.hasNext();) {
-            String aspectName = (String) i.next();
-            int separator = aspectName.indexOf(":");
-            if (separator != -1) {
-                String prefix = aspectName.substring(0, separator);
-                String name = aspectName.substring(separator + 1);
-                if (prefix.length() != 0 && name.length() != 0) {
-                    Map prefixMap = (Map) aspectMaps.get(prefix);
-                    if (prefixMap == null) {
-                        prefixMap = new HashMap();
-                        aspectMaps.put(prefix, prefixMap);
-                    }
-                    prefixMap.put(name, aspects.get(aspectName));
-                }
-            }
-        }
-    }
-
-    /**
-     * Get the location of the source where this element is defined
-     *
-     * @return the element's location
-     */
-    public Location getLocation() {
-        return location;
-    }
-
-    /**
-     * Get the location of the source where this element's definition fiunishes
-     *
-     * @return the element's end location
-     */
-    public Location getEndLocation() {
-        return endLocation;
-    }
-
-    /**
-     * Get the comment associated with this element.
-     *
-     * @return the element's comment which may be null.
-     */
-    public String getComment() {
-        return comment;
-    }
-
-    /**
-     * Get an iterator on the aspects which have been given values on this
-     * element
-     *
-     * @return an iterator of Strings , being the aspects which have been
-     *      given values on this element.
-     */
-    public Iterator getAspectNames() {
-        return aspectMaps.keySet().iterator();
-    }
-
-    /**
-     * Get the set of attribute values related to the given aspect
-     *
-     * @param aspectPrefix the aspect identifier
-     * @return a map of the attribute values for the given aspect.
-     */
-    public Map getAspectAttributes(String aspectPrefix) {
-        return (Map) aspectMaps.get(aspectPrefix);
-    }
-
-    /**
-     * Get the value of a single aspect attribute
-     *
-     * @param aspectPrefix the prefix which identifies the aspectr
-     * @param keyName the attribute name
-     * @return the aspect value
-     */
-    public String getAspectValue(String aspectPrefix, String keyName) {
-        Map aspectAttributes = getAspectAttributes(aspectPrefix);
-        if (aspectAttributes == null) {
-            return null;
-        }
-        return (String) aspectAttributes.get(keyName);
-    }
-}
-
diff --git a/proposal/mutant/src/java/common/org/apache/ant/common/model/ModelException.java b/proposal/mutant/src/java/common/org/apache/ant/common/model/ModelException.java
deleted file mode 100644
index 32212a1..0000000
--- a/proposal/mutant/src/java/common/org/apache/ant/common/model/ModelException.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.common.model;
-
-import org.apache.ant.common.util.AntException;
-import org.apache.ant.common.util.Location;
-
-/**
- * A model exception is thrown when an operation is attempted which would
- * violate the integrity of the Project/Target/Task object model
- *
- * @author Conor MacNeill
- * @created 16 January 2002
- */
-public class ModelException extends AntException {
-    /**
-     * Constructs an exception with the given descriptive message.
-     *
-     * @param msg Description of or information about the exception.
-     */
-    public ModelException(String msg) {
-        super(msg);
-    }
-
-    /**
-     * Constructs an exception with the given descriptive message and a
-     * location in a file.
-     *
-     * @param msg Description of or information about the exception.
-     * @param location Location in the project file where the error occured.
-     */
-    public ModelException(String msg, Location location) {
-        super(msg, location);
-    }
-
-    /**
-     * Constructs an exception with the given message and exception as a
-     * root cause.
-     *
-     * @param msg Description of or information about the exception.
-     * @param cause Throwable that might have cause this one.
-     */
-    public ModelException(String msg, Throwable cause) {
-        super(msg, cause);
-    }
-
-    /**
-     * Constructs an exception with the given message and exception as a
-     * root cause and a location in a file.
-     *
-     * @param msg Description of or information about the exception.
-     * @param cause Exception that might have cause this one.
-     * @param location Location in the project file where the error occured.
-     */
-    public ModelException(String msg, Throwable cause,
-                          Location location) {
-        super(msg, cause, location);
-    }
-
-    /**
-     * Constructs an exception with the given exception as a root cause.
-     *
-     * @param cause Exception that might have caused this one.
-     */
-    public ModelException(Throwable cause) {
-        super(cause);
-    }
-
-    /**
-     * Constructs an exception with the given exception as a root cause and
-     * a location in a file.
-     *
-     * @param cause Exception that might have cause this one.
-     * @param location Location in the project file where the error occured.
-     */
-    public ModelException(Throwable cause, Location location) {
-        super(cause, location);
-    }
-}
-
diff --git a/proposal/mutant/src/java/common/org/apache/ant/common/model/Project.java b/proposal/mutant/src/java/common/org/apache/ant/common/model/Project.java
deleted file mode 100644
index 8646374..0000000
--- a/proposal/mutant/src/java/common/org/apache/ant/common/model/Project.java
+++ /dev/null
@@ -1,334 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.common.model;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import org.apache.ant.common.util.CircularDependencyChecker;
-import org.apache.ant.common.util.CircularDependencyException;
-import org.apache.ant.common.util.Location;
-
-/**
- * A project is a collection of targets and global tasks. A project may
- * reference objects in other projects using named references of the form
- * refname:object
- *
- * @author Conor MacNeill
- * @created 9 January 2002
- */
-public class Project extends ModelElement {
-    /**
-     * The delimiter used to separate reference names in target names, data
-     * values, etc
-     */
-    public static final String REF_DELIMITER = ":";
-
-    /** The default target in this project. */
-    private String defaultTarget = null;
-
-    /**
-     * The base URL of this project. Relative locations are relative to this
-     * base.
-     */
-    private String base;
-
-    /**
-     * The name of this project when referenced by a script within this
-     * project.
-     */
-    private String name;
-
-    /**
-     * These are the targets which belong to the project. They will have
-     * interdependencies which are used to determine which targets need to be
-     * executed before a given target.
-     */
-    private Map targets = new HashMap();
-
-    /**
-     * The global tasks for this project. These are the tasks that will get
-     * executed whenever an execution context is associated with this project.
-     */
-    private List tasks = new ArrayList();
-
-    /** The URL where the project is defined. */
-    private URL sourceURL;
-
-
-    /**
-     * Create a Project
-     *
-     * @param sourceURL the URL where the project is defined.
-     * @param location the location of this element within the source.
-     */
-    public Project(URL sourceURL, Location location) {
-        super(location);
-        this.sourceURL = sourceURL;
-    }
-
-
-    /**
-     * Set the defautl target of this project.
-     *
-     * @param defaultTarget the name of the defaultTarget of this project.
-     */
-    public void setDefaultTarget(String defaultTarget) {
-        this.defaultTarget = defaultTarget;
-    }
-
-
-    /**
-     * Set the base URL for this project.
-     *
-     * @param base the baseURL for this project.
-     */
-    public void setBase(String base) {
-        this.base = base;
-    }
-
-
-    /**
-     * Set the name of this project.
-     *
-     * @param name the name for this project.
-     */
-    public void setName(String name) {
-        this.name = name;
-    }
-
-
-    /**
-     * Get the URL where this project is defined
-     *
-     * @return the project source URL
-     */
-    public URL getSourceURL() {
-        return sourceURL;
-    }
-
-
-    /**
-     * Get the Project's default Target, if any
-     *
-     * @return the project's defautl target or null if there is no default.
-     */
-    public String getDefaultTarget() {
-        return defaultTarget;
-    }
-
-
-    /**
-     * Get the base URL for this project.
-     *
-     * @return the baseURL for this project as a string.
-     */
-    public String getBase() {
-        return base;
-    }
-
-
-    /**
-     * Get the name of the project element
-     *
-     * @return the project's name
-     */
-    public String getName() {
-        return name;
-    }
-
-
-    /**
-     * Get the targets in this project.
-     *
-     * @return an iterator returning Target objects.
-     */
-    public Iterator getTargets() {
-        return targets.values().iterator();
-    }
-
-
-    /**
-     * Get the target with the given name
-     *
-     * @param targetName the name of the desired target.
-     * @return the target with the given name or null if there is no such
-     *      target.
-     */
-    public Target getTarget(String targetName) {
-        return (Target) targets.get(targetName);
-    }
-
-
-    /**
-     * Get the initialisation tasks for this project
-     *
-     * @return an iterator over the set of tasks for this project.
-     */
-    public Iterator getTasks() {
-        return tasks.iterator();
-    }
-
-    /**
-     * Add a target to the project.
-     *
-     * @param target the Target to be added
-     * @throws ModelException if a target with the same name already exists.
-     */
-    public void addTarget(Target target) throws ModelException {
-        if (targets.containsKey(target.getName())) {
-            throw new ModelException("A target with name '"
-                 + target.getName() +
-                "' has already been defined in this project",
-                target.getLocation());
-        }
-        targets.put(target.getName(), target);
-    }
-
-
-    /**
-     * Add a task to the list of global tasks for this project.
-     *
-     * @param task a task to be executed when an execution context is
-     *      associated with the Project (a non-target task)
-     */
-    public void addTask(BuildElement task) {
-        tasks.add(task);
-    }
-
-    /**
-     * Validate this project
-     *
-     * @exception ModelException if the project is not valid
-     */
-    public void validate() throws ModelException {
-        // check whether all of dependencies for our targets
-        // exist in the model
-
-        // visited contains the targets we have already visited and verified
-        Set visited = new HashSet();
-        // checker records the targets we are currently visiting
-        CircularDependencyChecker checker
-             = new CircularDependencyChecker("checking target dependencies");
-        // dependency order is purely recorded for debug purposes
-        List dependencyOrder = new ArrayList();
-
-        for (Iterator i = getTargets(); i.hasNext();) {
-            Target target = (Target) i.next();
-
-            target.validate();
-            fillinDependencyOrder(target, dependencyOrder,
-                visited, checker);
-        }
-    }
-
-
-    /**
-     * Determine target dependency order within this project.
-     *
-     * @param target The target being examined
-     * @param dependencyOrder The dependency order of targets
-     * @param visited Set of targets in this project already visited.
-     * @param checker A circular dependency checker
-     * @exception ModelException if the dependencies of the project's targets
-     *      are not valid.
-     */
-    public void fillinDependencyOrder(Target target,
-                                      List dependencyOrder, Set visited,
-                                      CircularDependencyChecker checker)
-         throws ModelException {
-        if (visited.contains(target.getName())) {
-            return;
-        }
-
-        try {
-            String targetName = target.getName();
-            checker.visitNode(targetName);
-
-            for (Iterator i = target.getDependencies(); i.hasNext();) {
-                String dependency = (String) i.next();
-                boolean localTarget = (dependency.indexOf(REF_DELIMITER) == -1);
-                if (localTarget) {
-                    Target dependencyTarget = getTarget(dependency);
-
-                    if (dependencyTarget == null) {
-                        StringBuffer sb = new StringBuffer("Target '");
-
-                        sb.append(dependency);
-                        sb.append("' does not exist in this project. ");
-                        throw new ModelException(new String(sb),
-                            target.getLocation());
-                    }
-
-                    // need to check the targets we depend on
-                    fillinDependencyOrder(dependencyTarget,
-                        dependencyOrder, visited, checker);
-                }
-            }
-
-            visited.add(targetName);
-            checker.leaveNode(targetName);
-            dependencyOrder.add(targetName);
-        } catch (CircularDependencyException e) {
-            throw new ModelException(e.getMessage(),
-                target.getLocation());
-        }
-    }
-
-}
-
diff --git a/proposal/mutant/src/java/common/org/apache/ant/common/model/Target.java b/proposal/mutant/src/java/common/org/apache/ant/common/model/Target.java
deleted file mode 100644
index 63e30f5..0000000
--- a/proposal/mutant/src/java/common/org/apache/ant/common/model/Target.java
+++ /dev/null
@@ -1,211 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.common.model;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.apache.ant.common.util.Location;
-
-/**
- *  A Target is a collection of tasks. It may have dependencies on other
- *  targets
- *
- * @author  Conor MacNeill
- * @created  12 January 2002
- */
-public class Target extends ModelElement {
-    /**  This target's dependencies on other targets, if any */
-    private List dependencies = new ArrayList();
-
-    /**  This target's list of tasks */
-    private List tasks = new ArrayList();
-
-    /**  The target's name. */
-    private String name;
-
-    /**  The Target's description */
-    private String description;
-
-    /**  Description of the Field */
-    private String ifCondition;
-
-    /**  Description of the Field */
-    private String unlessCondition;
-
-    /**
-     *  Construct the target, given its name
-     *
-     * @param  location the location of the element
-     * @param  name the target's name.
-     */
-    public Target(Location location, String name) {
-        super(location);
-        this.name = name;
-    }
-
-    /**
-     *  Sets the IfCondition of the Target
-     *
-     * @param  ifCondition The new IfCondition value
-     */
-    public void setIfCondition(String ifCondition) {
-        this.ifCondition = ifCondition;
-    }
-
-    /**
-     *  Sets the UnlessCondition of the Target
-     *
-     * @param  unlessCondition The new UnlessCondition value
-     */
-    public void setUnlessCondition(String unlessCondition) {
-        this.unlessCondition = unlessCondition;
-    }
-
-    /**
-     *  Sets the Target's description
-     *
-     * @param  description The new description value
-     */
-    public void setDescription(String description) {
-        this.description = description;
-    }
-
-    /**
-     *  Gets the IfCondition of the Target
-     *
-     * @return  The IfCondition value
-     */
-    public String getIfCondition() {
-        return ifCondition;
-    }
-
-    /**
-     *  Gets the UnlessCondition of the Target
-     *
-     * @return  The UnlessCondition value
-     */
-    public String getUnlessCondition() {
-        return unlessCondition;
-    }
-
-    /**
-     *  Get this target's name.
-     *
-     * @return  the target's name.
-     */
-    public String getName() {
-        return name;
-    }
-
-    /**
-     *  Gets the Target's description
-     *
-     * @return  The description value
-     */
-    public String getDescription() {
-        return description;
-    }
-
-
-    /**
-     *  Get this target's dependencies.
-     *
-     * @return  an iterator over the target's dependencies.
-     */
-    public Iterator getDependencies() {
-        return dependencies.iterator();
-    }
-
-    /**
-     *  Get the tasks for this target
-     *
-     * @return  an iterator over the set of tasks for this target.
-     */
-    public Iterator getTasks() {
-        return tasks.iterator();
-    }
-
-    /**
-     *  Add a task to this target
-     *
-     * @param  task the task to be added to the target.
-     */
-    public void addTask(BuildElement task) {
-        tasks.add(task);
-    }
-
-    /**
-     *  Add a dependency to this target
-     *
-     * @param  dependency the name of a target upon which this target
-     *      depends
-     */
-    public void addDependency(String dependency) {
-        dependencies.add(dependency);
-    }
-
-    /**
-     *  Validate that this build element is configured correctly
-     *
-     * @exception  ModelException if the element is invalid
-     */
-    public void validate() throws ModelException {
-        if (name == null) {
-            throw new ModelException("Target must have a name",
-                getLocation());
-        }
-    }
-}
-
diff --git a/proposal/mutant/src/java/common/org/apache/ant/common/service/ComponentService.java b/proposal/mutant/src/java/common/org/apache/ant/common/service/ComponentService.java
deleted file mode 100644
index 9a1a6af..0000000
--- a/proposal/mutant/src/java/common/org/apache/ant/common/service/ComponentService.java
+++ /dev/null
@@ -1,195 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.common.service;
-import java.net.URL;
-import org.apache.ant.common.antlib.AntLibFactory;
-import org.apache.ant.common.util.ExecutionException;
-
-/**
- * The Component Service is used to manage the definitions that Ant uses at
- * runtime. It supports the following operations
- * <ul>
- *   <li> Definition of library search paths
- *   <li> Importing tasks from a library
- *   <li> taskdefs
- *   <li> typedefs
- * </ul>
- *
- *
- * @author Conor MacNeill
- * @created 27 January 2002
- */
-public interface ComponentService {
-    /**
-     * Load a single or multiple Ant libraries
-     *
-     * @param libLocation the location of the library or the libraries
-     * @param importAll true if all components of the loaded libraries
-     *      should be imported
-     * @param autoImport true if libraries in the Ant namespace should be
-     *                   automatically imported.
-     * @exception ExecutionException if the library or libraries cannot be
-     *      imported.
-     */
-    void loadLib(String libLocation, boolean importAll, boolean autoImport)
-         throws ExecutionException;
-
-    /**
-     * Add a library path to the given library. The library path is used in
-     * the construction of the library's classloader
-     *
-     * @param libraryId the library's unique identifier
-     * @param libPath the path to be added to the list of paths used by the
-     *      library.
-     * @exception ExecutionException if the path cannot be used.
-     */
-    void addLibPath(String libraryId, URL libPath) throws ExecutionException;
-
-    /**
-     * Define a new type
-     *
-     * @param typeName the name by which this type will be referred
-     * @param factory the library factory object to create the type
-     *      instances
-     * @param loader the class loader to use to create the particular types
-     * @param className the name of the class implementing the type
-     * @exception ExecutionException if the type cannot be defined
-     */
-    void typedef(AntLibFactory factory, ClassLoader loader,
-                 String typeName, String className)
-         throws ExecutionException;
-
-    /**
-     * Experimental - define a new task
-     *
-     * @param taskName the name by which this task will be referred
-     * @param factory the library factory object to create the task
-     *      instances
-     * @param loader the class loader to use to create the particular tasks
-     * @param className the name of the class implementing the task
-     * @exception ExecutionException if the task cannot be defined
-     */
-    void taskdef(AntLibFactory factory, ClassLoader loader,
-                 String taskName, String className)
-         throws ExecutionException;
-
-
-    /**
-     * Import a single component from a library, optionally aliasing it to a
-     * new name
-     *
-     * @param libraryId the unique id of the library from which the
-     *      component is being imported
-     * @param defName the name of the component within its library
-     * @param alias the name under which this component will be used in the
-     *      build scripts. If this is null, the components default name is
-     *      used.
-     * @exception ExecutionException if the component cannot be imported
-     */
-    void importComponent(String libraryId, String defName,
-                         String alias) throws ExecutionException;
-
-    /**
-     * Import a complete library into the current execution frame
-     *
-     * @param libraryId The id of the library to be imported
-     * @exception ExecutionException if the library cannot be imported
-     */
-    void importLibrary(String libraryId) throws ExecutionException;
-
-    /**
-     * Imports a component defined in another frame.
-     *
-     * @param relativeName the qualified name of the component relative to
-     *      this execution frame
-     * @param alias the name under which this component will be used in the
-     *      build scripts. If this is null, the components default name is
-     *      used.
-     * @exception ExecutionException if the component cannot be imported
-     */
-    void importFrameComponent(String relativeName, String alias)
-         throws ExecutionException;
-
-    /**
-     * Create a component. The component will have a context but will not be
-     * configured. It should be configured using the appropriate set methods
-     * and then validated before being used.
-     *
-     * @param componentName the name of the component
-     * @return the created component. The return type of this method depends
-     *      on the component type.
-     * @exception ExecutionException if the component cannot be created
-     */
-    Object createComponent(String componentName) throws ExecutionException;
-
-    /**
-     * Create a component given its class. The component will have a context
-     * but will not be configured. It should be configured using the
-     * appropriate set methods and then validated before being used.
-     *
-     * @param componentClass the component's class
-     * @param factory the factory to create the component
-     * @param loader the classloader associated with the component
-     * @param addTaskAdapter whenther the returned component should be a
-     *      task, potentially being wrapped in an adapter
-     * @param componentName the name of the component type
-     * @return the created component. The return type of this method depends
-     *      on the component type.
-     * @exception ExecutionException if the component cannot be created
-     */
-    Object createComponent(AntLibFactory factory, ClassLoader loader,
-                           Class componentClass, boolean addTaskAdapter,
-                           String componentName) throws ExecutionException;
-}
-
diff --git a/proposal/mutant/src/java/common/org/apache/ant/common/service/DataService.java b/proposal/mutant/src/java/common/org/apache/ant/common/service/DataService.java
deleted file mode 100644
index 6e5cd29..0000000
--- a/proposal/mutant/src/java/common/org/apache/ant/common/service/DataService.java
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.common.service;
-import java.util.Map;
-
-import org.apache.ant.common.util.ExecutionException;
-
-/**
- * Service interface for Data value manipulation operations provided by the
- * core.
- *
- * @author Conor MacNeill
- * @created 31 January 2002
- */
-public interface DataService {
-    /**
-     * Get a data value
-     *
-     * @param valueName the name of the data value
-     * @return the current object associated with the name or null if no
-     *      value is currently associated with the name
-     * @exception ExecutionException if the value cannot be retrieved.
-     */
-    Object getDataValue(String valueName) throws ExecutionException;
-
-    /**
-     * Indicate if a data value has been set
-     *
-     * @param name the name of the data value - may contain reference
-     *      delimiters
-     * @return true if the value exists
-     * @exception ExecutionException if the containing frame for the value
-     *      does not exist
-     */
-    boolean isDataValueSet(String name) throws ExecutionException;
-
-    /**
-     * Set a data value. If an existing data value exists, associated with
-     * the given name, the value will not be changed
-     *
-     * @param valueName the name of the data value
-     * @param value the value to be associated with the name
-     * @exception ExecutionException if the value cannot be set
-     */
-    void setDataValue(String valueName, Object value) throws ExecutionException;
-
-    /**
-     * Set a data value which can be overwritten
-     *
-     * @param valueName the name of the data value
-     * @param value the value to be associated with the name
-     * @exception ExecutionException if the value cannot be set
-     */
-    void setMutableDataValue(String valueName, Object value)
-         throws ExecutionException;
-
-    /**
-     * Replace ${} style constructions in the given value with the string
-     * value of the corresponding data values in the frame
-     *
-     * @param value the string to be scanned for property references.
-     * @return the string with all property references replaced
-     * @exception ExecutionException if any of the properties do not exist
-     */
-    String replacePropertyRefs(String value) throws ExecutionException;
-
-    /**
-     * Replace ${} style constructions in the given value with the string
-     * value of the objects in the given map. Any values which are not found
-     * are left unchanged.
-     *
-     * @param value the string to be scanned for property references.
-     * @param replacementValues the collection of replacement values
-     * @return the string with all property references replaced
-     * @exception ExecutionException if any of the properties do not exist
-     */
-    String replacePropertyRefs(String value, Map replacementValues)
-         throws ExecutionException;
-
-    /**
-     * Get all the properties from the frame and any references frames. This
-     * is an expensive operation since it must clone all of the property
-     * stores in all frames
-     *
-     * @return a Map containing the frames properties indexed by their full
-     *      name.
-     */
-    Map getAllProperties();
-}
-
diff --git a/proposal/mutant/src/java/common/org/apache/ant/common/service/EventService.java b/proposal/mutant/src/java/common/org/apache/ant/common/service/EventService.java
deleted file mode 100644
index 1986ff3..0000000
--- a/proposal/mutant/src/java/common/org/apache/ant/common/service/EventService.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.common.service;
-import org.apache.ant.common.event.BuildListener;
-import org.apache.ant.common.util.ExecutionException;
-
-/**
- * Core service to manage receiving of events by components within Ant.
- *
- * @author Conor MacNeill
- * @created 7 February 2002
- */
-public interface EventService {
-    /**
-     * Add a build listener to the current frame
-     *
-     * @param listener the lister which will receive build events
-     * @exception ExecutionException if the listener cannot be added
-     */
-    void addBuildListener(BuildListener listener) throws ExecutionException;
-
-    /**
-     * Remove a listener from the current frame
-     *
-     * @param listener the listener to be removed
-     * @exception ExecutionException if the listener could not be removed
-     */
-    void removeBuildListener(BuildListener listener) throws ExecutionException;
-}
-
diff --git a/proposal/mutant/src/java/common/org/apache/ant/common/service/ExecService.java b/proposal/mutant/src/java/common/org/apache/ant/common/service/ExecService.java
deleted file mode 100644
index 7f73f59..0000000
--- a/proposal/mutant/src/java/common/org/apache/ant/common/service/ExecService.java
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.common.service;
-import java.io.File;
-import java.util.List;
-import java.util.Map;
-import org.apache.ant.common.antlib.Task;
-import org.apache.ant.common.model.Project;
-import org.apache.ant.common.util.ExecutionException;
-
-/**
- * The ExecService provides executiuon services to tasks
- *
- * @author Conor MacNeill
- * @created 8 February 2002
- */
-public interface ExecService {
-    /**
-     * Parse an XML file into a build model.
-     *
-     * @param xmlBuildFile The file containing the XML build description.
-     * @return A Project model for the build.
-     * @exception ExecutionException if the build cannot be parsed
-     */
-    Project parseXMLBuildFile(File xmlBuildFile) throws ExecutionException;
-
-
-    /**
-     * Create a project reference.
-     *
-     * @param referenceName the name under which the project will be
-     *      referenced.
-     * @param model the project model.
-     * @param initialData the project's initial data load.
-     * @exception ExecutionException if the project cannot be referenced.
-     */
-    void createProjectReference(String referenceName, Project model, 
-                                Map initialData) throws ExecutionException;
-
-
-    /**
-     * Setup a sub-build.
-     *
-     * @param model the project model to be used for the build
-     * @param properties the initiali properties to be used in the build
-     * @return a key to the build allowing it to be executed and managed
-     * @exception ExecutionException if the subbuild cannot be setup
-     */
-    Object setupBuild(Project model, Map properties)
-         throws ExecutionException;
-
-
-    /**
-     * Setup a sub-build using the current frame's project model
-     *
-     * @param properties the initiali properties to be used in the build
-     * @return a key to the build allowing it to be executed and managed
-     * @exception ExecutionException if the subbuild cannot be setup
-     */
-    Object setupBuild(Map properties)
-         throws ExecutionException;
-
-
-    /**
-     * Run a build which have been previously setup
-     *
-     * @param buildKey the buildKey returned previously when the build was
-     *      setup
-     * @param targets A list of targets to be run
-     * @exception ExecutionException if the build cannot be run
-     */
-    void runBuild(Object buildKey, List targets) throws ExecutionException;
-
-
-    /**
-     * execute a task. The task should have already been initialised by the
-     * core
-     *
-     * @param task the task to be executed.
-     * @exception ExecutionException if there is a problem in execution.
-     */
-    void executeTask(Task task) throws ExecutionException;
-
-
-    /**
-     * get the name of the project associated with this execution.
-     *
-     * @return the project's name
-     */
-    String getProjectName();
-
-
-    /**
-     * Get the basedir for the current execution
-     *
-     * @return the base directory for this execution of Ant
-     */
-    File getBaseDir();
-
-
-    /**
-     * Handle subbuild output.
-     *
-     * @param subbuildKey the core's key for managing the subbuild.
-     * @param line the content produce by the current thread.
-     * @param isErr true if this content is from the thread's error stream.
-     * @exception ExecutionException if the subbuild cannot be found.
-     */
-    void handleBuildOutput(Object subbuildKey, String line, boolean isErr)
-         throws ExecutionException;
-}
-
diff --git a/proposal/mutant/src/java/common/org/apache/ant/common/service/FileService.java b/proposal/mutant/src/java/common/org/apache/ant/common/service/FileService.java
deleted file mode 100644
index 512bf69..0000000
--- a/proposal/mutant/src/java/common/org/apache/ant/common/service/FileService.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.common.service;
-
-import java.io.File;
-import org.apache.ant.common.util.ExecutionException;
-
-/**
- * Service interface for File manipulation operations provided by the Ant
- * Core
- *
- * @author Conor MacNeill
- * @created 27 January 2002
- */
-public interface FileService {
-    /**
-     * Resolve a file according to the base directory of the project
-     * associated with this context
-     *
-     * @param fileName the file name to be resolved.
-     * @return the file resolved to the project's base dir
-     * @exception ExecutionException if the file cannot be resolved
-     */
-    File resolveFile(String fileName) throws ExecutionException;
-}
-
diff --git a/proposal/mutant/src/java/common/org/apache/ant/common/service/InputService.java b/proposal/mutant/src/java/common/org/apache/ant/common/service/InputService.java
deleted file mode 100644
index d83b09b..0000000
--- a/proposal/mutant/src/java/common/org/apache/ant/common/service/InputService.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.common.service;
-
-import org.apache.ant.common.input.InputRequest;
-import org.apache.ant.common.util.ExecutionException;
-
-/**
- * Service interface for input management
- *
- * @author Conor MacNeill
- * @created 30 April 2002
- */
-public interface InputService {
-    /**
-     * Handle an input request
-     *
-     * @param request an input request
-     * @exception ExecutionException if the request cannot be handled
-     */
-    void handleInput(InputRequest request) throws ExecutionException;
-}
-
diff --git a/proposal/mutant/src/java/common/org/apache/ant/common/service/MagicProperties.java b/proposal/mutant/src/java/common/org/apache/ant/common/service/MagicProperties.java
deleted file mode 100644
index a026b1e..0000000
--- a/proposal/mutant/src/java/common/org/apache/ant/common/service/MagicProperties.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.common.service;
-
-/**
- * Ant's magic properties
- *
- * @author Conor MacNeill
- * @created 7 February 2002
- */
-public class MagicProperties {
-    /**
-     * This property describes the basedir which is being used for an Ant
-     * run.
-     */
-    public static final String BASEDIR = "basedir";
-
-    /** This property provides the location of Ant's home directory */
-    public static final String ANT_HOME = "ant.home";
-}
-
diff --git a/proposal/mutant/src/java/common/org/apache/ant/common/util/AntException.java b/proposal/mutant/src/java/common/org/apache/ant/common/util/AntException.java
deleted file mode 100755
index 7ae63c4..0000000
--- a/proposal/mutant/src/java/common/org/apache/ant/common/util/AntException.java
+++ /dev/null
@@ -1,218 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.common.util;
-
-import java.io.PrintStream;
-import java.io.PrintWriter;
-
-/**
- * An AntException indicates some exceptional case has been encountered in
- * the processing of Ant. AntExceptions may accept a Throwable as a cause
- * allowing exceptions to be nested
- *
- * @author Conor MacNeill
- * @created 15 January 2002
- */
-public abstract class AntException extends Exception {
-    /** Exception that might have caused this one. */
-    private Throwable cause = null;
-
-    /**
-     * The location of the element which is associated with this exception
-     * if known.
-     */
-    private Location location = Location.UNKNOWN_LOCATION;
-
-    /**
-     * Constructs an exception with the given descriptive message.
-     *
-     * @param msg Description of or information about the exception.
-     */
-    public AntException(String msg) {
-        super(msg);
-    }
-
-    /**
-     * Constructs an exception with the given message and exception as a
-     * root cause.
-     *
-     * @param msg Description of or information about the exception.
-     * @param cause Throwable that might have cause this one.
-     */
-    public AntException(String msg, Throwable cause) {
-        super(msg);
-        this.cause = cause;
-    }
-
-    /**
-     * Constructs an exception with the given message and exception as a
-     * root cause and a location in a file.
-     *
-     * @param msg Description of or information about the exception.
-     * @param cause Exception that might have cause this one.
-     * @param location Location in the project file where the error occured.
-     */
-    public AntException(String msg, Throwable cause, Location location) {
-        this(msg, cause);
-        setLocation(location, true);
-    }
-
-    /**
-     * Constructs an exception with the given exception as a root cause.
-     *
-     * @param cause Exception that might have caused this one.
-     */
-    public AntException(Throwable cause) {
-        super(cause.getMessage() == null 
-                ? cause.getClass().getName() : cause.getMessage());
-        this.cause = cause;
-    }
-
-    /**
-     * Constructs an exception with the given descriptive message and a
-     * location in a file.
-     *
-     * @param msg Description of or information about the exception.
-     * @param location Location in the project file where the error occured.
-     */
-    public AntException(String msg, Location location) {
-        super(msg);
-        setLocation(location, true);
-    }
-
-    /**
-     * Constructs an exception with the given exception as a root cause and
-     * a location in a file.
-     *
-     * @param cause Exception that might have cause this one.
-     * @param location Location in the project file where the error occured.
-     */
-    public AntException(Throwable cause, Location location) {
-        this(cause);
-        setLocation(location, true);
-    }
-
-    /**
-     * Sets the file location where the error occured.
-     *
-     * @param newLocation the new location value
-     * @param override true if the location should override any currently
-     *      set location
-     */
-    public void setLocation(Location newLocation, boolean override) {
-        if (override || location == Location.UNKNOWN_LOCATION) {
-            if (newLocation == null) {
-                this.location = Location.UNKNOWN_LOCATION;
-            } else {
-                this.location = newLocation;
-            }
-        }
-    }
-
-    /**
-     * Returns the nested exception.
-     *
-     * @return the underlying exception
-     */
-    public Throwable getCause() {
-        return cause;
-    }
-
-    /**
-     * Returns the file location where the error occured.
-     *
-     * @return the location value
-     */
-    public Location getLocation() {
-        return location;
-    }
-
-    /** Print the stack trace to System.err */
-    public void printStackTrace() {
-        printStackTrace(System.err);
-    }
-
-    /**
-     * Print the stack trace to the given PrintStream
-     *
-     * @param ps the PrintStream onto which the stack trace of this
-     *      exception is to be printed
-     */
-    public void printStackTrace(PrintStream ps) {
-        synchronized (ps) {
-            super.printStackTrace(ps);
-            if (cause != null) {
-                ps.println("--- Nested Exception ---");
-                cause.printStackTrace(ps);
-            }
-        }
-    }
-
-    /**
-     * Print the stack trace to the given PrintWriter
-     *
-     * @param pw the PrintWriter onto which the stack trace of this
-     *      exception is to be printed
-     */
-    public void printStackTrace(PrintWriter pw) {
-        synchronized (pw) {
-            super.printStackTrace(pw);
-            if (cause != null) {
-                pw.println("--- Nested Exception ---");
-                cause.printStackTrace(pw);
-            }
-        }
-    }
-}
-
diff --git a/proposal/mutant/src/java/common/org/apache/ant/common/util/CircularDependencyChecker.java b/proposal/mutant/src/java/common/org/apache/ant/common/util/CircularDependencyChecker.java
deleted file mode 100644
index e619bfd..0000000
--- a/proposal/mutant/src/java/common/org/apache/ant/common/util/CircularDependencyChecker.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.common.util;
-import java.util.Stack;
-
-/**
- * Checks for circular dependencies when visiting nodes of an object
- * hierarchy
- *
- * @author Conor MacNeill
- * @created 14 January 2002
- */
-public class CircularDependencyChecker {
-    /**
-     * The activity being undertaken which checking for circular
-     * redundancies. This is used for reporting exceptions
-     */
-    private String activity;
-
-    /** The nodes which we are currently visiting */
-    private Stack nodes = new Stack();
-
-    /**
-     * Constructor for the CircularDependencyChecker object
-     *
-     * @param activity the activity being undertaken
-     */
-    public CircularDependencyChecker(String activity) {
-        this.activity = activity;
-    }
-
-    /**
-     * Visit a Node to check its relationships to other nodes
-     *
-     * @param node an object which is being visited and analyzed
-     * @exception CircularDependencyException if this node is alreay being
-     *      visited.
-     */
-    public void visitNode(Object node) throws CircularDependencyException {
-        if (nodes.contains(node)) {
-            throw new CircularDependencyException(getDescription(node));
-        }
-        nodes.push(node);
-    }
-
-    /**
-     * Complete the examination of the node and leave.
-     *
-     * @param node an object for which the examination of relationships has
-     *      been completed
-     * @exception CircularDependencyException if the given node was not
-     *      expected.
-     */
-    public void leaveNode(Object node) throws CircularDependencyException {
-        if (!nodes.pop().equals(node)) {
-            throw new CircularDependencyException("Internal error: popped " +
-                "element was unexpected");
-        }
-    }
-
-    /**
-     * Gets the description of the circular dependency
-     *
-     * @param endNode the node which was revisited and where the circular
-     *      dependency was detected
-     * @return the description of the circular dependency
-     */
-    private String getDescription(Object endNode) {
-        StringBuffer sb = new StringBuffer("Circular dependency while "
-             + activity + ": ");
-        sb.append(endNode);
-        Object o = null;
-        do {
-            o = nodes.pop();
-            sb.append(" <- ");
-            sb.append(o.toString());
-        } while (!(o.equals(endNode)));
-
-        return new String(sb);
-    }
-}
-
diff --git a/proposal/mutant/src/java/common/org/apache/ant/common/util/CircularDependencyException.java b/proposal/mutant/src/java/common/org/apache/ant/common/util/CircularDependencyException.java
deleted file mode 100644
index b8a0ba7..0000000
--- a/proposal/mutant/src/java/common/org/apache/ant/common/util/CircularDependencyException.java
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.common.util;
-
-/**
- * A CircularDependencyException indicates that a circular dependency has
- * been detected
- *
- * @author Conor MacNeill
- * @created 9 January 2002
- */
-public class CircularDependencyException extends AntException {
-    /**
-     * Constructs an exception with the given descriptive message.
-     *
-     * @param msg Description of or information about the exception.
-     */
-    public CircularDependencyException(String msg) {
-        super(msg);
-    }
-
-
-    /**
-     * Constructs an exception with the given descriptive message and a
-     * location in a file.
-     *
-     * @param msg Description of or information about the exception.
-     * @param location Location in the project file where the error occured.
-     */
-    public CircularDependencyException(String msg, Location location) {
-        super(msg, location);
-    }
-
-
-    /**
-     * Constructs an exception with the given message and exception as a
-     * root cause.
-     *
-     * @param msg Description of or information about the exception.
-     * @param cause Throwable that might have cause this one.
-     */
-    public CircularDependencyException(String msg, Throwable cause) {
-        super(msg, cause);
-    }
-
-
-    /**
-     * Constructs an exception with the given message and exception as a
-     * root cause and a location in a file.
-     *
-     * @param msg Description of or information about the exception.
-     * @param cause Exception that might have cause this one.
-     * @param location Location in the project file where the error occured.
-     */
-    public CircularDependencyException(String msg, Throwable cause,
-                                       Location location) {
-        super(msg, cause, location);
-    }
-
-
-    /**
-     * Constructs an exception with the given exception as a root cause.
-     *
-     * @param cause Exception that might have caused this one.
-     */
-    public CircularDependencyException(Throwable cause) {
-        super(cause);
-    }
-
-
-    /**
-     * Constructs an exception with the given exception as a root cause and
-     * a location in a file.
-     *
-     * @param cause Exception that might have cause this one.
-     * @param location Location in the project file where the error occured.
-     */
-    public CircularDependencyException(Throwable cause, Location location) {
-        super(cause, location);
-    }
-
-}
-
diff --git a/proposal/mutant/src/java/common/org/apache/ant/common/util/ConfigException.java b/proposal/mutant/src/java/common/org/apache/ant/common/util/ConfigException.java
deleted file mode 100644
index 4055bcc..0000000
--- a/proposal/mutant/src/java/common/org/apache/ant/common/util/ConfigException.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.common.util;
-
-/**
- * A ConfigException indicates a problem with Ant's configuration or the
- * commandline used to start Ant.
- *
- * @author Conor MacNeill
- * @created 9 January 2002
- */
-public class ConfigException extends AntException {
-    /**
-     * Constructs an exception with the given descriptive message.
-     *
-     * @param msg Description of or information about the exception.
-     */
-    public ConfigException(String msg) {
-        super(msg);
-    }
-
-
-    /**
-     * Constructs an exception with the given descriptive message and a
-     * location in a file.
-     *
-     * @param msg Description of or information about the exception.
-     * @param location Location in the project file where the error occured.
-     */
-    public ConfigException(String msg, Location location) {
-        super(msg, location);
-    }
-
-
-    /**
-     * Constructs an exception with the given message and exception as a
-     * root cause.
-     *
-     * @param msg Description of or information about the exception.
-     * @param cause Throwable that might have cause this one.
-     */
-    public ConfigException(String msg, Throwable cause) {
-        super(msg, cause);
-    }
-
-
-    /**
-     * Constructs an exception with the given message and exception as a
-     * root cause and a location in a file.
-     *
-     * @param msg Description of or information about the exception.
-     * @param cause Exception that might have cause this one.
-     * @param location Location in the project file where the error occured.
-     */
-    public ConfigException(String msg, Throwable cause, Location location) {
-        super(msg, cause, location);
-    }
-
-
-    /**
-     * Constructs an exception with the given exception as a root cause.
-     *
-     * @param cause Exception that might have caused this one.
-     */
-    public ConfigException(Throwable cause) {
-        super(cause);
-    }
-
-
-    /**
-     * Constructs an exception with the given exception as a root cause and
-     * a location in a file.
-     *
-     * @param cause Exception that might have cause this one.
-     * @param location Location in the project file where the error occured.
-     */
-    public ConfigException(Throwable cause, Location location) {
-        super(cause, location);
-    }
-
-}
-
diff --git a/proposal/mutant/src/java/common/org/apache/ant/common/util/DemuxOutputReceiver.java b/proposal/mutant/src/java/common/org/apache/ant/common/util/DemuxOutputReceiver.java
deleted file mode 100644
index a10471d..0000000
--- a/proposal/mutant/src/java/common/org/apache/ant/common/util/DemuxOutputReceiver.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.common.util;
-
-/**
- * A Demux output receiver receives buffered content which has been
- * demultiplexed from the output potentially generated by multiple threads
- *
- * @author Conor MacNeill
- * @created 22 February 2002
- */
-public interface DemuxOutputReceiver {
-    /**
-     * Handle the content from a single thread. This method will be called
-     * by the thread producing the content. The content is broken up into
-     * separate lines
-     *
-     * @param line the content produce by the current thread.
-     * @param isErr true if this content is from the thread's error stream.
-     */
-    void threadOutput(String line, boolean isErr);
-}
-
diff --git a/proposal/mutant/src/java/common/org/apache/ant/common/util/DemuxOutputStream.java b/proposal/mutant/src/java/common/org/apache/ant/common/util/DemuxOutputStream.java
deleted file mode 100644
index 5ae762a..0000000
--- a/proposal/mutant/src/java/common/org/apache/ant/common/util/DemuxOutputStream.java
+++ /dev/null
@@ -1,198 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.common.util;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-
-import java.io.OutputStream;
-import java.util.Hashtable;
-
-/**
- * Buffers content written per thread and forwards the buffers onto the
- * given receiver
- *
- * @author Conor MacNeill
- * @created 22 February 2002
- */
-public class DemuxOutputStream extends OutputStream {
-
-    /**
-     * A data class to store information about a buffer. Such informatio is
-     * stored on a per-thread basis.
-     *
-     * @author Conor MacNeill
-     * @created 22 February 2002
-     */
-    private static class BufferInfo {
-        /** The per-thread output stream  */
-        private ByteArrayOutputStream buffer;
-
-        /**
-         * Whether the next line-terminator should be skipped in terms of
-         * processing the buffer or not. Used to avoid \r\n invoking
-         * processBuffer twice.
-         */
-        private boolean skip = false;
-    }
-
-    /** Maximum buffer size */
-    private static final int MAX_SIZE = 1024;
-    /** Mapping from thread to buffer (Thread to BufferInfo) */
-    private Hashtable buffers = new Hashtable();
-
-    /** The object which receives the output  */
-    private DemuxOutputReceiver receiver;
-
-    /** Whether or not this stream represents an error stream  */
-    private boolean isErrorStream;
-
-    /**
-     * Creates a new instance of this class.
-     *
-     * @param isErrorStream true if this is the error string, otherwise a
-     *      normal output stream. This is passed to the project so it knows
-     *      which stream it is receiving.
-     * @param receiver The receiver to which demux'd content is sent.
-     */
-    public DemuxOutputStream(DemuxOutputReceiver receiver,
-        boolean isErrorStream) {
-        this.receiver = receiver;
-        this.isErrorStream = isErrorStream;
-    }
-
-    /**
-     * Writes the data to the buffer and flushes the buffer if a line
-     * separator is detected or if the buffer has reached its maximum size.
-     *
-     * @param cc data to log (byte).
-     * @exception IOException if the data cannot be written to the stream
-     */
-    public void write(int cc) throws IOException {
-        final byte c = (byte) cc;
-
-        BufferInfo bufferInfo = getBufferInfo();
-        if ((c == '\n') || (c == '\r')) {
-            if (!bufferInfo.skip) {
-                processBuffer(bufferInfo.buffer);
-            }
-        } else {
-            bufferInfo.buffer.write(cc);
-            if (bufferInfo.buffer.size() > MAX_SIZE) {
-                processBuffer(bufferInfo.buffer);
-            }
-        }
-        bufferInfo.skip = (c == '\r');
-    }
-
-    /**
-     * Equivalent to calling {@link #flush flush} on the stream.
-     *
-     * @exception IOException if there is a problem closing the stream.
-     */
-    public void close() throws IOException {
-        flush();
-    }
-
-    /**
-     * Writes all remaining data in the buffer associated with the current
-     * thread to the project.
-     *
-     * @exception IOException if there is a problem flushing the stream.
-     */
-    public void flush() throws IOException {
-        BufferInfo bufferInfo = getBufferInfo();
-        if (bufferInfo.buffer.size() > 0) {
-            processBuffer(bufferInfo.buffer);
-        }
-    }
-
-
-    /**
-     * Converts the buffer to a string and sends it to {@link
-     * Project#demuxOutput(String,boolean) Project.demuxOutput}.
-     *
-     * @param buffer the ByteArrayOutputStream used to collect the output
-     *      until a line separator is seen.
-     */
-    protected void processBuffer(ByteArrayOutputStream buffer) {
-        String output = buffer.toString();
-        receiver.threadOutput(output, isErrorStream);
-        resetBufferInfo();
-    }
-
-    /**
-     * Returns the buffer associated with the current thread.
-     *
-     * @return a ByteArrayOutputStream for the current thread to write data
-     *      to
-     */
-    private BufferInfo getBufferInfo() {
-        Thread current = Thread.currentThread();
-        BufferInfo bufferInfo = (BufferInfo) buffers.get(current);
-        if (bufferInfo == null) {
-            bufferInfo = new BufferInfo();
-            bufferInfo.buffer = new ByteArrayOutputStream();
-            bufferInfo.skip = false;
-            buffers.put(current, bufferInfo);
-        }
-        return bufferInfo;
-    }
-
-    /** Resets the buffer for the current thread.  */
-    private void resetBufferInfo() {
-        Thread current = Thread.currentThread();
-        buffers.remove(current);
-    }
-}
-
diff --git a/proposal/mutant/src/java/common/org/apache/ant/common/util/ExecutionException.java b/proposal/mutant/src/java/common/org/apache/ant/common/util/ExecutionException.java
deleted file mode 100644
index 24d2689..0000000
--- a/proposal/mutant/src/java/common/org/apache/ant/common/util/ExecutionException.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.common.util;
-
-/**
- * An ExecutionException indicates a problem while executing tasks in a
- * build
- *
- * @author Conor MacNeill
- * @created 20 January 2002
- */
-public class ExecutionException extends AntException {
-    /**
-     * Constructs an exception with the given descriptive message.
-     *
-     * @param msg Description of or information about the exception.
-     */
-    public ExecutionException(String msg) {
-        super(msg);
-    }
-
-
-    /**
-     * Constructs an exception with the given descriptive message and a
-     * location in a file.
-     *
-     * @param msg Description of or information about the exception.
-     * @param location Location in the project file where the error occured.
-     */
-    public ExecutionException(String msg, Location location) {
-        super(msg, location);
-    }
-
-
-    /**
-     * Constructs an exception with the given message and exception as a
-     * root cause.
-     *
-     * @param msg Description of or information about the exception.
-     * @param cause Throwable that might have cause this one.
-     */
-    public ExecutionException(String msg, Throwable cause) {
-        super(msg, cause);
-    }
-
-
-    /**
-     * Constructs an exception with the given message and exception as a
-     * root cause and a location in a file.
-     *
-     * @param msg Description of or information about the exception.
-     * @param cause Exception that might have cause this one.
-     * @param location Location in the project file where the error occured.
-     */
-    public ExecutionException(String msg, Throwable cause, Location location) {
-        super(msg, cause, location);
-    }
-
-
-    /**
-     * Constructs an exception with the given exception as a root cause.
-     *
-     * @param cause Exception that might have caused this one.
-     */
-    public ExecutionException(Throwable cause) {
-        super(cause);
-    }
-
-
-    /**
-     * Constructs an exception with the given exception as a root cause and
-     * a location in a file.
-     *
-     * @param cause Exception that might have cause this one.
-     * @param location Location in the project file where the error occured.
-     */
-    public ExecutionException(Throwable cause, Location location) {
-        super(cause, location);
-    }
-
-}
-
diff --git a/proposal/mutant/src/java/common/org/apache/ant/common/util/FileUtils.java b/proposal/mutant/src/java/common/org/apache/ant/common/util/FileUtils.java
deleted file mode 100644
index 1a79e55..0000000
--- a/proposal/mutant/src/java/common/org/apache/ant/common/util/FileUtils.java
+++ /dev/null
@@ -1,255 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.common.util;
-
-import java.io.File;
-import java.util.Stack;
-import java.util.StringTokenizer;
-
-/**
- * This class encapsulates methods which allow Files to be refered to using
- * abstract path names which are translated to native system file paths at
- * runtime as well as copying files or setting there last modification time.
- *
- * @author duncan@x180.com
- * @author Conor MacNeill
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- * @created 21 January 2002
- */
-public class FileUtils {
-
-    /** Empty constructor. */
-    protected FileUtils() {
-    }
-
-    /**
-     * Factory method.
-     *
-     * @return The FileUtils instance to actually use. May be a subclass of
-     *      this class.
-     */
-    public static FileUtils newFileUtils() {
-        return new FileUtils();
-    }
-
-    /**
-     * Interpret the filename as a file relative to the given file - unless
-     * the filename already represents an absolute filename.
-     *
-     * @param file the "reference" file for relative paths. This instance
-     *      must be an absolute file and must not contain &quot;./&quot; or
-     *      &quot;../&quot; sequences (same for \ instead of /). If it is
-     *      null, this call is equivalent to 
-     *      <code>new java.io.File(filename)</code>.
-     * @param filename the filename to be resolved
-     * @return an absolute file that doesn't contain &quot;./&quot; or
-     *      &quot;../&quot; sequences and uses the correct separator for the
-     *      current platform.
-     * @exception ExecutionException if the file cannot be resolved
-     */
-    public File resolveFile(File file, String filename)
-         throws ExecutionException {
-        String platformFilename = filename.replace('/', File.separatorChar)
-            .replace('\\', File.separatorChar);
-
-        // deal with absolute files
-        if (platformFilename.startsWith(File.separator) ||
-            (platformFilename.length() >= 2 &&
-            Character.isLetter(platformFilename.charAt(0)) &&
-            platformFilename.charAt(1) == ':')) {
-            return normalize(platformFilename);
-        }
-
-        if (file == null) {
-            return new File(platformFilename);
-        }
-
-        File helpFile = new File(file.getAbsolutePath());
-        StringTokenizer tok
-             = new StringTokenizer(platformFilename, File.separator);
-        while (tok.hasMoreTokens()) {
-            String part = tok.nextToken();
-            if (part.equals("..")) {
-                helpFile = helpFile.getParentFile();
-                if (helpFile == null) {
-                    String msg = "The file or path you specified ("
-                         + filename + ") is invalid relative to "
-                         + file.getPath();
-                    throw new ExecutionException(msg);
-                }
-            } else if (part.equals(".")) {
-                // Do nothing here
-            } else {
-                helpFile = new File(helpFile, part);
-            }
-        }
-
-        return new File(helpFile.getAbsolutePath());
-    }
-
-    /**
-     * &quot;normalize&quot; the given absolute path. <p>
-     *
-     * This includes:
-     * <ul>
-     *   <li> Uppercase the drive letter if there is one.</li>
-     *   <li> Remove redundant slashes after the drive spec.</li>
-     *   <li> resolve all ./, .\, ../ and ..\ sequences.</li>
-     *   <li> DOS style paths that start with a drive letter will have \ as
-     *   the separator.</li>
-     * </ul>
-     *
-     *
-     * @param path the path to be normalized
-     * @return the normalized path
-     * @exception ExecutionException if there is a problem with the path
-     * @throws NullPointerException if the file path is equal to null.
-     */
-    public File normalize(String path)
-         throws NullPointerException, ExecutionException {
-
-        String platformPath = path.replace('/', File.separatorChar)
-            .replace('\\', File.separatorChar);
-
-        // make sure we are dealing with an absolute path
-        if (!platformPath.startsWith(File.separator) &&
-            !(platformPath.length() >= 2 &&
-            Character.isLetter(platformPath.charAt(0)) &&
-            platformPath.charAt(1) == ':')) {
-            String msg = path + " is not an absolute path";
-            throw new ExecutionException(msg);
-        }
-
-        boolean dosWithDrive = false;
-        String root = null;
-        // Eliminate consecutive slashes after the drive spec
-        if (platformPath.length() >= 2 &&
-            Character.isLetter(platformPath.charAt(0)) &&
-            platformPath.charAt(1) == ':') {
-
-            dosWithDrive = true;
-
-            char[] ca = platformPath.replace('/', '\\').toCharArray();
-            StringBuffer sb = new StringBuffer();
-            sb.append(Character.toUpperCase(ca[0])).append(':');
-
-            for (int i = 2; i < ca.length; i++) {
-                if ((ca[i] != '\\') ||
-                    (ca[i] == '\\' && ca[i - 1] != '\\')) {
-                    sb.append(ca[i]);
-                }
-            }
-
-            platformPath = sb.toString().replace('\\', File.separatorChar);
-            if (platformPath.length() == 2) {
-                root = platformPath;
-                platformPath = "";
-            } else {
-                root = platformPath.substring(0, 3);
-                platformPath = platformPath.substring(3);
-            }
-
-        } else {
-            if (platformPath.length() == 1) {
-                root = File.separator;
-                platformPath = "";
-            } else if (platformPath.charAt(1) == File.separatorChar) {
-                // UNC drive
-                root = File.separator + File.separator;
-                platformPath = platformPath.substring(2);
-            } else {
-                root = File.separator;
-                platformPath = platformPath.substring(1);
-            }
-        }
-
-        Stack s = new Stack();
-        s.push(root);
-        StringTokenizer tok = new StringTokenizer(platformPath, File.separator);
-        while (tok.hasMoreTokens()) {
-            String thisToken = tok.nextToken();
-            if (".".equals(thisToken)) {
-                continue;
-            } else if ("..".equals(thisToken)) {
-                if (s.size() < 2) {
-                    throw new ExecutionException("Cannot resolve path "
-                         + path);
-                } else {
-                    s.pop();
-                }
-            } else {// plain component
-                s.push(thisToken);
-            }
-        }
-
-        StringBuffer sb = new StringBuffer();
-        int size = s.size();
-        for (int i = 0; i < size; i++) {
-            if (i > 1) {
-                // not before the filesystem root and not after it, since root
-                // already contains one
-                sb.append(File.separatorChar);
-            }
-            sb.append(s.elementAt(i));
-        }
-
-        platformPath = sb.toString();
-        if (dosWithDrive) {
-            platformPath = platformPath.replace('/', '\\');
-        }
-        return new File(platformPath);
-    }
-
-}
-
diff --git a/proposal/mutant/src/java/common/org/apache/ant/common/util/Location.java b/proposal/mutant/src/java/common/org/apache/ant/common/util/Location.java
deleted file mode 100755
index 11ac8f0..0000000
--- a/proposal/mutant/src/java/common/org/apache/ant/common/util/Location.java
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.common.util;
-
-/**
- * Stores the file name and line number in a file.
- *
- * @author Conor MacNeill
- * @created 16 January 2002
- */
-public class Location {
-
-    /** Standard unknown location constant; */
-    public static final Location UNKNOWN_LOCATION = new Location();
-    
-    /** The source URL to which this location relates. */
-    private String source;
-
-    /** The line number of this location within the source */
-    private int lineNumber;
-
-    /** The column number of this location within the source */
-    private int columnNumber;
-
-    /**
-     * Creates a location consisting of a source location but no line
-     * number.
-     *
-     * @param source the source (URL) to which this location is associated.
-     */
-    public Location(String source) {
-        this(source, 1, 1);
-    }
-
-    /**
-     * Creates a location consisting of a source location and co-ordinates
-     * within that source
-     *
-     * @param source the source (URL) to which this location is associated.
-     * @param lineNumber the line number of this location
-     * @param columnNumber the column number of this location
-     */
-    public Location(String source, int lineNumber, int columnNumber) {
-        this.source = source;
-        this.lineNumber = lineNumber;
-        this.columnNumber = columnNumber;
-    }
-
-    /** Creates an "unknown" location. */
-    public Location() {
-        this(null, 0, 0);
-    }
-
-    /**
-     * Get the source for this location
-     *
-     * @return the location's source
-     */
-    public String getSource() {
-        return source;
-    }
-
-    /**
-     * Get the line number of this location
-     *
-     * @return an integer line number
-     */
-    public int getLineNumber() {
-        return lineNumber;
-    }
-
-    /**
-     * Get the column number of this location
-     *
-     * @return an integer column number
-     */
-    public int getColumnNumber() {
-        return columnNumber;
-    }
-
-    /**
-     * Returns the source name, line number and a trailing space. An error
-     * message can be appended easily. For unknown locations, returns an
-     * empty string.
-     *
-     * @return a suitable string representation of the location
-     */
-    public String toString() {
-        StringBuffer buf = new StringBuffer();
-
-        if (source != null) {
-            if (source.startsWith("file:")) {
-                buf.append(source.substring(5));
-            } else {
-                buf.append(source);
-            }
-
-            if (lineNumber != 0) {
-                buf.append(":");
-                buf.append(lineNumber);
-            }
-
-            buf.append(": ");
-        }
-
-        return buf.toString();
-    }
-}
-
diff --git a/proposal/mutant/src/java/common/org/apache/ant/common/util/PathTokenizer.java b/proposal/mutant/src/java/common/org/apache/ant/common/util/PathTokenizer.java
deleted file mode 100755
index 57c6f49..0000000
--- a/proposal/mutant/src/java/common/org/apache/ant/common/util/PathTokenizer.java
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.common.util;
-import java.io.File;
-import java.util.NoSuchElementException;
-import java.util.StringTokenizer;
-
-/**
- * A Path tokenizer takes a path and returns the components that make up
- * that path. The path can use path separators of either ':' or ';' and file
- * separators of either '/' or '\'
- *
- * @author Conor MacNeill
- * @created 20 January 2002
- */
-public class PathTokenizer {
-    /**
-     * A tokenizer to break the string up based on the ':' or ';'
-     * separators.
-     */
-    private StringTokenizer tokenizer;
-
-    /**
-     * A String which stores any path components which have been read ahead.
-     */
-    private String lookahead = null;
-
-    /**
-     * Flag to indicate whether we are running on a platform with a DOS
-     * style filesystem
-     */
-    private boolean dosStyleFilesystem;
-
-    /**
-     * Create a path tokenizer to access the components of the path
-     *
-     * @param path the path to be tokenized
-     */
-    public PathTokenizer(String path) {
-        tokenizer = new StringTokenizer(path, ":;", false);
-        dosStyleFilesystem = File.pathSeparatorChar == ';';
-    }
-
-    /**
-     * Indicate if there are more tokens available
-     *
-     * @return true if there are more tokens available
-     */
-    public boolean hasMoreTokens() {
-        if (lookahead != null) {
-            return true;
-        }
-
-        return tokenizer.hasMoreTokens();
-    }
-
-    /**
-     * Get the next token from the path's list of components
-     *
-     * @return the path component
-     * @exception NoSuchElementException if there are no more components
-     *      available.
-     */
-    public String nextToken() throws NoSuchElementException {
-        String token = null;
-        if (lookahead != null) {
-            token = lookahead;
-            lookahead = null;
-        } else {
-            token = tokenizer.nextToken().trim();
-        }
-
-        if (token.length() == 1 && Character.isLetter(token.charAt(0))
-             && dosStyleFilesystem
-             && tokenizer.hasMoreTokens()) {
-            // we are on a dos style system so this path could be a drive
-            // spec. We look at the next token
-            String nextToken = tokenizer.nextToken().trim();
-            if (nextToken.startsWith("\\") || nextToken.startsWith("/")) {
-                // we know we are on a DOS style platform and the next path
-                // starts with a slash or backslash, so we know this is a
-                // drive spec
-                token += ":" + nextToken;
-            } else {
-                // store the token just read for next time
-                lookahead = nextToken;
-            }
-        }
-
-        return token;
-    }
-}
-
diff --git a/proposal/mutant/src/java/common/org/apache/ant/common/util/PropertyUtils.java b/proposal/mutant/src/java/common/org/apache/ant/common/util/PropertyUtils.java
deleted file mode 100644
index ec2f855..0000000
--- a/proposal/mutant/src/java/common/org/apache/ant/common/util/PropertyUtils.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.common.util;
-
-import java.util.List;
-
-/**
- * A set of utilities for handling Ant properties and values
- *
- * @author Conor MacNeill
- * @created 31 January 2002
- */
-public class PropertyUtils {
-    /**
-     * This method will parse a string containing ${value} style property
-     * values into two lists. The first list is a collection of text
-     * fragments, while the other is a set of string property names. Null
-     * entries in the first list indicate a property reference from the
-     * second list.
-     *
-     * @param value the string to be parsed
-     * @param fragments the fragments parsed out of the string
-     * @param propertyRefs the property refs to be replaced
-     * @exception ExecutionException if there is a problem parsing out the
-     *      values
-     */
-    public static void parsePropertyString(String value, List fragments,
-                                           List propertyRefs)
-         throws ExecutionException {
-        int prev = 0;
-        int pos;
-        while ((pos = value.indexOf("$", prev)) >= 0) {
-            if (pos > 0) {
-                fragments.add(value.substring(prev, pos));
-            }
-
-            if (pos == (value.length() - 1)) {
-                fragments.add("$");
-                prev = pos + 1;
-            } else if (value.charAt(pos + 1) != '{') {
-                fragments.add(value.substring(pos + 1, pos + 2));
-                prev = pos + 2;
-            } else {
-                int endName = value.indexOf('}', pos);
-                if (endName < 0) {
-                    throw new ExecutionException("Syntax error in property: "
-                         + value);
-                }
-                String propertyName = value.substring(pos + 2, endName);
-                fragments.add(null);
-                propertyRefs.add(propertyName);
-                prev = endName + 1;
-            }
-        }
-
-        if (prev < value.length()) {
-            fragments.add(value.substring(prev));
-        }
-    }
-
-    /**
-     * returns the boolean equivalent of a string, which is considered true
-     * if either "on", "true", or "yes" is found, ignoring case.
-     *
-     * @param s the string value to be interpreted at a boolean
-     * @return the value of s as a boolean
-     */
-    public static boolean toBoolean(String s) {
-        return (s != null && (s.equalsIgnoreCase("on")
-             || s.equalsIgnoreCase("true")
-             || s.equalsIgnoreCase("yes")));
-    }
-
-}
-
diff --git a/proposal/mutant/src/java/common/org/apache/ant/common/util/StringUtils.java b/proposal/mutant/src/java/common/org/apache/ant/common/util/StringUtils.java
deleted file mode 100644
index 4a6c07a..0000000
--- a/proposal/mutant/src/java/common/org/apache/ant/common/util/StringUtils.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.common.util;
-import java.io.PrintWriter;
-
-import java.io.StringWriter;
-import java.util.List;
-import java.util.ArrayList;
-
-/**
- *  A set of helper methods related to string manipulation.
- *
- * @author  <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
- */
-public final class StringUtils {
-
-    /**  the line separator for this OS */
-    public static final String LINE_SEP = System.getProperty("line.separator");
-
-    /**
-     *  Convenient method to retrieve the full stacktrace from a given
-     *  exception.
-     *
-     * @param  t the exception to get the stacktrace from.
-     * @return  the stacktrace from the given exception.
-     */
-    public static String getStackTrace(Throwable t) {
-        StringWriter sw = new StringWriter();
-        PrintWriter pw = new PrintWriter(sw, true);
-        t.printStackTrace(pw);
-        pw.flush();
-        pw.close();
-        return sw.toString();
-    }
-
-    /**
-     *  Splits up a string into a list of lines. It is equivalent to <tt>
-     *  split(data, '\n')</tt> .
-     *
-     * @param  data the string to split up into lines.
-     * @return  the list of lines available in the string.
-     */
-    public static List lineSplit(String data) {
-        return split(data, '\n');
-    }
-
-    /**
-     *  Splits up a string where elements are separated by a specific
-     *  character and return all elements.
-     *
-     * @param  data the string to split up.
-     * @param  ch the separator character.
-     * @return  the list of elements.
-     */
-    public static List split(String data, int ch) {
-        List elems = new ArrayList();
-        int pos = -1;
-        int i = 0;
-        while ((pos = data.indexOf(ch, i)) != -1) {
-            String elem = data.substring(i, pos);
-            elems.add(elem);
-            i = pos + 1;
-        }
-        elems.add(data.substring(i));
-        return elems;
-    }
-
-    /**
-     *  Replace occurrences into a string.
-     *
-     * @param  data the string to replace occurrences into
-     * @param  from the occurrence to replace.
-     * @param  to the occurrence to be used as a replacement.
-     * @return  the new string with replaced occurrences.
-     */
-    public static String replace(String data, String from, String to) {
-        StringBuffer buf = new StringBuffer(data.length());
-        int pos = -1;
-        int i = 0;
-        while ((pos = data.indexOf(from, i)) != -1) {
-            buf.append(data.substring(i, pos)).append(to);
-            i = pos + from.length();
-        }
-        buf.append(data.substring(i));
-        return buf.toString();
-    }
-
-}
-
diff --git a/proposal/mutant/src/java/frontend/org/apache/ant/cli/BuildLogger.java b/proposal/mutant/src/java/frontend/org/apache/ant/cli/BuildLogger.java
deleted file mode 100755
index 020f2fe..0000000
--- a/proposal/mutant/src/java/frontend/org/apache/ant/cli/BuildLogger.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.cli;
-
-import java.io.PrintStream;
-import org.apache.ant.common.event.BuildListener;
-
-/**
- * Interface used by Ant to log the build output. A build logger is a build
- * listener which has the 'right' to send output to the ant log, which is
- * usually System.out unles redirected by the -logfile option.
- *
- * @author Conor MacNeill
- * @created 15 January 2002
- */
-public interface BuildLogger extends BuildListener {
-    /**
-     * Set the msgOutputLevel this logger is to respond to. Only messages
-     * with a message level lower than or equal to the given level are
-     * output to the log.
-     *
-     * @param level the logging level for the logger.
-     */
-    void setMessageOutputLevel(int level);
-
-    /**
-     * Set the output stream to which this logger is to send its output.
-     *
-     * @param output the output stream for the logger.
-     */
-    void setOutputPrintStream(PrintStream output);
-
-    /**
-     * Set the output stream to which this logger is to send error messages.
-     *
-     * @param err the error stream for the logger.
-     */
-    void setErrorPrintStream(PrintStream err);
-}
-
diff --git a/proposal/mutant/src/java/frontend/org/apache/ant/cli/Commandline.java b/proposal/mutant/src/java/frontend/org/apache/ant/cli/Commandline.java
deleted file mode 100755
index ca11830..0000000
--- a/proposal/mutant/src/java/frontend/org/apache/ant/cli/Commandline.java
+++ /dev/null
@@ -1,449 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.cli;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.PrintStream;
-import java.io.OutputStream;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import org.apache.ant.antcore.config.AntConfig;
-import org.apache.ant.antcore.execution.ExecutionManager;
-import org.apache.ant.antcore.modelparser.XMLProjectParser;
-import org.apache.ant.antcore.xml.XMLParseException;
-import org.apache.ant.common.event.BuildEvent;
-import org.apache.ant.common.event.BuildListener;
-import org.apache.ant.common.event.MessageLevel;
-import org.apache.ant.common.model.Project;
-import org.apache.ant.common.util.ConfigException;
-import org.apache.ant.common.util.DemuxOutputStream;
-import org.apache.ant.init.InitConfig;
-import org.apache.ant.init.InitUtils;
-import org.apache.ant.frontend.FrontendUtils;
-
-/**
- * This is the command line front end. It drives the core.
- *
- * @author Conor MacNeill
- * @created 9 January 2002
- */
-public class Commandline {
-    /** The initialisation configuration for Ant */
-    private InitConfig initConfig;
-
-    /** Stream that we are using for logging */
-    private PrintStream out = System.out;
-
-    /** Stream that we are using for logging error messages */
-    private PrintStream err = System.err;
-
-    /** Names of classes to add as listeners to project */
-    private List listeners = new ArrayList(2);
-
-    /** The list of targets to be evaluated in this invocation */
-    private List targets = new ArrayList(4);
-
-    /** The command line properties */
-    private Map definedProperties = new HashMap();
-
-    /** The Config files to use in this run */
-    private List configFiles = new ArrayList();
-
-    /**
-     * This is the build file to run. By default it is a file: type URL but
-     * other URL protocols can be used.
-     */
-    private URL buildFileURL;
-
-    /**
-     * The Ant logger class. There may be only one logger. It will have the
-     * right to use the 'out' PrintStream. The class must implements the
-     * BuildLogger interface
-     */
-    private String loggerClassname = null;
-
-    /** Our current message output status. Follows MessageLevel values */
-    private int messageOutputLevel = MessageLevel.MSG_INFO;
-
-    /** The logger that will be used for the build */
-    private BuildLogger logger = null;
-
-    /**
-     * Start the command line front end for mutant.
-     *
-     * @param args the commandline arguments
-     * @param config the initialisation configuration
-     */
-    public static void start(String[] args, InitConfig config) {
-        // create a command line and use it to run ant
-        Commandline commandline = new Commandline();
-        commandline.process(args, config);
-    }
-
-    /**
-     * Adds a feature to the BuildListeners attribute of the Commandline
-     * object
-     *
-     * @param execManager The feature to be added to the BuildListeners
-     *      attribute
-     * @exception ConfigException if the necessary listener instances could
-     *      not be created
-     */
-    protected void addBuildListeners(ExecutionManager execManager)
-         throws ConfigException {
-
-        // Add the default listener
-        execManager.addBuildListener(logger);
-
-        for (Iterator i = listeners.iterator(); i.hasNext();) {
-            String className = (String) i.next();
-            try {
-                BuildListener listener =
-                    (BuildListener) Class.forName(className).newInstance();
-                execManager.addBuildListener(listener);
-            } catch (ClassCastException e) {
-                System.err.println("The specified listener class "
-                     + className +
-                    " does not implement the Listener interface");
-                throw new ConfigException("Unable to instantiate listener "
-                     + className, e);
-            } catch (Exception e) {
-                System.err.println("Unable to instantiate specified listener "
-                     + "class " + className + " : "
-                     + e.getClass().getName());
-                throw new ConfigException("Unable to instantiate listener "
-                     + className, e);
-            }
-        }
-    }
-
-    /**
-     * Get an option value
-     *
-     * @param args the full list of command line arguments
-     * @param position the position in the args array where the value shoudl
-     *      be
-     * @param argType the option type
-     * @return the value of the option
-     * @exception ConfigException if the option cannot be read
-     */
-    private String getOption(String[] args, int position, String argType)
-         throws ConfigException {
-        String value = null;
-        try {
-            value = args[position];
-        } catch (IndexOutOfBoundsException e) {
-            throw new ConfigException("You must specify a value for the "
-                 + argType + " argument");
-        }
-        return value;
-    }
-
-
-    /**
-     * Start the command line front end for mutant.
-     *
-     * @param args the commandline arguments
-     * @param initConfig Ant's initialization configuration
-     */
-    private void process(String[] args, InitConfig initConfig) {
-        this.initConfig = initConfig;
-        ExecutionManager executionManager = null;
-        Project project = null;
-        try {
-            parseArguments(args);
-            createLogger();
-            determineBuildFile();
-
-            AntConfig config = new AntConfig();
-            AntConfig userConfig = 
-                FrontendUtils.getAntConfig(initConfig.getUserConfigArea());
-            AntConfig systemConfig
-                 = FrontendUtils.getAntConfig(initConfig.getSystemConfigArea());
-
-            if (systemConfig != null) {
-                config.merge(systemConfig);
-            }
-            if (userConfig != null) {
-                config.merge(userConfig);
-            }
-
-            for (Iterator i = configFiles.iterator(); i.hasNext();) {
-                File configFile = (File) i.next();
-                AntConfig runConfig 
-                    = FrontendUtils.getAntConfigFile(configFile);
-                config.merge(runConfig);
-            }
-
-            if (!buildFileURL.getProtocol().equals("file")
-                 && !config.isRemoteProjectAllowed()) {
-                throw new ConfigException("Remote Projects are not allowed: "
-                     + buildFileURL);
-            }
-
-            project = parseProject();
-
-            // create the execution manager to execute the build
-            executionManager = new ExecutionManager(initConfig, config);
-            OutputStream demuxOut
-                = new DemuxOutputStream(executionManager, false);
-            OutputStream demuxErr
-                = new DemuxOutputStream(executionManager, true);
-            System.setOut(new PrintStream(demuxOut));
-            System.setErr(new PrintStream(demuxErr));
-            addBuildListeners(executionManager);
-        } catch (Throwable e) {
-            if (logger != null) {
-                BuildEvent finishedEvent
-                     = new BuildEvent(this, BuildEvent.BUILD_FINISHED, e);
-                logger.buildFinished(finishedEvent);
-            } else {
-                e.printStackTrace();
-            }
-            System.exit(1);
-        }
-
-        try {
-            executionManager.runBuild(project, targets, definedProperties);
-            System.exit(0);
-        } catch (Throwable t) {
-            System.exit(1);
-        }
-    }
-
-    /**
-     * Use the XML parser to parse the build file into a project model
-     *
-     * @return a project model representation of the project file
-     * @exception XMLParseException if the project cannot be parsed
-     */
-    private Project parseProject()
-         throws XMLParseException {
-        XMLProjectParser parser = new XMLProjectParser();
-        Project project = parser.parseBuildFile(buildFileURL);
-        return project;
-    }
-
-    /**
-     * Handle build file argument
-     *
-     * @param url the build file's URL
-     * @exception ConfigException if the build file location is not valid
-     */
-    private void argBuildFile(String url) throws ConfigException {
-        try {
-            if (url.indexOf(":") == -1) {
-                // We convert any hash characters to their URL escape.
-                buildFileURL = InitUtils.getFileURL(new File(url));
-            } else {
-                buildFileURL = new URL(url);
-            }
-        } catch (MalformedURLException e) {
-            throw new ConfigException("Build file is not valid", e);
-        }
-    }
-
-    /**
-     * Handle the log file option
-     *
-     * @param arg the value of the log file option
-     * @exception ConfigException if the log file is not writeable
-     */
-    private void argLogFile(String arg) throws ConfigException {
-        try {
-            File logFile = new File(arg);
-            out = new PrintStream(new FileOutputStream(logFile));
-            err = out;
-        } catch (IOException ioe) {
-            throw new ConfigException("Cannot write on the specified log " +
-                "file. Make sure the path exists and " +
-                "you have write permissions.", ioe);
-        }
-    }
-
-    /**
-     * Handle the logger attribute
-     *
-     * @param arg the logger classname
-     * @exception ConfigException if a logger has already been defined
-     */
-    private void argLogger(String arg) throws ConfigException {
-        if (loggerClassname != null) {
-            throw new ConfigException("Only one logger class may be " +
-                "specified.");
-        }
-        loggerClassname = arg;
-    }
-
-
-    /**
-     * Determine the build file to use
-     *
-     * @exception ConfigException if the build file cannot be found
-     */
-    private void determineBuildFile() throws ConfigException {
-        if (buildFileURL == null) {
-            File defaultBuildFile 
-                = new File(FrontendUtils.DEFAULT_BUILD_FILENAME);
-            if (!defaultBuildFile.exists()) {
-                File ant1BuildFile 
-                    = new File(FrontendUtils.DEFAULT_ANT1_FILENAME);
-                if (ant1BuildFile.exists()) {
-                    defaultBuildFile = ant1BuildFile;
-                }
-            }
-            try {
-                buildFileURL = InitUtils.getFileURL(defaultBuildFile);
-            } catch (MalformedURLException e) {
-                throw new ConfigException("Build file is not valid", e);
-            }
-        }
-    }
-
-    /**
-     * Parse the command line arguments.
-     *
-     * @param args the command line arguments
-     * @exception ConfigException thrown when the command line contains some
-     *      sort of error.
-     */
-    private void parseArguments(String[] args)
-         throws ConfigException {
-
-        int i = 0;
-        while (i < args.length) {
-            String arg = args[i++];
-
-            if (arg.equals("-buildfile") || arg.equals("-file")
-                 || arg.equals("-f")) {
-                argBuildFile(getOption(args, i++, arg));
-            } else if (arg.equals("-logfile") || arg.equals("-l")) {
-                argLogFile(getOption(args, i++, arg));
-            } else if (arg.equals("-quiet") || arg.equals("-q")) {
-                messageOutputLevel = MessageLevel.MSG_WARN;
-            } else if (arg.equals("-verbose") || arg.equals("-v")) {
-                // printVersion();
-                messageOutputLevel = MessageLevel.MSG_VERBOSE;
-            } else if (arg.equals("-debug")) {
-                // printVersion();
-                messageOutputLevel = MessageLevel.MSG_DEBUG;
-            } else if (arg.equals("-config") || arg.equals("-c")) {
-                configFiles.add(new File(getOption(args, i++, arg)));
-            } else if (arg.equals("-listener")) {
-                listeners.add(getOption(args, i++, arg));
-            } else if (arg.equals("-logger")) {
-                argLogger(getOption(args, i++, arg));
-            } else if (arg.startsWith("-D")) {
-                String name = arg.substring(2, arg.length());
-                String value = null;
-                int posEq = name.indexOf("=");
-                if (posEq > 0) {
-                    value = name.substring(posEq + 1);
-                    name = name.substring(0, posEq);
-                } else {
-                    value = getOption(args, i++, arg);
-                }
-                definedProperties.put(name, value);
-            } else if (arg.startsWith("-")) {
-                // we don't have any more args to recognize!
-                System.out.println("Unknown option: " + arg);
-                return;
-            } else {
-                // if it's no other arg, it must be a target
-                targets.add(arg);
-            }
-        }
-
-    }
-
-    /**
-     * Creates the default build logger for sending build events to the ant
-     * log.
-     *
-     * @exception ConfigException if the logger cannot be instantiatd
-     */
-    private void createLogger() throws ConfigException {
-        if (loggerClassname != null) {
-            try {
-                Class loggerClass = Class.forName(loggerClassname);
-                logger = (BuildLogger) loggerClass.newInstance();
-            } catch (ClassCastException e) {
-                System.err.println("The specified logger class "
-                     + loggerClassname +
-                    " does not implement the BuildLogger interface");
-                throw new ConfigException("Unable to instantiate logger "
-                     + loggerClassname, e);
-            } catch (Exception e) {
-                System.err.println("Unable to instantiate specified logger "
-                     + "class " + loggerClassname + " : "
-                     + e.getClass().getName());
-                throw new ConfigException("Unable to instantiate logger "
-                     + loggerClassname, e);
-            }
-        } else {
-            logger = new DefaultLogger();
-        }
-
-        logger.setMessageOutputLevel(messageOutputLevel);
-        logger.setOutputPrintStream(out);
-        logger.setErrorPrintStream(err);
-    }
-}
-
diff --git a/proposal/mutant/src/java/frontend/org/apache/ant/cli/DefaultLogger.java b/proposal/mutant/src/java/frontend/org/apache/ant/cli/DefaultLogger.java
deleted file mode 100755
index b3a3345..0000000
--- a/proposal/mutant/src/java/frontend/org/apache/ant/cli/DefaultLogger.java
+++ /dev/null
@@ -1,289 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.cli;
-
-import java.io.PrintStream;
-import org.apache.ant.common.antlib.ExecutionComponent;
-import org.apache.ant.common.antlib.Task;
-import org.apache.ant.common.event.BuildEvent;
-import org.apache.ant.common.event.MessageLevel;
-import org.apache.ant.common.model.Target;
-import org.apache.ant.common.util.AntException;
-import org.apache.ant.common.util.Location;
-
-/**
- * Writes build event to a PrintStream. Currently, it only writes which
- * targets are being executed, and any messages that get logged.
- *
- * @author Conor MacNeill
- * @created 15 January 2002
- */
-public class DefaultLogger implements BuildLogger {
-
-    /** Standard field separator */
-    private static String lSep = System.getProperty("line.separator");
-    /** spacing to allow for task tags */
-    private static final int LEFT_COLUMN_SIZE = 12;
-
-    /** The stream where output should be written */
-    private PrintStream out;
-    /** The stream to where errors should be written */
-    private PrintStream err;
-    /** The level of messages which should be let through */
-    private int messageOutputLevel = MessageLevel.MSG_ERR;
-
-    /** Controls whether adornments are added */
-    private boolean emacsMode = false;
-    /** The time at which the build started */
-    private long startTime = System.currentTimeMillis();
-
-    /**
-     * Format the time into something readable
-     *
-     * @param millis Java millis value
-     * @return the formatted time
-     */
-    protected static String formatTime(long millis) {
-        long seconds = millis / 1000;
-        long minutes = seconds / 60;
-
-        if (minutes > 0) {
-            return Long.toString(minutes) + " minute"
-                 + (minutes == 1 ? " " : "s ")
-                 + Long.toString(seconds % 60) + " second"
-                 + (seconds % 60 == 1 ? "" : "s");
-        } else {
-            return Long.toString(seconds) + " second"
-                 + (seconds % 60 == 1 ? "" : "s");
-        }
-
-    }
-
-    /**
-     * Set the messageOutputLevel this logger is to respond to. Only
-     * messages with a message level lower than or equal to the given level
-     * are output to the log. <P>
-     *
-     * Constants for the message levels are in Project.java. The order of
-     * the levels, from least to most verbose, is MSG_ERR, MSG_WARN,
-     * MSG_INFO, MSG_VERBOSE, MSG_DEBUG. The default message level for
-     * DefaultLogger is Project.MSG_ERR.
-     *
-     * @param level the logging level for the logger.
-     */
-    public void setMessageOutputLevel(int level) {
-        this.messageOutputLevel = level;
-    }
-
-
-    /**
-     * Set the output stream to which this logger is to send its output.
-     *
-     * @param output the output stream for the logger.
-     */
-    public void setOutputPrintStream(PrintStream output) {
-        this.out = output;
-    }
-
-    /**
-     * Set the output stream to which this logger is to send error messages.
-     *
-     * @param err the error stream for the logger.
-     */
-    public void setErrorPrintStream(PrintStream err) {
-        this.err = err;
-    }
-
-    /**
-     * Set this logger to produce emacs (and other editor) friendly output.
-     *
-     * @param emacsMode true if output is to be unadorned so that emacs and
-     *      other editors can parse files names, etc.
-     */
-    public void setEmacsMode(boolean emacsMode) {
-        this.emacsMode = emacsMode;
-    }
-
-    /**
-     * Report an exception
-     *
-     * @param t The exception to be reported.
-     */
-    public void reportException(Throwable t) {
-        if (t instanceof AntException) {
-            AntException e = (AntException) t;
-            Location location = e.getLocation();
-            Throwable cause = e.getCause();
-            if (location != null && location != Location.UNKNOWN_LOCATION) {
-                out.print(location);
-            }
-            out.println(e.getMessage());
-
-            if (messageOutputLevel >= MessageLevel.MSG_VERBOSE) {
-                t.printStackTrace(out);
-            }
-
-            if (!cause.getMessage().equals(t.getMessage())) {
-                out.println("Root cause: " + cause.toString());
-            }
-        } else {
-            t.printStackTrace(err);
-        }
-    }
-
-    /**
-     * Description of the Method
-     *
-     * @param event Description of Parameter
-     */
-    public void buildStarted(BuildEvent event) {
-        startTime = System.currentTimeMillis();
-    }
-
-    /**
-     * Description of the Method
-     *
-     * @param event Description of Parameter
-     */
-    public void buildFinished(BuildEvent event) {
-        Throwable cause = event.getCause();
-
-        if (cause == null) {
-            out.println(lSep + "BUILD SUCCESSFUL");
-        } else {
-            err.println(lSep + "BUILD FAILED" + lSep);
-
-            reportException(cause);
-        }
-
-        out.println(lSep + "Total time: "
-             + formatTime(System.currentTimeMillis() - startTime));
-    }
-
-    /**
-     * Description of the Method
-     *
-     * @param event Description of Parameter
-     */
-    public void targetStarted(BuildEvent event) {
-        if (MessageLevel.MSG_INFO <= messageOutputLevel) {
-            Target target = (Target) event.getSource();
-            out.println(lSep + target.getName() + ":");
-        }
-    }
-
-    /**
-     * Description of the Method
-     *
-     * @param event Description of Parameter
-     */
-    public void targetFinished(BuildEvent event) {
-    }
-
-    /**
-     * Description of the Method
-     *
-     * @param event Description of Parameter
-     */
-    public void taskStarted(BuildEvent event) {
-    }
-
-    /**
-     * Description of the Method
-     *
-     * @param event Description of Parameter
-     */
-    public void taskFinished(BuildEvent event) {
-    }
-
-    /**
-     * Description of the Method
-     *
-     * @param event Description of Parameter
-     */
-    public void messageLogged(BuildEvent event) {
-        PrintStream logTo
-             = event.getPriority() == MessageLevel.MSG_ERR ? err : out;
-
-        // Filter out messages based on priority
-        if (event.getPriority() <= messageOutputLevel) {
-
-            String name = null;
-            Object source = event.getSource();
-            if (source instanceof Task) {
-                name = ((Task) source).getTaskName();
-            }
-
-            if (name == null && source instanceof ExecutionComponent) {
-                name = ((ExecutionComponent) source).getComponentType();
-            }
-
-            if (name != null) {
-                // Print out the name of the task if we're in one
-                if (!emacsMode) {
-                    String tag = "[" + name + "] ";
-                    int indentSize = LEFT_COLUMN_SIZE - tag.length();
-                    for (int i = 0; i < indentSize; i++) {
-                        logTo.print(" ");
-                    }
-                    logTo.print(tag);
-                }
-            }
-
-            // Print the message
-            logTo.println(event.getMessage());
-        }
-    }
-}
-
diff --git a/proposal/mutant/src/java/frontend/org/apache/ant/frontend/FrontendUtils.java b/proposal/mutant/src/java/frontend/org/apache/ant/frontend/FrontendUtils.java
deleted file mode 100644
index 004eefb..0000000
--- a/proposal/mutant/src/java/frontend/org/apache/ant/frontend/FrontendUtils.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.frontend;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.net.MalformedURLException;
-import java.net.URL;
-import org.apache.ant.antcore.config.AntConfig;
-import org.apache.ant.antcore.config.AntConfigHandler;
-import org.apache.ant.antcore.xml.ParseContext;
-import org.apache.ant.antcore.xml.XMLParseException;
-import org.apache.ant.common.util.ConfigException;
-import org.apache.ant.init.InitUtils;
-
-/**
- * Frontend Utilities methods and constants.
- *
- * @author Conor MacNeill
- * @created 16 April 2002
- */
-public class FrontendUtils {
-    /** The default build file name */
-    public static final String DEFAULT_BUILD_FILENAME = "build.ant";
-
-    /** The default build file name */
-    public static final String DEFAULT_ANT1_FILENAME = "build.xml";
-
-
-    /**
-     * Get the AntConfig from the given config area if it is available
-     *
-     * @param configArea the config area from which the config may be read
-     * @return the AntConfig instance representing the config info read in
-     *      from the config area. May be null if the AntConfig is not present
-     * @exception ConfigException if the URL for the config file cannotbe
-     *      formed.
-     */
-    public static AntConfig getAntConfig(File configArea)
-         throws ConfigException {
-        File configFile = new File(configArea, "antconfig.xml");
-
-        try {
-            return getAntConfigFile(configFile);
-        } catch (FileNotFoundException e) {
-            // ignore if files are not present
-            return null;
-        }
-    }
-
-
-    /**
-     * Read in a config file
-     *
-     * @param configFile the file containing the XML config
-     * @return the parsed config object
-     * @exception ConfigException if the config cannot be parsed
-     * @exception FileNotFoundException if the file cannot be found.
-     */
-    public static AntConfig getAntConfigFile(File configFile)
-         throws ConfigException, FileNotFoundException {
-        try {
-            URL configFileURL = InitUtils.getFileURL(configFile);
-
-            ParseContext context = new ParseContext();
-            AntConfigHandler configHandler = new AntConfigHandler();
-
-            context.parse(configFileURL, "antconfig", configHandler);
-
-            return configHandler.getAntConfig();
-        } catch (MalformedURLException e) {
-            throw new ConfigException("Unable to form URL to read config from "
-                 + configFile, e);
-        } catch (XMLParseException e) {
-            if (e.getCause() instanceof FileNotFoundException) {
-                throw (FileNotFoundException) e.getCause();
-            }
-
-            throw new ConfigException("Unable to parse config file from "
-                 + configFile, e);
-        }
-    }
-
-}
-
diff --git a/proposal/mutant/src/java/init/org/apache/ant/init/ClassLocator.java b/proposal/mutant/src/java/init/org/apache/ant/init/ClassLocator.java
deleted file mode 100755
index 7348a9c..0000000
--- a/proposal/mutant/src/java/init/org/apache/ant/init/ClassLocator.java
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.init;
-import java.net.MalformedURLException;
-
-import java.net.URL;
-import java.io.File;
-
-/**
- * The ClassLocator is a utility class which is used to determine the URL
- * from which a class was loaded.
- *
- * @author Conor MacNeill
- * @created 9 January 2002
- */
-public class ClassLocator {
-    /**
-     * Get the URL for the given class's load location.
-     *
-     * @param theClass the class whose loadURL is desired.
-     * @return a URL which identifies the component from which this class
-     *      was loaded.
-     * @throws MalformedURLException if the class' URL cannot be
-     *      constructed.
-     */
-    public static URL getClassLocationURL(Class theClass)
-         throws MalformedURLException {
-        String className = theClass.getName().replace('.', '/') + ".class";
-        URL classRawURL = theClass.getClassLoader().getResource(className);
-
-        String fileComponent = classRawURL.getFile();
-        if (classRawURL.getProtocol().equals("file")) {
-            // Class comes from a directory of class files rather than
-            // from a jar.
-            int classFileIndex = fileComponent.lastIndexOf(className);
-            if (classFileIndex != -1) {
-                fileComponent = fileComponent.substring(0, classFileIndex);
-            }
-
-            return new URL("file:" + fileComponent);
-        } else if (classRawURL.getProtocol().equals("jar")) {
-            // Class is coming from a jar. The file component of the URL
-            // is actually the URL of the jar file
-            int classSeparatorIndex = fileComponent.lastIndexOf("!");
-            if (classSeparatorIndex != -1) {
-                fileComponent = fileComponent.substring(0, classSeparatorIndex);
-            }
-
-            return new URL(fileComponent);
-        } else {
-            // its running out of something besides a jar.
-            // We just return the Raw URL as a best guess
-            return classRawURL;
-        }
-    }
-
-    /**
-     * Get the URLs necessary to load the Sun compiler tools. In some JVMs
-     * this is available in the VM's system loader, in others we have to
-     * find it ourselves
-     *
-     * @return the URL to the tools jar if available, null otherwise
-     * @throws InitException if the URL to the tools jar cannot be formed.
-     */
-    public static URL getToolsJarURL()
-         throws InitException {
-        try {
-            // just check whether this throws an exception
-            Class.forName("sun.tools.javac.Main");
-            // tools jar is on system classpath - no need for URL
-            return null;
-        } catch (ClassNotFoundException cnfe) {
-            try {
-                // couldn't find compiler - try to find tools.jar
-                // based on java.home setting
-                String javaHome = System.getProperty("java.home");
-                if (javaHome.endsWith("jre")) {
-                    javaHome = javaHome.substring(0, javaHome.length() - 4);
-                }
-                File toolsjar = new File(javaHome + "/lib/tools.jar");
-                if (!toolsjar.exists()) {
-                    System.out.println("Unable to locate tools.jar. "
-                         + "Expected to find it in " + toolsjar.getPath());
-                    return null;
-                }
-                URL toolsJarURL = InitUtils.getFileURL(toolsjar);
-                return toolsJarURL;
-            } catch (MalformedURLException e) {
-                throw new InitException(e);
-            }
-        }
-    }
-}
-
diff --git a/proposal/mutant/src/java/init/org/apache/ant/init/InitConfig.java b/proposal/mutant/src/java/init/org/apache/ant/init/InitConfig.java
deleted file mode 100755
index bfe8dd5..0000000
--- a/proposal/mutant/src/java/init/org/apache/ant/init/InitConfig.java
+++ /dev/null
@@ -1,352 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.init;
-import java.io.File;
-
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.URLClassLoader;
-
-/**
- * InitConfig is the initialization configuration created to start Ant. This
- * is passed to the front end when Ant is started.
- *
- * @author Conor MacNeill
- * @created 9 January 2002
- */
-public class InitConfig {
-
-    /** The default name of the jar containing the XML parser */
-    public static final String DEFAULT_PARSER_JAR = "crimson.jar";
-
-    /** The system classloader */
-    private ClassLoader systemLoader;
-
-    /**
-     * The common class loader loads components which are common to tasks
-     * and the core
-     */
-    private ClassLoader commonLoader;
-
-    /**
-     * The core loader is the loader which loads classes which are
-     * exclusively used by the Ant core
-     */
-    private ClassLoader coreLoader;
-
-    /**
-     * The tools.jar URL is available for things which require the Sun tools
-     * jar
-     */
-    private URL toolsJarURL;
-
-    /**
-     * The URLs to the Ant XML parser. These are available to allow tasks
-     * which require XML support to use the standard parser rather than
-     * having to supply their own
-     */
-    private URL[] parserURLs;
-
-    /**
-     * The location of the Ant library directory from which tasks may be
-     * loaded
-     */
-    private URL libraryURL;
-
-    /** The location of the system configuration file */
-    private File systemConfigArea;
-
-    /** The location of ANT_HOME */
-    private URL antHome;
-
-    /** The location of the user config file */
-    private File userConfigArea;
-
-    /**
-     * Constructor for the Initialization configuration
-     *
-     * @param libraryClass - a class loaded from the Ant library area.
-     * @exception InitException if the configuration cannot be initialized
-     */
-    public InitConfig(Class libraryClass) throws InitException {
-        try {
-            URL antLibURL = getAntLibURL(libraryClass);
-            setLibraryURL(antLibURL);
-
-            URL antHome = new URL(antLibURL, "..");
-            setAntHome(antHome);
-            if (antHome.getProtocol().equals("file")) {
-                File systemConfigArea = new File(antHome.getFile(), "conf");
-                setSystemConfigArea(systemConfigArea);
-            }
-            File userConfigArea
-                 = new File(System.getProperty("user.home"), ".ant/conf");
-            setUserConfigArea(userConfigArea);
-
-            // set up the class loaders that will be used when running Ant
-            ClassLoader systemLoader = getClass().getClassLoader();
-            setSystemLoader(systemLoader);
-            URL toolsJarURL = ClassLocator.getToolsJarURL();
-            setToolsJarURL(toolsJarURL);
-
-            URL commonJarLib = new URL(libraryURL, "common/");
-            ClassLoader commonLoader
-                 = new URLClassLoader(LoaderUtils.getLocationURLs(commonJarLib,
-                "common.jar"), systemLoader);
-            setCommonLoader(commonLoader);
-
-            // core needs XML parser for parsing various XML components.
-            URL parserBase = new URL(libraryURL, "parser/");
-            URL[] parserURLs
-                 = LoaderUtils.getLocationURLs(parserBase, DEFAULT_PARSER_JAR);
-            setParserURLs(parserURLs);
-
-            URL[] coreURLs
-                 = LoaderUtils.getLocationURLs(new URL(libraryURL, "antcore/"),
-                "antcore.jar");
-            URL[] combinedURLs = new URL[parserURLs.length + coreURLs.length];
-            System.arraycopy(coreURLs, 0, combinedURLs, 0, coreURLs.length);
-            System.arraycopy(parserURLs, 0, combinedURLs, coreURLs.length,
-                parserURLs.length);
-            ClassLoader coreLoader = new URLClassLoader(combinedURLs,
-                commonLoader);
-            setCoreLoader(coreLoader);
-        } catch (MalformedURLException e) {
-            throw new InitException(e);
-        }
-    }
-
-    /**
-     * Sets the location of the user configuration files
-     *
-     * @param userConfigArea the new user config area
-     */
-    public void setUserConfigArea(File userConfigArea) {
-        this.userConfigArea = userConfigArea;
-    }
-
-    /**
-     * Set the location of ANT_HOME
-     *
-     * @param antHome the new value of ANT_HOME
-     */
-    public void setAntHome(URL antHome) {
-        this.antHome = antHome;
-    }
-
-    /**
-     * Sets the location of the system configuration files
-     *
-     * @param systemConfigArea the new system config area
-     */
-    public void setSystemConfigArea(File systemConfigArea) {
-        this.systemConfigArea = systemConfigArea;
-    }
-
-    /**
-     * Sets the systemLoader of the InitConfig
-     *
-     * @param systemLoader the new systemLoader value
-     */
-    public void setSystemLoader(ClassLoader systemLoader) {
-        this.systemLoader = systemLoader;
-    }
-
-    /**
-     * Sets the commonLoader of the InitConfig
-     *
-     * @param commonLoader the new commonLoader value
-     */
-    public void setCommonLoader(ClassLoader commonLoader) {
-        this.commonLoader = commonLoader;
-    }
-
-    /**
-     * Sets the coreLoader of the InitConfig
-     *
-     * @param coreLoader the new coreLoader value
-     */
-    public void setCoreLoader(ClassLoader coreLoader) {
-        this.coreLoader = coreLoader;
-    }
-
-    /**
-     * Sets the toolsJarURL of the InitConfig
-     *
-     * @param toolsJarURL the new toolsJarURL value
-     */
-    public void setToolsJarURL(URL toolsJarURL) {
-        this.toolsJarURL = toolsJarURL;
-    }
-
-    /**
-     * Sets the parserURLs of the InitConfig
-     *
-     * @param parserURLs the new parserURLs value
-     */
-    public void setParserURLs(URL[] parserURLs) {
-        this.parserURLs = parserURLs;
-    }
-
-    /**
-     * Sets the libraryURL of the InitConfig
-     *
-     * @param libraryURL the new libraryURL value
-     */
-    public void setLibraryURL(URL libraryURL) {
-        this.libraryURL = libraryURL;
-    }
-
-    /**
-     * Get the location of the user's config files
-     *
-     * @return the location of the user's Ant config files
-     */
-    public File getUserConfigArea() {
-        return userConfigArea;
-    }
-
-    /**
-     * Get the location of Ant's home area
-     *
-     * @return the location of ANT_HOME
-     */
-    public URL getAntHome() {
-        return antHome;
-    }
-
-    /**
-     * Get the location of the system config files
-     *
-     * @return the location of the system Ant config files
-     */
-    public File getSystemConfigArea() {
-        return systemConfigArea;
-    }
-
-    /**
-     * Gets the systemLoader of the InitConfig
-     *
-     * @return the systemLoader value
-     */
-    public ClassLoader getSystemLoader() {
-        return systemLoader;
-    }
-
-    /**
-     * Gets the commonLoader of the InitConfig
-     *
-     * @return the commonLoader value
-     */
-    public ClassLoader getCommonLoader() {
-        return commonLoader;
-    }
-
-    /**
-     * Gets the coreLoader of the InitConfig
-     *
-     * @return the coreLoader value
-     */
-    public ClassLoader getCoreLoader() {
-        return coreLoader;
-    }
-
-    /**
-     * Gets the toolsJarURL of the InitConfig
-     *
-     * @return the toolsJarURL value
-     */
-    public URL getToolsJarURL() {
-        return toolsJarURL;
-    }
-
-    /**
-     * Gets the parserURLs of the InitConfig
-     *
-     * @return the parserURLs value
-     */
-    public URL[] getParserURLs() {
-        return parserURLs;
-    }
-
-    /**
-     * Gets the libraryURL of the InitConfig
-     *
-     * @return the libraryURL value
-     */
-    public URL getLibraryURL() {
-        return libraryURL;
-    }
-
-    /**
-     * Get a URL to the Ant Library directory.
-     *
-     * @param libraryClass - a class loaded from the Ant library area.
-     * @return the URL for the Ant library directory
-     * @throws MalformedURLException if there is a problem constructing the 
-     *      library URL
-     */
-    private URL getAntLibURL(Class libraryClass) throws MalformedURLException {
-        URL initClassURL = ClassLocator.getClassLocationURL(libraryClass);
-
-        String initURLString = initClassURL.toString();
-        int index = initURLString.lastIndexOf("/");
-        if (index != -1) {
-            initURLString = initURLString.substring(0, index + 1);
-        }
-
-        return  new URL(initURLString);
-    }
-}
-
diff --git a/proposal/mutant/src/java/init/org/apache/ant/init/InitException.java b/proposal/mutant/src/java/init/org/apache/ant/init/InitException.java
deleted file mode 100755
index ac4372d..0000000
--- a/proposal/mutant/src/java/init/org/apache/ant/init/InitException.java
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.init;
-
-import java.io.PrintStream;
-import java.io.PrintWriter;
-
-/**
- * An InitException is an exception which occurs during Ant initialization
- * phase. Such exceptions are usually fatal because Ant cannot be
- * sufficiently initialised to properly handle the exception.
- *
- * @author Conor MacNeill
- * @created 11 January 2002
- */
-public class InitException extends Exception {
-
-    /** Nested Exception if any. */
-    private Throwable cause = null;
-
-    /**
-     * Constructs an exception with the given descriptive message.
-     *
-     * @param msg Description of or information about the exception.
-     */
-    public InitException(String msg) {
-        super(msg);
-    }
-
-
-    /**
-     * Constructs an exception with the given message and exception as a
-     * root cause.
-     *
-     * @param msg Description of or information about the exception.
-     * @param cause Throwable that might have cause this one.
-     */
-    public InitException(String msg, Throwable cause) {
-        super(msg);
-        this.cause = cause;
-    }
-
-
-    /**
-     * Constructs an exception with the given exception as a root cause.
-     *
-     * @param cause Exception that might have caused this one.
-     */
-    public InitException(Throwable cause) {
-        super(cause.getMessage());
-        this.cause = cause;
-    }
-
-
-    /** Print the stack trace to System.err */
-    public void printStackTrace() {
-        printStackTrace(System.err);
-    }
-
-
-    /**
-     * Print the stack trace to the given PrintStream
-     *
-     * @param ps the PrintStream onto which the stack trace of this
-     *      exception is to be printed
-     */
-    public void printStackTrace(PrintStream ps) {
-        synchronized (ps) {
-            ps.println(this);
-            if (cause != null) {
-                ps.println("--- Nested Exception ---");
-                cause.printStackTrace(ps);
-            }
-        }
-    }
-
-
-    /**
-     * Print the stack trace to the given PrintWriter
-     *
-     * @param pw the PrintWriter onto which the stack trace of this
-     *      exception is to be printed
-     */
-    public void printStackTrace(PrintWriter pw) {
-        synchronized (pw) {
-            pw.println(this);
-            if (cause != null) {
-                pw.println("--- Nested Exception ---");
-                cause.printStackTrace(pw);
-            }
-        }
-    }
-}
-
diff --git a/proposal/mutant/src/java/init/org/apache/ant/init/InitUtils.java b/proposal/mutant/src/java/init/org/apache/ant/init/InitUtils.java
deleted file mode 100755
index 8a33c5b..0000000
--- a/proposal/mutant/src/java/init/org/apache/ant/init/InitUtils.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.init;
-
-import java.io.File;
-import java.net.MalformedURLException;
-import java.net.URL;
-
-/**
- * A set of utility methods required during initialisation and beyond
- *
- * @author Conor MacNeill
- * @created 20 January 2002
- */
-public class InitUtils {
-    /**
-     * Get the URL for a file taking into account # characters
-     *
-     * @param file the file whose URL representation is required.
-     * @return The FileURL value
-     * @throws MalformedURLException if the URL representation cannot be
-     *      formed.
-     */
-    public static URL getFileURL(File file) throws MalformedURLException {
-        String uri = "file:" + file.getAbsolutePath().replace('\\', '/');
-        for (int i = uri.indexOf('#'); i != -1; i = uri.indexOf('#')) {
-            uri = uri.substring(0, i) + "%23" + uri.substring(i + 1);
-        }
-        if (file.isDirectory()) {
-            uri += "/";
-        }
-        return new URL(uri);
-    }
-
-}
-
diff --git a/proposal/mutant/src/java/init/org/apache/ant/init/LoaderUtils.java b/proposal/mutant/src/java/init/org/apache/ant/init/LoaderUtils.java
deleted file mode 100755
index fc5b7a2..0000000
--- a/proposal/mutant/src/java/init/org/apache/ant/init/LoaderUtils.java
+++ /dev/null
@@ -1,287 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.init;
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FilenameFilter;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.PrintStream;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * LoaderUtils is a utility class with methods for configuring a class
- * loader from a URL.
- *
- * @author Conor MacNeill
- * @created 9 January 2002
- */
-public class LoaderUtils {
-
-    /**
-     * This is the file that is consulted on remote systems to specify
-     * available jars
-     */
-    public static final String LIST_FILE = "file.list";
-
-
-    /**
-     * Get the URLs of a set of libraries in the given location
-     *
-     * @param location the location to be searched
-     * @param defaultFile default file if none can be found
-     * @return an array of URLs for the relevant jars
-     * @exception MalformedURLException the URLs cannot be created
-     */
-    public static URL[] getLocationURLs(URL location, String defaultFile)
-         throws MalformedURLException {
-        return getLocationURLs(location, defaultFile, new String[]{".jar"});
-    }
-
-    /**
-     * Get the URLs of a set of libraries in the given location
-     *
-     * @param location the location to be searched
-     * @param extensions array of allowable file extensions
-     * @param defaultFile default file if none can be found
-     * @return an array of URLs for the relevant jars
-     * @exception MalformedURLException if the URL to the jars could not be
-     *      formed
-     */
-    public static URL[] getLocationURLs(URL location, String defaultFile,
-                                        String[] extensions)
-         throws MalformedURLException {
-        URL[] urls = null;
-        if (location.getProtocol().equals("file")) {
-            // URL is local filesystem.
-            urls = getLocalURLs(new File(location.getFile()), extensions);
-        } else {
-            // URL is remote - try to read a file with the list of jars
-            URL jarListURL = new URL(location, LIST_FILE);
-            BufferedReader reader = null;
-            List jarList = new ArrayList();
-            try {
-                InputStreamReader isr
-                     = new InputStreamReader(jarListURL.openStream());
-                reader = new BufferedReader(isr);
-                String line = null;
-                while ((line = reader.readLine().trim()) != null) {
-                    for (int i = 0; i < extensions.length; ++i) {
-                        if (line.endsWith(extensions[i])) {
-                            jarList.add(new URL(location, line));
-                            break;
-                        }
-                    }
-                }
-                urls = (URL[]) jarList.toArray(new URL[0]);
-            } catch (IOException e) {
-                // use the default location
-                if (defaultFile != null) {
-                    urls = new URL[]{new URL(location, defaultFile)};
-                }
-            } finally {
-                if (reader != null) {
-                    try {
-                        reader.close();
-                    } catch (IOException e) {
-                    }
-                }
-            }
-        }
-
-        return urls;
-    }
-
-    /**
-     * Get the classpath from a classloader. This can only extract path
-     * components from the loaders which are instances of URLClassLoaders
-     *
-     * @param loader the loader whose path is required
-     * @return the loader's configuration expressed as a classpath
-     */
-    public static String getClasspath(ClassLoader loader) {
-        StringBuffer pathBuffer = null;
-        if (loader instanceof URLClassLoader) {
-            URLClassLoader urlLoader = (URLClassLoader) loader;
-            URL[] urls = urlLoader.getURLs();
-            for (int i = 0; i < urls.length; ++i) {
-                if (!urls[i].getProtocol().equals("file")) {
-                    continue;
-                }
-                String pathElement = urls[i].getFile();
-                if (pathBuffer == null) {
-                    pathBuffer = new StringBuffer(pathElement);
-                } else {
-                    pathBuffer.append(File.pathSeparatorChar);
-                    pathBuffer.append(pathElement);
-                }
-            }
-        }
-        String path = pathBuffer == null ? "" : pathBuffer.toString();
-        ClassLoader parentLoader = loader.getParent();
-        if (parentLoader != null) {
-            String parentPath = getClasspath(parentLoader);
-            if (parentPath.length() != 0) {
-                path = parentPath + File.pathSeparator + path;
-            }
-        }
-
-        return path;
-    }
-
-
-    /**
-     * Debug method to dump a class loader hierarchy to a PrintStream
-     * URLClassLoaders dump their URLs
-     *
-     * @param loader the class loaders whose configuration is dumped
-     * @param ps PrintStream to which info is sent
-     */
-    public static void dumpLoader(PrintStream ps, ClassLoader loader) {
-        if (loader instanceof URLClassLoader) {
-            URLClassLoader urlLoader = (URLClassLoader) loader;
-            URL[] urls = urlLoader.getURLs();
-            if (urls.length == 0) {
-                ps.println("   No URLs");
-            } else {
-                for (int i = 0; i < urls.length; ++i) {
-                    ps.println("   URL: " + urls[i]);
-                }
-            }
-        } else {
-            ps.println("Class Loader: " + loader.getClass().getName());
-        }
-        ps.println();
-
-        ClassLoader parentLoader = loader.getParent();
-        if (parentLoader != null) {
-            ps.println("Parent Loader:");
-            dumpLoader(ps, parentLoader);
-        }
-    }
-
-
-    /**
-     * Get an array of URLs for each file in the filesystem. If the given
-     * location is a directory, it is searched for files of the given
-     * extension. If it is a file, it is returned as a URL if it matches the
-     * given extension list.
-     *
-     * @param location the location within the local filesystem to be
-     *      searched
-     * @param extensions an array of file extensions to be considered in the
-     *      search
-     * @return an array of URLs for the file found in the directory.
-     * @exception MalformedURLException if the URLs to the jars cannot be
-     *      formed
-     */
-    private static URL[] getLocalURLs(File location,
-                                      final String[] extensions)
-         throws MalformedURLException {
-        URL[] urls = new URL[0];
-
-        if (!location.exists()) {
-            return urls;
-        }
-
-        if (!location.isDirectory()) {
-            urls = new URL[1];
-            String path = location.getPath();
-            for (int i = 0; i < extensions.length; ++i) {
-                if (path.endsWith(extensions[i])) {
-                    urls[0] = InitUtils.getFileURL(location);
-                    break;
-                }
-            }
-            return urls;
-        }
-
-        File[] jars = location.listFiles(
-            new FilenameFilter() {
-                public boolean accept(File dir, String name) {
-                    for (int i = 0; i < extensions.length; ++i) {
-                        if (name.endsWith(extensions[i])) {
-                            return true;
-                        }
-                    }
-                    return false;
-                }
-            });
-        urls = new URL[jars.length];
-        for (int i = 0; i < jars.length; ++i) {
-            urls[i] = InitUtils.getFileURL(jars[i]);
-        }
-        return urls;
-    }
-
-    /**
-     * Set the context loader of the current thread and returns the existing
-     * classloader
-     *
-     * @param newLoader the new context loader
-     * @return the old context loader
-     */
-    public static ClassLoader setContextLoader(ClassLoader newLoader) {
-        Thread thread = Thread.currentThread();
-        ClassLoader currentLoader = thread.getContextClassLoader();
-        thread.setContextClassLoader(newLoader);
-        return currentLoader;
-    }
-
-}
-
diff --git a/proposal/mutant/src/java/remote/org/apache/ant/remote/RemoteMain.java b/proposal/mutant/src/java/remote/org/apache/ant/remote/RemoteMain.java
deleted file mode 100644
index 35d5d5e..0000000
--- a/proposal/mutant/src/java/remote/org/apache/ant/remote/RemoteMain.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.remote;
-
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.lang.reflect.Method;
-
-/**
- * Command line to run Ant core from a remote server
- *
- * @author Conor MacNeill
- * @created 27 January 2002
- */
-public class RemoteMain {
-    /**
-     * The main program for the RemoteLauncher class
-     *
-     * @param args The command line arguments
-     * @exception Exception if the launcher encounters a problem
-     */
-    public static void main(String[] args) throws Exception {
-
-        if (args.length == 0) {
-            throw new Exception("You must specify the location of the " 
-                + "remote server");
-        }
-        
-        String antHome = args[0];
-
-        URL[] remoteStart = new URL[1];
-        remoteStart[0] = new URL(antHome + "/lib/start.jar");
-        URLClassLoader remoteLoader = new URLClassLoader(remoteStart);
-
-        String[] realArgs = new String[args.length - 1];
-        System.arraycopy(args, 1, realArgs, 0, realArgs.length);
-
-        System.out.print("Loading remote Ant ... ");
-        Class launcher 
-            = Class.forName("org.apache.ant.start.Main", true, remoteLoader);
-
-        final Class[] param = {Class.forName("[Ljava.lang.String;")};
-        final Method startMethod = launcher.getMethod("main", param);
-        final Object[] arguments = {realArgs};
-        System.out.println("Done");
-        System.out.println("Starting Ant from remote server");
-        startMethod.invoke(null, arguments);
-    }
-}
-
diff --git a/proposal/mutant/src/java/start/org/apache/ant/start/Main.java b/proposal/mutant/src/java/start/org/apache/ant/start/Main.java
deleted file mode 100755
index 7b5eef3..0000000
--- a/proposal/mutant/src/java/start/org/apache/ant/start/Main.java
+++ /dev/null
@@ -1,217 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.ant.start;
-
-import java.io.IOException;
-import java.lang.reflect.Method;
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.util.jar.Attributes;
-import java.util.jar.JarInputStream;
-import java.util.jar.Manifest;
-import org.apache.ant.init.InitConfig;
-import org.apache.ant.init.InitException;
-import java.io.File;
-
-/**
- *  This is the main startup class for the command line interface of Ant. It
- *  establishes the classloaders used by the other components of Ant.
- *
- * @author  Conor MacNeill
- * @created  9 January 2002
- */
-public class Main {
-    /**  The actual class that implements the command line front end. */
-    public static final String DEFAULT_COMMANDLINE_CLASS
-         = "org.apache.ant.cli.Commandline";
-
-    /**  The default front end name */
-    public static final String DEFAULT_FRONTEND = "cli";
-
-
-    /**
-     *  Entry point for starting command line Ant
-     *
-     * @param  args commandline arguments
-     * @exception  Exception if there is a problem running Ant
-     */
-    public static void main(String[] args) throws Exception {
-        Main main = new Main();
-        int frontendIndex = -1;
-        String frontend = DEFAULT_FRONTEND;
-
-        for (int i = 0; i < args.length; ++i) {
-            if (args[i].equals("-frontend")) {
-                frontendIndex = i;
-                break;
-            }
-        }
-
-        if (frontendIndex != -1) {
-            try {
-                frontend = args[frontendIndex + 1];
-            } catch (IndexOutOfBoundsException e) {
-                throw new InitException("You must specify a value for the "
-                     + "-frontend argument");
-            }
-
-            String[] newArgs = new String[args.length - 2];
-
-            System.arraycopy(args, 0, newArgs, 0, frontendIndex);
-            if (args.length > (frontendIndex + 2)) {
-                System.arraycopy(args, frontendIndex + 2, newArgs,
-                    frontendIndex, args.length - frontendIndex - 2);
-            }
-            args = newArgs;
-        }
-
-        String defaultClass = frontend.equals(DEFAULT_FRONTEND)
-             ? DEFAULT_COMMANDLINE_CLASS : null;
-
-        main.start(frontend, defaultClass, args);
-    }
-
-
-    /**
-     *  Internal start method used to initialise front end
-     *
-     * @param  frontend the frontend jar to launch
-     * @param  args commandline arguments
-     * @param  defaultClass the default class to use if it cannot be determined 
-     *         from the jar itself
-     * @exception  InitException if the front end cannot be started
-     */
-    public void start(String frontend, String defaultClass, String[] args)
-         throws InitException {
-        try {             
-            InitConfig config = new InitConfig(getClass());
-    
-            URL frontendJar = new URL(config.getLibraryURL(),
-                "frontend/" + frontend + ".jar");
-            URL[] frontendJars = new URL[]{frontendJar};
-            ClassLoader frontEndLoader
-                 = new URLClassLoader(frontendJars, config.getCoreLoader());
-    
-            //System.out.println("Front End Loader config");
-            //LoaderUtils.dumpLoader(System.out, frontEndLoader);
-
-            if (frontendJar.getProtocol().equals("file")) {
-                File jarFile = new File(frontendJar.getFile());
-                if (!jarFile.exists()) {
-                    throw new InitException("Could not find jar for frontend \""
-                        + frontend + "\" - expected at " + frontendJar);
-                }
-            }
-            String mainClass = getMainClass(frontendJar);
-    
-            if (mainClass == null) {
-                mainClass = defaultClass;
-            }
-    
-            if (mainClass == null) {
-                throw new InitException("Unable to determine main class "
-                     + " for \"" + frontend + "\" frontend");
-            }
-    
-            // Now start the front end by reflection.
-            Class frontendClass = Class.forName(mainClass, true,
-                frontEndLoader);
-    
-            final Class[] param = {Class.forName("[Ljava.lang.String;"),
-                InitConfig.class};
-            final Method startMethod
-                 = frontendClass.getMethod("start", param);
-            final Object[] argument = {args, config};
-    
-            startMethod.invoke(null, argument);
-        } catch (Exception e) {
-            throw new InitException(e);
-        }
-    }
-
-
-    /**
-     *  Pick up the main class from a jar's manifest
-     *
-     * @param  jarURL the URL to the jar
-     * @return  the jar's main-class or null if it is not specified or
-     *      cannot be determined.
-     */
-    private String getMainClass(URL jarURL) {
-        try {
-            JarInputStream stream = null;
-
-            try {
-                stream = new JarInputStream(jarURL.openStream());
-
-                Manifest manifest = stream.getManifest();
-
-                if (manifest == null) {
-                    return null;
-                }
-                Attributes mainAttributes = manifest.getMainAttributes();
-
-                return mainAttributes.getValue("Main-Class");
-            } finally {
-                if (stream != null) {
-                    stream.close();
-                }
-            }
-        } catch (IOException e) {
-            // ignore
-            return null;
-        }
-    }
-}
-
diff --git a/proposal/mutant/src/java/start/org/apache/tools/ant/Main.java b/proposal/mutant/src/java/start/org/apache/tools/ant/Main.java
deleted file mode 100755
index 9acd8c6..0000000
--- a/proposal/mutant/src/java/start/org/apache/tools/ant/Main.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant;
-
-/**
- *  Old Ant1 entry point
- *
- * @author  Conor MacNeill
- * @created  4 April 2002
- */
-public class Main {
-    /**
-     *  Entry point for starting command line Ant
-     *
-     * @param  args commandline arguments
-     * @exception  Exception if there is a problem running Ant
-     */
-    public static void main(String[] args) throws Exception {
-        org.apache.ant.start.Main.main(args);
-    }
-}
-
diff --git a/proposal/mutant/xdocs/desc.xml b/proposal/mutant/xdocs/desc.xml
deleted file mode 100644
index a97dd14..0000000
--- a/proposal/mutant/xdocs/desc.xml
+++ /dev/null
@@ -1,607 +0,0 @@
-<?xml version="1.0"?>
-<document>
-
-  <properties>
-    <author email="">Conor MacNeill</author>
-    <title>Mutant Design Notes</title>
-  </properties>
-
-<body>
-
-<section name="Mutant Design Notes">
-<p>
-This is a brief, albeit rambling description of Mutant.
-Mutant has many experimental ideas which may or may not prove useful.
-I'll try to describe what is there and let anyone who is interested
-comment. Mutant is still immature. You'll notice that there is, at this
-time, just one task, a hacked version of the echo task, which I have
-been using to test out ideas. Most tasks would end up being pretty
-similar to their Ant 1.x version.
-</p>
-
-<p>
-OK, let me start with some of the motivating requirements. There are of
-coure many Ant2 requirements but I want to focus on these two for now.
-Mutant does also address many of the other Ant2 requirements. 
-</p>
-
-<p>
-I'll use the terms Ant and mutant somewhat interchangeably - just
-habit, not an assumption of any sort.
-</p>
-
-<p>
-One of the things which is pretty difficult in Ant 1.x is the
-management of classpaths and classloaders. For example, today the
-antlr task requires the antlr classes in the classpath used to start
-ant. I'm talking here about the classpath built up in the ant.bat/ant
-script launchers. At the same time, the checkstyle task
-which uses antlr won't run if the antlr classes are in the classpath
-because then those classes cannot &quot;see&quot; the classes in the taskdef's
-classpath.
-</p>
-
-<p>
-Another requirement I have is extensibility. In Ant 1.x this is
-difficult because whenever a new type is created, each task which
-needs to support this type must be changed to provide the new addXXX
-method. The ejbjar task is on example of this problem with its concept of vendor
-specific tools. The zip/jar task, with its support for different types
-of fileset, is another. The addition of the classfileset to Ant requires
-a change to the zip task.
-</p>
-</section>
-
-<section name="Mutant Initialization">
-<p>
-Mutant defines a classloader hierarchy somewhat similar to that used
-in Tomcat 4. Tasks join into this hierarchy at a particular point to
-ensure they have visibility of the necessary interface classes and no
-visibility of the Ant core itself. There is nothing particularly novel
-about this approach, but tasks are able to request certain additional resources
-as we will see later.
-</p>
-
-<p>
-Mutant starts with two jars. One is the start.jar which contains just
-one class, Main.java which establishes the initial configuration and
-then runs the appropriate front end command line class. If a different
-front end was desired, a different launch class, in its own jar, would
-be used. This would perhaps configure the classloader hierarchy somewhat
-differently and start the approriate GUI front end class.
-</p>
-
-<p> 
-The second jar, init.jar, provides a number of initialisation utilities. These
-are used by Main.java to setup Ant and would also be used by any other front end
-to configure Ant. The important class here is the
-InitConfig which communicates the state of Ant at startup into the the core of
-Ant when it starts up. Main determines the location of ANT_HOME based on the
-location of the start classes and then populates the InitConfig with both
-classloaders and information about the location of various jars and config
-files.
-</p>
-
-<p> 
-At the top of the classloader hierarchy 
-are the bootstrap and system classloaders. I won't really
-distinguish between these in mutant. Combined they provide the JDK
-classes, plus the classes from the init and start jars. One objective is
-to keep the footprint of the init and start jars small so they do not
-require any external classes, which may then become visible lower in the
-hierarchy. Main does not explicitly create these loaders, of course, but
-just adds a reference to the init config as system class loader 
-</p>
-
-<p> 
-The next jar is for the common area. This provides interface definitions
-and utility classes for use by both the core and by tasks/types etc. It
-is loaded from ANT_HOME/lib/common/*.jar. Typically this is just
-lib/common/common.jar but any other jars in here are loaded. This
-pattern is used in the construction of all of the classloaders.
-</p>
-
-<p> 
-Next up is the core loader. It includes the lib/antcore/antcore.jar plus
-any others including the XML parser jars. Mutant's core does not assume that
-the project model will come from an XML description but XML facilities
-are needed in the core for reading in Ant library defs and config files.
-The parser jar locations are also stored in the init config. This lets
-the jars be added to any Ant library that wants to use Ant's XML parser
-rather than providing its own. Similarly tools.jar's location is
-determined automatically and added to the config for use by tasks which
-request it. I'll go into more detail when discussing the antlib processing. 
-</p>
-
-<p> 
-The final jar that is loaded is the jar for the frontend - cli.jar. This
-is not passed in init config since these classes are not visible to the
-core and are not needed by it. So the hierarchy is
-<pre> 
-jdk classes
-    |
-start/init
-    |
- common
-    |
- antcore
-    |
-   cli
-</pre>
-</p>
-
-<p> 
-Task classloaders generally will come in at common, hiding the core classes, front
-end and XML parser classes from tasks.
-</p>
-
-<p> 
-Once Main has setup the initConfig, it creates the front end commandline
-class and launches mutant proper, passing it the command line args and
-the init config. 
-</p>
-
-<p> 
-A GUI would typically replace start.jar and the cli.jar with its own
-versions which manage model construction from GUI processes rather than
-from XML files. It may be possible to move some of Main.java's
-processing into init.jar if it is useful to other front ends. I haven't
-looked at that balance.
-</p>
-</section>
-
-<section name="Mutant Frontend">
-<p>
-The front end is responsible for coordinating execution of Ant. It
-manages command line arguments, builds a model of the Project to be
-evaluated and coordinates the execution services of the core. cli.jar
-contains not only the front-end code but also the XML parsing code for
-building a project model from an XML description. Other front ends may
-choose to build project models in different ways. Commandline is pretty
-similar to Ant 1.x's Main.java - it handles arguments, building loggers,
-listeners, defines, etc - actually I haven't fully implemented 
-command line defines in
-mutant yet but it would be similar to Ant 1.x. 
-</p>
-
-<p>
-Commandline then moves to building a project model from the XML
-representation. I have just expanded the approach in Ant 1's
-ProjectHelper for XML parsing, moving away from a stack of inner classes.
-The classes in the front end XML parsing use some XML utility base
-classes from the core. 
-</p>
-
-<p>
-The XML parsing handles two elements at parse time. One is the &lt;ref&gt;
-element which is used for project references - that is relationships
-between project files. The referenced project is parsed as well. The
-second is the &lt;include&gt; element which includes either another complete
-project or a project &lt;fragment&gt; directly into the project. All the other
-elements are used to build a project model which is later processed in
-the core.
-</p>
-
-<p>
-The project model itself is organized like this
-</p>
-
-<p>
-<ul>
-  <li>A project contains</li>
-    <ul>
-      <li>named references to other projects</li>
-      <li>targets</li>
-      <li>build elements (tasks, type instances)</li>
-    </ul>
-    
-  <li>A target contains</li>
-    <ul>
-      <li>build elements (tasks, type instances)</li>
-    </ul>
- 
-
-  <li>A build element contains</li>
-    <ul>
-      <li>build elements (nested elements)</li>
-    </ul>
-</ul>
-</p>
- 
-<p>
-So, for now the project model contains top level tasks and type
-instances. I'm still thinking about those and property scoping
-especially in the face of project refs and property overrides. Anyway,
-the running of these tasks is currently disabled.
-</p>
- 
-<p>
-Once the model is built, the commandline creates an execution manager
-instance, passing it the initConfig built by Main.jar. It adds build
-listeners and then starts the build using the services of the
-ExecutionManager.
-</p>
-</section> 
-
-<section name="Ant Libraries">
-<p>
-Before we get into execution proper, I'll deal with the structure of an
-ant library and how it works. An antlibrary is a jar file with a library
-descriptor located in META-INF/antlib.xml. This defines what
-typedefs/taskdefs/converters the library makes available to Ant. The
-classes or at least some of the classes for the library will normally be
-available in the jar. The descriptor looks like this (I'll provide two
-examples here)
-</p>
-
-<p>
-<pre>
-&lt;antlib libid=&quot;ant.io&quot; 
-        home=&quot;http://jakarta.apache.org/ant&quot;
-        isolated=&quot;true&quot;&gt;
-  &lt;typedef name=&quot;thread&quot; classname=&quot;java.lang.Thread&quot;/&gt;
-  &lt;taskdef name=&quot;echo&quot; classname=&quot;org.apache.ant.taskdef.io.Echo&quot;/&gt;
-
-  &lt;converter classname=&quot;org.apache.ant.taskdef.io.FileConverter&quot;/&gt;
-&lt;/antlib&gt;
-
-&lt;antlib libid=&quot;ant.file&quot; 
-        home=&quot;http://jakarta.apache.org/ant&quot;
-        reqxml=&quot;true&quot; reqtools=&quot;true&quot; extends=&quot;ant.io&quot;
-        isolated=&quot;true&quot;&gt;
-  &lt;taskdef name=&quot;copy&quot; classname=&quot;org.apache.ant.file.copy&quot;/&gt;
-&lt;/antlib&gt;        
-</pre>
-</p>
-
-<p>
-the &quot;libid&quot; attribute is used to globally identify a library. It is used
-in Ant to pick which tasks you want to make available to a build file.
-As the number of tasks available goes up, this is used to prevent name
-collisions, etc. The name is constructed similarly to a Java package name -
-i.e Reverse DNS order.
-</p>
-
-<p>
-The &quot;home&quot; attribute is a bit of fluff unused by mutant to allow tools
-to manage libraries and update them etc. More thought could go into
-this.
-</p>
-
-<p>
-&quot;reqxml&quot; allows a library to say that it wants to use Ant's XML parser
-classes. Note that these will be coming from the library's classloader
-so they will not, in fact, be the same runtime classes as used in Ant's core, 
-but it saves tasks packaging their own XML parsers. 
-</p>
-
-<p>
-&quot;reqtools&quot; allows a library to specify that it uses classes from Sun's
-tools.jar file. Again, if tools.jar is available it will be added to the
-list of classes in the library's classloader
-</p>
-
-<p>
-&quot;extends&quot; allows for a single &quot;inheritance&quot; style relationship between
-libraries. I'm not sure how useful this may be yet but it seems
-important for accessing common custom types. It basically translates
-into the class loader for this library using the one identified in
-extends as its parent. 
-</p>
-
-<p>
-&quot;isolate&quot; specifies that each task created from this libary comes from
-its own classloader. This can be used with tasks derived from Java
-applications which have static initialisers. This used to be an issue
-with the Anakia task, for example. Similarly it could be used to ensure that
-tool.jar classes are unloaded to stop memory leaks. Again this is
-experimental so may not prove ultimately useful.
-</p>
-
-<p>
-The &lt;typedef&gt; in the example creates a &lt;thread&gt; type. That is just a bit of fun which
-I'll use in an example later. It does show the typedefing of a type from
-outside the ant library however.
-</p>
-
-<p>
-&lt;taskdef&gt; is pretty obvious. It identifies a taskname with a class from
-the library. The import task, which I have not yet implemented will
-allow this name to be aliased - something like
-</p>
-
-<p>
-&lt;import libid=&quot;ant.file&quot; task=&quot;echo&quot; alias=&quot;antecho&quot;/&gt;
-</p>
-
-<p>
-Tasks are not made available automatically. The build file must state
-which tasks it wants to use using an &lt;import&gt; task. This is similar to
-Java's import statement. Similarly classes whose ids start with &quot;ant.&quot;
-are fully imported at the start of execution.
-</p>
-</section>
-
-<section name="Mutant Configuration">
-<p>
-When mutant starts execution, it reads in a config file. Actually it
-attempts to read two files, one from $ANT_HOME/conf/antconfig.xml and
-another from $HOME/.ant/antconfig.xml. Others could be added even
-specified in the command line. These config files are used to provide
-two things - libpaths and task dirs.
-</p>
-
-<p>
-Taskdirs are locations to search for additional ant libraries. As people
-bundle Ant tasks and types with their products, it will not be practical
-to bundle all this into ANT_HOME/lib. These additional dirs are scanned
-for ant libraries. All .zip/.jar/.tsk files which contain the
-META-INF/antlib.xml file will be processed. 
-</p>
-
-<p>
-Sometimes, of course, the tasks and the libraries upon which they depend
-are not produced by the same people. It is not feasible to go in and
-edit manifests to connect the ant library with its required support
-jars, so the libpath element in the config file is used to specify
-additional paths to be added to a library's classloader. An example
-config would be 
-</p>
-
-<p>
-<pre>
-&lt;antconfig&gt;
-  &lt;libpath libid=&quot;ant.file&quot; path=&quot;fubar&quot;/&gt;
-  &lt;libpath libid=&quot;ant.file&quot; url=&quot;http://fubar&quot;/&gt;
-&lt;/antconfig&gt;
-</pre>
-</p>
-
-<p>
-Obviously other information can be added to the config - standard
-property values, compiler prefs, etc. I haven't done that yet. User
-level config override system level configs.
-</p>
-
-<p>
-So, when a ant library creates a classloader, it will take a number of
-URLS. One is the task library itself, the XML parser classes if
-requested, the tools.jar if requested, and any additional libraries
-specified in the &lt;antconfig&gt;. The parent loader is the common loader
-from the initconfig. unless this library is an extending library.
-</p>
-</section>
-
-<section name="Mutant Execution">
-<p>
-Execution of a build is provided by the core through two key classes.
-One if the ExecutionManager and the other is the ExecutionFrame. An
-execution frame is created for each project in the project model
-hierarchy. It represents the execution state of the project - data
-values, imported tasks, typedefs, taskdefs, etc.
-</p>
-
-<p>
-The ExecutionManager begins by reading configs, searching for ant
-libraries, configuring and appending any additional paths, etc. It then
-creates a root ExecutionFrame which represents the root project. when a
-build is commenced, the project model is validated and then passed to
-the ExecutionFrame.
-</p>
-
-<p>
-the ExecutionFrame is the main execution class. When it is created it
-imports all ant libraries with ids that start with ant.*. All others are
-available but must be explicitly imported with &lt;import&gt; tasks. When the
-project is passed in, ExecutionFrames are created for any referenced
-projects. This builds an ExecutionFrame hierarchy which parallels the
-project hierarchy. Each &lt;ref&gt; uses a name to identify the referenced
-project. All property and target references use these reference names to
-identify the particular frame that hold the data. As an example, look at
-this build file
-</p>
-
-<p>
-<pre>
-&lt;project default=&quot;test&quot; basedir=&quot;..&quot; doc:Hello=&quot;true&quot;&gt;
-
-  &lt;ref project=&quot;test.ant&quot; name=&quot;reftest&quot;/&gt;
-
-  &lt;target name=&quot;test&quot; depends=&quot;reftest:test2&quot;&gt;
-    &lt;echo message=&quot;hello&quot;/&gt;
-  &lt;/target&gt;
-
-&lt;/project&gt;
-</pre>
-</p>
-
-<p>
-Notice the depends reference to the test2 target in the test.ant project
-file. I am still using the &quot;:&quot; as a separator for refs. It doesn't
-collide with XML namespaces so that should be OK.
-</p>
-
-<p>
-Execution proceeds by determining the targets in the various frames
-which need to be executed. The appropriate frame is requested to execute
-the target's tasks and type instances. The imports for the frame are
-consulted to determine what is the approrpiate library and class from
-that library. A classloader is fetched, the class is instantiated,
-introspected and then configured from the corresponding part of the
-project model. Ant 1.x's IntrospectionHelper has been split into two -
-the ClassIntrospector and the Reflector. When the task is being
-configured, the context classloader is set. Similarly it is set when the
-task is being executed. Types are handled similarly. When a type in
-instantiated or a task executed, and they support the appropriate
-interface, they will be passed a context through which they can access
-the services of the core. Currently the context is an interface although
-I have wondered if an abstract class may be better to handle expansion
-of the services available over time.
-</p>
-</section>
-
-<section name="Introspection and Polymorphism">
-<p>
-Introspection is not a lot different from Ant 1.x. After some thought I
-have dropped the createXXX method to allow for polymorphic type support, discussed
-below. setXXX methods, coupled with an approriate string to
-type converter are used for attributes. addXXX methods are used for
-nested elements. All of the value setting has been moved to a Reflector
-object. Object creation for addXXX methods is no longer provided in the
-reflector class, just the storage of the value. This allows support for
-add methods defined in terms of interfaces. For example, the hacked Echo
-task I am using has this definition
-</p>
-
-<p>
-<pre>
-    /**
-     * testing
-     *
-     * @param runnable testing
-     */
-    public void addRun(Runnable runnable) {
-        log(&quot;Adding runnable of type &quot;
-             + runnable.getClass().getName(), MessageLevel.MSG_WARN);
-    }
-</pre>
-</p>
-
-<p>
-So when mutant encounteres a nested element it does the following checks
-</p>
-
-<p>
-Is the value specified by reference?
-</p>
-
-<p>
-&lt;run ant:refid=&quot;test&quot;/&gt;
-</p>
-
-<p>
-Is it specified by as a polymorphic type?
-</p>
-
-<p>
-&lt;run ant:type=&quot;thread&quot;/&gt;
-</p>
-
-<p>
-or is it just a normal run o' the mill nested element, which is
-instantiated by a zero arg constructor. 
-</p>
-
-<p>
-Note the use of the ant namespace for the metadata. In essence the
-nested element name &lt;run&gt; identifies the add method to be used, while
-the refId or type elements specify the actual instance or type to be
-used. The ant:type identifies an Ant datatype to be instantiated. If
-neither is specified, the type that is expected by the identified
-method, addRun in this case, is used to create an instance. In this case
-that would fail. 
-</p>
-
-<p>
-Polymorphism, coupled with typedefs is one way, and a good way IMHO, of
-solving the extensibility of tasks such as ejbjar.
-</p>
-
-<p>
-OK, that is about the size of it. Let me finish with two complete build
-files and the result of running mutant on them.
-</p>
-
-<h3>build.ant</h3>
-<p>
-<pre>
-&lt;project default=&quot;test&quot; basedir=&quot;..&quot; doc:Hello=&quot;true&quot;&gt;
-
-  &lt;ref project=&quot;test.ant&quot; name=&quot;reftest&quot;/&gt; 
-
-  &lt;target name=&quot;test&quot; depends=&quot;reftest:test2&quot;&gt;
-    &lt;echo message=&quot;hello&quot;/&gt;
-  &lt;/target&gt;
-
-&lt;/project&gt;
-</pre>
-</p>
-
-<h3>test.ant</h3>
-<p>
-<pre>
-&lt;project default=&quot;test&quot; basedir=&quot;.&quot; doc:Hello=&quot;true&quot;&gt;
-  &lt;target name=&quot;test2&quot;&gt;
-    &lt;thread ant:id=&quot;testit&quot;/&gt;
-    &lt;echo message=&quot;hello2&quot;&gt;
-        &lt;run ant:refid=&quot;testit&quot;&gt;       
-        &lt;/run&gt;
-    &lt;/echo&gt;
-
-    &lt;echo message=&quot;hello3&quot;&gt;
-        &lt;run ant:type=&quot;thread&quot;&gt;       
-        &lt;/run&gt;
-    &lt;/echo&gt;
-  &lt;/target&gt;
-
-&lt;/project&gt;
-</pre>
-</p>
-
-<p>
-If I run mutant via a simple script which has just one line
-</p>
-
-<p>
-java -jar /home/conor/dev/mutant/dist/lib/start.jar $*
-</p>
-
-<p>
-I get this
-</p>
-
-<p>
-<pre>
-test2:
-     [echo] Adding runnable of type java.lang.Thread
-     [echo] hello2
-     [echo] Adding runnable of type java.lang.Thread
-     [echo] hello3
-
-test:
-     [echo] hello
-
-BUILD SUCCESSFUL
-
-Total time: 0 seconds
-</pre>
-</p>
-
-<p>
-Lets change the &lt;run&gt; definition to 
-</p>
-
-<p>
-&lt;run/&gt; in test.ant and the result becomes
-</p>
-
-<p>
-<pre>
-test2:
-     [echo] Adding runnable of type java.lang.Thread
-     [echo] hello2
-
-BUILD FAILED
-
-/home/conor/dev/mutant/test/test.ant:10: 
-No element can be created for nested element &lt;run&gt;. 
-Please provide a value by reference or specify the value type
-</pre>
-</p>
-
-
-</section>
-</body>
-</document>
-
- 
diff --git a/proposal/mutant/xdocs/stylesheets/project.xml b/proposal/mutant/xdocs/stylesheets/project.xml
deleted file mode 100644
index 98f045a..0000000
--- a/proposal/mutant/xdocs/stylesheets/project.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<project name="Jakarta Site"
-        href="http://jakarta.apache.org/">
-
-    <title>The Jakarta Site</title>
-    <!-- uncomment and put your project logo here!
-    <logo href="http://jakarta.apache.org/images/jakarta-logo.gif">The Jakarta Project</logo>
-    -->
-    
-    <body>
-    <menu name="Apache Ant">
-        <item name="Front Page"            
-              href="/index.html"/>
-        <item name="News"                 
-              href="/antnews.html"/>
-        <item name="Documentation"            
-              href="/manual/index.html"/>
-        <item name="External Tools and Tasks"
-              href="/external.html"/>
-        <item name="Resources"
-              href="/resources.html"/>
-        <item name="Ant FAQ"
-              href="/faq.html"/>
-        <item name="Having Problems?"
-              href="/problems.html"/>
-    </menu>
-
-    <menu name="Download">
-        <item name="Binaries"              href="/site/binindex.html"/>
-        <item name="Source Code"           href="/site/sourceindex.html"/>
-    </menu>
-
-    <menu name="Jakarta">
-        <item name="News &amp; Status"     href="/site/news.html"/>
-        <item name="Mission"               href="/site/mission.html"/>
-        <item name="Guidelines Notes"      href="/site/guidelines.html"/>
-        <item name="FAQs"                  href="/site/faqs.html"/>
-    </menu>
-
-    <menu name="Get Involved">
-        <item name="Overview"              href="/site/getinvolved.html"/>
-        <item name="CVS Repositories"      href="/site/cvsindex.html"/>
-        <item name="Mailing Lists"         href="/site/mail.html"/>
-        <item name="Reference Library"     href="/site/library.html"/>
-        <item name="Bug Database"          href="http://nagoya.apache.org/bugzilla/enter_bug.cgi?product=Ant"/>
-        <item name="Enhancement Requests"  href="http://nagoya.apache.org/bugzilla/enter_bug.cgi?product=Ant&amp;bug_severity=Enhancement"/>
-    </menu>
-
-    </body>
-</project>
diff --git a/proposal/mutant/xdocs/stylesheets/site.vsl b/proposal/mutant/xdocs/stylesheets/site.vsl
deleted file mode 100644
index 925e8c9..0000000
--- a/proposal/mutant/xdocs/stylesheets/site.vsl
+++ /dev/null
@@ -1,81 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-
-<!-- Content Stylesheet for Site -->
-
-    ## Defined variables
-    #set ($bodybg = "#ffffff")
-    #set ($bodyfg = "#000000")
-    #set ($bodylink = "#525D76")
-    #set ($bannerbg = "#525D76")
-    #set ($bannerfg = "#ffffff")
-    #set ($subbannerbg = "#828DA6")
-    #set ($subbannerfg = "#ffffff")
-    #set ($tablethbg = "#039acc")
-    #set ($tabletdbg = "#a0ddf0")
-    
-<!-- start the processing -->
-#document()
-<!-- end the processing -->
-
-## This is where the common page macro's live
-
-#macro ( subsection $subsection)
-  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="$subbannerbg">
-      <font color="$subbannerfg" face="arial,helvetica,sanserif">
-        <a name="$subsection.getAttributeValue("name")"><strong>$subsection.getAttributeValue("name")</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-      #foreach ( $items in $subsection.getChildren() )
-        #if ($items.getName().equals("img"))
-          #image ($items)
-        #elseif ($items.getName().equals("source"))
-          #source ($items)
-        #elseif ($items.getName().equals("table"))
-          #table ($items)
-        #else
-          $xmlout.outputString($items)
-        #end
-      #end
-      </blockquote>
-    </td></tr>
-  </table>
-#end
-
-#macro ( section $section)
-  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="$bannerbg">
-      <font color="$bannerfg" face="arial,helvetica,sanserif">
-        <a name="$section.getAttributeValue("name")"><strong>$section.getAttributeValue("name")</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-      #foreach ( $items in $section.getChildren() )
-        #if ($items.getName().equals("img"))
-          #image ($items)
-        #elseif ($items.getName().equals("source"))
-          #source ($items)
-        #elseif ($items.getName().equals("table"))
-          #table ($items)
-        #elseif ($items.getName().equals("subsection"))
-          #subsection ($items)
-        #else
-          $xmlout.outputString($items)
-        #end
-      #end
-      </blockquote>
-    </td></tr>
-  </table>
-#end
-
-#macro (document)
-  #header()
-  #set ($allSections = $root.getChild("body").getChildren("section"))
-  #foreach ( $section in $allSections )
-    #section ($section)
-  #end
-  #footer()
-#end
diff --git a/proposal/mutant/xdocs/stylesheets/templates.vm b/proposal/mutant/xdocs/stylesheets/templates.vm
deleted file mode 100644
index 55bab49..0000000
--- a/proposal/mutant/xdocs/stylesheets/templates.vm
+++ /dev/null
@@ -1,196 +0,0 @@
-## This is where the common macro's live
-
-#macro ( table $table)
-  <table>
-  #foreach ( $items in $table.getChildren() )
-    #if ($items.getName().equals("tr"))
-      #tr ($items)
-    #end
-  #end
-  </table>
-#end
-
-#macro ( tr $tr)
-  <tr>
-  #foreach ( $items in $tr.getChildren() )
-    #if ($items.getName().equals("td"))
-      #td ($items)
-    #elseif ($items.getName().equals("th"))
-      #th ($items)
-    #end
-  #end
-</tr>
-#end
-
-#macro ( td $value)
-  #if ($value.getAttributeValue("colspan"))
-    #set ($colspan = $value.getAttributeValue("colspan"))
-  #end
-  #if ($value.getAttributeValue("rowspan"))
-    #set ($rowspan = $value.getAttributeValue("rowspan"))
-  #end
-  <td bgcolor="$tabletdbg" colspan="$!colspan" rowspan="$!rowspan" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-    #if ($value.getText().length() != 0 || $value.hasChildren())
-      $xmlout.outputString($value, true)
-    #else
-      &nbsp;
-    #end
-    </font>
-  </td>
-#end
-
-#macro ( th $value)
-  #if ($value.getAttributeValue("colspan"))
-    #set ($colspan = $value.getAttributeValue("colspan"))
-  #end
-  #if ($value.getAttributeValue("rowspan"))
-    #set ($rowspan = $value.getAttributeValue("rowspan"))
-  #end
-  <td bgcolor="$tablethbg" colspan="$!colspan" rowspan="$!rowspan" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-    #if ($value.getText().length() != 0 || $value.hasChildren())
-      $xmlout.outputString($value, true)
-    #else
-      &nbsp;
-    #end
-    </font>
-  </td>
-#end
-
-#macro ( projectanchor $name $value )
-  #if ($value.startsWith("http://"))
-    <a href="$value">$name</a>
-  #elseif ($value.startsWith("/site"))
-    <a href="http://jakarta.apache.org$value">$name</a>
-  #else
-    <a href="$relativePath$value">$name</a>
-  #end
-#end
-
-#macro ( metaauthor $author $email )
-  <meta name="author" value="$author">
-  <meta name="email" value="$email">
-#end
-
-#macro ( image $value )
-  #if ($value.getAttributeValue("width"))
-    #set ($width=$value.getAttributeValue("width"))
-  #end
-  #if ($value.getAttributeValue("height"))
-    #set ($height=$value.getAttributeValue("height"))
-  #end
-  #if ($value.getAttributeValue("align"))
-    #set ($align=$value.getAttributeValue("align"))
-  #end
-  <img src="$relativePath$value.getAttributeValue("src")" 
-       width="$!width" height="$!height" align="$!align">
-#end
-
-#macro ( source $value)
-  <div align="left">
-    <table cellspacing="4" cellpadding="0" border="0">
-      <tr>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-      </tr>
-      <tr>
-        <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#ffffff"><pre>$escape.getText($value.getText())</pre></td>
-        <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-      </tr>
-      <tr>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-      </tr>
-    </table>
-  </div>
-#end
-
-#macro ( makeProject )
-  #set ($menus = $project.getChild("body").getChildren("menu"))
-  #foreach ( $menu in $menus )
-    <p><strong>$menu.getAttributeValue("name")</strong></p>
-    <ul>
-    #foreach ( $item in $menu.getChildren() )
-      #set ($name = $item.getAttributeValue("name"))
-      <li>#projectanchor($name $item.getAttributeValue("href"))</li>
-    #end
-    </ul>
-  #end
-#end
-
-#macro (getProjectImage)
-  #if ($project.getChild("logo"))
-    <td align="left">
-    <a href="http://jakarta.apache.org"><img src="http://jakarta.apache.org/images/jakarta-logo.gif" border="0"/></a>
-    </td>
-    <td align="right">
-    #set ( $logoString = $project.getChild("logo").getAttributeValue("href") )
-    #if ( $logoString.startsWith("/") )
-      <a href="$project.getAttributeValue("href")"><img src="$relativePath$logoString" alt="$project.getChild("logo").getText()" border="0"/></a>
-    #else
-      <a href="$project.getAttributeValue("href")"><img src="$relativePath/$logoString" alt="$project.getChild("logo").getText()" border="0"/></a>
-    #end
-    </td>
-  #else
-    <td colspan="2">
-    <a href="http://jakarta.apache.org"><img src="http://jakarta.apache.org/images/jakarta-logo.gif" align="left" border="0"/></a>
-    </td>
-  #end
-#end
-
-#macro (header)
-  <html>
-    <head>
-      <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
-  
-      #set ($authors = $root.getChild("properties").getChildren("author"))
-      #foreach ( $au in $authors )
-        #metaauthor ( $au.getText() $au.getAttributeValue("email") )
-      #end
-  
-      <title>$project.getChild("title").getText() - $root.getChild("properties").getChild("title").getText()</title>
-    </head>
-  
-    <body bgcolor="$bodybg" text="$bodyfg" link="$bodylink">    
-      <table border="0" width="100%" cellspacing="0">
-        <!-- TOP IMAGE -->
-        <tr>
-          #getProjectImage()
-        </tr>
-      </table>
-      <table border="0" width="100%" cellspacing="4">
-        <tr><td colspan="2">
-          <hr noshade="" size="1"/>
-        </td></tr>
-        
-        <tr>
-          <!-- LEFT SIDE NAVIGATION -->
-          <td valign="top" nowrap="true">
-          #makeProject()
-          </td>
-          <td align="left" valign="top">
-#end
-
-#macro (footer)
-          </td>
-        </tr>
-
-        <!-- FOOTER -->
-        <tr><td colspan="2">
-          <hr noshade="" size="1"/>
-        </td></tr>
-        <tr><td colspan="2">
-          <div align="center"><font color="$bodylink" size="-1"><em>
-          Copyright &#169; 2000-2002, Apache Software Foundation
-          </em></font></div>
-        </td></tr>
-      </table>
-    </body>
-  </html>
-#end
diff --git a/proposal/mutant/xdocs/velocity.properties b/proposal/mutant/xdocs/velocity.properties
deleted file mode 100644
index 7327d96..0000000
--- a/proposal/mutant/xdocs/velocity.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-file.resource.loader.path=xdocs/stylesheets
-velocimacro.library=templates.vm
diff --git a/proposal/myrmidon/README.txt b/proposal/myrmidon/README.txt
deleted file mode 100644
index 7d8543b..0000000
--- a/proposal/myrmidon/README.txt
+++ /dev/null
@@ -1 +0,0 @@
-Myrmidon has moved to a new top level cvs jakarta-ant-myrmidon
\ No newline at end of file
diff --git a/proposal/sandbox/antlib/.cvsignore b/proposal/sandbox/antlib/.cvsignore
deleted file mode 100644
index 9d0b71a..0000000
--- a/proposal/sandbox/antlib/.cvsignore
+++ /dev/null
@@ -1,2 +0,0 @@
-build
-dist
diff --git a/proposal/sandbox/antlib/build.xml b/proposal/sandbox/antlib/build.xml
deleted file mode 100644
index 4961c04..0000000
--- a/proposal/sandbox/antlib/build.xml
+++ /dev/null
@@ -1,100 +0,0 @@
-<?xml version='1.0' ?>
-<project name="antlib" default="all">
-  <property name='orig' location='../../..' />
-  <property name='orig-build' location='${orig}/build' />
-  <property name='orig-classes' location='${orig-build}/classes' />
-  <property name='build' location='build' />
-  <property name='dist' location='dist' />
-  <property name='classes' location='${build}/classes' />
-  <property name='testcases' location='src/testcases' />
-
-  <property name="debug" value="true" />
-  <property name="deprecation" value="false" />
-  <property name="optimize" value="true" />
-
-
-  <target name='init'>
-    <ant target='build' dir='${orig}' inheritAll='false' />
-    <mkdir dir='${classes}' />
-    <copy toDir='${classes}' preservelastmodified='true' >
-      <fileset dir='${orig-classes}'>
-        <include name='**' />
-        <exclude name='org/apache/tools/ant/Project.class' />
-        <exclude name='org/apache/tools/ant/ProjectHelper.class' />
-        <exclude name='org/apache/tools/ant/IntrospectionHelper.class' />
-        <exclude name='org/apache/tools/ant/TaskAdapter.class' />
-        <exclude name='org/apache/tools/ant/taskdefs/Ant.class' />
-      </fileset>
-    </copy>
-  </target>
-
-  <target name='all' depends='init, build' />
-
-  <target name='fullbuild' depends='init, compile'>
-    <ant target='internal_dist' dir='${orig}'>
-      <property name="build.dir" value="${build}"/>
-      <property name="dist.dir" value="${dist}"/>
-    </ant>
-  </target>
-
-  <target name='build' depends='init, compile'>
-    <ant target='dist-lite' dir='${orig}'>
-      <property name="build.dir" value="${build}"/>
-      <property name="dist.dir" value="${dist}"/>
-    </ant>
-    <!--
-        Rejar things to use lib descriptors
-        It needs to work with the original ANT processor
-    -->
-    <path id="newtasks">
-        <pathelement location="${classes}" />
-    </path>
-    <taskdef name="antjar" classname="org.apache.tools.ant.taskdefs.Antjar"
-            classpathref="newtasks" />
-    <taskdef name="antlib" classname="org.apache.tools.ant.taskdefs.Antlib"
-            classpathref="newtasks" />
-    <mkdir dir='${dist}/autolib' />
-    <antjar antxml="src/main/org/apache/tools/ant/opt-antlib.xml"
-            destfile="${dist}/autolib/optional.jar" >
-        <zipfileset src="${dist}/lib/optional.jar" >
-            <include name="**/*" />
-        </zipfileset>
-    </antjar>
-    <antjar antxml="src/main/org/apache/tools/ant/antlib.xml"
-            destfile="${dist}/lib/newant.jar" >
-        <zipfileset src="${dist}/lib/ant.jar" >
-            <include name="**/*" />
-        </zipfileset>
-    </antjar>
-    <delete file="${dist}/lib/optional.jar" />
-    <move file="${dist}/lib/newant.jar" tofile="${dist}/lib/ant.jar"/>
-  </target>
-
-  <target name='compile'>
-    <javac srcdir='src/main' destdir='${classes}'
-           debug="${debug}"
-           deprecation="${deprecation}"
-           optimize="${optimize}">
-      <include name='**/*.java'/>
-    </javac>
-    <copy toDir='${classes}' preservelastmodified='true' >
-      <fileset dir='src/main'>
-        <include name='**/*.xml' />
-      </fileset>
-    </copy>
-  </target>
-
-  <target name='clean'>
-    <delete dir='${build}' />
-  </target>
-
-  <target name='test'>
-    <ant dir='${testcases}' inheritAll='false'/>
-    <ant dir='${testcases}'
-         antfile='${testcases}/case.xml' inheritAll='false'/>
-  </target>
-
-  <target name='cleanall' depends='clean'>
-    <delete dir='${dist}' />
-  </target>
-</project>
\ No newline at end of file
diff --git a/proposal/sandbox/antlib/docs/manual/CoreTasks/antjar.html b/proposal/sandbox/antlib/docs/manual/CoreTasks/antjar.html
deleted file mode 100644
index ee6a4a1..0000000
--- a/proposal/sandbox/antlib/docs/manual/CoreTasks/antjar.html
+++ /dev/null
@@ -1,102 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Ant User Manual</title>
-</head>
-
-<body>
-
-<h2><a name="antjar">AntJar</a></h2>
-<h3>Description</h3>
-<p>An extension of the <a href="jar.html">Jar</a> task with special
-treatment for the library descriptor file that should end up in the
-<code>META-INF</code> directory of the Ant Archive.</p>
-<p>
-Descriptors must follow the following rules, although there is no fix DTD
-for them:
-<pre>
-
-&lt;!-- Root element for the Antlib descriptor.                 --&gt;
-&lt;!ELEMENT antlib (role | <i>rolename</i>)* &gt;
-
-&lt;!-- Declaration of roles contained in the library.          --&gt;
-&lt;!ELEMENT role EMPTY&gt;
-&lt;!ATTLIST role 
-          name     CDATA #REQUIRED
-          class    CDATA #REQUIRED
-          proxy    CDATA #IMPLIED
-&gt;
-
-&lt;!-- Declaration of datatypes contained in the library       --&gt;
-&lt;!ELEMENT <i>rolename</i> EMPTY&gt;
-&lt;!ATTLIST <i>rolename</i> 
-          name     CDATA #REQUIRED
-          class    CDATA #REQUIRED
-&gt;
-
-</pre>
-There are two predefined roles: <i><b>task</b></i> and <i><b>datatype</b></i>.
-<p>
-<h4>Role definition</h4>
-The <b>name</b> of the role. This name is used when specifying 
-elements for this role.
-<p>
-The <b>class</b> defining a role must be an interface containing a 
-unique void method with only one argument whose type is the that of 
-elements declared on the role.
-<p>
-The <b>proxy</b> defined in a role specifies a class that can be used 
-to bridge between the type expected by the role and the type of 
-elements declared for that role.
-<h4>Element definition</h4>
-Any element whose name is that of a role declares an element for that role.
-<p>
-The <b>name</b> defined the name of the element to use in the buildfile 
-to specify the element being declared.
-<p>
-The <b>class</b> the class defining the element.
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">antxml</td>
-    <td valign="top">The library descriptor to use (META-INF/antlib.xml).</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top"><b>Others...</b></td>
-    <td valign="top">All attributes inherited form the 
-                     <a href="jar.html">Jar task</a>.</td>
-    <td valign="top" align="center"> </td>
-  </tr>
-</table>
-<h3>Nested elements</h3>
-See the nested elements of the <a href="jar.html">Jar task</a>.
-<h3>Examples</h3>
-<pre>  &lt;antjar file=&quot;${dist}/lib/app.jar&quot; 
-       antxml=&quot;${src}/applib.xml&quot; basedir=&quot;${build}/classes&quot;/&gt;</pre>
-<p>jars all files in the <code>${build}/classes</code> directory into a file
-called <code>app.jar</code> in the <code>${dist}/lib</code> directory and
-sets the content of <code>${src}/applib.xml</code> as the library descriptor
-in <code>META-INF/antlib.xml</code>.</p>
-<p>Here is a sample <code>META-INF/antlib.xml</code>:</p>
-<pre>
-&lt;?xml version="1.0" encoding="UTF8" ?&gt;
-
-&lt;antlib version="1.0" &gt;
-  &lt;task name="case" class="org.apache.ant.contrib.Case" /&gt;
-&lt;/antlib&gt;
-
-</pre>
-<hr>
-<p align="center">Copyright &copy; 2000,2001 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
-
diff --git a/proposal/sandbox/antlib/docs/manual/CoreTasks/antlib.html b/proposal/sandbox/antlib/docs/manual/CoreTasks/antlib.html
deleted file mode 100644
index ca4c318..0000000
--- a/proposal/sandbox/antlib/docs/manual/CoreTasks/antlib.html
+++ /dev/null
@@ -1,148 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<title>Ant User Manual</title>
-</head>
-
-<body>
-
-<h2><a name="antlib">AntLib</a></h2>
-<h3>Description</h3>
-<p>Defines and loads elements contained in an ANT library.</p>
-<p>It also allows the aliasing of the names being defined in order to avoid 
-collisions and provides means to override definitions with the ones defined
-in the library.</p>
-Ant libraries are associated with ClassLoaders identified by the
-<tt>loaderid</tt> attribute. If no loader is specified a default loader
-will be used. Ant libraries specifying the same loader are loaded by the
-same ClassLoader as long as the libraries are defined on the same project.
-Classloaders with the same ID in a subproject have the corresponding 
-classloader in the parent project as their parent classloader.
-<p>
-Ant libraries can be loaded in the current classloader, 
-which is more efficient,
-but requires the tasks to be in the path already (such as in the ant lib 
-directory) - set <tt>useCurrentClassloader</tt> to true to enable this.
-It is also possible to add more libraries to the path, such as any 
-libraries the task is dependent on. 
-<p>
-Ant libraries define objects of several types:
-<ol>
-<li> <b>Roles</b>: Define an interface to be implemented by elements
-(usually tasks) that accept subelements of the specified role.
-Roles may also define a proxy class which may be applied to an element
-in order to make it compatible with the role.
-</li>
-<li> <b>Tasks</b>: define elements that belong to the predefined 
-role "task".
-<li> <b>Data types</b>: define elements that belong to the predefined role
-"datatype".
-<li> <b>Other role elements</b>: declare elements for other roles that 
-have been previously defined.
-</ol>  
-<h3>Parameters</h3>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">file</td>
-    <td valign="top">The jar-file of the library.</td>
-    <td align="center" valign="middle" rowspan="2">at least one of the two</td>
-  </tr>
-  <tr>
-    <td valign="top">library</td>
-    <td valign="top">The name of a library relative to ${ant.home}/antlib.</td>
-  </tr>
-  <tr>
-    <td valign="top">override</td>
-    <td valign="top">Replace any existing definition with the same name. 
-    (&quot;true&quot;/&quot;false&quot;). 
-    When &quot;false&quot; already defined tasks
-         and datatytes take precedence over those in the library.
-	 Default is &quot;false&quot; when omitted.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">useCurrentClassloader</td>
-    <td valign="top">Set to &quot;true&quot; to avoid using a separate
-    ClassLoader for the tasks in the library. Using this option requires
-    that the library jar is already accessible by the ClassLoader of
-    the project.  Default is &quot;false&quot;.
-    </td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">classpath</td>
-    <td valign="top">A 
-    <a href="../using.html#path">classpath</a>
-    for extra libraries to pull in.
-    </td>
-    <td valign="top" align="center">No</td>
-  </tr>  
-  <tr>
-    <td valign="top">loaderid</td>
-    <td valign="top">The ID of the ClassLoader to use to load the classes
-    defined in this library. If omitted a default per project ClassLoader 
-    will be used.
-    </td>
-    <td valign="top" align="center">No</td>
-  </tr>
-</table>
-<h3><a name="nested">Parameters specified as nested elements</a></h3>
-
-<h4>alias</h4>
-<p>Specifies the usage of a different name from that defined in the library
-descriptor. Applies only to element definitions (not role declarations).</p>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">name</td>
-    <td valign="top">The name used in the library descriptor.</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">as</td>
-    <td valign="top">The alias to use in the project.</td>
-    <td valign="top" align="center">Yes</td>
-  </tr>
-</table>
-<p>Specifies the usage of a different name from that defined in the library
-descriptor. This is used to deal with name clashes </p>
-
-<h4>classpath</h4>
-
-A classpath of extra libraries to import to support this library. 
-
-<h4>classpathref</h4>
-A reference to an existing classpath. 
-
-<h3>Examples</h3>
-<pre>  &lt;antlib file=&quot;${build}/lib/mylib.jar&quot;/&gt;</pre>
-<p>loads the definitions from the library located at 
-<code>${build}/lib/ant.jar</code>.</p>
-<pre>  &lt;antlib library=&quot;optional.jar&quot;/&gt;</pre>
-<p>loads the definitions from the library <code>optional.jar</code> 
-located at <code>${ant.home}/lib</code>.</p>
-<pre>  &lt;antlib file=&quot;${build}/lib/mylib.jar&quot&gt;
-    &lt;alias name=&quot;echo&quot; as=&quot;myecho&quot;/&gt;
-  &lt;/antlib&gt;
-</pre>
-<p>loads the definitions from the library located at 
-<code>${build}/lib/ant.jar</code> but uses the name 
-&quot;<code>myecho</code>&quot; for the &quot;<code>echo</code>&quot; task
-declared in the library.</p>
-
-<hr><p align="center">Copyright &copy; 2000,2001 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
-
diff --git a/proposal/sandbox/antlib/src/main/org/apache/tools/ant/IntrospectionHelper.java b/proposal/sandbox/antlib/src/main/org/apache/tools/ant/IntrospectionHelper.java
deleted file mode 100644
index c7d1b7e..0000000
--- a/proposal/sandbox/antlib/src/main/org/apache/tools/ant/IntrospectionHelper.java
+++ /dev/null
@@ -1,706 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant;
-
-import org.apache.tools.ant.types.Path;
-import org.apache.tools.ant.types.EnumeratedAttribute;
-
-import java.lang.reflect.Method;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Constructor;
-import java.io.File;
-import java.util.Enumeration;
-import java.util.Hashtable;
-import java.util.Locale;
-
-/**
- * Helper class that collects the methods a task or nested element
- * holds to set attributes, create nested elements or hold PCDATA
- * elements.
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- */
-public class IntrospectionHelper implements BuildListener {
-
-    /**
-     * holds the types of the attributes that could be set.
-     */
-    private Hashtable attributeTypes;
-
-    /**
-     * holds the attribute setter methods.
-     */
-    private Hashtable attributeSetters;
-
-    /**
-     * Holds the types of nested elements that could be created.
-     */
-    private Hashtable nestedTypes;
-
-    /**
-     * Holds methods to create nested elements.
-     */
-    private Hashtable nestedCreators;
-
-    /**
-     * Holds methods to store configured nested elements.
-     */
-    private Hashtable nestedStorers;
-
-    /**
-     * The method to add PCDATA stuff.
-     */
-    private Method addText = null;
-
-    /**
-     * The Class that's been introspected.
-     */
-    private Class bean;
-
-    /**
-     * instances we've already created
-     */
-    private static Hashtable helpers = new Hashtable();
-
-    private IntrospectionHelper(final Class bean) {
-        attributeTypes = new Hashtable();
-        attributeSetters = new Hashtable();
-        nestedTypes = new Hashtable();
-        nestedCreators = new Hashtable();
-        nestedStorers = new Hashtable();
-
-        this.bean = bean;
-
-        Method[] methods = bean.getMethods();
-        for (int i=0; i<methods.length; i++) {
-            final Method m = methods[i];
-            final String name = m.getName();
-            Class returnType = m.getReturnType();
-            Class[] args = m.getParameterTypes();
-
-            // not really user settable properties on tasks
-            if (org.apache.tools.ant.Task.class.isAssignableFrom(bean)
-                && args.length == 1 &&
-                (
-                 (
-                  "setLocation".equals(name) && org.apache.tools.ant.Location.class.equals(args[0])
-                  ) || (
-                   "setTaskType".equals(name) && java.lang.String.class.equals(args[0])
-                  )
-                 )) {
-                continue;
-            }
-
-            // hide addTask for TaskContainers
-//              if (org.apache.tools.ant.TaskContainer.class.isAssignableFrom(bean)
-//                  && args.length == 1 && "addTask".equals(name)
-//                  && org.apache.tools.ant.Task.class.equals(args[0])) {
-//                  continue;
-//              }
-
-
-            if ("addText".equals(name)
-                && java.lang.Void.TYPE.equals(returnType)
-                && args.length == 1
-                && java.lang.String.class.equals(args[0])) {
-
-                addText = methods[i];
-
-            } else if (name.startsWith("set")
-                       && java.lang.Void.TYPE.equals(returnType)
-                       && args.length == 1
-                       && !args[0].isArray()) {
-
-                String propName = getPropertyName(name, "set");
-                if (attributeSetters.get(propName) != null) {
-                    if (java.lang.String.class.equals(args[0])) {
-                        /*
-                            Ignore method m, as there is an overloaded
-                            form of this method that takes in a
-                            non-string argument, which gains higher
-                            priority.
-                        */
-                        continue;
-                    }
-                    /*
-                        If the argument is not a String, and if there
-                        is an overloaded form of this method already defined,
-                        we just override that with the new one.
-                        This mechanism does not guarantee any specific order
-                        in which the methods will be selected: so any code
-                        that depends on the order in which "set" methods have
-                        been defined, is not guaranteed to be selected in any
-                        particular order.
-                    */
-                }
-                AttributeSetter as = createAttributeSetter(m, args[0]);
-                if (as != null) {
-                    attributeTypes.put(propName, args[0]);
-                    attributeSetters.put(propName, as);
-                }
-
-            } else if (name.startsWith("create")
-                       && !returnType.isArray()
-                       && !returnType.isPrimitive()
-                       && args.length == 0) {
-
-                String propName = getPropertyName(name, "create");
-                nestedTypes.put(propName, returnType);
-                nestedCreators.put(propName, new NestedCreator() {
-
-                        public Object create(Object parent)
-                            throws InvocationTargetException,
-                            IllegalAccessException {
-
-                            return m.invoke(parent, new Object[] {});
-                        }
-
-                    });
-                nestedStorers.remove(propName);
-
-            } else if (name.startsWith("addConfigured")
-                       && java.lang.Void.TYPE.equals(returnType)
-                       && args.length == 1
-                       && !java.lang.String.class.equals(args[0])
-                       && !args[0].isArray()
-                       && !args[0].isPrimitive()) {
-
-                try {
-                    final Constructor c =
-                        args[0].getConstructor(new Class[] {});
-                    String propName = getPropertyName(name, "addConfigured");
-                    nestedTypes.put(propName, args[0]);
-                    nestedCreators.put(propName, new NestedCreator() {
-
-                            public Object create(Object parent)
-                                throws InvocationTargetException, 
-				       IllegalAccessException, 
-				       InstantiationException {
-
-                                Object o = c.newInstance(new Object[] {});
-                                return o;
-                            }
-
-                        });
-                    nestedStorers.put(propName, new NestedStorer() {
-
-                            public void store(Object parent, Object child)
-                                throws InvocationTargetException, 
-				       IllegalAccessException, 
-				       InstantiationException {
-
-                                m.invoke(parent, new Object[] {child});
-                            }
-
-                        });
-                } catch (NoSuchMethodException nse) {
-                }
-            } else if (name.startsWith("add")
-                       && java.lang.Void.TYPE.equals(returnType)
-                       && args.length == 1
-                       && !java.lang.String.class.equals(args[0])
-                       && !args[0].isArray()
-                       && !args[0].isPrimitive()) {
-
-                try {
-                    final Constructor c =
-                        args[0].getConstructor(new Class[] {});
-                    String propName = getPropertyName(name, "add");
-                    nestedTypes.put(propName, args[0]);
-                    nestedCreators.put(propName, new NestedCreator() {
-
-                            public Object create(Object parent)
-                                throws InvocationTargetException, 
-				       IllegalAccessException, 
-				       InstantiationException {
-
-                                Object o = c.newInstance(new Object[] {});
-                                m.invoke(parent, new Object[] {o});
-                                return o;
-                            }
-
-                        });
-                    nestedStorers.remove(name);
-                } catch (NoSuchMethodException nse) {
-                }
-            }
-        }
-    }
-
-    /**
-     * Factory method for helper objects.
-     */
-    public static synchronized IntrospectionHelper getHelper(Class c) {
-        IntrospectionHelper ih = (IntrospectionHelper) helpers.get(c);
-        if (ih == null) {
-            ih = new IntrospectionHelper(c);
-            helpers.put(c, ih);
-        }
-        return ih;
-    }
-
-    /**
-     * Sets the named attribute.
-     */
-    public void setAttribute(Project p, Object element, String attributeName,
-                             String value)
-        throws BuildException {
-        AttributeSetter as = (AttributeSetter) attributeSetters.get(attributeName);
-        if (as == null) {
-            String msg = getElementName(p, element) +
-            //String msg = "Class " + element.getClass().getName() +
-                " doesn't support the \"" + attributeName + "\" attribute.";
-            throw new BuildException(msg);
-        }
-        try {
-            as.set(p, element, value);
-        } catch (IllegalAccessException ie) {
-            // impossible as getMethods should only return public methods
-            throw new BuildException(ie);
-        } catch (InvocationTargetException ite) {
-            Throwable t = ite.getTargetException();
-            if (t instanceof BuildException) {
-                throw (BuildException) t;
-            }
-            throw new BuildException(t);
-        }
-    }
-
-    /**
-     * Adds PCDATA areas.
-     */
-    public void addText(Project project, Object element, String text) {
-        if (addText == null) {
-            // Element doesn't handle text content
-            if ( text.trim().length() == 0 ) {
-                // Only whitespace - ignore
-                return;
-            }
-            else {
-                // Not whitespace - fail
-                String msg = getElementName(project, element) +
-                    " doesn't support nested text data.";
-                throw new BuildException(msg);
-            }
-        }
-        try {
-            addText.invoke(element, new String[] {text});
-        } catch (IllegalAccessException ie) {
-            // impossible as getMethods should only return public methods
-            throw new BuildException(ie);
-        } catch (InvocationTargetException ite) {
-            Throwable t = ite.getTargetException();
-            if (t instanceof BuildException) {
-                throw (BuildException) t;
-            }
-            throw new BuildException(t);
-        }
-    }
-
-    /**
-     * Creates a named nested element.
-     */
-    public Object createElement(Project project, Object element, String elementName)
-        throws BuildException {
-	
-        try {
-	    // First check if there are any roles supported by this class
-	    Object nestedElement = project.createInRole(element, elementName);
-	    if (nestedElement == null) {
-		NestedCreator nc = 
-		    (NestedCreator) nestedCreators.get(elementName);
-		if (nc == null) {
-		    String msg = getElementName(project, element) +
-			" doesn't support the nested \"" + elementName + 
-			"\" element.";
-		    throw new BuildException(msg);
-		}
-		nestedElement = nc.create(element);
-	    }
-            if (nestedElement instanceof ProjectComponent) {
-                ((ProjectComponent) nestedElement).setProject(project);
-            }
-            return nestedElement;
-        } catch (IllegalAccessException ie) {
-            // impossible as getMethods should only return public methods
-            throw new BuildException(ie);
-        } catch (InstantiationException ine) {
-            // impossible as getMethods should only return public methods
-            throw new BuildException(ine);
-        } catch (InvocationTargetException ite) {
-            Throwable t = ite.getTargetException();
-            if (t instanceof BuildException) {
-                throw (BuildException) t;
-            }
-            throw new BuildException(t);
-        }
-    }
-
-    /**
-     * Creates a named nested element.
-     */
-    public void storeElement(Project project, Object element, Object child, String elementName)
-        throws BuildException {
-        if (elementName == null) {
-            return;
-        }
-        NestedStorer ns = (NestedStorer)nestedStorers.get(elementName);
-        if (ns == null) {
-            return;
-        }
-        try {
-            ns.store(element, child);
-        } catch (IllegalAccessException ie) {
-            // impossible as getMethods should only return public methods
-            throw new BuildException(ie);
-        } catch (InstantiationException ine) {
-            // impossible as getMethods should only return public methods
-            throw new BuildException(ine);
-        } catch (InvocationTargetException ite) {
-            Throwable t = ite.getTargetException();
-            if (t instanceof BuildException) {
-                throw (BuildException) t;
-            }
-            throw new BuildException(t);
-        }
-    }
-
-    /**
-     * returns the type of a named nested element.
-     */
-    public Class getElementType(String elementName)
-        throws BuildException {
-        Class nt = (Class) nestedTypes.get(elementName);
-        if (nt == null) {
-            String msg = "Class " + bean.getName() +
-                " doesn't support the nested \"" + elementName + "\" element.";
-            throw new BuildException(msg);
-        }
-        return nt;
-    }
-
-    /**
-     * returns the type of a named attribute.
-     */
-    public Class getAttributeType(String attributeName)
-        throws BuildException {
-        Class at = (Class) attributeTypes.get(attributeName);
-        if (at == null) {
-            String msg = "Class " + bean.getName() +
-                " doesn't support the \"" + attributeName + "\" attribute.";
-            throw new BuildException(msg);
-        }
-        return at;
-    }
-
-    /**
-     * Does the introspected class support PCDATA?
-     */
-    public boolean supportsCharacters() {
-        return addText != null;
-    }
-
-    /**
-     * Return all attribues supported by the introspected class.
-     */
-    public Enumeration getAttributes() {
-        return attributeSetters.keys();
-    }
-
-    /**
-     * Return all nested elements supported by the introspected class.
-     */
-    public Enumeration getNestedElements() {
-        return nestedTypes.keys();
-    }
-
-    /**
-     * Create a proper implementation of AttributeSetter for the given
-     * attribute type.
-     */
-    private AttributeSetter createAttributeSetter(final Method m,
-                                                  final Class arg) {
-
-        // simplest case - setAttribute expects String
-        if (java.lang.String.class.equals(arg)) {
-            return new AttributeSetter() {
-                    public void set(Project p, Object parent, String value)
-                        throws InvocationTargetException, IllegalAccessException {
-                        m.invoke(parent, new String[] {value});
-                    }
-                };
-
-        // now for the primitive types, use their wrappers
-        } else if (java.lang.Character.class.equals(arg)
-                   || java.lang.Character.TYPE.equals(arg)) {
-            return new AttributeSetter() {
-                    public void set(Project p, Object parent, String value)
-                        throws InvocationTargetException, IllegalAccessException {
-                        m.invoke(parent, new Character[] {new Character(value.charAt(0))});
-                    }
-
-                };
-        } else if (java.lang.Byte.TYPE.equals(arg)) {
-            return new AttributeSetter() {
-                    public void set(Project p, Object parent, String value)
-                        throws InvocationTargetException, IllegalAccessException {
-                        m.invoke(parent, new Byte[] {new Byte(value)});
-                    }
-
-                };
-        } else if (java.lang.Short.TYPE.equals(arg)) {
-            return new AttributeSetter() {
-                    public void set(Project p, Object parent, String value)
-                        throws InvocationTargetException, IllegalAccessException {
-                        m.invoke(parent, new Short[] {new Short(value)});
-                    }
-
-                };
-        } else if (java.lang.Integer.TYPE.equals(arg)) {
-            return new AttributeSetter() {
-                    public void set(Project p, Object parent, String value)
-                        throws InvocationTargetException, IllegalAccessException {
-                        m.invoke(parent, new Integer[] {new Integer(value)});
-                    }
-
-                };
-        } else if (java.lang.Long.TYPE.equals(arg)) {
-            return new AttributeSetter() {
-                    public void set(Project p, Object parent, String value)
-                        throws InvocationTargetException, IllegalAccessException {
-                        m.invoke(parent, new Long[] {new Long(value)});
-                    }
-
-                };
-        } else if (java.lang.Float.TYPE.equals(arg)) {
-            return new AttributeSetter() {
-                    public void set(Project p, Object parent, String value)
-                        throws InvocationTargetException, IllegalAccessException {
-                        m.invoke(parent, new Float[] {new Float(value)});
-                    }
-
-                };
-        } else if (java.lang.Double.TYPE.equals(arg)) {
-            return new AttributeSetter() {
-                    public void set(Project p, Object parent, String value)
-                        throws InvocationTargetException, IllegalAccessException {
-                        m.invoke(parent, new Double[] {new Double(value)});
-                    }
-
-                };
-
-        // boolean gets an extra treatment, because we have a nice method
-        // in Project
-        } else if (java.lang.Boolean.class.equals(arg)
-                   || java.lang.Boolean.TYPE.equals(arg)) {
-            return new AttributeSetter() {
-                    public void set(Project p, Object parent, String value)
-                        throws InvocationTargetException, IllegalAccessException {
-                        m.invoke(parent,
-                                 new Boolean[] {new Boolean(Project.toBoolean(value))});
-                    }
-
-                };
-
-        // Class doesn't have a String constructor but a decent factory method
-        } else if (java.lang.Class.class.equals(arg)) {
-            return new AttributeSetter() {
-                    public void set(Project p, Object parent, String value)
-                        throws InvocationTargetException, IllegalAccessException, BuildException {
-                        try {
-                            m.invoke(parent, new Class[] {Class.forName(value)});
-                        } catch (ClassNotFoundException ce) {
-                            throw new BuildException(ce);
-                        }
-                    }
-                };
-
-        // resolve relative paths through Project
-        } else if (java.io.File.class.equals(arg)) {
-            return new AttributeSetter() {
-                    public void set(Project p, Object parent, String value)
-                        throws InvocationTargetException, IllegalAccessException {
-                        m.invoke(parent, new File[] {p.resolveFile(value)});
-                    }
-
-                };
-
-        // resolve relative paths through Project
-        } else if (org.apache.tools.ant.types.Path.class.equals(arg)) {
-            return new AttributeSetter() {
-                    public void set(Project p, Object parent, String value)
-                        throws InvocationTargetException, IllegalAccessException {
-                        m.invoke(parent, new Path[] {new Path(p, value)});
-                    }
-
-                };
-
-        // EnumeratedAttributes have their own helper class
-        } else if (org.apache.tools.ant.types.EnumeratedAttribute.class.isAssignableFrom(arg)) {
-            return new AttributeSetter() {
-                    public void set(Project p, Object parent, String value)
-                        throws InvocationTargetException, IllegalAccessException, BuildException {
-                        try {
-                            org.apache.tools.ant.types.EnumeratedAttribute ea = (org.apache.tools.ant.types.EnumeratedAttribute)arg.newInstance();
-                            ea.setValue(value);
-                            m.invoke(parent, new EnumeratedAttribute[] {ea});
-                        } catch (InstantiationException ie) {
-                            throw new BuildException(ie);
-                        }
-                    }
-                };
-
-        // worst case. look for a public String constructor and use it
-        } else {
-
-            try {
-                final Constructor c =
-                    arg.getConstructor(new Class[] {java.lang.String.class});
-
-                return new AttributeSetter() {
-                        public void set(Project p, Object parent,
-                                        String value)
-                            throws InvocationTargetException, IllegalAccessException, BuildException {
-                            try {
-                                Object attribute = c.newInstance(new String[] {value});
-                                if (attribute instanceof ProjectComponent) {
-                                    ((ProjectComponent) attribute).setProject(p);
-                                }
-                                m.invoke(parent, new Object[] {attribute});
-                            } catch (InstantiationException ie) {
-                                throw new BuildException(ie);
-                            }
-                        }
-                    };
-
-            } catch (NoSuchMethodException nme) {
-            }
-        }
-
-        return null;
-    }
-
-    protected String getElementName(Project project, Object element)
-    {
-        Hashtable elements = project.getTaskDefinitions();
-        String typeName = "task";
-        if (!elements.contains( element.getClass() ))
-        {
-            elements = project.getDataTypeDefinitions();
-            typeName = "data type";
-            if (!elements.contains( element.getClass() ))
-            {
-                elements = null;
-            }
-        }
-
-        if (elements != null)
-        {
-            Enumeration e = elements.keys();
-            while (e.hasMoreElements())
-            {
-                String elementName = (String) e.nextElement();
-                Class elementClass = (Class) elements.get( elementName );
-                if ( element.getClass().equals( elementClass ) )
-                {
-                    return "The <" + elementName + "> " + typeName;
-                }
-            }
-        }
-
-        return "Class " + element.getClass().getName();
-    }
-
-    /**
-     * extract the name of a property from a method name - subtracting
-     * a given prefix.
-     */
-    private String getPropertyName(String methodName, String prefix) {
-        int start = prefix.length();
-        return methodName.substring(start).toLowerCase(Locale.US);
-    }
-
-    private interface NestedCreator {
-        Object create(Object parent)
-            throws InvocationTargetException, IllegalAccessException, InstantiationException;
-    }
-
-    private interface NestedStorer {
-        void store(Object parent, Object child)
-            throws InvocationTargetException, IllegalAccessException, InstantiationException;
-    }
-
-    private interface AttributeSetter {
-        void set(Project p, Object parent, String value)
-            throws InvocationTargetException, IllegalAccessException,
-                   BuildException;
-    }
-
-    public void buildStarted(BuildEvent event) {}
-    public void buildFinished(BuildEvent event) {
-        attributeTypes.clear();
-        attributeSetters.clear();
-        nestedTypes.clear();
-        nestedCreators.clear();
-        addText = null;
-        helpers.clear();
-    }
-
-    public void targetStarted(BuildEvent event) {}
-    public void targetFinished(BuildEvent event) {}
-    public void taskStarted(BuildEvent event) {}
-    public void taskFinished(BuildEvent event) {}
-    public void messageLogged(BuildEvent event) {}
-}
diff --git a/proposal/sandbox/antlib/src/main/org/apache/tools/ant/Project.java b/proposal/sandbox/antlib/src/main/org/apache/tools/ant/Project.java
deleted file mode 100644
index 118a2d5..0000000
--- a/proposal/sandbox/antlib/src/main/org/apache/tools/ant/Project.java
+++ /dev/null
@@ -1,1832 +0,0 @@
-/*
- *  The Apache Software License, Version 1.1
- *
- *  Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- *  reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions
- *  are met:
- *
- *  1. Redistributions of source code must retain the above copyright
- *  notice, this list of conditions and the following disclaimer.
- *
- *  2. Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in
- *  the documentation and/or other materials provided with the
- *  distribution.
- *
- *  3. The end-user documentation included with the redistribution, if
- *  any, must include the following acknowlegement:
- *  "This product includes software developed by the
- *  Apache Software Foundation (http://www.apache.org/)."
- *  Alternately, this acknowlegement may appear in the software itself,
- *  if and wherever such third-party acknowlegements normally appear.
- *
- *  4. The names "The Jakarta Project", "Ant", and "Apache Software
- *  Foundation" must not be used to endorse or promote products derived
- *  from this software without prior written permission. For written
- *  permission, please contact apache@apache.org.
- *
- *  5. Products derived from this software may not be called "Apache"
- *  nor may "Apache" appear in their names without prior written
- *  permission of the Apache Group.
- *
- *  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- *  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- *  OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- *  DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- *  ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- *  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- *  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- *  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- *  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- *  SUCH DAMAGE.
- *  ====================================================================
- *
- *  This software consists of voluntary contributions made by many
- *  individuals on behalf of the Apache Software Foundation.  For more
- *  information on the Apache Software Foundation, please see
- *  <http://www.apache.org/>.
- */
-package org.apache.tools.ant;
-
-import java.io.File;
-import java.io.InputStream;
-import java.io.IOException;
-import java.util.Hashtable;
-import java.util.Vector;
-import java.util.Properties;
-import java.util.Enumeration;
-import java.util.Stack;
-import java.lang.reflect.Modifier;
-import java.lang.reflect.Method;
-import java.lang.reflect.InvocationTargetException;
-
-import org.apache.tools.ant.types.DataTypeAdapterTask;
-import org.apache.tools.ant.types.FileSet;
-import org.apache.tools.ant.types.FilterSet;
-import org.apache.tools.ant.types.FilterSetCollection;
-import org.apache.tools.ant.util.FileUtils;
-import org.apache.tools.ant.types.Path;
-import org.apache.tools.ant.taskdefs.Antlib;
-
-/**
- *  Central representation of an Ant project. This class defines a Ant project
- *  with all of it's targets and tasks. It also provides the mechanism to kick
- *  off a build using a particular target name. <p>
- *
- *  This class also encapsulates methods which allow Files to be refered to
- *  using abstract path names which are translated to native system file paths
- *  at runtime as well as defining various project properties.
- *
- *@author     duncan@x180.com
- *@author     j_a_fernandez@yahoo.com
- *@created    February 27, 2002
- */
-
-public class Project {
-
-    /**
-     *  Description of the Field
-     */
-    public final static int MSG_ERR = 0;
-    /**
-     *  Description of the Field
-     */
-    public final static int MSG_WARN = 1;
-    /**
-     *  Description of the Field
-     */
-    public final static int MSG_INFO = 2;
-    /**
-     *  Description of the Field
-     */
-    public final static int MSG_VERBOSE = 3;
-    /**
-     *  Description of the Field
-     */
-    public final static int MSG_DEBUG = 4;
-
-    /**
-     *  LoaderId for the CoreLoader.
-     */
-    public final static String CORELOADER_ID = null;
-
-    /**
-     *  Description of the Field
-     */
-    public final static String TASK_ROLE = "task";
-    /**
-     *  Description of the Field
-     */
-    public final static String DATATYPE_ROLE = "data-type";
-
-    // private set of constants to represent the state
-    // of a DFS of the Target dependencies
-    private final static String VISITING = "VISITING";
-    private final static String VISITED = "VISITED";
-
-    private static String javaVersion;
-
-    /**
-     *  Description of the Field
-     */
-    public final static String JAVA_1_0 = "1.0";
-    /**
-     *  Description of the Field
-     */
-    public final static String JAVA_1_1 = "1.1";
-    /**
-     *  Description of the Field
-     */
-    public final static String JAVA_1_2 = "1.2";
-    /**
-     *  Description of the Field
-     */
-    public final static String JAVA_1_3 = "1.3";
-    /**
-     *  Description of the Field
-     */
-    public final static String JAVA_1_4 = "1.4";
-
-    /**
-     *  Description of the Field
-     */
-    public final static String TOKEN_START = FilterSet.DEFAULT_TOKEN_START;
-    /**
-     *  Description of the Field
-     */
-    public final static String TOKEN_END = FilterSet.DEFAULT_TOKEN_END;
-
-    private final static String CORE_DEFINITIONS = "org/apache/tools/ant/antlib.xml";
-
-    private String name;
-    private String description;
-
-    private Hashtable properties = new Hashtable();
-    private Hashtable userProperties = new Hashtable();
-    private Hashtable references = new Hashtable();
-    private String defaultTarget;
-    //    private Hashtable dataClassDefinitions = new Hashtable();
-    //    private Hashtable taskClassDefinitions = new Hashtable();
-    private Hashtable createdTasks = new Hashtable();
-    private Hashtable targets = new Hashtable();
-    private FilterSet globalFilterSet = new FilterSet();
-    private FilterSetCollection globalFilters = new FilterSetCollection(globalFilterSet);
-    private File baseDir;
-
-    private Vector listeners = new Vector();
-
-    /**
-     *  The Ant core classloader - may be null if using system loader
-     */
-    private ClassLoader coreLoader = null;
-
-    /**
-     *  Records the latest task on a thread
-     */
-    private Hashtable threadTasks = new Hashtable();
-
-    /**
-     *  Store symbol tables
-     */
-    private SymbolTable symbols;
-
-    static {
-
-        // Determine the Java version by looking at available classes
-        // java.lang.StrictMath was introduced in JDK 1.3
-        // java.lang.ThreadLocal was introduced in JDK 1.2
-        // java.lang.Void was introduced in JDK 1.1
-        // Count up version until a NoClassDefFoundError ends the try
-
-        try {
-            javaVersion = JAVA_1_0;
-            Class.forName("java.lang.Void");
-            javaVersion = JAVA_1_1;
-            Class.forName("java.lang.ThreadLocal");
-            javaVersion = JAVA_1_2;
-            Class.forName("java.lang.StrictMath");
-            javaVersion = JAVA_1_3;
-            Class.forName("java.lang.CharSequence");
-            javaVersion = JAVA_1_4;
-        } catch (ClassNotFoundException cnfe) {
-            // swallow as we've hit the max class version that
-            // we have
-        }
-    }
-
-    private FileUtils fileUtils;
-
-
-    /**
-     *  <p>
-     *
-     *  Description: The only reason for this class is to make the
-     *  LoadDefinition method visible in this package.</p>
-     *
-     *@author     jfernandez
-     *@created    February 27, 2002
-     */
-    private class Corelib extends Antlib {
-        /**
-         *  Constructor for the Corelib object
-         */
-        Corelib() {
-            super(Project.this);
-            setLoaderid(CORELOADER_ID);
-            getOnerror().setValue("ignore");
-        }
-
-
-        /**
-         *  Description of the Method
-         */
-        public void loadCoreDefinitions() {
-            getOnerror().setValue("report");
-            super.loadDefinitions(CORE_DEFINITIONS);
-        }
-    }
-
-
-    /**
-     *  create a new ant project
-     */
-    public Project() {
-        fileUtils = FileUtils.newFileUtils();
-        symbols = new SymbolTable();
-        symbols.setProject(this);
-    }
-
-
-    /**
-     *  create a new ant project that inherits from caller project
-     *
-     *@param  p  the calling project
-     */
-    private Project(Project p) {
-        fileUtils = FileUtils.newFileUtils();
-        symbols = new SymbolTable(p.getSymbols());
-        symbols.setProject(this);
-        setCoreLoader(p.getCoreLoader());
-    }
-
-
-    /**
-     *  Loads the core definitions into the Root project.
-     */
-    private void loadDefinitions() {
-        // Initialize symbol table just in case
-        symbols.addRole(TASK_ROLE, TaskContainer.class, TaskAdapter.class);
-        symbols.addRole(DATATYPE_ROLE, TaskContainer.class,
-                DataTypeAdapterTask.class);
-
-        Corelib load = new Corelib();
-        load.loadDefinitions();
-
-        // If the most basic of tasks, "property", is not defined
-        // then there was no antlib jars from where to load the descriptors
-        // we should be doing bootstrapping, or ant.jar is not an antlib.
-        if (!isDefinedOnRole(TASK_ROLE, "property")) {
-            load.loadCoreDefinitions();
-
-            if (!isDefinedOnRole(TASK_ROLE, "property")) {
-                throw new BuildException("Can't load core definitions");
-            }
-        }
-        autoLoadDefinitions();
-    }
-
-    private void autoLoadDefinitions() {
-        DirectoryScanner ds = new DirectoryScanner();
-        ds.setBasedir(new File(getProperty("ant.home"),"autolib"));
-        ds.scan();
-        String dirs[] = ds.getIncludedDirectories();
-        for (int i = 0; i < dirs.length; i++) {
-            autoLoad(ds.getBasedir(), dirs[i]);
-        }
-    }
-
-    private void autoLoad(File base, String dir) {
-        FileSet fs = new FileSet();
-        fs.setProject(this);
-        fs.setDir(new File(base, dir));
-        fs.setIncludes("*.jar");
-
-        Path cp = new Path(this);
-        cp.addFileset(fs);
-        if (cp.size() == 0) {
-            return;
-        }
-
-        Antlib.FailureAction fa = new Antlib.FailureAction();
-        fa.setValue("ignore");
-
-        Antlib lib = new Antlib(this);
-        lib.setClasspath(cp);
-        lib.setLoaderid(dir);
-        lib.setOnerror(fa);
-        lib.loadDefinitions();
-    }
-
-    /**
-     *  Creates a subproject of the current project.
-     *
-     *@return    Description of the Return Value
-     */
-    public Project createSubProject() {
-        return new Project(this);
-    }
-
-
-    /**
-     *  Initialise the project. This involves setting the default task
-     *  definitions and loading the system properties.
-     *
-     *@exception  BuildException  Description of the Exception
-     */
-    public void init() throws BuildException {
-        setJavaVersionProperty();
-        setSystemProperties();
-        if (!isRoleDefined(TASK_ROLE)) {
-            // Top project, need to load the core definitions
-            loadDefinitions();
-        }
-    }
-
-
-    /**
-     *  Sets the CoreLoader to the default of the Project object
-     */
-    private void setDefaultCoreLoader() {
-        coreLoader = this.getClass().getClassLoader();
-        if (coreLoader == null) {
-            // This should only happen if ANT is being
-            // loader by the Bootstrap classloader
-            // This may be the case in JDK 1.1
-            coreLoader = ClassLoader.getSystemClassLoader();
-        }
-    }
-
-
-    /**
-     *  Sets the coreLoader attribute of the Project object
-     *
-     *@param  coreLoader  The new coreLoader value
-     */
-    public void setCoreLoader(ClassLoader coreLoader) {
-        if (coreLoader == null) {
-            setDefaultCoreLoader();
-        }
-        else this.coreLoader = coreLoader;
-    }
-
-
-    /**
-     *  Gets the coreLoader attribute of the Project object
-     *
-     *@return    The coreLoader value
-     */
-    public ClassLoader getCoreLoader() {
-        if (coreLoader == null) {
-            setDefaultCoreLoader();
-        }
-        return coreLoader;
-    }
-
-
-    /**
-     *  Adds a feature to the BuildListener attribute of the Project object
-     *
-     *@param  listener  The feature to be added to the BuildListener attribute
-     */
-    public void addBuildListener(BuildListener listener) {
-        listeners.addElement(listener);
-    }
-
-
-    /**
-     *  Description of the Method
-     *
-     *@param  listener  Description of the Parameter
-     */
-    public void removeBuildListener(BuildListener listener) {
-        listeners.removeElement(listener);
-    }
-
-
-    /**
-     *  Gets the buildListeners attribute of the Project object
-     *
-     *@return    The buildListeners value
-     */
-    public Vector getBuildListeners() {
-        return listeners;
-    }
-
-
-    /**
-     *  Get the symbols associated with this project.
-     *
-     *@return    The symbols value
-     */
-    private SymbolTable getSymbols() {
-        // Package protected on purpose
-        return symbols;
-    }
-
-
-    /**
-     *  Output a message to the log with the default log level of MSG_INFO
-     *
-     *@param  msg  text to log
-     */
-
-    public void log(String msg) {
-        log(msg, MSG_INFO);
-    }
-
-
-    /**
-     *  Output a message to the log with the given log level and an event scope
-     *  of project
-     *
-     *@param  msg       text to log
-     *@param  msgLevel  level to log at
-     */
-    public void log(String msg, int msgLevel) {
-        fireMessageLogged(this, msg, msgLevel);
-    }
-
-
-    /**
-     *  Output a message to the log with the given log level and an event scope
-     *  of a task
-     *
-     *@param  task      task to use in the log
-     *@param  msg       text to log
-     *@param  msgLevel  level to log at
-     */
-    public void log(Task task, String msg, int msgLevel) {
-        fireMessageLogged(task, msg, msgLevel);
-    }
-
-
-    /**
-     *  Output a message to the log with the given log level and an event scope
-     *  of a target
-     *
-     *@param  target    target to use in the log
-     *@param  msg       text to log
-     *@param  msgLevel  level to log at
-     */
-    public void log(Target target, String msg, int msgLevel) {
-        fireMessageLogged(target, msg, msgLevel);
-    }
-
-
-    /**
-     *  Gets the globalFilterSet attribute of the Project object
-     *
-     *@return    The globalFilterSet value
-     */
-    public FilterSet getGlobalFilterSet() {
-        return globalFilterSet;
-    }
-
-
-    /**
-     *  set a property. Any existing property of the same name is overwritten,
-     *  unless it is a user property.
-     *
-     *@param  name   name of property
-     *@param  value  new value of the property
-     */
-    public void setProperty(String name, String value) {
-        // command line properties take precedence
-        if (null != userProperties.get(name)) {
-            log("Override ignored for user property " + name, MSG_VERBOSE);
-            return;
-        }
-
-        if (null != properties.get(name)) {
-            log("Overriding previous definition of property " + name,
-                    MSG_VERBOSE);
-        }
-
-        log("Setting project property: " + name + " -> " +
-                value, MSG_DEBUG);
-        properties.put(name, value);
-    }
-
-
-    /**
-     *  set a property. An existing property of the same name will not be
-     *  overwritten.
-     *
-     *@param  name   name of property
-     *@param  value  new value of the property
-     *@since         1.5
-     */
-    public void setNewProperty(String name, String value) {
-        if (null != properties.get(name)) {
-            log("Override ignored for property " + name, MSG_VERBOSE);
-            return;
-        }
-        log("Setting project property: " + name + " -> " +
-                value, MSG_DEBUG);
-        properties.put(name, value);
-    }
-
-
-    /**
-     *  set a user property, which can not be overwritten by set/unset property
-     *  calls
-     *
-     *@param  name   The new userProperty value
-     *@param  value  The new userProperty value
-     *@see           #setProperty(String,String)
-     */
-    public void setUserProperty(String name, String value) {
-        log("Setting ro project property: " + name + " -> " +
-                value, MSG_DEBUG);
-        userProperties.put(name, value);
-        properties.put(name, value);
-    }
-
-
-    /**
-     *  Allows Project and subclasses to set a property unless its already
-     *  defined as a user property. There are a few cases internally to Project
-     *  that need to do this currently.
-     *
-     *@param  name   The new propertyInternal value
-     *@param  value  The new propertyInternal value
-     */
-    private void setPropertyInternal(String name, String value) {
-        if (null != userProperties.get(name)) {
-            return;
-        }
-        properties.put(name, value);
-    }
-
-
-    /**
-     *  query a property.
-     *
-     *@param  name  the name of the property
-     *@return       the property value, or null for no match
-     */
-    public String getProperty(String name) {
-        if (name == null) {
-            return null;
-        }
-        String property = (String) properties.get(name);
-        return property;
-    }
-
-
-    /**
-     *  Replace ${} style constructions in the given value with the string value
-     *  of the corresponding data types.
-     *
-     *@param  value               the string to be scanned for property
-     *      references.
-     *@return                     Description of the Return Value
-     *@exception  BuildException  Description of the Exception
-     */
-    public String replaceProperties(String value)
-             throws BuildException {
-        return ProjectHelper.replaceProperties(this, value, properties);
-    }
-
-
-    /**
-     *  query a user property.
-     *
-     *@param  name  the name of the property
-     *@return       the property value, or null for no match
-     */
-    public String getUserProperty(String name) {
-        if (name == null) {
-            return null;
-        }
-        String property = (String) userProperties.get(name);
-        return property;
-    }
-
-
-    /**
-     *  get a copy of the property hashtable
-     *
-     *@return    the hashtable containing all properties, user included
-     */
-    public Hashtable getProperties() {
-        Hashtable propertiesCopy = new Hashtable();
-
-        Enumeration e = properties.keys();
-        while (e.hasMoreElements()) {
-            Object name = e.nextElement();
-            Object value = properties.get(name);
-            propertiesCopy.put(name, value);
-        }
-
-        return propertiesCopy;
-    }
-
-
-    /**
-     *  get a copy of the user property hashtable
-     *
-     *@return    the hashtable user properties only
-     */
-    public Hashtable getUserProperties() {
-        Hashtable propertiesCopy = new Hashtable();
-
-        Enumeration e = userProperties.keys();
-        while (e.hasMoreElements()) {
-            Object name = e.nextElement();
-            Object value = properties.get(name);
-            propertiesCopy.put(name, value);
-        }
-
-        return propertiesCopy;
-    }
-
-
-    /**
-     *  set the default target of the project
-     *
-     *@param  defaultTarget  The new defaultTarget value
-     *@deprecated,           use setDefault
-     *@see                   #setDefault(String)
-     */
-    public void setDefaultTarget(String defaultTarget) {
-        this.defaultTarget = defaultTarget;
-    }
-
-
-    /**
-     *  get the default target of the project
-     *
-     *@return    default target or null
-     */
-    public String getDefaultTarget() {
-        return defaultTarget;
-    }
-
-
-    /**
-     *  set the default target of the project XML attribute name.
-     *
-     *@param  defaultTarget  The new default value
-     */
-    public void setDefault(String defaultTarget) {
-        this.defaultTarget = defaultTarget;
-    }
-
-
-    /**
-     *  ant xml property. Set the project name as an attribute of this class,
-     *  and of the property ant.project.name
-     *
-     *@param  name  The new name value
-     */
-    public void setName(String name) {
-        setUserProperty("ant.project.name", name);
-        this.name = name;
-    }
-
-
-    /**
-     *  get the project name
-     *
-     *@return    name string
-     */
-    public String getName() {
-        return name;
-    }
-
-
-    /**
-     *  set the project description
-     *
-     *@param  description  text
-     */
-    public void setDescription(String description) {
-        this.description = description;
-    }
-
-
-    /**
-     *  get the project description
-     *
-     *@return    description or null if no description has been set
-     */
-    public String getDescription() {
-        return description;
-    }
-
-
-    /**
-     *@param  token  The feature to be added to the Filter attribute
-     *@param  value  The feature to be added to the Filter attribute
-     *@deprecated
-     */
-    public void addFilter(String token, String value) {
-        if (token == null) {
-            return;
-        }
-
-        globalFilterSet.addFilter(new FilterSet.Filter(token, value));
-    }
-
-
-    /**
-     *@return        The filters value
-     *@deprecated
-     */
-    public Hashtable getFilters() {
-        // we need to build the hashtable dynamically
-        return globalFilterSet.getFilterHash();
-    }
-
-
-    /**
-     *  match basedir attribute in xml
-     *
-     *@param  baseD            project base directory.
-     *@throws  BuildException  if the directory was invalid
-     */
-    public void setBasedir(String baseD) throws BuildException {
-        setBaseDir(new File(baseD));
-    }
-
-
-    /**
-     *  set the base directory; XML attribute. checks for the directory existing
-     *  and being a directory type
-     *
-     *@param  baseDir          project base directory.
-     *@throws  BuildException  if the directory was invalid
-     */
-    public void setBaseDir(File baseDir) throws BuildException {
-        baseDir = fileUtils.normalize(baseDir.getAbsolutePath());
-        if (!baseDir.exists()) {
-            throw new BuildException("Basedir " + baseDir.getAbsolutePath() + " does not exist");
-        }
-        if (!baseDir.isDirectory()) {
-            throw new BuildException("Basedir " + baseDir.getAbsolutePath() + " is not a directory");
-        }
-        this.baseDir = baseDir;
-        setPropertyInternal("basedir", this.baseDir.getPath());
-        String msg = "Project base dir set to: " + this.baseDir;
-        log(msg, MSG_VERBOSE);
-    }
-
-
-    /**
-     *  get the base directory of the project as a file object
-     *
-     *@return    the base directory. If this is null, then the base dir is not
-     *      valid
-     */
-    public File getBaseDir() {
-        if (baseDir == null) {
-            try {
-                setBasedir(".");
-            } catch (BuildException ex) {
-                ex.printStackTrace();
-            }
-        }
-        return baseDir;
-    }
-
-
-    /**
-     *  static query of the java version
-     *
-     *@return    something like "1.1" or "1.3"
-     */
-    public static String getJavaVersion() {
-        return javaVersion;
-    }
-
-
-    /**
-     *  set the ant.java.version property, also tests for unsupported JVM
-     *  versions, prints the verbose log messages
-     *
-     *@throws  BuildException  if this Java version is not supported
-     */
-    public void setJavaVersionProperty() throws BuildException {
-        setPropertyInternal("ant.java.version", javaVersion);
-
-        // sanity check
-        if (javaVersion == JAVA_1_0) {
-            throw new BuildException("Ant cannot work on Java 1.0");
-        }
-
-        log("Detected Java version: " + javaVersion + " in: " + System.getProperty("java.home"), MSG_VERBOSE);
-
-        log("Detected OS: " + System.getProperty("os.name"), MSG_VERBOSE);
-    }
-
-
-    /**
-     *  turn all the system properties into ant properties. user properties
-     *  still override these values
-     */
-    public void setSystemProperties() {
-        Properties systemP = System.getProperties();
-        Enumeration e = systemP.keys();
-        while (e.hasMoreElements()) {
-            Object name = e.nextElement();
-            String value = systemP.get(name).toString();
-            this.setPropertyInternal(name.toString(), value);
-        }
-    }
-
-
-    /**
-     *  Adds a feature to the ToLoader attribute of the Project object
-     *
-     *@param  loader  The feature to be added to the ToLoader attribute
-     *@param  path    The feature to be added to the ToLoader attribute
-     *@return         Description of the Return Value
-     */
-    public ClassLoader addToLoader(String loader, Path path) {
-        if (loader == CORELOADER_ID) {
-            // It is not possible to add more libraries to the CoreLoader
-            // Just return it as is.
-            return getCoreLoader();
-        }
-        return symbols.addToLoader(loader, path);
-    }
-
-
-    /**
-     *  Adds a feature to the RoleDefinition attribute of the Project object
-     *
-     *@param  role       The feature to be added to the RoleDefinition attribute
-     *@param  roleClass  The feature to be added to the RoleDefinition attribute
-     *@param  adapter    The feature to be added to the RoleDefinition attribute
-     *@return            Description of the Return Value
-     */
-    public boolean addRoleDefinition(String role,
-            Class roleClass, Class adapter) {
-        return symbols.addRole(role, roleClass, adapter);
-    }
-
-
-    /**
-     *  test for a role name being in use already
-     *
-     *@param  name  the name to test
-     *@return       true if it is a task or a datatype
-     */
-    public boolean isRoleDefined(String name) {
-        return (symbols.getRole(name) != null);
-    }
-
-
-    /**
-     *  Adds a feature to the DefinitionOnRole attribute of the Project object
-     *
-     *@param  role  The feature to be added to the DefinitionOnRole attribute
-     *@param  type  The feature to be added to the DefinitionOnRole attribute
-     *@param  clz   The feature to be added to the DefinitionOnRole attribute
-     */
-    public void addDefinitionOnRole(String role,
-            String type, Class clz) {
-        Class old = symbols.add(role, type, clz);
-        // Special management for Tasks
-        if (TASK_ROLE.equals(role) && null != old && !old.equals(clz)) {
-            invalidateCreatedTasks(type);
-        }
-    }
-
-
-    /**
-     *  test for a name being in use already on this role
-     *
-     *@param  name  the name to test
-     *@param  role  Description of the Parameter
-     *@return       true if it is a task or a datatype
-     */
-    public boolean isDefinedOnRole(String role, String name) {
-        return (symbols.get(role, name) != null);
-    }
-
-
-    /**
-     *  add a new task definition, complain if there is an overwrite attempt
-     *
-     *@param  taskName         name of the task
-     *@param  taskClass        full task classname
-     *@throws  BuildException  and logs as Project.MSG_ERR for conditions, that
-     *      will cause the task execution to fail.
-     */
-    public void addTaskDefinition(String taskName, Class taskClass)
-             throws BuildException {
-        addDefinitionOnRole(TASK_ROLE, taskName, taskClass);
-    }
-
-
-    /**
-     *  Checks a class, whether it is suitable for serving as ant task.
-     *
-     *@param  taskClass        Description of the Parameter
-     *@throws  BuildException  and logs as Project.MSG_ERR for conditions, that
-     *      will cause the task execution to fail.
-     *@deprecated              this is done now when added to SymbolTable
-     */
-    public void checkTaskClass(final Class taskClass) throws BuildException {
-        if (!Task.class.isAssignableFrom(taskClass)) {
-            TaskAdapter.checkTaskClass(taskClass, this);
-        }
-    }
-
-
-    /**
-     *  get the current task definition hashtable
-     *
-     *@return    The taskDefinitions value
-     */
-    public Hashtable getTaskDefinitions() {
-        return symbols.getDefinitions(TASK_ROLE);
-    }
-
-
-    /**
-     *  add a new datatype
-     *
-     *@param  typeName   name of the datatype
-     *@param  typeClass  full datatype classname
-     */
-    public void addDataTypeDefinition(String typeName, Class typeClass) {
-        addDefinitionOnRole(DATATYPE_ROLE, typeName, typeClass);
-    }
-
-
-    /**
-     *  get the current task definition hashtable
-     *
-     *@return    The dataTypeDefinitions value
-     */
-    public Hashtable getDataTypeDefinitions() {
-        return symbols.getDefinitions(DATATYPE_ROLE);
-    }
-
-
-    /**
-     *  This call expects to add a <em>new</em> Target.
-     *
-     *@param  target              is the Target to be added to the current
-     *      Project.
-     *@see                        Project#addOrReplaceTarget to replace existing
-     *      Targets.
-     */
-    public void addTarget(Target target) {
-        String name = target.getName();
-        if (targets.get(name) != null) {
-            throw new BuildException("Duplicate target: `" + name + "'");
-        }
-        addOrReplaceTarget(name, target);
-    }
-
-
-    /**
-     *  This call expects to add a <em>new</em> Target.
-     *
-     *@param  target              is the Target to be added to the current
-     *      Project.
-     *@param  targetName          is the name to use for the Target
-     *@exception  BuildException  if the Target already exists in the project.
-     *@see                        Project#addOrReplaceTarget to replace existing
-     *      Targets.
-     */
-    public void addTarget(String targetName, Target target)
-             throws BuildException {
-        if (targets.get(targetName) != null) {
-            throw new BuildException("Duplicate target: `" + targetName + "'");
-        }
-        addOrReplaceTarget(targetName, target);
-    }
-
-
-    /**
-     *@param  target  is the Target to be added or replaced in the current
-     *      Project.
-     */
-    public void addOrReplaceTarget(Target target) {
-        addOrReplaceTarget(target.getName(), target);
-    }
-
-
-    /**
-     *@param  target      is the Target to be added/replaced in the current
-     *      Project.
-     *@param  targetName  is the name to use for the Target
-     */
-    public void addOrReplaceTarget(String targetName, Target target) {
-        String msg = " +Target: " + targetName;
-        log(msg, MSG_DEBUG);
-        target.setProject(this);
-        targets.put(targetName, target);
-    }
-
-
-    /**
-     *  get the target hashtable
-     *
-     *@return    hashtable, the contents of which can be cast to Target
-     */
-    public Hashtable getTargets() {
-        return targets;
-    }
-
-
-    /**
-     *  Create a new element instance on a Role
-     *
-     *@param  role  name of the role to use
-     *@param  type  name of the element to create
-     *@return       null if element unknown on this role
-     */
-    public Object createForRole(String role, String type) {
-        SymbolTable.Factory f = symbols.get(role, type);
-        if (f == null) {
-            return null;
-        }
-
-        try {
-            Object o = f.create(this);
-            // Do special book keeping for ProjectComponents
-            if (o instanceof ProjectComponent) {
-                ((ProjectComponent) o).setProject(this);
-                if (o instanceof Task) {
-                    Task task = (Task) o;
-                    task.setTaskType(type);
-
-                    // set default value, can be changed by the user
-                    task.setTaskName(type);
-                    addCreatedTask(type, task);
-                }
-            }
-            String msg = "   +" + role + ": " + type;
-            log(msg, MSG_DEBUG);
-            return o;
-        } catch (Throwable t) {
-            String msg = "Could not create " + role + " of type: "
-                     + type + " due to " + t;
-            throw new BuildException(msg, t);
-        }
-    }
-
-
-    /**
-     *@param  container  Description of the Parameter
-     *@param  type       Description of the Parameter
-     *@return            Description of the Return Value
-     */
-    public Object createInRole(Object container, String type) {
-        Class clz = container.getClass();
-        String roles[] = symbols.findRoles(clz);
-        Object theOne = null;
-        Method add = null;
-
-        for (int i = 0; i < roles.length; i++) {
-            Object o = createForRole(roles[i], type);
-            if (o != null) {
-                if (theOne != null) {
-                    String msg = "Element " + type +
-                            " is ambiguous for container " + clz.getName();
-                    if (theOne instanceof RoleAdapter) {
-                        theOne = ((RoleAdapter) theOne).getProxy();
-                    }
-                    if (o instanceof RoleAdapter) {
-                        o = ((RoleAdapter) o).getProxy();
-                    }
-
-                    log(msg, MSG_ERR);
-                    log("cannot distinguish between " +
-                            theOne.getClass().getName() +
-                            " and " + o.getClass().getName(), MSG_ERR);
-                    throw new BuildException(msg);
-                }
-                theOne = o;
-                add = symbols.getRole(roles[i]).getInterfaceMethod();
-            }
-        }
-        if (theOne != null) {
-            try {
-                add.invoke(container, new Object[]{theOne});
-            } catch (InvocationTargetException ite) {
-                if (ite.getTargetException() instanceof BuildException) {
-                    throw (BuildException) ite.getTargetException();
-                }
-                throw new BuildException(ite.getTargetException());
-            } catch (Exception e) {
-                throw new BuildException(e);
-            }
-        }
-        return theOne;
-    }
-
-
-    /**
-     *  create a new task instance
-     *
-     *@param  taskType         name of the task
-     *@return                  null if the task name is unknown
-     *@throws  BuildException  when task creation goes bad
-     */
-    public Task createTask(String taskType) throws BuildException {
-        return (Task) createForRole(TASK_ROLE, taskType);
-    }
-
-
-    /**
-     *  Keep a record of all tasks that have been created so that they can be
-     *  invalidated if a taskdef overrides the definition.
-     *
-     *@param  type  The feature to be added to the CreatedTask attribute
-     *@param  task  The feature to be added to the CreatedTask attribute
-     */
-    private void addCreatedTask(String type, Task task) {
-        synchronized (createdTasks) {
-            Vector v = (Vector) createdTasks.get(type);
-            if (v == null) {
-                v = new Vector();
-                createdTasks.put(type, v);
-            }
-            v.addElement(task);
-        }
-    }
-
-
-    /**
-     *  Mark tasks as invalid which no longer are of the correct type for a
-     *  given taskname.
-     *
-     *@param  type  Description of the Parameter
-     */
-    private void invalidateCreatedTasks(String type) {
-        synchronized (createdTasks) {
-            Vector v = (Vector) createdTasks.get(type);
-            if (v != null) {
-                Enumeration enum = v.elements();
-                while (enum.hasMoreElements()) {
-                    Task t = (Task) enum.nextElement();
-                    t.markInvalid();
-                }
-                v.removeAllElements();
-                createdTasks.remove(type);
-            }
-        }
-    }
-
-
-    /**
-     *  create a new DataType instance
-     *
-     *@param  typeName         name of the datatype
-     *@return                  null if the datatype name is unknown
-     *@throws  BuildException  when datatype creation goes bad
-     */
-    public Object createDataType(String typeName) throws BuildException {
-        // This is to make the function backward compatible
-        // Since we know if it returning an adapter for it
-        DataTypeAdapterTask dt =
-                (DataTypeAdapterTask) createForRole(DATATYPE_ROLE, typeName);
-        return (dt != null ? dt.getProxy() : null);
-    }
-
-
-    /**
-     *  execute the sequence of targets, and the targets they depend on
-     *
-     *@param  targetNames      Description of the Parameter
-     *@throws  BuildException  if the build failed
-     */
-    public void executeTargets(Vector targetNames) throws BuildException {
-        Throwable error = null;
-
-        for (int i = 0; i < targetNames.size(); i++) {
-            executeTarget((String) targetNames.elementAt(i));
-        }
-    }
-
-
-    /**
-     *  Description of the Method
-     *
-     *@param  line     Description of the Parameter
-     *@param  isError  Description of the Parameter
-     */
-    public void demuxOutput(String line, boolean isError) {
-        Task task = (Task) threadTasks.get(Thread.currentThread());
-        if (task == null) {
-            fireMessageLogged(this, line, isError ? MSG_ERR : MSG_INFO);
-        } else {
-            if (isError) {
-                task.handleErrorOutput(line);
-            } else {
-                task.handleOutput(line);
-            }
-        }
-    }
-
-
-    /**
-     *  execute the targets and any targets it depends on
-     *
-     *@param  targetName       the target to execute
-     *@throws  BuildException  if the build failed
-     */
-    public void executeTarget(String targetName) throws BuildException {
-
-        // sanity check ourselves, if we've been asked to build nothing
-        // then we should complain
-
-        if (targetName == null) {
-            String msg = "No target specified";
-            throw new BuildException(msg);
-        }
-
-        // Sort the dependency tree, and run everything from the
-        // beginning until we hit our targetName.
-        // Sorting checks if all the targets (and dependencies)
-        // exist, and if there is any cycle in the dependency
-        // graph.
-        Vector sortedTargets = topoSort(targetName, targets);
-
-        int curidx = 0;
-        Target curtarget;
-
-        do {
-            curtarget = (Target) sortedTargets.elementAt(curidx++);
-            curtarget.performTasks();
-        } while (!curtarget.getName().equals(targetName));
-    }
-
-
-    /**
-     *  Return the canonical form of fileName as an absolute path. <p>
-     *
-     *  If fileName is a relative file name, resolve it relative to rootDir.</p>
-     *
-     *@param  fileName  Description of the Parameter
-     *@param  rootDir   Description of the Parameter
-     *@return           Description of the Return Value
-     *@deprecated
-     */
-    public File resolveFile(String fileName, File rootDir) {
-        return fileUtils.resolveFile(rootDir, fileName);
-    }
-
-
-    /**
-     *  Description of the Method
-     *
-     *@param  fileName  Description of the Parameter
-     *@return           Description of the Return Value
-     */
-    public File resolveFile(String fileName) {
-        return fileUtils.resolveFile(baseDir, fileName);
-    }
-
-
-    /**
-     *  Translate a path into its native (platform specific) format. <p>
-     *
-     *  This method uses the PathTokenizer class to separate the input path into
-     *  its components. This handles DOS style paths in a relatively sensible
-     *  way. The file separators are then converted to their platform specific
-     *  versions.
-     *
-     *@param  to_process  the path to be converted
-     *@return             the native version of to_process or an empty string if
-     *      to_process is null or empty
-     */
-    public static String translatePath(String to_process) {
-        if (to_process == null || to_process.length() == 0) {
-            return "";
-        }
-
-        StringBuffer path = new StringBuffer(to_process.length() + 50);
-        PathTokenizer tokenizer = new PathTokenizer(to_process);
-        while (tokenizer.hasMoreTokens()) {
-            String pathComponent = tokenizer.nextToken();
-            pathComponent = pathComponent.replace('/', File.separatorChar);
-            pathComponent = pathComponent.replace('\\', File.separatorChar);
-            if (path.length() != 0) {
-                path.append(File.pathSeparatorChar);
-            }
-            path.append(pathComponent);
-        }
-
-        return path.toString();
-    }
-
-
-    /**
-     *  Convienence method to copy a file from a source to a destination. No
-     *  filtering is performed.
-     *
-     *@param  sourceFile    Description of the Parameter
-     *@param  destFile      Description of the Parameter
-     *@throws  IOException
-     *@deprecated
-     */
-    public void copyFile(String sourceFile, String destFile) throws IOException {
-        fileUtils.copyFile(sourceFile, destFile);
-    }
-
-
-    /**
-     *  Convienence method to copy a file from a source to a destination
-     *  specifying if token filtering must be used.
-     *
-     *@param  sourceFile    Description of the Parameter
-     *@param  destFile      Description of the Parameter
-     *@param  filtering     Description of the Parameter
-     *@throws  IOException
-     *@deprecated
-     */
-    public void copyFile(String sourceFile, String destFile, boolean filtering)
-             throws IOException {
-        fileUtils.copyFile(sourceFile, destFile, filtering ? globalFilters : null);
-    }
-
-
-    /**
-     *  Convienence method to copy a file from a source to a destination
-     *  specifying if token filtering must be used and if source files may
-     *  overwrite newer destination files.
-     *
-     *@param  sourceFile    Description of the Parameter
-     *@param  destFile      Description of the Parameter
-     *@param  filtering     Description of the Parameter
-     *@param  overwrite     Description of the Parameter
-     *@throws  IOException
-     *@deprecated
-     */
-    public void copyFile(String sourceFile, String destFile, boolean filtering,
-            boolean overwrite) throws IOException {
-        fileUtils.copyFile(sourceFile, destFile, filtering ? globalFilters : null, overwrite);
-    }
-
-
-    /**
-     *  Convienence method to copy a file from a source to a destination
-     *  specifying if token filtering must be used, if source files may
-     *  overwrite newer destination files and the last modified time of <code>destFile</code>
-     *  file should be made equal to the last modified time of <code>sourceFile</code>
-     *  .
-     *
-     *@param  sourceFile            Description of the Parameter
-     *@param  destFile              Description of the Parameter
-     *@param  filtering             Description of the Parameter
-     *@param  overwrite             Description of the Parameter
-     *@param  preserveLastModified  Description of the Parameter
-     *@throws  IOException
-     *@deprecated
-     */
-    public void copyFile(String sourceFile, String destFile, boolean filtering,
-            boolean overwrite, boolean preserveLastModified)
-             throws IOException {
-        fileUtils.copyFile(sourceFile, destFile, filtering ? globalFilters : null,
-                overwrite, preserveLastModified);
-    }
-
-
-    /**
-     *  Convienence method to copy a file from a source to a destination. No
-     *  filtering is performed.
-     *
-     *@param  sourceFile    Description of the Parameter
-     *@param  destFile      Description of the Parameter
-     *@throws  IOException
-     *@deprecated
-     */
-    public void copyFile(File sourceFile, File destFile) throws IOException {
-        fileUtils.copyFile(sourceFile, destFile);
-    }
-
-
-    /**
-     *  Convienence method to copy a file from a source to a destination
-     *  specifying if token filtering must be used.
-     *
-     *@param  sourceFile    Description of the Parameter
-     *@param  destFile      Description of the Parameter
-     *@param  filtering     Description of the Parameter
-     *@throws  IOException
-     *@deprecated
-     */
-    public void copyFile(File sourceFile, File destFile, boolean filtering)
-             throws IOException {
-        fileUtils.copyFile(sourceFile, destFile, filtering ? globalFilters : null);
-    }
-
-
-    /**
-     *  Convienence method to copy a file from a source to a destination
-     *  specifying if token filtering must be used and if source files may
-     *  overwrite newer destination files.
-     *
-     *@param  sourceFile    Description of the Parameter
-     *@param  destFile      Description of the Parameter
-     *@param  filtering     Description of the Parameter
-     *@param  overwrite     Description of the Parameter
-     *@throws  IOException
-     *@deprecated
-     */
-    public void copyFile(File sourceFile, File destFile, boolean filtering,
-            boolean overwrite) throws IOException {
-        fileUtils.copyFile(sourceFile, destFile, filtering ? globalFilters : null, overwrite);
-    }
-
-
-    /**
-     *  Convienence method to copy a file from a source to a destination
-     *  specifying if token filtering must be used, if source files may
-     *  overwrite newer destination files and the last modified time of <code>destFile</code>
-     *  file should be made equal to the last modified time of <code>sourceFile</code>
-     *  .
-     *
-     *@param  sourceFile            Description of the Parameter
-     *@param  destFile              Description of the Parameter
-     *@param  filtering             Description of the Parameter
-     *@param  overwrite             Description of the Parameter
-     *@param  preserveLastModified  Description of the Parameter
-     *@throws  IOException
-     *@deprecated
-     */
-    public void copyFile(File sourceFile, File destFile, boolean filtering,
-            boolean overwrite, boolean preserveLastModified)
-             throws IOException {
-        fileUtils.copyFile(sourceFile, destFile, filtering ? globalFilters : null,
-                overwrite, preserveLastModified);
-    }
-
-
-    /**
-     *  Calls File.setLastModified(long time) in a Java 1.1 compatible way.
-     *
-     *@param  file                The new fileLastModified value
-     *@param  time                The new fileLastModified value
-     *@exception  BuildException  Description of the Exception
-     *@deprecated
-     */
-    public void setFileLastModified(File file, long time) throws BuildException {
-        if (getJavaVersion() == JAVA_1_1) {
-            log("Cannot change the modification time of " + file
-                     + " in JDK 1.1", Project.MSG_WARN);
-            return;
-        }
-        fileUtils.setFileLastModified(file, time);
-        log("Setting modification time for " + file, MSG_VERBOSE);
-    }
-
-
-    /**
-     *  returns the boolean equivalent of a string, which is considered true if
-     *  either "on", "true", or "yes" is found, ignoring case.
-     *
-     *@param  s  Description of the Parameter
-     *@return    Description of the Return Value
-     */
-    public static boolean toBoolean(String s) {
-        return (s.equalsIgnoreCase("on") ||
-                s.equalsIgnoreCase("true") ||
-                s.equalsIgnoreCase("yes"));
-    }
-
-
-    /**
-     *  Topologically sort a set of Targets.
-     *
-     *@param  root                is the (String) name of the root Target. The
-     *      sort is created in such a way that the sequence of Targets uptil the
-     *      root target is the minimum possible such sequence.
-     *@param  targets             is a Hashtable representing a "name to Target"
-     *      mapping
-     *@return                     a Vector of Strings with the names of the
-     *      targets in sorted order.
-     *@exception  BuildException  if there is a cyclic dependency among the
-     *      Targets, or if a Target does not exist.
-     */
-    public final Vector topoSort(String root, Hashtable targets)
-             throws BuildException {
-        Vector ret = new Vector();
-        Hashtable state = new Hashtable();
-        Stack visiting = new Stack();
-
-        // We first run a DFS based sort using the root as the starting node.
-        // This creates the minimum sequence of Targets to the root node.
-        // We then do a sort on any remaining unVISITED targets.
-        // This is unnecessary for doing our build, but it catches
-        // circular dependencies or missing Targets on the entire
-        // dependency tree, not just on the Targets that depend on the
-        // build Target.
-
-        tsort(root, targets, state, visiting, ret);
-        log("Build sequence for target `" + root + "' is " + ret, MSG_VERBOSE);
-        for (Enumeration en = targets.keys(); en.hasMoreElements(); ) {
-            String curTarget = (String) (en.nextElement());
-            String st = (String) state.get(curTarget);
-            if (st == null) {
-                tsort(curTarget, targets, state, visiting, ret);
-            } else if (st == VISITING) {
-                throw new RuntimeException("Unexpected node in visiting state: " + curTarget);
-            }
-        }
-        log("Complete build sequence is " + ret, MSG_VERBOSE);
-        return ret;
-    }
-
-
-    // one step in a recursive DFS traversal of the Target dependency tree.
-    // - The Hashtable "state" contains the state (VISITED or VISITING or null)
-    // of all the target names.
-    // - The Stack "visiting" contains a stack of target names that are
-    // currently on the DFS stack. (NB: the target names in "visiting" are
-    // exactly the target names in "state" that are in the VISITING state.)
-    // 1. Set the current target to the VISITING state, and push it onto
-    // the "visiting" stack.
-    // 2. Throw a BuildException if any child of the current node is
-    // in the VISITING state (implies there is a cycle.) It uses the
-    // "visiting" Stack to construct the cycle.
-    // 3. If any children have not been VISITED, tsort() the child.
-    // 4. Add the current target to the Vector "ret" after the children
-    //   have been visited. Move the current target to the VISITED state.
-    //   "ret" now contains the sorted sequence of Targets upto the current
-    //   Target.
-
-    /**
-     *  Description of the Method
-     *
-     *@param  root                Description of the Parameter
-     *@param  targets             Description of the Parameter
-     *@param  state               Description of the Parameter
-     *@param  visiting            Description of the Parameter
-     *@param  ret                 Description of the Parameter
-     *@exception  BuildException  Description of the Exception
-     */
-    private final void tsort(String root, Hashtable targets,
-            Hashtable state, Stack visiting,
-            Vector ret)
-             throws BuildException {
-        state.put(root, VISITING);
-        visiting.push(root);
-
-        Target target = (Target) (targets.get(root));
-
-        // Make sure we exist
-        if (target == null) {
-            StringBuffer sb = new StringBuffer("Target `");
-            sb.append(root);
-            sb.append("' does not exist in this project. ");
-            visiting.pop();
-            if (!visiting.empty()) {
-                String parent = (String) visiting.peek();
-                sb.append("It is used from target `");
-                sb.append(parent);
-                sb.append("'.");
-            }
-
-            throw new BuildException(new String(sb));
-        }
-
-        for (Enumeration en = target.getDependencies(); en.hasMoreElements(); ) {
-            String cur = (String) en.nextElement();
-            String m = (String) state.get(cur);
-            if (m == null) {
-                // Not been visited
-                tsort(cur, targets, state, visiting, ret);
-            } else if (m == VISITING) {
-                // Currently visiting this node, so have a cycle
-                throw makeCircularException(cur, visiting);
-            }
-        }
-
-        String p = (String) visiting.pop();
-        if (root != p) {
-            throw new RuntimeException("Unexpected internal error: expected to pop " + root + " but got " + p);
-        }
-        state.put(root, VISITED);
-        ret.addElement(target);
-    }
-
-
-    /**
-     *  Description of the Method
-     *
-     *@param  end  Description of the Parameter
-     *@param  stk  Description of the Parameter
-     *@return      Description of the Return Value
-     */
-    private static BuildException makeCircularException(String end, Stack stk) {
-        StringBuffer sb = new StringBuffer("Circular dependency: ");
-        sb.append(end);
-        String c;
-        do {
-            c = (String) stk.pop();
-            sb.append(" <- ");
-            sb.append(c);
-        } while (!c.equals(end));
-        return new BuildException(new String(sb));
-    }
-
-
-    /**
-     *  Adds a feature to the Reference attribute of the Project object
-     *
-     *@param  name   The feature to be added to the Reference attribute
-     *@param  value  The feature to be added to the Reference attribute
-     */
-    public void addReference(String name, Object value) {
-        Object o = references.get(name);
-        if (null != o && o != value
-                 && (!(o instanceof RoleAdapter)
-                 || ((RoleAdapter) o).getProxy() != value)) {
-            log("Overriding previous definition of reference to " + name,
-                    MSG_WARN);
-        }
-        log("Adding reference: " + name + " -> " + value, MSG_DEBUG);
-        references.put(name, value);
-    }
-
-
-    /**
-     *  Gets the references attribute of the Project object
-     *
-     *@return    The references value
-     */
-    public Hashtable getReferences() {
-        return references;
-    }
-
-
-    /**
-     *@param  key  Description of the Parameter
-     *@return      The object with the "id" key.
-     */
-    public Object getReference(String key) {
-        return references.get(key);
-    }
-
-
-    /**
-     *  send build started event to the listeners
-     */
-    protected void fireBuildStarted() {
-        BuildEvent event = new BuildEvent(this);
-        for (int i = 0; i < listeners.size(); i++) {
-            BuildListener listener = (BuildListener) listeners.elementAt(i);
-            listener.buildStarted(event);
-        }
-    }
-
-
-    /**
-     *  send build finished event to the listeners
-     *
-     *@param  exception  exception which indicates failure if not null
-     */
-    protected void fireBuildFinished(Throwable exception) {
-        BuildEvent event = new BuildEvent(this);
-        event.setException(exception);
-        for (int i = 0; i < listeners.size(); i++) {
-            BuildListener listener = (BuildListener) listeners.elementAt(i);
-            listener.buildFinished(event);
-        }
-    }
-
-
-    /**
-     *  send target started event to the listeners
-     *
-     *@param  target  Description of the Parameter
-     */
-    protected void fireTargetStarted(Target target) {
-        BuildEvent event = new BuildEvent(target);
-        for (int i = 0; i < listeners.size(); i++) {
-            BuildListener listener = (BuildListener) listeners.elementAt(i);
-            listener.targetStarted(event);
-        }
-    }
-
-
-    /**
-     *  send build finished event to the listeners
-     *
-     *@param  exception  exception which indicates failure if not null
-     *@param  target     Description of the Parameter
-     */
-    protected void fireTargetFinished(Target target, Throwable exception) {
-        BuildEvent event = new BuildEvent(target);
-        event.setException(exception);
-        for (int i = 0; i < listeners.size(); i++) {
-            BuildListener listener = (BuildListener) listeners.elementAt(i);
-            listener.targetFinished(event);
-        }
-    }
-
-
-    /**
-     *  Description of the Method
-     *
-     *@param  task  Description of the Parameter
-     */
-    protected void fireTaskStarted(Task task) {
-        // register this as the current task on the current thread.
-        threadTasks.put(Thread.currentThread(), task);
-        BuildEvent event = new BuildEvent(task);
-        for (int i = 0; i < listeners.size(); i++) {
-            BuildListener listener = (BuildListener) listeners.elementAt(i);
-            listener.taskStarted(event);
-        }
-    }
-
-
-    /**
-     *  Description of the Method
-     *
-     *@param  task       Description of the Parameter
-     *@param  exception  Description of the Parameter
-     */
-    protected void fireTaskFinished(Task task, Throwable exception) {
-        threadTasks.remove(Thread.currentThread());
-        System.out.flush();
-        System.err.flush();
-        BuildEvent event = new BuildEvent(task);
-        event.setException(exception);
-        for (int i = 0; i < listeners.size(); i++) {
-            BuildListener listener = (BuildListener) listeners.elementAt(i);
-            listener.taskFinished(event);
-        }
-    }
-
-
-    /**
-     *  Description of the Method
-     *
-     *@param  event     Description of the Parameter
-     *@param  message   Description of the Parameter
-     *@param  priority  Description of the Parameter
-     */
-    private void fireMessageLoggedEvent(BuildEvent event, String message, int priority) {
-        event.setMessage(message, priority);
-        for (int i = 0; i < listeners.size(); i++) {
-            BuildListener listener = (BuildListener) listeners.elementAt(i);
-            listener.messageLogged(event);
-        }
-    }
-
-
-    /**
-     *  Description of the Method
-     *
-     *@param  project   Description of the Parameter
-     *@param  message   Description of the Parameter
-     *@param  priority  Description of the Parameter
-     */
-    protected void fireMessageLogged(Project project, String message, int priority) {
-        BuildEvent event = new BuildEvent(project);
-        fireMessageLoggedEvent(event, message, priority);
-    }
-
-
-    /**
-     *  Description of the Method
-     *
-     *@param  target    Description of the Parameter
-     *@param  message   Description of the Parameter
-     *@param  priority  Description of the Parameter
-     */
-    protected void fireMessageLogged(Target target, String message, int priority) {
-        BuildEvent event = new BuildEvent(target);
-        fireMessageLoggedEvent(event, message, priority);
-    }
-
-
-    /**
-     *  Description of the Method
-     *
-     *@param  task      Description of the Parameter
-     *@param  message   Description of the Parameter
-     *@param  priority  Description of the Parameter
-     */
-    protected void fireMessageLogged(Task task, String message, int priority) {
-        BuildEvent event = new BuildEvent(task);
-        fireMessageLoggedEvent(event, message, priority);
-    }
-
-}
diff --git a/proposal/sandbox/antlib/src/main/org/apache/tools/ant/ProjectHelper.java b/proposal/sandbox/antlib/src/main/org/apache/tools/ant/ProjectHelper.java
deleted file mode 100644
index fe832c3..0000000
--- a/proposal/sandbox/antlib/src/main/org/apache/tools/ant/ProjectHelper.java
+++ /dev/null
@@ -1,833 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.util.Hashtable;
-import java.util.Vector;
-import java.util.Enumeration;
-import java.util.Locale;
-import org.xml.sax.Locator;
-import org.xml.sax.InputSource;
-import org.xml.sax.HandlerBase;
-import org.xml.sax.SAXParseException;
-import org.xml.sax.SAXException;
-import org.xml.sax.DocumentHandler;
-import org.xml.sax.AttributeList;
-
-
-import javax.xml.parsers.SAXParserFactory;
-import javax.xml.parsers.SAXParser;
-import javax.xml.parsers.ParserConfigurationException;
-
-/**
- * Configures a Project (complete with Targets and Tasks) based on
- * a XML build file.
- *
- * @author duncan@x180.com
- */
-
-public class ProjectHelper {
-
-    private static SAXParserFactory parserFactory = null;
-
-    private org.xml.sax.Parser parser;
-    private Project project;
-    private File buildFile;
-    private File buildFileParent;
-    private Locator locator;
-
-    /**
-     * Configures the Project with the contents of the specified XML file.
-     */
-    public static void configureProject(Project project, File buildFile) throws BuildException {
-        new ProjectHelper(project, buildFile).parse();
-    }
-
-    /**
-     * Constructs a new Ant parser for the specified XML file.
-     */
-    private ProjectHelper(Project project, File buildFile) {
-        this.project = project;
-        this.buildFile = new File(buildFile.getAbsolutePath());
-        buildFileParent = new File(this.buildFile.getParent());
-    }
-
-    /**
-     * Parses the project file.
-     */
-    private void parse() throws BuildException {
-        FileInputStream inputStream = null;
-        InputSource inputSource = null;
-
-        try {
-            SAXParser saxParser = getParserFactory().newSAXParser();
-            parser = saxParser.getParser();
-
-            String uri = "file:" + buildFile.getAbsolutePath().replace('\\', '/');
-            for (int index = uri.indexOf('#'); index != -1; index = uri.indexOf('#')) {
-                uri = uri.substring(0, index) + "%23" + uri.substring(index+1);
-            }
-
-            inputStream = new FileInputStream(buildFile);
-            inputSource = new InputSource(inputStream);
-            inputSource.setSystemId(uri);
-            project.log("parsing buildfile " + buildFile + " with URI = " + uri, Project.MSG_VERBOSE);
-            saxParser.parse(inputSource, new RootHandler());
-        }
-        catch(ParserConfigurationException exc) {
-            throw new BuildException("Parser has not been configured correctly", exc);
-        }
-        catch(SAXParseException exc) {
-            Location location =
-                new Location(buildFile.toString(), exc.getLineNumber(), exc.getColumnNumber());
-
-            Throwable t = exc.getException();
-            if (t instanceof BuildException) {
-                BuildException be = (BuildException) t;
-                if (be.getLocation() == Location.UNKNOWN_LOCATION) {
-                    be.setLocation(location);
-                }
-                throw be;
-            }
-
-            throw new BuildException(exc.getMessage(), t, location);
-        }
-        catch(SAXException exc) {
-            Throwable t = exc.getException();
-            if (t instanceof BuildException) {
-                throw (BuildException) t;
-            }
-            throw new BuildException(exc.getMessage(), t);
-        }
-        catch(FileNotFoundException exc) {
-            throw new BuildException(exc);
-        }
-        catch(IOException exc) {
-            throw new BuildException("Error reading project file", exc);
-        }
-        finally {
-            if (inputStream != null) {
-                try {
-                    inputStream.close();
-                }
-                catch (IOException ioe) {
-                    // ignore this
-                }
-            }
-        }
-    }
-
-    /**
-     * The common superclass for all sax event handlers in Ant. Basically
-     * throws an exception in each method, so subclasses should override
-     * what they can handle.
-     *
-     * Each type of xml element (task, target, etc) in ant will
-     * have its own subclass of AbstractHandler.
-     *
-     * In the constructor, this class    takes over the handling of sax
-     * events from the parent handler, and returns
-     * control back to the parent in the endElement method.
-     */
-    private class AbstractHandler extends HandlerBase {
-        protected DocumentHandler parentHandler;
-
-        public AbstractHandler(DocumentHandler parentHandler) {
-            this.parentHandler = parentHandler;
-
-            // Start handling SAX events
-            parser.setDocumentHandler(this);
-        }
-
-        public void startElement(String tag, AttributeList attrs) throws SAXParseException {
-            throw new SAXParseException("Unexpected element \"" + tag + "\"", locator);
-        }
-
-        public void characters(char[] buf, int start, int end) throws SAXParseException {
-            String s = new String(buf, start, end).trim();
-
-            if (s.length() > 0) {
-                throw new SAXParseException("Unexpected text \"" + s + "\"", locator);
-            }
-        }
-
-        /**
-         * Called when this element and all elements nested into it have been
-         * handled.
-         */
-        protected void finished() {}
-
-        public void endElement(String name) throws SAXException {
-
-            finished();
-            // Let parent resume handling SAX events
-            parser.setDocumentHandler(parentHandler);
-        }
-    }
-
-    /**
-     * Handler for the root element. It's only child must be the "project" element.
-     */
-    private class RootHandler extends HandlerBase {
-
-        /**
-         * resolve file: URIs as relative to the build file.
-         */
-        public InputSource resolveEntity(String publicId,
-                                         String systemId) {
-
-            project.log("resolving systemId: " + systemId, Project.MSG_VERBOSE);
-
-            if (systemId.startsWith("file:")) {
-                String path = systemId.substring(5);
-                int index = path.indexOf("file:");
-
-                // we only have to handle these for backward compatibility
-                // since they are in the FAQ.
-                while (index != -1) {
-                    path = path.substring(0, index) + path.substring(index + 5);
-                    index = path.indexOf("file:");
-                }
-
-                String entitySystemId = path;
-                index = path.indexOf("%23");
-                // convert these to #
-                while (index != -1) {
-                    path = path.substring(0, index) + "#" + path.substring(index + 3);
-                    index = path.indexOf("%23");
-                }
-
-                File file = new File(path);
-                if (!file.isAbsolute()) {
-                    file = new File(buildFileParent, path);
-                }
-
-                try {
-                    InputSource inputSource = new InputSource(new FileInputStream(file));
-                    inputSource.setSystemId("file:" + entitySystemId);
-                    return inputSource;
-                } catch (FileNotFoundException fne) {
-                    project.log(file.getAbsolutePath()+" could not be found",
-                                Project.MSG_WARN);
-                }
-            }
-            // use default if not file or file not found
-            return null;
-        }
-
-        public void startElement(String tag, AttributeList attrs) throws SAXParseException {
-            if (tag.equals("project")) {
-                new ProjectHandler(this).init(tag, attrs);
-            } else {
-                throw new SAXParseException("Config file is not of expected XML type", locator);
-            }
-        }
-
-        public void setDocumentLocator(Locator locator) {
-            ProjectHelper.this.locator = locator;
-        }
-    }
-
-    /**
-     * Handler for the top level "project" element.
-     */
-    private class ProjectHandler extends AbstractHandler {
-        public ProjectHandler(DocumentHandler parentHandler) {
-            super(parentHandler);
-        }
-
-        public void init(String tag, AttributeList attrs) throws SAXParseException {
-            String def = null;
-            String name = null;
-            String id = null;
-            String baseDir = null;
-
-            for (int i = 0; i < attrs.getLength(); i++) {
-                String key = attrs.getName(i);
-                String value = attrs.getValue(i);
-
-                if (key.equals("default")) {
-                    def = value;
-                } else if (key.equals("name")) {
-                    name = value;
-                } else if (key.equals("id")) {
-                    id = value;
-                } else if (key.equals("basedir")) {
-                    baseDir = value;
-                } else {
-                    throw new SAXParseException("Unexpected attribute \"" + attrs.getName(i) + "\"", locator);
-                }
-            }
-
-            if (def == null) {
-                throw new SAXParseException("The default attribute of project is required",
-                                            locator);
-            }
-
-
-            project.setDefaultTarget(def);
-
-            if (name != null) {
-                project.setName(name);
-                project.addReference(name, project);
-            }
-
-            if (id != null) {
-              project.addReference(id, project);
-            }
-
-            if (project.getProperty("basedir") != null) {
-                project.setBasedir(project.getProperty("basedir"));
-            } else {
-                if (baseDir == null) {
-                    project.setBasedir(buildFileParent.getAbsolutePath());
-                } else {
-                    // check whether the user has specified an absolute path
-                    if ((new File(baseDir)).isAbsolute()) {
-                        project.setBasedir(baseDir);
-                    } else {
-                        project.setBaseDir(project.resolveFile(baseDir, buildFileParent));
-                    }
-                }
-            }
-
-        }
-
-        public void startElement(String name, AttributeList attrs) throws SAXParseException {
-            if (name.equals("taskdef")) {
-                handleTopTask(name, attrs);
-            } else if (name.equals("typedef")) {
-                handleTopTask(name, attrs);
-            } else if (name.equals("antlib")) {
-                handleTopTask(name, attrs);
-            } else if (name.equals("property")) {
-                handleTopTask(name, attrs);
-            } else if (name.equals("target")) {
-                handleTarget(name, attrs);
-            } else if (name.equals("description")) {
-                handleDescription(name, attrs);
-            } else if (project.isDefinedOnRole(Project.DATATYPE_ROLE, name)) {
-                handleTopTask(name, attrs);
-            } else {
-                throw new SAXParseException("Unexpected element \"" + name + "\"", locator);
-            }
-        }
-
-        private void handleTopTask(String name, AttributeList attrs)
-            throws SAXParseException {
-            InmediateTarget target = new InmediateTarget(name);
-            (new TaskHandler(this, target, null, target)).init(name, attrs);
-        }
-
-        private void handleTarget(String tag, AttributeList attrs) throws SAXParseException {
-            new TargetHandler(this).init(tag, attrs);
-        }
-
-        private void handleDescription(String tag, AttributeList attrs) throws SAXParseException {
-            new DescriptionHandler(this).init(tag, attrs);
-        }
-
-    }
-
-    /**
-     * Handler for "target" elements.
-     */
-    private class TargetHandler extends AbstractHandler {
-        private Target target;
-
-        public TargetHandler(DocumentHandler parentHandler) {
-            super(parentHandler);
-        }
-
-        public void init(String tag, AttributeList attrs) throws SAXParseException {
-            String name = null;
-            String depends = "";
-            String ifCond = null;
-            String unlessCond = null;
-            String id = null;
-            String description = null;
-
-            for (int i = 0; i < attrs.getLength(); i++) {
-                String key = attrs.getName(i);
-                String value = attrs.getValue(i);
-
-                if (key.equals("name")) {
-                    name = value;
-                } else if (key.equals("depends")) {
-                    depends = value;
-                } else if (key.equals("if")) {
-                    ifCond = value;
-                } else if (key.equals("unless")) {
-                    unlessCond = value;
-                } else if (key.equals("id")) {
-                    id = value;
-                } else if (key.equals("description")) {
-                    description = value;
-                } else {
-                    throw new SAXParseException("Unexpected attribute \"" + key + "\"", locator);
-                }
-            }
-
-            if (name == null) {
-                throw new SAXParseException("target element appears without a name attribute", locator);
-            }
-
-            target = new Target();
-            target.setName(name);
-            target.setIf(ifCond);
-            target.setUnless(unlessCond);
-            target.setDescription(description);
-            project.addTarget(name, target);
-
-            if (id != null && !id.equals("")) {
-                project.addReference(id, target);
-            }
-
-            // take care of dependencies
-
-            if (depends.length() > 0) {
-                target.setDepends(depends);
-            }
-        }
-
-        public void startElement(String name, AttributeList attrs) throws SAXParseException {
-            if (name.equals("description")) {
-                new DescriptionHandler(this).init(name, attrs);
-            }
-            else {
-                new TaskHandler(this, target, null, target).init(name, attrs);
-            }
-        }
-    }
-
-    /**
-     * Handler for all task elements.
-     */
-    private class TaskHandler extends AbstractHandler {
-        private Target target;
-        private TaskContainer container;
-        private Task task;
-        private RuntimeConfigurable parentWrapper;
-        private RuntimeConfigurable wrapper = null;
-
-        public TaskHandler(DocumentHandler parentHandler, TaskContainer container, RuntimeConfigurable parentWrapper, Target target) {
-            super(parentHandler);
-            this.container = container;
-            this.parentWrapper = parentWrapper;
-            this.target = target;
-        }
-
-        public void init(String tag, AttributeList attrs) throws SAXParseException {
-            try {
-                task = (Task)project.createInRole(container, tag);
-            } catch (BuildException e) {
-                // swallow here, will be thrown again in
-                // UnknownElement.maybeConfigure if the problem persists.
-            }
-
-            if (task == null) {
-                task = new UnknownElement(tag);
-                task.setProject(project);
-                task.setTaskType(tag);
-                task.setTaskName(tag);
-                container.addTask(task);
-            }
-
-            task.setLocation(new Location(buildFile.toString(),
-                                          locator.getLineNumber(),
-                                          locator.getColumnNumber()));
-            configureId(task, attrs);
-
-            task.setOwningTarget(target);
-            task.init();
-            wrapper = task.getRuntimeConfigurableWrapper();
-            wrapper.setAttributes(attrs);
-            if (parentWrapper != null) {
-                parentWrapper.addChild(wrapper);
-            }
-        }
-
-        protected void finished() {
-            if (container instanceof InmediateTarget) {
-                ((InmediateTarget)container).execute();
-            }
-        }
-
-        public void characters(char[] buf, int start, int end) throws SAXParseException {
-            if (wrapper == null) {
-                try {
-                    addText(project, task, buf, start, end);
-                } catch (BuildException exc) {
-                    throw new SAXParseException(exc.getMessage(), locator, exc);
-                }
-            } else {
-                wrapper.addText(buf, start, end);
-            }
-        }
-
-        public void startElement(String name, AttributeList attrs) throws SAXParseException {
-            if (task instanceof TaskContainer) {
-                // task can contain other tasks - no other nested elements possible
-                new TaskHandler(this, (TaskContainer)task, wrapper, target).init(name, attrs);
-            }
-            else {
-                new NestedElementHandler(this, task, wrapper, target).init(name, attrs);
-            }
-        }
-    }
-
-    /**
-     * Handler for all nested properties.
-     */
-    private class NestedElementHandler extends AbstractHandler {
-        private Object parent;
-        private Object child;
-        private RuntimeConfigurable parentWrapper;
-        private RuntimeConfigurable childWrapper = null;
-        private Target target;
-
-        public NestedElementHandler(DocumentHandler parentHandler,
-                                    Object parent,
-                                    RuntimeConfigurable parentWrapper,
-                                    Target target) {
-            super(parentHandler);
-
-            if (parent instanceof RoleAdapter) {
-                this.parent = ((RoleAdapter) parent).getProxy();
-            } else {
-                this.parent = parent;
-            }
-            this.parentWrapper = parentWrapper;
-            this.target = target;
-        }
-
-        public void init(String propType, AttributeList attrs) throws SAXParseException {
-            Class parentClass = parent.getClass();
-            IntrospectionHelper ih =
-                IntrospectionHelper.getHelper(parentClass);
-
-            try {
-                String elementName = propType.toLowerCase(Locale.US);
-                if (parent instanceof UnknownElement) {
-                    UnknownElement uc = new UnknownElement(elementName);
-                    uc.setProject(project);
-                    ((UnknownElement) parent).addChild(uc);
-                    // Set this parameters just in case is a Task
-                    uc.setTaskType(elementName);
-                    uc.setTaskName(elementName);
-                    child = uc;
-                } else {
-                    child = ih.createElement(project, parent, elementName);
-                }
-
-                configureId(child, attrs);
-
-                if (parentWrapper != null) {
-                    childWrapper = new RuntimeConfigurable(child, propType);
-                    childWrapper.setAttributes(attrs);
-                    parentWrapper.addChild(childWrapper);
-                } else {
-                    configure(child, attrs, project);
-                    ih.storeElement(project, parent, child, elementName);
-                }
-            } catch (BuildException exc) {
-                throw new SAXParseException(exc.getMessage(), locator, exc);
-            }
-        }
-
-        public void characters(char[] buf, int start, int end) throws SAXParseException {
-            if (parentWrapper == null) {
-                try {
-                    addText(project, child, buf, start, end);
-                } catch (BuildException exc) {
-                    throw new SAXParseException(exc.getMessage(), locator, exc);
-                }
-            } else {
-                childWrapper.addText(buf, start, end);
-            }
-        }
-
-        public void startElement(String name, AttributeList attrs) throws SAXParseException {
-            if (child instanceof TaskContainer) {
-                // taskcontainer nested element can contain other tasks - no other
-                // nested elements possible
-                new TaskHandler(this, (TaskContainer)child, childWrapper, target).init(name, attrs);
-            }
-            else {
-                new NestedElementHandler(this, child, childWrapper, target).init(name, attrs);
-            }
-        }
-    }
-
-    /**
-     * Handler to perform appropriate semantics for the special
-     * <description> element on tasks.
-     */
-    private class DescriptionHandler extends AbstractHandler {
-
-        public DescriptionHandler(DocumentHandler parent) {
-            super(parent);
-        }
-
-        public void init(String tag, AttributeList attrs) throws SAXParseException {
-            if (attrs.getLength() > 0) {
-                throw new SAXParseException("No attributes allowed on " + tag, locator);
-            }
-        }
-
-        public void characters(char[] buf, int start, int end) throws SAXParseException {
-            String desc = project.getDescription();
-            if (desc == null) {
-                desc = "";
-            }
-            project.setDescription(desc + new String(buf, start, end));
-        }
-    }
-
-    /**
-     * Special target type for top level Tasks and Datatypes.
-     * This will allow eliminating special cases.
-     */
-    private class InmediateTarget extends Target {
-        /**
-         * Create a target for a top level task or datatype.
-         * @param name the name of the task to be run on this target.
-         */
-        InmediateTarget(String name) {
-            super();
-            setProject(project);
-            setName("Top level " + name);
-        }
-    }
-
-    public static void configure(Object target, AttributeList attrs,
-                                 Project project) throws BuildException {
-        if( target instanceof RoleAdapter ) {
-            target=((RoleAdapter)target).getProxy();
-        }
-
-        IntrospectionHelper ih =
-            IntrospectionHelper.getHelper(target.getClass());
-
-        project.addBuildListener(ih);
-
-        for (int i = 0; i < attrs.getLength(); i++) {
-            // reflect these into the target
-            String value=replaceProperties(project, attrs.getValue(i),
-                                           project.getProperties() );
-            try {
-                ih.setAttribute(project, target,
-                                attrs.getName(i).toLowerCase(Locale.US), value);
-
-            } catch (BuildException be) {
-                // id attribute must be set externally
-                if (!attrs.getName(i).equals("id")) {
-                    throw be;
-                }
-            }
-        }
-    }
-
-    /**
-     * Adds the content of #PCDATA sections to an element.
-     */
-    public static void addText(Project project, Object target, char[] buf, int start, int end)
-        throws BuildException {
-        addText(project, target, new String(buf, start, end));
-    }
-
-    /**
-     * Adds the content of #PCDATA sections to an element.
-     */
-    public static void addText(Project project, Object target, String text)
-        throws BuildException {
-
-        if (text == null ) {
-            return;
-        }
-
-        if(target instanceof RoleAdapter) {
-            target = ((RoleAdapter) target).getProxy();
-        }
-
-        IntrospectionHelper.getHelper(target.getClass()).addText(project, target, text);
-    }
-
-    /**
-     * Stores a configured child element into its parent object
-     */
-    public static void storeChild(Project project, Object parent, Object child, String tag) {
-        IntrospectionHelper ih = IntrospectionHelper.getHelper(parent.getClass());
-        ih.storeElement(project, parent, child, tag);
-    }
-
-    /**
-     * Replace ${} style constructions in the given value with the string value of
-     * the corresponding data types.
-     *
-     * @param value the string to be scanned for property references.
-     * @since 1.5
-     */
-     public static String replaceProperties(Project project, String value)
-            throws BuildException {
-         return project.replaceProperties(value);
-     }
-
-    /**
-     * Replace ${} style constructions in the given value with the string value of
-     * the corresponding data types.
-     *
-     * @param value the string to be scanned for property references.
-     */
-     public static String replaceProperties(Project project, String value, Hashtable keys)
-            throws BuildException {
-        if (value == null) {
-            return null;
-        }
-
-        Vector fragments = new Vector();
-        Vector propertyRefs = new Vector();
-        parsePropertyString(value, fragments, propertyRefs);
-
-        StringBuffer sb = new StringBuffer();
-        Enumeration i = fragments.elements();
-        Enumeration j = propertyRefs.elements();
-        while (i.hasMoreElements()) {
-            String fragment = (String)i.nextElement();
-            if (fragment == null) {
-                String propertyName = (String)j.nextElement();
-                if (!keys.containsKey(propertyName)) {
-                    project.log("Property ${" + propertyName + "} has not been set", Project.MSG_VERBOSE);
-                }
-                fragment = (keys.containsKey(propertyName)) ? (String) keys.get(propertyName)
-                                                            : "${" + propertyName + "}";
-            }
-            sb.append(fragment);
-        }
-
-        return sb.toString();
-    }
-
-    /**
-     * This method will parse a string containing ${value} style
-     * property values into two lists. The first list is a collection
-     * of text fragments, while the other is a set of string property names
-     * null entries in the first list indicate a property reference from the
-     * second list.
-     */
-    public static void parsePropertyString(String value, Vector fragments, Vector propertyRefs)
-        throws BuildException {
-        int prev = 0;
-        int pos;
-        while ((pos = value.indexOf("$", prev)) >= 0) {
-            if (pos > 0) {
-                fragments.addElement(value.substring(prev, pos));
-            }
-
-            if( pos == (value.length() - 1)) {
-                fragments.addElement("$");
-                prev = pos + 1;
-            }
-            else if (value.charAt(pos + 1) != '{' ) {
-                fragments.addElement(value.substring(pos + 1, pos + 2));
-                prev = pos + 2;
-            } else {
-                int endName = value.indexOf('}', pos);
-                if (endName < 0) {
-                    throw new BuildException("Syntax error in property: "
-                                                 + value );
-                }
-                String propertyName = value.substring(pos + 2, endName);
-                fragments.addElement(null);
-                propertyRefs.addElement(propertyName);
-                prev = endName + 1;
-            }
-        }
-
-        if (prev < value.length()) {
-            fragments.addElement(value.substring(prev));
-        }
-    }
-
-    private static SAXParserFactory getParserFactory() {
-        if (parserFactory == null) {
-            parserFactory = SAXParserFactory.newInstance();
-        }
-
-        return parserFactory;
-    }
-
-    /**
-     * Scan AttributeList for the id attribute and maybe add a
-     * reference to project.
-     *
-     * <p>Moved out of {@link #configure configure} to make it happen
-     * at parser time.</p>
-     */
-    private void configureId(Object target, AttributeList attr) {
-        String id = attr.getValue("id");
-        if (id != null) {
-            if( target instanceof RoleAdapter ) {
-                ((RoleAdapter)target).setId(id);
-            }
-            project.addReference(id, target);
-        }
-    }
-
-}
diff --git a/proposal/sandbox/antlib/src/main/org/apache/tools/ant/RoleAdapter.java b/proposal/sandbox/antlib/src/main/org/apache/tools/ant/RoleAdapter.java
deleted file mode 100644
index 57c1f62..0000000
--- a/proposal/sandbox/antlib/src/main/org/apache/tools/ant/RoleAdapter.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- *  The Apache Software License, Version 1.1
- *
- *  Copyright (c) 1999 The Apache Software Foundation.  All rights
- *  reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions
- *  are met:
- *
- *  1. Redistributions of source code must retain the above copyright
- *  notice, this list of conditions and the following disclaimer.
- *
- *  2. Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in
- *  the documentation and/or other materials provided with the
- *  distribution.
- *
- *  3. The end-user documentation included with the redistribution, if
- *  any, must include the following acknowlegement:
- *  "This product includes software developed by the
- *  Apache Software Foundation (http://www.apache.org/)."
- *  Alternately, this acknowlegement may appear in the software itself,
- *  if and wherever such third-party acknowlegements normally appear.
- *
- *  4. The names "The Jakarta Project", "Ant", and "Apache Software
- *  Foundation" must not be used to endorse or promote products derived
- *  from this software without prior written permission. For written
- *  permission, please contact apache@apache.org.
- *
- *  5. Products derived from this software may not be called "Apache"
- *  nor may "Apache" appear in their names without prior written
- *  permission of the Apache Group.
- *
- *  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- *  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- *  OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- *  DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- *  ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- *  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- *  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- *  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- *  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- *  SUCH DAMAGE.
- *  ====================================================================
- *
- *  This software consists of voluntary contributions made by many
- *  individuals on behalf of the Apache Software Foundation.  For more
- *  information on the Apache Software Foundation, please see
- *  <http://www.apache.org/>.
- */
-package org.apache.tools.ant;
-
-public interface RoleAdapter {
-
-    /**
-     * Obtain the id in case it is needed.
-     */
-    public void setId(String id);
-
-    /**
-     * Set the object being adapted.
-     * @param o the object being adapted
-     */
-    public void setProxy(Object o);
-    
-    /**
-     * Get the object adapted by this class.
-     * @return the object being adapted, if any.
-     */
-    public Object getProxy();
-}
diff --git a/proposal/sandbox/antlib/src/main/org/apache/tools/ant/SymbolTable.java b/proposal/sandbox/antlib/src/main/org/apache/tools/ant/SymbolTable.java
deleted file mode 100644
index ecbb098..0000000
--- a/proposal/sandbox/antlib/src/main/org/apache/tools/ant/SymbolTable.java
+++ /dev/null
@@ -1,561 +0,0 @@
-/*
- *  The Apache Software License, Version 1.1
- *
- *  Copyright (c) 1999 The Apache Software Foundation.  All rights
- *  reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions
- *  are met:
- *
- *  1. Redistributions of source code must retain the above copyright
- *  notice, this list of conditions and the following disclaimer.
- *
- *  2. Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in
- *  the documentation and/or other materials provided with the
- *  distribution.
- *
- *  3. The end-user documentation included with the redistribution, if
- *  any, must include the following acknowlegement:
- *  "This product includes software developed by the
- *  Apache Software Foundation (http://www.apache.org/)."
- *  Alternately, this acknowlegement may appear in the software itself,
- *  if and wherever such third-party acknowlegements normally appear.
- *
- *  4. The names "The Jakarta Project", "Ant", and "Apache Software
- *  Foundation" must not be used to endorse or promote products derived
- *  from this software without prior written permission. For written
- *  permission, please contact apache@apache.org.
- *
- *  5. Products derived from this software may not be called "Apache"
- *  nor may "Apache" appear in their names without prior written
- *  permission of the Apache Group.
- *
- *  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- *  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- *  OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- *  DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- *  ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- *  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- *  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- *  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- *  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- *  SUCH DAMAGE.
- *  ====================================================================
- *
- *  This software consists of voluntary contributions made by many
- *  individuals on behalf of the Apache Software Foundation.  For more
- *  information on the Apache Software Foundation, please see
- *  <http://www.apache.org/>.
- */
-package org.apache.tools.ant;
-
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-import java.util.*;
-
-import org.apache.tools.ant.types.Path;
-
-public class SymbolTable {
-
-    /** Parent symbol table */
-    private SymbolTable parentTable;
-
-    /** Project associated with this symbol table */
-    private Project project;
-
-    /** The table of roles available to this Project */
-    private Hashtable roles = new Hashtable();
-
-    /** The table of loaders active on this Project */
-    private Hashtable loaders = new Hashtable();
-
-    /**
-     * Table of per role definitions.
-     */
-    private Hashtable defs = new Hashtable();
-
-    /**
-     * Parameters for checking adapters.
-     */
-    private static final Class[] CHECK_ADAPTER_PARAMS =
-        new Class[]{Class.class, Project.class};
-
-    /**
-     * Create a top level Symbol table.
-     */
-    public SymbolTable() {
-    }
-
-    /**
-     * Create a symbol table inheriting the definitions
-     * from that defined in the calling Project.
-     * @param p the calling project
-     */
-    public SymbolTable(SymbolTable st) {
-        parentTable = st;
-    }
-
-    /**
-     * Set the project associated with this symbol table.
-     * @param p the project for this symbol table
-     */
-    public void setProject(Project p) {
-        this.project = p;
-    }
-
-    /**
-     * Get the specified loader for the project.
-     * @param name the name of the loader
-     * @return the corresponding ANT classloader
-     */
-    private AntClassLoader getLoader(String name) {
-        AntClassLoader cl = (AntClassLoader) loaders.get(name);
-        if (cl == null && parentTable != null) {
-            return parentTable.getLoader(name);
-        }
-        return cl;
-    }
-
-    /**
-     * Add the specified class-path to a loader.
-     * If the loader is defined in an ancestor project then a new
-     * classloader inheritin from the one already existing
-     * will be created, otherwise the path willbe added to the existing
-     * ClassLoader.
-     * @param name the name of the loader to use.
-     * @param clspath the path to be added to the classloader
-     */
-    public ClassLoader addToLoader(String name, Path clspath) {
-        // Find if the loader is already defined in the current project
-        AntClassLoader cl = (AntClassLoader) loaders.get(name);
-        if (cl == null) {
-            // Is it inherited from the calling project
-            if (parentTable != null) {
-                cl = parentTable.getLoader(name);
-            }
-            cl = new AntClassLoader(cl, project, clspath, true);
-            loaders.put(name, cl);
-        }
-        else {
-            // Add additional path to the existing definition
-            String[] pathElements = clspath.list();
-            for (int i = 0; i < pathElements.length; ++i) {
-                try {
-                    cl.addPathElement(pathElements[i]);
-                }
-                catch (BuildException e) {
-                    // ignore path elements invalid relative to the project
-                }
-            }
-        }
-        return cl;
-    }
-
-    /**
-     * Find all the roles supported by a Class
-     * on this symbol table.
-     * @param clz the class to analyze
-     * @return an array of roles supported by the class
-     */
-    public String[] findRoles(final Class clz) {
-        Vector list = new Vector();
-        findRoles(clz, list);
-        return (String[])list.toArray(new String[list.size()]);
-    }
-
-    /**
-     * Collect the roles for the class
-     * @param clz the class being inspected
-     * @param list the roles collected up to this point
-     */
-    private void findRoles(final Class clz, Vector list) {
-        for (Enumeration e = roles.keys(); e.hasMoreElements();) {
-            String role = (String) e.nextElement();
-
-            if (((Role) roles.get(role)).isImplementedBy(clz)) {
-                list.addElement(role);
-            }
-        }
-        if (parentTable != null) parentTable.findRoles(clz, list);
-    }
-
-    /**
-     * Get the Role definition
-     * @param role the name of the role
-     * @return the Role description
-     */
-    public Role getRole(String role) {
-        Role r = (Role) roles.get(role);
-        if (r == null && parentTable != null) {
-            return parentTable.getRole(role);
-        }
-        return r;
-    }
-
-    /**
-     * Add a new role definition to this project.
-     * @param role the name of the role
-     * @param rclz the interface used to specify support for the role.
-     * @param aclz the optional adapter class
-     * @return whether the role replaced a different definition
-     */
-    public boolean addRole(String role, Class rclz, Class aclz) {
-        // Check if role already declared
-        Role old = getRole(role);
-        if (old != null && old.isSameAsFor(rclz, aclz)) {
-            project.log("Ignoring override for role " + role
-                        + ", it is already defined by the same definition.",
-                        project.MSG_VERBOSE);
-            return false;
-        }
-        // Role interfaces should only contain one method
-        roles.put(role, new Role(rclz, aclz));
-        return (old != null);
-    }
-
-    /**
-     * Add a new type of element to a role.
-     * @param role the role for this Class.
-     * @param name the name of the element for this Class
-     * @param clz the Class being declared
-     * @return the old definition
-     */
-    public Class add(String role, String name, Class clz) {
-        // Find the role definition
-        Role r = getRole(role);
-        if (r == null) {
-            throw new BuildException("Unknown role: " + role);
-        }
-        // Check if it is already defined
-        Factory old = get(role, name);
-        if (old != null) {
-            if (old.getOriginalClass().equals(clz)) {
-                project.log("Ignoring override for "+ role + " " + name
-                            + ", it is already defined by the same class.",
-                            project.MSG_VERBOSE);
-                return old.getOriginalClass();
-            }
-            else {
-                project.log("Trying to override old definition of " +
-                            role + " " + name,
-                            project.MSG_WARN);
-            }
-        }
-        Factory f = checkClass(clz);
-        // Check that the Class is compatible with the role definition
-        f = r.verifyAdaptability(role, f);
-        // Record the new type
-        Hashtable defTable = (Hashtable)defs.get(role);
-        if (defTable == null) {
-            defTable = new Hashtable();
-            defs.put(role, defTable);
-        }
-        defTable.put(name, f);
-
-        String msg =
-            " +User " + role + ": " + name + "     " + clz.getName();
-        project.log(msg, project.MSG_DEBUG);
-        return (old != null ? old.getOriginalClass() : null);
-    }
-
-    /**
-     * Checks a class, whether it is suitable for serving in ANT.
-     * @return the factory to use when instantiating the class
-     * @throws BuildException and logs as Project.MSG_ERR for
-     * conditions, that will cause execution to fail.
-     */
-    Factory checkClass(final Class clz) // Package on purpose
-        throws BuildException {
-        if (clz == null) return null;
-
-        if(!Modifier.isPublic(clz.getModifiers())) {
-            final String message = clz + " is not public";
-            project.log(message, Project.MSG_ERR);
-            throw new BuildException(message);
-        }
-        if(Modifier.isAbstract(clz.getModifiers())) {
-            final String message = clz + " is abstract";
-            project.log(message, Project.MSG_ERR);
-            throw new BuildException(message);
-        }
-        try {
-            // Class can have a "no arg" constructor or take a single
-            // Project argument.
-            // don't have to check for public, since
-            // getConstructor finds public constructors only.
-            try {
-                clz.getConstructor(new Class[0]);
-                return new Factory(){
-                        public Object create(Project p) {
-                            try {
-                                return clz.newInstance();
-                            }
-                            catch(Exception e) {
-                                throw new BuildException(e);
-                            }
-                        }
-
-                        public Class getOriginalClass() {
-                            return clz;
-                        }
-                    };
-            } catch (NoSuchMethodException nse) {
-                final Constructor c =
-                    clz.getConstructor(new Class[] {Project.class});
-                return new Factory(){
-                        public Object create(Project p) {
-                            try {
-                                return c.newInstance(new Object[]{p});
-                            }
-                            catch(Exception e) {
-                                throw new BuildException(e);
-                            }
-                        }
-
-                        public Class getOriginalClass() {
-                            return clz;
-                        }
-                    };
-            }
-        } catch(NoSuchMethodException e) {
-            final String message = "No valid public constructor in " + clz;
-            project.log(message, Project.MSG_ERR);
-            throw new BuildException(message);
-        }
-        catch (NoClassDefFoundError ncdfe) {
-            final String msg = "Class cannot be loaded: " + ncdfe.getMessage();
-            throw new BuildException(msg, ncdfe);
-        }
-    }
-
-    /**
-     * Get the class in the role identified with the element name.
-     * @param role the role to look into.
-     * @param name the name of the element to sea
-     * @return the Class implementation
-     */
-    public Factory get(String role, String name) {
-        Hashtable defTable = (Hashtable)defs.get(role);
-        if (defTable != null) {
-            Factory f = (Factory)defTable.get(name);
-            if (f != null) return f;
-        }
-        if (parentTable != null) {
-            return parentTable.get(role, name);
-        }
-        return null;
-    }
-
-    /**
-     * Get a Hashtable that is usable for manipulating elements on Role.
-     * @param role the role of the elements in the table
-     * @return a Hashtable that delegates to the Symbol table.
-     */
-    Hashtable getDefinitions(String role) { // package scope on purpose
-        return new SymbolHashtable(role);
-    }
-
-    /**
-     * Hashtable implementation that delegates
-     * the search operations to the Symbol table
-     */
-    private class SymbolHashtable extends Hashtable {
-        final String role;
-        SymbolHashtable(String role) {
-            this.role = role;
-        }
-
-        public synchronized Object put(Object key, Object value) {
-            return SymbolTable.this.add(role, (String) key, (Class) value);
-        }
-
-        public synchronized Object get(Object key) {
-            Factory f = SymbolTable.this.get(role, (String)key);
-            return (f == null? null : f.getOriginalClass());
-        }
-    }
-
-    /**
-     * Factory for creating ANT objects.
-     * Class objects are not instanciated directly but through a Factory
-     * which is able to resolve issues such as proxys and such.
-     */
-    public static interface Factory {
-        /**
-         * Creates an object for the Role
-         * @param the project in which it is created
-         * @return the instantiated object with a proxy if necessary
-         */
-        public Object create(Project p);
-
-        /**
-         * Creates an object for the Role, adapted if necessary
-         * for a particular interface.
-         */
-//  	public Object adaptFor(Class clz, Project p, Object o);
-
-        /**
-         * The original class of the object without proxy.
-         */
-        public Class getOriginalClass();
-    }
-
-    /**
-     * The definition of a role
-     */
-    public class Role {
-        private Method interfaceMethod;
-        private Method adapterVerifier;
-        private Factory adapterFactory;
-
-        /**
-         * Creates a new Role object
-         * @param roleClz the class that defines the role
-         * @param adapterClz the class for the adapter, or null if none
-         */
-        Role(Class roleClz, Class adapterClz) {
-            interfaceMethod = validInterface(roleClz);
-            adapterFactory = checkClass(adapterClz);
-            adapterVerifier = validAdapter(adapterClz, interfaceMethod);
-        }
-
-        /**
-         * Get the method used to set on interface
-         */
-        public Method getInterfaceMethod() {
-            return interfaceMethod;
-        }
-
-        /**
-         * Instantiate a new adapter for this role.
-         */
-        public RoleAdapter createAdapter(Project p) {
-            if (adapterFactory == null) return null;
-
-            try {
-                return (RoleAdapter) adapterFactory.create(p);
-            }
-            catch(BuildException be) {
-                throw be;
-            }
-            catch(Exception e) {
-                throw new BuildException(e);
-            }
-        }
-
-        /**
-         * Verify if the class can be adapted to use by the role
-         * @param role the name of the role to verify
-         * @param f the factory for the class to verify
-         */
-        public Factory verifyAdaptability(String role, final Factory f) {
-            final Class clz = f.getOriginalClass();
-            if (interfaceMethod.getParameterTypes()[0].isAssignableFrom(clz)) {
-                return f;
-            }
-            if (adapterVerifier == null) {
-                String msg = "Class " + clz.getName() +
-                    " incompatible with role: " + role;
-                throw new BuildException(msg);
-            }
-            try {
-                try {
-                    adapterVerifier.invoke(null, new Object[]{clz, project});
-                    return new Factory(){
-                            public Object create(Project p) {
-                                RoleAdapter ra = createAdapter(p);
-                                ra.setProxy(f.create(p));
-                                return ra;
-                            }
-
-                            public Class getOriginalClass() {
-                                return clz;
-                            }
-                        };
-                }
-                catch (InvocationTargetException ite) {
-                    throw ite.getTargetException();
-                }
-            }
-            catch(BuildException be) { throw be; }
-            catch(Error err) {throw err; }
-            catch(Throwable t) {
-                throw new BuildException(t);
-            }
-        }
-
-        public boolean isSameAsFor(Class clz, Class pclz) {
-            return interfaceMethod.getDeclaringClass().equals(clz) &&
-                ((adapterVerifier == null && pclz == null) ||
-                 adapterVerifier.getDeclaringClass().equals(pclz));
-        }
-
-        public boolean isImplementedBy(Class clz) {
-            return interfaceMethod.getDeclaringClass().isAssignableFrom(clz);
-        }
-
-        /**
-         * Verify if the interface is valid.
-         * @param clz the interface to validate
-         * @return the method defined by the interface
-         */
-        private Method validInterface(Class clz) {
-            Method m[] = clz.getDeclaredMethods();
-            if (m.length == 1
-                && java.lang.Void.TYPE.equals(m[0].getReturnType())) {
-                Class args[] = m[0].getParameterTypes();
-                if (args.length == 1
-                    && !java.lang.String.class.equals(args[0])
-                    && !args[0].isArray()
-                    && !args[0].isPrimitive()) {
-                    return m[0];
-                }
-                else {
-                    throw new BuildException("Invalid role interface method in: "
-                                             + clz.getName());
-                }
-            }
-            else {
-                throw new BuildException("More than one method on role interface");
-            }
-        }
-
-        /**
-         * Verify if the adapter is valid with respect to the interface.
-         * @param clz the class adapter to validate
-         * @param mtd the method whose only argument must match
-         * @return the static method to use for validating adaptees
-         */
-        private Method validAdapter(Class clz, Method mtd) {
-            if (clz == null) return null;
-
-            if (!mtd.getParameterTypes()[0].isAssignableFrom(clz)) {
-                String msg = "Adapter " + clz.getName() +
-                    " is incompatible with role interface " +
-                    mtd.getDeclaringClass().getName();
-                throw new BuildException(msg);
-            }
-            String msg = "Class " + clz.getName() + " is not an adapter: ";
-            if (!RoleAdapter.class.isAssignableFrom(clz)) {
-                throw new BuildException(msg + "does not implement RoleAdapter");
-            }
-            try {
-                Method chk = clz.getMethod("checkClass", CHECK_ADAPTER_PARAMS);
-                if (!Modifier.isStatic(chk.getModifiers())) {
-                    throw new BuildException(msg + "checkClass() is not static");
-                }
-                return chk;
-            }
-            catch(NoSuchMethodException nme){
-                throw new BuildException(msg + "checkClass() not found", nme);
-            }
-        }
-
-    }
-}
diff --git a/proposal/sandbox/antlib/src/main/org/apache/tools/ant/TaskAdapter.java b/proposal/sandbox/antlib/src/main/org/apache/tools/ant/TaskAdapter.java
deleted file mode 100644
index 077131c..0000000
--- a/proposal/sandbox/antlib/src/main/org/apache/tools/ant/TaskAdapter.java
+++ /dev/null
@@ -1,176 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant;
-
-import java.lang.reflect.Method;
-import java.lang.reflect.InvocationTargetException;
-
-
-
-/**
- *  Use introspection to "adapt" an arbitrary Bean ( not extending Task, but with similar
- *  patterns).
- *
- * @author costin@dnt.ro
- * @author j_a_fernandez@yahoo.com
- */
-public class TaskAdapter extends Task implements RoleAdapter {
-
-    Object proxy;
-
-    /**
-     * Checks a class, whether it is suitable to be adapted by TaskAdapter.
-     *
-     * Checks conditions only, which are additionally required for a tasks
-     * adapted by TaskAdapter. Thus, this method should be called by
-     * {@link Project#checkTaskClass}.
-     *
-     * Throws a BuildException and logs as Project.MSG_ERR for
-     * conditions, that will cause the task execution to fail.
-     * Logs other suspicious conditions with Project.MSG_WARN.
-     */
-    public static void checkTaskClass(final Class taskClass, final Project project) {
-        // This code is for backward compatibility
-        checkClass(taskClass, project);
-    }
-
-    /**
-     * Checks a class, whether it is suitable to be adapted.
-     *
-     * Checks conditions only, which are additionally required for a tasks
-     * adapted by TaskAdapter.
-     *
-     * Throws a BuildException and logs as Project.MSG_ERR for
-     * conditions, that will cause the task execution to fail.
-     * Logs other suspicious conditions with Project.MSG_WARN.
-     */
-    public static void checkClass(final Class taskClass, final Project project) {
-        // don't have to check for interface, since then
-        // taskClass would be abstract too.
-        try {
-            final Method executeM = taskClass.getMethod( "execute", null );
-            // don't have to check for public, since
-            // getMethod finds public method only.
-            // don't have to check for abstract, since then
-            // taskClass would be abstract too.
-            if(!Void.TYPE.equals(executeM.getReturnType())) {
-                final String message = "return type of execute() should be void but was \""+executeM.getReturnType()+"\" in " + taskClass;
-                project.log(message, Project.MSG_WARN);
-            }
-        } catch(NoSuchMethodException e) {
-            final String message = "No public execute() in " + taskClass;
-            project.log(message, Project.MSG_ERR);
-            throw new BuildException(message);
-        }
-    }
-
-    /**
-     * Do the execution.
-     */
-    public void execute() throws BuildException {
-        Method setProjectM = null;
-        try {
-            Class c = proxy.getClass();
-            setProjectM =
-                c.getMethod( "setProject", new Class[] {Project.class});
-            if(setProjectM != null) {
-                setProjectM.invoke(proxy, new Object[] {project});
-            }
-        } catch (NoSuchMethodException e) {
-            // ignore this if the class being used as a task does not have
-            // a set project method.
-        } catch( Exception ex ) {
-            log("Error setting project in " + proxy.getClass(),
-                Project.MSG_ERR);
-            throw new BuildException( ex );
-        }
-
-
-        Method executeM=null;
-        try {
-            Class c=proxy.getClass();
-            executeM=c.getMethod( "execute", new Class[0] );
-            if( executeM == null ) {
-                log("No public execute() in " + proxy.getClass(), Project.MSG_ERR);
-                throw new BuildException("No public execute() in " + proxy.getClass());
-            }
-            executeM.invoke(proxy, null);
-            return;
-        } catch( InvocationTargetException ite ) {
-            Throwable t = ite.getTargetException();
-            if (t instanceof BuildException) {
-                throw (BuildException) t;
-            }
-            throw new BuildException(t);
-        } catch( Exception ex ) {
-            log("Error in " + proxy.getClass(), Project.MSG_ERR);
-            throw new BuildException( ex );
-        }
-
-    }
-
-    /**
-     * Set the target object class
-     */
-    public void setProxy(Object o) {
-        this.proxy = o;
-    }
-
-    public Object getProxy() {
-        return this.proxy ;
-    }
-
-    public void setId(String id) {}
-}
diff --git a/proposal/sandbox/antlib/src/main/org/apache/tools/ant/antlib.xml b/proposal/sandbox/antlib/src/main/org/apache/tools/ant/antlib.xml
deleted file mode 100644
index 6a2f0a7..0000000
--- a/proposal/sandbox/antlib/src/main/org/apache/tools/ant/antlib.xml
+++ /dev/null
@@ -1,137 +0,0 @@
-<?xml version='1.0' ?>
-<!--
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
--->
-<antlib version="1.5" >
-  <task name="mkdir" class="org.apache.tools.ant.taskdefs.Mkdir"/>
-  <task name="javac" class="org.apache.tools.ant.taskdefs.Javac"/>
-  <task name="chmod" class="org.apache.tools.ant.taskdefs.Chmod"/>
-  <task name="delete" class="org.apache.tools.ant.taskdefs.Delete"/>
-  <task name="copy" class="org.apache.tools.ant.taskdefs.Copy"/>
-  <task name="move" class="org.apache.tools.ant.taskdefs.Move"/>
-  <task name="jar" class="org.apache.tools.ant.taskdefs.Jar"/>
-  <task name="rmic" class="org.apache.tools.ant.taskdefs.Rmic"/>
-  <task name="cvs" class="org.apache.tools.ant.taskdefs.Cvs"/>
-  <task name="unzip" class="org.apache.tools.ant.taskdefs.Expand"/>
-  <task name="unjar" class="org.apache.tools.ant.taskdefs.Expand"/>
-  <task name="unwar" class="org.apache.tools.ant.taskdefs.Expand"/>
-  <task name="echo" class="org.apache.tools.ant.taskdefs.Echo"/>
-  <task name="javadoc" class="org.apache.tools.ant.taskdefs.Javadoc"/>
-  <task name="zip" class="org.apache.tools.ant.taskdefs.Zip"/>
-  <task name="gzip" class="org.apache.tools.ant.taskdefs.GZip"/>
-  <task name="gunzip" class="org.apache.tools.ant.taskdefs.GUnzip"/>
-  <task name="replace" class="org.apache.tools.ant.taskdefs.Replace"/>
-  <task name="java" class="org.apache.tools.ant.taskdefs.Java"/>
-  <task name="tstamp" class="org.apache.tools.ant.taskdefs.Tstamp"/>
-  <task name="property" class="org.apache.tools.ant.taskdefs.Property"/>
-  <task name="taskdef" class="org.apache.tools.ant.taskdefs.Taskdef"/>
-  <task name="ant" class="org.apache.tools.ant.taskdefs.Ant"/>
-  <task name="exec" class="org.apache.tools.ant.taskdefs.ExecTask"/>
-  <task name="tar" class="org.apache.tools.ant.taskdefs.Tar"/>
-  <task name="untar" class="org.apache.tools.ant.taskdefs.Untar"/>
-  <task name="available" class="org.apache.tools.ant.taskdefs.Available"/>
-  <task name="filter" class="org.apache.tools.ant.taskdefs.Filter"/>
-  <task name="fixcrlf" class="org.apache.tools.ant.taskdefs.FixCRLF"/>
-  <task name="patch" class="org.apache.tools.ant.taskdefs.Patch"/>
-  <task name="style" class="org.apache.tools.ant.taskdefs.XSLTProcess"/>
-  <task name="touch" class="org.apache.tools.ant.taskdefs.Touch"/>
-  <task name="signjar" class="org.apache.tools.ant.taskdefs.SignJar"/>
-  <task name="genkey" class="org.apache.tools.ant.taskdefs.GenerateKey"/>
-  <task name="antstructure" class="org.apache.tools.ant.taskdefs.AntStructure"/>
-  <task name="execon" class="org.apache.tools.ant.taskdefs.ExecuteOn"/>
-  <task name="antcall" class="org.apache.tools.ant.taskdefs.CallTarget"/>
-  <task name="sql" class="org.apache.tools.ant.taskdefs.SQLExec"/>
-  <task name="mail" class="org.apache.tools.ant.taskdefs.email.EmailTask"/>
-  <task name="fail" class="org.apache.tools.ant.taskdefs.Exit"/>
-  <task name="war" class="org.apache.tools.ant.taskdefs.War"/>
-  <task name="uptodate" class="org.apache.tools.ant.taskdefs.UpToDate"/>
-  <task name="apply" class="org.apache.tools.ant.taskdefs.Transform"/>
-  <task name="record" class="org.apache.tools.ant.taskdefs.Recorder"/>
-  <task name="cvspass" class="org.apache.tools.ant.taskdefs.CVSPass"/>
-  <task name="typedef" class="org.apache.tools.ant.taskdefs.Typedef"/>
-  <task name="sleep" class="org.apache.tools.ant.taskdefs.Sleep"/>
-  <task name="pathconvert" class="org.apache.tools.ant.taskdefs.PathConvert"/>
-  <task name="ear" class="org.apache.tools.ant.taskdefs.Ear"/>
-  <task name="parallel" class="org.apache.tools.ant.taskdefs.Parallel"/>
-  <task name="sequential" class="org.apache.tools.ant.taskdefs.Sequential"/>
-  <task name="condition" class="org.apache.tools.ant.taskdefs.ConditionTask"/>
-  <task name="dependset" class="org.apache.tools.ant.taskdefs.DependSet"/>
-  <task name="bzip2" class="org.apache.tools.ant.taskdefs.BZip2"/>
-  <task name="bunzip2" class="org.apache.tools.ant.taskdefs.BUnzip2"/>
-  <task name="checksum" class="org.apache.tools.ant.taskdefs.Checksum"/>
-  <task name="waitfor" class="org.apache.tools.ant.taskdefs.WaitFor"/>
-  <task name="input" class="org.apache.tools.ant.taskdefs.Input"/>
-  <task name="loadfile" class="org.apache.tools.ant.taskdefs.LoadFile"/>
-  <task name="manifest" class="org.apache.tools.ant.taskdefs.Manifest"/>
-  <task name="antjar" class="org.apache.tools.ant.taskdefs.Antjar"/>
-  <task name="antlib" class="org.apache.tools.ant.taskdefs.Antlib"/>
-
-  <data-type name="path" class="org.apache.tools.ant.types.Path"/>
-  <data-type name="fileset" class="org.apache.tools.ant.types.FileSet"/>
-  <data-type name="filelist" class="org.apache.tools.ant.types.FileList"/>
-  <data-type name="patternset" class="org.apache.tools.ant.types.PatternSet"/>
-  <data-type name="mapper" class="org.apache.tools.ant.types.Mapper"/>
-  <data-type name="filterset" class="org.apache.tools.ant.types.FilterSet"/>
-  <data-type name="description" class="org.apache.tools.ant.types.Description"/>
-  <data-type name="substitution" class="org.apache.tools.ant.types.Substitution"/>
-  <data-type name="regexp" class="org.apache.tools.ant.types.RegularExpression"/>
-
-  <!-- deprecated ant tasks (kept for back compatibility) -->
-
-  <task name="javadoc2" class="org.apache.tools.ant.taskdefs.Javadoc"/>
-  <task name="copydir" class="org.apache.tools.ant.taskdefs.Copydir"/>
-  <task name="copyfile" class="org.apache.tools.ant.taskdefs.Copyfile"/>
-  <task name="deltree" class="org.apache.tools.ant.taskdefs.Deltree"/>
-  <task name="rename" class="org.apache.tools.ant.taskdefs.Rename"/>
-
-</antlib>
diff --git a/proposal/sandbox/antlib/src/main/org/apache/tools/ant/opt-antlib.xml b/proposal/sandbox/antlib/src/main/org/apache/tools/ant/opt-antlib.xml
deleted file mode 100644
index 238ae11..0000000
--- a/proposal/sandbox/antlib/src/main/org/apache/tools/ant/opt-antlib.xml
+++ /dev/null
@@ -1,146 +0,0 @@
-<?xml version='1.0' ?>
-<!--
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
--->
-<antlib version="1.5" >
-  <!-- Declaration of optional tasks -->
-
-  <task name="script" class="org.apache.tools.ant.taskdefs.optional.Script"/>
-  <task name="netrexxc" class="org.apache.tools.ant.taskdefs.optional.NetRexxC"/>
-  <task name="renameext" class="org.apache.tools.ant.taskdefs.optional.RenameExtensions"/>
-  <task name="ejbc" class="org.apache.tools.ant.taskdefs.optional.ejb.Ejbc"/>
-  <task name="ddcreator" class="org.apache.tools.ant.taskdefs.optional.ejb.DDCreator"/>
-  <task name="wlrun" class="org.apache.tools.ant.taskdefs.optional.ejb.WLRun"/>
-  <task name="wlstop" class="org.apache.tools.ant.taskdefs.optional.ejb.WLStop"/>
-  <task name="vssget" class="org.apache.tools.ant.taskdefs.optional.vss.MSVSSGET"/>
-  <task name="ejbjar" class="org.apache.tools.ant.taskdefs.optional.ejb.EjbJar"/>
-  <task name="mparse" class="org.apache.tools.ant.taskdefs.optional.metamata.MParse"/>
-  <task name="mmetrics" class="org.apache.tools.ant.taskdefs.optional.metamata.MMetrics"/>
-  <task name="maudit" class="org.apache.tools.ant.taskdefs.optional.metamata.MAudit"/>
-  <task name="junit" class="org.apache.tools.ant.taskdefs.optional.junit.JUnitTask"/>
-  <task name="cab" class="org.apache.tools.ant.taskdefs.optional.Cab"/>
-  <task name="ftp" class="org.apache.tools.ant.taskdefs.optional.net.FTP"/>
-  <task name="icontract" class="org.apache.tools.ant.taskdefs.optional.IContract"/>
-  <task name="javacc" class="org.apache.tools.ant.taskdefs.optional.javacc.JavaCC"/>
-  <task name="jjtree" class="org.apache.tools.ant.taskdefs.optional.javacc.JJTree"/>
-  <task name="stcheckout" class="org.apache.tools.ant.taskdefs.optional.starteam.StarTeamCheckout"/>
-  <task name="stcheckin" class="org.apache.tools.ant.taskdefs.optional.starteam.StarTeamCheckin"/>
-  <task name="stlabel" class="org.apache.tools.ant.taskdefs.optional.starteam.StarTeamLabel"/>
-  <task name="stlist" class="org.apache.tools.ant.taskdefs.optional.starteam.StarTeamList"/>
-  <task name="wljspc" class="org.apache.tools.ant.taskdefs.optional.jsp.WLJspc"/>
-  <task name="jlink" class="org.apache.tools.ant.taskdefs.optional.jlink.JlinkTask"/>
-  <task name="native2ascii" class="org.apache.tools.ant.taskdefs.optional.Native2Ascii"/>
-  <task name="propertyfile" class="org.apache.tools.ant.taskdefs.optional.PropertyFile"/>
-  <task name="depend" class="org.apache.tools.ant.taskdefs.optional.depend.Depend"/>
-  <task name="antlr" class="org.apache.tools.ant.taskdefs.optional.ANTLR"/>
-  <task name="vajload" class="org.apache.tools.ant.taskdefs.optional.ide.VAJLoadProjects"/>
-  <task name="vajexport" class="org.apache.tools.ant.taskdefs.optional.ide.VAJExport"/>
-  <task name="vajimport" class="org.apache.tools.ant.taskdefs.optional.ide.VAJImport"/>
-  <task name="telnet" class="org.apache.tools.ant.taskdefs.optional.net.TelnetTask"/>
-  <task name="csc" class="org.apache.tools.ant.taskdefs.optional.dotnet.CSharp"/>
-  <task name="ilasm" class="org.apache.tools.ant.taskdefs.optional.dotnet.Ilasm"/>
-  <task name="stylebook" class="org.apache.tools.ant.taskdefs.optional.StyleBook"/>
-  <task name="test" class="org.apache.tools.ant.taskdefs.optional.Test"/>
-  <task name="pvcs" class="org.apache.tools.ant.taskdefs.optional.pvcs.Pvcs"/>
-  <task name="p4change" class="org.apache.tools.ant.taskdefs.optional.perforce.P4Change"/>
-  <task name="p4label" class="org.apache.tools.ant.taskdefs.optional.perforce.P4Label"/>
-  <task name="p4have" class="org.apache.tools.ant.taskdefs.optional.perforce.P4Have"/>
-  <task name="p4sync" class="org.apache.tools.ant.taskdefs.optional.perforce.P4Sync"/>
-  <task name="p4edit" class="org.apache.tools.ant.taskdefs.optional.perforce.P4Edit"/>
-  <task name="p4submit" class="org.apache.tools.ant.taskdefs.optional.perforce.P4Submit"/>
-  <task name="p4counter" class="org.apache.tools.ant.taskdefs.optional.perforce.P4Counter"/>
-  <task name="javah" class="org.apache.tools.ant.taskdefs.optional.Javah"/>
-  <task name="ccupdate" class="org.apache.tools.ant.taskdefs.optional.clearcase.CCUpdate"/>
-  <task name="cccheckout" class="org.apache.tools.ant.taskdefs.optional.clearcase.CCCheckout"/>
-  <task name="cccheckin" class="org.apache.tools.ant.taskdefs.optional.clearcase.CCCheckin"/>
-  <task name="ccuncheckout" class="org.apache.tools.ant.taskdefs.optional.clearcase.CCUnCheckout"/>
-  <task name="sound" class="org.apache.tools.ant.taskdefs.optional.sound.SoundTask"/>
-  <task name="junitreport" class="org.apache.tools.ant.taskdefs.optional.junit.XMLResultAggregator"/>
-  <task name="vsslabel" class="org.apache.tools.ant.taskdefs.optional.vss.MSVSSLABEL"/>
-  <task name="vsshistory" class="org.apache.tools.ant.taskdefs.optional.vss.MSVSSHISTORY"/>
-  <task name="blgenclient" class="org.apache.tools.ant.taskdefs.optional.ejb.BorlandGenerateClient"/>
-  <task name="rpm" class="org.apache.tools.ant.taskdefs.optional.Rpm"/>
-  <task name="xmlvalidate" class="org.apache.tools.ant.taskdefs.optional.XMLValidateTask"/>
-  <task name="vsscheckin" class="org.apache.tools.ant.taskdefs.optional.vss.MSVSSCHECKIN"/>
-  <task name="vsscheckout" class="org.apache.tools.ant.taskdefs.optional.vss.MSVSSCHECKOUT"/>
-  <task name="iplanet" class="ejbc=org.apache.tools.ant.taskdefs.optional.ejb.IPlanetEjbcTask"/>
-  <task name="jdepend" class="org.apache.tools.ant.taskdefs.optional.jdepend.JDependTask"/>
-  <task name="mimemail" class="org.apache.tools.ant.taskdefs.optional.net.MimeMail"/>
-  <task name="ccmcheckin" class="org.apache.tools.ant.taskdefs.optional.ccm.CCMCheckin"/>
-  <task name="ccmcheckout" class="org.apache.tools.ant.taskdefs.optional.ccm.CCMCheckout"/>
-  <task name="ccmcheckintask" class="org.apache.tools.ant.taskdefs.optional.ccm.CCMCheckinDefault"/>
-  <task name="ccmreconfigure" class="org.apache.tools.ant.taskdefs.optional.ccm.CCMReconfigure"/>
-  <task name="ccmcreatetask" class="org.apache.tools.ant.taskdefs.optional.ccm.CCMCreateTask"/>
-  <task name="jpcoverage" class="org.apache.tools.ant.taskdefs.optional.sitraka.Coverage"/>
-  <task name="jpcovmerge" class="org.apache.tools.ant.taskdefs.optional.sitraka.CovMerge"/>
-  <task name="jpcovreport" class="org.apache.tools.ant.taskdefs.optional.sitraka.CovReport"/>
-  <task name="p4add" class="org.apache.tools.ant.taskdefs.optional.perforce.P4Add"/>
-  <task name="jspc" class="org.apache.tools.ant.taskdefs.optional.jsp.JspC"/>
-  <task name="replaceregexp" class="org.apache.tools.ant.taskdefs.optional.ReplaceRegExp"/>
-  <task name="translate" class="org.apache.tools.ant.taskdefs.optional.i18n.Translate"/>
-  <task name="sosget" class="org.apache.tools.ant.taskdefs.optional.sos.SOSGet"/>
-  <task name="soscheckin" class="org.apache.tools.ant.taskdefs.optional.sos.SOSCheckin"/>
-  <task name="soscheckout" class="org.apache.tools.ant.taskdefs.optional.sos.SOSCheckout"/>
-  <task name="soslabel" class="org.apache.tools.ant.taskdefs.optional.sos.SOSLabel"/>
-  <task name="echoproperties" class="org.apache.tools.ant.taskdefs.optional.EchoProperties"/>
-
-  <!-- I have no idea why this task is here -->
-
-  <task name="get" class="org.apache.tools.ant.taskdefs.Get"/>
-
-  <data-type name="classfileset" class="org.apache.tools.ant.types.optional.depend.ClassfileSet"/>
-
-  <!-- deprecated ant tasks (kept for back compatibility) -->
-
-  <task name="starteam" class="org.apache.tools.ant.taskdefs.optional.scm.AntStarTeamCheckOut"/>
-</antlib>
diff --git a/proposal/sandbox/antlib/src/main/org/apache/tools/ant/taskdefs/Ant.java b/proposal/sandbox/antlib/src/main/org/apache/tools/ant/taskdefs/Ant.java
deleted file mode 100644
index 5d6d8d6..0000000
--- a/proposal/sandbox/antlib/src/main/org/apache/tools/ant/taskdefs/Ant.java
+++ /dev/null
@@ -1,453 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.ProjectComponent;
-import org.apache.tools.ant.BuildListener;
-import org.apache.tools.ant.DefaultLogger;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.ProjectHelper;
-import org.apache.tools.ant.util.FileUtils;
-import java.io.File;
-import java.io.PrintStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.lang.reflect.Method;
-import java.util.Vector;
-import java.util.Hashtable;
-import java.util.Enumeration;
-
-/**
- * Call Ant in a sub-project
- *
- *  <pre>
- *  &lt;target name=&quot;foo&quot; depends=&quot;init&quot;&gt;
- *    &lt;ant antfile=&quot;build.xml&quot; target=&quot;bar&quot; &gt;
- *      &lt;property name=&quot;property1&quot; value=&quot;aaaaa&quot; /&gt;
- *      &lt;property name=&quot;foo&quot; value=&quot;baz&quot; /&gt;
- *    &lt;/ant&gt;</SPAN>
- *  &lt;/target&gt;</SPAN>
- *
- *  &lt;target name=&quot;bar&quot; depends=&quot;init&quot;&gt;
- *    &lt;echo message=&quot;prop is ${property1} ${foo}&quot; /&gt;
- *  &lt;/target&gt;
- * </pre>
- *
- *
- * @author costin@dnt.ro
- */
-public class Ant extends Task {
-
-    /** the basedir where is executed the build file */
-    private File dir = null;
-    
-    /** the build.xml file (can be absolute) in this case dir will be ignored */
-    private String antFile = null;
-    
-    /** the target to call if any */
-    private String target = null;
-    
-    /** the output */
-    private String output = null;
-    
-    /** should we inherit properties from the parent ? */
-    private boolean inheritAll = true;
-    
-    /** should we inherit references from the parent ? */
-    private boolean inheritRefs = false;
-    
-    /** the properties to pass to the new project */
-    private Vector properties = new Vector();
-    
-    /** the references to pass to the new project */
-    private Vector references = new Vector();
-
-    /** the temporary project created to run the build file */
-    private Project newProject;
-
-    /**
-     * If true, inherit all properties from parent Project
-     * If false, inherit only userProperties and those defined
-     * inside the ant call itself
-     */
-    public void setInheritAll(boolean value) {
-       inheritAll = value;
-    }
-
-    /**
-     * If true, inherit all references from parent Project
-     * If false, inherit only those defined
-     * inside the ant call itself
-     */
-    public void setInheritRefs(boolean value) {
-       inheritRefs = value;
-    }
-
-    public void init() {
-        newProject = project.createSubProject();
-        newProject.setJavaVersionProperty();
-    }
-
-    private void reinit() {
-        init();
-        final int count = properties.size();
-        for (int i = 0; i < count; i++) {
-            Property p = (Property) properties.elementAt(i);
-            Property newP = (Property) newProject.createTask("property");
-            newP.setName(p.getName());
-            if (p.getValue() != null) {
-                newP.setValue(p.getValue());
-            }
-            if (p.getFile() != null) {
-                newP.setFile(p.getFile());
-            } 
-            if (p.getResource() != null) {
-                newP.setResource(p.getResource());
-            }
-            properties.setElementAt(newP, i);
-        }
-    }
-
-    private void initializeProject() {
-        Vector listeners = project.getBuildListeners();
-        final int count = listeners.size();
-        for (int i = 0; i < count; i++) {
-            newProject.addBuildListener((BuildListener)listeners.elementAt(i));
-        }
-
-        if (output != null) {
-            try {
-                PrintStream out = new PrintStream(new FileOutputStream(output));
-                DefaultLogger logger = new DefaultLogger();
-                logger.setMessageOutputLevel(Project.MSG_INFO);
-                logger.setOutputPrintStream(out);
-                logger.setErrorPrintStream(out);
-                newProject.addBuildListener(logger);
-            }
-            catch( IOException ex ) {
-                log( "Ant: Can't set output to " + output );
-            }
-        }
-
-        // set user-defined or all properties from calling project
-        Hashtable prop1;
-        if (inheritAll) {
-           prop1 = project.getProperties();
-        } else {
-           prop1 = project.getUserProperties();
-
-           // set Java built-in properties separately,
-           // b/c we won't inherit them.
-           newProject.setSystemProperties();
-        }
-        
-        Enumeration e = prop1.keys();
-        while (e.hasMoreElements()) {
-            String arg = (String) e.nextElement();
-            if ("basedir".equals(arg) || "ant.file".equals(arg)) {
-                // basedir and ant.file get special treatment in execute()
-                continue;
-            }
-            
-            String value = (String) prop1.get(arg);
-            if (inheritAll){
-               newProject.setProperty(arg, value);
-            } else {
-               newProject.setUserProperty(arg, value);
-            }
-        }
-    }
-
-    protected void handleOutput(String line) {
-        if (newProject != null) {
-            newProject.demuxOutput(line, false);
-        } else {
-            super.handleOutput(line);
-        }
-    }
-    
-    protected void handleErrorOutput(String line) {
-        if (newProject != null) {
-            newProject.demuxOutput(line, true);
-        } else {
-            super.handleErrorOutput(line);
-        }
-    }
-    
-    /**
-     * Do the execution.
-     */
-    public void execute() throws BuildException {
-        try {
-            if (newProject == null) {
-                reinit();
-            }
-        
-            if ( (dir == null) && (inheritAll) ) {
-                dir = project.getBaseDir();
-            }
-
-            initializeProject();
-
-            if (dir != null) {
-                newProject.setBaseDir(dir);
-                newProject.setUserProperty("basedir" , dir.getAbsolutePath());
-            } else {
-                dir = project.getBaseDir();
-            }
-
-            overrideProperties();
-
-            if (antFile == null) {
-                antFile = "build.xml";
-            }
-
-            File file = FileUtils.newFileUtils().resolveFile(dir, antFile);
-            antFile = file.getAbsolutePath();
-
-            newProject.setUserProperty( "ant.file" , antFile );
-            ProjectHelper.configureProject(newProject, new File(antFile));
-            
-            if (target == null) {
-                target = newProject.getDefaultTarget();
-            }
-
-            addReferences();
-
-            // Are we trying to call the target in which we are defined?
-            if (newProject.getBaseDir().equals(project.getBaseDir()) &&
-                newProject.getProperty("ant.file").equals(project.getProperty("ant.file")) &&
-                getOwningTarget() != null &&
-                target.equals(this.getOwningTarget().getName())) { 
-
-                throw new BuildException("ant task calling its own parent target");
-            }
-
-            newProject.executeTarget(target);
-        } finally {
-            // help the gc
-            newProject = null;
-        }
-    }
-
-    /**
-     * Override the properties in the new project with the one
-     * explicitly defined as nested elements here.
-     */
-    private void overrideProperties() throws BuildException {
-        Enumeration e = properties.elements();
-        while (e.hasMoreElements()) {
-            Property p = (Property) e.nextElement();
-            p.setProject(newProject);
-            p.execute();
-        }
-    }
-
-    /**
-     * Add the references explicitly defined as nested elements to the
-     * new project.  Also copy over all references that don't override
-     * existing references in the new project if inheritall has been
-     * requested.
-     */
-    private void addReferences() throws BuildException {
-        Hashtable thisReferences = (Hashtable) project.getReferences().clone();
-        Hashtable newReferences = newProject.getReferences();
-        Enumeration e;
-        if (references.size() > 0) {
-            for(e = references.elements(); e.hasMoreElements();) {
-                Reference ref = (Reference)e.nextElement();
-                String refid = ref.getRefId();
-                if (refid == null) {
-                    throw new BuildException("the refid attribute is required for reference elements");
-                }
-                if (!thisReferences.containsKey(refid)) {
-                    log("Parent project doesn't contain any reference '"
-                        + refid + "'", 
-                        Project.MSG_WARN);
-                    continue;
-                }
-
-                thisReferences.remove(refid);
-                String toRefid = ref.getToRefid();
-                if (toRefid == null) {
-                    toRefid = refid;
-                }
-                copyReference(refid, toRefid);
-            }
-        }
-
-        // Now add all references that are not defined in the
-        // subproject, if inheritRefs is true
-        if (inheritRefs) {
-            for(e = thisReferences.keys(); e.hasMoreElements();) {
-                String key = (String)e.nextElement();
-                if (newReferences.containsKey(key)) {
-                    continue;
-                }
-                copyReference(key, key);
-            }
-        }
-    }
-
-    /**
-     * Try to clone and reconfigure the object referenced by oldkey in
-     * the parent project and add it to the new project with the key
-     * newkey.
-     *
-     * <p>If we cannot clone it, copy the referenced object itself and
-     * keep our fingers crossed.</p>
-     */
-    private void copyReference(String oldKey, String newKey) {
-        Object orig = project.getReference(oldKey);
-        Class c = orig.getClass();
-        Object copy = orig;
-        try {
-            Method cloneM = c.getMethod("clone", new Class[0]);
-            if (cloneM != null) {
-                copy = cloneM.invoke(orig, new Object[0]);
-            }
-        } catch (Exception e) {
-            // not Clonable
-        }
-        
-
-        if (copy instanceof ProjectComponent) {
-            ((ProjectComponent) copy).setProject(newProject);
-        } else {
-            try {
-                Method setProjectM = 
-                    c.getMethod( "setProject", new Class[] {Project.class});
-                if(setProjectM != null) {
-                    setProjectM.invoke(copy, new Object[] {newProject});
-                }
-            } catch (NoSuchMethodException e) {
-                // ignore this if the class being referenced does not have
-                // a set project method.
-            } catch(Exception e2) {
-                String msg = "Error setting new project instance for reference with id "
-                    + oldKey; 
-                throw new BuildException(msg, e2, location);
-            }
-        }
-        newProject.addReference(newKey, copy);
-    }
-
-    /**
-     * ...
-     */
-    public void setDir(File d) {
-        this.dir = d;
-    }
-
-    /**
-     * set the build file, it can be either absolute or relative.
-     * If it is absolute, <tt>dir</tt> will be ignored, if it is
-     * relative it will be resolved relative to <tt>dir</tt>.
-     */
-    public void setAntfile(String s) {
-        // @note: it is a string and not a file to handle relative/absolute
-        // otherwise a relative file will be resolved based on the current
-        // basedir.
-        this.antFile = s;
-    }
-
-    /**
-     * set the target to execute. If none is defined it will
-     * execute the default target of the build file
-     */
-    public void setTarget(String s) {
-        this.target = s;
-    }
-
-    public void setOutput(String s) {
-        this.output = s;
-    }
-
-    /** create a property to pass to the new project as a 'user property' */
-    public Property createProperty() {
-        if (newProject == null) {
-            reinit();
-        }
-        Property p = new Property(true);
-        p.setProject(newProject);
-        p.setTaskName("property");
-        properties.addElement( p );
-        return p;
-    }
-
-    /** 
-     * create a reference element that identifies a data type that
-     * should be carried over to the new project.
-     */
-    public void addReference(Reference r) {
-        references.addElement(r);
-    }
-
-    /**
-     * Helper class that implements the nested &lt;reference&gt;
-     * element of &lt;ant&gt; and &lt;antcall&gt;.
-     */
-    public static class Reference 
-        extends org.apache.tools.ant.types.Reference {
-
-        public Reference() {super();}
-        
-        private String targetid=null;
-        public void setToRefid(String targetid) { this.targetid=targetid; }
-        public String getToRefid() { return targetid; }
-    }
-}
diff --git a/proposal/sandbox/antlib/src/main/org/apache/tools/ant/taskdefs/Antjar.java b/proposal/sandbox/antlib/src/main/org/apache/tools/ant/taskdefs/Antjar.java
deleted file mode 100644
index 784e289..0000000
--- a/proposal/sandbox/antlib/src/main/org/apache/tools/ant/taskdefs/Antjar.java
+++ /dev/null
@@ -1,181 +0,0 @@
-/*
- *  The Apache Software License, Version 1.1
- *
- *  Copyright (c) 2000 The Apache Software Foundation.  All rights
- *  reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions
- *  are met:
- *
- *  1. Redistributions of source code must retain the above copyright
- *  notice, this list of conditions and the following disclaimer.
- *
- *  2. Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in
- *  the documentation and/or other materials provided with the
- *  distribution.
- *
- *  3. The end-user documentation included with the redistribution, if
- *  any, must include the following acknowlegement:
- *  "This product includes software developed by the
- *  Apache Software Foundation (http://www.apache.org/)."
- *  Alternately, this acknowlegement may appear in the software itself,
- *  if and wherever such third-party acknowlegements normally appear.
- *
- *  4. The names "The Jakarta Project", "Ant", and "Apache Software
- *  Foundation" must not be used to endorse or promote products derived
- *  from this software without prior written permission. For written
- *  permission, please contact apache@apache.org.
- *
- *  5. Products derived from this software may not be called "Apache"
- *  nor may "Apache" appear in their names without prior written
- *  permission of the Apache Group.
- *
- *  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- *  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- *  OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- *  DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- *  ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- *  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- *  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- *  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- *  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- *  SUCH DAMAGE.
- *  ====================================================================
- *
- *  This software consists of voluntary contributions made by many
- *  individuals on behalf of the Apache Software Foundation.  For more
- *  information on the Apache Software Foundation, please see
- *  <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs;
-
-import org.xml.sax.*;
-import javax.xml.parsers.*;
-
-import org.apache.tools.ant.*;
-import org.apache.tools.ant.types.ZipFileSet;
-import org.apache.tools.zip.*;
-
-import java.io.*;
-import java.util.*;
-
-/**
- * Creates a ANTLIB archive. Code is similar to the War class, but with
- * bonus dtd validation.
- *
- * @author doc and layout changes by steve loughran, steve_l@iseran.com
- * @author <a href="mailto:j_a_fernandez@yahoo.com">Jose Alberto Fernandez</a>
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> 
- *      
- * @since ant1.5
- */
-public class Antjar extends Jar {
-
-    /**
-     * location of the xml descriptor (antxml attribute)
-     */
-    private File libraryDescriptor;
-    
-    /**
-     * status flag
-     */
-    private boolean descriptorAdded;
-
-
-    /**
-     * Constructor for the Antjar object
-     */
-    public Antjar() {
-        super();
-        archiveType = "jar";
-        emptyBehavior = "create";
-    }
-
-
-    /**
-     * Sets the Antxml attribute of the Antjar object
-     *
-     * @param descriptor The new Antxml value
-     */
-    public void setAntxml(File descriptor) {
-        libraryDescriptor = descriptor;
-        if (!libraryDescriptor.exists()) {
-            throw new BuildException("Deployment descriptor: " + 
-				     libraryDescriptor + " does not exist.");
-        }
-
-        // Create a ZipFileSet for this file, and pass it up.
-        ZipFileSet fs = new ZipFileSet();
-        fs.setDir(new File(libraryDescriptor.getParent()));
-        fs.setIncludes(libraryDescriptor.getName());
-        fs.setFullpath(Antlib.ANT_DESCRIPTOR);
-        super.addFileset(fs);
-    }
-
-
-    /**
-     * override of superclass method; add check for
-     * valid descriptor
-     * @param zOut stream to init
-     * @exception IOException io trouble
-     * @exception BuildException other trouble
-     */
-    protected void initZipOutputStream(ZipOutputStream zOut)
-        throws IOException, BuildException {
-        // If no antxml file is specified, it's an error.
-        if (libraryDescriptor == null) {
-            throw new BuildException("antxml attribute is required", 
-				     location);
-        }
-
-        super.initZipOutputStream(zOut);
-    }
-
-
-    /**
-     * override of parent method; warn if a second descriptor is added
-     *
-     * @param file file to add
-     * @param zOut stream to add to 
-     * @param vPath the path to add it to in the zipfile
-     * @exception IOException io trouble
-     */
-    protected void zipFile(File file, ZipOutputStream zOut, String vPath)
-        throws IOException {
-        // If the file being added is META-INF/antlib.xml, we warn if it's not the
-        // one specified in the "antxml" attribute - or if it's being added twice,
-        // meaning the same file is specified by the "antxml" attribute and in
-        // a <fileset> element.
-        if (vPath.equalsIgnoreCase(Antlib.ANT_DESCRIPTOR)) {
-            if (libraryDescriptor == null || 
-		!libraryDescriptor.equals(file) || descriptorAdded) {
-                log("Warning: selected " + archiveType + " files include a " +
-		    Antlib.ANT_DESCRIPTOR + " which will be ignored " +
-		    "(please use antxml attribute to " + archiveType + 
-		    " task)", Project.MSG_WARN);
-            }
-            else {
-                super.zipFile(file, zOut, vPath);
-                descriptorAdded = true;
-            }
-        }
-        else {
-            super.zipFile(file, zOut, vPath);
-        }
-    }
-
-
-    /**
-     * Make sure we don't think we already have a descriptor next time this
-     * task gets executed.
-     */
-    protected void cleanUp() {
-        descriptorAdded = false;
-        super.cleanUp();
-    }
-
-}
diff --git a/proposal/sandbox/antlib/src/main/org/apache/tools/ant/taskdefs/Antlib-V1_0.dtd b/proposal/sandbox/antlib/src/main/org/apache/tools/ant/taskdefs/Antlib-V1_0.dtd
deleted file mode 100644
index 66da108..0000000
--- a/proposal/sandbox/antlib/src/main/org/apache/tools/ant/taskdefs/Antlib-V1_0.dtd
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version='1.0' encoding="UTF8" ?>
-
-<!-- 
-This file defines the XML format for ANT library descriptors.
-Descriptors must especify a DOCTYPE using "Antlib-V1_0.dtd"
-as the SystemId for the document.
--->
-
-<!-- Root element for the Antlib descriptor.                 -->
-<!ELEMENT antlib (task | type)* >
-<!ATTLIST antlib
-          version  CDATA #IMPLIED
->
-
-<!-- Declaration of tasks contained in the library.          -->
-<!ELEMENT task EMPTY>
-<!ATTLIST task 
-          name     CDATA #REQUIRED
-          class    CDATA #REQUIRED
->
-
-<!-- Declaration of datatypes contained in the library       -->
-<!ELEMENT type EMPTY>
-<!ATTLIST type 
-          name     CDATA #REQUIRED
-          class    CDATA #REQUIRED
->
diff --git a/proposal/sandbox/antlib/src/main/org/apache/tools/ant/taskdefs/Antlib.java b/proposal/sandbox/antlib/src/main/org/apache/tools/ant/taskdefs/Antlib.java
deleted file mode 100644
index 93a5c19..0000000
--- a/proposal/sandbox/antlib/src/main/org/apache/tools/ant/taskdefs/Antlib.java
+++ /dev/null
@@ -1,889 +0,0 @@
-/*
- *  The Apache Software License, Version 1.1
- *
- *  Copyright (c) 1999 The Apache Software Foundation.  All rights
- *  reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions
- *  are met:
- *
- *  1. Redistributions of source code must retain the above copyright
- *  notice, this list of conditions and the following disclaimer.
- *
- *  2. Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in
- *  the documentation and/or other materials provided with the
- *  distribution.
- *
- *  3. The end-user documentation included with the redistribution, if
- *  any, must include the following acknowlegement:
- *  "This product includes software developed by the
- *  Apache Software Foundation (http://www.apache.org/)."
- *  Alternately, this acknowlegement may appear in the software itself,
- *  if and wherever such third-party acknowlegements normally appear.
- *
- *  4. The names "The Jakarta Project", "Ant", and "Apache Software
- *  Foundation" must not be used to endorse or promote products derived
- *  from this software without prior written permission. For written
- *  permission, please contact apache@apache.org.
- *
- *  5. Products derived from this software may not be called "Apache"
- *  nor may "Apache" appear in their names without prior written
- *  permission of the Apache Group.
- *
- *  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- *  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- *  OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- *  DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- *  ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- *  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- *  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- *  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- *  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- *  SUCH DAMAGE.
- *  ====================================================================
- *
- *  This software consists of voluntary contributions made by many
- *  individuals on behalf of the Apache Software Foundation.  For more
- *  information on the Apache Software Foundation, please see
- *  <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.*;
-import org.apache.tools.ant.types.*;
-import org.apache.tools.ant.taskdefs.*;
-import org.xml.sax.*;
-import javax.xml.parsers.*;
-
-import java.util.*;
-import java.util.zip.*;
-import java.io.*;
-import java.net.*;
-
-/**
- * Make available the tasks and types from an Ant library. <pre>
- * &lt;antlib library="libname.jar" &gt;
- *   &lt;alias name="nameOnLib" as="newName" /&gt;
- * &lt;/antlib&gt;
- *
- * &lt;antlib file="libname.jar" override="true" /&gt;
- * </pre>
- *
- * @author minor changes by steve loughran, steve_l@iseran.com
- * @author <a href="j_a_fernandez@yahoo.com">Jose Alberto Fernandez</a>
- * @since ant1.5
- */
-public class Antlib extends Task {
-
-    /**
-     * Location of descriptor in library
-     */
-    public static final String ANT_DESCRIPTOR = "META-INF/antlib.xml";
-
-    /**
-     * The named classloader to use.
-     * Defaults to the default classLoader.
-     */
-    private String loaderId = "";
-
-    /**
-     * file attribute
-     */
-    private File file = null;
-    /**
-     * override attribute
-     */
-    private boolean override = false;
-    /**
-     * attribute to control failure when loading
-     */
-    private FailureAction onerror = new FailureAction();
-
-    /**
-     * classpath to build up
-     */
-    private Path classpath = null;
-
-    /**
-     * the manufacture set of classes to load
-     */
-    private Path loaderPath = null;
-
-    /**
-     * our little xml parse
-     */
-    private SAXParserFactory saxFactory;
-
-    /**
-     * table of aliases
-     */
-    private Vector aliases = new Vector();
-
-    /**
-     * Some internal constants.
-     */
-    private static final int FAIL = 0, REPORT = 1, IGNORE = 2;
-
-    /**
-     * Posible actions when classes are not found
-     */
-    public static class FailureAction extends EnumeratedAttribute {
-        public String[] getValues() {
-            return new String[]{"fail", "report", "ignore"};
-        }
-    }
-
-    private static class DescriptorEnumeration implements Enumeration {
-
-        /**
-         * The name of the resource being searched for.
-         */
-        private String resourceName;
-
-        /**
-         * The index of the next file to search.
-         */
-        private int index;
-
-        /**
-         * The list of files to search
-         */
-        private File files[];
-
-        /**
-         * The URL of the next resource to return in the enumeration. If this
-         * field is <code>null</code> then the enumeration has been completed,
-         * i.e., there are no more elements to return.
-         */
-        private URL nextDescriptor;
-
-        /**
-         * Construct a new enumeration of resources of the given name found
-         * within this class loader's classpath.
-         *
-         * @param name the name of the resource to search for.
-         */
-        DescriptorEnumeration(String fileNames[], String name) {
-            this.resourceName = name;
-            this.index = 0;
-            this.files = new File[fileNames.length];
-            for (int i = 0; i < files.length; i++) {
-                files[i] = new File(fileNames[i]);
-            }
-            findNextDescriptor();
-        }
-
-        /**
-         * Indicates whether there are more elements in the enumeration to
-         * return.
-         *
-         * @return <code>true</code> if there are more elements in the
-         *         enumeration; <code>false</code> otherwise.
-         */
-        public boolean hasMoreElements() {
-            return (this.nextDescriptor != null);
-        }
-
-        /**
-         * Returns the next resource in the enumeration.
-         *
-         * @return the next resource in the enumeration.
-         */
-        public Object nextElement() {
-            URL ret = this.nextDescriptor;
-            findNextDescriptor();
-            return ret;
-        }
-
-        /**
-         * Locates the next descriptor of the correct name in the files and
-         * sets <code>nextDescriptor</code> to the URL of that resource. If no
-         * more resources can be found, <code>nextDescriptor</code> is set to
-         * <code>null</code>.
-         */
-        private void findNextDescriptor() {
-            URL url = null;
-            while (index < files.length && url == null) {
-                try {
-                    url = getDescriptorURL(files[index], this.resourceName);
-                    index++;
-                }
-                catch (BuildException e) {
-                    // ignore path elements which are not valid relative to the
-                    // project
-                }
-            }
-            this.nextDescriptor = url;
-        }
-
-        /**
-         * Get an URL to a given resource in the given file which may
-         * either be a directory or a zip file.
-         *
-         * @param file the file (directory or jar) in which to search for
-         *             the resource. Must not be <code>null</code>.
-         * @param resourceName the name of the resource for which a URL
-         *                     is required. Must not be <code>null</code>.
-         *
-         * @return a URL to the required resource or <code>null</code> if the
-         *         resource cannot be found in the given file object
-         * @todo This code is extracted from AntClassLoader.getResourceURL
-         *       I hate when that happens but the code there is too tied to
-         *       the ClassLoader internals. Maybe we can find a nice place
-         *       to put it where both can use it.
-         */
-        private URL getDescriptorURL(File file, String resourceName) {
-            try {
-                if (!file.exists()) {
-                    return null;
-                }
-
-                if (file.isDirectory()) {
-                    File resource = new File(file, resourceName);
-
-                    if (resource.exists()) {
-                        try {
-                            return new URL("file:"+resource.toString());
-                        } catch (MalformedURLException ex) {
-                            return null;
-                        }
-                    }
-                }
-                else {
-                    ZipFile zipFile = new ZipFile(file);
-                    try {
-                        ZipEntry entry = zipFile.getEntry(resourceName);
-                        if (entry != null) {
-                            try {
-                                return new URL("jar:file:"+file.toString()+"!/"+entry);
-                            } catch (MalformedURLException ex) {
-                                return null;
-                            }
-                        }
-                    }
-                    finally {
-                        zipFile.close();
-                    }
-                }
-            }
-            catch (Exception e) {
-                e.printStackTrace();
-            }
-
-            return null;
-        }
-
-    }
-
-    /**
-     * constructor creates a validating sax parser
-     */
-    public Antlib() {
-        super();
-        // Default error action
-        onerror.setValue("report");
-        saxFactory = SAXParserFactory.newInstance();
-        saxFactory.setValidating(false);
-    }
-
-
-    /**
-     * constructor binds to a project and sets ignore mode on errors
-     *
-     * @param p Description of Parameter
-     */
-    public Antlib(Project p) {
-        this();
-        setProject(p);
-    }
-
-
-    /**
-     * Set name of library to load. The library is located in $ANT_HOME/antlib.
-     *
-     * @param lib the name of library relative to $ANT_HOME/antlib.
-     */
-    public void setLibrary(String lib) {
-        setFile(libraryFile("antlib", lib));
-    }
-
-
-    /**
-     * Set file location of library to load.
-     *
-     * @param file the jar file for the library.
-     */
-    public void setFile(File file) {
-        this.file = file;
-    }
-
-    /**
-     * Set the ID of the ClassLoader to use for this library.
-     *
-     * @param id the id for the ClassLoader to use,
-     *           <code>null</code> means use ANT's core classloader.
-     */
-    public void setLoaderid(String id) {
-        this.loaderId = id;
-    }
-
-    /**
-     * Set whether to override any existing definitions.
-     *
-     * @param override if true new definitions will replace existing ones.
-     */
-    public void setOverride(boolean override) {
-        this.override = override;
-    }
-
-
-    /**
-     * Get what to do if a definition cannot be loaded
-     * This method is mostly used by the core when loading core tasks.
-     *
-     * @return what to do if a definition cannot be loaded
-     */
-    final protected FailureAction getOnerror() {
-        return this.onerror;
-    }
-
-
-    /**
-     * Set whether to fail if a definition cannot be loaded
-     * Default is <code>true</code>.
-     * This property is mostly used by the core when loading core tasks.
-     *
-     * @param failedonerror if true loading will stop if classes
-     *                      cannot be instantiated
-     */
-    public void setOnerror(FailureAction onerror) {
-        this.onerror = onerror;
-    }
-
-
-    /**
-     * Create new Alias element.
-     *
-     * @return Description of the Returned Value
-     */
-    public Alias createAlias() {
-        Alias als = new Alias();
-        aliases.add(als);
-        return als;
-    }
-
-
-    /**
-     * Set the classpath to be used for this compilation
-     *
-     * @param cp The new Classpath value
-     */
-    public void setClasspath(Path cp) {
-        if (classpath == null) {
-            classpath = cp;
-        }
-        else {
-            classpath.append(cp);
-        }
-    }
-
-
-    /**
-     * create a nested classpath element.
-     *
-     * @return  classpath to use
-     */
-    public Path createClasspath() {
-        if (classpath == null) {
-            classpath = new Path(project);
-        }
-        return classpath.createPath();
-    }
-
-
-    /**
-     * Adds a reference to a CLASSPATH defined elsewhere
-     *
-     * @param r The new ClasspathRef value
-     */
-    public void setClasspathRef(Reference r) {
-        createClasspath().setRefid(r);
-    }
-
-
-    /**
-     * Obtain library file from ANT_HOME directory.
-     *
-     * @param lib the library name.
-     * @return the File instance of the library
-     */
-    private File libraryFile(String homeSubDir, String lib) {
-        // For the time being libraries live in $ANT_HOME/antlib.
-        // The idea being that not to load all the jars there anymore
-        String home = project.getProperty("ant.home");
-
-        if (home == null) {
-            throw new BuildException("ANT_HOME not set as required.");
-        }
-
-        return new File(new File(home, homeSubDir), lib);
-    }
-
-    /**
-     * actually do the work of loading the library
-     *
-     * @exception BuildException Description of Exception
-     */
-    public void execute()
-        throws BuildException {
-        if (file == null && classpath == null) {
-            String msg =
-                "Must specify either library or file attribute or classpath.";
-            throw new BuildException(msg, location);
-        }
-        if (file != null && !file.exists()) {
-            String msg = "Cannot find library: " + file;
-            throw new BuildException(msg, location);
-        }
-
-        loadDefinitions();
-    }
-
-
-    /**
-     * Load definitions in library and classpath
-     *
-     * @exception BuildException failure to access the resource
-     */
-    public boolean loadDefinitions() throws BuildException {
-        return loadDefinitions(ANT_DESCRIPTOR);
-    }
-
-    /**
-     * Load definitions from resource name in library and classpath
-     *
-     * @param res the name of the resources to load
-     * @exception BuildException failure to access the resource
-     */
-    final protected boolean loadDefinitions(String res)
-        throws BuildException {
-        Path path = makeLoaderClasspath();
-        ClassLoader cl = makeClassLoader(path);
-        boolean found = false;
-        try {
-            for (Enumeration e = getDescriptors(path, res); e.hasMoreElements(); ) {
-                URL resURL = (URL)e.nextElement();
-                InputStream is = resURL.openStream();
-                loadDefinitions(cl, is);
-                found = true;
-            }
-            if (!found && onerror.getIndex() != IGNORE) {
-                String sPath = path.toString();
-                if ("".equals(sPath.trim())) {
-                    sPath = System.getProperty("java.classpath");
-                }
-                String msg = "Cannot find any " + res +
-                    " antlib descriptors in: " + sPath;
-                switch (onerror.getIndex()) {
-                case FAIL:
-                    throw new BuildException(msg);
-                case REPORT:
-                    log(msg, project.MSG_WARN);
-                }
-            }
-        }
-        catch (IOException io) {
-            String msg = "Cannot load definitions from: " + res;
-            switch (onerror.getIndex()) {
-            case FAIL:
-                throw new BuildException(msg, io);
-            case REPORT:
-                log(io.getMessage(), project.MSG_WARN);
-            }
-        }
-        return found;
-    }
-
-
-    /**
-     * Load definitions directly from InputStream.
-     *
-     * @param is InputStream for the Antlib descriptor.
-     * @exception BuildException trouble
-     */
-    private void loadDefinitions(ClassLoader cl, InputStream is)
-        throws BuildException {
-        evaluateDescriptor(cl, processAliases(), is);
-    }
-
-
-    /**
-     * get an Enumeration of URLs for all resouces corresponding to the
-     * descriptor name.
-     *
-     * @param res the name of the resource to collect
-     * @return input stream to the Descriptor or null if none existent
-     * @exception BuildException io trouble, or it isnt a zipfile
-     */
-    private Enumeration getDescriptors(Path path, final String res)
-        throws BuildException, IOException {
-        if (loaderId == null) {
-            // Path cannot be added to the CoreLoader so simply
-            // ask for all instances of the resource descriptors
-            return project.getCoreLoader().getResources(res);
-        }
-
-        return new DescriptorEnumeration(path.list(), res);
-    }
-
-
-    /**
-     * turn the alias list to a property hashtable
-     *
-     * @return generated property hashtable
-     */
-    private Properties processAliases() {
-        Properties p = new Properties();
-
-        for (Enumeration e = aliases.elements(); e.hasMoreElements(); ) {
-            Alias a = (Alias) e.nextElement();
-            p.put(a.name, a.as);
-        }
-        return p;
-    }
-
-
-    /**
-     * create the classpath for this library from the file passed in and
-     * any classpath parameters
-     *
-     * @param file library file to use
-     * @return classloader using te
-     * @exception BuildException trouble creating the classloader
-     */
-    protected ClassLoader makeClassLoader(Path clspath)
-        throws BuildException {
-        if (loaderId == null) {
-            log("Loading definitions from CORE, <classpath> ignored",
-                project.MSG_VERBOSE);
-            return project.getCoreLoader();
-        }
-
-        log("Using ClassLoader '" + loaderId + "' to load path: " + clspath,
-            project.MSG_VERBOSE);
-        return project.addToLoader(loaderId, clspath);
-    }
-
-
-    /**
-     * Constructs the Path to add to the ClassLoader
-     */
-    private Path makeLoaderClasspath()
-    {
-        Path clspath = new Path(project);
-        if (file != null) clspath.setLocation(file);
-        //append any build supplied classpath
-        if (classpath != null) {
-            clspath.append(classpath);
-        }
-        return clspath;
-    }
-
-    /**
-     * parse the antlib descriptor
-     *
-     * @param cl optional classloader
-     * @param als alias list as property hashtable
-     * @param is input stream to descriptor
-     * @exception BuildException trouble
-     */
-    protected void evaluateDescriptor(ClassLoader cl,
-                                      Properties als, InputStream is)
-        throws BuildException {
-        try {
-            SAXParser saxParser = saxFactory.newSAXParser();
-            Parser parser = saxParser.getParser();
-
-            InputSource inputSource = new InputSource(is);
-            //inputSource.setSystemId(uri); //URI is nasty for jar entries
-            project.log("parsing descriptor for library: " + file,
-                        Project.MSG_VERBOSE);
-            saxParser.parse(inputSource, new AntLibraryHandler(cl, als));
-        }
-        catch (ParserConfigurationException exc) {
-            throw new BuildException("Parser has not been configured correctly", exc);
-        }
-        catch (SAXParseException exc) {
-            Location location =
-                    new Location(ANT_DESCRIPTOR,
-                    exc.getLineNumber(), exc.getColumnNumber());
-
-            Throwable t = exc.getException();
-            if (t instanceof BuildException) {
-                BuildException be = (BuildException) t;
-                if (be.getLocation() == Location.UNKNOWN_LOCATION) {
-                    be.setLocation(location);
-                }
-                throw be;
-            }
-            throw new BuildException(exc.getMessage(), t, location);
-        }
-        catch (SAXException exc) {
-            Throwable t = exc.getException();
-            if (t instanceof BuildException) {
-                throw (BuildException) t;
-            }
-            throw new BuildException(exc.getMessage(), t);
-        }
-        catch (IOException exc) {
-            throw new BuildException("Error reading library descriptor", exc);
-        }
-        finally {
-            if (is != null) {
-                try {
-                    is.close();
-                }
-                catch (IOException ioe) {
-                    // ignore this
-                }
-            }
-        }
-    }
-
-
-    /**
-     * Parses the document describing the content of the
-     * library. An inner class for access to Project.log
-     */
-    private class AntLibraryHandler extends HandlerBase {
-
-        /**
-         * our classloader
-         */
-        private final ClassLoader classloader;
-        /**
-         * the aliases
-         */
-        private final Properties aliasMap;
-        /**
-         * doc locator
-         */
-        private Locator locator = null;
-
-        private int level = 0;
-
-        private String name = null;
-        private String className = null;
-        private String adapter = null;
-
-        /**
-         * Constructor for the AntLibraryHandler object
-         *
-         * @param cl optional classloader
-         * @param als alias list
-         */
-        AntLibraryHandler(ClassLoader classloader, Properties als) {
-            this.classloader = classloader;
-            this.aliasMap = als;
-        }
-
-        /**
-         * Sets the DocumentLocator attribute of the AntLibraryHandler
-         * object
-         *
-         * @param locator The new DocumentLocator value
-         */
-        public void setDocumentLocator(Locator locator) {
-            this.locator = locator;
-        }
-
-        private void parseAttributes(String tag, AttributeList attrs)
-            throws SAXParseException {
-            name = null;
-            className = null;
-            adapter = null;
-
-            for (int i = 0, last = attrs.getLength(); i < last; i++) {
-                String key = attrs.getName(i);
-                String value = attrs.getValue(i);
-
-                if (key.equals("name")) {
-                    name = value;
-                }
-                else if (key.equals("class")) {
-                    className = value;
-                }
-                else if ("role".equals(tag) && key.equals("adapter")) {
-                    adapter = value;
-                }
-                else {
-                    throw new SAXParseException("Unexpected attribute \""
-                                                + key + "\"", locator);
-                }
-            }
-            if (name == null || className == null) {
-                String msg = "Underspecified " + tag + " declaration.";
-                throw new SAXParseException(msg, locator);
-            }
-        }
-
-        /**
-         * SAX callback handler
-         *
-         * @param tag XML tag
-         * @param attrs attributes
-         * @exception SAXParseException parse trouble
-         */
-        public void startElement(String tag, AttributeList attrs)
-            throws SAXParseException {
-            level ++;
-            if ("antlib".equals(tag)) {
-                if (level > 1) {
-                    throw new SAXParseException("Unexpected element: " + tag,
-                                                locator);
-                }
-                // No attributes to worry about
-                return;
-            }
-            if (level == 1) {
-                throw new SAXParseException("Missing antlib root element",
-                                            locator);
-            }
-
-            // Must have the two attributes declared
-            parseAttributes(tag, attrs);
-
-            try {
-                if ("role".equals(tag)) {
-                    if (project.isRoleDefined(name)) {
-                        String msg = "Cannot override role: " + name;
-                        log(msg, Project.MSG_WARN);
-                        return;
-                    }
-                    // Defining a new role
-                    Class clz = loadClass(className);
-                    if (clz != null) {
-                        project.addRoleDefinition(name, clz,
-                                                  (adapter == null? null :
-                                                   loadClass(adapter)));
-                    }
-                    return;
-                }
-
-                // Defining a new element kind
-                //check for name alias
-                String alias = aliasMap.getProperty(name);
-                if (alias != null) {
-                    name = alias;
-                }
-                //catch an attempted override of an existing name
-                if (!override && project.isDefinedOnRole(tag, name)) {
-                    String msg = "Cannot override " + tag + ": " + name;
-                    log(msg, Project.MSG_WARN);
-                    return;
-                }
-                Class clz = loadClass(className);
-                if (clz != null)
-                    project.addDefinitionOnRole(tag, name, clz);
-            }
-            catch(BuildException be) {
-                switch (onerror.getIndex()) {
-                case FAIL:
-                    throw new SAXParseException(be.getMessage(), locator, be);
-                case REPORT:
-                    project.log(be.getMessage(), project.MSG_WARN);
-                    break;
-                default:
-                    project.log(be.getMessage(), project.MSG_DEBUG);
-                }
-            }
-        }
-
-        public void endElement(String tag) {
-            level--;
-        }
-
-        private Class loadClass(String className)
-            throws SAXParseException {
-            String msg = null;
-            try {
-                //load the named class
-                Class cls;
-                if(classloader==null) {
-                    cls=Class.forName(className);
-                }
-                else {
-                    cls=classloader.loadClass(className);
-                }
-                return cls;
-            }
-            catch (ClassNotFoundException cnfe) {
-                msg = "Class " + className + " cannot be found";
-                if (onerror.getIndex() == FAIL)
-                    throw new SAXParseException(msg, locator, cnfe);
-            }
-            catch (NoClassDefFoundError ncdfe) {
-                msg = "Class " + className + " cannot be loaded";
-                if (onerror.getIndex() == FAIL)
-                    throw new SAXParseException(msg, locator);
-            }
-
-            if (onerror.getIndex() == REPORT) {
-                project.log(msg, project.MSG_WARN);
-            }
-            else {
-                project.log(msg, project.MSG_DEBUG);
-            }
-            return null;
-        }
-
-    //end inner class AntLibraryHandler
-    }
-
-
-    /**
-     * this class is used for alias elements
-     *
-     * @author slo
-     * @created 11 November 2001
-     */
-    public static class Alias {
-        /**
-         * Description of the Field
-         */
-        private String name;
-        /**
-         * Description of the Field
-         */
-        private String as;
-
-
-        /**
-         * Sets the Name attribute of the Alias object
-         *
-         * @param name The new Name value
-         */
-        public void setName(String name) {
-            this.name = name;
-        }
-
-
-        /**
-         * Sets the As attribute of the Alias object
-         *
-         * @param as The new As value
-         */
-        public void setAs(String as) {
-            this.as = as;
-        }
-    //end inner class alias
-    }
-
-//end class Antlib
-}
-
-
diff --git a/proposal/sandbox/antlib/src/main/org/apache/tools/ant/types/DataTypeAdapterTask.java b/proposal/sandbox/antlib/src/main/org/apache/tools/ant/types/DataTypeAdapterTask.java
deleted file mode 100644
index 4669a07..0000000
--- a/proposal/sandbox/antlib/src/main/org/apache/tools/ant/types/DataTypeAdapterTask.java
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2001 The Apache Software Foundation.  All rights 
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer. 
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:  
- *       "This product includes software developed by the 
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written 
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.types;
-
-import java.lang.reflect.Method;
-import org.apache.tools.ant.*;
-
-
-/**
- *  Use introspection to "adapt" a DataType to be accepted in a Task position
- *
- * @author j_a_fernandez@yahoo.com
- */
-public class DataTypeAdapterTask extends Task implements RoleAdapter {
-
-    Object proxy;
-    String id = null;
-    
-    /**
-     * Checks a class, whether it is suitable to be adapted.
-     *
-     * Throws a BuildException and logs as Project.MSG_ERR for
-     * conditions, that will cause the task execution to fail.
-     * Logs other suspicious conditions with Project.MSG_WARN.
-     */
-    public static void checkClass(final Class typeClass, 
-				  final Project project) {
-        // Any class can be used as a data type
-    }
-    
-    /**
-     * Do the execution.
-     */
-    public void execute() throws BuildException {
-	if (id != null) {
-	    // Need to re-register this reference
-	    // The container has register the Adapter instead
-            project.addReference(id, proxy);	    
-	}
-    }
-
-    /**
-     * Propagate configuration of Project
-     */
-    public void setProject(Project p) {
-	super.setProject(p);
-
-	// Check to see if the DataType has a setProject method to set
-	if (proxy instanceof ProjectComponent) {
-	    ((ProjectComponent)proxy).setProject(p);
-	    return;
-	}
-
-	// This may not be needed
-	// We are trying to set project even if is was not declared
-	// just like TaskAdapter does for beans, this is not done
-	// by the original code
-        Method setProjectM = null;
-        try {
-            Class c = proxy.getClass();
-            setProjectM = 
-                c.getMethod( "setProject", new Class[] {Project.class});
-            if(setProjectM != null) {
-                setProjectM.invoke(proxy, new Object[] {p});
-            }
-        } catch (NoSuchMethodException e) {
-            // ignore this if the class being used as a task does not have
-            // a set project method.
-        } catch( Exception ex ) {
-            log("Error setting project in " + proxy.getClass(), 
-                Project.MSG_ERR);
-            throw new BuildException( ex );
-        }
-    }
-    
-    /**
-     * Set the target object class
-     */
-    public void setProxy(Object o) {
-        this.proxy = o;
-    }
-
-    public Object getProxy() {
-        return this.proxy ;
-    }
-
-    public void setId(String id) {
-	log("Setting adapter id to: " + id, Project.MSG_DEBUG);
-	this.id = id;
-    }
-}
diff --git a/proposal/sandbox/antlib/src/testcases/build.xml b/proposal/sandbox/antlib/src/testcases/build.xml
deleted file mode 100644
index e0f34f2..0000000
--- a/proposal/sandbox/antlib/src/testcases/build.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0"?>
-
-<project name="local" default="libs" >
-
-  <taskdef name="antjar" classname="org.apache.tools.ant.taskdefs.Antjar" />
-  <property name="src" location="." />
-  <property name="classes" location="../../build/testcases" />
-  <property name="contrib" location="../../build/case_contrib.jar" />
-
-  <target name="libs" depends="compile" >
-    <antjar destfile="${contrib}" antxml="${src}/case-antlib.xml" >
-      <fileset dir="${classes}" >
-        <include name="org/**" />
-      </fileset>
-    </antjar>
-  </target>
-
-  <target name="compile" >
-    <mkdir dir="${classes}" />
-    <javac srcdir="${src}" destdir="${classes}" >
-     <include name="org/**/*.java" />
-    </javac>
-  </target>
-
-  <target name="clean" >
-    <delete dir="${classes}" />
-    <delete file='${contrib}'/>
-  </target>
-
-</project>
diff --git a/proposal/sandbox/antlib/src/testcases/case-antlib.xml b/proposal/sandbox/antlib/src/testcases/case-antlib.xml
deleted file mode 100644
index e5ae1e8..0000000
--- a/proposal/sandbox/antlib/src/testcases/case-antlib.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0"  ?>
-
-<antlib version="1.0" >
-  <task name="case" class="org.apache.ant.contrib.Case" />
-</antlib>
diff --git a/proposal/sandbox/antlib/src/testcases/case.xml b/proposal/sandbox/antlib/src/testcases/case.xml
deleted file mode 100644
index b289106..0000000
--- a/proposal/sandbox/antlib/src/testcases/case.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0"?>
-
-<project name="case-test" default="test" basedir=".">
-
-  <property name="value" value="task.xml" />
-
-  <target name="init">
-    <taskdef name="antlib" classname="org.apache.tools.ant.taskdefs.Antlib" />
-    <antlib file="../../build/case_contrib.jar" />
-  </target>
-
-  <target name="test" depends="init,case,test1,test2,test3">
-   <echo message="Value=${value}" />
-  </target>
-
-  <target name="case" >
-    <case property="value" >
-      <when value="task.xml" property="value.xml" />
-    </case>
-    <case property="location" >
-      <when value="loc" property="location.fail" />
-      <when value="" property="location.fail" />
-      <else property="location.unset" />
-    </case>
-  </target>
-
-  <target name="test1" if="value.xml">
-   <echo message="Value equals to itself" />
-  </target>
-
-  <target name="test2" if="location.fail">
-   <fail message="Location passed" />
-  </target>
-
-  <target name="test3" if="location.unset">
-   <echo message="Location does not exists" />
-  </target>
-
-</project>
diff --git a/proposal/sandbox/antlib/src/testcases/org/apache/ant/contrib/Case.java b/proposal/sandbox/antlib/src/testcases/org/apache/ant/contrib/Case.java
deleted file mode 100644
index e2363eb..0000000
--- a/proposal/sandbox/antlib/src/testcases/org/apache/ant/contrib/Case.java
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 1999 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.ant.contrib;
-
-import java.io.*;
-import java.util.*;
-import org.apache.tools.ant.*;
-import org.apache.tools.ant.types.*;
-
-/**
- * Will set one of the given properties depending on the result of testing
- * the value of another property.
- *
- * <!ELEMENT case (when*, else) >
- * <!ATTLIST case property CDATA #REQUIRED > The name of the property to test
- * <!ELEMENT when EMPTY >
- * <!ATTLIST when value CDATA #REQUIRED > The value to compare and set prop.
- * <!ATTLIST when property CDATA #REQUIRED > The name of the property to set
- * <!ELEMENT else EMPTY >
- * <!ATTLIST else property CDATA #REQUIRED > The name of the property to set otherwise
- * <!ATTLIST else value CDATA #IMPLIED > The value to set; default "true".
- *
- * @author Jose Alberto Fernandez <a href="mailto:jfernandez@viquity.com">jfernandez@viquity.com</a>
- */
-
-public class Case extends Task {
-
-    public class When {
-      private String property;
-      private String value;
-
-      public void setProperty(String name) {
-        property = name;
-      }
-
-      public String getProperty() {
-        return property;
-      }
-
-      public void setValue(String val) {
-        value = val;
-      }
-
-      public String getValue() {
-        return value;
-      }
-
-      public boolean tryCase(String caseValue) throws BuildException {
-        if (property == null)
-          throw new BuildException("Property attribute is mandatory");
-
-        if (value == null)
-          throw new BuildException("Value attribute is mandatory");
-
-        if (!value.equals(caseValue)) return false;
-
-        if (getProject().getProperty(property) == null) {
-          getProject().setProperty(property, value);
-        } else {
-          log("Override ignored for " + property, Project.MSG_VERBOSE);
-        }
-        return true;
-      }       
-
-      public void doElse() throws BuildException {
-        if (property == null)
-          throw new BuildException("Property attribute is mandatory");
-
-        String elseValue = (value == null) ? "true" : value;
-
-        if (getProject().getProperty(property) == null) {
-          getProject().setProperty(property, elseValue);
-        } else {
-          log("Override ignored for " + property, Project.MSG_VERBOSE);
-        }
-      }
-    }
-      
-    private String caseProperty;
-    private Vector whenList = new Vector();
-    private When elseCase = null;
-
-    public When createWhen() throws BuildException {
-      When w = new When();
-      whenList.addElement(w);
-      return w;
-    }
-
-    public When createElse() throws BuildException {
-      if (elseCase != null) 
-        throw new BuildException("Only one else element allowed per case");
-
-      return (elseCase = new When());
-    }
-
-    public void setProperty(String property) {
-        this.caseProperty = property;
-    }
-
-    public void execute() throws BuildException {
-        if (caseProperty == null) {
-            throw new BuildException("property attribute is required", 
-                                     location);
-        }
-        
-        String caseValue = getProject().getProperty(caseProperty);
-
-        for (Enumeration e = whenList.elements(); e.hasMoreElements(); ) {
-          When w = (When)e.nextElement();
-          if (w.tryCase(caseValue)) return;
-        }
-        
-        if (elseCase != null)
-          elseCase.doElse();
-    }
-
-}
diff --git a/proposal/sandbox/clearcase/build.sh b/proposal/sandbox/clearcase/build.sh
deleted file mode 100644
index f15a7e7..0000000
--- a/proposal/sandbox/clearcase/build.sh
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/bin/sh
-
-cygwin=false;
-case "`uname`" in
-  CYGWIN*) cygwin=true ;;
-esac
-
-PWD=`pwd`
-if $cygwin ; then
-    PWD=`cygpath --windows "$PWD"`
-fi
-
-cd ../../..
-/bin/sh ./build.sh -buildfile $PWD/build.xml $*
-cd $PWD
-
diff --git a/proposal/sandbox/clearcase/build.xml b/proposal/sandbox/clearcase/build.xml
deleted file mode 100644
index afbd817..0000000
--- a/proposal/sandbox/clearcase/build.xml
+++ /dev/null
@@ -1,62 +0,0 @@
-<project name="clearcase-proposal" basedir="." default="compile">
-  <property file=".ant.properties"/>
-  <property file="${user.home}/.ant.properties"/>
-  
-  <!--property name="build.sysclasspath" value="ignore"/-->
-  <property name="build.compiler" value="jikes"/>
-  <!--property name="build.compiler.emacs" value="on"/-->
-  <property name="build.compiler.pedantic" value="true"/>
-  <property name="build.compiler.depend" value="true"/>
-  <property name="build.compiler.fulldepend" value="true"/>
-
-  <property name="debug" value="on"/>
-  <property name="optimize" value="off"/>
-  <property name="deprecation" value="on"/>
-
-  <property name="build.dir" value="build"/>
-  <property name="build.lib" value="${build.dir}/lib"/>
-  <property name="build.src" value="${build.dir}/src"/>
-  <property name="build.classes" value="${build.dir}/classes"/>
-  <property name="build.dist" value="${build.dir}/dist"/>
-
-  <property name="java.dir" value="src/java"/>
-  <property name="tests.dir" value="src/testcases"/>
-  <property name="ant.base.dir" location="../../.."/>
-  <property name="lib.dir" location="${ant.base.dir}/lib"/>
-  <property name="bootstrap.dir" location="${ant.base.dir}/bootstrap"/>
-  
-  <path id="project.class.path">
-    <pathelement path="${build.classes}" />
-    <fileset dir="${lib.dir}" includes="**/*.jar"/>
-    <fileset dir="${bootstrap.dir}/lib" includes="ant.jar"/>
-  </path>
-
-  <target name="compile"
-          description="--> compile the source code">
-    <mkdir dir="${build.classes}"/>
-    <javac srcdir="src/main"
-           destdir="${build.classes}"
-           debug="${debug}"
-           optimize="${optimize}"
-           deprecation="${deprecation}"
-           includeantruntime="no">
-      <classpath refid="project.class.path"/>
-    </javac>
-  </target>
-  
-  <target name="dist"
-          depends="clean,compile"
-          description="--> create a jar">
-    <mkdir dir="${build.dist}"/>
-    <jar destfile="${build.dist}/cc-tasks.jar" basedir="${build.classes}"/>
-  </target>
-
-  <target name="clean"
-          description="--> cleans up build and dist directories">
-    <delete dir="${build.dir}" />
-    <delete>
-      <fileset dir="." includes="**/*.bak" defaultexcludes="no"/>
-    </delete>
-  </target>
-
-</project>
\ No newline at end of file
diff --git a/proposal/sandbox/clearcase/src/etc/testcases/cc-checkin.xml b/proposal/sandbox/clearcase/src/etc/testcases/cc-checkin.xml
deleted file mode 100644
index 3d38947..0000000
--- a/proposal/sandbox/clearcase/src/etc/testcases/cc-checkin.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<project name="cc-checkin" basedir="." default="noop"/>
-    
-    <!-- default value for test.dir, override to specify a cc location -->
-    <property name="test.dir" location="."/>
-    
-    <target name="noop"/>
-      
-    <target name="test-allcheckedout" description="should co all ci files">
-        <cc-checkin viewpath="${test.dir}" comment="test-allcheckedout">
-            <include name="**/*.cctest.ci"/>
-        </cc-checkin>
-    </target>
-
-    <target name="test-allcheckedin" description="should ci nothing"> 
-        <cc-checkin viewpath="${test.dir}" comment="test-allcheckedin">
-            <include name="**/*.cctest.co"/>
-        </cc-checkin>
-    </target>
-    
-    <target name="test-allprivate" description="should ci nothing">
-        <cc-checkin viewpath="${test.dir}" comment="test-allprivate">
-            <include name="**/*.cctest.private"/>
-        </cc-checkin>
-    </target>
-    
-    <target name="test-mix" description="should ci only co files">
-        <cc-checkin viewpath="${test.dir}">
-            <include name="**/*.cctest.private"/>
-            <include name="**/*.cctest.ci"/>
-            <include name="**/*.cctest.co"/>
-        </cc-checkin>        
-    </target>
-    
-</project>
\ No newline at end of file
diff --git a/proposal/sandbox/clearcase/src/etc/testcases/cc-checkout.xml b/proposal/sandbox/clearcase/src/etc/testcases/cc-checkout.xml
deleted file mode 100644
index 64e5410..0000000
--- a/proposal/sandbox/clearcase/src/etc/testcases/cc-checkout.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<project name="cc-checkout" basedir="." default="noop"/>
-    
-    <!-- default value for test.dir, override to specify a cc location -->
-    <property name="test.dir" location="."/>
-    
-    <target name="noop"/>
-      
-    <target name="test-allcheckedout" description="should co nothing">
-        <cc-checkout viewpath="${test.dir}" comment="test-allcheckedout">
-            <include name="**/*.cctest.ci"/>
-        </cc-checkout>
-    </target>
-
-    <target name="test-allcheckedin" description="should co all files"> 
-        <cc-checkout viewpath="${test.dir}" comment="test-allcheckedin">
-            <include name="**/*.cctest.co"/>
-        </cc-checkout>
-    </target>
-    
-    <target name="test-allprivate" description="should co nothing">
-        <cc-checkout viewpath="${test.dir}" comment="test-allprivate">
-            <include name="**/*.cctest.private"/>
-        </cc-checkout>
-    </target>
-    
-    <target name="test-mix" description="should co only ci files">
-        <cc-checkout viewpath="${test.dir}">
-            <include name="**/*.cctest.private"/>
-            <include name="**/*.cctest.ci"/>
-            <include name="**/*.cctest.co"/>
-        </cc-checkout>
-    </target>
-    
-</project>
\ No newline at end of file
diff --git a/proposal/sandbox/clearcase/src/etc/testcases/cc-mkelem.xml b/proposal/sandbox/clearcase/src/etc/testcases/cc-mkelem.xml
deleted file mode 100644
index fb953a5..0000000
--- a/proposal/sandbox/clearcase/src/etc/testcases/cc-mkelem.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<project name="cc-mkelem" basedir="." default="noop"/>
-    
-    <!-- default value for test.dir, override to specify a cc location -->
-    <property name="test.dir" location="."/>
-    
-    <target name="noop"/>
-      
-    <target name="test-allcheckedout" description="should mkelem nothing">
-        <cc-mkelem viewpath="${test.dir}" comment="test-allcheckedout">
-            <include name="**/*.cctest.ci"/>
-        </cc-mkelem>
-    </target>
-
-    <target name="test-allcheckedin" description="should mkelem nothing"> 
-        <cc-mkelem viewpath="${test.dir}" comment="test-allcheckedin">
-            <include name="**/*.cctest.co"/>
-        </cc-mkelem>
-    </target>
-    
-    <target name="test-allprivate" description="should mkelem all files">
-        <cc-mkelem viewpath="${test.dir}" comment="test-allprivate">
-            <include name="**/*.cctest.private"/>
-        </cc-mkelem>
-    </target>
-    
-    <target name="test-mix" description="should mkelem only private files">
-        <cc-mkelem viewpath="${test.dir}">
-            <include name="**/*.cctest.private"/>
-            <include name="**/*.cctest.ci"/>
-            <include name="**/*.cctest.co"/>
-        </cc-mkelem>        
-    </target>
-    
-</project>
\ No newline at end of file
diff --git a/proposal/sandbox/clearcase/src/main/org/apache/tools/ant/taskdefs/optional/clearcase/CCCheckin.java b/proposal/sandbox/clearcase/src/main/org/apache/tools/ant/taskdefs/optional/clearcase/CCCheckin.java
deleted file mode 100644
index dc8f1fa..0000000
--- a/proposal/sandbox/clearcase/src/main/org/apache/tools/ant/taskdefs/optional/clearcase/CCCheckin.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.clearcase;
-
-import java.util.Vector;
-
-import org.apache.tools.ant.BuildException;
-
-/**
- * Creates a permanent new version of an element
- *
- * @see http://clearcase.rational.com/doc/latest/ccase_ux/ccref/checkin.html
- *
- * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
- */
-public class CCCheckin extends CCMatchingTask {
-    private boolean nowarn = false;
-    private boolean ptime = false;
-    private boolean keep = false;
-    private boolean identical = true;
-
-    protected Vector getOptions(){
-        Vector v = new Vector();
-        v.addElement("ci");
-        if (nowarn){
-            v.addElement("-nowarn");
-        }
-        if (ptime){
-            v.addElement("-ptime");
-        }
-        if (comment != null){
-            v.addElement("-cfile");
-            v.addElement(commentFile.getPath());
-        }
-        if (keep){
-            v.addElement("-keep");
-        }
-        if (identical){
-            v.addElement("-identical");
-        }
-        v.addElement("<pname>");
-        return v;
-    }
-
-    protected void execute(String[] args, CCFile file) throws BuildException {
-        args[args.length - 1] = file.getPath();
-        CmdResult res = CCUtils.cleartool(args);
-        if (res.getStatus() != 0){
-            throw new BuildException(res.getStdErr());
-        }
-    }
-
-    protected boolean accept(CCFile file) {
-        return file.isCheckedOut();
-    }
-
-    // bean setters
-    public void setNowarn(boolean nowarn) {
-        this.nowarn = nowarn;
-    }
-
-    public void setPtime(boolean ptime) {
-        this.ptime = ptime;
-    }
-
-    public void setKeep(boolean keep) {
-        this.keep = keep;
-    }
-
-    public void setIdentical(boolean identical) {
-        this.identical = identical;
-    }
-}
\ No newline at end of file
diff --git a/proposal/sandbox/clearcase/src/main/org/apache/tools/ant/taskdefs/optional/clearcase/CCCheckout.java b/proposal/sandbox/clearcase/src/main/org/apache/tools/ant/taskdefs/optional/clearcase/CCCheckout.java
deleted file mode 100644
index 481b4d1..0000000
--- a/proposal/sandbox/clearcase/src/main/org/apache/tools/ant/taskdefs/optional/clearcase/CCCheckout.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.clearcase;
-
-import java.util.Vector;
-
-/**
- * Creates a modifiable copy of a version
- *
- * @see http://clearcase.rational.com/doc/latest/ccase_ux/ccref/checkout.html
- *
- * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
- */
-public class CCCheckout extends CCMatchingTask {
-    private boolean reserved = true;
-    private String branch = null;
-    private boolean version = false;
-    private boolean nwarn = false;
-    private String out = null;
-    private boolean ndata = false;
-    private boolean ptime = false;
-
-    protected Vector getOptions(){
-        Vector v = new Vector();
-        v.addElement("co");
-        v.addElement(reserved ? "-reserved":"-unreserved");
-        if (nwarn){
-            v.addElement("-nwarn");
-        }
-        if (branch != null){
-            v.addElement("-branch");
-            v.addElement(branch);
-        } else if (version) {
-            v.addElement("-version");
-        }
-        if (out != null){
-            v.addElement("-out");
-            v.addElement(out);
-        } else if (ndata){
-            v.addElement("-ndata");
-        }
-        if (ptime){
-            v.addElement("-ptime");
-        }
-        v.addElement("<pname>");
-        return v;
-    }
-
-    protected boolean accept(CCFile file) {
-        return file.isCheckedIn();
-    }
-
-    // bean setters
-    public void setPtime(boolean ptime) {
-        this.ptime = ptime;
-    }
-
-    public void setReserved(boolean reserved) {
-        this.reserved = reserved;
-    }
-
-    public void setOut(String out) {
-        this.out = out;
-    }
-
-    public void setNdata(boolean ndata) {
-        this.ndata = ndata;
-    }
-
-    public void setBranch(String branch) {
-        this.branch = branch;
-    }
-
-    public void setVersion(boolean version) {
-        this.version = version;
-    }
-
-    public void setNwarn(boolean nwarn) {
-        this.nwarn = nwarn;
-    }
-}
diff --git a/proposal/sandbox/clearcase/src/main/org/apache/tools/ant/taskdefs/optional/clearcase/CCFile.java b/proposal/sandbox/clearcase/src/main/org/apache/tools/ant/taskdefs/optional/clearcase/CCFile.java
deleted file mode 100644
index a227177..0000000
--- a/proposal/sandbox/clearcase/src/main/org/apache/tools/ant/taskdefs/optional/clearcase/CCFile.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.clearcase;
-
-import java.io.File;
-
-import org.apache.tools.ant.BuildException;
-
-/**
- * An extended file that gives state information.
- *
- * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
- */
-public class CCFile extends File {
-
-    /** is it checkedout */
-    private boolean checkedout;
-
-    /** is it under source control ? */
-    private boolean versioned;
-
-    /** was this file already described once ? */
-    private boolean described;
-
-    public CCFile(String parent, String child) {
-        super(parent, child);
-    }
-
-    public CCFile(File parent, String child) {
-        super(parent, child);
-    }
-
-    public CCFile(String pathname) {
-        super(pathname);
-    }
-
-    /**
-     * @return whether the file is checkedout. A non checkedout file
-     * does not imply it is a checkedin one.
-     * @see #isCheckedIn()
-     * @see #isVersioned()
-     */
-    public boolean isCheckedOut() {
-        if (!described){
-            refresh();
-        }
-        return checkedout;
-    }
-
-    /**
-     * @return whether the file is versioned or not.
-     */
-    public boolean isVersioned() {
-        if (!described){
-            refresh();
-        }
-        return versioned;
-    }
-
-    /**
-     * @return whether the file is checkedin or not. A non checkedin file
-     * does not imply it is a checkedout one.
-     * @see #isCheckedOut()
-     * @see #isVersioned()
-     */
-    public boolean isCheckedIn(){
-        return isVersioned() && !isCheckedOut();
-    }
-
-    /**
-     * Refresh the file status in case it changed since the
-     * first access.
-     */
-    public void refresh() {
-        String[] args = {"describe", "-fmt", "\"%m %o\"", getAbsolutePath() };
-        CmdResult res = CCUtils.cleartool(args);
-        if (res.getStatus() != 0){
-            throw new BuildException(res.getStdErr());
-        }
-        String stdout = res.getStdout();
-        versioned = (stdout.indexOf("view private object") == -1);
-        checkedout = (stdout.indexOf("checkout") != -1);
-    }
-}
diff --git a/proposal/sandbox/clearcase/src/main/org/apache/tools/ant/taskdefs/optional/clearcase/CCMatchingTask.java b/proposal/sandbox/clearcase/src/main/org/apache/tools/ant/taskdefs/optional/clearcase/CCMatchingTask.java
deleted file mode 100644
index 23970ab..0000000
--- a/proposal/sandbox/clearcase/src/main/org/apache/tools/ant/taskdefs/optional/clearcase/CCMatchingTask.java
+++ /dev/null
@@ -1,213 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.clearcase;
-
-import java.io.File;
-import java.util.Vector;
-import java.util.Hashtable;
-import java.util.Enumeration;
-
-import org.apache.tools.ant.taskdefs.MatchingTask;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.DirectoryScanner;
-
-/**
- * Base task for all Clearcase tasks involving multiple-file processing.
- *
- * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
- */
-public abstract class CCMatchingTask extends MatchingTask {
-    
-    /** view path to use. Equivalent to base directory of processing */
-    protected File viewpath;
-
-    /** cc helper tools */
-    protected CCUtils utils = new CCUtils(this);
-    
-    /** the set of collected files to checkin */
-    protected Hashtable files = null;
-
-    /** comments to use for the operation */
-    protected String comment = null;
-
-    /** the comment file created from the comments. It avoids escaping issues */
-    protected File commentFile;
-
-    /** cleartool options (and command as well) */
-    protected String[] options;
-
-    /**
-     * @return a vector of options representing the cleartool arguments.
-     * The last arguments is normally allocated and replaced at the last
-     * moment before running the command.
-     * @see #execute(String[], CCFile)
-     */
-    protected abstract Vector getOptions();
-    
-    /**
-     * @param file the clearcase file
-     * @return whether this file should be accepted or not by the
-     * command to restrict the file processing and errors. For
-     * example you might not want to checkin files that are
-     * already checked in and that are collected by the fileset
-     */
-    protected boolean accept(CCFile file){
-        return true;
-    }
-
-    public void execute() throws BuildException {
-        try {
-            preExecute();
-            doExecute();
-        } finally {
-            postExecute();
-        }
-    }
-    
-    /** check for attributes and builds the options array */
-    protected void preExecute() throws BuildException {
-        if (viewpath == null){
-            throw new BuildException("Invalid viewpath");
-        }
-        if (comment != null){
-            commentFile = CCUtils.createCommentFile(comment);
-        }
-        Vector v = getOptions();
-        options = new String[v.size()];
-        v.copyInto(options);
-    }
-    
-    /** clean up method calls after doExecute */
-    protected void postExecute(){
-        if (commentFile != null){
-            commentFile.delete();
-        }
-    }
-
-    /**
-     * The core processing. It loops over all files and calls
-     * <tt>execute(String[], CCFile)</tt>
-     */
-    protected void doExecute() throws BuildException {
-        Enumeration elems = getFiles().elements();
-        log("Processing " + files.size() + " elements...");
-        while ( elems.hasMoreElements() ){
-            execute(options, (CCFile)elems.nextElement());
-        }
-    }
-    
-    /**
-     * Calls the cleartool command with the appropriate parameters. Note the
-     * the last array element is supposed to be used by the filepath.
-     * @param args the cleartool command to execute. The last element being allocated
-     * and representing the filepath.
-     * @param file the file element to process.
-     * @throws BuildException thrown if an error occurs when processing the
-     * cleartool command.
-     */
-    protected void execute(String[] args, CCFile file) throws BuildException {
-        args[args.length - 1] = file.getPath();
-        CmdResult res = utils.cleartool(args);
-        if (res.getStatus() != 0){
-            throw new BuildException(res.getStdErr());
-        }
-    }
-
-    /**
-     * Restrict the set of files/directories to be processed.
-     * @return the set of files to be processed. The key is made up
-     * the filepath and the value is the <tt>CCFile</tt> instance.
-     * @see #accept(CCFile)
-     */
-    protected Hashtable getFiles(){
-        if (files != null){
-            return files;
-        }
-        files = new Hashtable();
-        DirectoryScanner ds = getDirectoryScanner(viewpath);
-        String[] includes = ds.getIncludedDirectories();
-        addElements(files, ds.getBasedir(), includes);
-        includes = ds.getIncludedFiles();
-        addElements(files, ds.getBasedir(), includes);
-        return files;
-    }
-
-    /**
-     * Helper method to restrict a set of relative elements and add them
-     * to a map.
-     * @param map the map w/ a path/CCFile mapping to add elements to.
-     * @param basedir the base directory for all elements in the array.
-     * @param elems the set of elements to restrict.
-     * @see #accept(CCFile)
-     */
-    protected void addElements(Hashtable map, File basedir, String[] elems){
-        for (int i = 0; i < elems.length; i++){
-            CCFile f = new CCFile(basedir, elems[i]);
-            if ( accept(f) ){
-                map.put(f.getPath(), f);
-            }
-        }
-    }
-
-// Ant bean setters
-    
-    public void setViewPath(File value){
-        this.viewpath = value;
-    }
-
-    public void setComment(String value){
-        comment = value;
-    }
-
-}
diff --git a/proposal/sandbox/clearcase/src/main/org/apache/tools/ant/taskdefs/optional/clearcase/CCMkelem.java b/proposal/sandbox/clearcase/src/main/org/apache/tools/ant/taskdefs/optional/clearcase/CCMkelem.java
deleted file mode 100644
index b8d6045..0000000
--- a/proposal/sandbox/clearcase/src/main/org/apache/tools/ant/taskdefs/optional/clearcase/CCMkelem.java
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.clearcase;
-
-import java.util.Vector;
-import java.util.Hashtable;
-import java.util.Enumeration;
-import java.io.File;
-
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.DirectoryScanner;
-import org.apache.tools.ant.types.FileSet;
-import org.apache.tools.ant.taskdefs.MatchingTask;
-
-/**
- * Creates a file or directory element.
- *
- * @see http://clearcase.rational.com/doc/latest/ccase_ux/ccref/mkelem.html
- *
- * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
- */
-public class CCMkelem extends CCMatchingTask {
-
-    private String type;
-
-    private boolean nocheckout;
-
-    private boolean checkin;
-
-    private boolean preserveTime;
-
-    private Hashtable codirs = new Hashtable();
-
-    public void execute(String[] args, CCFile file) throws BuildException {
-        CCFile parent = (CCFile)codirs.get(file.getParent());
-        if (parent == null){
-            parent = new CCFile(file.getParent());
-            if ( !parent.isVersioned() ){
-                // ensure versioned dir
-            } else if ( parent.isCheckedIn() ){
-                utils.checkout( parent );
-            }
-            codirs.put(parent.getPath(), parent);
-        }
-        args[args.length - 1] = file.getAbsolutePath();
-        CmdResult res = CCUtils.cleartool(args);
-        if (res.getStatus() != 0) {
-            throw new BuildException(res.getStdErr());
-        }
-
-    }
-
-    protected void postExecute() {
-        // checkin back all co directories
-        Enumeration dirs = codirs.elements();
-        while( dirs.hasMoreElements() ){
-            File dir = (File)dirs.nextElement();
-            utils.checkin( dir );
-        }
-        super.postExecute();
-    }
-
-    /** create the command line options based on user input */
-    protected Vector getOptions(){
-        Vector v = new Vector();
-        v.addElement("mkelem");
-        if (type != null){
-            v.addElement("-eltype");
-            v.addElement(type);
-        }
-        if (comment == null){
-            v.addElement("-nc");
-        } else {
-            commentFile = CCUtils.createCommentFile(comment);
-            v.addElement("-cfi");
-            v.addElement(commentFile.getAbsolutePath());
-        }
-        if (nocheckout){
-            v.addElement("-nco");
-        } else if (checkin){
-            v.addElement("-ci");
-            if (preserveTime){
-                v.addElement("-ptime");
-            }
-        }
-        v.addElement("<pname>"); // dummy arg for file
-        return v;
-    }
-
-// bean setters
-    public void setType(String value){
-        type = value;
-    }
-
-    public void setNoCheckout(boolean value){
-        nocheckout = value;
-    }
-
-    public void setCheckin(boolean value){
-        checkin = value;
-    }
-
-    public void setPreserveTime(boolean value){
-        preserveTime = value;
-    }
-
-
-}
diff --git a/proposal/sandbox/clearcase/src/main/org/apache/tools/ant/taskdefs/optional/clearcase/CCMklabel.java b/proposal/sandbox/clearcase/src/main/org/apache/tools/ant/taskdefs/optional/clearcase/CCMklabel.java
deleted file mode 100644
index 37cc84d..0000000
--- a/proposal/sandbox/clearcase/src/main/org/apache/tools/ant/taskdefs/optional/clearcase/CCMklabel.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.clearcase;
-
-import java.util.Vector;
-
-import org.apache.tools.ant.BuildException;
-
-/**
- * Attaches version labels to version of elements.
- *
- * @see http://clearcase.rational.com/doc/latest/ccase_ux/ccref/mklabel.html#2051
- *
- * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
- */
-public class CCMklabel extends CCMatchingTask {
-    private boolean replace = false;
-    private boolean follow = false;
-    private String version = null;
-    private boolean recurse = false;
-
-    protected Vector getOptions(){
-        Vector v = new Vector();
-        v.addElement("mklabel");
-        if (replace){
-            v.addElement("-replace");
-        }
-        if (recurse){
-            v.addElement("-recurse");
-        }
-        if (follow){
-            v.addElement("-follow");
-        }
-        if (comment != null){
-            v.addElement("-cfile");
-            v.addElement(commentFile.getPath());
-        }
-        if (version != null){
-            v.addElement("-version");
-            v.addElement(version);
-        }
-        v.addElement("<pname>");
-        return v;
-    }
-
-    protected void doExecute() throws BuildException {
-        // not very nice, but we'll try to speed up things
-        // by assuming a recurse is set only to the viewpath.
-        if (recurse){
-            options[options.length - 1] = viewpath.getPath();
-            utils.cleartool(options);
-        } else {
-            super.doExecute();
-        }
-    }
-
-    protected boolean accept(CCFile file) {
-        //@fixme does it fail on checkedout files ?
-        return file.isVersioned();
-    }
-    //  bean setters
-
-    public void setRecurse(boolean value){
-        recurse = value;
-    }
-    public void setVersion(String value){
-        version = value;
-    }
-    public void setReplace(boolean value){
-        replace = value;
-    }
-    public void setFollow(boolean value){
-        follow = value;
-    }
-}
diff --git a/proposal/sandbox/clearcase/src/main/org/apache/tools/ant/taskdefs/optional/clearcase/CCRmname.java b/proposal/sandbox/clearcase/src/main/org/apache/tools/ant/taskdefs/optional/clearcase/CCRmname.java
deleted file mode 100644
index a11d281..0000000
--- a/proposal/sandbox/clearcase/src/main/org/apache/tools/ant/taskdefs/optional/clearcase/CCRmname.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.clearcase;
-
-import java.util.Vector;
-import java.util.Hashtable;
-import java.util.Enumeration;
-import java.io.File;
-
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.DirectoryScanner;
-import org.apache.tools.ant.taskdefs.MatchingTask;
-import org.apache.tools.ant.types.FileSet;
-
-/**
- * Removes the name of an element or VOB symbolic link from a directory version
- *
- * @see http://clearcase.rational.com/doc/latest/ccase_ux/ccref/rmname.html
- *
- * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
- */
-public class CCRmname extends CCMatchingTask {
-
-    private boolean force = false;
-
-    /** used to cache co directories */
-    private Hashtable codirs = new Hashtable();
-
-    protected Vector getOptions() {
-        Vector v = new Vector();
-        v.addElement("rmname");
-        if (comment != null){
-            v.addElement("-cfile");
-            v.addElement(commentFile.getPath());
-        } else {
-            v.addElement("-comment");
-            v.addElement(CCUtils.DEFAULT_COMMENT);
-        }
-        if (force){
-            v.addElement("-f");
-        }
-        v.addElement("<pname>");
-        return v;
-    }
-
-    public void execute(String[] args, CCFile file) throws BuildException {
-        CCFile parent = new CCFile(file.getParent());
-        // we have first to co the parent
-        if ( parent.isCheckedIn() ){
-            utils.checkout(parent);
-        }
-        // remove the element
-        args[args.length - 1] = file.getAbsolutePath();
-        CmdResult res = utils.cleartool(args);
-        // if it failed, unco otherwise ci the parent
-        if (res.getStatus() != 0){
-            utils.uncheckout(parent);
-            throw new BuildException(res.getStdErr());
-        } else {
-            utils.checkin(parent);
-        }
-    }
-
-    protected boolean accept(CCFile file){
-        return file.isCheckedIn();
-    }
-
-// bean setters
-    public void setForce(boolean value){
-        force = value;
-    }
-}
diff --git a/proposal/sandbox/clearcase/src/main/org/apache/tools/ant/taskdefs/optional/clearcase/CCUtils.java b/proposal/sandbox/clearcase/src/main/org/apache/tools/ant/taskdefs/optional/clearcase/CCUtils.java
deleted file mode 100644
index fa173a2..0000000
--- a/proposal/sandbox/clearcase/src/main/org/apache/tools/ant/taskdefs/optional/clearcase/CCUtils.java
+++ /dev/null
@@ -1,294 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.clearcase;
-
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.IOException;
-import java.io.Writer;
-import java.io.BufferedWriter;
-import java.io.FileWriter;
-import java.util.Hashtable;
-import java.util.Vector;
-import java.util.Enumeration;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.util.regexp.RegexpMatcher;
-import org.apache.tools.ant.util.regexp.RegexpMatcherFactory;
-import org.apache.tools.ant.util.StringUtils;
-import org.apache.tools.ant.util.FileUtils;
-import org.apache.tools.ant.taskdefs.Execute;
-import org.apache.tools.ant.taskdefs.ExecuteStreamHandler;
-import org.apache.tools.ant.taskdefs.PumpStreamHandler;
-
-/**
- * Helper methods related to clearcase commands.
- *
- * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
- */
-public final class CCUtils {
-
-    public final static String DEFAULT_COMMENT = "\"Automatic operation from Jakarta Ant\"";
-
-    private final static RegexpMatcherFactory __reFactory = new RegexpMatcherFactory();
-
-    /** the matchers cache: pattern/matcher */
-    private final static Hashtable matchers = new Hashtable();
-
-    private Task task;
-
-    public CCUtils(Task task){
-        this.task = task;
-    }
-
-    /**
-     * return a group of matches of a given RE in a string.
-     * @param pattern the pattern to match in the input data.
-     * @param input the data where to look for the pattern.
-     * @return the group of matches if any, 0 being the full match
-     * and the rest being parenthesized expressions. <tt>null</tt>
-     * if there are no matches.
-     */
-    public Vector matches(String pattern, String input){
-        RegexpMatcher matcher = (RegexpMatcher)matchers.get(pattern);
-        if (matcher == null){
-            matcher = __reFactory.newRegexpMatcher();
-            matcher.setPattern(pattern);
-            matchers.put(pattern, matcher);
-        }
-        return matcher.getGroups(input);
-    }
-
-    /**
-     * Try to resolve a symbolic link if it is one.
-     * @param toresolve the symbolic link to resolve.
-     * @return the resolved link if it is a symbolic link, otherwise
-     * return the original link.
-     */
-    public File resolveSymbolicLink(File toresolve) throws Exception {
-        String[] args = { "ls", "-l", toresolve.getAbsolutePath() };
-        CmdResult res = cleartool(args);
-        if (res.getStatus() != 0 ){
-            throw new BuildException(res.getStdErr());
-        }
-        Vector groups = matches("symbolic link(.*)-->(.*)", res.getStdout());
-        if (groups == null){
-            return toresolve; // or null ?
-        }
-        String path = (String)groups.elementAt(2);
-        path = path.trim();
-        File resolved = new File(path);
-        if ( !resolved.isAbsolute() ){
-            resolved = new File(toresolve.getParent(), path);
-        }
-        return resolved;
-    }
-
-    /**
-     * Move a file to another. (ie rename)
-     */
-    public void move(File from, File to) throws Exception {
-        String[] args = {"move", "-nc", from.getPath(), to.getPath()};
-        CmdResult res = cleartool(args);
-        if (res.getStatus() != 0) {
-            throw new BuildException(res.getStdErr());
-        }
-    }
-
-    /**
-     * return the list of checkedout files in a given viewpath.
-     * @param viewpath the path to the view/directory to look for
-     * checkedout files.
-     * @param recurse <tt>true</tt> to look for files recursively,
-     * otherwise <tt>false</tt>
-     * @return the list of checkedout files in the view (full pathname).
-     */
-    public Hashtable lsco(File viewpath, boolean recurse) {
-        String recurseParam = recurse ? "-r" : "";
-        String fullpath = viewpath.getAbsolutePath();
-        //@fixme is -cvi conflicting with -r ?
-        String[] args = {"lsco", recurseParam, "-cvi", "-s", "-me", fullpath};
-        CmdResult res = cleartool(args);
-        if (res.getStatus() != 0) {
-            throw new BuildException(res.getStdErr());
-        }
-
-        Vector lines = res.getStdoutLines();
-        Hashtable map = toFiles(lines);
-        return map;
-    }
-
-    /**
-     * Transform a set of paths into canonical paths.
-     * Typically this should be used to transform a set of
-     * output lines by cleartool representing file paths.
-     */
-    public static Hashtable toFiles(Vector paths){
-        Hashtable map = new Hashtable();
-        for (int i = 0; i < paths.size(); i++) {
-            String path = (String) paths.elementAt(i);
-            try {
-                // the path is normally the full path, we normally
-                // not need to do a new File(viewpath, path)
-                File f = new File(path);
-                path = f.getCanonicalPath();
-                map.put(path, path);
-            } catch (IOException e) {
-                // assume it's not a file...
-            }
-        }
-        return map;
-    }
-
-    /**
-     * Returns the list of files that are *not* checked out.
-     * @see #lsco(File, boolean)
-     */
-    public Hashtable lsnco(File viewpath){
-        String[] args = {"find", viewpath.getAbsolutePath(), "-type", "f", "-cvi", "-nxn", "-print"};
-        CmdResult res = cleartool(args);
-        Vector lines = res.getStdoutLines();
-        Hashtable all = toFiles(lines);
-        Hashtable co = lsco(viewpath, true);
-        // remove the co files
-        Enumeration keys = co.keys();
-        while ( keys.hasMoreElements() ){
-            Object path = keys.nextElement();
-            Object o = all.remove(path);
-            if (o == null){
-                // oops how come a co file is not found by find ?
-            }
-        }
-        return all;
-    }
-
-    /** returns the list of private files in the view */
-    public Hashtable lsprivate(File viewpath){
-        // for a snapshot view, we must use ls -r -view_only
-        return null;
-    }
-
-    public void checkin(File file){
-        String[] args = {"ci", "-nc", "-identical", file.getAbsolutePath()} ;
-        CmdResult res = cleartool(args);
-        if (res.getStatus() != 0){
-            throw new BuildException(res.getStdErr());
-        }
-    }
-
-    public void checkout(File file){
-        String[] args = {"co", "-nc", "-unreserved", file.getAbsolutePath()} ;
-        CmdResult res = cleartool(args);
-        if (res.getStatus() != 0){
-            throw new BuildException(res.getStdErr());
-        }
-    }
-
-    public void uncheckout(File file){
-        String[] args = {"unco", "-rm", file.getAbsolutePath() };
-        CmdResult res = cleartool(args);
-        if (res.getStatus() != 0){
-            throw new BuildException(res.getStdErr());
-        }
-    }
-
-    /**
-     * Helper method to execute a given cleartool command.
-     * @param args the parameters used to execute cleartool.
-     * @return the result of the command.
-     */
-    public static CmdResult cleartool(String[] args) {
-        String[] nargs = new String[args.length + 1];
-        nargs[0] = "cleartool";
-        System.arraycopy(args, 0, nargs, 1, args.length);
-
-        ByteArrayOutputStream out = new ByteArrayOutputStream();
-        ByteArrayOutputStream err = new ByteArrayOutputStream();
-        ExecuteStreamHandler handler = new PumpStreamHandler(out, err);
-        Execute exe = new Execute(handler);
-        exe.setCommandline(nargs);
-        try {
-            int retcode = exe.execute();
-            return new CmdResult(retcode, out.toString(), err.toString());
-        } catch (IOException e){
-            throw new BuildException(e);
-        }
-    }
-
-    /**
-     * Create the comment file used by cleartool commands.
-     */
-    public static File createCommentFile(String comment) {
-        FileUtils futils = FileUtils.newFileUtils();
-        File f = futils.createTempFile("ant_cc", ".tmp", new File("."));
-        Writer writer = null;
-        try {
-            writer = new BufferedWriter(new FileWriter(f));
-            writer.write(comment);
-            writer.flush();
-        } catch (IOException e){
-            throw new BuildException(e);
-        } finally {
-            if (writer != null){
-                try {
-                    writer.close();
-                } catch (IOException e){
-                }
-            }
-        }
-        return f;
-    }
-
-}
diff --git a/proposal/sandbox/clearcase/src/main/org/apache/tools/ant/taskdefs/optional/clearcase/CmdResult.java b/proposal/sandbox/clearcase/src/main/org/apache/tools/ant/taskdefs/optional/clearcase/CmdResult.java
deleted file mode 100644
index f1221b5..0000000
--- a/proposal/sandbox/clearcase/src/main/org/apache/tools/ant/taskdefs/optional/clearcase/CmdResult.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.clearcase;
-
-import java.util.Vector;
-
-import org.apache.tools.ant.util.StringUtils;
-
-/**
- *
- * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
- */
-public class CmdResult {
-
-    private String stdout;
-
-    private String stderr;
-
-    private int code = 0;
-
-    public CmdResult(int code, String stdout, String stderr){
-        this.code = code;
-        this.stdout = stdout;
-        this.stderr = stderr;
-    }
-
-    public String getStdout(){
-        return stdout;
-    }
-
-    public Vector getStdoutLines(){
-        return StringUtils.lineSplit(stdout);
-    }
-
-    public String getStdErr(){
-        return stderr;
-    }
-
-    public Vector getStdErrLines(){
-        return StringUtils.lineSplit(stderr);
-    }
-
-    public int getStatus(){
-        return code;
-    }
-
-}
diff --git a/proposal/sandbox/embed/ProjectComponentHelper.java b/proposal/sandbox/embed/ProjectComponentHelper.java
deleted file mode 100644
index 2c22d84..0000000
--- a/proposal/sandbox/embed/ProjectComponentHelper.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant;
-
-import java.io.File;
-import java.io.InputStream;
-import java.io.IOException;
-import java.util.Hashtable;
-import java.util.Vector;
-import java.util.Properties;
-import java.util.Enumeration;
-import java.util.Stack;
-import java.lang.reflect.Modifier;
-
-
-import org.apache.tools.ant.types.FilterSet; 
-import org.apache.tools.ant.types.FilterSetCollection; 
-import org.apache.tools.ant.util.FileUtils; 
-
-/** 
- * Abstract component creation and configuration. Multiple ComponentHelpers
- * can be registered in a project, either by an embedding application
- * or by taskdef-like tasks.
- *
- * After a ProjectComponentHelper is registered, it'll manage the construction and 
- * configuration of tasks/types/etc. It has full control over how the
- * component is created - and may provide runtime wrapping for components
- * not implementing the Task/DataType interfaces.
- * It works in close relation with TaskAdapter and RuntimeConfigurable
- * to handle delayed evaluation of tasks or custom attribute->task mapping.
- * If it returns a wrapper for Task, the wrapper is required to extend
- * TaskAdapter.
- *
- * The common 'Chain' pattern is used to construct
- * tasks, with the original behavior ( Class registry ) tried last, by the
- * default helper implementation.
- *
- * @author Costin Manolache
- */
-public abstract class ProjectComponentHelper  {
-
-    /** Creates an ant component..
-     *
-     * A factory may have knowledge about the tasks it creates. It can return
-     * an object extending TaskAdapter that emulates Task/DataType.
-     *
-     * @param project the context for task creation.
-     * @param role Class name for the expected role ( Task, Type, Filter, etc ). Null for 'any'
-     * @param ns namespace if a SAX2 parser is used, null for 'classical' ant
-     * @param taskName the (local) name of the task.
-     */
-    public abstract Object createProjectComponent( Project project,
-                                                   String role,
-                                                   String ns,
-                                                   String taskName )
-        throws BuildException;
-
-    /** Return true if we know how to create an Component in the
-     *  desired role. Used by ProjectHelpers to check if a given tag
-     *  is a type or a task
-     *
-     *  This is only required to forbid tasks to be at top level.
-     *  The current ProjectHelper also uses this internally, but that's
-     *  an implementation detail that can be avoided.
-     */
-    public boolean hasRole( Project project, String role, String ns, String name ) {
-        return false;
-    }
-
-    
-}
diff --git a/proposal/sandbox/embed/ProjectHelperImpl2.java b/proposal/sandbox/embed/ProjectHelperImpl2.java
deleted file mode 100644
index e3d6485..0000000
--- a/proposal/sandbox/embed/ProjectHelperImpl2.java
+++ /dev/null
@@ -1,1149 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.helper;
-
-import org.apache.tools.ant.*;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.util.Hashtable;
-import java.util.Vector;
-import java.util.Enumeration;
-import java.util.Locale;
-import java.util.Stack;
-import org.xml.sax.Locator;
-import org.xml.sax.InputSource;
-//import org.xml.sax.HandlerBase;
-import org.xml.sax.SAXParseException;
-import org.xml.sax.XMLReader;
-import org.xml.sax.SAXException;
-import org.xml.sax.DocumentHandler;
-import org.xml.sax.Attributes;
-import org.xml.sax.AttributeList;
-import org.xml.sax.helpers.XMLReaderAdapter;
-import org.xml.sax.helpers.DefaultHandler;
-import org.xml.sax.helpers.AttributeListImpl;
-
-import javax.xml.parsers.SAXParserFactory;
-import javax.xml.parsers.SAXParser;
-import javax.xml.parsers.ParserConfigurationException;
-
-/**
- * Original helper.
- *
- * @author duncan@x180.com
- */
-public class ProjectHelperImpl2 extends ProjectHelper {
-    /* Stateless */
-    
-    /** 
-     * Parser factory to use to create parsers.
-     * @see #getParserFactory
-     */
-    private static SAXParserFactory parserFactory = null;
-
-    /**
-     * Parses the project file, configuring the project as it goes.
-     * 
-     * @exception BuildException if the configuration is invalid or cannot 
-     *                           be read
-     */
-    public void parse(Project project, Object source) throws BuildException {
-        AntXmlContext context=new AntXmlContext();
-        if(source instanceof File) {
-            context.buildFile=(File)source;
-//         } else if( source instanceof InputStream ) {
-//         } else if( source instanceof URL ) {
-//         } else if( source instanceof InputSource ) {
-        } else {
-            throw new BuildException( "Source " + source.getClass().getName() +
-                                      " not supported by this plugin" );
-        }
-
-        FileInputStream inputStream = null;
-        InputSource inputSource = null;
-
-        context.project = project;
-        context.buildFile = new File(context.buildFile.getAbsolutePath());
-        context.buildFileParent = new File(context.buildFile.getParent());
-        
-        try {
-            /**
-             * SAX 2 style parser used to parse the given file. 
-             */
-            org.xml.sax.XMLReader parser;
-    
-            if (parserFactory == null) {
-                parserFactory = SAXParserFactory.newInstance();
-            }
-
-            SAXParser saxParser = parserFactory.newSAXParser();
-            parser =saxParser.getXMLReader();
-
-            String uri = "file:" + context.buildFile.getAbsolutePath().replace('\\', '/');
-            for (int index = uri.indexOf('#'); index != -1; index = uri.indexOf('#')) {
-                uri = uri.substring(0, index) + "%23" + uri.substring(index+1);
-            }
-            
-            inputStream = new FileInputStream(context.buildFile);
-            inputSource = new InputSource(inputStream);
-            inputSource.setSystemId(uri);
-            project.log("parsing buildfile " + context.buildFile + " with URI = " + uri, Project.MSG_VERBOSE);
-
-            DefaultHandler hb = new RootHandler(context);
-
-            parser.setContentHandler(hb);
-            parser.setEntityResolver(hb);
-            parser.setErrorHandler(hb);
-            parser.setDTDHandler(hb);
-            parser.parse(inputSource);
-        }
-        catch(ParserConfigurationException exc) {
-            throw new BuildException("Parser has not been configured correctly", exc);
-        }
-        catch(SAXParseException exc) {
-            Location location =
-                new Location(context.buildFile.toString(), exc.getLineNumber(), exc.getColumnNumber());
-
-            Throwable t = exc.getException();
-            if (t instanceof BuildException) {
-                BuildException be = (BuildException) t;
-                if (be.getLocation() == Location.UNKNOWN_LOCATION) {
-                    be.setLocation(location);
-                }
-                throw be;
-            }
-            
-            throw new BuildException(exc.getMessage(), t, location);
-        }
-        catch(SAXException exc) {
-            Throwable t = exc.getException();
-            if (t instanceof BuildException) {
-                throw (BuildException) t;
-            }
-            throw new BuildException(exc.getMessage(), t);
-        }
-        catch(FileNotFoundException exc) {
-            throw new BuildException(exc);
-        }
-        catch(IOException exc) {
-            throw new BuildException("Error reading project file", exc);
-        }
-        finally {
-            if (inputStream != null) {
-                try {
-                    inputStream.close();
-                }
-                catch (IOException ioe) {
-                    // ignore this
-                }
-            }
-        }
-    }
-
-    /**
-     * The common superclass for all SAX event handlers used to parse
-     * the configuration file. Each method just throws an exception, 
-     * so subclasses should override what they can handle.
-     *
-     * Each type of XML element (task, target, etc.) in Ant has
-     * a specific subclass.
-     *
-     * In the constructor, this class takes over the handling of SAX
-     * events from the parent handler and returns
-     * control back to the parent in the endElement method.
-     */
-    public static class AntHandler  {
-        /**
-         * Handles the start of an element. This base implementation just
-         * throws an exception.
-         * 
-         * @param tag The name of the element being started. 
-         *            Will not be <code>null</code>.
-         * @param attrs Attributes of the element being started.
-         *              Will not be <code>null</code>.
-         * 
-         * @exception SAXParseException if this method is not overridden, or in
-         *                              case of error in an overridden version
-         */
-        public void onStartElement(String uri, String tag, String qname,
-                                   Attributes attrs,
-                                   AntXmlContext context)
-            throws SAXParseException
-        {
-            throw new SAXParseException("Unexpected element \" " + qname + "\"", context.locator);
-        }
-
-        /**
-         * Handles the start of an element. This base implementation just
-         * throws an exception.
-         * 
-         * @param tag The name of the element being started. 
-         *            Will not be <code>null</code>.
-         * @param attrs Attributes of the element being started.
-         *              Will not be <code>null</code>.
-         * 
-         * @exception SAXParseException if this method is not overridden, or in
-         *                              case of error in an overridden version
-         */
-        public AntHandler onStartChild(String uri, String tag, String qname,
-                                       Attributes attrs,
-                                       AntXmlContext context)
-            throws SAXParseException
-        {
-            throw new SAXParseException("Unexpected element \"" + qname + " \"", context.locator);
-        }
-
-        /**
-         * Called when this element and all elements nested into it have been
-         * handled.
-         */
-        public void onEndElement(String uri, String tag, AntXmlContext context) {
-        }
-
-        /**
-         * Handles text within an element. This base implementation just
-         * throws an exception.
-         * 
-         * @param buf A character array of the text within the element.
-         *            Will not be <code>null</code>.
-         * @param start The start element in the array.
-         * @param count The number of characters to read from the array.
-         * 
-         * @exception SAXParseException if this method is not overridden, or in
-         *                              case of error in an overridden version
-         */
-        public void characters(char[] buf, int start, int count, AntXmlContext context)
-            throws SAXParseException
-        {
-            String s = new String(buf, start, count).trim();
-
-            if (s.length() > 0) {
-                throw new SAXParseException("Unexpected text \"" + s + "\"", context.locator);
-            }
-        }
-    }
-
-    /** Context information for ant deserialization
-     */
-    public static class AntXmlContext {
-        /** The project to configure. */
-        Project project;
-        /** The configuration file to parse. */
-        File buildFile;
-        /** 
-         * Parent directory of the build file. Used for resolving entities
-         * and setting the project's base directory.
-         */
-        File buildFileParent;
-        /** 
-         * Locator for the configuration file parser. 
-         * Used for giving locations of errors etc.
-         */
-        Locator locator;
-
-        /**
-         * Scans an attribute list for the <code>id</code> attribute and 
-         * stores a reference to the target object in the project if an
-         * id is found.
-         * <p>
-         * This method was moved out of the configure method to allow
-         * it to be executed at parse time.
-         * 
-         * @see #configure(Object,AttributeList,Project)
-         */
-        void configureId(Object target, Attributes attr) {
-            String id = attr.getValue("id");
-            if (id != null) {
-                project.addReference(id, target);
-            }
-        }
-
-    }
-    
-    
-    /**
-     * Handler for ant processing. Uses a stack of AntHandlers to
-     * implement each element ( the original parser used a recursive behavior,
-     * with the implicit execution stack )
-     */
-    public static class RootHandler extends DefaultHandler {
-        Stack antHandlers=new Stack();
-        AntHandler currentHandler;
-        AntXmlContext context;
-        
-        public RootHandler(AntXmlContext context) {
-            currentHandler=new MainHandler();
-            antHandlers.push( currentHandler );
-            this.context=context;
-        }
-        
-        /**
-         * Resolves file: URIs relative to the build file.
-         * 
-         * @param publicId The public identifer, or <code>null</code>
-         *                 if none is available. Ignored in this 
-         *                 implementation.
-         * @param systemId The system identifier provided in the XML 
-         *                 document. Will not be <code>null</code>.
-         */
-        public InputSource resolveEntity(String publicId,
-                                         String systemId) {
-        
-            context.project.log("resolving systemId: " + systemId, Project.MSG_VERBOSE);
-        
-            if (systemId.startsWith("file:")) {
-                String path = systemId.substring(5);
-                int index = path.indexOf("file:");
-                
-                // we only have to handle these for backward compatibility
-                // since they are in the FAQ.
-                while (index != -1) {
-                    path = path.substring(0, index) + path.substring(index + 5);
-                    index = path.indexOf("file:");
-                }
-                
-                String entitySystemId = path;
-                index = path.indexOf("%23");
-                // convert these to #
-                while (index != -1) {
-                    path = path.substring(0, index) + "#" + path.substring(index + 3);
-                    index = path.indexOf("%23");
-                }
-
-                File file = new File(path);
-                if (!file.isAbsolute()) {
-                    file = new File(context.buildFileParent, path);
-                }
-                
-                try {
-                    InputSource inputSource = new InputSource(new FileInputStream(file));
-                    inputSource.setSystemId("file:" + entitySystemId);
-                    return inputSource;
-                } catch (FileNotFoundException fne) {
-                    context.project.log(file.getAbsolutePath()+" could not be found", 
-                                        Project.MSG_WARN);
-                }
-            }
-            // use default if not file or file not found
-            return null;
-        }
-
-        /**
-         * Handles the start of a project element. A project handler is created
-         * and initialised with the element name and attributes.
-         * 
-         * @param tag The name of the element being started. 
-         *            Will not be <code>null</code>.
-         * @param attrs Attributes of the element being started.
-         *              Will not be <code>null</code>.
-         * 
-         * @exception SAXParseException if the tag given is not 
-         *                              <code>"project"</code>
-         */
-        public void startElement(String uri, String tag, String qname, Attributes attrs)
-            throws SAXParseException
-        {
-            AntHandler next=currentHandler.onStartChild(uri, tag, qname, attrs, context);
-            antHandlers.push( currentHandler );
-            //System.out.println("XXX push " + currentHandler );
-            currentHandler=next;
-            currentHandler.onStartElement( uri, tag, qname, attrs, context );
-        }
-
-        /**
-         * Sets the locator in the project helper for future reference.
-         * 
-         * @param locator The locator used by the parser.
-         *                Will not be <code>null</code>.
-         */
-        public void setDocumentLocator(Locator locator) {
-            context.locator = locator;
-        }
-
-        /**
-         * Handles the end of an element. Any required clean-up is performed
-         * by the onEndElement() method and then the original handler is restored to
-         * the parser.
-         * 
-         * @param name The name of the element which is ending.
-         *             Will not be <code>null</code>.
-         * 
-         * @exception SAXException in case of error (not thrown in 
-         *                         this implementation)
-         * 
-         * @see #finished()
-         */
-        public void endElement(String uri, String name, String qName) throws SAXException {
-            currentHandler.onEndElement(uri, name, context);
-            AntHandler prev=(AntHandler)antHandlers.pop();
-            //System.out.println("XXX pop " + currentHandler + " " + prev);
-            currentHandler=prev;
-        }
-
-        public void characters(char[] buf, int start, int count)
-            throws SAXParseException
-        {
-            currentHandler.characters( buf, start, count, context );
-        }
-    }
-
-    public static class MainHandler extends AntHandler {
-
-        public void onStartElement(String uri, String tag, String qname,
-                                   Attributes attrs,
-                                   AntXmlContext context)
-            throws SAXParseException
-        {
-        }
-
-        public AntHandler onStartChild(String uri, String name, String qname,
-                                       Attributes attrs,
-                                       AntXmlContext context)
-            throws SAXParseException
-        {
-            if (qname.equals("project")) {
-                return new ProjectHandler();
-            } else {
-                throw new SAXParseException("Unexpected element \"" + qname + "\" " + name, context.locator);
-            }
-        }        
-    }
-    
-    /**
-     * Handler for the top level "project" element.
-     */
-    public static class ProjectHandler extends AntHandler {
-        
-        /**
-         * Initialisation routine called after handler creation
-         * with the element name and attributes. The attributes which
-         * this handler can deal with are: <code>"default"</code>,
-         * <code>"name"</code>, <code>"id"</code> and <code>"basedir"</code>.
-         * 
-         * @param tag Name of the element which caused this handler
-         *            to be created. Should not be <code>null</code>.
-         *            Ignored in this implementation.
-         * @param attrs Attributes of the element which caused this
-         *              handler to be created. Must not be <code>null</code>.
-         * 
-         * @exception SAXParseException if an unexpected attribute is 
-         *            encountered or if the <code>"default"</code> attribute
-         *            is missing.
-         */
-        public void onStartElement(String uri, String tag, String qname,
-                                   Attributes attrs,
-                                   AntXmlContext context)
-            throws SAXParseException
-        {
-            String def = null;
-            String name = null;
-            String id = null;
-            String baseDir = null;
-
-            if (! qname.equals("project")) {
-                throw new SAXParseException("Config file is not of expected XML type", context.locator);
-            }
-
-            for (int i = 0; i < attrs.getLength(); i++) {
-                String key = attrs.getQName(i);
-                String value = attrs.getValue(i);
-
-                if (key.equals("default")) {
-                    def = value;
-                } else if (key.equals("name")) {
-                    name = value;
-                } else if (key.equals("id")) {
-                    id = value;
-                } else if (key.equals("basedir")) {
-                    baseDir = value;
-                } else {
-                    throw new SAXParseException("Unexpected attribute \"" + attrs.getQName(i) + "\"", context.locator);
-                }
-            }
-
-            if (def == null) {
-                throw new SAXParseException("The default attribute of project is required", 
-                                            context.locator);
-            }
-            
-            Project project=context.project;
-            project.setDefaultTarget(def);
-
-            if (name != null) {
-                project.setName(name);
-                project.addReference(name, project);
-            }
-
-            if (id != null) {
-              project.addReference(id, project);
-            }
-
-            if (project.getProperty("basedir") != null) {
-                project.setBasedir(project.getProperty("basedir"));
-            } else {
-                if (baseDir == null) {
-                    project.setBasedir(context.buildFileParent.getAbsolutePath());
-                } else {
-                    // check whether the user has specified an absolute path
-                    if ((new File(baseDir)).isAbsolute()) {
-                        project.setBasedir(baseDir);
-                    } else {
-                        project.setBaseDir(project.resolveFile(baseDir,
-                                                               context.buildFileParent));
-                    }
-                }
-            }
-
-        }
-
-        /**
-         * Handles the start of a top-level element within the project. An
-         * appropriate handler is created and initialised with the details
-         * of the element.
-         * 
-         * @param tag The name of the element being started. 
-         *            Will not be <code>null</code>.
-         * @param attrs Attributes of the element being started.
-         *              Will not be <code>null</code>.
-         * 
-         * @exception SAXParseException if the tag given is not 
-         *            <code>"taskdef"</code>, <code>"typedef"</code>,
-         *            <code>"property"</code>, <code>"target"</code>
-         *            or a data type definition
-         */
-        public AntHandler onStartChild(String uri, String name, String qname,
-                                       Attributes attrs,
-                                       AntXmlContext context)
-            throws SAXParseException
-        {
-            if (qname.equals("taskdef")) {
-                return new TaskHandler(null, null, null);
-            } else if (qname.equals("typedef")) {
-                return new TaskHandler(null, null, null);
-            } else if (qname.equals("property")) {
-                return new TaskHandler(null, null, null);
-            } else if (qname.equals("target")) {
-                return new TargetHandler();
-            } else if (context.project.getDataTypeDefinitions().get(qname) != null) {
-                return new DataTypeHandler(null);
-            } else {
-                throw new SAXParseException("Unexpected element \"" + qname + "\" " + name, context.locator);
-            }
-        }
-    }
-
-    /**
-     * Handler for "target" elements.
-     */
-    public static class TargetHandler extends AntHandler {
-        private Target target;
-
-        /**
-         * Initialisation routine called after handler creation
-         * with the element name and attributes. The attributes which
-         * this handler can deal with are: <code>"name"</code>,
-         * <code>"depends"</code>, <code>"if"</code>,
-         * <code>"unless"</code>, <code>"id"</code> and 
-         * <code>"description"</code>.
-         * 
-         * @param tag Name of the element which caused this handler
-         *            to be created. Should not be <code>null</code>.
-         *            Ignored in this implementation.
-         * @param attrs Attributes of the element which caused this
-         *              handler to be created. Must not be <code>null</code>.
-         * 
-         * @exception SAXParseException if an unexpected attribute is encountered
-         *            or if the <code>"name"</code> attribute is missing.
-         */
-        public void onStartElement(String uri, String tag, String qname,
-                                   Attributes attrs,
-                                   AntXmlContext context)
-            throws SAXParseException
-        {
-            String name = null;
-            String depends = "";
-            String ifCond = null;
-            String unlessCond = null;
-            String id = null;
-            String description = null;
-
-            for (int i = 0; i < attrs.getLength(); i++) {
-                String key = attrs.getQName(i);
-                String value = attrs.getValue(i);
-
-                if (key.equals("name")) {
-                    name = value;
-                } else if (key.equals("depends")) {
-                    depends = value;
-                } else if (key.equals("if")) {
-                    ifCond = value;
-                } else if (key.equals("unless")) {
-                    unlessCond = value;
-                } else if (key.equals("id")) {
-                    id = value;
-                } else if (key.equals("description")) {
-                    description = value;
-                } else {
-                    throw new SAXParseException("Unexpected attribute \"" + key + "\"", context.locator);
-                }
-            }
-
-            if (name == null) {
-                throw new SAXParseException("target element appears without a name attribute",
-                                            context.locator);
-            }
-
-            target = new Target();
-            target.setName(name);
-            target.setIf(ifCond);
-            target.setUnless(unlessCond);
-            target.setDescription(description);
-            context.project.addTarget(name, target);
-
-            if (id != null && !id.equals("")) {
-                context.project.addReference(id, target);
-            }
-
-            // take care of dependencies
-
-            if (depends.length() > 0) {
-                target.setDepends(depends);
-            }
-        }
-
-        /**
-         * Handles the start of an element within a target.
-         * 
-         * @param tag The name of the element being started. 
-         *            Will not be <code>null</code>.
-         * @param attrs Attributes of the element being started.
-         *              Will not be <code>null</code>.
-         * 
-         * @exception SAXParseException if an error occurs when initialising
-         *                              the appropriate child handler
-         */
-        public AntHandler onStartChild(String uri, String name, String qname,
-                                       Attributes attrs,
-                                       AntXmlContext context)
-            throws SAXParseException
-        {
-            if (context.project.getDataTypeDefinitions().get(qname) != null) {
-                return new DataTypeHandler(target);
-            } else {
-                return new TaskHandler(target, null, target);
-            }
-        }
-    }
-
-    /**
-     * Handler for all task elements.
-     */
-    public static class TaskHandler extends AntHandler {
-        /** Containing target, if any. */
-        private Target target;
-        /** 
-         * Container for the task, if any. If target is 
-         * non-<code>null</code>, this must be too.
-         */
-        private TaskContainer container;
-        /**
-         * Task created by this handler.
-         */
-        private Task task;
-        /**
-         * Wrapper for the parent element, if any. The wrapper for this 
-         * element will be added to this wrapper as a child.
-         */
-        private RuntimeConfigurable parentWrapper;
-        /**
-         * Wrapper for this element which takes care of actually configuring
-         * the element, if this element is contained within a target. 
-         * Otherwise the configuration is performed with the configure method.
-         * @see ProjectHelper#configure(Object,Attributes,Project)
-         */
-        private RuntimeConfigurable wrapper = null;
-        
-        /**
-         * Constructor.
-         * 
-         * @param parentHandler The handler which should be restored to the 
-         *                      parser at the end of the element. 
-         *                      Must not be <code>null</code>.
-         * 
-         * @param container     Container for the element. 
-         *                      May be <code>null</code> if the target is 
-         *                      <code>null</code> as well. If the
-         *                      target is <code>null</code>, this parameter
-         *                      is effectively ignored.
-         * 
-         * @param parentWrapper Wrapper for the parent element, if any.
-         *                      May be <code>null</code>. If the
-         *                      target is <code>null</code>, this parameter
-         *                      is effectively ignored.
-         * 
-         * @param target        Target this element is part of.
-         *                      May be <code>null</code>.
-         */
-        public TaskHandler(TaskContainer container, RuntimeConfigurable parentWrapper, Target target) {
-            this.container = container;
-            this.parentWrapper = parentWrapper;
-            this.target = target;
-        }
-
-        /**
-         * Initialisation routine called after handler creation
-         * with the element name and attributes. This configures
-         * the element with its attributes and sets it up with
-         * its parent container (if any). Nested elements are then
-         * added later as the parser encounters them.
-         * 
-         * @param tag Name of the element which caused this handler
-         *            to be created. Must not be <code>null</code>.
-         *            
-         * @param attrs Attributes of the element which caused this
-         *              handler to be created. Must not be <code>null</code>.
-         * 
-         * @exception SAXParseException in case of error (not thrown in
-         *                              this implementation)
-         */
-        public void onStartElement(String uri, String tag, String qname,
-                                   Attributes attrs,
-                                   AntXmlContext context)
-            throws SAXParseException
-        {
-            try {
-                task = context.project.createTask(qname);
-            } catch (BuildException e) {
-                // swallow here, will be thrown again in 
-                // UnknownElement.maybeConfigure if the problem persists.
-            }
-
-            if (task == null) {
-                task = new UnknownElement(qname);
-                task.setProject(context.project);
-                //XXX task.setTaskType(qname);
-                task.setTaskName(qname);
-            }
-
-            task.setLocation(new Location(context.buildFile.toString(),
-                                          context.locator.getLineNumber(),
-                                          context.locator.getColumnNumber()));
-            context.configureId(task, attrs);
-
-            // Top level tasks don't have associated targets
-            if (target != null) {
-                task.setOwningTarget(target);
-                container.addTask(task);
-                task.init();
-                wrapper = task.getRuntimeConfigurableWrapper();
-                wrapper.setAttributes(sax1Attributes(attrs));
-                if (parentWrapper != null) {
-                    parentWrapper.addChild(wrapper);
-                }
-            } else {
-                task.init();
-                ProjectHelper.configure(task, sax1Attributes(attrs), context.project);
-            }
-        }
-
-        /**
-         * Executes the task if it is a top-level one.
-         */
-        public void onEndElement(String uri, String tag, AntXmlContext context) {
-            if (task != null && target == null) {
-                task.execute();
-            }
-        }
-
-        /**
-         * Adds text to the task, using the wrapper if one is
-         * available (in other words if the task is within a target) 
-         * or using addText otherwise.
-         * 
-         * @param buf A character array of the text within the element.
-         *            Will not be <code>null</code>.
-         * @param start The start element in the array.
-         * @param count The number of characters to read from the array.
-         * 
-         * @exception SAXParseException if the element doesn't support text
-         * 
-         * @see ProjectHelper#addText(Project,Object,char[],int,int)
-         */
-        public void characters(char[] buf, int start, int count,
-                               AntXmlContext context)
-            throws SAXParseException
-        {
-            if (wrapper == null) {
-                try {
-                    ProjectHelper.addText(context.project, task, buf, start, count);
-                } catch (BuildException exc) {
-                    throw new SAXParseException(exc.getMessage(), context.locator, exc);
-                }
-            } else {
-                wrapper.addText(buf, start, count);
-            }
-        }
-        
-        /**
-         * Handles the start of an element within a target. Task containers
-         * will always use another task handler, and all other tasks
-         * will always use a nested element handler.
-         * 
-         * @param tag The name of the element being started. 
-         *            Will not be <code>null</code>.
-         * @param attrs Attributes of the element being started.
-         *              Will not be <code>null</code>.
-         * 
-         * @exception SAXParseException if an error occurs when initialising
-         *                              the appropriate child handler
-         */
-        public AntHandler onStartChild(String uri, String tag, String qname,
-                                       Attributes attrs,
-                                       AntXmlContext context)
-            throws SAXParseException
-        {
-            if (task instanceof TaskContainer) {
-                // task can contain other tasks - no other nested elements possible
-                return new TaskHandler((TaskContainer)task, wrapper, target);
-            }
-            else {
-                return new NestedElementHandler(task, wrapper, target);
-            }
-        }
-    }
-
-    /**
-     * Handler for all nested properties.
-     */
-    public static class NestedElementHandler extends AntHandler {
-        /** Parent object (task/data type/etc). */
-        private Object parent;
-        /** The nested element itself. */
-        private Object child;
-        /**
-         * Wrapper for the parent element, if any. The wrapper for this 
-         * element will be added to this wrapper as a child.
-         */
-        private RuntimeConfigurable parentWrapper;
-        /**
-         * Wrapper for this element which takes care of actually configuring
-         * the element, if a parent wrapper is provided.
-         * Otherwise the configuration is performed with the configure method.
-         * @see ProjectHelper#configure(Object,Attributes,Project)
-         */
-        private RuntimeConfigurable childWrapper = null;
-        /** Target this element is part of, if any. */
-        private Target target;
-
-        /**
-         * Constructor.
-         * 
-         * @param parentHandler The handler which should be restored to the 
-         *                      parser at the end of the element. 
-         *                      Must not be <code>null</code>.
-         * 
-         * @param parent        Parent of this element (task/data type/etc).
-         *                      Must not be <code>null</code>.
-         * 
-         * @param parentWrapper Wrapper for the parent element, if any.
-         *                      May be <code>null</code>.
-         * 
-         * @param target        Target this element is part of.
-         *                      May be <code>null</code>.
-         */
-        public NestedElementHandler(Object parent,
-                                    RuntimeConfigurable parentWrapper,
-                                    Target target) {
-            if (parent instanceof TaskAdapter) {
-                this.parent = ((TaskAdapter) parent).getProxy();
-            } else {
-                this.parent = parent;
-            }
-            this.parentWrapper = parentWrapper;
-            this.target = target;
-        }
-
-        /**
-         * Initialisation routine called after handler creation
-         * with the element name and attributes. This configures
-         * the element with its attributes and sets it up with
-         * its parent container (if any). Nested elements are then
-         * added later as the parser encounters them.
-         * 
-         * @param tag Name of the element which caused this handler
-         *            to be created. Must not be <code>null</code>.
-         *            
-         * @param attrs Attributes of the element which caused this
-         *              handler to be created. Must not be <code>null</code>.
-         * 
-         * @exception SAXParseException in case of error, such as a 
-         *            BuildException being thrown during configuration.
-         */
-        public void onStartElement(String uri, String propType, String qname,
-                                   Attributes attrs,
-                                   AntXmlContext context)
-            throws SAXParseException
-        {
-            Class parentClass = parent.getClass();
-            IntrospectionHelper ih = 
-                IntrospectionHelper.getHelper(parentClass);
-
-            try {
-                String elementName = qname.toLowerCase(Locale.US);
-                if (parent instanceof UnknownElement) {
-                    UnknownElement uc = new UnknownElement(elementName);
-                    uc.setProject(context.project);
-                    ((UnknownElement) parent).addChild(uc);
-                    child = uc;
-                } else {
-                    child = ih.createElement(context.project, parent, elementName);
-                }
-
-                context.configureId(child, attrs);
-
-                if (parentWrapper != null) {
-                    childWrapper = new RuntimeConfigurable(child, qname);
-                    childWrapper.setAttributes(sax1Attributes(attrs));
-                    parentWrapper.addChild(childWrapper);
-                } else {
-                    ProjectHelper.configure(child, sax1Attributes(attrs), context.project);
-                    ih.storeElement(context.project, parent, child, elementName);
-                }
-            } catch (BuildException exc) {
-                throw new SAXParseException(exc.getMessage(), context.locator, exc);
-            }
-        }
-
-        /**
-         * Adds text to the element, using the wrapper if one is
-         * available or using addText otherwise.
-         * 
-         * @param buf A character array of the text within the element.
-         *            Will not be <code>null</code>.
-         * @param start The start element in the array.
-         * @param count The number of characters to read from the array.
-         * 
-         * @exception SAXParseException if the element doesn't support text
-         * 
-         * @see ProjectHelper#addText(Project,Object,char[],int,int)
-         */
-        public void characters(char[] buf, int start, int count,
-                               AntXmlContext context)
-            throws SAXParseException
-        {
-            if (parentWrapper == null) {
-                try {
-                    ProjectHelper.addText(context.project, child, buf, start, count);
-                } catch (BuildException exc) {
-                    throw new SAXParseException(exc.getMessage(), context.locator, exc);
-                }
-            } else {
-                childWrapper.addText(buf, start, count);
-            }
-        }
-
-        /**
-         * Handles the start of an element within this one. Task containers
-         * will always use a task handler, and all other elements
-         * will always use another nested element handler.
-         * 
-         * @param tag The name of the element being started. 
-         *            Will not be <code>null</code>.
-         * @param attrs Attributes of the element being started.
-         *              Will not be <code>null</code>.
-         * 
-         * @exception SAXParseException if an error occurs when initialising
-         *                              the appropriate child handler
-         */
-        public AntHandler onStartChild(String uri, String tag, String qname,
-                                       Attributes attrs,
-                                       AntXmlContext context)
-            throws SAXParseException
-        {
-            if (child instanceof TaskContainer) {
-                // taskcontainer nested element can contain other tasks - no other 
-                // nested elements possible
-                return new TaskHandler((TaskContainer)child, childWrapper, target);
-            }
-            else {
-                return new NestedElementHandler(child, childWrapper, target);
-            }
-        }
-    }
-
-    /**
-     * Handler for all data types directly subordinate to project or target.
-     */
-    public static class DataTypeHandler extends AntHandler {
-        /** Parent target, if any. */
-        private Target target;
-        /** The element being configured. */
-        private Object element;
-        /** Wrapper for this element, if it's part of a target. */
-        private RuntimeConfigurable wrapper = null;
-        
-        /**
-         * Constructor with a target specified.
-         * 
-         * @param target The parent target of this element.
-         *               May be <code>null</code>.
-         */
-        public DataTypeHandler( Target target) {
-            this.target = target;
-        }
-
-        /**
-         * Initialisation routine called after handler creation
-         * with the element name and attributes. This configures
-         * the element with its attributes and sets it up with
-         * its parent container (if any). Nested elements are then
-         * added later as the parser encounters them.
-         * 
-         * @param tag Name of the element which caused this handler
-         *            to be created. Must not be <code>null</code>.
-         *            
-         * @param attrs Attributes of the element which caused this
-         *              handler to be created. Must not be <code>null</code>.
-         * 
-         * @exception SAXParseException in case of error, such as a 
-         *            BuildException being thrown during configuration.
-         */
-        public void onStartElement(String uri, String propType, String qname,
-                                   Attributes attrs,
-                                   AntXmlContext context)
-            throws SAXParseException
-        {
-            try {
-                element = context.project.createDataType(qname);
-                if (element == null) {
-                    throw new BuildException("Unknown data type "+qname);
-                }
-                
-                if (target != null) {
-                    wrapper = new RuntimeConfigurable(element, qname);
-                    wrapper.setAttributes(sax1Attributes(attrs));
-                    target.addDataType(wrapper);
-                } else {
-                    ProjectHelper.configure(element, sax1Attributes(attrs), context.project);
-                    context.configureId(element, attrs);
-                }
-            } catch (BuildException exc) {
-                throw new SAXParseException(exc.getMessage(), context.locator, exc);
-            }
-        }
-
-        // XXX: (Jon Skeet) Any reason why this doesn't use the wrapper
-        // if one is available, whereas NestedElementHandler.characters does?
-        /**
-         * Adds text to the element.
-         * 
-         * @param buf A character array of the text within the element.
-         *            Will not be <code>null</code>.
-         * @param start The start element in the array.
-         * @param count The number of characters to read from the array.
-         * 
-         * @exception SAXParseException if the element doesn't support text
-         * 
-         * @see ProjectHelper#addText(Project,Object,char[],int,int)
-         */
-        public void characters(char[] buf, int start, int count,
-                               AntXmlContext context)
-            throws SAXParseException
-        {
-            try {
-                ProjectHelper.addText(context.project, element, buf, start, count);
-            } catch (BuildException exc) {
-                throw new SAXParseException(exc.getMessage(), context.locator, exc);
-            }
-        }
-
-        /**
-         * Handles the start of an element within this one.
-         * This will always use a nested element handler.
-         * 
-         * @param tag The name of the element being started. 
-         *            Will not be <code>null</code>.
-         * @param attrs Attributes of the element being started.
-         *              Will not be <code>null</code>.
-         * 
-         * @exception SAXParseException if an error occurs when initialising
-         *                              the child handler
-         */
-        public AntHandler onStartChild(String uri, String tag, String qname,
-                                       Attributes attrs, AntXmlContext context)
-            throws SAXParseException
-        {
-            return new NestedElementHandler(element, wrapper, target);
-        }
-    }
-
-    public static AttributeList sax1Attributes( Attributes sax2Att ) {
-        AttributeListImpl sax1Att=new AttributeListImpl();
-        int length = sax2Att.getLength();
-        if (length > 0) {
-            for (int i = 0; i < length; i++) {
-                // System.out.println("Attributes: " + sax2Att.getQName(i) + " " +
-                //                    sax2Att.getValue(i));
-                sax1Att.addAttribute( sax2Att.getQName(i), 
-                                      sax2Att.getType(i),
-                                      sax2Att.getValue(i));
-            }
-	}
-        return sax1Att;
-    }
-}
diff --git a/proposal/sandbox/embed/README b/proposal/sandbox/embed/README
deleted file mode 100644
index 35782ee..0000000
--- a/proposal/sandbox/embed/README
+++ /dev/null
@@ -1,2 +0,0 @@
-Copy the files in o.a.t.ant, recompile.
-
diff --git a/proposal/sandbox/filterreaders/README b/proposal/sandbox/filterreaders/README
deleted file mode 100644
index 5c1a5bf..0000000
--- a/proposal/sandbox/filterreaders/README
+++ /dev/null
@@ -1,82 +0,0 @@
-
-***** Filter Readers is now available in Ant's main development tree *****
-
-
-Ant Filter Readers
-==================
-
-Usecase:
-========
-* Usage of filtering has become a common pattern in 
-  Ant's tasks.  Filtering is being performed one way or
-  another in tasks like <copy>, <move>, <fixcrlf>,
-  <loadfile>, etc.
-
-* There is no generic way to add custom filters
-  currently to these tasks.  User has to either extend
-  the task to add custom filter processing or add
-  more attributes as needed to the task itself.
-  
-* If user is provided with a pluggable filtering
-  mechanism, changes to built-in tasks can be mininized,
-  while at the same time providing increased flexibility
-  to the user.
-
-Design:
-======
-* FilterChain is an ordered collection of 'AntFilterReader's and
-  'java.io.FilterReader's
-
-* Each AntFilterReader encloses the custom class representing 
-  the actual java.io.FilterReader and contains configuration 
-  parameters that may be used by the custom class if it
-  implements the org.apache.tools.ant.types.Parameterizable
-  interface.
-
-* For ease of use, Ant's core filter readers can
-  be used with a filter reader specific syntax also.
-  
-* Custom filter readers can be created easily even
-  without using any of Ant's API - all one needs to
-  do to create a custom filter is to extend 
-  java.io.FilterReader.
-  
-* If the extended class also implements Parameterizable,
-  operation parameters can be made available to the
-  custom filter.
-
-* Each FilterReader is piped through the other, if any, in
-  the chain, in the order of declaration.
-
-Example:
-=======
-
-<loadfile srcFile="foo" property="bar">
-    <filterchain>
-        <filterreader classname="org.apache.tools.ant.filters.StripLineComments">
-            <param type="comment" value="//"/>
-            <param type="comment" value="REM "/>
-            <param type="comment" value="--"/>
-        </filterreader>
-        <filterreader classname="org.apache.tools.ant.filters.StripLineBreaks"/>
-    </filterchain>
-</loadfile>
-
-The above example loads the contents of the file foo,
-filters out the lines that begin with //, REM and --,
-removes line breaks and then stores the result in
-the property named bar.
-
-Since StripLineComments and StripLineBreaks are built-in
-Ant filter readers, the same can also be represented as:
-
-<loadfile srcFile="foo" property="bar">
-    <filterchain>
-        <striplinecomments>
-            <comment value="//"/>
-            <comment value="REM "/>
-            <comment value="--"/>
-        </striplinecomments>
-        <striplinebreaks/>
-    </filterchain>
-</loadfile>
diff --git a/proposal/sandbox/httptasks/docs/manual/OptionalTasks/httptasks.html b/proposal/sandbox/httptasks/docs/manual/OptionalTasks/httptasks.html
deleted file mode 100644
index 2c089d6..0000000
--- a/proposal/sandbox/httptasks/docs/manual/OptionalTasks/httptasks.html
+++ /dev/null
@@ -1,429 +0,0 @@
-<html>
-<head>
-<title>Http Tasks</title>
-</head>
-<body>
-<h2>Http Tasks</h2>
-
-Tasks do to make the basic HTTP requests: get, post, head, put, with authentication.
-There is also a task to configure the proxy settings of the http tasks.
-<p>
-These tasks significantly extend the basic <a
-href="../CoreTasks/get.html">get task</a>, but are split off into the optional section
-so that
-<ol>
-<li> The core ant file doesn't get so big
-<li> this implementation can move to using an optional jar (HttpClient) to work around
-limitations of the HTTP support built in to the Java platform.   
-</ol>
-
-<h3>Core Functionality and Parameters</h3>
-
-<p>Common functionality to the core tasks tasks is </p>
-
-<ol>
-
-<li>Ability to name the remote url which the target of the request.</li>
-
-<li>Ability to name a local file as the local store of any returned
-content.</li>
-
-<li>Ability to name a property as the local store of any returned
-content.</li>
-
-<li>Ability to name a property to be set to &quot;true&quot; when a
-request succeeds.</li>
-
-<li>The option to list a number of parameters, each with a name and a
-value. Some methods (HttpGet, HttpHead) attach these parameters to the
-stated url to generate the url to actually fetch. Others (HttpPost) send
-the parameters up in the standard representation of form data.</li>
-
-<li>The option to state the authentication policy and then the username
-and password. Currently only basic authentication is used, which is
-utterly insecure except over an https link</li>
-
-<li>A 'verbose' option which provides extra information and progess
-information during a download.</li>
-
-<li>Timestamp control, using the <i>usetimestamp</i> flag. When set the
-timestamp of downloaded content is set to match that of the remote file
-(Java 1.2 or later only), and the local timestamp of the destination
-file (if it exists) used to set the if-modified-since header in the
-request, which will trigger optional download only. </li>
-
-</ol>
-
-<h3>Parameters</h3>
-
-<p> The <i>url</i> parameter specifies the URL to access. The optional
-<i>dest</i> parameter specifies a destination to which the retrieved
-page will be written. The optional <i>destinationproperty </i>parameter
-specifies a name of a property to save the content to, instead of a
-property. If neither <i>dest</i> nor <i>destinationproperty</i>
-specified, the contents of the specified URL are discarded (this is
-useful when accessing the URL for the purpose of causing some action on
-the remote server).</p>
-
-<p> When the <i>verbose</i> option is enabled, the task displays a '.' for every 
-  64 KB retrieved. If the <i>blocksize</i> parameter is adjusted then files are 
-  uploaded or downloaded in a different size block from this, and progress markers 
-  appear appropriately. </p>
-
-The <i>usetimestamp</i> option enables you to control downloads so that
-the remote file is only fetched if newer than the local copy. If there
-is no local copy, the download always takes place. When a file is
-downloaded, the timestamp of the downloaded file is set to the remote
-timestamp, if the JVM is Java1.2 or later. NB: This timestamp facility
-only works on downloads using the HTTP protocol.
-
-<p>The <i>authtype</i>, <i>username</i>, and <i>password</i> options enable support 
-  for password protected pages. Currently only 'Basic' authentication is used, 
-  which is notoriously insecure except over an encrypted https channel.</p>
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr> 
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td align="center" valign="top"><b>Required</b></td>
-  </tr>
-  <tr> 
-    <td valign="top">authtype</td>
-    <td valign="top">the HTTP authentication protocol to use, <i>none</i> or <i>basic</i>.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr> 
-    <td valign="top">blocksize</td>
-    <td valign="top">size (in kilobytes) of the data block used for upload and 
-      download. Default: 64.<br>
-      Keep this to a multiple of the hard disk sector size for file IO performance.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr> 
-    <td valign="top"><b>dest</b></td>
-    <td valign="top">the file where to store the retrieved file.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr> 
-    <td valign="top">destinationProperty</td>
-    <td valign="top">the name of a property to fill with the returned content. 
-      Ignored if <i>dest</i> is set</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr> 
-    <td valign="top">failonerror</td>
-    <td valign="top">stop the build if the request failed. default: true</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr> 
-    <td valign="top">password</td>
-    <td valign="top">the password for authentication.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr> 
-    <td valign="top">successProperty</td>
-    <td valign="top">the name of a property to set to &quot;true&quot; if the 
-      request succeeds.<br>
-      Set <i>failonerror</i> to false for this to be of use.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr> 
-    <td valign="top"><b>url</b></td>
-    <td valign="top">the URL from which to retrieve a file.</td>
-    <td align="center" valign="top">Yes</td>
-  </tr>
-  <tr> 
-    <td valign="top">usecaches</td>
-    <td valign="top">boolean to enable 'caching' of content during the fetch process. 
-      default:false</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr>
-    <td valign="top">useresponsecode</td>
-    <td valign="top">boolean to enable success/failure to be determined by result 
-      of the received response code. HTTP only. default=true.</td>
-    <td align="center" valign="top">&nbsp;</td>
-  </tr>
-  <tr> 
-    <td valign="top">username</td>
-    <td valign="top">the user name for authentication.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr> 
-    <td valign="top">usetimestamp</td>
-    <td valign="top">boolean flag to conditionally download a file based on the 
-      timestamp of the local copy. HTTP only</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-  <tr> 
-    <td valign="top">verbose</td>
-    <td valign="top"> boolean flag to control progress information display.</td>
-    <td align="center" valign="top">No</td>
-  </tr>
-</table>
-<p> The <i>successProperty</i> names a property which will be set to "true" if 
-  the request was deemed successful. For any non-http protocol, success is defined 
-  as the request completing. For http and https, success is defined as the request 
-  completing, and the response code from the serving being one of the 'success' 
-  values -any number between 200 and 299 inclusive. The usual HTTP_OK (200) is 
-  therefore a success, as is HTTP_ACCEPTED (202). But failures such as BAD_REQUEST 
-  (400) and the ubiquitous HTTP_NOT_FOUND (404) are most definately errors. So 
-  an attempt to access a missing url may result 'failure',even though some content 
-  was download (such as, perhaps, the 'file not found' text). If this is not what 
-  you desire, then set <i>useresponsecode</i>=&quot;false&quot; for the system 
-  to interpret any data back as a success. 
-<h3>Parameters specified as nested elements</h3>
-
-<p><b>param</b></p>
-
-<p>Specifies an HTTP request parameter to send as part of the request.
-For <i>get</i> and <i>head</i> request methods the parameters are
-encoded as part of the URL. For <i>post</i> request methods, the
-parameters are sent as the POST request data.</p>
-
-<table cellspacing="0" cellpadding="2" border="1">
-  <tbody>
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td valign="top" align="middle"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">name</td>
-    <td valign="top">the name of the request property to set.</td>
-    <td valign="top" align="middle">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">value</td>
-    <td valign="top">the value of the request property. You may alternatively
-      specify the value as text between the beginning and ending param tags.</td>
-    <td valign="center" align="middle">Yes</td>
-  </tr>
-  </tbody>
-</table>
-
-<p><b>header</b></p>
-
-<p>Specifies an arbitrary HTTP request header that will be sent with the
-request.</p>
-
-<table cellspacing="0" cellpadding="2" border="1">
-  <tr>
-    <td valign="top"><b>Attribute</b></td>
-    <td valign="top"><b>Description</b></td>
-    <td valign="top" align="middle"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top">name</td>
-    <td valign="top">the name of the HTTP request header</td>
-    <td valign="top" align="middle">Yes</td>
-  </tr>
-  <tr>
-    <td valign="top">value</td>
-    <td valign="top">the value of the HTTP request header. You may alternatively
-      specify the value as text between the beginning and ending header tags.</td>
-    <td valign="center" align="middle">Yes</td>
-  </tr>
-</table>
-<h3>Quirky Limitations of java.net classes</h3>
-Multiple HTTP headers can with the same name can <b>not</b> be set, even 
-though the protocol permits it. Java1.1 and Java 1.2 <i>may</i> permit multiple 
-cookies to be set, but this behaviour is explicitly not supported on Java1.3,
-as someone went and change the code to stop this (Java bug ID #4242254). 
-You need to set multiple cookies in one go and hope the far end can handle it
-<p>
-Bug ID #4160499 covers another issue, to wit: some versions of Java throw
-exceptions when an error code is greater than 400 and the dest file isn't
-one of a few simple file types, but Java 1.2 and 1.3 do not. So there
-is no way to get the error text when a jsp page throws some exception.
-<p>
-Also, although this isnt going to be filed until we have a short
-test case, but if you recieve a short response with less content than 
-the content-length header promises, the library seems to silently 
-reduce the content length header to match, which seems the wrong action.     
-
-  
-  
-<h2><a name="httpget">HttpGet</a></h2>
-<h3>Description</h3>
-
-<p>Accesses a URL to retrieve a file or to cause some action on the server.</p>
-
-<p> This task should be preferred above the <a href="#cvs">CVS task</a> when doing 
-  automated builds. CVS is significantly slower than loading a compressed archive 
-  with http/ftp. This task will also retrieve content using other supported protocols, 
-  such as ftp: and file: 
-<p>All the attributes of httptask may be used. Note that a quirk of the implementation 
-  of the http client in java makes it impossible to reliably fetch the response 
-  details from any unsuccessful request against a URL which doesn't end in '.htm,.html 
-  or .txt'. This means that if the task is used to compile jsp pages by issuing 
-  request against them, the text details of any errors will not be picked up. 
-<h3>Examples</h3>
-
-<pre>  &lt;httpget url=&quot;http://jakarta.apache.org/&quot; dest=&quot;help/index.html&quot;/&gt;</pre>
-<p>Fetches the index page of http://jakarta.apache.org/, and stores it in the 
-  file <code>help/index.html</code>. </p>
-
-<pre>    &lt;httpget src=&quot;http://jakarta.apache.org/builds/tomcat/nightly/ant.zip&quot;
-        dest=&quot;optional.jar&quot;
-        verbose=&quot;true&quot;
-        usetimestamp=&quot;true&quot;
-	&gt;
-        &lt;header name=&quot;Cookie&quot; value=&quot;someid=43ff2b&quot;/&gt;
-    &lt;/httpget&gt;</pre>
-<p> Retrieves the nightly ant build from the tomcat distribution, if the local 
-  copy is missing or out of date. Uses the verbose option for progress information. 
-  A cookie is supplied for the server's benefit.</p>
-<pre>    &lt;httpget url="https://www.pizzaservices.com/prices.jsp"
-         dest="pizza-prices.xml&quot;&gt;
-       &lt;param name=&quot;zipcode&quot;&gt;57340&lt;/param&gt;
-       &lt;param name=&quot;pizza&quot;&gt;pepperoni&lt;/param&gt;
-    &lt;/httpget&gt;</pre>
-<p>Builds a URL by adding parameters (&quot;?zipcode=57340&amp;pizza=pepperoni&quot;) 
-  to the base URL and then fetches the contents (fictional example)</p>
-<h2><a name="httphead">HttpHead</a> </h2>
-<p>The http HEAD request is similar to the normal GET request , except it, by 
-  definition, returns no content, just a success code and http headers. Accordingly, 
-  the destination properties of the base class -<i>dest</i> and -, <i>destinationpropertyname</i>) 
-  are not supported -any attempt to use them will result in a build failure. Note 
-  also that the http and https protocols are the only protocols supported. </p>
-<p>
-HttpHead is useful for triggering server side actions, but note that many servers
-interpret a HEAD very differently from a GET. An HttpGet request with the
-return data discarded is often a more reliable approach.
-</p>
-
-<p> Where head can be useful is in testing for the availability and reachability 
-  of servers, such as in the following test for apache being reachable, which 
-  sets a variable on success:- 
-<pre>
-    &lt;httphead url="http://www.apache.org/"
-    	 failonerror="false"
-    	 successproperty="reachable.apache"
-    	 /&gt;
-</pre>
-
-<p>Note that sometimes a missing file on a mis-configured server still generates 
-  a successful '200' response to a GET request -and returns a 'missing' file page, 
-  but a HEAD request will reliably pick up the 'missing file' error. </p>
-<h2><a name="httppost">HttpPost</a></h2>
-
-<p>This implements the POST request. Supplied parameter data is turned into form 
-  data and sent as the body of the request, rather than appended to the URL. If 
-  a file to upload is specified instead, using <i>uploadFile</i>, the parameter 
-  values are ignored. Instead the content type of the file is sent in the header 
-  -based on the <i>contentType</i> attribute or what the java runtime thinks the 
-  content type is based on the file extension. The file is uploaded. </p>
-
-<p>Like HttpGet, this command can return a content which can downloaded to a file,
-  to a property, or just ignored.</p>
-
-<p>This task adds two new attributes to the base set. </p>
-<table cellspacing="0" cellpadding="2" border="1">
-  <tr>
-    <td valign="top" width="78"><b>Attribute</b></td>
-    <td valign="top" width="559"><b>Description</b></td>
-    <td valign="top" align="middle" width="62"><b>Required</b></td>
-  </tr>
-  <tr>
-    <td valign="top" width="78">uploadFile</td>
-    <td valign="top" width="559">a file to upload. when specified, all parameters
-      are ignored.</td>
-    <td valign="top" align="middle" width="62">
-      <div align="center">no</div>
-    </td>
-  </tr>
-  <tr>
-    <td valign="top" width="78">contentType </td>
-    <td valign="top" width="559">the type of the content (text/html, text/xml,
-      application/binary, etc). Only of relevance when a file is being uploaded,
-      and still optional in that case. </td>
-    <td valign="center" align="middle" width="62">
-      <div align="center">no</div>
-    </td>
-  </tr>
-</table>
-<h3></h3>
-<pre>
-   &lt;httppost url=&quot;http://www.example.com/servlet/docserver&quot;
-           authtype=&quot;basic&quot; username=&quot;joe&quot; password=&quot;silly&quot;&gt;
-       &lt;param name=&quot;action&quot; value=&quot;getdoc&quot;/&gt;
-       &lt;param name=&quot;ISBN&quot;&gt;038550120X&lt;/param&gt;
-       &lt;param name=&quot;pages&quot;&gt;19-20&lt;/param&gt;
-       &lt;header name=&quot;Accept-Language&quot; value=&quot;en-us&quot;/&gt;
-   &lt;/httppost&gt;</pre>
-<p>Accesses a server at www.foo.com, passing a request to some servlet asking it
-to retrieve several pages from a stored book. An HTTP header specifying
-acceptable languages for the returned contents is also sent. Basic
-authentication is used with a user name of &quot;joe&quot; and a password of
-&quot;silly&quot;.</p>
-<p>
-<pre>    &lt;httppost url="https://www.pizzaservices.com"
-         uploadFile="pizza-order.xml"
-         contentType="text/xml"&gt;
-</pre>
-<p>Sends a pre-prepared order for a pizza to a pizza vendor accepting orders using 
-  xml-rpc requests. (NB: fictional example) </p>
-<h2><a name="SetProxy"></a>SetProxy</h2>
-<p>This task configures the proxy settings for all http tasks which follow it 
-  in the build. That includes the original Get task, but not the telnet and FTP 
-  tasks. The proxy settings remain in place until changed or the build finishes, 
-  and will also hold for other ant build files invoked and even non-forked java 
-  invocations, and even URL resolutions of XML parsers running in the same JVM
-  </p>
-<table cellspacing="0" cellpadding="2" border="1">
-  <tr> 
-    <td valign="top" width="78"><b>Attribute</b></td>
-    <td valign="top" width="559"><b>Description</b></td>
-    <td valign="top" align="middle" width="62"><b>Required</b></td>
-  </tr>
-  <tr> 
-    <td valign="top" width="78">proxyHost</td>
-    <td valign="top" width="559">hostname of a web/ftp proxy server</td>
-    <td valign="top" align="middle" width="62"> 
-      <div align="center">no</div>
-    </td>
-  </tr>
-  <tr> 
-    <td valign="top" width="78">proxyPort </td>
-    <td valign="top" width="559">integer; the port of the proxy server</td>
-    <td valign="center" align="middle" width="62"> 
-      <div align="center">no</div>
-    </td>
-  </tr>
-  <tr> 
-    <td valign="top" width="78">socksProxyHost</td>
-    <td valign="top" width="559">hostname of a SOCKS4 proxy server</td>
-    <td valign="center" align="middle" width="62"> 
-      <div align="center">no</div>
-    </td>
-  </tr>
-  <tr> 
-    <td valign="top" width="78">socksProxyPort</td>
-    <td valign="top" width="559">integer; port number of a SOCKS4 server (default=1080)</td>
-    <td valign="center" align="middle" width="62"> 
-      <div align="center">no</div>
-    </td>
-  </tr>
-</table>
-<h3></h3>
-<p>Turn off all proxies</p>
-<pre>    &lt;setproxy proxyhost=&quot;&quot; socksProxyHost=&quot;&quot; /&gt;</pre>
-<p>Set web proxy to 'web-proxy:80'; do not make any changes to existing socks 
-  settings (if any)</p>
-<pre>    &lt;setproxy proxyHost=&quot;web-proxy&quot; proxyPort=&quot;80&quot;/&gt;</pre>
-<p>Turn on socks</p>
-<pre>    &lt;setproxy socksProxyHost=&quot;socks-server&quot; socksProxyPort=&quot;1080&quot;/&gt;</pre>
-<p>Do nothing</p>
-<pre>    &lt;setproxy/&gt;</pre>
-<hr>
-<p align="center">Copyright &copy; 2000,2001 Apache Software Foundation. All rights
-Reserved.</p>
-
-</body>
-</html>
-
-
-
-
-
-
diff --git a/proposal/sandbox/httptasks/src/main/org/apache/tools/ant/taskdefs/optional/http/Base64Encode.java b/proposal/sandbox/httptasks/src/main/org/apache/tools/ant/taskdefs/optional/http/Base64Encode.java
deleted file mode 100644
index 40763e4..0000000
--- a/proposal/sandbox/httptasks/src/main/org/apache/tools/ant/taskdefs/optional/http/Base64Encode.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 1999-2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- * any, must include the following acknowlegement:
- * "This product includes software developed by the
- * Apache Software Foundation (http://www.apache.org/)."
- * Alternately, this acknowlegement may appear in the software itself,
- * if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- * Foundation" must not be used to endorse or promote products derived
- * from this software without prior written permission. For written
- * permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- * nor may "Apache" appear in their names without prior written
- * permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-
-package org.apache.tools.ant.taskdefs.optional.http;
-
-/**
- * This code handles Base64 encoding for basic authentication
- * and the like
- *
- * @author matth@pobox.com Matt Humphrey
- * @author steve_l@iseran.com Steve Loughran
- * @created 02 April 2001
- */
-class Base64Encode {
-
-    /**
-     * the encode alphabet
-     */
-    private char[] alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".toCharArray();
-
-
-    /**
-     * Encode a block of binary data as base64 as specified in RFC1521.
-     *
-     * @param data the binary data to encode.
-     * @return An array of characters that represent the data encoded
-     *      as Base64
-     */
-    public char[] encodeBase64(byte[] data) {
-        char[] out = new char[((data.length + 2) / 3) * 4];
-
-        //
-        // 3 bytes encode to 4 chars.  Output is always an even
-        // multiple of 4 characters.
-        //
-        for (int i = 0, index = 0; i < data.length; i += 3, index += 4) {
-            boolean quad = false;
-            boolean triple = false;
-            //convert to unsigned byte
-            int val = (0xFF & (int) data[i]);
-            val <<= 8;
-            if ((i + 1) < data.length) {
-                val |= (0xFF & (int) data[i + 1]);
-                triple = true;
-            }
-            val <<= 8;
-            if ((i + 2) < data.length) {
-                val |= (0xFF & (int) data[i + 2]);
-                quad = true;
-            }
-            out[index + 3] = alphabet[(quad ? (val & 0x3F) : 64)];
-            val >>= 6;
-            out[index + 2] = alphabet[(triple ? (val & 0x3F) : 64)];
-            val >>= 6;
-            out[index + 1] = alphabet[val & 0x3F];
-            val >>= 6;
-            out[index + 0] = alphabet[val & 0x3F];
-        }
-        return out;
-    }
-
-}
-
diff --git a/proposal/sandbox/httptasks/src/main/org/apache/tools/ant/taskdefs/optional/http/ContentGuesser.java b/proposal/sandbox/httptasks/src/main/org/apache/tools/ant/taskdefs/optional/http/ContentGuesser.java
deleted file mode 100644
index a9a6bd3..0000000
--- a/proposal/sandbox/httptasks/src/main/org/apache/tools/ant/taskdefs/optional/http/ContentGuesser.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 1999-2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- * any, must include the following acknowlegement:
- * "This product includes software developed by the
- * Apache Software Foundation (http://www.apache.org/)."
- * Alternately, this acknowlegement may appear in the software itself,
- * if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- * Foundation" must not be used to endorse or promote products derived
- * from this software without prior written permission. For written
- * permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- * nor may "Apache" appear in their names without prior written
- * permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.http;
-
-import java.io.IOException;
-import java.net.*;
-
-/**
- * this is a class to work around the fact a function I want (guessContentTypeFromName)
- * is protected.
- *
- * @author steve_l@iseran.com Steve Loughran
- * @created March 17, 2001
- */
-class ContentGuesser extends URLConnection {
-
-    /**
-     * stub Constructor for the ContentGuesser object
-     *
-     * @param url Description of Parameter
-     */
-    ContentGuesser(URL url) {
-        super(url);
-    }
-
-
-    /**
-     * this stub is needed for the build
-     *
-     * @exception IOException Description of Exception
-     */
-    public void connect()
-        throws IOException {
-    }
-
-
-    /**
-     * make a protected method public.
-     * This guesses file type from extension. It's ok for very
-     * well known types...
-     * @param filename file to guess type of
-     * @return what the system guessed
-     */
-    public static String guessContentType(String filename) {
-        return guessContentTypeFromName(filename);
-    }
-}
-
diff --git a/proposal/sandbox/httptasks/src/main/org/apache/tools/ant/taskdefs/optional/http/HttpAuthenticationStrategy.java b/proposal/sandbox/httptasks/src/main/org/apache/tools/ant/taskdefs/optional/http/HttpAuthenticationStrategy.java
deleted file mode 100644
index d15852b..0000000
--- a/proposal/sandbox/httptasks/src/main/org/apache/tools/ant/taskdefs/optional/http/HttpAuthenticationStrategy.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 1999-2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- * any, must include the following acknowlegement:
- * "This product includes software developed by the
- * Apache Software Foundation (http://www.apache.org/)."
- * Alternately, this acknowlegement may appear in the software itself,
- * if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- * Foundation" must not be used to endorse or promote products derived
- * from this software without prior written permission. For written
- * permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- * nor may "Apache" appear in their names without prior written
- * permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.http;
-
-import org.apache.tools.ant.BuildException;
-import java.net.URLConnection;
-
-/**
- * this interface is for use by classes which authenticate connections.
- *
- * @author matth@pobox.com Matt Humphrey
- * @author steve_l@iseran.com Steve Loughran
- * @created 20 March 2001
- */
-
-public interface HttpAuthenticationStrategy {
-
-
-    /**
-     * Sets the AuthenticationHeader attribute of the HttpAuthStrategy
-     * object
-     *
-     * @param requestConnection The current request
-     * @param responseConnection any previous request, which can contain a
-     *          challenge for the next round. Will often be null
-     * @param user the current user name
-     * @param password the current password
-     */
-    public void setAuthenticationHeader(URLConnection requestConnection,
-            URLConnection responseConnection,
-            String user, String password)
-            throws BuildException ;
-
-
-}
-
diff --git a/proposal/sandbox/httptasks/src/main/org/apache/tools/ant/taskdefs/optional/http/HttpBasicAuth.java b/proposal/sandbox/httptasks/src/main/org/apache/tools/ant/taskdefs/optional/http/HttpBasicAuth.java
deleted file mode 100644
index 553720e..0000000
--- a/proposal/sandbox/httptasks/src/main/org/apache/tools/ant/taskdefs/optional/http/HttpBasicAuth.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 1999-2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- * any, must include the following acknowlegement:
- * "This product includes software developed by the
- * Apache Software Foundation (http://www.apache.org/)."
- * Alternately, this acknowlegement may appear in the software itself,
- * if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- * Foundation" must not be used to endorse or promote products derived
- * from this software without prior written permission. For written
- * permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- * nor may "Apache" appear in their names without prior written
- * permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.http;
-
-import java.io.*;
-import java.net.*;
-import java.util.*;
-import org.apache.tools.ant.*;
-import org.apache.tools.ant.taskdefs.Get;
-
-
-/**
- * this class implements basic auth, the one that shouldn't be used
- * except over an encrypted link or trusted network.
- *
- * @author matth@pobox.com Matt Humphrey
- * @author steve_l@iseran.com Steve Loughran
- * @created 20 March 2001
- */
-
-public class HttpBasicAuth implements HttpAuthenticationStrategy {
-
-
-    /**
-     * Sets the AuthenticationHeader attribute of the HttpAuthStrategy
-     * object
-     *
-     * @param requestConnection The current request
-     * @param responseConnection any previous request, which can contain a
-     *          challenge for the next round. Will often be null
-     * @param user the current user name
-     * @param password the current password
-     */
-    public void setAuthenticationHeader(URLConnection requestConnection,
-            URLConnection responseConnection,
-            String username, String password)
-            throws BuildException {
-
-        if (username != null) {
-            password = username == null ? "" : password;
-            String encodeStr = username + ":" + password;
-            char[] encodedPass;
-            String encodedPassStr;
-            
-            Base64Encode encoder = new Base64Encode();
-            encodedPass = encoder.encodeBase64(encodeStr.getBytes());
-            encodedPassStr= new String(encodedPass);
-            /* this uses the get task
-            Get.Base64Converter converter= new Get.Base64Converter();
-            encodedPassStr = converter.encode(encodeStr);
-            */
-            String authStr = "BASIC " +encodedPassStr;
-            requestConnection.setRequestProperty("Authorization", authStr);
-            }
-        }
-}
-
diff --git a/proposal/sandbox/httptasks/src/main/org/apache/tools/ant/taskdefs/optional/http/HttpDigestAuth.java b/proposal/sandbox/httptasks/src/main/org/apache/tools/ant/taskdefs/optional/http/HttpDigestAuth.java
deleted file mode 100644
index eb597e8..0000000
--- a/proposal/sandbox/httptasks/src/main/org/apache/tools/ant/taskdefs/optional/http/HttpDigestAuth.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 1999-2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- * any, must include the following acknowlegement:
- * "This product includes software developed by the
- * Apache Software Foundation (http://www.apache.org/)."
- * Alternately, this acknowlegement may appear in the software itself,
- * if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- * Foundation" must not be used to endorse or promote products derived
- * from this software without prior written permission. For written
- * permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- * nor may "Apache" appear in their names without prior written
- * permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.http;
-
-import java.io.*;
-import java.net.*;
-import java.util.*;
-import org.apache.tools.ant.*;
-
-
-/**
- * this class implements basic auth, the one that shouldn't be used
- * except over an encrypted link or trusted network.
- *
- * @author matth@pobox.com Matt Humphrey
- * @author steve_l@iseran.com Steve Loughran
- * @created 20 March 2001
- */
-
-public class HttpDigestAuth implements HttpAuthenticationStrategy {
-
-
-    /**
-     * Sets the AuthenticationHeader attribute of the HttpAuthStrategy
-     * object
-     *
-     * @param requestConnection The current request
-     * @param responseConnection any previous request, which can contain a
-     *          challenge for the next round. Will often be null
-     * @param user the current user name
-     * @param password the current password
-     */
-    public void setAuthenticationHeader(URLConnection requestConnection,
-            URLConnection responseConnection,
-            String username, String password)
-            throws BuildException {
-
-        if (username != null) {
-            password = username == null ? "" : password;
-            String encodeStr = username + ":" + password;
-            Base64Encode encoder = new Base64Encode();
-            char[] encodedPass = encoder.encodeBase64(encodeStr.getBytes());
-            String authStr = "BASIC " + new String(encodedPass);
-            requestConnection.setRequestProperty("Authorization", authStr);
-            }
-        }
-}
-
diff --git a/proposal/sandbox/httptasks/src/main/org/apache/tools/ant/taskdefs/optional/http/HttpGet.java b/proposal/sandbox/httptasks/src/main/org/apache/tools/ant/taskdefs/optional/http/HttpGet.java
deleted file mode 100644
index a29c88a..0000000
--- a/proposal/sandbox/httptasks/src/main/org/apache/tools/ant/taskdefs/optional/http/HttpGet.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 1999-2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- * any, must include the following acknowlegement:
- * "This product includes software developed by the
- * Apache Software Foundation (http://www.apache.org/)."
- * Alternately, this acknowlegement may appear in the software itself,
- * if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- * Foundation" must not be used to endorse or promote products derived
- * from this software without prior written permission. For written
- * permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- * nor may "Apache" appear in their names without prior written
- * permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.http;
-
-import java.io.*;
-import java.net.*;
-import java.util.*;
-import org.apache.tools.ant.*;
-
-/**
- * This class implements boring old HTTP1.0 get. It represents
- * a refactoring of Get to HttpTask and then into a specific
- * subclass. because almost everything is done by the parent,
- * this class is almost completely empty
- * @since ant1.5
- * @author costin@dnt.ro
- * @author matth@pobox.com Matt Humphrey
- * @author steve_l@iseran.com Steve Loughran
- * @created March 17, 2001
- */
-
-public class HttpGet extends HttpTask {
-
-     /**
-     * override of test
-     * @return true always
-     */
-
-    protected boolean areParamsAddedToUrl() {
-        return true;
-    }
-
-     /**
-     * this must be overridden by implementations
-     * to set the request method to GET, POST, whatever
-     * @return GET, obviously
-     */
-     public String getRequestMethod() {
-         return "GET";
-     }
-}
diff --git a/proposal/sandbox/httptasks/src/main/org/apache/tools/ant/taskdefs/optional/http/HttpHead.java b/proposal/sandbox/httptasks/src/main/org/apache/tools/ant/taskdefs/optional/http/HttpHead.java
deleted file mode 100644
index a87aad9..0000000
--- a/proposal/sandbox/httptasks/src/main/org/apache/tools/ant/taskdefs/optional/http/HttpHead.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 1999-2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- * any, must include the following acknowlegement:
- * "This product includes software developed by the
- * Apache Software Foundation (http://www.apache.org/)."
- * Alternately, this acknowlegement may appear in the software itself,
- * if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- * Foundation" must not be used to endorse or promote products derived
- * from this software without prior written permission. For written
- * permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- * nor may "Apache" appear in their names without prior written
- * permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.http;
-
-import java.io.*;
-import java.net.*;
-import java.util.*;
-import org.apache.tools.ant.*;
-
-/**
- * Head is a get with a different method and the notion of
- * destination file missing. Why would anyone want to make a HEAD
- * request? a) side effects on the server and b) polling for stuff
- * @since ant1.5
- * @author costin@dnt.ro
- * @author matth@pobox.com Matt Humphrey
- * @author steve_l@iseran.com Steve Loughran
- * @created March 17, 2001
- */
-
-public class HttpHead extends HttpTask {
-
-     /**
-     * this must be overridden by implementations
-     * to set the request method to GET, POST, whatever
-     * @return HEAD always
-     */
-     public String getRequestMethod() {
-         return "HEAD";
-     }
-
-     /**
-     * override of test
-     * @return true always
-     */
-
-    protected boolean areParamsAddedToUrl() {
-        return true;
-    }
-
-    /**
-     * add a check for all the destination settings being
-     * null; nothing else makes sense for a HEAD.
-     *
-     * @return true if everything is fine. false if we have encountered
-     *      problems but arent allowed to fail on an error,
-     * @exception BuildException only throw this when the failonerror
-     *      flag is true
-     */
-
-    protected void verifyArguments()
-        throws BuildException {
-        BuildException trouble = null;
-        if(getDest() != null || getDestinationProperty() !=null) {
-            throw new BuildException("destination properties must not be defined for a HEAD request");
-        }
-        super.verifyArguments();
-    }
-
-}
diff --git a/proposal/sandbox/httptasks/src/main/org/apache/tools/ant/taskdefs/optional/http/HttpPost.java b/proposal/sandbox/httptasks/src/main/org/apache/tools/ant/taskdefs/optional/http/HttpPost.java
deleted file mode 100644
index 959a25f..0000000
--- a/proposal/sandbox/httptasks/src/main/org/apache/tools/ant/taskdefs/optional/http/HttpPost.java
+++ /dev/null
@@ -1,224 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 1999-2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- * any, must include the following acknowlegement:
- * "This product includes software developed by the
- * Apache Software Foundation (http://www.apache.org/)."
- * Alternately, this acknowlegement may appear in the software itself,
- * if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- * Foundation" must not be used to endorse or promote products derived
- * from this software without prior written permission. For written
- * permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- * nor may "Apache" appear in their names without prior written
- * permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.http;
-
-import java.io.*;
-import java.net.*;
-import java.util.*;
-import org.apache.tools.ant.*;
-
-/**
- * this class does post of form content or raw files. you can have one
- * or the other -as soon as a file is specified all the other properties
- * are dropped on the floor.
- * a file post will have content type determined from the extension, you can
- * override it
- * @since ant1.5
- * @author matth@pobox.com Matt Humphrey
- * @author steve_l@iseran.com Steve Loughran
- * @created March 17, 2001
- */
-
-public class HttpPost extends HttpTask {
-
-    /**
-     * file to upload. Null is ok
-     */
-
-    protected File postFile=null;
-
-    /**
-     * set the file to post
-     */
-    public void setUploadFile(File postFile) {
-        this.postFile=postFile;
-    }
-
-     /**
-      * query the post file
-      * @return the file or null for 'not defined'
-      */
-    public File getUploadFile() {
-        return postFile;
-    }
-
-    /**
-     * content type. ignored when the file is null,
-     * and even then we guess it if aint specified
-     */
-
-     private String contentType;
-
-     /**
-      * set the content type. Recommended if a file is being uploaded
-      */
-     public void setContentType(String contentType) {
-         this.contentType=contentType;
-     }
-
-     /**
-      * query the content type
-      * @return the content type or null for 'not defined'
-      */
-     public String getContentType() {
-         return contentType;
-     }
-
-     /**
-     * override of test
-     * @return false always
-     */
-
-    protected boolean areParamsAddedToUrl() {
-        return false;
-    }
-
-    /**
-     * this override of the base connect pumps
-     * up the parameter vector as form data
-     *
-      * @param connection where to connect to
-     * @exception BuildException build trouble
-     * @exception IOException IO trouble
-     */
-    protected URLConnection doConnect(URLConnection connection)
-        throws BuildException, IOException {
-
-        if(postFile==null) {
-            return doConnectFormPost(connection);
-        }
-        else {
-            return doConnectFilePost(connection);
-        }
-    }
-
-    /**
-     * feed up the parameter vector as form data
-     *
-      * @param connection where to connect to
-     * @exception BuildException build trouble
-     * @exception IOException IO trouble
-     */
-    protected URLConnection doConnectFormPost(URLConnection connection)
-        throws BuildException, IOException {
-
-        log("Posting data as a form",Project.MSG_VERBOSE);
-        // Create the output payload
-        ByteArrayOutputStream byteStream = new ByteArrayOutputStream(256);
-        PrintWriter out = new PrintWriter(byteStream);
-        writePostData(out);
-        out.flush();
-        out.close();
-        byte[] data=byteStream.toByteArray();
-        //send it
-        
-        return doConnectWithUpload(connection,
-                "application/x-www-form-urlencoded",
-                byteStream.size(),
-                new ByteArrayInputStream(data));
-    }
-
-    /**
-     * feed up the data file
-     *
-      * @param connection where to connect to
-     * @exception BuildException build trouble
-     * @exception IOException IO trouble
-     */
-    protected URLConnection doConnectFilePost(URLConnection connection)
-        throws BuildException, IOException {
-        int size=(int)postFile.length();
-        log("Posting file "+postFile,Project.MSG_VERBOSE);
-        InputStream instream=new FileInputStream(postFile);
-        String type=contentType;
-        if(type==null) {
-            type=ContentGuesser.guessContentType(postFile.getName());
-        }
-        return doConnectWithUpload(connection,
-                type,
-                size,
-                instream);
-    }
-
-
-    /**
-     * write out post data in form mode
-     *
-     * @param out Description of Parameter
-     */
-    protected void writePostData(PrintWriter out) {
-        HttpRequestParameter param;
-        Vector params=getRequestParameters();
-        for (int i = 0; i < params.size(); i++) {
-            if (i > 0) {
-                out.print('&');
-            }
-            param = (HttpRequestParameter) params.get(i);
-            out.print(param.toString());
-            log("parameter : "+param.toString(),Project.MSG_DEBUG);
-        }
-    }
-
-     /**
-     * this must be overridden by implementations
-     * to set the request method to GET, POST, whatever
-     * @return the method string
-     */
-     public String getRequestMethod() {
-         return "POST";
-     }
-
-
-}
diff --git a/proposal/sandbox/httptasks/src/main/org/apache/tools/ant/taskdefs/optional/http/HttpRequestParameter.java b/proposal/sandbox/httptasks/src/main/org/apache/tools/ant/taskdefs/optional/http/HttpRequestParameter.java
deleted file mode 100644
index 566a236..0000000
--- a/proposal/sandbox/httptasks/src/main/org/apache/tools/ant/taskdefs/optional/http/HttpRequestParameter.java
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 1999-2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- * any, must include the following acknowlegement:
- * "This product includes software developed by the
- * Apache Software Foundation (http://www.apache.org/)."
- * Alternately, this acknowlegement may appear in the software itself,
- * if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- * Foundation" must not be used to endorse or promote products derived
- * from this software without prior written permission. For written
- * permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- * nor may "Apache" appear in their names without prior written
- * permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.http;
-import java.net.URLEncoder;
-
-/**
- * This class is used to store name-value pairs for request parameters
- * and headers
- *
- * @author matth@pobox.com Matt Humphrey
- * @author steve_l@iseran.com Steve Loughran
- * @created March 17, 2001
- */
-
-public class HttpRequestParameter {
-
-    /**
-     * request name
-     */
-    private String name;
-    
-    /**
-     * request value
-     */
-    private String value;
-
-
-    /**
-     * Sets the Name attribute of the request parameter
-     *
-     * @param name The new Name value
-     */
-    public void setName(String name) {
-        this.name = name;
-    }
-
-
-    /**
-     * Sets the Value attribute of the request parameter
-     *
-     * @param value The new Value value
-     */
-    public void setValue(String value) {
-        this.value = value;
-    }
-
-
-    /**
-     * Gets the Name attribute of the request parameter
-     *
-     * @return The Name value
-     */
-    public String getName() {
-        return name;
-    }
-
-
-    /**
-     * Gets the Value attribute of the request parameter
-     *
-     * @return The Value
-     */
-    public String getValue() {
-        return value;
-    }
-
-
-    /**
-     * Adds a feature to the Text attribute of the request parameter
-     *
-     * @param text The feature to be added to the Text attribute
-     */
-    public void addText(String text) {
-        this.value = text;
-    }
-
-
-    /**
-     * simple stringifier returning name and value encoded for use in HTTP requests
-     *
-     * @return a string for informational purposes
-     */
-    public String toString() {
-        return  URLEncoder.encode(getName())+
-            '='+URLEncoder.encode(getValue());
-    }
-
-}
-
diff --git a/proposal/sandbox/httptasks/src/main/org/apache/tools/ant/taskdefs/optional/http/HttpTask.java b/proposal/sandbox/httptasks/src/main/org/apache/tools/ant/taskdefs/optional/http/HttpTask.java
deleted file mode 100644
index faf2297..0000000
--- a/proposal/sandbox/httptasks/src/main/org/apache/tools/ant/taskdefs/optional/http/HttpTask.java
+++ /dev/null
@@ -1,1145 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 1999-2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- * any, must include the following acknowlegement:
- * "This product includes software developed by the
- * Apache Software Foundation (http://www.apache.org/)."
- * Alternately, this acknowlegement may appear in the software itself,
- * if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- * Foundation" must not be used to endorse or promote products derived
- * from this software without prior written permission. For written
- * permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- * nor may "Apache" appear in their names without prior written
- * permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.http;
-
-import java.io.*;
-import java.net.*;
-import java.util.*;
-import org.apache.tools.ant.*;
-import org.apache.tools.ant.types.EnumeratedAttribute;
-
-/**
- * This class is a foundational class for all the tasks which implement
- * http methods. To implement a subclass you *must* provide
- * an implementation of getRequestMethod(). Consider also
- * stating the parameter policy (areParamsAddedToUrl()) and
- * then, if needed, overriding doConnect, and the onConnected(),
- * OnDownloadFinished() methods.
- * @since ant1.5
- * @author costin@dnt.ro
- * @author matth@pobox.com Matt Humphrey
- * @author steve_l@iseran.com Steve Loughran
- * @created March 17, 2001
- */
-public abstract class HttpTask extends Task {
-
-    /**
-     * flag to control action on execution trouble
-     */
-    protected boolean failOnError=true;
-
-    /**
-     * this sets the size of the buffer and the hash for download
-     */
-
-    protected int blockSize = 64;
-
-    /**
-     * property to set on success
-     */
-
-    protected String successProperty;
-
-    /**
-     * source URL. required
-     */
-    private String source;
-
-    /**
-     * destination for download
-     */
-    private File dest;
-    /**
-     * verbose flag gives extra information
-     */
-    private boolean verbose = false;
-
-    /**
-     * timestamp based download flag. off by default
-     */
-    private boolean useTimestamp = false;
-
-    /**
-     * authorization mechanism in use.
-     */
-    private int authType = AUTH_NONE;
-
-    /**
-     * username for authentication
-     */
-    private String username;
-
-    /**
-     * password for authentication
-     */
-    private String password;
-
-    /**
-     * parameters to send on a request
-     */
-    private Vector params = new Vector();
-
-    /**
-     * headers to send on a request
-     */
-    private Vector headers = new Vector();
-
-    /**
-     * cache policy
-     */
-    private boolean usecaches = false;
-
-    /**
-     * the name of a destination property
-     */
-
-    private String destinationPropname = null;
-
-    /***
-     * a flag to control whether or not response codes
-     * are acted on
-     */
-    private boolean useResponseCode=true;
-
-    /**
-     * No authentication specified
-     */
-    public final static int AUTH_NONE = 0;
-
-    /**
-     * basic 'cleartext' authentication
-     */
-    public final static int AUTH_BASIC = 1;
-
-    /**
-     * digest auth. not actually supported but present for completeness
-     */
-    public final static int AUTH_DIGEST = 2;
-
-
-    /**
-     * turn caching on or off. only relevant for protocols and methods
-     * which are cacheable (HEAD, GET) on http
-     *
-     * @param usecaches The new UseCaches value
-     */
-    public void setUseCaches(boolean usecaches) {
-        this.usecaches = usecaches;
-    }
-
-    /**
-     * turn caching on or off. only relevant for protocols and methods
-     * which are cacheable (HEAD, GET) on http
-     *
-     * @param usecaches The new UseCaches value
-     */
-    public void setUseResponseCode(boolean useResponseCodes ) {
-        this.useResponseCode  = useResponseCode ;
-    }
-
-
-    /**
-     * Set the URL.
-     *
-     * @param u URL for the file.
-     */
-    public void setURL(String u) {
-        this.source = u;
-    }
-
-
-    /**
-     * the local destination for any response. this can be null for 'dont
-     * download'
-     *
-     * @param dest Path to file.
-     */
-    public void setDest(File dest) {
-        this.dest = dest;
-    }
-
-/**
-     * the local destination for any response. this can be null for 'dont
-     * download'
-     *
-     * @param dest Path to file.
-     */
-    public void setDestinationProperty(String name) {
-        this.destinationPropname = name;
-    }
-
-
-    /**
-     * Be verbose, if set to " <CODE>true</CODE> ".
-     *
-     * @param verbose The new Verbose value
-     */
-    public void setVerbose(boolean verbose) {
-        this.verbose = verbose;
-    }
-
-
-    /**
-     * set fail on error flag
-     *
-     * @param b The new FailOnError value
-     */
-    public void setFailOnError(boolean b) {
-        failOnError = b;
-    }
-
-
-    /**
-     * Use timestamps, if set to " <CODE>true</CODE> ". <p>
-     *
-     * In this situation, the if-modified-since header is set so that
-     * the file is only fetched if it is newer than the local file (or
-     * there is no local file) This flag is only valid on HTTP connections,
-     * it is ignored in other cases. When the flag is set, the local copy
-     * of the downloaded file will also have its timestamp set to the
-     * remote file time. <br>
-     * Note that remote files of date 1/1/1970 (GMT) are treated as 'no
-     * timestamp', and web servers often serve files with a timestamp
-     * in the future by replacing their timestamp with that of the current
-     * time. Also, inter-computer clock differences can cause no end of
-     * grief.
-     *
-     * @param usetimestamp The new UseTimestamp value
-     */
-    public void setUseTimestamp(boolean usetimestamp) {
-        if (project.getJavaVersion() != Project.JAVA_1_1) {
-            this.useTimestamp = usetimestamp;
-        }
-        else {
-            log("usetimestamp is not supported on java 1.1", Project.MSG_WARN);
-        }
-    }
-
-
-    /**
-     * Sets the Authtype attribute of the HttpTask object REVISIT/REFACTOR
-     *
-     * @param type The new Authtype value
-     */
-    public void setAuthtype(AuthMethodType type) {
-        this.authType=type.mapValueToNumber();
-    }
-
-
-    /**
-     * Sets the Username used for authentication. setting the username
-     * implicitly turns authentication on.
-     *
-     * @param username The new Username value
-     */
-    public void setUsername(String username) {
-        this.username = username;
-        if (authType == AUTH_NONE) {
-            authType = AUTH_BASIC;
-        }
-    }
-
-
-    /**
-     * Sets the Password attribute of the HttpTask object
-     *
-     * @param password The new Password value
-     */
-    public void setPassword(String password) {
-        this.password = password;
-    }
-
-
-    /**
-     * set a variable to be set in the event of success
-     *
-     * @param successProperty The new SuccessProperty value
-     */
-    public void setSuccessProperty(String successProperty) {
-        this.successProperty = successProperty;
-    }
-
-    /**
-     * get block size (kb)
-     */
-
-     public int getBlockSize() {
-         return blockSize;
-     }
-
-     /**
-      * set the new block size for download
-      * @param the new value (in kilobytes)
-      */
-     public void setBlockSize(int blocksize) {
-         this.blockSize=blockSize;
-     }
-
-
-    /**
-     * query cache policy
-     *
-     * @return The UseCaches value
-     */
-    public boolean getUseCaches() {
-        return usecaches;
-    }
-
-
-    /**
-     * query fail on error flag
-     *
-     * @return The FailFailOnError value
-     */
-    public boolean getFailOnError() {
-        return failOnError;
-    }
-
-
-    /**
-     * get the username
-     *
-     * @return current username or null for 'none'
-     */
-    public String getUsername() {
-        return username;
-    }
-
-
-    /**
-     * get the password
-     *
-     * @return current password or null for 'none'
-     */
-    public String getPassword() {
-        return password;
-    }
-
-
-    /**
-     * @return The RemoteURL value
-     */
-    public String getURL() {
-        return source;
-    }
-
-
-    /**
-     * access parameters
-     *
-     * @return The RequestParameters value
-     */
-    public Vector getRequestParameters() {
-        return params;
-    }
-
-
-    /**
-     * accessor of success property name
-     *
-     * @return The SuccessProperty value
-     */
-    public String getSuccessProperty() {
-        return successProperty;
-    }
-
-    /**
-     * accessor of destination property name
-     *
-     * @return The destination value
-     */
-    public String getDestinationProperty() {
-        return destinationPropname;
-    }
-
-    /**
-     * accessor of destination
-     *
-     * @return Thedestination
-     */
-    public File getDest() {
-        return dest;
-    }
-
-
-    /**
-     * if the user wanted a success property, this is it. of course, it
-     * is only relevant if failonerror=false
-     *
-     * @return Description of the Returned Value
-     */
-
-    public void noteSuccess() {
-        if (successProperty != null && successProperty.length() > 0) {
-            getProject().setProperty(successProperty, "true");
-        }
-    }
-
-
-    /**
-     * Does the work.
-     * @todo extract content length header and use it to verify
-     * completeness of download
-     * @exception BuildException Thrown in unrecoverable error.
-     */
-    public void execute()
-        throws BuildException {
-
-        //check arguments, will bail out if there
-        //was trouble 
-        verifyArguments();
-        
-        //set up the URL connection
-        URL url = buildURL();
-
-        try {
-
-            //now create a connection
-            URLConnection connection = url.openConnection();
-
-            //set caching option to whatever
-            connection.setUseCaches(getUseCaches());
-
-            //set the timestamp option if flag is set and
-            //the local file actually exists.
-            long localTimestamp = getTimestamp();
-            if (localTimestamp != 0) {
-                if (verbose) {
-                    Date t = new Date(localTimestamp);
-                    log("local file date : " + t.toString());
-                }
-                connection.setIfModifiedSince(localTimestamp);
-            }
-
-            // Set auth header, if specified
-            //NB: verifyArguments will already have checked that you can't
-            //have a null username with a non-null strategy.
-            HttpAuthenticationStrategy authStrategy=getAuthStrategy();
-            if (authStrategy != null) {
-                authStrategy.setAuthenticationHeader(connection,null,username,password);
-            }
-
-            // Set explicitly specified request headers
-            HttpRequestParameter header;
-            for (int i = 0; i < headers.size(); i++) {
-                header = (HttpRequestParameter) headers.get(i);
-                connection.setRequestProperty(header.getName(), header.getValue());
-            }
-
-            //cast to an http connection if we can,
-            //then set the request method pulled from the subclass
-            String method=getRequestMethod();
-            HttpURLConnection httpConnection = null;
-            if (connection instanceof HttpURLConnection) {
-                httpConnection = (HttpURLConnection) connection;
-                httpConnection.setRequestMethod(method);
-            }
-            log("making "+method+" to "+url);
-
-            //call self or subclass for the connect.
-            //the connection object may change identity at this point.
-            connection=doConnect(connection);
-
-            //then provide a bit of overridable post processing for the fun of it
-            if (!onConnected(connection)) {
-                return;
-            }
-
-            //repeat the cast.
-            if (connection instanceof HttpURLConnection) {
-                httpConnection = (HttpURLConnection) connection;
-            }
-            if(httpConnection != null) {
-                // check for a 304 result (HTTP only) when we set the timestamp
-                // earlier on (A fractional performance tweak)
-                if (localTimestamp != 0) {
-                    if (getResponseCode(httpConnection) == HttpURLConnection.HTTP_NOT_MODIFIED) {
-                        //not modified so no file download. just return instead
-                        //and trace out something so the user doesn't think that the
-                        //download happened when it didn't
-                        log("Local file is up to date - so nothing was downloaded");
-                        noteSuccess();
-                        return;
-                    }
-                }
-
-            }
-            
-
-            //get the input stream
-            InputStream is = getInputStream(connection);
-
-            //bail out if the input stream isn't valid at this point
-            //again, though we should have got to this point earlier.
-            
-            if (is == null) {
-                log("Can't get " + url, Project.MSG_ERR);
-                if (getFailOnError()) {
-                    return;
-                }
-                throw new BuildException("Can't reach URL");
-            }
-
-            //pick a file or null stream for saving content
-            OutputStream out = null;
-            if (dest != null) {
-                log("Saving output to "+dest,Project.MSG_DEBUG);
-                out = new FileOutputStream(dest);
-            }
-            else {
-                if(destinationPropname!=null) {
-                    //save contents to a property
-                    log("Saving output to property "+destinationPropname,
-                        Project.MSG_DEBUG);
-                    out=new ByteArrayOutputStream(blockSize * 1024);
-                }
-                else {
-                    //discard everything
-                    out = new NullOutputStream();
-                }
-            }
-
-            //get content length
-            //do it this way instead of calling getContentLength() because
-            //that way is sporadically unreliable (length is downgraded to 
-            //size of small packets)
-            int contentLength=connection.getHeaderFieldInt("Content-Length",-1);
-            int bytesRead=0;
-            
-            //now start download.
-            byte[] buffer = new byte[blockSize * 1024];
-            int length;
-
-            while ((length = is.read(buffer)) >= 0 && 
-                (contentLength==-1 || bytesRead<contentLength)) {
-                bytesRead+=length;
-                out.write(buffer, 0, length);
-                if (verbose) {
-                    showProgressChar('.');
-                }
-            }
-
-            //finished successfully - clean up.
-            if (verbose) {
-                showProgressChar('\n');
-            }
-
-
-            //if it we were saving to a byte array, then
-            //set the destination property with its contents
-            if(out instanceof ByteArrayOutputStream) {
-                getProject().setProperty(destinationPropname,
-                        out.toString());
-            }
-            
-            //everything is downloaded; close files
-            out.flush();
-            out.close();
-            is.close();
-            is=null;
-            out=null;
-            
-
-            //another overridable notification method
-            if (!onDownloadFinished(connection)) {
-                return;
-            }
-
-            //REFACTOR: move this down to HttpHead? What if a post wants
-            //to set a date?
-            //if (and only if) the use file time option is set, then the
-            //saved file now has its timestamp set to that of the downloaded file
-            if (useTimestamp) {
-                long remoteTimestamp = connection.getLastModified();
-                if (verbose) {
-                    Date t = new Date(remoteTimestamp);
-                    log("last modified = " + t.toString()
-                             + ((remoteTimestamp == 0) ? " - using current time instead" : ""));
-                }
-                if (remoteTimestamp != 0) {
-                    touchFile(dest, remoteTimestamp);
-                }
-            }
-
-            
-            String failureString=null;
-            if(contentLength>-1 && bytesRead!=contentLength) {
-                failureString="Incomplete download -Expected "+contentLength
-                                +"received "+bytesRead+" bytes";
-            }
-            else {
-
-                //finally clean anything up.
-                //http requests have their response code checked, and only
-                //those in the success range are deemed successful.
-                if (httpConnection != null && useResponseCode) {
-                    int statusCode=httpConnection.getResponseCode();
-                    if(statusCode <200 || statusCode >299) {
-                         failureString="Server error code "+statusCode+" received";
-                    }
-                }
-            }
-                
-            //check for an error message
-            if(failureString==null) {
-                noteSuccess();
-            }
-            else {
-                if(failOnError)
-                    throw new BuildException(failureString);
-                else
-                    log(failureString,Project.MSG_ERR);
-            }
-            
-        }
-        catch (IOException ioe) {
-            log("Error performing "+getRequestMethod() +" on " + url +
-                " : "+ioe.toString(), Project.MSG_ERR);
-            if (failOnError) {
-                throw new BuildException(ioe);
-            }
-        }
-    }
-
-    /**
-     * show a progress character
-     * @todo this doesn't work in shell wrappers
-     */
-
-    protected void showProgressChar(char c) {
-        System.out.write(c);
-    }
-
-
-    /**
-     * Adds a form / request parameter.
-     *
-     * @param param The feature to be added to the HttpRequestParameter
-     *      attribute
-     */
-    public void addParam(HttpRequestParameter param) {
-        params.add(param);
-    }
-
-
-    /**
-     * Adds an HTTP request header.
-     *
-     * @param header The feature to be added to the Header attribute
-     */
-    public void addHeader(HttpRequestParameter header) {
-        headers.add(header);
-    }
-
-
-    /**
-     * this must be overridden by implementations to set the request method
-     * to GET, POST, whatever NB: this method only gets called for an
-     * http request
-     *
-     * @return the method string
-     */
-    protected abstract String getRequestMethod();
-
-
-    /**
-     * determine the timestamp to use if the flag is set and the local
-     * file actually exists.
-     *
-     * @return 0 for 'no timestamp', a number otherwhise
-     */
-
-    protected long getTimestamp() {
-        long timestamp = 0;
-        if (useTimestamp && dest != null && dest.exists()) {
-            timestamp = dest.lastModified();
-        }
-        else {
-            timestamp = 0;
-        }
-        return timestamp;
-    }
-
-
-    /**
-     * ask for authentication details. An empty string means 'no auth'
-     *
-     * @return an RFC2617 auth string
-     */
-
-    protected String getAuthenticationString() {
-        // Set authorization eader, if specified
-        if (authType == AUTH_BASIC && username != null) {
-            password = password == null ? "" : password;
-            String encodeStr = username + ":" + password;
-            Base64Encode encoder = new Base64Encode();
-            char[] encodedPass = encoder.encodeBase64(encodeStr.getBytes());
-            String authStr = "BASIC " + new String(encodedPass);
-            return authStr;
-        }
-        else {
-            return null;
-        }
-    }
-
-
-    /**
-     * this overridable method verifies that all the params are valid
-     * the base implementation checks for remote url validity and if the
-     * destination is not null, write access to what mustnt be a directory.
-     * sublcasses can call the base class as well as check their own data
-     *
-     * @return true if everything is fine. false if we have encountered
-     *      problems but arent allowed to fail on an error,
-     * @exception BuildException only throw this when the failonerror
-     *      flag is true
-     */
-
-    protected void verifyArguments()
-        throws BuildException {
-        BuildException trouble = null;
-        //check remote params -but only create an exception, not throw it
-        if (getURL() == null) {
-            throw new BuildException("target URL missing");
-        }
-        //check destination parameters  -but only create an exception, not throw it
-        if (dest != null && dest.exists()) {
-            if (dest.isDirectory()) {
-                throw new BuildException("The specified destination is a directory");
-            }
-            else if (!dest.canWrite()) {
-                throw new BuildException("Can't write to " + dest.getAbsolutePath());
-            }
-        }
-        //check auth policy
-        if(authType!=AUTH_NONE && username==null) {
-           throw new BuildException("no username defined to use with authorisation");
-        }
-     }
-
-
-    /**
-     * set the timestamp of a named file to a specified time. prints a
-     * warning on java1.1
-     *
-     * @param file Description of Parameter
-     * @param timemillis Description of Parameter
-     * @exception BuildException Thrown in unrecoverable error. Likely
-     *      this comes from file access failures.
-     */
-    protected void touchFile(File file, long timemillis)
-        throws BuildException {
-        getProject().setFileLastModified(file, timemillis);
-    }
-
-
-    /**
-     * build a URL from the source url, maybe with parameters attached
-     *
-     * @return Description of the Returned Value
-     * @exception BuildException Description of Exception
-     */
-    protected URL buildURL()
-        throws BuildException {
-        String urlbase = getURL();
-        try {
-            if (areParamsAddedToUrl()) {
-                urlbase = parameterizeURL();
-            }
-            return new URL(urlbase);
-        }
-        catch (MalformedURLException e) {
-            throw new BuildException("Invalid URL");
-        }
-    }
-
-
-    /**
-     * take a url and add parameters to it. if there are no parameters
-     * the base url string is returned
-     *
-     * @return a string to be used for URL creation
-     * @exception BuildException Description of Exception
-     */
-    protected String parameterizeURL()
-        throws BuildException {
-        //return immediately if there are no parameters
-        if (params.size() == 0) {
-            return getURL();
-        }
-
-        StringBuffer buf = new StringBuffer(getURL());
-        //this devious little line code recognises a parameter string already
-        //in the source url, and if so doesnt add a new one
-        buf.append(source.indexOf('?') == -1 ? '?' : '&');
-        HttpRequestParameter param;
-
-        //run through the parameter list, encode the name/value pairs and
-        //append them to the list
-        for (int i = 0; i < params.size(); i++) {
-            if (i > 0) {
-                buf.append('&');
-            }
-            param = (HttpRequestParameter) params.get(i);
-            buf.append(param.toString());
-        }
-        return buf.toString();
-    }
-
-
-    /**
-     * query for the request wanting parameters on the url default is
-     * true, subclasses may want to change
-     *
-     * @return true if a url should have params attached.
-     */
-
-    protected boolean areParamsAddedToUrl() {
-        return true;
-    }
-
-    /**
-     * get the auth policy
-     * a null return value means 'no policy chosen'
-     * @return current authorisation strategy or null
-     */
-
-     protected HttpAuthenticationStrategy getAuthStrategy() {
-        HttpAuthenticationStrategy strategy=null;
-        switch(authType) {
-            case AUTH_BASIC:
-                strategy=new HttpBasicAuth();
-                break;
-
-            case AUTH_DIGEST:
-                //TODO
-                break;
-
-            case AUTH_NONE:
-            default:
-                break;
-        }
-        return strategy;
-
-     }
-
-    /**
-     * this method opens the connection. It can recognise a 401 error code
-     * and in digest auth will then open a new connection with the
-     * supplied nonce encoded. That is why it can return a new
-     * connection object.
-     * @todo handle digest auth
-     * @param connection where to connect to
-     * @exception BuildException build trouble
-     * @exception IOException IO trouble
-     * @return a new connection. This may be different than the old one
-     */
-
-    protected URLConnection makeConnectionWithAuthHandling(URLConnection connection)
-        throws BuildException, IOException {
-        log("Connecting to "+connection.toString(),Project.MSG_DEBUG);    
-        connection.connect();
-        URLConnection returnConnection=connection;
-        log("connected",Project.MSG_DEBUG);
-        if (connection instanceof HttpURLConnection) {
-            HttpURLConnection httpConnection = (HttpURLConnection) connection;
-            if(getResponseCode(httpConnection)==HttpURLConnection.HTTP_UNAUTHORIZED
-                        && authType==AUTH_DIGEST) {
-                //TODO auth failure. in digest mode we can make a new auth
-                //duplicating all the settings then reconnect
-                //and return it
-                log("Digest authentication needed but not yet supported",Project.MSG_DEBUG);
-            }
-        }
-
-        return returnConnection;
-    }
-
-
-    /** 
-     * by making a query for a value from the connection, we force the
-     * client code to actually do the http request and go into input mode.
-     * so next we can check for trouble. 
-     */
-    void probeConnection (HttpURLConnection connection) {
-        String probe=connection.getHeaderFieldKey(0);
-    }
-    
-
-    /**
-     * get a response from a connection request.
-     * This code fixes a problem found in HttpURLConnection, that
-     * any attempt to get the response code would trigger a FileNotFound
-     * @see <a href="http://developer.java.sun.com/developer/bugParade/bugs/4160499.html">
-     * BugParade details </a>
-     * "If the requested file does not exist, and ends in .html, .htm, .txt or /, you
-     *  will get the error stream with no exception thrown. If the file does not end
-     *  like any of these you can catch the exception and immediately request it again
-     *  to get the error stream. The response code can be obtained with
-     *  getResponseCode()."
-     * which means, to really get the response code you need to ask twice.
-     * @param connection the current http link
-     * @return whatever we get back
-     * @throws IOException if anything other than file not found gets thrown,
-     * and even a FileNotFound exception if that gets thrown too many times.
-     */
-    protected int getResponseCode(HttpURLConnection connection)
-    throws IOException  {
-        //force the creation of the input stream
-        //(which is what HttpURLConnection.getResponseCode() does internally
-        //that way the bug handler code is only needed once.
-
-        //probeConnection(connection);
-        IOException swallowed=null;
-        boolean caught=false;
-        int response=0;
-        for (int attempts = 0; attempts < 5; attempts++) {
-            try {
-                response = connection.getResponseCode();
-                caught=true;
-                break;
-            }
-            catch (FileNotFoundException ex) {
-                log("Swallowed FileNotFoundException in getResponseCode",
-                    Project.MSG_VERBOSE);
-                log(ex.toString(),Project.MSG_DEBUG);
-                swallowed=ex;
-            }
-        }
-        if(!caught && swallowed!=null) {
-            throw swallowed;
-        }
-        return response;
-    }
-
-    /**
-     * get an input stream from a connection
-     * This code tries to fix a problem found in HttpURLConnection, that
-     * any attempt to get the response code would trigger a FileNotFound
-     * BugParade ID 4160499 :
-     * <blockquote>
-     * "If the requested file does not exist, and ends in .html, .htm, .txt or /, you
-     *  will get the error stream with no exception thrown. If the file does not end
-     *  like any of these you can catch the exception and immediately request it again
-     *  to get the error stream. The response code can be obtained with
-     *  getResponseCode()."
-     * <blockquote>
-     * which means, to really get the response code you need to ask twice. More to the point
-     * this handling is not consistent across JVMs: on java 1.3 you can ask as often as you like
-     * but you are not going to get the input stream on a JSP page when it has some 500 class error.
-     * @param connection the current link
-     * @return the input stream.
-     * @throws IOException if anything other than file not found gets thrown,
-     * and even a FileNotFound exception if that gets thrown too many times.
-     */
-
-   protected InputStream getInputStream(URLConnection connection)
-    throws IOException  {
-        IOException swallowed=null;
-        InputStream instream=null;
-        for (int attempts = 0; attempts < 5; attempts++) {
-            try {
-                instream = connection.getInputStream();
-                break;
-            }
-            catch (FileNotFoundException ex) {
-                log("Swallowed IO exception in getInputStream",
-                    Project.MSG_VERBOSE);
-                log(ex.toString(),Project.MSG_DEBUG);
-                swallowed=ex;
-            }
-        }
-        if(instream==null && swallowed!=null) {
-            throw swallowed;
-        }
-        return instream;
-    }
-
-
-
-    /**
-     * this method is inteded for overriding. it is called when connecting
-     * to a URL, and the base implementation just calls connect() on the
-     * parameter. any subclass that wants to pump its own datastream up
-     * (like post) must override this
-     *
-     * @param connection where to connect to
-     * @exception BuildException build trouble
-     * @exception IOException IO trouble
-     */
-
-    protected URLConnection doConnect(URLConnection connection)
-        throws BuildException, IOException {
-        return makeConnectionWithAuthHandling(connection);
-    }
-
-
-    /**
-     * this is a method for upload centric post-like requests
-     *
-     * @param connection who we talk to
-     * @param contentType Description of Parameter
-     * @param contentLength Description of Parameter
-     * @param content Description of Parameter
-     * @exception IOException something went wrong with the IO
-     */
-    protected URLConnection doConnectWithUpload(URLConnection connection,
-            String contentType, int contentLength,
-            InputStream content)
-        throws IOException {
-
-        log("uploading " + contentLength + " bytes of type " + contentType,
-                Project.MSG_VERBOSE);
-        //tell the connection we are in output mode
-        connection.setDoOutput(true);
-
-
-        // Set content length and type headers
-        connection.setRequestProperty("Content-Length", String.valueOf(contentLength));
-        connection.setRequestProperty("Content-Type", contentType);
-        //todo: add auth handling
-        //connection=makeConnectionWithAuthHandling(connection);
-        connection.connect();
-        OutputStream toServer = connection.getOutputStream();
-
-        //create a buffer which is the smaller of
-        //the content length and the block size (in KB)
-        int buffersize=blockSize*1024;
-        if(contentLength<buffersize)
-            buffersize=contentLength;
-        byte[] buffer = new byte[buffersize];
-        int remaining = contentLength;
-
-        while (remaining > 0) {
-            int read = content.read(buffer);
-            log("block of "+read,Project.MSG_DEBUG);
-            toServer.write(buffer, 0, read);
-            remaining -= read;
-            if (verbose) {
-                showProgressChar('^');
-            }
-        }
-        if (verbose) {
-            showProgressChar('\n');
-        }
-        log("upload completed",Project.MSG_DEBUG);
-        return connection;
-    }
-
-    /**
-     * internal event handler called after a connect can throw an exception
-     * or return false for an immediate exit from the process
-     *
-     * @param connection the now open connection
-     * @return true if the execution is to continue
-     * @exception BuildException Description of Exception
-     */
-    protected boolean onConnected(URLConnection connection)
-        throws BuildException {
-        return true;
-    }
-
-
-    /**
-     * internal event handler called after the download is complete the
-     * code can still bail out at this point, and the connection may contain
-     * headers of interest. can throw an exception or return false for
-     * an immediate exit from the process
-     *
-     * @param connection the now open connection
-     * @return true if the execution is to continue
-     * @exception BuildException Description of Exception
-     */
-    protected boolean onDownloadFinished(URLConnection connection)
-        throws BuildException {
-        return true;
-    }
-
-
-    /**
-     * Enumerated attribute for "authType" with the value "basic" (note,
-     * eventually we can add "digest" authentication)
-     *
-     * @author matt_h@pobox.com;
-     * @created March 17, 2001
-     */
-    public static class AuthMethodType extends EnumeratedAttribute {
-        /**
-         * Gets the possible values of authorisation supported
-         *
-         * @return The Values value
-         */
-        public String[] getValues() {
-            return new String[]{"none", "basic","digest"};
-        }
-
-        /**
-         * lookup from value to a numeric value. defaults to 0, basic-auth
-         * @param choice string selection
-         * @return selected value
-        */
-        public int  mapValueToNumber() {
-            String choice=getValue();
-            int value=0;
-            String[] values=getValues();
-            for(int i=0;i<values.length;i++) {
-                if(values[i].equalsIgnoreCase(choice))
-                    value=i;
-            }
-            return value;
-        }
-    }
-}
-
diff --git a/proposal/sandbox/httptasks/src/main/org/apache/tools/ant/taskdefs/optional/http/NullOutputStream.java b/proposal/sandbox/httptasks/src/main/org/apache/tools/ant/taskdefs/optional/http/NullOutputStream.java
deleted file mode 100644
index 0f086ab..0000000
--- a/proposal/sandbox/httptasks/src/main/org/apache/tools/ant/taskdefs/optional/http/NullOutputStream.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 1999-2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- * any, must include the following acknowlegement:
- * "This product includes software developed by the
- * Apache Software Foundation (http://www.apache.org/)."
- * Alternately, this acknowlegement may appear in the software itself,
- * if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- * Foundation" must not be used to endorse or promote products derived
- * from this software without prior written permission. For written
- * permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- * nor may "Apache" appear in their names without prior written
- * permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.http;
-import java.io.OutputStream;
-import java.io.IOException;
-
-/**
- * simple output stream which discards all write requests this should
- * really be part of java.io, as it is sporadically invaluable
- *
- * @author slo
- * @created March 17, 2001
- */
-public class NullOutputStream extends OutputStream {
-
-    /**
-     * discard all incoming bytes
-     *
-     * @param b byte to write
-     * @exception IOException never throwable in this subclass
-     */
-    public void write(int b)
-        throws IOException {
-    }
-
-
-    /**
-     * discard all incoming bytes
-     *
-     * @param b  byte array
-     * @exception IOException never throwable in this subclass
-     */
-    public void write(byte[] b)
-        throws IOException {
-    }
-
-
-    /**
-     * discard all incoming bytes
-     *
-     * @param b  byte array
-     * @param off starting offset
-     * @param len length to write
-     * @exception IOException never throwable in this subclass
-     */
-    public void write(byte[] b,
-            int off,
-            int len)
-        throws IOException {
-    }
-
-}
-
-
diff --git a/proposal/sandbox/httptasks/src/main/org/apache/tools/ant/taskdefs/optional/http/SetProxy.java b/proposal/sandbox/httptasks/src/main/org/apache/tools/ant/taskdefs/optional/http/SetProxy.java
deleted file mode 100644
index 933ddda..0000000
--- a/proposal/sandbox/httptasks/src/main/org/apache/tools/ant/taskdefs/optional/http/SetProxy.java
+++ /dev/null
@@ -1,240 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 1999-2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- * any, must include the following acknowlegement:
- * "This product includes software developed by the
- * Apache Software Foundation (http://www.apache.org/)."
- * Alternately, this acknowlegement may appear in the software itself,
- * if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- * Foundation" must not be used to endorse or promote products derived
- * from this software without prior written permission. For written
- * permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- * nor may "Apache" appear in their names without prior written
- * permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.http;
-
-import java.io.*;
-import java.net.*;
-import java.util.*;
-import java.lang.reflect.*;
-import org.apache.tools.ant.*;
-
-/**
- * proxy definition task. This allows all web tasks in the build file
- * executed after this task to access the web through a proxy server
- *
- * @author steve_l@iseran.com Steve Loughran
- * @created March 17, 2001
- */
-
-public class SetProxy extends Task {
-
-    /**
-     * proxy details
-     */
-    protected String proxyHost = null;
-
-    /**
-     * name of proxy port
-     */
-    protected int proxyPort = 80;
-
-    /**
-     * socks host.
-     */
-    private String socksProxyHost = null;
-    /**
-     * socks proxy port. 1080 is the default
-     */
-    private int socksProxyPort = 1080;
-
-
-
-    /**
-     * set a proxy host. the port should be defined too
-     *
-     * @param hostname the new proxy hostname
-     */
-    public void setProxyHost(String hostname) {
-        proxyHost = hostname;
-    }
-
-
-    /**
-     * set the proxy port number.
-     *
-     * @param port port number of the proxy
-     */
-    public void setProxyPort(int port) {
-        proxyPort = port;
-    }
-
-
-    /**
-     * accessor to proxy hostname
-     *
-     * @return the hostname or null
-     */
-
-    public String getProxyHost() {
-        return proxyHost;
-    }
-
-
-    /**
-     * accessor to proxy hostname
-     *
-     * @return the port number
-     */
-
-    public int getProxyPort() {
-        return proxyPort;
-    }
-
-
-    /**
-     * Set the SocksProxyHost attribute
-     *
-     * @param host The new SocksProxyHost value
-     */
-    public void setSocksProxyHost(String host) {
-        this.socksProxyHost = host;
-    }
-
-
-    /**
-     * Set the SocksProxyPort attribute
-     *
-     * @param port The new SocksProxyPort value
-     */
-    public void setSocksProxyPort(int port) {
-        this.socksProxyPort = port;
-    }
-
-
-
-    /**
-     * if the proxy port and host settings are not null, then the settings
-     * get applied these settings last beyond the life of the object and
-     * apply to all network connections
-     *
-     * @return true if the settings were applied
-     */
-
-    public void applyWebProxySettings() {
-        boolean settingsChanged=false;
-        Properties prop = System.getProperties();
-        if (getProxyHost() != null) {
-            log("Setting proxy to " + getProxyHost() + ":" + getProxyPort(),
-                    Project.MSG_VERBOSE);
-            prop.put("http.proxyHost", getProxyHost());
-            prop.put("http.proxyPort", String.valueOf(getProxyPort()));
-            prop.put("https.proxyHost", getProxyHost());
-            prop.put("https.proxyPort", String.valueOf(getProxyPort()));
-            prop.put("ftp.proxyHost", getProxyHost());
-            prop.put("ftp.proxyPort", String.valueOf(getProxyPort()));
-            settingsChanged=true;
-        }
-
-        //socks
-        if (socksProxyHost != null) {
-            log("Setting proxy to " + getProxyHost() + ":" + getProxyPort(),
-                    Project.MSG_VERBOSE);
-            prop.put("socksProxyHost", socksProxyHost);
-            prop.put("socksProxyPort", Integer.toString(socksProxyPort));
-            settingsChanged=true;
-        }
-
-        //for Java1.1 we need to tell the system that the settings are new
-        if(settingsChanged && project.getJavaVersion() == Project.JAVA_1_1) {
-            prop.put("http.proxySet", "true");
-            sun.net.www.http.HttpClient.resetProperties();
-        }
-        legacyResetProxySettingsCall();
-    }
-
-
-    /**
-     * make a call to sun.net.www.http.HttpClient.resetProperties();
-     * this is only needed for java 1.1; reflection is used to stop the compiler
-     * whining, and in case cleanroom JVMs dont have the class.
-     * @return Description of the Returned Value
-     * @returns
-     */
-
-    protected boolean legacyResetProxySettingsCall() {
-        try {
-            Class c = Class.forName("sun.net.www.http.HttpClient");
-            Method reset = c.getMethod("resetProperties", null);
-            reset.invoke(null, null);
-            return true;
-        }
-        catch (ClassNotFoundException cnfe) {
-            return false;
-        }
-        catch (NoSuchMethodException e) {
-            return false;
-        }
-        catch (IllegalAccessException e) {
-            return false;
-        }
-        catch (InvocationTargetException e) {
-            return false;
-        }
-
-    }
-
-
-    /**
-     * Does the work.
-     *
-     * @exception BuildException Thrown in unrecoverable error.
-     */
-    public void execute()
-        throws BuildException {
-        applyWebProxySettings();
-    }
-
-}
-
diff --git a/proposal/sandbox/input/.cvsignore b/proposal/sandbox/input/.cvsignore
deleted file mode 100644
index 378eac2..0000000
--- a/proposal/sandbox/input/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-build
diff --git a/proposal/sandbox/input/README b/proposal/sandbox/input/README
deleted file mode 100644
index 6c45e20..0000000
--- a/proposal/sandbox/input/README
+++ /dev/null
@@ -1,8 +0,0 @@
-The input proposal has been accepted as part of main Ant and has been
-merged with the main code tree on 2002-04-22.
-
-The only part that didn't get moved over was SwingInputHandler that
-has never been more than a proof of concept - if you really want to
-see it, you can find it in CVS's Attic:
-
-<http://cvs.apache.org/viewcvs/jakarta-ant/proposal/sandbox/input/src/main/org/apache/tools/ant/input/Attic/SwingInputHandler.java>
diff --git a/proposal/sandbox/junit/build.bat b/proposal/sandbox/junit/build.bat
deleted file mode 100755
index ae9ffc1..0000000
--- a/proposal/sandbox/junit/build.bat
+++ /dev/null
@@ -1,30 +0,0 @@
-@echo off
-
-set OLDCLASSPATH=%CLASSPATH%
-set REAL_ANT_HOME=%ANT_HOME%
-set ANT_HOME=bootstrap
-if exist bootstrap\lib\ant.jar if exist bootstrap\bin\ant.bat if exist bootstrap\bin\lcp.bat if exist bootstrap\bin\antRun.bat goto runAnt
-call bootstrap.bat
-if exist bootstrap\lib\ant.jar if exist bootstrap\bin\ant.bat if exist bootstrap\bin\lcp.bat if exist bootstrap\bin\antRun.bat goto runAnt
-echo Bootstrap FAILED
-goto cleanup
-
-:runAnt
-set LOCALCLASSPATH=lib\crimson.jar;bootstrap\lib\ant.jar
-for %%i in (lib\optional\*.jar) do call bootstrap\bin\lcp.bat %%i
-set CLASSPATH=lib\optional\xalanj1compat.jar;%LOCALCLASSPATH%;%CLASSPATH%
-set LOCALCLASSPATH=
-
-if not "%REAL_ANT_HOME%" == "" goto install_ant
-call bootstrap\bin\ant.bat -emacs %1 %2 %3 %4 %5 %6 %7 %8 %9
-goto cleanup
-
-:install_ant
-call bootstrap\bin\ant.bat -emacs -Dant.install="%REAL_ANT_HOME%" %1 %2 %3 %4 %5 %6 %7 %8 %9
-
-rem clean up
-:cleanup
-set ANT_HOME=%REAL_ANT_HOME%
-set REAL_ANT_HOME=
-set CLASSPATH=%OLDCLASSPATH%
-set OLDCLASSPATH=
diff --git a/proposal/sandbox/junit/build.sh b/proposal/sandbox/junit/build.sh
deleted file mode 100644
index f15a7e7..0000000
--- a/proposal/sandbox/junit/build.sh
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/bin/sh
-
-cygwin=false;
-case "`uname`" in
-  CYGWIN*) cygwin=true ;;
-esac
-
-PWD=`pwd`
-if $cygwin ; then
-    PWD=`cygpath --windows "$PWD"`
-fi
-
-cd ../../..
-/bin/sh ./build.sh -buildfile $PWD/build.xml $*
-cd $PWD
-
diff --git a/proposal/sandbox/junit/build.xml b/proposal/sandbox/junit/build.xml
deleted file mode 100644
index 746178b..0000000
--- a/proposal/sandbox/junit/build.xml
+++ /dev/null
@@ -1,79 +0,0 @@
-<project name="junit-proposal" basedir="." default="compile">
-  <property file=".ant.properties"/>
-  <property file="${user.home}/.ant.properties"/>
-  
-  <!--property name="build.sysclasspath" value="ignore"/-->
-  <property name="build.compiler" value="jikes"/>
-  <!--property name="build.compiler.emacs" value="on"/-->
-  <property name="build.compiler.pedantic" value="true"/>
-  <property name="build.compiler.depend" value="true"/>
-  <property name="build.compiler.fulldepend" value="true"/>
-
-  <property name="debug" value="on"/>
-  <property name="optimize" value="off"/>
-  <property name="deprecation" value="on"/>
-
-  <property name="build.dir" value="build"/>
-  <property name="build.lib" value="${build.dir}/lib"/>
-  <property name="build.src" value="${build.dir}/src"/>
-  <property name="build.classes" value="${build.dir}/classes"/>
-  
-  <property name="testcases.classes" value="${build.dir}/testcases"/>
-
-  <property name="java.dir" value="src/java"/>
-  <property name="tests.dir" value="src/testcases"/>
-  <property name="ant.base.dir" location="../../.."/>
-  <property name="ant.lib.dir" location="${ant.base.dir}/lib"/>
-  <property name="lib.dir" location="lib"/>
-  <property name="bootstrap.dir" location="${ant.base.dir}/bootstrap"/>
-  
-  <path id="project.class.path">
-    <pathelement path="${build.classes}" />
-    <fileset dir="${ant.lib.dir}" includes="**/*.jar"/>
-    <fileset dir="${bootstrap.dir}/lib" includes="ant.jar"/>
-    <fileset dir="${lib.dir}" includes="**/*.jar"/>
-  </path>
-
-
-  <target name="compile"
-          description="--> compile the source code">
-    <mkdir dir="${build.classes}"/>
-    <javac srcdir="src/main"
-           destdir="${build.classes}"
-           debug="${debug}"
-           optimize="${optimize}"
-           deprecation="${deprecation}"
-           includeantruntime="no">
-      <classpath refid="project.class.path"/>
-    </javac>
-    <antcall target="compile-tests"/>
-  </target>
-  
-
-  <target name="clean"
-          description="--> cleans up build and dist directories">
-    <delete dir="${build.dir}" />
-    <delete>
-      <fileset dir="." includes="**/*.bak" defaultexcludes="no"/>
-    </delete>
-  </target>
-
-  <target name="compile-tests">
-    <mkdir dir="${testcases.classes}"/>
-    <javac srcdir="src/testcases"
-           destdir="${testcases.classes}"
-           debug="${debug}"
-           optimize="${optimize}"
-           deprecation="${deprecation}"
-           includeantruntime="no">
-      <classpath refid="project.class.path"/>
-    </javac>
-  </target>
-  
-  <target name="run-ant-tests" depends="compile">
-     <!--ant dir="${ant.base.dir}" target="build" inheritall="false"/>
-     <ant dir="${ant.base.dir}" target="compile-tests" inheritall="false"/-->
-     <ant antfile="rjunit-ant-tests.xml"/>
-  </target>
-  
-</project>
\ No newline at end of file
diff --git a/proposal/sandbox/junit/lib/excalibur-i18n-1.0.jar b/proposal/sandbox/junit/lib/excalibur-i18n-1.0.jar
deleted file mode 100644
index 5c533b5..0000000
--- a/proposal/sandbox/junit/lib/excalibur-i18n-1.0.jar
+++ /dev/null
Binary files differ
diff --git a/proposal/sandbox/junit/rjunit-ant-tests.xml b/proposal/sandbox/junit/rjunit-ant-tests.xml
deleted file mode 100644
index 5d98526..0000000
--- a/proposal/sandbox/junit/rjunit-ant-tests.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<project name="rjunit-ant-tests" basedir="." default="ant-tests">  
-  <!--
-    run ant tests. This is unusable if not running it
-    via build.xml as it should inherits properties
-    -->
-  <taskdef classname="org.apache.tools.ant.taskdefs.optional.rjunit.RJUnitTask"
-    name="rjunit">
-      <classpath>
-        <path location="${build.classes}"/>
-        <path location="${java.dir}"/>
-        <fileset dir="${lib.dir}" includes="**/*.jar"/>
-      </classpath>
-  </taskdef>
-  <target name="ant-tests">
-      <rjunit>
-          <server port="6666">
-              <formatter type="brief">
-                  <!--param name="file" location="junit-test-log.txt"/-->
-              </formatter>
-          </server>
-          <client host="127.0.0.1"  port="6666">
-              <classpath>
-                <fileset dir="${ant.lib.dir}" includes="**/*.jar"/>
-                <path location="${ant.base.dir}/build/classes"/>
-                <path location="${java.dir}"/>
-              </classpath>
-              <jvmarg value="-Xmx256MB"/>
-              <batchtest path="${ant.base.dir}/build/testcases">
-                  <include name="**/*Test.class"/>
-              </batchtest>
-          </client>
-      </rjunit>
-   </target>
- </project>
\ No newline at end of file
diff --git a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/ArrayEnumeration.java b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/ArrayEnumeration.java
deleted file mode 100644
index d8f89cd..0000000
--- a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/ArrayEnumeration.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.rjunit;
-
-import java.util.Enumeration;
-import java.util.NoSuchElementException;
-
-/**
- * Convenient enumeration over an array of objects.
- * @author <a href="mailto:sbailliez@imediation.com">Stephane Bailliez</a>
- */
-class ArrayEnumeration implements Enumeration {
-
-    /** convenient null enumeration */
-    public final static Enumeration NULL_ENUMERATION =
-            new ArrayEnumeration(new Object[0]);
-
-    /** object array */
-    private Object[] array;
-
-    /** current index */
-    private int pos;
-
-    /**
-     * Initialize a new enumeration that wraps an array.
-     * @param       array   the array of object to enumerate.
-     */
-    public ArrayEnumeration(Object[] array) {
-        this.array = array;
-        this.pos = 0;
-    }
-
-    /**
-     * Tests if this enumeration contains more elements.
-     *
-     * @return  <code>true</code> if and only if this enumeration object
-     *           contains at least one more element to provide;
-     *          <code>false</code> otherwise.
-     */
-    public boolean hasMoreElements() {
-        return (pos < array.length);
-    }
-
-    /**
-     * Returns the next element of this enumeration if this enumeration
-     * object has at least one more element to provide.
-     *
-     * @return     the next element of this enumeration.
-     * @throws  NoSuchElementException  if no more elements exist.
-     */
-    public Object nextElement() throws NoSuchElementException {
-        if (hasMoreElements()) {
-            Object o = array[pos];
-            pos++;
-            return o;
-        }
-        throw new NoSuchElementException();
-    }
-}
-
diff --git a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/BaseTestElement.java b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/BaseTestElement.java
deleted file mode 100644
index 8f6ea15..0000000
--- a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/BaseTestElement.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.rjunit;
-
-import java.util.Enumeration;
-
-import junit.runner.TestCollector;
-
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.ProjectComponent;
-
-/**
- * Base test implementation that implements the if/unless logic.
- *
- * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
- */
-public abstract class BaseTestElement
-        extends ProjectComponent implements TestCollector {
-
-    /** run the test only if this property is present */
-    private String ifProperty;
-
-    /** run the test unless this property is present */
-    private String unlessProperty;
-
-    public final Enumeration collectTests() {
-        if (shouldRun()) {
-            return getTests();
-        }
-        return ArrayEnumeration.NULL_ENUMERATION;
-    }
-
-    public final void setIf(final String value) {
-        ifProperty = value;
-    }
-
-    public final void setUnless(final String value) {
-        unlessProperty = value;
-    }
-
-    /**
-     * Implementation of the test collection process
-     * @return the enumeration of fully qualified classname representing
-     * a JUnit Test.
-     */
-    protected abstract Enumeration getTests();
-
-    /**
-     * check whether this test should be run or not.
-     * @return whether or not the test should run based on
-     * the presence of <tt>if</tt> and <tt>unless</tt> properties.
-     * @see #setIf(String)
-     * @see #setUnless(String)
-     */
-    protected boolean shouldRun() {
-        final Project project = getProject();
-        if ( ifProperty != null &&
-                project.getProperty(ifProperty) == null ){
-            return false;
-        }
-        if (unlessProperty != null &&
-                project.getProperty(unlessProperty) != null) {
-            return false;
-        }
-        return true;
-    }
-}
diff --git a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/BatchTestElement.java b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/BatchTestElement.java
deleted file mode 100644
index a1c7416..0000000
--- a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/BatchTestElement.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.rjunit;
-
-import java.util.Enumeration;
-
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.types.Path;
-import org.apache.tools.ant.types.PatternSet;
-
-/**
- * A test element where tests files are specified by include/exclude
- * patterns. tests files location are specified by one ore multiple
- * path elements. (directory or archive).
- *
- * <pre>
- * <!ELEMENT batchtest>
- * <!ATTLIST batchtest path CDATA required>
- * </pre>
- *
- * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
- */
-public class BatchTestElement extends BaseTestElement {
-
-    private ClasspathTestCollector collector = new ClasspathTestCollector();
-
-// Test collector implementation
-
-    public Enumeration getTests() {
-        final Project project = getProject();
-        collector.setProject(project);
-        return collector.collectTests();
-    }
-
-// Ant bean accessors
-
-    public void setPath(Path path) {
-        collector.setPath(path);
-    }
-
-    public Path getPath() {
-        return collector.getPath();
-    }
-
-    public PatternSet.NameEntry createInclude() {
-        return collector.createInclude();
-    }
-
-    public PatternSet.NameEntry createExclude() {
-        return collector.createExclude();
-    }
-
-}
diff --git a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/ClasspathTestCollector.java b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/ClasspathTestCollector.java
deleted file mode 100644
index 62d45fa..0000000
--- a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/ClasspathTestCollector.java
+++ /dev/null
@@ -1,196 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.rjunit;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Enumeration;
-import java.util.Hashtable;
-
-import junit.runner.TestCollector;
-
-import org.apache.tools.ant.DirectoryScanner;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.ProjectComponent;
-import org.apache.tools.ant.types.Path;
-import org.apache.tools.ant.types.PatternSet;
-
-/**
- * A rough implementation of a test collector that will collect tests
- * using include/exclude patterns in a set of paths. A path can either
- * be a directory or an archive. (zip or jar file)
- *
- * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
- */
-public final class ClasspathTestCollector extends ProjectComponent
-        implements TestCollector {
-
-    private final static int SUFFIX_LENGTH = ".class".length();
-
-    private final PatternSet patterns = new PatternSet();
-
-    private Path path = null;
-
-    public Enumeration collectTests() {
-        Hashtable collected = new Hashtable();
-        // start from last, so that first elements
-        // override last one in case there are duplicates.
-        // ie mimic classpath behavior.
-        String[] paths = path.list();
-        for (int i = paths.length - 1; i >= 0; i--) {
-            File f = new File(paths[i]);
-            ArrayList included = null;
-            if (f.isDirectory()) {
-                included = gatherFromDirectory(f);
-            } else if (f.getName().endsWith(".zip")
-                    || f.getName().endsWith(".jar")) {
-                included = gatherFromArchive(f);
-            } else {
-                continue;
-            }
-            // add tests to the already collected one
-            final int includedCount = included.size();
-            log("Adding " + includedCount + " testcases from " + f, Project.MSG_VERBOSE);
-            for (int j = 0; j < includedCount; j++) {
-                String testname = (String) included.get(j);
-                collected.put(testname, "");
-            }
-        }
-        log("Collected " + collected.size() + " testcases from " + paths.length + " path(s).", Project.MSG_VERBOSE);
-        return collected.keys();
-    }
-
-
-    /**
-     * Return the list of classnames from a directory that match
-     * the specified patterns.
-     * @param dir the base directory (must also be the base package)
-     * @return the list of classnames matching the pattern.
-     */
-    protected ArrayList gatherFromDirectory(File dir) {
-        Project project = getProject();
-        DirectoryScanner ds = new DirectoryScanner();
-        ds.setBasedir(dir);
-        ds.setIncludes(patterns.getIncludePatterns(project));
-        ds.setExcludes(patterns.getExcludePatterns(project));
-        ds.scan();
-        String[] included = ds.getIncludedFiles();
-        return testClassNameFromFile(included);
-    }
-
-    /**
-     * Return the list of classnames from a zipfile that match
-     * the specified patterns.
-     * @param zip the zipfile (must also be the base package)
-     * @return the list of classnames matching the pattern.
-     */
-    protected ArrayList gatherFromArchive(File zip) {
-        ZipScanner zs = new ZipScanner();
-        zs.setBasedir(zip);
-        zs.setIncludes(patterns.getIncludePatterns(project));
-        zs.setExcludes(patterns.getExcludePatterns(project));
-        zs.scan();
-        String[] included = zs.getIncludedFiles();
-        return testClassNameFromFile(included);
-    }
-
-    /**
-     * transform a set of file into their matching classname
-     * @todo what about using a mapper for this ?
-     */
-    protected ArrayList testClassNameFromFile(String[] classFileNames) {
-        ArrayList tests = new ArrayList(classFileNames.length);
-        for (int i = 0; i < classFileNames.length; i++) {
-            String file = classFileNames[i];
-            if (isTestClass(file)) {
-                String classname = classNameFromFile(file);
-                tests.add(classname);
-            }
-        }
-        return tests;
-    }
-
-    protected boolean isTestClass(String classFileName) {
-        return classFileName.endsWith(".class");
-    }
-
-    protected String classNameFromFile(String classFileName) {
-        // convert /a/b.class to a.b
-        String s = classFileName.substring(0, classFileName.length() - SUFFIX_LENGTH);
-        String s2 = s.replace(File.separatorChar, '.');
-        if (s2.startsWith(".")) {
-            s2 = s2.substring(1);
-        }
-        return s2;
-    }
-
-// Ant bean accessors
-
-    public void setPath(Path path) {
-        this.path = path;
-    }
-
-    public Path getPath() {
-        return this.path;
-    }
-
-    public PatternSet.NameEntry createInclude() {
-        return patterns.createInclude();
-    }
-
-    public PatternSet.NameEntry createExclude() {
-        return patterns.createExclude();
-    }
-
-}
diff --git a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/ClientElement.java b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/ClientElement.java
deleted file mode 100644
index 662a885..0000000
--- a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/ClientElement.java
+++ /dev/null
@@ -1,261 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.rjunit;
-
-import java.io.BufferedOutputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.util.ArrayList;
-import java.util.Enumeration;
-import java.util.Properties;
-
-import junit.runner.TestCollector;
-
-import org.apache.avalon.excalibur.i18n.ResourceManager;
-import org.apache.avalon.excalibur.i18n.Resources;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.ProjectComponent;
-import org.apache.tools.ant.taskdefs.Execute;
-import org.apache.tools.ant.taskdefs.LogStreamHandler;
-import org.apache.tools.ant.types.Commandline;
-import org.apache.tools.ant.types.CommandlineJava;
-import org.apache.tools.ant.types.Path;
-import org.apache.tools.ant.util.FileUtils;
-
-/**
- * An element representing the client configuration.
- *
- * <pre>
- * <!ELEMENT server (jvmarg)* (classpath)* (test)* (batchtest)*>
- * <!ATTLIST server port numeric 6666>
- * <!ATTLIST server host CDATA 127.0.0.1>
- * </pre>
-
- * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
- */
-public final class ClientElement extends ProjectComponent {
-    /** resources */
-    private final static Resources RES =
-            ResourceManager.getPackageResources(ClientElement.class);
-
-    /** port to contact the server. Default to 6666 */
-    private int port = 6666;
-
-    /** server hostname to connect to. Default to 127.0.0.1 */
-    private String host = "127.0.0.1";
-
-    /** test collector elements */
-    private ArrayList testCollectors = new ArrayList();
-
-    /** the command line to launch the TestRunner */
-    private CommandlineJava cmd = new CommandlineJava();
-
-    /** the parent task */
-    private RJUnitTask parent;
-
-    /** help debug the TestRunner */
-    private boolean debug = false;
-
-    /** create a new client */
-    public ClientElement(RJUnitTask value) {
-        parent = value;
-        cmd.setClassname("org.apache.tools.ant.taskdefs.optional.rjunit.remote.TestRunner");
-    }
-
-    /** core entry point */
-    public final void execute() throws BuildException {
-        try {
-            preExecute();
-            doExecute();
-        } finally {
-            postExecute();
-        }
-    }
-
-    protected void preExecute() throws BuildException {
-        // must appended to classpath to avoid conflicts.
-        JUnitHelper.addClasspathEntry(createClasspath(), "/junit/framework/TestCase.class");
-        JUnitHelper.addClasspathEntry(createClasspath(), "/org/apache/tools/ant/Task.class");
-        JUnitHelper.addClasspathEntry(createClasspath(), "/org/apache/tools/ant/taskdefs/optional/rjunit/remote/TestRunner.class");
-    }
-
-    protected void doExecute() throws BuildException {
-        File tmp = configureTestRunner();
-        Execute execute = new Execute(new LogStreamHandler(parent, Project.MSG_VERBOSE, Project.MSG_VERBOSE));
-        execute.setCommandline(cmd.getCommandline());
-        execute.setAntRun(project);
-
-        log(RES.getString("task.process-cmdline.log", cmd.toString()), Project.MSG_VERBOSE);
-        int retVal = 0;
-        try {
-            retVal = execute.execute();
-            if (retVal != 0) {
-                throw new BuildException("task.process-failed.error");
-            }
-        } catch (IOException e) {
-            String msg = RES.getString("task.process-failed.error");
-            throw new BuildException(msg, e);
-        } finally {
-            tmp.delete();
-        }
-    }
-
-    protected void postExecute() {
-        // nothing
-    }
-
-    /**
-     * @return all collected tests specified with test elements.
-     */
-    protected Enumeration collectTests() {
-        final int count = testCollectors.size();
-        final Enumeration[] tests = new Enumeration[count];
-        for (int i = 0; i < count; i++) {
-            TestCollector te = (TestCollector) testCollectors.get(i);
-            tests[i] = te.collectTests();
-        }
-        return new CompoundEnumeration(tests);
-    }
-
-    /**
-     * Configure the runner with the appropriate configuration file.
-     * @return the reference to the temporary configuration file
-     * to be deleted once the TestRunner has ended.
-     */
-    protected File configureTestRunner() throws BuildException {
-        Properties props = new Properties();
-        props.setProperty("debug", String.valueOf(debug));
-        props.setProperty("host", host);
-        props.setProperty("port", String.valueOf(port));
-        // get all test classes to run...
-        StringBuffer buf = new StringBuffer(10240);
-        Enumeration classnames = collectTests();
-        while (classnames.hasMoreElements()) {
-            String classname = (String) classnames.nextElement();
-            buf.append(classname).append(" ");
-        }
-        props.setProperty("classnames", buf.toString());
-
-        // dump the properties to a temporary file.
-        FileUtils futils = FileUtils.newFileUtils();
-        File f = futils.createTempFile("junit-antrunner", "tmp", new File("."));
-        OutputStream os = null;
-        try {
-            ByteArrayOutputStream baos = new ByteArrayOutputStream();
-            os = new BufferedOutputStream(new FileOutputStream(f));
-            props.store(baos, "JUnit Ant Runner configuration file");
-            log(baos.toString(), Project.MSG_VERBOSE);
-            os.write(baos.toByteArray());
-        } catch (IOException e) {
-            throw new BuildException(e);
-        } finally {
-            if (os != null) {
-                try {
-                    os.close();
-                } catch (IOException e) {
-                }
-            }
-        }
-
-        // configure the runner
-        cmd.createArgument().setValue("-file");
-        cmd.createArgument().setValue(f.getAbsolutePath());
-        return f;
-    }
-
-// --- Ant bean setters
-
-    /** set the port to connect to */
-    public void setPort(int value) {
-        port = value;
-    }
-
-    /** set the host to contact */
-    public void setHost(String value) {
-        host = value;
-    }
-
-    /** set debug mode for the runner. it will log a file to working dir */
-    public void setDebug(boolean flag) {
-        debug = flag;
-    }
-
-    /** Create a new JVM argument. */
-    public Commandline.Argument createJvmarg() {
-        return cmd.createVmArgument();
-    }
-
-    /** classpath to be set for running tests */
-    public Path createClasspath() {
-        return cmd.createClasspath(getProject());
-    }
-
-    /** add a single test element */
-    public void addConfiguredTest(TestElement value) {
-        testCollectors.add(value);
-    }
-
-    /** add a batch test element */
-    public void addConfiguredBatchTest(BatchTestElement value) {
-        // add the classpath of batchtest to cmd classpath
-        Path path = value.getPath();
-        cmd.getClasspath().append(path);
-        testCollectors.add(value);
-    }
-
-}
diff --git a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/CompoundEnumeration.java b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/CompoundEnumeration.java
deleted file mode 100644
index f8515e9..0000000
--- a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/CompoundEnumeration.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.rjunit;
-
-import java.util.Enumeration;
-import java.util.NoSuchElementException;
-
-/**
- * Convenient enumeration over an array of enumeration. For example:
- * <pre>
- * Enumeration e1 = v1.elements();
- * while (e1.hasMoreElements()){
- *    // do something
- * }
- * Enumeration e2 = v2.elements();
- * while (e2.hasMoreElements()){
- *    // do the same thing
- * }
- * </pre>
- * can be written as:
- * <pre>
- * Enumeration[] enums = { v1.elements(), v2.elements() };
- * Enumeration e = Enumerations.fromCompound(enums);
- * while (e.hasMoreElements()){
- *    // do something
- * }
- * </pre>
- * Note that the enumeration will skip null elements in the array. The following is
- * thus possible:
- * <pre>
- * Enumeration[] enums = { v1.elements(), null, v2.elements() }; // a null enumeration in the array
- * Enumeration e = Enumerations.fromCompound(enums);
- * while (e.hasMoreElements()){
- *    // do something
- * }
- * </pre>
- * @author <a href="mailto:sbailliez@imediation.com">Stephane Bailliez</a>
- */
-public class CompoundEnumeration implements Enumeration {
-
-    /** enumeration array */
-    private Enumeration[] enumArray;
-
-    /** index in the enums array */
-    private int index = 0;
-
-    public CompoundEnumeration(Enumeration[] enumarray) {
-        this.enumArray = enumarray;
-    }
-
-    /**
-     * Tests if this enumeration contains more elements.
-     *
-     * @return  <code>true</code> if and only if this enumeration object
-     *           contains at least one more element to provide;
-     *          <code>false</code> otherwise.
-     */
-    public boolean hasMoreElements() {
-        while (index < enumArray.length) {
-            if (enumArray[index] != null && enumArray[index].hasMoreElements()) {
-                return true;
-            }
-            index++;
-        }
-        return false;
-    }
-
-    /**
-     * Returns the next element of this enumeration if this enumeration
-     * object has at least one more element to provide.
-     *
-     * @return     the next element of this enumeration.
-     * @throws  NoSuchElementException  if no more elements exist.
-     */
-    public Object nextElement() throws NoSuchElementException {
-        if (hasMoreElements()) {
-            return enumArray[index].nextElement();
-        }
-        throw new NoSuchElementException();
-    }
-}
diff --git a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/FilterElement.java b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/FilterElement.java
deleted file mode 100644
index e04aa1e..0000000
--- a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/FilterElement.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.rjunit;
-
-import java.lang.reflect.Constructor;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.taskdefs.optional.rjunit.formatter.FilterFormatter;
-import org.apache.tools.ant.taskdefs.optional.rjunit.formatter.FilterStackFormatter;
-import org.apache.tools.ant.taskdefs.optional.rjunit.formatter.Formatter;
-import org.apache.tools.ant.types.EnumeratedAttribute;
-
-/**
- * A filter element that can be used inside a ResultFormatterElement to denote
- * a filtering. Note that the filtering order correspond to the element
- * order. The first element being the top filter, the last element
- * being the bottom filter.
- *
- * <pre>
- * <!ELEMENT filter>
- * <!ATTLIST filter type (stack) required>
- * <!ATTLIST filter classname CDATA required>
- * </pre>
- *
- * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
- */
-public class FilterElement {
-
-    /** filter classname, is should inherit from FilterFormatter */
-    private String classname;
-
-    /**
-     * Called by introspection on <tt>type</tt> attribute.
-     * @see FilterAttribute
-     */
-    public void setType(FilterAttribute fa) {
-        setClassName(fa.getClassName());
-    }
-
-    /**
-     * Called by introspection on <tt>classname</tt> attribute.
-     * It must inherit from <tt>FilterFormatter</tt>
-     * @see FilterFormatter
-     */
-    public void setClassName(String name) {
-        classname = name;
-    }
-
-    /**
-     * Wrap this filter around a given formatter.
-     * @throws BuildException if any error happens when creating this filter.
-     */
-    public Formatter createFilterFormatter(Formatter f) throws BuildException {
-        try {
-            Class clazz = Class.forName(classname);
-            if (!FilterFormatter.class.isAssignableFrom(clazz)) {
-                throw new BuildException(clazz + " must be a FilterFormatter.");
-            }
-            Constructor ctor = clazz.getConstructor(new Class[]{Formatter.class});
-            return (Formatter) ctor.newInstance(new Object[]{f});
-        } catch (BuildException e) {
-            throw e;
-        } catch (Exception e) {
-            throw new BuildException(e);
-        }
-    }
-
-    /** a predefined set of filters w/ their class mapping */
-    public static class FilterAttribute extends EnumeratedAttribute {
-        /** the predefined alias for filters */
-        private final static String[] VALUES = {"stack"};
-
-        /** the class corresponding to the alias (in the same order) */
-        private final static String[] CLASSNAMES = {FilterStackFormatter.class.getName()};
-
-        public String[] getValues() {
-            return VALUES;
-        }
-
-        /** get the classname matching the alias */
-        public String getClassName() {
-            return CLASSNAMES[getIndex()];
-        }
-    }
-
-}
diff --git a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/JUnitHelper.java b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/JUnitHelper.java
deleted file mode 100644
index dfcbef4..0000000
--- a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/JUnitHelper.java
+++ /dev/null
@@ -1,198 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.rjunit;
-
-import java.io.File;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-import java.net.URL;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-import junit.framework.TestCase;
-
-import org.apache.tools.ant.types.Path;
-
-/**
- * A set of helpers functions to deal with JUnit.
- *
- * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
- */
-public final class JUnitHelper {
-
-    private final static String SUITE_METHODNAME = "suite";
-
-    /**
-     * This method parse the output of the method <tt>toString()</tt>
-     * from the <tt>TestCase</tt> class. The format returned is:
-     * <tt>name(classname)</tt>
-     * @return the string corresponding to name.
-     */
-    public static String getTestName(String text){
-        int p1 = text.indexOf('(');
-        return text.substring(0, p1);
-    }
-
-    /**
-     * This method parse the output of the method <tt>toString()</tt>
-     * from the <tt>TestCase</tt> class. The format returned is:
-     * <tt>name(classname)</tt>
-     * @return the string corresponding to classname.
-     */
-    public static String getSuiteName(String text){
-        int p1 = text.indexOf('(');
-        int p2 = text.indexOf(')', p1);
-        return text.substring(p1 + 1, p2);
-    }
-
-    /**
-     * Returns the Test corresponding to to the given class name
-     * @param loader classloader to use when loading the class or
-     * <tt>null</tt> for system classloader.
-     * @param classname the classname of the test we want to extract.
-     * @throws Exception a generic exception
-     */
-    public static Test getTest(ClassLoader loader, String classname) throws Exception {
-        Class clazz = null;
-        if (loader == null) {
-            clazz = Class.forName(classname);
-        } else {
-            loader.loadClass(classname);
-        }
-        return getTest(clazz);
-    }
-
-
-    /**
-     * Extract a test from a given class
-     * @param clazz the class to extract a test from.
-     */
-    public static Test getTest(Class clazz) {
-        try {
-            Object obj = clazz.newInstance();
-            if (obj instanceof TestSuite) {
-                return (TestSuite) obj;
-            }
-        } catch (Exception e) {
-        }
-        try {
-            // check if there is a suite method
-            Method suiteMethod = clazz.getMethod(SUITE_METHODNAME, new Class[0]);
-            return (Test) suiteMethod.invoke(null, new Class[0]);
-        } catch (Exception e) {
-        }
-
-        // check if it is really a valid testcase
-        int modifiers = clazz.getModifiers();
-        if ( !Modifier.isPublic(modifiers) ||
-                Modifier.isAbstract(modifiers) ||
-                !TestCase.class.isAssignableFrom(clazz)) {
-            return null;
-        }
-        // try to extract a test suite automatically
-        // this will generate warnings if the class is no suitable Test
-        try {
-            return new TestSuite(clazz);
-        } catch (Exception e) {
-        }
-        return null;
-    }
-
-    /**
-     * Search for the given resource and return the directory or archive
-     * that contains it.
-     *
-     * <p>Doesn't work for archives in JDK 1.1 as the URL returned by
-     * getResource doesn't contain the name of the archive.</p>
-     *
-     * @param resource the resource to look for in the JVM classpath.
-     * @return the file or directory containing the resource or
-     * <tt>null</tt> if it does not know how to handle it.
-     */
-    public static File getResourceEntry(String resource) {
-        URL url = JUnitHelper.class.getResource(resource);
-        if (url == null) {
-            // can't find the resource...
-            return null;
-        }
-        String u = url.toString();
-        if (u.startsWith("jar:file:")) {
-            int pling = u.indexOf("!");
-            String jarName = u.substring(9, pling);
-            return new File((new File(jarName)).getAbsolutePath());
-        } else if (u.startsWith("file:")) {
-            int tail = u.indexOf(resource);
-            String dirName = u.substring(5, tail);
-            return new File((new File(dirName)).getAbsolutePath());
-        }
-        // don't know how to handle it...
-        return null;
-    }
-
-    /**
-     * Add the entry corresponding to a specific resource to the
-     * specified path instance. The entry can either be a directory
-     * or an archive.
-     * @param path the path to add the resource entry to.
-     * @param resource the resource to look for.
-     * @see #getResourceEntry(String)
-     */
-    public static void addClasspathEntry(Path path, String resource) {
-        File f = getResourceEntry(resource);
-        if (f != null) {
-            path.createPathElement().setLocation(f);
-        }
-    }
-
-}
diff --git a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/KeepAliveOutputStream.java b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/KeepAliveOutputStream.java
deleted file mode 100644
index 6141cd1..0000000
--- a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/KeepAliveOutputStream.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.rjunit;
-
-import java.io.FilterOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-
-/**
- * Class that can be used to wrap <tt>System.out</tt> and <tt>System.err</tt>
- * without getting anxious about the client closing the stream.
- *
- * <p>
- * In code-language it means that it is not necessary to do:
- * <pre>
- * if (out != System.out && out!= System.err){
- *   out.close();
- * }
- * </pre>
- * </p>
- *
- * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
- */
-public class KeepAliveOutputStream extends FilterOutputStream {
-
-    public KeepAliveOutputStream(OutputStream out) {
-        super(out);
-    }
-
-    /** this method does nothing */
-    public void close() throws IOException {
-        //
-    }
-}
diff --git a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/OutputAttribute.java b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/OutputAttribute.java
deleted file mode 100644
index e7758d2..0000000
--- a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/OutputAttribute.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.rjunit;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.ProjectComponent;
-
-/**
- * Attempt to create an output specific attribute.
- * <p>
- * The possible output values are 'stdout' and 'stderr', otherwise
- * it is assumed that the value represent a file.
- * </p>
- * Note that stdout and stderr are wrapped by a <tt>KeepAliveOutputStream</tt>
- * so that the stream cannot be closed.
- *
- * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
- * @see KeepAliveOutputStream
- */
-public class OutputAttribute extends ProjectComponent {
-
-    /** keyword to represent stdout output */
-    public final static String STDOUT = "stdout";
-
-    /** keyword to represent stderr output */
-    public final static String STDERR = "stderr";
-
-    /** the selected value for output, either stdout,stderr or filepath */
-    private String value;
-
-    /**
-     * Create a new output attribute from a value.
-     */
-    public OutputAttribute(String value) {
-        this.value = value;
-    }
-
-    /**
-     * @return the outputstream corresponding to the selected attribute.
-     */
-    public OutputStream getOutputStream() {
-        if (STDOUT.equals(value)) {
-            return new KeepAliveOutputStream(System.out);
-        } else if (STDERR.equals(value)) {
-            return new KeepAliveOutputStream(System.err);
-        }
-        File f = getProject().resolveFile(value);
-        try {
-            return new FileOutputStream(f);
-        } catch (IOException e) {
-            throw new BuildException(e);
-        }
-    }
-
-}
diff --git a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/RJUnitTask.java b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/RJUnitTask.java
deleted file mode 100644
index a4fd1da..0000000
--- a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/RJUnitTask.java
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.rjunit;
-
-import org.apache.avalon.excalibur.i18n.ResourceManager;
-import org.apache.avalon.excalibur.i18n.Resources;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Task;
-
-/**
- * The core JUnit task.
- *
- * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
- */
-public class RJUnitTask extends Task {
-
-    private final static Resources RES =
-            ResourceManager.getPackageResources(RJUnitTask.class);
-
-    /** port to run the server on */
-    private int port = -1;
-
-    /** timeout period in ms */
-    private long timeout = -1;
-
-    /** client configuraiton element */
-    private ClientElement client = null;
-
-    /** server configuration element */
-    private ServerElement server = null;
-
-// task implementation
-
-    public void execute() throws BuildException {
-        if (client == null && server == null) {
-            throw new BuildException("Invalid state: need to be server, client or both");
-        }
-
-        // 1) server and client
-        if (server != null && client != null) {
-            ServerWorker worker = new ServerWorker();
-            worker.start();
-            client.execute();
-            Exception caught = null;
-            try {
-                worker.join();
-                caught = worker.getException();
-            } catch (InterruptedException e){
-                caught = e;
-            }
-            if (caught != null){
-                throw new BuildException(caught);
-            }
-            return;
-        }
-
-        // 2) server only (waiting for client)
-        if (server != null && client == null) {
-            server.execute();
-            return;
-        }
-
-        // 3) client only (connecting to server)
-        if (server == null && client != null) {
-            client.execute();
-            return;
-        }
-    }
-
-// Ant bean accessors
-
-    public void setPort(int port) {
-        this.port = port;
-    }
-
-    public void setTimeout(long timeout) {
-        this.timeout = timeout;
-    }
-
-    /**
-     * create a new client in charge of running tests and sending
-     * the results to the server that collect them.
-     */
-    public ClientElement createClient() {
-        if (client == null) {
-            client = new ClientElement(this);
-        }
-        return client;
-    }
-
-    /**
-     * create a new client in charge of running tests and sending
-     * the results to the server that collect them.
-     */
-    public ServerElement createServer() {
-        if (server == null) {
-            server = new ServerElement(this);
-        }
-        return server;
-    }
-
-
-    /** the worker to run the server on */
-    class ServerWorker extends Thread {
-        private Exception caught = null;
-
-        public void run() {
-            try {
-                server.execute();
-            } catch (Exception e) {
-                caught = e;
-                e.printStackTrace();
-            }
-        }
-
-        public Exception getException() {
-            return caught;
-        }
-    }
-}
diff --git a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/Resources.properties b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/Resources.properties
deleted file mode 100644
index 74a470f..0000000
--- a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/Resources.properties
+++ /dev/null
@@ -1,3 +0,0 @@
-# task
-task.process-cmdline.log = Executing {0}
-task.process-failed.error = Process failed.
\ No newline at end of file
diff --git a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/ResultFormatterElement.java b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/ResultFormatterElement.java
deleted file mode 100644
index 3e770c6..0000000
--- a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/ResultFormatterElement.java
+++ /dev/null
@@ -1,235 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.rjunit;
-
-import java.io.File;
-import java.io.OutputStream;
-import java.util.Properties;
-import java.util.StringTokenizer;
-import java.util.Vector;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.taskdefs.optional.rjunit.formatter.Formatter;
-import org.apache.tools.ant.types.EnumeratedAttribute;
-
-/**
- * An element representing a <tt>Formatter</tt>
- *
- * <pre>
- * <!ELEMENT formatter (filter)*>
- * <!ATTLIST formatter type (plain|xml|brief) #REQUIRED>
- * <!ATTLIST formatter classname CDATA #REQUIRED>
- * <!ATTLIST formatter extension CDATA #IMPLIED>
- * <!ATTLIST formatter usefile (yes|no) no>
- * </pre>
- *
- * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
- *
- * @see RJUnitTask
- * @see Formatter
- */
-public class ResultFormatterElement {
-
-    /** output stream for the formatter */
-    private OutputStream out = new KeepAliveOutputStream(System.out);
-
-    /** formatter classname */
-    private String classname;
-
-    /** the filters to apply to this formatter */
-    private Vector filters = new Vector();
-
-    /** the parameters set for configuration purposes */
-    private Vector params = new Vector();
-
-    /**
-     * set an existing type of formatter.
-     * @see TypeAttribute
-     * @see #setClassname(String)
-     */
-    public void setType(TypeAttribute type) {
-        setClassname(type.getClassName());
-    }
-
-    /**
-     * <p> Set name of class to be used as the formatter.
-     *
-     * <p> This class must implement <code>Formatter</code>
-     */
-    public void setClassname(String classname) {
-        this.classname = classname;
-    }
-
-    /**
-     * Setting a comma separated list of filters in the specified order.
-     * @see #addFilter(FilterElement)
-     */
-    public void setFilters(String filters) {
-        StringTokenizer st = new StringTokenizer(filters, ",");
-        while (st.hasMoreTokens()) {
-            FilterElement fe = new FilterElement();
-            FilterElement.FilterAttribute fa = new FilterElement.FilterAttribute();
-            fa.setValue(st.nextToken());
-            fe.setType(fa);
-            addFilter(fe);
-        }
-    }
-
-    /**
-     * Add a filter to this formatter.
-     */
-    public void addFilter(FilterElement fe) {
-        filters.addElement(fe);
-    }
-
-    /**
-     * Add a parameter that can be used for configuration.
-     */
-    public void addParam(Parameter param) {
-        params.addElement(param);
-    }
-
-    /**
-     * Set whether the formatter should log to file.
-     */
-    public void setOutput(OutputAttribute output) {
-        this.out = output.getOutputStream();
-    }
-
-    /**
-     * create the Formatter corresponding to this element.
-     */
-    protected Formatter createFormatter() throws BuildException {
-        if (classname == null) {
-            throw new BuildException("you must specify type or classname");
-        }
-        Formatter f = null;
-        try {
-            Class clazz = Class.forName(classname);
-            if (!Formatter.class.isAssignableFrom(clazz)) {
-                throw new BuildException(clazz + " is not a Formatter");
-            }
-            f = (Formatter) clazz.newInstance();
-        } catch (BuildException e) {
-            throw e;
-        } catch (Exception e) {
-            throw new BuildException(e);
-        }
-
-        // wrap filters in the reverse order: first = top, last = bottom.
-        for (int i = filters.size() - 1; i >= 0; i--) {
-            FilterElement fe = (FilterElement) filters.elementAt(i);
-            f = fe.createFilterFormatter(f);
-        }
-
-        // create properties from parameters
-        Properties props = new Properties();
-        for (int i = 0; i < params.size(); i++) {
-            Parameter param = (Parameter) params.elementAt(i);
-            props.put(param.getName(), param.getValue());
-        }
-        // it is assumed here that the filters are chaining til the
-        // wrapped formatter.
-        f.init(props);
-        return f;
-    }
-
-    /**
-     * <p> Enumerated attribute with the values "plain", "xml" and "brief".
-     * <p> Use to enumerate options for <tt>type</tt> attribute.
-     */
-    public final static class TypeAttribute extends EnumeratedAttribute {
-        private final static String[] VALUES = {"plain", "xml", "brief"};
-        private final static String[] CLASSNAMES = {
-            "org.apache.tools.ant.taskdefs.optional.rjunit.formatter.PlainFormatter",
-            "org.apache.tools.ant.taskdefs.optional.rjunit.formatter.XMLFormatter",
-            "org.apache.tools.ant.taskdefs.optional.rjunit.formatter.BriefFormatter"
-        };
-
-        public String[] getValues() {
-            return VALUES;
-        }
-
-        public String getClassName() {
-            return CLASSNAMES[getIndex()];
-        }
-    }
-
-    /** a parameter that be used to configure a formatter */
-    public final static class Parameter {
-        private String name;
-        private String value;
-
-        public void setName(String name) {
-            this.name = name;
-        }
-
-        public void setLocation(File file) {
-            setValue(file.getAbsolutePath());
-        }
-
-        public void setValue(String value) {
-            this.value = value;
-        }
-
-        public String getName() {
-            return this.name;
-        }
-
-        public String getValue() {
-            return this.value;
-        }
-    }
-}
-
diff --git a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/ServerElement.java b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/ServerElement.java
deleted file mode 100644
index 0ef9dd9..0000000
--- a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/ServerElement.java
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.rjunit;
-
-import java.io.IOException;
-import java.util.ArrayList;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.ProjectComponent;
-import org.apache.tools.ant.taskdefs.optional.rjunit.formatter.Formatter;
-import org.apache.tools.ant.taskdefs.optional.rjunit.remote.Server;
-
-/**
- * An element representing the server configuration.
- *
- * <pre>
- * <!ELEMENT server (formatter)*>
- * <!ATTLIST server port numeric 6666>
- * <!ATTLIST server haltonfailure (yes|no) no>
- * <!ATTLIST server haltonerror (yes|no) no>
- * </pre>
- *
- * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
- */
-public final class ServerElement extends ProjectComponent {
-
-    /** formatters that write the tests results */
-    private ArrayList formatters = new ArrayList();
-
-    /** port to run the server on. Default to 6666 */
-    private int port = 6666;
-
-    /** stop the client run if a failure occurs */
-    private boolean haltOnFailure = false;
-
-    /** stop the client run if an error occurs */
-    private boolean haltOnError = false;
-
-    /** the parent task */
-    private RJUnitTask parent;
-
-    private Server server;
-
-    /** create a new server */
-    public ServerElement(RJUnitTask value) {
-        parent = value;
-    }
-
-    /** start the server and block until client has finished */
-    public void execute() throws BuildException {
-        // configure the server...
-        server = new Server(port);
-        final int formatterCount = formatters.size();
-        for (int i = 0; i < formatterCount; i++) {
-            final Formatter f = (Formatter) formatters.get(i);
-            server.addListener(f);
-        }
-
-        // and run it. It will stop once a client has finished.
-        try {
-            server.start(false); // do not loop
-        } catch (IOException e) {
-            throw new BuildException(e);
-        } finally {
-            server.shutdown();
-        }
-    }
-
-    /** set the port to listen to */
-    public void setPort(int value) {
-        port = value;
-    }
-
-//@fixme  logic problem here, should the server say to the client
-// that there it should stop or should the client do it itself ?
-
-    public void setHaltOnFailure(boolean value) {
-        haltOnFailure = value;
-    }
-
-    public void setHaltOnError(boolean value) {
-        haltOnError = value;
-    }
-
-    /** add a new formatter element */
-    public void addConfiguredFormatter(ResultFormatterElement fe) {
-        Formatter formatter = fe.createFormatter();
-        formatters.add(formatter);
-    }
-}
diff --git a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/TestElement.java b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/TestElement.java
deleted file mode 100644
index 2c70574..0000000
--- a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/TestElement.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.rjunit;
-
-import java.util.Enumeration;
-
-/**
- * A simple test element.
- *
- * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
- */
-public class TestElement extends BaseTestElement {
-
-    /** classname of JUnit test */
-    private String name;
-
-//@fixme, a path is needed for a test.
-
-    public Enumeration getTests() {
-        return new ArrayEnumeration(new String[]{name});
-    }
-
-// Ant bean setters
-
-    public void setName(String value) {
-        this.name = value;
-    }
-}
diff --git a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/WatchdogTest.java b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/WatchdogTest.java
deleted file mode 100644
index 6ada1ff..0000000
--- a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/WatchdogTest.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Jakarta-Regexp", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- */
-package org.apache.tools.ant.taskdefs.optional.rjunit;
-
-import junit.extensions.TestDecorator;
-import junit.framework.AssertionFailedError;
-import junit.framework.Test;
-import junit.framework.TestResult;
-
-/**
- * A Test decorator that allows to cancel a test if it exceeds
- * a certain time. It can be used globally or individually over
- * each testcase.
- *
- * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
- */
-public class WatchdogTest extends TestDecorator {
-
-    /** the time out delay in msecs */
-    private long timeOut;
-
-    /**
-     * Create a new watchdog.
-     * @param test the test to watch for
-     * @param msecs the time out delay in msecs.
-     */
-    public WatchdogTest(Test test, long msecs) {
-        super(test);
-        timeOut = msecs;
-    }
-
-    public void run(TestResult result) {
-        Thread worker = createWorker(result);
-        worker.start();
-
-        try {
-            // wait at most the timeOut time.
-            worker.join(timeOut);
-
-            // if the thread is still alive, it must be killed.
-            if (worker.isAlive()) {
-                worker.interrupt();
-                result.addFailure(getTest(),
-                        new AssertionFailedError("Timed out after " + timeOut + "ms"));
-            }
-        } catch (InterruptedException e) {
-            worker.interrupt();
-            result.addError(getTest(), e);
-            result.stop();
-        }
-    }
-
-    /** create a new worker thread */
-    protected Thread createWorker(final TestResult result) {
-        Thread worker = new Thread("JUnit Test Worker") {
-            public void run() {
-                getTest().run(result);
-            }
-        };
-        return worker;
-    }
-
-}
diff --git a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/ZipScanner.java b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/ZipScanner.java
deleted file mode 100644
index 4aac208..0000000
--- a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/ZipScanner.java
+++ /dev/null
@@ -1,191 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.rjunit;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.Enumeration;
-import java.util.Vector;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipFile;
-
-import org.apache.tools.ant.DirectoryScanner;
-
-/**
- * Provide a way to scan entries in a zip file. Note that it extends
- * DirectoryScanner to make use of protected methods but implementation
- * may not be valid for some methods.
- * <p>
- * the setBaseDir() must be called to set the reference to the archive
- * file (.jar or .zip).
- * </p>
- *
- * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
- */
-public class ZipScanner extends DirectoryScanner {
-    public ZipScanner() {
-    }
-
-    public void setExcludes(String[] excludes) {
-        super.setExcludes(excludes);
-        normalize(this.excludes);
-    }
-
-    public void setIncludes(String[] includes) {
-        super.setIncludes(includes);
-        normalize(this.includes);
-    }
-
-    /**
-     * normalize a set of paths so that it uses / otherwise matching will
-     * fail beautifully since archives use / to denote a path.
-     */
-    protected void normalize(String[] files) {
-        if (files != null) {
-            for (int i = 0; i < files.length; i++) {
-                files[i] = files[i].replace('\\', '/');
-            }
-        }
-    }
-
-    /**
-     * Scans the archive for files that match at least one include
-     * pattern, and don't match any exclude patterns.
-     *
-     * @exception IllegalStateException when the zip file was set incorrecly
-     */
-    public void scan() {
-        if (basedir == null) {
-            throw new IllegalStateException("No zipfile set");
-        }
-        if (!basedir.exists()) {
-            throw new IllegalStateException("zipfile " + basedir
-                    + " does not exist");
-        }
-        if (basedir.isDirectory()) {
-            throw new IllegalStateException("zipfile " + basedir
-                    + " is not a file");
-        }
-
-        if (includes == null) {
-            // No includes supplied, so set it to 'matches all'
-            includes = new String[1];
-            includes[0] = "**";
-        }
-        if (excludes == null) {
-            excludes = new String[0];
-        }
-
-        filesIncluded = new Vector();
-        filesNotIncluded = new Vector();
-        filesExcluded = new Vector();
-        dirsIncluded = new Vector();
-        dirsNotIncluded = new Vector();
-        dirsExcluded = new Vector();
-
-        if (isIncluded("")) {
-            if (!isExcluded("")) {
-                dirsIncluded.addElement("");
-            } else {
-                dirsExcluded.addElement("");
-            }
-        } else {
-            dirsNotIncluded.addElement("");
-        }
-        scandir(basedir, "", true);
-    }
-
-    protected void scandir(File file, String vpath, boolean fast) {
-        ZipFile zip = null;
-        try {
-            zip = new ZipFile(file);
-        } catch (IOException e) {
-            throw new IllegalStateException(e.getMessage());
-        }
-
-        Enumeration entries = zip.entries();
-        while (entries.hasMoreElements()) {
-            ZipEntry entry = (ZipEntry) entries.nextElement();
-            String name = entry.getName();
-            // @fixme do we need to strip out entries that starts
-            // with . or ./ ?
-            if (entry.isDirectory()) {
-                if (isIncluded(name)) {
-                    if (!isExcluded(name)) {
-                        dirsIncluded.addElement(name);
-                    } else {
-                        everythingIncluded = false;
-                        dirsExcluded.addElement(name);
-                    }
-                } else {
-                    everythingIncluded = false;
-                    dirsNotIncluded.addElement(name);
-                }
-            } else {
-                if (isIncluded(name)) {
-                    if (!isExcluded(name)) {
-                        filesIncluded.addElement(name);
-                    } else {
-                        everythingIncluded = false;
-                        filesExcluded.addElement(name);
-                    }
-                } else {
-                    everythingIncluded = false;
-                    filesNotIncluded.addElement(name);
-                }
-            }
-        }
-    }
-
-}
diff --git a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/formatter/BaseFormatter.java b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/formatter/BaseFormatter.java
deleted file mode 100644
index a5140c4..0000000
--- a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/formatter/BaseFormatter.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.rjunit.formatter;
-
-import java.util.Properties;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.taskdefs.optional.rjunit.remote.TestRunEvent;
-
-/**
- * Provide a common set of attributes and methods to factorize
- *
- * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
- */
-public abstract class BaseFormatter implements Formatter {
-
-    public void init(Properties props) throws BuildException {
-    }
-
-    public void onTestStarted(TestRunEvent evt) {
-    }
-
-    public void onTestEnded(TestRunEvent evt) {
-    }
-
-    public void onTestFailure(TestRunEvent evt) {
-    }
-
-    public void onTestError(TestRunEvent evt) {
-    }
-
-    public void onSuiteStarted(TestRunEvent evt) {
-    }
-
-    public void onSuiteEnded(TestRunEvent evt) {
-    }
-
-    public void onRunStarted(TestRunEvent evt) {
-    }
-
-    public void onRunEnded(TestRunEvent evt) {
-    }
-
-    public void onRunStopped(TestRunEvent evt) {
-    }
-
-}
diff --git a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/formatter/BaseStreamFormatter.java b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/formatter/BaseStreamFormatter.java
deleted file mode 100644
index 3957256..0000000
--- a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/formatter/BaseStreamFormatter.java
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.rjunit.formatter;
-
-import java.io.BufferedWriter;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.OutputStreamWriter;
-import java.io.PrintWriter;
-import java.util.Properties;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.taskdefs.optional.rjunit.KeepAliveOutputStream;
-import org.apache.tools.ant.taskdefs.optional.rjunit.remote.TestRunEvent;
-
-/**
- * Base formatter providing default implementation to deal with
- * either stdout or a file.
- * <p>
- * The file is specified by initializing the formatter with
- * a filepath mapped by the key 'file'.
- * </p>
- * <p>
- * if no file key exists in the properties, it defaults to stdout.
- * </p>
- *
- * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
- */
-public class BaseStreamFormatter extends BaseFormatter {
-
-    /** the key used to specifiy a filepath */
-    public final static String FILE_KEY = "file";
-
-    /** writer to output the data to */
-    private PrintWriter writer;
-
-    protected void finalize() throws Throwable {
-        super.finalize();
-        close();
-    }
-
-    public void init(Properties props) throws BuildException {
-        String file = props.getProperty(FILE_KEY);
-        OutputStream os = null;
-        if (file != null) {
-            try {
-                // fixme need to resolve the file !!!!
-                os = new FileOutputStream(file);
-            } catch (IOException e) {
-                throw new BuildException(e);
-            }
-        } else {
-            os = new KeepAliveOutputStream(System.out);
-        }
-        setOutput(os);
-    }
-
-    /**
-     * Helper method to wrap the stream over an UTF8 buffered writer.
-     */
-    protected void setOutput(OutputStream value) {
-        try {
-            // do not buffer but flush each line.
-            writer = new PrintWriter(new OutputStreamWriter(value, "UTF8"), true);
-        } catch (IOException e) {
-            // should not happen
-            throw new BuildException(e);
-        }
-    }
-
-    public void onRunEnded(TestRunEvent evt) {
-        close();
-    }
-
-    protected void close() {
-        if (writer != null) {
-            writer.flush();
-            writer.close();
-        }
-    }
-
-    /**
-     * @return the writer used to print data.
-     */
-    protected final PrintWriter getWriter() {
-        return writer;
-    }
-
-}
diff --git a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/formatter/BriefFormatter.java b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/formatter/BriefFormatter.java
deleted file mode 100644
index 90e9499..0000000
--- a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/formatter/BriefFormatter.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.rjunit.formatter;
-
-import org.apache.avalon.excalibur.i18n.ResourceManager;
-import org.apache.avalon.excalibur.i18n.Resources;
-import org.apache.tools.ant.taskdefs.optional.rjunit.remote.TestRunEvent;
-
-/**
- * Display additional messages from a <tt>SummaryFormatter</tt>
- * for failures and errors.
- *
- * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
- */
-public class BriefFormatter extends SummaryFormatter {
-
-    private final static Resources RES =
-            ResourceManager.getPackageResources(BriefFormatter.class);
-
-    public void onTestFailure(TestRunEvent evt) {
-        String msg = RES.getString("brief.status-failure.msg", evt.getName(),
-                evt.getError().getStackTrace());
-        getWriter().println(msg);
-        super.onTestFailure(evt);
-    }
-
-    public void onTestError(TestRunEvent evt) {
-        String msg = RES.getString("brief.status-error.msg", evt.getName(),
-                evt.getError().getStackTrace());
-        getWriter().println(msg);
-        super.onTestError(evt);
-    }
-}
diff --git a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/formatter/FilterFormatter.java b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/formatter/FilterFormatter.java
deleted file mode 100644
index 430709a..0000000
--- a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/formatter/FilterFormatter.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.rjunit.formatter;
-
-import java.util.Properties;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.taskdefs.optional.rjunit.remote.TestRunEvent;
-
-/**
- * A base class that can be used to filter data.
- *
- * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
- */
-public abstract class FilterFormatter implements Formatter {
-
-    private Formatter formatter;
-
-    protected FilterFormatter(Formatter formatter) {
-        setFormatter(formatter);
-    }
-
-    /** final to enforce chaining of initialization */
-    public final void init(Properties props) throws BuildException {
-        formatter.init(props);
-    }
-
-    public void onSuiteStarted(TestRunEvent evt) {
-        formatter.onSuiteStarted(evt);
-    }
-
-    public void onSuiteEnded(TestRunEvent evt) {
-        formatter.onSuiteEnded(evt);
-    }
-
-    public void onTestStarted(TestRunEvent evt) {
-        formatter.onTestStarted(evt);
-    }
-
-    public void onTestEnded(TestRunEvent evt) {
-        formatter.onTestEnded(evt);
-    }
-
-    public void onTestFailure(TestRunEvent evt) {
-        formatter.onTestFailure(evt);
-    }
-
-    public void onTestError(TestRunEvent evt) {
-        formatter.onTestError(evt);
-    }
-
-    public void onRunStarted(TestRunEvent evt) {
-        formatter.onRunStarted(evt);
-    }
-
-    public void onRunEnded(TestRunEvent evt) {
-        formatter.onRunEnded(evt);
-    }
-
-    public void onRunStopped(TestRunEvent evt) {
-        formatter.onRunEnded(evt);
-    }
-
-    /** set the wrapped formatter */
-    protected void setFormatter(Formatter value) {
-        formatter = value;
-    }
-
-    /** return the wrapped formatter */
-    protected Formatter getFormatter() {
-        return formatter;
-    }
-}
diff --git a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/formatter/FilterStackFormatter.java b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/formatter/FilterStackFormatter.java
deleted file mode 100644
index 60e1e48..0000000
--- a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/formatter/FilterStackFormatter.java
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.rjunit.formatter;
-
-import java.util.StringTokenizer;
-
-import org.apache.tools.ant.util.StringUtils;
-import org.apache.tools.ant.taskdefs.optional.rjunit.remote.TestRunEvent;
-import org.apache.tools.ant.taskdefs.optional.rjunit.remote.ExceptionData;
-
-/**
- * Filtered Formatter that strips out unwanted stack frames from the full
- * stack trace, for instance it will filter the lines containing the
- * following matches:
- * <pre>
- *   junit.framework.TestCase
- *   junit.framework.TestResult
- *   junit.framework.TestSuite
- *   junit.framework.Assert.
- *   junit.swingui.TestRunner
- *   junit.awtui.TestRunner
- *   junit.textui.TestRunner
- *   java.lang.reflect.Method.invoke(
- *   org.apache.tools.ant.
- * </pre>
- * Removing all the above will help to make stacktrace more readable.
- *
- * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
- */
-public class FilterStackFormatter extends FilterFormatter {
-
-    /** the set of matches to look for in a stack trace */
-    private final static String[] DEFAULT_TRACE_FILTERS = new String[]{
-        "junit.framework.TestCase",
-        "junit.framework.TestResult",
-        "junit.framework.TestSuite",
-        "junit.framework.Assert.", // don't filter AssertionFailure
-        "junit.swingui.TestRunner",
-        "junit.awtui.TestRunner",
-        "junit.textui.TestRunner",
-        "java.lang.reflect.Method.invoke(",
-        "org.apache.tools.ant."
-    };
-
-    private final String[] filters = getFilters();
-
-    /**
-     * Creates a new <tt>FilterStackFormatter</tt>
-     * @param formatter the formatter to be filtered.
-     */
-    public FilterStackFormatter(Formatter formatter) {
-        super(formatter);
-    }
-
-    public void onTestFailure(TestRunEvent evt) {
-        filterEvent(evt);
-        super.onTestFailure(evt);
-    }
-
-    public void onTestError(TestRunEvent evt) {
-        filterEvent(evt);
-        super.onTestFailure(evt);
-    }
-
-    protected void filterEvent(TestRunEvent evt){
-        String filteredTrace = filter(evt.getError().getStackTrace());
-        ExceptionData error = new ExceptionData(
-                evt.getError().getType(),
-                evt.getError().getMessage(),
-                filteredTrace);
-        evt.setError(error);
-    }
-
-    protected String filter(String trace){
-        StringTokenizer st = new StringTokenizer(trace, "\r\n");
-        StringBuffer buf = new StringBuffer(trace.length());
-        while (st.hasMoreTokens()) {
-            String line = st.nextToken();
-            if (accept(line)) {
-                buf.append(line).append(StringUtils.LINE_SEP);
-            }
-        }
-        return buf.toString();
-    }
-    /**
-     * Check whether or not the line should be accepted.
-     * @param line the line to be check for acceptance.
-     * @return <tt>true</tt> if the line is accepted, <tt>false</tt> if not.
-     */
-    protected boolean accept(String line) {
-        for (int i = 0; i < filters.length; i++) {
-            if (line.indexOf(filters[i]) > 0) {
-                return false;
-            }
-        }
-        return true;
-    }
-
-    /**
-     * @return the filters to use for this
-     */
-    protected static String[] getFilters(){
-        // @fixme hack for now, need something better.
-        // using configuration properties ?
-        String filters = System.getProperty("ant.rjunit.stacktrace.filters");
-        if (filters == null){
-            return DEFAULT_TRACE_FILTERS;
-        }
-        StringTokenizer st = new StringTokenizer(filters, ",");
-        String[] results = new String[ st.countTokens() ];
-        int i = 0;
-        while (st.hasMoreTokens()){
-            results[i++] = st.nextToken();
-        }
-        return results;
-    }
-
-}
diff --git a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/formatter/Formatter.java b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/formatter/Formatter.java
deleted file mode 100644
index 4b732c5..0000000
--- a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/formatter/Formatter.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.rjunit.formatter;
-
-import java.util.Properties;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.taskdefs.optional.rjunit.remote.TestRunListener;
-
-/**
- * The formatter interface.
- *
- * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
- */
-public interface Formatter extends TestRunListener {
-    /**
-     * Initialize the formatter with some custom properties
-     * For example it could be a filename, a port and hostname,
-     * a database, etc...
-     */
-    public void init(Properties props) throws BuildException;
-
-}
diff --git a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/formatter/PlainFormatter.java b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/formatter/PlainFormatter.java
deleted file mode 100644
index 63cb4fe..0000000
--- a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/formatter/PlainFormatter.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.rjunit.formatter;
-
-import java.util.Properties;
-
-import org.apache.tools.ant.taskdefs.optional.rjunit.remote.TestRunEvent;
-
-/**
- * Default formatter to text.
- *
- * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
- */
-public class PlainFormatter extends BaseStreamFormatter {
-
-    public void onSuiteStarted(TestRunEvent evt) {
-        getWriter().println("  suite: " + evt.getName());
-        super.onSuiteStarted(evt);
-    }
-
-    public void onSuiteEnded(TestRunEvent evt) {
-        getWriter().println("  end suite");
-        super.onSuiteEnded(evt);
-    }
-
-    public void onTestStarted(TestRunEvent evt) {
-        getWriter().println("    running test: " + evt.getName());
-    }
-
-    public void onTestEnded(TestRunEvent evt) {
-        getWriter().println("    success: " + evt.getName());
-    }
-
-    public void onTestFailure(TestRunEvent evt) {
-        getWriter().println("    failure: " + evt.getName());
-        getWriter().println(evt.getError().getStackTrace());
-    }
-
-    public void onTestError(TestRunEvent evt) {
-        getWriter().println("    error: " + evt.getName());
-        getWriter().println(evt.getError().getStackTrace());
-    }
-
-    public void onRunEnded(TestRunEvent evt) {
-        getWriter().println("run ended");
-    }
-
-    public void onRunStopped(TestRunEvent evt) {
-        getWriter().println("run stopped");
-    }
-}
diff --git a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/formatter/Resources.properties b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/formatter/Resources.properties
deleted file mode 100644
index 9ffd8a5..0000000
--- a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/formatter/Resources.properties
+++ /dev/null
@@ -1,8 +0,0 @@
-# Summary formatter
-suite.summary.msg = TestSuite: {0}\nTests run: {1, number, integer}, Failures: {2, number, integer}, Errors: {3, number, integer}, Time elapsed: {4, number, integer}s\n
-run.summary.msg=Summary Tests run: {0, number, integer}, Failures: {1, number, integer}, Errors: {2, number, integer}, Time elapsed: {3, number, integer}s
-
-# Brief formatter
-brief.status-error.msg = TestCase: {0}\tCaused an ERROR\n{1}\n
-brief.status-failure.msg = TestCase: {0}\tFAILED\n{1}\n
-
diff --git a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/formatter/SummaryFormatter.java b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/formatter/SummaryFormatter.java
deleted file mode 100644
index ad74506..0000000
--- a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/formatter/SummaryFormatter.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.rjunit.formatter;
-
-import org.apache.avalon.excalibur.i18n.ResourceManager;
-import org.apache.avalon.excalibur.i18n.Resources;
-import org.apache.tools.ant.taskdefs.optional.rjunit.remote.TestRunEvent;
-import org.apache.tools.ant.taskdefs.optional.rjunit.remote.TestSummary;
-
-/**
- * Display a summary message at the end of a testsuite stating
- * runs, failures, errors, and elapsed time.
- *
- * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
- */
-public class SummaryFormatter extends BaseStreamFormatter {
-
-    private final static Resources RES =
-            ResourceManager.getPackageResources(SummaryFormatter.class);
-
-    public void onSuiteEnded(TestRunEvent evt) {
-        TestSummary summary = evt.getSummary();
-        String msg = RES.getString("suite.summary.msg",
-                evt.getName(),
-                new Integer(summary.runCount()),
-                new Integer(summary.failureCount()),
-                new Integer(summary.errorCount()),
-                new Long(summary.elapsedTime()/1000));
-        getWriter().println(msg);
-    }
-
-    public void onRunEnded(TestRunEvent evt) {
-        TestSummary summary = evt.getSummary();
-        String msg = RES.getString("run.summary.msg",
-                new Integer(summary.runCount()),
-                new Integer(summary.failureCount()),
-                new Integer(summary.errorCount()),
-                new Long(summary.elapsedTime()/1000));
-        getWriter().println(msg);
-    }
-}
diff --git a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/formatter/XMLFormatter.java b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/formatter/XMLFormatter.java
deleted file mode 100644
index b9b34e8..0000000
--- a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/formatter/XMLFormatter.java
+++ /dev/null
@@ -1,285 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.rjunit.formatter;
-
-import java.io.IOException;
-import java.util.Enumeration;
-import java.util.Hashtable;
-import java.util.Properties;
-import java.util.Date;
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.Text;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.taskdefs.optional.rjunit.JUnitHelper;
-import org.apache.tools.ant.taskdefs.optional.rjunit.remote.TestRunEvent;
-import org.apache.tools.ant.taskdefs.optional.rjunit.remote.TestSummary;
-import org.apache.tools.ant.taskdefs.optional.rjunit.remote.ExceptionData;
-import org.apache.tools.ant.util.DOMElementWriter;
-import org.apache.tools.ant.util.DateUtils;
-import org.apache.tools.ant.util.StringUtils;
-
-/**
- * XML Formatter. Due to the nature of the XML we are forced to store
- * everything in memory until it is finished. It might be resource
- * intensive when running lots of testcases.
- *
- * <testsuites stop="true">
- *  <testsuite name="" time="">
- *    <testcase name="" time="">
- *      <error/>
- *    </testcase>
- *    <testcase name="" time="">
- *      <failure/>
- *    </testcase>
- *  </testsuite>
- * </testsuites>
- *
- * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
- */
-public class XMLFormatter extends BaseStreamFormatter {
-
-    /** the testsuites element for the aggregate document */
-    public final static String TESTSUITES = "testsuites";
-
-    /** the testsuite element */
-    public final static String TESTSUITE = "testsuite";
-
-    /** the testcase element */
-    public final static String TESTCASE = "testcase";
-
-    /** the error element */
-    public final static String ERROR = "error";
-
-    /** the failure element */
-    public final static String FAILURE = "failure";
-
-    /** the system-err element */
-    public final static String SYSTEM_ERR = "system-err";
-
-    /** the system-out element */
-    public final static String SYSTEM_OUT = "system-out";
-
-    /** package attribute for the aggregate document */
-    public final static String ATTR_PACKAGE = "package";
-
-    /** name attribute for property, testcase and testsuite elements */
-    public final static String ATTR_NAME = "name";
-
-    /** time attribute for testcase and testsuite elements */
-    public final static String ATTR_TIME = "time";
-
-    /** errors attribute for testsuite elements */
-    public final static String ATTR_ERRORS = "errors";
-
-    /** failures attribute for testsuite elements */
-    public final static String ATTR_FAILURES = "failures";
-
-    /** tests attribute for testsuite elements */
-    public final static String ATTR_TESTS = "tests";
-
-    /** type attribute for failure and error elements */
-    public final static String ATTR_TYPE = "type";
-
-    /** message attribute for failure elements */
-    public final static String ATTR_MESSAGE = "message";
-
-    /** the properties element */
-    public final static String PROPERTIES = "properties";
-
-    /** the property element */
-    public final static String PROPERTY = "property";
-
-    /** value attribute for property elements */
-    public final static String ATTR_VALUE = "value";
-
-    /** The XML document. */
-    private Document doc = getDocumentBuilder().newDocument();
-
-    /**  The wrapper for the whole testsuite. */
-    private Element rootElement = doc.createElement(TESTSUITES);
-
-    private Element lastTestElement = null;
-    private TestRunEvent lastTestEvent = null;
-    private Element lastSuiteElement = null;
-    private long programStart;
-
-    public void onSuiteStarted(TestRunEvent evt) {
-        String fullclassname = evt.getName();
-        int pos = fullclassname.lastIndexOf('.');
-
-        // a missing . might imply no package at all. Don't get fooled.
-        String pkgName = (pos == -1) ? "" : fullclassname.substring(0, pos);
-        String classname = (pos == -1) ? fullclassname : fullclassname.substring(pos + 1);
-
-        Element suite = doc.createElement(TESTSUITE);
-        suite.setAttribute(ATTR_NAME, classname);
-        suite.setAttribute(ATTR_PACKAGE, pkgName);
-        rootElement.appendChild(suite);
-        lastSuiteElement = suite;
-    }
-
-    public void onSuiteEnded(TestRunEvent evt) {
-        Element suite = lastSuiteElement;
-        TestSummary summary = evt.getSummary();
-        suite.setAttribute(ATTR_TIME, String.valueOf(summary.elapsedTime()/1000.0f));
-        suite.setAttribute(ATTR_TESTS, String.valueOf(summary.runCount()));
-        suite.setAttribute(ATTR_FAILURES, String.valueOf(summary.failureCount()));
-        suite.setAttribute(ATTR_ERRORS, String.valueOf(summary.errorCount()));
-        lastSuiteElement = null;
-    }
-
-    public void onRunEnded(TestRunEvent evt) {
-        final String elapsedTime = String.valueOf(evt.getTimeStamp() - programStart);
-        rootElement.setAttribute("elapsed_time", elapsedTime);
-        // Output properties
-        final Element propsElement = doc.createElement(PROPERTIES);
-        rootElement.appendChild(propsElement);
-        final Properties props = evt.getProperties();
-        if (props != null) {
-            Enumeration e = props.propertyNames();
-            while (e.hasMoreElements()) {
-                String name = (String) e.nextElement();
-                Element propElement = doc.createElement(PROPERTY);
-                propElement.setAttribute(ATTR_NAME, name);
-                propElement.setAttribute(ATTR_VALUE, props.getProperty(name));
-                propsElement.appendChild(propElement);
-            }
-        }
-        close();
-    }
-
-    public void onRunStarted(TestRunEvent evt) {
-        programStart = evt.getTimeStamp();
-        final String date = DateUtils.format(programStart, DateUtils.ISO8601_DATETIME_PATTERN);
-        rootElement.setAttribute("program_start", date);
-    }
-
-    public void onRunStopped(TestRunEvent evt) {
-        rootElement.setAttribute("stopped", "true");
-        onRunEnded(evt);
-    }
-
-    public void onTestStarted(TestRunEvent evt) {
-        Element test = doc.createElement(TESTCASE);
-        String name = JUnitHelper.getTestName(evt.getName());
-        test.setAttribute(ATTR_NAME, name);
-        String suiteName = JUnitHelper.getSuiteName(evt.getName());
-        String lastSuiteName = lastSuiteElement.getAttribute(ATTR_PACKAGE)
-                + "." + lastSuiteElement.getAttribute(ATTR_NAME);
-        if ( !suiteName.equals(lastSuiteName) ){
-            throw new BuildException("Received testcase from test "
-                    + suiteName + " and was expecting "
-                    + lastSuiteElement.getAttribute("name"));
-        }
-        lastSuiteElement.appendChild(test);
-        lastTestElement = test;
-        lastTestEvent = evt;
-    }
-
-    public void onTestEnded(TestRunEvent evt) {
-        // with a TestSetup, startTest and endTest are not called.
-        if (lastTestEvent == null) {
-            onTestStarted(evt);
-        }
-        float time = (evt.getTimeStamp() - lastTestEvent.getTimeStamp()) / 1000.0f;
-        lastTestElement.setAttribute(ATTR_TIME, Float.toString(time));
-        lastTestElement = null;
-        lastTestEvent = null;
-    }
-
-    public void onTestError(TestRunEvent evt) {
-        onTestFailure(evt);
-    }
-
-    public void onTestFailure(TestRunEvent evt) {
-        String type = evt.getType() == TestRunEvent.TEST_FAILURE ? FAILURE : ERROR;
-        Element nested = doc.createElement(type);
-        lastTestElement.appendChild(nested);
-        ExceptionData error = evt.getError();
-        nested.setAttribute(ATTR_MESSAGE, error.getMessage());
-        nested.setAttribute(ATTR_TYPE, error.getType());
-        Text text = doc.createTextNode(error.getStackTrace());
-        nested.appendChild(text);
-        onTestEnded(evt);
-    }
-
-    protected void close() {
-        // the underlying writer uses UTF8 encoding
-        getWriter().println("<?xml version='1.0' encoding='UTF-8' ?>");
-        String now = DateUtils.format(new Date(), DateUtils.ISO8601_DATETIME_PATTERN);
-        rootElement.setAttribute("snapshot_created", now);
-        try {
-            final DOMElementWriter domWriter = new DOMElementWriter();
-            domWriter.write(rootElement, getWriter(), 0, "  ");
-        } catch (IOException e) {
-            throw new BuildException(e);
-        } finally {
-            super.close();
-        }
-    }
-
-    private static DocumentBuilder getDocumentBuilder() {
-        try {
-            return DocumentBuilderFactory.newInstance().newDocumentBuilder();
-        } catch (Exception exc) {
-            throw new ExceptionInInitializerError(exc);
-        }
-    }
-
-}
diff --git a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/remote/EventDispatcher.java b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/remote/EventDispatcher.java
deleted file mode 100644
index 72d57ef..0000000
--- a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/remote/EventDispatcher.java
+++ /dev/null
@@ -1,180 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.rjunit.remote;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-
-/**
- * Dispatch messages to appropriate listener methode based on event id.
- *
- * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
- */
-public class EventDispatcher {
-
-    private final static HashMap eventMap = new HashMap(3);
-
-    static {
-        registerDefaults();
-    }
-
-    /** the set of registered listeners */
-    private ArrayList listeners = new ArrayList();
-
-    /**
-     * Add a new listener.
-     * @param listener a listener that will receive events from the client.
-     */
-    public void addListener(TestRunListener listener) {
-        listeners.add(listener);
-    }
-
-    public void removeListener(TestRunListener listener) {
-        listeners.remove(listener);
-    }
-
-    /**
-     * Process a message from the client and dispatch the
-     * appropriate message to the listeners.
-     */
-    public void dispatchEvent(TestRunEvent evt) {
-        final Integer type = new Integer(evt.getType());
-        final EventAction action = (EventAction) eventMap.get(type);
-        if (action == null) {
-            return;
-        }
-        synchronized (listeners) {
-            final int count = listeners.size();
-            for (int i = 0; i < count; i++) {
-                TestRunListener listener = (TestRunListener) listeners.get(i);
-                action.dispatch(listener, evt);
-            }
-        }
-    }
-
-    private static void registerDefaults() {
-        registerAction(TestRunEvent.RUN_STARTED, new RunStartedAction());
-        registerAction(TestRunEvent.RUN_ENDED, new RunEndedAction());
-        registerAction(TestRunEvent.TEST_STARTED, new TestStartedAction());
-        registerAction(TestRunEvent.TEST_ENDED, new TestEndedAction());
-        registerAction(TestRunEvent.TEST_FAILURE, new TestFailureAction());
-        registerAction(TestRunEvent.TEST_ERROR, new TestErrorAction());
-        registerAction(TestRunEvent.SUITE_STARTED, new SuiteStartedAction());
-        registerAction(TestRunEvent.SUITE_ENDED, new SuiteEndedAction());
-        registerAction(TestRunEvent.RUN_STOPPED, new RunStoppedAction());
-    }
-
-    private static void registerAction(int id, EventAction action){
-        eventMap.put(new Integer(id), action);
-    }
-
-    public interface EventAction {
-        public void dispatch(TestRunListener listener, TestRunEvent evt);
-    }
-
-    private static class RunStartedAction implements EventAction {
-        public void dispatch(TestRunListener listener, TestRunEvent evt) {
-            listener.onRunStarted(evt);
-        }
-    }
-
-    private static class RunEndedAction implements EventAction {
-        public void dispatch(TestRunListener listener, TestRunEvent evt) {
-            listener.onRunEnded(evt);
-        }
-    }
-
-    private static class TestStartedAction implements EventAction {
-        public void dispatch(TestRunListener listener, TestRunEvent evt) {
-            listener.onTestStarted(evt);
-        }
-    }
-
-    private static class TestEndedAction implements EventAction {
-        public void dispatch(TestRunListener listener, TestRunEvent evt) {
-            listener.onTestEnded(evt);
-        }
-    }
-
-    private static class TestFailureAction implements EventAction {
-        public void dispatch(TestRunListener listener, TestRunEvent evt) {
-            listener.onTestFailure(evt);
-        }
-    }
-
-    private static class TestErrorAction implements EventAction {
-        public void dispatch(TestRunListener listener, TestRunEvent evt) {
-            listener.onTestError(evt);
-        }
-    }
-
-    private static class SuiteStartedAction implements EventAction {
-        public void dispatch(TestRunListener listener, TestRunEvent evt) {
-            listener.onSuiteStarted(evt);
-        }
-    }
-
-    private static class SuiteEndedAction implements EventAction {
-        public void dispatch(TestRunListener listener, TestRunEvent evt) {
-            listener.onSuiteEnded(evt);
-        }
-    }
-
-    private static class RunStoppedAction implements EventAction {
-        public void dispatch(TestRunListener listener, TestRunEvent evt) {
-            listener.onRunStopped(evt);
-        }
-    }
-
-}
diff --git a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/remote/ExceptionData.java b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/remote/ExceptionData.java
deleted file mode 100644
index 2d345a3..0000000
--- a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/remote/ExceptionData.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.rjunit.remote;
-
-import java.io.Serializable;
-
-import org.apache.tools.ant.util.StringUtils;
-
-/**
- * A wrapper around an exception since an exception stacktrace is
- * not serializable.
- *
- * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
- */
-public class ExceptionData implements Serializable {
-
-    /** the stacktrace of the exception */
-    private final String stacktrace;
-
-    /** the classname of an exception */
-    private final String type;
-
-    /** the message associated to this exception */
-    private final String message;
-
-    /**
-     * Create a new error.
-     * @param exception the exception to run as
-     */
-    public ExceptionData(Throwable exception) {
-        this(exception.getClass().getName(),
-                exception.getMessage(),
-                StringUtils.getStackTrace(exception));
-    }
-
-    /**
-     * Create a new error.
-     * @param type the type of the error (ie classname).
-     * @param message the message associated to this error.
-     * @param stacktrace the full stacktrace of this error.
-     */
-    public ExceptionData(String type, String message, String stacktrace) {
-        this.stacktrace = stacktrace;
-        this.type = type;
-        this.message = message;
-    }
-
-    /**
-     * @return the type of the error (ie classname)
-     */
-    public String getType() {
-        return type;
-    }
-
-    /**
-     * @return the message associated to this error.
-     */
-    public String getMessage() {
-        return message;
-    }
-
-    /**
-     * @return the stacktrace for this error.
-     */
-    public String getStackTrace() {
-        return stacktrace;
-    }
-
-    public boolean equals(Object o){
-        if ( o instanceof ExceptionData ){
-            ExceptionData other = (ExceptionData)o;
-            return ( ( type == null ? other.type == null :  type.equals(other.type) ) &&
-                    ( message == null ? other.message == null : message.equals(other.message) ) &&
-                    ( stacktrace == null ? other.stacktrace == null : stacktrace.equals(other.stacktrace) ) );
-        }
-        return false;
-    }
-
-    public String toString() {
-        return (message != null) ? (type + ": " + message) : type;
-    }
-}
diff --git a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/remote/Messenger.java b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/remote/Messenger.java
deleted file mode 100644
index 2f0a18a..0000000
--- a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/remote/Messenger.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.rjunit.remote;
-
-import java.io.OutputStream;
-import java.io.InputStream;
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-
-/**
- * Read or write events to/from appropriate streams.
- *
- * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
- */
-public class Messenger {
-
-    private InputStream in;
-
-    private OutputStream out;
-
-    public Messenger(InputStream in, OutputStream out) throws IOException {
-        setOutputStream( new ObjectOutputStream(out) );
-        setInputStream( new ObjectInputStream(in) );
-    }
-
-    protected void finalize() throws Throwable {
-        close();
-    }
-
-    public void close() throws IOException {
-        if (out != null) {
-            out.flush();
-            out.close();
-            out = null;
-        }
-        if (in != null) {
-            in.close();
-            in = null;
-        }
-    }
-
-    public TestRunEvent read() {
-        try {
-            return (TestRunEvent)((ObjectInputStream)in).readObject();
-        } catch (Exception e){
-            return null;
-        }
-    }
-
-    public void writeEvent(TestRunEvent evt) throws IOException {
-        ((ObjectOutputStream)out).writeObject(evt);
-    }
-
-    protected OutputStream getOutputStream(){
-        return out;
-    }
-
-    protected InputStream getInputStream(){
-        return in;
-    }
-
-    protected void setOutputStream(OutputStream out){
-        this.out = out;
-    }
-
-    protected void setInputStream(InputStream in){
-        this.in = in;
-    }
-}
diff --git a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/remote/Server.java b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/remote/Server.java
deleted file mode 100644
index b25628f..0000000
--- a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/remote/Server.java
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.rjunit.remote;
-
-import java.io.IOException;
-import java.net.ServerSocket;
-import java.net.Socket;
-
-/**
- * The server that will receive events from a remote client.
- *
- * <i>
- * This code is based on the code from Erich Gamma made for the
- * JUnit plugin for <a href="http://www.eclipse.org">Eclipse</a> and is
- * merged with code originating from Ant 1.4.x.
- * </i>
- *
- * @see TestRunner
- * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
- */
-public class Server {
-
-    /** the port where the server is listening */
-    private int port = -1;
-
-    /** the server socket */
-    private ServerSocket server;
-
-    /** the client that is connected to the server */
-    private Socket client;
-
-    /** the reader in charge of interpreting messages from the client */
-    private Messenger messenger;
-
-    private EventDispatcher dispatcher = new EventDispatcher();
-
-    public Server(int port) {
-        this.port = port;
-    }
-
-    protected void finalize() throws Exception {
-        cancel();
-        shutdown();
-    }
-
-    /**
-     * add a new listener
-     * @param listener a instance of a listener.
-     */
-    public void addListener(TestRunListener listener) {
-        dispatcher.addListener(listener);
-    }
-
-    /**
-     * remove an existing listener
-     * @param listener a instance of a listener.
-     */
-    public void removeListener(TestRunListener listener) {
-        dispatcher.removeListener(listener);
-    }
-
-    /** return whether there is a client running or not */
-    public synchronized boolean isRunning() {
-        return client != null && server != null && messenger != null;
-    }
-
-    /** start a server to the specified port */
-    public void start(boolean loop) throws IOException {
-        server = new ServerSocket(port);
-        while (server != null) {
-            client = server.accept();
-            messenger = new Messenger(client.getInputStream(), client.getOutputStream());
-            TestRunEvent evt = null;
-            try {
-                while ( (evt = messenger.read()) != null ) {
-                    dispatcher.dispatchEvent(evt);
-                }
-            } catch (Exception e){
-                e.printStackTrace();
-                //@fixme this stacktrace might be normal when closing
-                // the socket. So decompose the above in distinct steps
-            }
-            if (!loop){
-                break;
-            }
-        }
-    }
-
-    /** cancel the connection to the client */
-    public synchronized void cancel() {
-        if (isRunning()) {
-            TestRunEvent evt = new TestRunEvent(new Integer(-1), TestRunEvent.RUN_STOP);
-            try {
-                messenger.writeEvent(evt);
-            } catch (IOException e){
-            }
-        }
-    }
-
-    /** shutdown the server and any running client */
-    public synchronized void shutdown() {
-        try {
-            if (messenger != null) {
-                messenger.close();
-                messenger = null;
-            }
-        } catch (IOException e){
-        }
-        try {
-            if (client != null) {
-                client.shutdownInput();
-                client.shutdownOutput();
-                client.close();
-                client = null;
-            }
-        } catch (IOException e) {
-        }
-        try {
-            if (server != null) {
-                server.close();
-                server = null;
-            }
-        } catch (IOException e) {
-        }
-    }
-}
diff --git a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/remote/TestRunEvent.java b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/remote/TestRunEvent.java
deleted file mode 100644
index 3ef0931..0000000
--- a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/remote/TestRunEvent.java
+++ /dev/null
@@ -1,191 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.rjunit.remote;
-
-import java.util.EventObject;
-import java.util.Properties;
-
-import org.apache.tools.ant.util.StringUtils;
-
-/**
- * Provide the basic events to be used during the tests.
- * This is not very extensible but since the events should be somewhat
- * limited, for now this is better to do it like this.
- *
- * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
- */
-public class TestRunEvent extends EventObject {
-
-    // received from clients
-    public final static int RUN_STARTED = 0;
-    public final static int RUN_ENDED = 1;
-    public final static int RUN_STOPPED = 2;
-    public final static int TEST_STARTED = 3;
-    public final static int TEST_FAILURE = 4;
-    public final static int TEST_ERROR = 5;
-    public final static int TEST_ENDED = 6;
-    public final static int SUITE_STARTED = 7;
-    public final static int SUITE_ENDED = 8;
-
-    // received from server
-    public final static int RUN_STOP = 9;
-
-    /** the type of event */
-    private int type = -1;
-
-    /** timestamp for all events */
-    private long timestamp = System.currentTimeMillis();
-
-    /** name of testcase(method name) or testsuite (classname) */
-    private String name;
-
-    /** stacktrace for error or failure */
-    private ExceptionData error;
-
-    /** properties for end of testrun */
-    private Properties props;
-
-    /** handy result for each end of sequence */
-    private TestSummary result;
-
-    public TestRunEvent(Integer id, int type){
-        super(id);
-        this.type = type;
-    }
-
-    public TestRunEvent(Integer id, int type, String name, TestSummary result){
-        this(id, type, name);
-        this.result = result;
-    }
-
-    public TestRunEvent(Integer id, int type, String name){
-        this(id, type);
-        this.name = name;
-    }
-
-    public TestRunEvent(Integer id, int type, Properties props, TestSummary result){
-        this(id, type);
-        this.props = props;
-        this.result = result;
-    }
-
-    public TestRunEvent(Integer id, int type, String name, Throwable t){
-        this(id, type, name);
-        this.error = new ExceptionData(t);
-    }
-
-    public void setType(int type) {
-        this.type = type;
-    }
-
-    public void setTimeStamp(long timestamp) {
-        this.timestamp = timestamp;
-    }
-
-    public void setError(ExceptionData error) {
-        this.error = error;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public void setProperties(Properties props) {
-        this.props = props;
-    }
-
-    public int getType(){
-        return type;
-    }
-
-    public long getTimeStamp(){
-        return timestamp;
-    }
-
-    public String getName(){
-        return name;
-    }
-
-    public TestSummary getSummary(){
-        return result;
-    }
-
-    public ExceptionData getError(){
-        return error;
-    }
-
-    public Properties getProperties(){
-        return props;
-    }
-
-    public boolean equals(Object o){
-        if (o instanceof TestRunEvent){
-            TestRunEvent other = (TestRunEvent)o;
-            return ( (type == other.type) &&
-                    (timestamp == other.timestamp) &&
-                    ( name == null ? other.name == null :  name.equals(other.name) ) &&
-                    ( error == null ? other.error == null : error.equals(other.error) ) &&
-                    ( props == null ? other.props == null : props.equals(other.props) ) &&
-                    ( result == null ? other.result == null : result.equals(other.result) ) );
-        }
-        return false;
-    }
-
-    public String toString(){
-        StringBuffer buf = new StringBuffer();
-        buf.append("id: ").append(source);
-        buf.append("type: ").append(type);
-        return buf.toString();
-    }
-}
diff --git a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/remote/TestRunListener.java b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/remote/TestRunListener.java
deleted file mode 100644
index 1cf46ba..0000000
--- a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/remote/TestRunListener.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.rjunit.remote;
-
-import java.util.EventListener;
-
-
-/**
- *
- * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
- */
-public interface TestRunListener extends EventListener {
-
-    void onRunStarted(TestRunEvent evt);
-    void onRunEnded(TestRunEvent evt);
-    void onRunStopped(TestRunEvent evt);
-
-    void onSuiteStarted(TestRunEvent evt);
-    void onSuiteEnded(TestRunEvent evt);
-
-    void onTestStarted(TestRunEvent evt);
-    void onTestError(TestRunEvent evt);
-    void onTestFailure(TestRunEvent evt);
-    void onTestEnded(TestRunEvent evt);
-}
diff --git a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/remote/TestRunner.java b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/remote/TestRunner.java
deleted file mode 100644
index 915dfc6..0000000
--- a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/remote/TestRunner.java
+++ /dev/null
@@ -1,487 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.rjunit.remote;
-
-import java.io.BufferedReader;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.net.Socket;
-import java.util.Properties;
-import java.util.StringTokenizer;
-import java.util.Vector;
-import java.util.Random;
-import java.util.Map;
-import java.util.HashMap;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-
-import junit.framework.AssertionFailedError;
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestListener;
-import junit.framework.TestResult;
-import junit.framework.TestSuite;
-
-import org.apache.tools.ant.taskdefs.optional.rjunit.JUnitHelper;
-import org.apache.tools.ant.taskdefs.optional.rjunit.formatter.Formatter;
-import org.apache.tools.ant.taskdefs.optional.rjunit.formatter.PlainFormatter;
-import org.apache.tools.ant.util.StringUtils;
-
-/**
- * TestRunner for running tests and send results to a remote server.
- *
- * <i>
- * This code is based on the code from Erich Gamma made for the
- * JUnit plugin for <a href="http://www.eclipse.org">Eclipse</a> and is
- * merged with code originating from Ant 1.4.x.
- * </i>
- *
- * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
- */
-public class TestRunner implements TestListener {
-
-    /** unique identifier for the runner */
-    private final Integer id = new Integer( (new Random()).nextInt() );
-
-    /** host to connect to */
-    private String host = "127.0.0.1";
-
-    /** port to connect to */
-    private int port = -1;
-
-    /** handy debug flag */
-    private boolean debug = false;
-
-    /** the list of test class names to run */
-    private final ArrayList testClassNames = new ArrayList();
-
-    /** result of the current test */
-    private TestResult testResult;
-
-    /** client socket to communicate with the server */
-    private Socket clientSocket;
-
-    /** writer to send message to the server */
-    private Messenger messenger;
-
-    /** helpful formatter to debug events directly here */
-    private final Formatter debugFormatter = new PlainFormatter();
-
-    /** bean constructor */
-    public TestRunner() {
-        Properties props = new Properties();
-        props.setProperty("file", "rjunit-client-debug.log");
-        debugFormatter.init(props);
-    }
-
-    /**
-     * Set the debug mode.
-     * @param debug true to set to debug mode otherwise false.
-     */
-    public void setDebug(boolean debug) {
-        this.debug = debug;
-    }
-
-    /**
-     * Set the port to connect to the server
-     * @param port a valid port number.
-     */
-    public void setPort(int port) {
-        this.port = port;
-    }
-
-    /**
-     * Set the hostname of the server
-     * @param host the hostname or ip of the server
-     */
-    public void setHost(String host) {
-        this.host = host;
-    }
-
-    /**
-     * Add a test class name to be executed by this runner.
-     * @param classname the class name of the test to run.
-     */
-    public void addTestClassName(String classname) {
-        testClassNames.add(classname);
-    }
-
-    /**
-     * Thread listener for a shutdown from the server
-     * Note that it will stop any running test.
-     */
-    private class StopThread extends Thread {
-        public void run() {
-            try {
-                TestRunEvent evt = null;
-                if ((evt = messenger.read()) != null) {
-                    if (evt.getType() == TestRunEvent.RUN_STOP) {
-                        TestRunner.this.stop();
-                    }
-                }
-            } catch (Exception e) {
-                TestRunner.this.stop();
-            }
-        }
-    }
-
-    /**
-     * Entry point for command line.
-     * Usage:
-     * <pre>
-     * TestRunner -classnames <classnames> -port <port> -host <host> -debug
-     * -file
-     * -classnames <list of whitespace separated classnames to run>
-     * -port       <port to connect to>
-     * -host       <host to connect to>
-     * -debug      to run in debug mode
-     * </pre>
-     */
-    public static void main(String[] args) throws Exception {
-        TestRunner testRunServer = new TestRunner();
-        testRunServer.init(args);
-        testRunServer.run();
-    }
-
-    /**
-     * Parses the arguments of command line.
-     * testClassNames, host, port, listeners and debug mode are set
-     * @see  #main(String[])
-     */
-    protected void init(String[] args) throws Exception {
-        for (int i = 0; i < args.length; i++) {
-            if ("-file".equalsIgnoreCase(args[i])) {
-                // @fixme if you mix file and other options it will be a mess,
-                // not important right now.
-                FileInputStream fis = new FileInputStream(args[++i]);
-                Properties props = new Properties();
-                props.load(fis);
-                fis.close();
-                init(props);
-            }
-            if ("-classnames".equalsIgnoreCase(args[i])) {
-                for (int j = ++i; j < args.length; j++) {
-                    if (args[j].startsWith("-"))
-                        break;
-                    addTestClassName(args[j]);
-                }
-            }
-            if ("-port".equalsIgnoreCase(args[i])) {
-                setPort(Integer.parseInt(args[++i]));
-            }
-            if ("-host".equalsIgnoreCase(args[i])) {
-                setHost(args[++i]);
-            }
-            if ("-debug".equalsIgnoreCase(args[i])) {
-                setDebug(true);
-            }
-        }
-    }
-
-    /**
-     * Initialize the TestRunner from properties.
-     * @param props the properties containing configuration data.
-     * @see #init(String[])
-     */
-    protected void init(Properties props) {
-        if (props.getProperty("debug") != null) {
-            setDebug(true);
-        }
-        String port = props.getProperty("port");
-        if (port != null) {
-            setPort(Integer.parseInt(port));
-        }
-        String host = props.getProperty("host");
-        if (host != null) {
-            setHost(host);
-        }
-        String classnames = props.getProperty("classnames");
-        if (classnames != null) {
-            StringTokenizer st = new StringTokenizer(classnames);
-            while (st.hasMoreTokens()) {
-                addTestClassName(st.nextToken());
-            }
-        }
-    }
-
-    public final void run() throws Exception {
-        if (testClassNames.size() == 0) {
-            throw new IllegalArgumentException("No TestCase specified");
-        }
-        connect();
-
-        testResult = new TestResult();
-        testResult.addListener(this);
-        runTests();
-
-        testResult.removeListener(this);
-        if (testResult != null) {
-            testResult.stop();
-            testResult = null;
-        }
-    }
-
-    /**
-     * Transform all classnames into instantiated <tt>Test</tt>.
-     * @throws Exception a generic exception that can be thrown while
-     * instantiating a test case.
-     */
-    protected Map getSuites() throws Exception {
-        final int count = testClassNames.size();
-        log("Extracting testcases from " + count + " classnames...");
-        final Map suites = new HashMap();
-        for (int i = 0; i < count; i++) {
-            String classname = (String) testClassNames.get(i);
-            try {
-                Test test = JUnitHelper.getTest(null, classname);
-                if (test != null) {
-                    suites.put(classname, test);
-                }
-            } catch (Exception e) {
-                // notify log error instead ?
-                log("Could not get Test instance from " + classname);
-                log(e);
-            }
-        }
-        log("Extracted " + suites.size() + " testcases.");
-        return suites;
-    }
-
-    private void runTests() throws Exception {
-
-        Map suites = getSuites();
-
-        // count all testMethods and inform TestRunListeners
-        int count = countTests(suites.values());
-        log("Total tests to run: " + count);
-        TestRunEvent evt = new TestRunEvent(id, TestRunEvent.RUN_STARTED);
-        if (debug){
-            debugFormatter.onRunStarted(evt);
-        }
-        fireEvent(evt);
-
-        TestSummary runSummary = new TestSummary();
-        runSummary.start(testResult);
-        for (Iterator it = suites.entrySet().iterator(); it.hasNext(); ) {
-            Map.Entry entry = (Map.Entry)it.next();
-            String name = (String)entry.getKey();
-            Test test = (Test)entry.getValue();
-            if (test instanceof TestCase) {
-                test = new TestSuite(name);
-            }
-            runTest(test, name);
-        }
-        runSummary.stop(testResult);
-
-        // inform TestRunListeners of test end
-        int type = (testResult == null || testResult.shouldStop()) ?
-            TestRunEvent.RUN_STOPPED : TestRunEvent.RUN_ENDED;
-        evt = new TestRunEvent(id, type, System.getProperties(), runSummary);
-        if (debug){
-            debugFormatter.onRunEnded(evt);
-        }
-        fireEvent(evt);
-        log("Finished after " + runSummary.elapsedTime() + "ms");
-        shutDown();
-    }
-
-    /**
-     * run a single suite and dispatch its results.
-     * @param test the instance of the testsuite to run.
-     * @param name the name of the testsuite (classname)
-     */
-    private void runTest(Test test, String name){
-        TestRunEvent evt = new TestRunEvent(id, TestRunEvent.SUITE_STARTED, name);
-        if (debug){
-            debugFormatter.onSuiteStarted(evt);
-        }
-        fireEvent(evt);
-        TestSummary suiteSummary = new TestSummary();
-        suiteSummary.start(testResult);
-        try {
-            test.run(testResult);
-        } finally {
-            suiteSummary.stop(testResult);
-            evt = new TestRunEvent(id, TestRunEvent.SUITE_ENDED, name, suiteSummary);
-            if (debug){
-                debugFormatter.onSuiteEnded(evt);
-            }
-            fireEvent(evt);
-        }
-    }
-
-    /**
-     * count the number of test methods in all tests
-     */
-    private final int countTests(Collection tests) {
-        int count = 0;
-        for (Iterator it = tests.iterator(); it.hasNext(); ) {
-            Test test = (Test)it.next();
-            count = count + test.countTestCases();
-        }
-        return count;
-    }
-
-    protected void stop() {
-        if (testResult != null) {
-            testResult.stop();
-        }
-    }
-
-    /**
-     * connect to the specified host and port.
-     * @throws IOException if any error occurs during connection.
-     */
-    protected void connect() throws IOException {
-        log("Connecting to " + host + " on port " + port + "...");
-        clientSocket = new Socket(host, port);
-        messenger = new Messenger(clientSocket.getInputStream(), clientSocket.getOutputStream());
-        new StopThread().start();
-    }
-
-
-    protected void shutDown() {
-        try {
-            if (messenger != null) {
-                messenger.close();
-                messenger = null;
-            }
-        } catch (IOException e) {
-            log(e);
-        }
-
-        try {
-            if (clientSocket != null) {
-                clientSocket.close();
-                clientSocket = null;
-            }
-        } catch (IOException e) {
-            log(e);
-        }
-    }
-
-    protected void fireEvent(TestRunEvent evt){
-        try {
-            messenger.writeEvent(evt);
-        } catch (IOException e){
-            log(e);
-        }
-    }
-
-// -------- JUnit TestListener implementation
-
-
-    public void startTest(Test test) {
-        String testName = test.toString();
-        TestRunEvent evt = new TestRunEvent(id, TestRunEvent.TEST_STARTED, testName);
-        if (debug){
-            debugFormatter.onTestStarted(evt);
-        }
-        fireEvent(evt);
-    }
-
-    public void addError(Test test, Throwable t) {
-        String testName = test.toString();
-        TestRunEvent evt = new TestRunEvent(id, TestRunEvent.TEST_ERROR, testName, t);
-        if (debug){
-            debugFormatter.onTestError(evt);
-        }
-        fireEvent(evt);
-    }
-
-    /**
-     * this implementation is for JUnit &lt; 3.4
-     * @see #addFailure(Test, Throwable)
-     */
-    public void addFailure(Test test, AssertionFailedError afe) {
-        addFailure(test, (Throwable) afe);
-    }
-
-    /**
-     * This implementation is for JUnit &lt;= 3.4
-     * @see #addFailure(Test, AssertionFailedError)
-     */
-    public void addFailure(Test test, Throwable t) {
-        String testName = test.toString();
-        TestRunEvent evt = new TestRunEvent(id, TestRunEvent.TEST_FAILURE, testName, t);
-        if (debug){
-            debugFormatter.onTestFailure(evt);
-        }
-        fireEvent(evt);
-    }
-
-    public void endTest(Test test) {
-        String testName = test.toString();
-        TestRunEvent evt = new TestRunEvent(id, TestRunEvent.TEST_ENDED, testName);
-        if (debug){
-            debugFormatter.onTestEnded(evt);
-        }
-        fireEvent(evt);
-    }
-
-    public void log(String msg) {
-        if (debug) {
-            System.out.println(msg);
-        }
-    }
-
-    public void log(Throwable t) {
-        if (debug) {
-            t.printStackTrace();
-        }
-    }
-}
-
diff --git a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/remote/TestSummary.java b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/remote/TestSummary.java
deleted file mode 100644
index 1b6999b..0000000
--- a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/remote/TestSummary.java
+++ /dev/null
@@ -1,175 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.rjunit.remote;
-
-import java.io.Serializable;
-
-import junit.framework.AssertionFailedError;
-import junit.framework.Test;
-import junit.framework.TestListener;
-import junit.framework.TestResult;
-
-/**
- * A helpful test summary that is somewhat similar to <tt>TestResult</tt>.
- * Here the difference is that this test summary should register to
- * the test result the time you wan to collect information.
- *
- * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
- */
-public final class TestSummary implements Serializable, TestListener {
-
-    /** time elapsed during tests run  in ms */
-    private long elapsedTime;
-
-    /** number of errors */
-    private int errorCount;
-
-    /** number of successes */
-    private int successCount;
-
-    /** number of failures */
-    private int failureCount;
-
-    /** number of runs */
-    private int runCount;
-
-    /** bean constructor */
-    public TestSummary() {
-    }
-
-    /**
-     * @return the number of errors that occurred in this test.
-     */
-    public int errorCount() {
-        return errorCount;
-    }
-
-    /**
-     * @return the number of successes that occurred in this test.
-     */
-    public int successCount() {
-        return successCount;
-    }
-
-    /**
-     * @return the number of failures that occurred in this test.
-     */
-    public int failureCount() {
-        return failureCount;
-    }
-
-    /**
-     * @return the number of runs that occurred in this test.
-     * a run is the sum of failures + errors + successes.
-     */
-    public int runCount() {
-        return runCount;
-    }
-
-    /**
-     * @return the elapsed time in ms
-     */
-    public long elapsedTime() {
-        return elapsedTime;
-    }
-
-//
-    /**
-     * register to the <tt>TestResult</tt> and starts the time counter.
-     * @param result the instance to register to.
-     * @see #stop(TestResult)
-     */
-    public void start(TestResult result){
-        elapsedTime = System.currentTimeMillis();
-        result.addListener(this);
-    }
-
-    /**
-     * unregister from the <tt>TestResult</tt> and stops the time counter.
-     * @param result the instance to unregister from.
-     * @see #start(TestResult)
-     */
-    public void stop(TestResult result){
-        elapsedTime = System.currentTimeMillis() - elapsedTime;
-        result.removeListener(this);
-    }
-
-// test listener implementation
-
-    public void addError(Test test, Throwable throwable) {
-        errorCount++;
-    }
-
-    public void addFailure(Test test, AssertionFailedError error) {
-        failureCount++;
-    }
-
-    public void endTest(Test test) {
-        successCount++;
-    }
-
-    public void startTest(Test test) {
-        runCount++;
-    }
-
-    public String toString(){
-        StringBuffer buf = new StringBuffer();
-        buf.append("run: ").append(runCount);
-        buf.append(" success: ").append(successCount);
-        buf.append(" failures: ").append(failureCount);
-        buf.append(" errors: ").append(errorCount);
-        buf.append(" elapsed: ").append(elapsedTime);
-        return buf.toString();
-    }
-}
diff --git a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/usecase.xml b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/usecase.xml
deleted file mode 100644
index ef673c4..0000000
--- a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/usecase.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-<project name="" basedir="." default="tests">
-
-    <target name="tests">
-
-        <rjunit port="1234">
-            <server>
-                <formatter type="xml" filters="stacktrace"/>
-                <formatter type="plain" filters="stacktrace"/>
-                <formatter type="jms" filters="stacktrace">
-                    <param name="queue" value="test_queue"/>
-                </formatter>
-                <formatter type="rmi" filters="stacktrace">
-                    <param name="host" value="127.0.0.1"/>
-                    <param name="port" value="6789"/>
-                </formatter>
-            </server>
-
-            <client host="127.0.0.1">
-                <classpath refid="test-classpath"/>
-                <jvmarg value="-Xmx=512MB"/>
-                <test name="org.apache.test.NullTest" if="condition1">
-                <batchtest path="${classpath}" unless="condition2">
-                    <include name="**Test*"/>
-                </batchtest>
-            </client>
-        <rjunit>
-    </target>
-
-    <target name="server-only">
-        <!-- will block until a client connect and finishes -->
-        <rjunit port="1234">
-            <server>
-                <formatter type="xml" filters="stacktrace"/>
-                    <param name="file" location="test.xml"/>
-                </formatter>
-            </server>
-       </rjunit>
-    </target>
-
-    <target name="server-only">
-        <!-- will connect to an existing server and send results -->
-        <rjunit port="1234">
-            <client host="127.0.0.1">
-                <classpath refid="test-classpath"/>
-                <jvmarg value="-Xmx=512MB"/>
-                <test name="org.apache.test.NullTest" if="condition1">
-            </client>
-       </rjunit>
-    </target>
-
-</project>
\ No newline at end of file
diff --git a/proposal/sandbox/junit/src/testcases/org/apache/tools/ant/taskdefs/optional/rjunit/RJUnitTaskTest.java b/proposal/sandbox/junit/src/testcases/org/apache/tools/ant/taskdefs/optional/rjunit/RJUnitTaskTest.java
deleted file mode 100644
index f63537e..0000000
--- a/proposal/sandbox/junit/src/testcases/org/apache/tools/ant/taskdefs/optional/rjunit/RJUnitTaskTest.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.rjunit;
-
-import java.io.File;
-import java.net.URL;
-
-import org.apache.tools.ant.BuildFileTest;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.ProjectHelper;
-
-/**
- *
- * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
- */
-public class RJUnitTaskTest extends BuildFileTest {
-    public RJUnitTaskTest(String name) {
-        super(name);
-    }
-
-    protected void setUp() throws Exception {
-        configureProject("data/build-test.xml");
-    }
-
-    protected void configureProject(String resource){
-        URL url = getClass().getResource(resource);
-        assertNotNull("Could not find resource :" + resource, url);
-        super.configureProject(url.getFile());
-    }
-
-    public void testServerAndClient(){
-        executeTarget("server-and-client");
-        System.out.println(getFullLog());
-    }
-    public void testServerAndClient2(){
-        executeTarget("server-and-client");
-        System.out.println(getFullLog());
-    }
-    /*
-    public void testStandalone() throws Exception {
-        // run server first..
-        Thread thread = new Thread(){
-            public void run(){
-                executeTarget("server-only");
-            }
-        };
-        thread.start();
-
-        executeTarget("client-only");
-        System.out.println(getFullLog());
-        thread.join();
-    }
-*/
-
-}
diff --git a/proposal/sandbox/junit/src/testcases/org/apache/tools/ant/taskdefs/optional/rjunit/TestRunRecorder.java b/proposal/sandbox/junit/src/testcases/org/apache/tools/ant/taskdefs/optional/rjunit/TestRunRecorder.java
deleted file mode 100644
index 577e226..0000000
--- a/proposal/sandbox/junit/src/testcases/org/apache/tools/ant/taskdefs/optional/rjunit/TestRunRecorder.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.rjunit;
-
-import java.util.Properties;
-import java.util.Vector;
-
-import org.apache.tools.ant.taskdefs.optional.rjunit.remote.TestRunEvent;
-import org.apache.tools.ant.taskdefs.optional.rjunit.remote.TestRunListener;
-
-/**
- * A TestRunListener that stores all events for later check.
- *
- * <p>
- * All the events are stored chronologically in distinct vectors
- * and are made available as public instances
- * </p>
- *
- * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
- */
-public class TestRunRecorder implements TestRunListener {
-
-// all these are public in order for testcases to have access quickly
-    public Vector testStarted = new Vector();
-    public Vector testEnded = new Vector();
-    public Vector testFailed = new Vector();
-    public Vector testError = new Vector();
-    public Vector runStarted = new Vector();
-    public Vector runEnded = new Vector();
-    public Vector runStopped = new Vector();
-
-    public void onTestStarted(TestRunEvent evt) {
-        testStarted.addElement(evt);
-    }
-
-    public void onTestEnded(TestRunEvent evt) {
-        testEnded.addElement(evt);
-    }
-
-    public void onTestFailure(TestRunEvent evt) {
-        testFailed.addElement(evt);
-    }
-
-    public void onRunStarted(TestRunEvent evt) {
-        runStarted.addElement(evt);
-    }
-
-    public void onRunEnded(TestRunEvent evt) {
-        runEnded.addElement(evt);
-    }
-
-    public void onRunStopped(TestRunEvent evt) {
-        runStopped.addElement(evt);
-    }
-
-    public void onSuiteStarted(TestRunEvent evt) {
-    }
-
-    public void onSuiteEnded(TestRunEvent evt) {
-    }
-
-    public void onTestError(TestRunEvent evt) {
-        testError.addElement( evt );
-    }
-}
diff --git a/proposal/sandbox/junit/src/testcases/org/apache/tools/ant/taskdefs/optional/rjunit/ZipScannerTest.java b/proposal/sandbox/junit/src/testcases/org/apache/tools/ant/taskdefs/optional/rjunit/ZipScannerTest.java
deleted file mode 100644
index 7f585de..0000000
--- a/proposal/sandbox/junit/src/testcases/org/apache/tools/ant/taskdefs/optional/rjunit/ZipScannerTest.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.rjunit;
-
-import java.io.File;
-
-import junit.framework.TestCase;
-
-/**
- * Basic test to ensure that the collector is working.
- *
- * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
- */
-public class ZipScannerTest extends TestCase {
-    public ZipScannerTest(String s) {
-        super(s);
-    }
-
-    protected ZipScanner _scanner;
-
-    protected void setUp() throws Exception {
-        _scanner = new ZipScanner();
-        String path = System.getProperty("java.home") + "/lib/rt.jar";
-        _scanner.setBasedir(path);
-    }
-
-    public void testScan() throws Exception {
-        _scanner.scan();
-        String[] files = _scanner.getIncludedFiles();
-        assertContains(files, "java/lang/Exception.class");
-        String[] dirs = _scanner.getIncludedDirectories();
-        assertContains(dirs, "java/lang/");
-    }
-
-    public void testIncludes() throws Exception {
-        _scanner.setIncludes( new String[]{ "**/Exception.class" });
-        _scanner.scan();
-        String[] files = _scanner.getIncludedFiles();
-        assertEquals(1, files.length);
-        assertEquals(files[0], "java/lang/Exception.class");
-    }
-
-
-
-    public void assertContains(Object[] lists, Object o){
-        for (int i = 0; i < lists.length; i++){
-            if (lists[i].equals(o)){
-                return;
-            }
-        }
-        fail("Should contain " + o);
-    }
-
-}
diff --git a/proposal/sandbox/junit/src/testcases/org/apache/tools/ant/taskdefs/optional/rjunit/data/Test1.java b/proposal/sandbox/junit/src/testcases/org/apache/tools/ant/taskdefs/optional/rjunit/data/Test1.java
deleted file mode 100644
index 75039f6..0000000
--- a/proposal/sandbox/junit/src/testcases/org/apache/tools/ant/taskdefs/optional/rjunit/data/Test1.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.rjunit.data;
-
-import junit.framework.TestCase;
-
-/**
- * Provide a common set of test reporting.
- *
- * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
- */
-public class Test1 extends TestCase {
-    public Test1(String s) {
-        super(s);
-    }
-
-    public void testSuccess(){
-    }
-
-    public void testFailure(){
-        fail("failure on purpose");
-    }
-
-    public void testError(){
-        throw new RuntimeException("error on purpose");
-    }
-}
diff --git a/proposal/sandbox/junit/src/testcases/org/apache/tools/ant/taskdefs/optional/rjunit/data/build-test.xml b/proposal/sandbox/junit/src/testcases/org/apache/tools/ant/taskdefs/optional/rjunit/data/build-test.xml
deleted file mode 100644
index d2f7233..0000000
--- a/proposal/sandbox/junit/src/testcases/org/apache/tools/ant/taskdefs/optional/rjunit/data/build-test.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-<project name="rjunit-tests" basedir="." default="server-and-client">
-
-    <taskdef name="rjunit" classname="org.apache.tools.ant.taskdefs.optional.rjunit.RJUnitTask"/>
-
-    <target name="server-and-client">
-        <echo message="java.class.path: ${java.class.path}"/>
-        <rjunit>
-            <server port="1234">
-                <formatter type="plain">
-                    <param name="file" location="junit-test-log.txt"/>
-                </formatter>
-            </server>
-            <client host="127.0.0.1"  port="1234">
-                <classpath path="${java.class.path}"/>
-                <test name="org.apache.tools.ant.taskdefs.optional.junit.data.Test1"/>
-            </client>
-        </rjunit>
-    </target>
-
-    <target name="server-only">
-        <rjunit>
-            <server port="1234">
-                <formatter type="plain">
-                    <param name="file" location="junit-test-log.txt"/>
-                </formatter>
-                <formatter type="xml">
-                    <param name="file" location="junit-test-log.xml"/>
-                </formatter>
-            </server>
-        </rjunit>
-    </target>
-
-    <target name="client-only">
-        <rjunit>
-            <client host="127.0.0.1"  port="1234">
-                <classpath path="${java.class.path}"/>
-                <test name="org.apache.tools.ant.taskdefs.optional.junit.data.Test1"/>
-            </client>
-        </rjunit>
-    </target>
-
-</project>
\ No newline at end of file
diff --git a/proposal/sandbox/junit/src/testcases/org/apache/tools/ant/taskdefs/optional/rjunit/formatter/FilterStackFormatterTest.java b/proposal/sandbox/junit/src/testcases/org/apache/tools/ant/taskdefs/optional/rjunit/formatter/FilterStackFormatterTest.java
deleted file mode 100644
index 1affed3..0000000
--- a/proposal/sandbox/junit/src/testcases/org/apache/tools/ant/taskdefs/optional/rjunit/formatter/FilterStackFormatterTest.java
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.rjunit.formatter;
-
-import java.io.OutputStream;
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.util.Properties;
-
-import junit.framework.TestCase;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.util.StringUtils;
-import org.apache.tools.ant.taskdefs.optional.rjunit.remote.TestRunEvent;
-
-/**
- * Not exactly rocket science test.. dooh !
- *
- * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
- */
-public class FilterStackFormatterTest extends TestCase
-        implements Formatter {
-
-    public FilterStackFormatterTest(String s) {
-        super(s);
-    }
-
-    protected String trace;
-    protected String expected;
-
-    protected void setUp() {
-        StringWriter sw = new StringWriter();
-        PrintWriter pw = new PrintWriter(sw, true);
-        pw.println("org.apache.test.ClassName.method(ClassName.java:125)");
-        pw.println("\tat org.apache.test.C1.m1(C1.java:125)");
-        pw.println("\tat junit.framework.TestCase.m0(TestCase.java:999)");
-        pw.println("\tat org.apache.test.C2.m1(C2.java:125)");
-        pw.println("\tat junit.framework.TestResult.m1(TestResult.java:999)");
-        pw.println("\tat org.apache.test.C3.m1(C3.java:125)");
-        pw.println("\tat junit.framework.TestSuite.m2(TestSuite.java:999)");
-        pw.println("\tat org.apache.test.C4.m1(C4.java:125)");
-        pw.println("\tat junit.framework.Assert.m3(Assert.java:999)");
-        pw.println("\tat junit.swingui.TestRunner.m3(TestRunner.java:999)");
-        pw.println("\tat junit.awtui.TestRunner.m3(TestRunner.java:999)");
-        pw.println("\tat org.apache.test.C5.m1(C5.java:125)");
-        pw.println("\tat junit.textui.TestRunner.m3(TestRunner.java:999)");
-        pw.println("\tat java.lang.reflect.Method.invoke(Method.java:999)");
-        pw.println("\tat org.apache.tools.ant.C.m(C.java:999)");
-        pw.println("\tat org.apache.test.C6.m1(C6.java:125)");
-        trace = sw.toString();
-        sw.getBuffer().setLength(0);
-
-        pw.println("org.apache.test.ClassName.method(ClassName.java:125)");
-        pw.println("\tat org.apache.test.C1.m1(C1.java:125)");
-        pw.println("\tat org.apache.test.C2.m1(C2.java:125)");
-        pw.println("\tat org.apache.test.C3.m1(C3.java:125)");
-        pw.println("\tat org.apache.test.C4.m1(C4.java:125)");
-        pw.println("\tat org.apache.test.C5.m1(C5.java:125)");
-        pw.println("\tat org.apache.test.C6.m1(C6.java:125)");
-        expected = sw.toString();
-    }
-
-    public void testFiltering() {
-        /*
-        FilterStackFormatter wrapper = new FilterStackFormatter(this);
-        Exception e = new Exception("xx");
-        e.fillInStackTrace();
-        TestRunEvent evt = new TestRunEvent(new Integer(1), TestRunEvent.TEST_ERROR, "xx");
-        wrapper.onTestFailure(evt);
-        StringUtils.getStackTrace()
-        assertEquals(expected, filteredTrace);
-        */
-    }
-
-
-// --- formatter implementation
-    protected String filteredTrace;
-
-    public void onTestStarted(TestRunEvent evt) {
-    }
-
-    public void onTestEnded(TestRunEvent evt) {
-    }
-
-    public void init(Properties props) throws BuildException {
-    }
-
-    public void onTestFailure(TestRunEvent evt) {
-        filteredTrace = trace;
-    }
-
-    public void onSuiteStarted(TestRunEvent evt) {
-    }
-
-    public void onSuiteEnded(TestRunEvent evt) {
-    }
-
-    public void onTestError(TestRunEvent evt) {
-    }
-
-    public void onRunStarted(TestRunEvent evt) {
-    }
-
-    public void onRunEnded(TestRunEvent evt) {
-    }
-
-    public void onRunStopped(TestRunEvent evt) {
-    }
-}
diff --git a/proposal/sandbox/junit/src/testcases/org/apache/tools/ant/taskdefs/optional/rjunit/formatter/FormatterRecorder.java b/proposal/sandbox/junit/src/testcases/org/apache/tools/ant/taskdefs/optional/rjunit/formatter/FormatterRecorder.java
deleted file mode 100644
index a8b216a..0000000
--- a/proposal/sandbox/junit/src/testcases/org/apache/tools/ant/taskdefs/optional/rjunit/formatter/FormatterRecorder.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.rjunit.formatter;
-
-import java.io.OutputStream;
-import java.util.Properties;
-
-import org.apache.tools.ant.taskdefs.optional.rjunit.TestRunRecorder;
-import org.apache.tools.ant.BuildException;
-
-/**
- * A formatter recorder that serves the same purpose as
- * a <tt>TestRunRecorder</tt>
- *
- *
- * @see TestRunRecorder
- * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
- */
-public class FormatterRecorder extends TestRunRecorder
-        implements Formatter {
-    public void init(Properties props) throws BuildException {
-    }
-}
diff --git a/proposal/sandbox/junit/src/testcases/org/apache/tools/ant/taskdefs/optional/rjunit/remote/MessageReaderTest.java b/proposal/sandbox/junit/src/testcases/org/apache/tools/ant/taskdefs/optional/rjunit/remote/MessageReaderTest.java
deleted file mode 100644
index dcf646c..0000000
--- a/proposal/sandbox/junit/src/testcases/org/apache/tools/ant/taskdefs/optional/rjunit/remote/MessageReaderTest.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.rjunit.remote;
-
-import java.io.PrintWriter;
-import java.io.PipedOutputStream;
-import java.io.PipedInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.ByteArrayInputStream;
-import java.util.Properties;
-
-import junit.framework.TestCase;
-
-import org.apache.tools.ant.taskdefs.optional.rjunit.remote.TestRunListener;
-import org.apache.tools.ant.taskdefs.optional.rjunit.TestRunRecorder;
-
-/**
- * Ensure that the Reader/Writer works fine.
- *
- * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
- */
-public class MessageReaderTest extends TestCase {
-
-    private EventDispatcher dispatcher;
-
-    protected TestRunRecorder recorder;
-
-    public MessageReaderTest(String s) {
-        super(s);
-    }
-
-    protected void setUp() {
-        dispatcher = new EventDispatcher();
-        recorder = new TestRunRecorder();
-        dispatcher.addListener( recorder );
-    }
-
-    public void testTestRunStarted() throws Exception {
-        TestRunEvent evt = new TestRunEvent(new Integer(99), TestRunEvent.RUN_STARTED);
-        dispatcher.fireRunStarted( evt );
-        assertEquals(evt, recorder.runStarted.elementAt(0));
-    }
-
-    public void testTestStarted() throws Exception {
-        TestRunEvent evt = new TestRunEvent(new Integer(99), TestRunEvent.TEST_STARTED, "xxxx");
-        dispatcher.fireTestStarted( evt );
-        assertEquals(evt, recorder.testStarted.elementAt(0));
-    }
-
-    public void testTestEnded() throws Exception {
-        TestRunEvent evt = new TestRunEvent(new Integer(99), TestRunEvent.TEST_ENDED, "xxxx");
-        dispatcher.fireTestEnded( evt );
-        assertEquals(evt, recorder.testEnded.elementAt(0));
-    }
-
-    public void testTestFailedError() throws Exception {
-        Exception e = new Exception("error");
-        e.fillInStackTrace();
-        TestRunEvent evt = new TestRunEvent(new Integer(99), TestRunEvent.TEST_ERROR, "xxxx", e);
-        dispatcher.fireTestError( evt );
-        assertEquals(evt, recorder.testError.elementAt(0));
-    }
-
-    public void testTestFailedFailure() throws Exception {
-        Exception e = new Exception("error");
-        e.fillInStackTrace();
-        TestRunEvent evt = new TestRunEvent(new Integer(99), TestRunEvent.TEST_FAILURE, "xxxx", e);
-        dispatcher.fireTestFailure( evt );
-        assertEquals(evt, recorder.testFailed.elementAt(0));
-    }
-
-    public void testTestRunEnded() throws Exception {
-        TestRunEvent evt = new TestRunEvent(new Integer(99), TestRunEvent.RUN_ENDED);
-        dispatcher.fireRunEnded( evt );
-        assertEquals(evt, recorder.runEnded.elementAt(0));
-    }
-
-    public void testTestRunStopped() throws Exception {
-        TestRunEvent evt = new TestRunEvent(new Integer(99), TestRunEvent.RUN_STOPPED);
-        dispatcher.fireRunStopped( evt );
-        assertEquals(evt, recorder.runStopped.elementAt(0));
-    }
-
-
-
-}
diff --git a/proposal/sandbox/junit/src/testcases/org/apache/tools/ant/taskdefs/optional/rjunit/remote/TestCases.java b/proposal/sandbox/junit/src/testcases/org/apache/tools/ant/taskdefs/optional/rjunit/remote/TestCases.java
deleted file mode 100644
index 8113677..0000000
--- a/proposal/sandbox/junit/src/testcases/org/apache/tools/ant/taskdefs/optional/rjunit/remote/TestCases.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.rjunit.remote;
-
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-import junit.framework.Test;
-import junit.extensions.TestSetup;
-
-/**
- *
- * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
- */
-public class TestCases {
-
-    /** null testcase w/ 3 tests */
-    public static class NullTestCase extends TestCase {
-        public NullTestCase(String s) {
-            super(s);
-        }
-        public void testSuccess(){}
-        public void testFailure(){ assertTrue(false); }
-        public void testError(){ throw new RuntimeException("on purpose"); }
-    }
-
-    /** testcase w/ a static suite method */
-    public static class NullTestSuite extends TestCase {
-        public NullTestSuite(String s) {
-            super(s);
-        }
-        public static Test suite(){
-            return new TestSuite(NullTestCase.class);
-        }
-    }
-
-    public static class SimpleTestCase extends TestCase {
-        public SimpleTestCase(String s) {
-            super(s);
-        }
-        public void testSuccess(){}
-    }
-
-    public static class FailSetupTestSuite extends TestCase {
-        public FailSetupTestSuite(String s) {
-            super(s);
-        }
-        public static Test suite(){
-            return new FailTestSetup( new TestSuite(SimpleTestCase.class) );
-        }
-    }
-
-    public static class FailTestSetup extends TestSetup {
-        public FailTestSetup(Test test) {
-            super(test);
-        }
-        protected void setUp(){
-            throw new IllegalArgumentException("on purpose");
-        }
-    }
-}
diff --git a/proposal/sandbox/junit/src/testcases/org/apache/tools/ant/taskdefs/optional/rjunit/remote/TestRunnerTest.java b/proposal/sandbox/junit/src/testcases/org/apache/tools/ant/taskdefs/optional/rjunit/remote/TestRunnerTest.java
deleted file mode 100644
index 3a6385b..0000000
--- a/proposal/sandbox/junit/src/testcases/org/apache/tools/ant/taskdefs/optional/rjunit/remote/TestRunnerTest.java
+++ /dev/null
@@ -1,180 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.rjunit.remote;
-
-import java.util.Vector;
-import java.util.Properties;
-
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-import junit.framework.TestListener;
-
-import org.apache.tools.ant.taskdefs.optional.rjunit.formatter.PlainFormatter;
-import org.apache.tools.ant.taskdefs.optional.rjunit.remote.TestRunListener;
-import org.apache.tools.ant.taskdefs.optional.rjunit.TestRunRecorder;
-
-/**
- * TestCase for the test runner.
- *
- * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
- */
-public class TestRunnerTest extends TestCase
-        implements TestRunListener {
-
-    public final static int PORT = 1234;
-
-    protected Server server;
-
-    protected TestRunner runner;
-
-    protected TestRunRecorder recorder;
-
-    protected boolean done;
-
-    public TestRunnerTest(String s) {
-        super(s);
-    }
-
-    protected void setUp() throws Exception {
-        server = createServer();
-        server.start();
-        runner = createClient();
-        recorder = new TestRunRecorder();
-        server.addListener( recorder );
-        server.addListener( this );
-    }
-
-    protected void tearDown() throws Exception {
-        server.shutdown();
-        runner.stop();
-    }
-
-    protected Server createServer() throws Exception {
-        return new Server(PORT);
-    }
-
-    protected TestRunner createClient() throws Exception {
-        TestRunner client = new TestRunner();
-        client.setDebug(true);
-        client.setHost("127.0.0.1");
-        client.setPort(PORT);
-        return client;
-    }
-
-    public void testNullTestCase() throws Exception {
-        runner.addTestClassName(TestCases.NullTestCase.class.getName());
-//        server.addListener( new PlainFormatter() );
-        runner.run();
-        synchronized(this){ while (!done){ wait(); } }
-        assertEquals(1, recorder.runStarted.size());
-        /*
-        assertTrue(recorder.runStarted.elementAt(0).toSt("testSuccess"));
-        assertTrue(started.contains("testFailure"));
-        assertTrue(started.contains("testError"));*/
-
-    }
-
-    public void testFailSetupTestCase() throws Exception {
-        runner.addTestClassName(TestCases.FailSetupTestSuite.class.getName());
-        runner.run();
-        synchronized(this){ while (!done){ wait(); } }
-
-        assertEquals(1, recorder.runStarted.size());
-        assertEquals(1, recorder.runEnded.size());
-    }
-
-    public void testFailSetupTestSuite() throws Exception {
-        runner.addTestClassName(TestCases.FailSetupTestSuite.class.getName());
-        runner.run();
-        synchronized(this){ while (!done){ wait(); } }
-        assertEquals(1, recorder.runStarted.size());
-        assertEquals(1, recorder.runEnded.size());
-    }
-
-    public static void main(String[] args){
-        TestSuite suite = new TestSuite(TestRunnerTest.class);
-        junit.textui.TestRunner.run(suite);
-    }
-
-// TestRunListener implementation
-    public void onTestStarted(TestRunEvent evt) {
-    }
-    public void onTestEnded(TestRunEvent evt) {
-    }
-    public void onTestFailure(TestRunEvent evt) {
-    }
-    public void onRunStarted(TestRunEvent count) {
-    }
-    public void onRunEnded(TestRunEvent evt) {
-        synchronized(this){
-            done = true;
-            notify();
-        }
-    }
-    public void onRunStopped(TestRunEvent evt) {
-        synchronized(this){
-            done = true;
-            notify();
-        }
-    }
-
-    public void onSuiteStarted(TestRunEvent evt) {
-    }
-
-    public void onSuiteEnded(TestRunEvent evt) {
-    }
-
-    public void onTestError(TestRunEvent evt) {
-    }
-}
diff --git a/proposal/sandbox/selectors/README b/proposal/sandbox/selectors/README
deleted file mode 100644
index fce8eaa..0000000
--- a/proposal/sandbox/selectors/README
+++ /dev/null
@@ -1,34 +0,0 @@
-Selector API
-============
-
-Currently our filesets allow us to select a set of files based on name patterns.
-For instance we could create a set of all the files that end with ".java". 
-However there are cases when you wish to select files based on their other 
-attributes, such as if they are read only or if they are older than a specified 
-date etc. 
-
-The selector API is one such mechanism to do this. The selector API will allow 
-you to build file sets based on criteria other than name. Some possible criteria 
-would be 
-
-Is the file readable? 
-Is the file writeable? 
-What date was the file modified on? 
-What size is the file? 
-Does the contents contain the string "magic"? 
-
-If we end up supporting a VFS then we could expand the number of selectors 
-considerably. A mock representation that has been proposed before is the 
-following. Of course this is subject to change as soon as someone wants to 
-tackle this action ;) 
-
- <include name="**/*.java">
-   <selector type="permission" value="r"/>
-
-   <!-- could optionally be directory/or some other system specific features -->
-   <selector type="type" value="file"/> 
-   <selector type="modify-time" 
-             operation="greater-than" 
-             value="29th Feb 2003"/>
- </include>
-
diff --git a/proposal/sandbox/selectors/src/main/org/apache/tools/ant/DirectoryScanner.java b/proposal/sandbox/selectors/src/main/org/apache/tools/ant/DirectoryScanner.java
deleted file mode 100644
index af9fbea..0000000
--- a/proposal/sandbox/selectors/src/main/org/apache/tools/ant/DirectoryScanner.java
+++ /dev/null
@@ -1,1206 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant;
-
-import java.io.File;
-import java.io.InputStream;
-import java.io.IOException;
-import java.util.Enumeration;
-import java.util.Hashtable;
-import java.util.Vector;
-import java.util.Properties;
-import java.util.StringTokenizer;
-import org.apache.tools.ant.types.PatternSet;
-import org.apache.tools.ant.types.Pattern;
-import org.apache.tools.ant.selectors.FileSelector;
-
-/**
- * Class for scanning a directory for files/directories that match a certain
- * criteria.
- * <p>
- * These criteria consist of a set of include and exclude patterns. With these
- * patterns, you can select which files you want to have included, and which
- * files you want to have excluded.
- * <p>
- * The idea is simple. A given directory is recursively scanned for all files
- * and directories. Each file/directory is matched against a set of include
- * and exclude patterns. Only files/directories that match at least one
- * pattern of the include pattern list, and don't match a pattern of the
- * exclude pattern list will be placed in the list of files/directories found.
- * <p>
- * When no list of include patterns is supplied, "**" will be used, which
- * means that everything will be matched. When no list of exclude patterns is
- * supplied, an empty list is used, such that nothing will be excluded.
- * <p>
- * The pattern matching is done as follows:
- * The name to be matched is split up in path segments. A path segment is the
- * name of a directory or file, which is bounded by
- * <code>File.separator</code> ('/' under UNIX, '\' under Windows).
- * E.g. "abc/def/ghi/xyz.java" is split up in the segments "abc", "def", "ghi"
- * and "xyz.java".
- * The same is done for the pattern against which should be matched.
- * <p>
- * Then the segments of the name and the pattern will be matched against each
- * other. When '**' is used for a path segment in the pattern, then it matches
- * zero or more path segments of the name.
- * <p>
- * There are special case regarding the use of <code>File.separator</code>s at
- * the beginningof the pattern and the string to match:<br>
- * When a pattern starts with a <code>File.separator</code>, the string
- * to match must also start with a <code>File.separator</code>.
- * When a pattern does not start with a <code>File.separator</code>, the
- * string to match may not start with a <code>File.separator</code>.
- * When one of these rules is not obeyed, the string will not
- * match.
- * <p>
- * When a name path segment is matched against a pattern path segment, the
- * following special characters can be used:
- * '*' matches zero or more characters,
- * '?' matches one character.
- * <p>
- * Examples:
- * <p>
- * "**\*.class" matches all .class files/dirs in a directory tree.
- * <p>
- * "test\a??.java" matches all files/dirs which start with an 'a', then two
- * more characters and then ".java", in a directory called test.
- * <p>
- * "**" matches everything in a directory tree.
- * <p>
- * "**\test\**\XYZ*" matches all files/dirs that start with "XYZ" and where
- * there is a parent directory called test (e.g. "abc\test\def\ghi\XYZ123").
- * <p>
- * Case sensitivity may be turned off if necessary.  By default, it is
- * turned on.
- * <p>
- * Example of usage:
- * <pre>
- *   String[] includes = {"**\\*.class"};
- *   String[] excludes = {"modules\\*\\**"};
- *   ds.setIncludes(includes);
- *   ds.setExcludes(excludes);
- *   ds.setBasedir(new File("test"));
- *   ds.setCaseSensitive(true);
- *   ds.scan();
- *
- *   System.out.println("FILES:");
- *   String[] files = ds.getIncludedFiles();
- *   for (int i = 0; i < files.length;i++) {
- *     System.out.println(files[i]);
- *   }
- * </pre>
- * This will scan a directory called test for .class files, but excludes all
- * .class files in all directories under a directory called "modules"
- *
- * @author Arnout J. Kuiper <a href="mailto:ajkuiper@wxs.nl">ajkuiper@wxs.nl</a>
- * @author <a href="mailto:umagesh@rediffmail.com">Magesh Umasankar</a>
- */
-public class DirectoryScanner implements FileScanner {
-
-    /**
-     * Patterns that should be excluded by default.
-     *
-     * @see #addDefaultExcludes()
-     */
-    protected final static String[] DEFAULTEXCLUDES = {
-        "**/*~",
-        "**/#*#",
-        "**/.#*",
-        "**/%*%",
-        "**/CVS",
-        "**/CVS/**",
-        "**/.cvsignore",
-        "**/SCCS",
-        "**/SCCS/**",
-        "**/vssver.scc"
-    };
-
-    /**
-     * The base directory which should be scanned.
-     */
-    protected File basedir;
-
-    /**
-     * The patterns for the files that should be included.
-     */
-    protected Pattern[] includes;
-
-    /**
-     * The patterns for the files that should be excluded.
-     */
-    protected Pattern[] excludes;
-
-    /**
-     * The files that where found and matched at least one includes, and matched
-     * no excludes.
-     */
-    protected Vector filesIncluded;
-
-    /**
-     * The files that where found and did not match any includes.
-     */
-    protected Vector filesNotIncluded;
-
-    /**
-     * The files that where found and matched at least one includes, and also
-     * matched at least one excludes.
-     */
-    protected Vector filesExcluded;
-
-    /**
-     * The directories that where found and matched at least one includes, and
-     * matched no excludes.
-     */
-    protected Vector dirsIncluded;
-
-    /**
-     * The directories that where found and did not match any includes.
-     */
-    protected Vector dirsNotIncluded;
-
-    /**
-     * The files that where found and matched at least one includes, and also
-     * matched at least one excludes.
-     */
-    protected Vector dirsExcluded;
-
-    /**
-     * Have the Vectors holding our results been built by a slow scan?
-     */
-    protected boolean haveSlowResults = false;
-
-    /**
-     * Should the file system be treated as a case sensitive one?
-     */
-    protected boolean isCaseSensitive = true;
-
-    /**
-     * Is everything we've seen so far included?
-     */
-    protected boolean everythingIncluded = true;
-
-    private static Hashtable selectorClasses = null;
-
-    static {
-        String defs = "/org/apache/tools/ant/selectors/defaults.properties";
-        selectorClasses = new Hashtable();
-
-        try {
-            Properties props = new Properties();
-            InputStream in = DirectoryScanner.class.getResourceAsStream(defs);
-            if (in == null) {
-                throw new BuildException("Can't load default selector list");
-            }
-            props.load(in);
-            in.close();
-
-            Enumeration enum = props.propertyNames();
-            while (enum.hasMoreElements()) {
-                String key = (String) enum.nextElement();
-                String value = props.getProperty(key);
-                try {
-                    selectorClasses.put(key, Class.forName(value));
-                } catch (NoClassDefFoundError ncdfe) {
-                } catch (ClassNotFoundException cnfe) {
-                }
-            }
-        } catch (IOException ioe) {
-            throw new BuildException("Can't load default selector list");
-        }
-    }
-
-    /**
-     * Constructor.
-     */
-    public DirectoryScanner() {
-    }
-
-
-    /**
-     * Does the path match the start of this pattern up to the first "**".
-     *
-     * <p>This is not a general purpose test and should only be used if you
-     * can live with false positives.</p>
-     *
-     * <p><code>pattern=**\\a</code> and <code>str=b</code> will yield true.
-     *
-     * @param pattern the (non-null) pattern to match against
-     * @param str     the (non-null) string (path) to match
-     */
-    protected static boolean matchPatternStart(String pattern, String str) {
-        return matchPatternStart(pattern, str, true);
-    }
-
-    /**
-     * Does the path match the start of this pattern up to the first "**".
-     *
-     * <p>This is not a general purpose test and should only be used if you
-     * can live with false positives.</p>
-     *
-     * <p><code>pattern=**\\a</code> and <code>str=b</code> will yield true.
-     *
-     * @param pattern             the (non-null) pattern to match against
-     * @param str                 the (non-null) string (path) to match
-     * @param isCaseSensitive     must matches be case sensitive?
-     */
-    protected static boolean matchPatternStart(String pattern, String str,
-                                               boolean isCaseSensitive) {
-        // When str starts with a File.separator, pattern has to start with a
-        // File.separator.
-        // When pattern starts with a File.separator, str has to start with a
-        // File.separator.
-        if (str.startsWith(File.separator) !=
-            pattern.startsWith(File.separator)) {
-            return false;
-        }
-
-        Vector patDirs = new Vector();
-        StringTokenizer st = new StringTokenizer(pattern,File.separator);
-        while (st.hasMoreTokens()) {
-            patDirs.addElement(st.nextToken());
-        }
-
-        Vector strDirs = new Vector();
-        st = new StringTokenizer(str,File.separator);
-        while (st.hasMoreTokens()) {
-            strDirs.addElement(st.nextToken());
-        }
-
-        int patIdxStart = 0;
-        int patIdxEnd   = patDirs.size()-1;
-        int strIdxStart = 0;
-        int strIdxEnd   = strDirs.size()-1;
-
-        // up to first '**'
-        while (patIdxStart <= patIdxEnd && strIdxStart <= strIdxEnd) {
-            String patDir = (String)patDirs.elementAt(patIdxStart);
-            if (patDir.equals("**")) {
-                break;
-            }
-            if (!match(patDir,(String)strDirs.elementAt(strIdxStart), isCaseSensitive)) {
-                return false;
-            }
-            patIdxStart++;
-            strIdxStart++;
-        }
-
-        if (strIdxStart > strIdxEnd) {
-            // String is exhausted
-            return true;
-        } else if (patIdxStart > patIdxEnd) {
-            // String not exhausted, but pattern is. Failure.
-            return false;
-        } else {
-            // pattern now holds ** while string is not exhausted
-            // this will generate false positives but we can live with that.
-            return true;
-        }
-    }
-
-    protected static boolean isSelected(String fileToScan, Vector selectorList) {
-        boolean isInclusive = true;
-        if (selectorList != null ) {
-            PatternSet.SelectorEntry[] selectorEntries =
-                new PatternSet.SelectorEntry[selectorList.size()];
-            selectorList.copyInto(selectorEntries);
-            boolean[] selectorIndices = new boolean[selectorEntries.length];
-
-            for (int i = 0; i < selectorEntries.length; i++) {
-                String type = selectorEntries[i].getType();
-                String value = selectorEntries[i].getValue();
-                String operation = selectorEntries[i].getOperation();
-                Class c = (Class) selectorClasses.get(type);
-                if (c != null) {
-                    FileSelector s = null;
-                    try {
-                        s = (FileSelector) c.newInstance();
-                        s.setValue(value);
-                        s.setOperation(operation);
-                        isInclusive = s.isSelected(fileToScan);
-                    } catch (InstantiationException ie) {
-                    } catch (IllegalAccessException ie) {
-                    }
-                    if (!isInclusive) {
-                        break;
-                    }
-                }
-            }
-        }
-        return isInclusive;
-    }
-
-    /**
-     * Matches a path against a pattern.
-     *
-     * @param pattern the (non-null) pattern to match against
-     * @param str     the (non-null) string (path) to match
-     *
-     * @return <code>true</code> when the pattern matches against the string.
-     *         <code>false</code> otherwise.
-     */
-    protected static boolean matchPath(String pattern, String str) {
-        return matchPath(pattern, null, str, true);
-    }
-
-    protected static boolean matchPath(String pattern,
-                                       String str, boolean isCaseSensitive) {
-        return matchPath(pattern, null, str, isCaseSensitive);
-    }
-
-    /**
-     * Matches a path against a pattern.
-     *
-     * @param pattern            the (non-null) pattern to match against
-     * @param str                the (non-null) string (path) to match
-     * @param isCaseSensitive    must a case sensitive match be done?
-     *
-     * @return <code>true</code> when the pattern matches against the string.
-     *         <code>false</code> otherwise.
-     */
-    protected static boolean matchPath(String pattern, Vector selectorList,
-                                       String str, boolean isCaseSensitive) {
-        // When str starts with a File.separator, pattern has to start with a
-        // File.separator.
-        // When pattern starts with a File.separator, str has to start with a
-        // File.separator.
-        if (str.startsWith(File.separator) !=
-            pattern.startsWith(File.separator)) {
-            return false;
-        }
-
-        Vector patDirs = new Vector();
-        StringTokenizer st = new StringTokenizer(pattern,File.separator);
-        while (st.hasMoreTokens()) {
-            patDirs.addElement(st.nextToken());
-        }
-
-        Vector strDirs = new Vector();
-        st = new StringTokenizer(str,File.separator);
-        while (st.hasMoreTokens()) {
-            strDirs.addElement(st.nextToken());
-        }
-
-        int patIdxStart = 0;
-        int patIdxEnd   = patDirs.size()-1;
-        int strIdxStart = 0;
-        int strIdxEnd   = strDirs.size()-1;
-
-        // up to first '**'
-        while (patIdxStart <= patIdxEnd && strIdxStart <= strIdxEnd) {
-            String patDir = (String)patDirs.elementAt(patIdxStart);
-            if (patDir.equals("**")) {
-                break;
-            }
-            if (!match(patDir,(String)strDirs.elementAt(strIdxStart), isCaseSensitive)) {
-                return false;
-            }
-            patIdxStart++;
-            strIdxStart++;
-        }
-        if (strIdxStart > strIdxEnd) {
-            // String is exhausted
-            for (int i = patIdxStart; i <= patIdxEnd; i++) {
-                if (!patDirs.elementAt(i).equals("**")) {
-                    return false;
-                }
-            }
-            return isSelected(str, selectorList);
-        } else {
-            if (patIdxStart > patIdxEnd) {
-                // String not exhausted, but pattern is. Failure.
-                return false;
-            }
-        }
-
-        // up to last '**'
-        while (patIdxStart <= patIdxEnd && strIdxStart <= strIdxEnd) {
-            String patDir = (String)patDirs.elementAt(patIdxEnd);
-            if (patDir.equals("**")) {
-                break;
-            }
-            if (!match(patDir,(String)strDirs.elementAt(strIdxEnd), isCaseSensitive)) {
-                return false;
-            }
-            patIdxEnd--;
-            strIdxEnd--;
-        }
-        if (strIdxStart > strIdxEnd) {
-            // String is exhausted
-            for (int i = patIdxStart; i <= patIdxEnd; i++) {
-                if (!patDirs.elementAt(i).equals("**")) {
-                    return false;
-                }
-            }
-            return isSelected(str, selectorList);
-        }
-
-        while (patIdxStart != patIdxEnd && strIdxStart <= strIdxEnd) {
-            int patIdxTmp = -1;
-            for (int i = patIdxStart+1; i <= patIdxEnd; i++) {
-                if (patDirs.elementAt(i).equals("**")) {
-                    patIdxTmp = i;
-                    break;
-                }
-            }
-            if (patIdxTmp == patIdxStart+1) {
-                // '**/**' situation, so skip one
-                patIdxStart++;
-                continue;
-            }
-            // Find the pattern between padIdxStart & padIdxTmp in str between
-            // strIdxStart & strIdxEnd
-            int patLength = (patIdxTmp-patIdxStart-1);
-            int strLength = (strIdxEnd-strIdxStart+1);
-            int foundIdx  = -1;
-strLoop:
-            for (int i = 0; i <= strLength - patLength; i++) {
-                for (int j = 0; j < patLength; j++) {
-                    String subPat = (String)patDirs.elementAt(patIdxStart+j+1);
-                    String subStr = (String)strDirs.elementAt(strIdxStart+i+j);
-                    if (!match(subPat,subStr, isCaseSensitive)) {
-                        continue strLoop;
-                    }
-                }
-
-                foundIdx = strIdxStart+i;
-                break;
-            }
-
-            if (foundIdx == -1) {
-                return false;
-            }
-
-            patIdxStart = patIdxTmp;
-            strIdxStart = foundIdx+patLength;
-        }
-
-        for (int i = patIdxStart; i <= patIdxEnd; i++) {
-            if (!patDirs.elementAt(i).equals("**")) {
-                return false;
-            }
-        }
-
-        return isSelected(str, selectorList);
-    }
-
-
-    /**
-     * Matches a string against a pattern. The pattern contains two special
-     * characters:
-     * '*' which means zero or more characters,
-     * '?' which means one and only one character.
-     *
-     * @param pattern the (non-null) pattern to match against
-     * @param str     the (non-null) string that must be matched against the
-     *                pattern
-     *
-     * @return <code>true</code> when the string matches against the pattern,
-     *         <code>false</code> otherwise.
-     */
-    public static boolean match(String pattern, String str) {
-        return match(pattern, str, true);
-    }
-
-
-    /**
-     * Matches a string against a pattern. The pattern contains two special
-     * characters:
-     * '*' which means zero or more characters,
-     * '?' which means one and only one character.
-     *
-     * @param pattern the (non-null) pattern to match against
-     * @param str     the (non-null) string that must be matched against the
-     *                pattern
-     *
-     * @return <code>true</code> when the string matches against the pattern,
-     *         <code>false</code> otherwise.
-     */
-    protected static boolean match(String pattern, String str, boolean isCaseSensitive) {
-        char[] patArr = pattern.toCharArray();
-        char[] strArr = str.toCharArray();
-        int patIdxStart = 0;
-        int patIdxEnd   = patArr.length-1;
-        int strIdxStart = 0;
-        int strIdxEnd   = strArr.length-1;
-        char ch;
-
-        boolean containsStar = false;
-        for (int i = 0; i < patArr.length; i++) {
-            if (patArr[i] == '*') {
-                containsStar = true;
-                break;
-            }
-        }
-
-        if (!containsStar) {
-            // No '*'s, so we make a shortcut
-            if (patIdxEnd != strIdxEnd) {
-                return false; // Pattern and string do not have the same size
-            }
-            for (int i = 0; i <= patIdxEnd; i++) {
-                ch = patArr[i];
-                if (ch != '?') {
-                    if (isCaseSensitive && ch != strArr[i]) {
-                        return false;// Character mismatch
-                    }
-                    if (!isCaseSensitive && Character.toUpperCase(ch) !=
-                        Character.toUpperCase(strArr[i])) {
-                        return false; // Character mismatch
-                    }
-                }
-            }
-            return true; // String matches against pattern
-        }
-
-        if (patIdxEnd == 0) {
-            return true; // Pattern contains only '*', which matches anything
-        }
-
-        // Process characters before first star
-        while((ch = patArr[patIdxStart]) != '*' && strIdxStart <= strIdxEnd) {
-            if (ch != '?') {
-                if (isCaseSensitive && ch != strArr[strIdxStart]) {
-                    return false;// Character mismatch
-                }
-                if (!isCaseSensitive && Character.toUpperCase(ch) !=
-                    Character.toUpperCase(strArr[strIdxStart])) {
-                    return false;// Character mismatch
-                }
-            }
-            patIdxStart++;
-            strIdxStart++;
-        }
-        if (strIdxStart > strIdxEnd) {
-            // All characters in the string are used. Check if only '*'s are
-            // left in the pattern. If so, we succeeded. Otherwise failure.
-            for (int i = patIdxStart; i <= patIdxEnd; i++) {
-                if (patArr[i] != '*') {
-                    return false;
-                }
-            }
-            return true;
-        }
-
-        // Process characters after last star
-        while((ch = patArr[patIdxEnd]) != '*' && strIdxStart <= strIdxEnd) {
-            if (ch != '?') {
-                if (isCaseSensitive && ch != strArr[strIdxEnd]) {
-                    return false;// Character mismatch
-                }
-                if (!isCaseSensitive && Character.toUpperCase(ch) !=
-                    Character.toUpperCase(strArr[strIdxEnd])) {
-                    return false;// Character mismatch
-                }
-            }
-            patIdxEnd--;
-            strIdxEnd--;
-        }
-        if (strIdxStart > strIdxEnd) {
-            // All characters in the string are used. Check if only '*'s are
-            // left in the pattern. If so, we succeeded. Otherwise failure.
-            for (int i = patIdxStart; i <= patIdxEnd; i++) {
-                if (patArr[i] != '*') {
-                    return false;
-                }
-            }
-            return true;
-        }
-
-        // process pattern between stars. padIdxStart and patIdxEnd point
-        // always to a '*'.
-        while (patIdxStart != patIdxEnd && strIdxStart <= strIdxEnd) {
-            int patIdxTmp = -1;
-            for (int i = patIdxStart+1; i <= patIdxEnd; i++) {
-                if (patArr[i] == '*') {
-                    patIdxTmp = i;
-                    break;
-                }
-            }
-            if (patIdxTmp == patIdxStart+1) {
-                // Two stars next to each other, skip the first one.
-                patIdxStart++;
-                continue;
-            }
-            // Find the pattern between padIdxStart & padIdxTmp in str between
-            // strIdxStart & strIdxEnd
-            int patLength = (patIdxTmp-patIdxStart-1);
-            int strLength = (strIdxEnd-strIdxStart+1);
-            int foundIdx  = -1;
-            strLoop:
-            for (int i = 0; i <= strLength - patLength; i++) {
-                for (int j = 0; j < patLength; j++) {
-                    ch = patArr[patIdxStart+j+1];
-                    if (ch != '?') {
-                        if (isCaseSensitive && ch != strArr[strIdxStart+i+j]) {
-                            continue strLoop;
-                        }
-                        if (!isCaseSensitive && Character.toUpperCase(ch) !=
-                            Character.toUpperCase(strArr[strIdxStart+i+j])) {
-                            continue strLoop;
-                        }
-                    }
-                }
-
-                foundIdx = strIdxStart+i;
-                break;
-            }
-
-            if (foundIdx == -1) {
-                return false;
-            }
-
-            patIdxStart = patIdxTmp;
-            strIdxStart = foundIdx+patLength;
-        }
-
-        // All characters in the string are used. Check if only '*'s are left
-        // in the pattern. If so, we succeeded. Otherwise failure.
-        for (int i = patIdxStart; i <= patIdxEnd; i++) {
-            if (patArr[i] != '*') {
-                return false;
-            }
-        }
-        return true;
-    }
-
-
-
-    /**
-     * Sets the basedir for scanning. This is the directory that is scanned
-     * recursively. All '/' and '\' characters are replaced by
-     * <code>File.separatorChar</code>. So the separator used need not match
-     * <code>File.separatorChar</code>.
-     *
-     * @param basedir the (non-null) basedir for scanning
-     */
-    public void setBasedir(String basedir) {
-        setBasedir(new File(basedir.replace('/',File.separatorChar).replace('\\',File.separatorChar)));
-    }
-
-
-
-    /**
-     * Sets the basedir for scanning. This is the directory that is scanned
-     * recursively.
-     *
-     * @param basedir the basedir for scanning
-     */
-    public void setBasedir(File basedir) {
-        this.basedir = basedir;
-    }
-
-
-
-    /**
-     * Gets the basedir that is used for scanning. This is the directory that
-     * is scanned recursively.
-     *
-     * @return the basedir that is used for scanning
-     */
-    public File getBasedir() {
-        return basedir;
-    }
-
-
-
-    /**
-     * Sets the case sensitivity of the file system
-     *
-     * @param specifies if the filesystem is case sensitive
-     */
-    public void setCaseSensitive(boolean isCaseSensitive) {
-        this.isCaseSensitive = isCaseSensitive;
-    }
-
-    /**
-     * Sets the set of include patterns to use. All '/' and '\' characters are
-     * replaced by <code>File.separatorChar</code>. So the separator used need
-     * not match <code>File.separatorChar</code>.
-     * <p>
-     * When a pattern ends with a '/' or '\', "**" is appended.
-     *
-     * @param includes list of include patterns
-     */
-    public void setIncludes(String[] includes) {
-        if (includes == null) {
-            this.includes = null;
-        } else {
-            Pattern[] p = new Pattern[includes.length];
-            for (int i = 0; i < includes.length; i++) {
-                p[i] = new Pattern();
-                p[i].setPattern(includes[i]);
-            }
-            setIncludes(p);
-        }
-    }
-
-    public void setIncludes(Pattern[] includes) {
-        if (includes == null) {
-            this.includes = null;
-        } else {
-            this.includes = new Pattern[includes.length];
-            for (int i = 0; i < includes.length; i++) {
-                String pattern;
-                pattern = includes[i].getPattern().replace('/',File.separatorChar).replace('\\',File.separatorChar);
-                if (pattern.endsWith(File.separator)) {
-                    pattern += "**";
-                }
-                this.includes[i] = new Pattern();
-                this.includes[i].setPattern(pattern);
-                this.includes[i].setSelectorList(includes[i].getSelectorList());
-            }
-        }
-    }
-
-    /**
-     * Sets the set of exclude patterns to use. All '/' and '\' characters are
-     * replaced by <code>File.separatorChar</code>. So the separator used need
-     * not match <code>File.separatorChar</code>.
-     * <p>
-     * When a pattern ends with a '/' or '\', "**" is appended.
-     *
-     * @param excludes list of exclude patterns
-     */
-    public void setExcludes(String[] excludes) {
-        if (excludes == null) {
-            this.excludes = null;
-        } else {
-            Pattern[] p = new Pattern[excludes.length];
-            for (int i = 0; i < excludes.length; i++) {
-                p[i] = new Pattern();
-                p[i].setPattern(excludes[i]);
-            }
-            setExcludes(p);
-        }
-    }
-
-    public void setExcludes(Pattern[] excludes) {
-        if (excludes == null) {
-            this.excludes = null;
-        } else {
-            this.excludes = new Pattern[excludes.length];
-            for (int i = 0; i < excludes.length; i++) {
-                String pattern;
-                pattern = excludes[i].getPattern().replace('/',File.separatorChar).replace('\\',File.separatorChar);
-                if (pattern.endsWith(File.separator)) {
-                    pattern += "**";
-                }
-                this.excludes[i] = new Pattern();
-                this.excludes[i].setPattern(pattern);
-                this.excludes[i].setSelectorList(excludes[i].getSelectorList());
-            }
-        }
-    }
-
-    /**
-     * Has the scanner excluded or omitted any files or directories it
-     * came accross?
-     *
-     * @return true if all files and directories that have been found,
-     * are included.
-     */
-    public boolean isEverythingIncluded() {
-        return everythingIncluded;
-    }
-
-
-    /**
-     * Scans the base directory for files that match at least one include
-     * pattern, and don't match any exclude patterns.
-     *
-     * @exception IllegalStateException when basedir was set incorrecly
-     */
-    public void scan() {
-        if (basedir == null) {
-            throw new IllegalStateException("No basedir set");
-        }
-        if (!basedir.exists()) {
-            throw new IllegalStateException("basedir " + basedir
-                                            + " does not exist");
-        }
-        if (!basedir.isDirectory()) {
-            throw new IllegalStateException("basedir " + basedir
-                                            + " is not a directory");
-        }
-
-        if (includes == null) {
-            // No includes supplied, so set it to 'matches all'
-            includes = new Pattern[1];
-            includes[0] = new Pattern();
-            includes[0].setPattern("**");
-        }
-        if (excludes == null) {
-            excludes = new Pattern[0];
-        }
-
-        filesIncluded    = new Vector();
-        filesNotIncluded = new Vector();
-        filesExcluded    = new Vector();
-        dirsIncluded     = new Vector();
-        dirsNotIncluded  = new Vector();
-        dirsExcluded     = new Vector();
-
-        if (isIncluded("")) {
-            if (!isExcluded("")) {
-                dirsIncluded.addElement("");
-            } else {
-                dirsExcluded.addElement("");
-            }
-        } else {
-            dirsNotIncluded.addElement("");
-        }
-        scandir(basedir, "", true);
-    }
-
-    /**
-     * Toplevel invocation for the scan.
-     *
-     * <p>Returns immediately if a slow scan has already been requested.
-     */
-    protected void slowScan() {
-        if (haveSlowResults) {
-            return;
-        }
-
-        String[] excl = new String[dirsExcluded.size()];
-        dirsExcluded.copyInto(excl);
-
-        String[] notIncl = new String[dirsNotIncluded.size()];
-        dirsNotIncluded.copyInto(notIncl);
-
-        for (int i=0; i<excl.length; i++) {
-            if (!couldHoldIncluded(excl[i])) {
-                scandir(new File(basedir, excl[i]),
-                        excl[i]+File.separator, false);
-            }
-        }
-
-        for (int i=0; i<notIncl.length; i++) {
-            if (!couldHoldIncluded(notIncl[i])) {
-                scandir(new File(basedir, notIncl[i]),
-                        notIncl[i]+File.separator, false);
-            }
-        }
-
-        haveSlowResults  = true;
-    }
-
-
-    /**
-     * Scans the passed dir for files and directories. Found files and
-     * directories are placed in their respective collections, based on the
-     * matching of includes and excludes. When a directory is found, it is
-     * scanned recursively.
-     *
-     * @param dir   the directory to scan
-     * @param vpath the path relative to the basedir (needed to prevent
-     *              problems with an absolute path when using dir)
-     *
-     * @see #filesIncluded
-     * @see #filesNotIncluded
-     * @see #filesExcluded
-     * @see #dirsIncluded
-     * @see #dirsNotIncluded
-     * @see #dirsExcluded
-     */
-    protected void scandir(File dir, String vpath, boolean fast) {
-        String[] newfiles = dir.list();
-
-        if (newfiles == null) {
-            /*
-             * two reasons are mentioned in the API docs for File.list
-             * (1) dir is not a directory. This is impossible as
-             *     we wouldn't get here in this case.
-             * (2) an IO error occurred (why doesn't it throw an exception
-             *     then???)
-             */
-            throw new BuildException("IO error scanning directory "
-                                     + dir.getAbsolutePath());
-        }
-
-        for (int i = 0; i < newfiles.length; i++) {
-            String name = vpath+newfiles[i];
-            File   file = new File(dir,newfiles[i]);
-            if (file.isDirectory()) {
-                if (isIncluded(name)) {
-                    if (!isExcluded(name)) {
-                        dirsIncluded.addElement(name);
-                        if (fast) {
-                            scandir(file, name+File.separator, fast);
-                        }
-                    } else {
-                        everythingIncluded = false;
-                        dirsExcluded.addElement(name);
-                        if (fast && couldHoldIncluded(name)) {
-                            scandir(file, name+File.separator, fast);
-                        }
-                    }
-                } else {
-                    everythingIncluded = false;
-                    dirsNotIncluded.addElement(name);
-                    if (fast && couldHoldIncluded(name)) {
-                        scandir(file, name+File.separator, fast);
-                    }
-                }
-                if (!fast) {
-                    scandir(file, name+File.separator, fast);
-                }
-            } else if (file.isFile()) {
-                if (isIncluded(name)) {
-                    if (!isExcluded(name)) {
-                        filesIncluded.addElement(name);
-                    } else {
-                        everythingIncluded = false;
-                        filesExcluded.addElement(name);
-                    }
-                } else {
-                    everythingIncluded = false;
-                    filesNotIncluded.addElement(name);
-                }
-            }
-        }
-    }
-
-
-
-    /**
-     * Tests whether a name matches against at least one include pattern.
-     *
-     * @param name the name to match
-     * @return <code>true</code> when the name matches against at least one
-     *         include pattern, <code>false</code> otherwise.
-     */
-    protected boolean isIncluded(String name) {
-        for (int i = 0; i < includes.length; i++) {
-            if (matchPath(includes[i].getPattern(),
-                          includes[i].getSelectorList(),
-                          name, isCaseSensitive)) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Tests whether a name matches the start of at least one include pattern.
-     *
-     * @param name the name to match
-     * @return <code>true</code> when the name matches against at least one
-     *         include pattern, <code>false</code> otherwise.
-     */
-    protected boolean couldHoldIncluded(String name) {
-        for (int i = 0; i < includes.length; i++) {
-            if (matchPatternStart(includes[i].getPattern(),name, isCaseSensitive)) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Tests whether a name matches against at least one exclude pattern.
-     *
-     * @param name the name to match
-     * @return <code>true</code> when the name matches against at least one
-     *         exclude pattern, <code>false</code> otherwise.
-     */
-    protected boolean isExcluded(String name) {
-        for (int i = 0; i < excludes.length; i++) {
-            if (matchPath(excludes[i].getPattern(),
-                          excludes[i].getSelectorList(),
-                          name, isCaseSensitive)) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-
-    /**
-     * Get the names of the files that matched at least one of the include
-     * patterns, and matched none of the exclude patterns.
-     * The names are relative to the basedir.
-     *
-     * @return the names of the files
-     */
-    public String[] getIncludedFiles() {
-        int count = filesIncluded.size();
-        String[] files = new String[count];
-        for (int i = 0; i < count; i++) {
-            files[i] = (String)filesIncluded.elementAt(i);
-        }
-        return files;
-    }
-
-
-
-    /**
-     * Get the names of the files that matched at none of the include patterns.
-     * The names are relative to the basedir.
-     *
-     * @return the names of the files
-     */
-    public String[] getNotIncludedFiles() {
-        slowScan();
-        int count = filesNotIncluded.size();
-        String[] files = new String[count];
-        for (int i = 0; i < count; i++) {
-            files[i] = (String)filesNotIncluded.elementAt(i);
-        }
-        return files;
-    }
-
-
-
-    /**
-     * Get the names of the files that matched at least one of the include
-     * patterns, an matched also at least one of the exclude patterns.
-     * The names are relative to the basedir.
-     *
-     * @return the names of the files
-     */
-    public String[] getExcludedFiles() {
-        slowScan();
-        int count = filesExcluded.size();
-        String[] files = new String[count];
-        for (int i = 0; i < count; i++) {
-            files[i] = (String)filesExcluded.elementAt(i);
-        }
-        return files;
-    }
-
-
-
-    /**
-     * Get the names of the directories that matched at least one of the include
-     * patterns, an matched none of the exclude patterns.
-     * The names are relative to the basedir.
-     *
-     * @return the names of the directories
-     */
-    public String[] getIncludedDirectories() {
-        int count = dirsIncluded.size();
-        String[] directories = new String[count];
-        for (int i = 0; i < count; i++) {
-            directories[i] = (String)dirsIncluded.elementAt(i);
-        }
-        return directories;
-    }
-
-
-
-    /**
-     * Get the names of the directories that matched at none of the include
-     * patterns.
-     * The names are relative to the basedir.
-     *
-     * @return the names of the directories
-     */
-    public String[] getNotIncludedDirectories() {
-        slowScan();
-        int count = dirsNotIncluded.size();
-        String[] directories = new String[count];
-        for (int i = 0; i < count; i++) {
-            directories[i] = (String)dirsNotIncluded.elementAt(i);
-        }
-        return directories;
-    }
-
-
-
-    /**
-     * Get the names of the directories that matched at least one of the include
-     * patterns, an matched also at least one of the exclude patterns.
-     * The names are relative to the basedir.
-     *
-     * @return the names of the directories
-     */
-    public String[] getExcludedDirectories() {
-        slowScan();
-        int count = dirsExcluded.size();
-        String[] directories = new String[count];
-        for (int i = 0; i < count; i++) {
-            directories[i] = (String)dirsExcluded.elementAt(i);
-        }
-        return directories;
-    }
-
-
-
-    /**
-     * Adds the array with default exclusions to the current exclusions set.
-     *
-     */
-    public void addDefaultExcludes() {
-        int excludesLength = excludes == null ? 0 : excludes.length;
-        Pattern[] newExcludes;
-        newExcludes = new Pattern[excludesLength + DEFAULTEXCLUDES.length];
-        if (excludesLength > 0) {
-            System.arraycopy(excludes,0,newExcludes,0,excludesLength);
-        }
-        for (int i = 0; i < DEFAULTEXCLUDES.length; i++) {
-            newExcludes[i+excludesLength] = new Pattern();
-            newExcludes[i+excludesLength].setPattern(DEFAULTEXCLUDES[i].replace('/',File.separatorChar).replace('\\',File.separatorChar));
-        }
-
-        Pattern[] ep = new Pattern[newExcludes.length];
-        for (int i = 0; i < ep.length; i++) {
-            ep[i] = new Pattern();
-            ep[i].setPattern(newExcludes[i].getPattern());
-        }
-
-        excludes = ep;
-    }
-}
diff --git a/proposal/sandbox/selectors/src/main/org/apache/tools/ant/FileScanner.java b/proposal/sandbox/selectors/src/main/org/apache/tools/ant/FileScanner.java
deleted file mode 100644
index a971a8c..0000000
--- a/proposal/sandbox/selectors/src/main/org/apache/tools/ant/FileScanner.java
+++ /dev/null
@@ -1,175 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant;
-
-import java.io.File;
-import org.apache.tools.ant.types.Pattern;
-
-/**
- * An interface used to describe the actions required by any type of
- * directory scanner.
- */
-public interface FileScanner {
-    /**
-     * Adds an array with default exclusions to the current exclusions set.
-     *
-     */
-    void addDefaultExcludes();
-    /**
-     * Gets the basedir that is used for scanning. This is the directory that
-     * is scanned recursively.
-     *
-     * @return the basedir that is used for scanning
-     */
-    File getBasedir();
-    /**
-     * Get the names of the directories that matched at least one of the include
-     * patterns, an matched also at least one of the exclude patterns.
-     * The names are relative to the basedir.
-     *
-     * @return the names of the directories
-     */
-    String[] getExcludedDirectories();
-    /**
-     * Get the names of the files that matched at least one of the include
-     * patterns, an matched also at least one of the exclude patterns.
-     * The names are relative to the basedir.
-     *
-     * @return the names of the files
-     */
-    String[] getExcludedFiles();
-    /**
-     * Get the names of the directories that matched at least one of the include
-     * patterns, an matched none of the exclude patterns.
-     * The names are relative to the basedir.
-     *
-     * @return the names of the directories
-     */
-    String[] getIncludedDirectories();
-    /**
-     * Get the names of the files that matched at least one of the include
-     * patterns, an matched none of the exclude patterns.
-     * The names are relative to the basedir.
-     *
-     * @return the names of the files
-     */
-    String[] getIncludedFiles();
-    /**
-     * Get the names of the directories that matched at none of the include
-     * patterns.
-     * The names are relative to the basedir.
-     *
-     * @return the names of the directories
-     */
-    String[] getNotIncludedDirectories();
-    /**
-     * Get the names of the files that matched at none of the include patterns.
-     * The names are relative to the basedir.
-     *
-     * @return the names of the files
-     */
-    String[] getNotIncludedFiles();
-    /**
-     * Scans the base directory for files that match at least one include
-     * pattern, and don't match any exclude patterns.
-     *
-     * @exception IllegalStateException when basedir was set incorrecly
-     */
-    void scan();
-    /**
-     * Sets the basedir for scanning. This is the directory that is scanned
-     * recursively.
-     *
-     * @param basedir the (non-null) basedir for scanning
-     */
-    void setBasedir(String basedir);
-    /**
-     * Sets the basedir for scanning. This is the directory that is scanned
-     * recursively.
-     *
-     * @param basedir the basedir for scanning
-     */
-    void setBasedir(File basedir);
-    /**
-     * Sets the set of exclude patterns to use.
-     *
-     * @param excludes list of exclude patterns
-     */
-    void setExcludes(String[] excludes);
-    /**
-     * Sets the set of include patterns to use.
-     *
-     * @param includes list of include patterns
-     */
-    void setIncludes(String[] includes);
-    /**
-     * Sets the set of exclude patterns to use.
-     *
-     * @param excludes list of exclude patterns
-     */
-    void setExcludes(Pattern[] excludes);
-    /**
-     * Sets the set of include patterns to use.
-     *
-     * @param includes list of include patterns
-     */
-    void setIncludes(Pattern[] includes);
-
-    /**
-     * Sets the case sensitivity of the file system
-     *
-     * @param specifies if the filesystem is case sensitive
-     */
-    void setCaseSensitive(boolean isCaseSensitive);
-}
diff --git a/proposal/sandbox/selectors/src/main/org/apache/tools/ant/selectors/FileSelector.java b/proposal/sandbox/selectors/src/main/org/apache/tools/ant/selectors/FileSelector.java
deleted file mode 100644
index 8b37c75..0000000
--- a/proposal/sandbox/selectors/src/main/org/apache/tools/ant/selectors/FileSelector.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.selectors;
-
-import java.io.File;
-
-/**
- * File Selector API.
- *
- * @author <a href="mailto:umagesh@apache.org">Magesh Umasankar</a>
- */
-public interface FileSelector {
-    public void setValue(final String value);
-    public void setOperation(final String operation);
-    public boolean isSelected(final String file);
-}
diff --git a/proposal/sandbox/selectors/src/main/org/apache/tools/ant/selectors/FileTypeSelector.java b/proposal/sandbox/selectors/src/main/org/apache/tools/ant/selectors/FileTypeSelector.java
deleted file mode 100644
index 009a5e6..0000000
--- a/proposal/sandbox/selectors/src/main/org/apache/tools/ant/selectors/FileTypeSelector.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
- package org.apache.tools.ant.selectors;
-
-import java.io.File;
-
-/**
- * File selector that performs selection based on
- * file type - file and directory.
- *
- * @author <a href="mailto:umagesh@apache.org">Magesh Umasankar</a>
- */
-public class FileTypeSelector implements FileSelector {
-    private String value = null;
-    private String operation = "equals";
-    private boolean cached = false;
-    private boolean negate = false;
-    private boolean checkForFile = false;
-    private boolean checkForDir = false;
-
-    public void setCached(final boolean cached) {
-        this.cached = cached;
-    }
-
-    public boolean isCached() {
-        return cached;
-    }
-
-    public void setValue(final String value) {
-        this.value = value;
-        setCached(false);
-    }
-
-    public void setOperation(final String operation) {
-        this.operation = operation;
-        setCached(false);
-    }
-
-    public void doCache() {
-        if (!isCached()) {
-            if (value == null) {
-                throw new NullPointerException("value must not be null.");
-            }
-            if (value.equalsIgnoreCase("file")) {
-                checkForFile = true;
-                checkForDir = false;
-            } else if (value.equalsIgnoreCase("directory")) {
-                checkForDir = true;
-                checkForFile = false;
-            }
-            if (!operation.equalsIgnoreCase("equals")) {
-                negate = true;
-            } else {
-                negate = false;
-            }
-            setCached(true);
-        }
-    }
-
-    public boolean isSelected(final String file) {
-        doCache();
-        if (file == null) {
-            throw new NullPointerException("file must not be null.");
-        }
-        boolean retValue = false;
-        File f = new File(file);
-        if (checkForFile) {
-            retValue = f.isFile();
-        } else if (checkForDir) {
-            retValue = f.isDirectory();
-        }
-        if (negate) {
-            retValue = !retValue;
-        }
-        return retValue;
-    }
-}
diff --git a/proposal/sandbox/selectors/src/main/org/apache/tools/ant/selectors/defaults.properties b/proposal/sandbox/selectors/src/main/org/apache/tools/ant/selectors/defaults.properties
deleted file mode 100644
index 4887f11..0000000
--- a/proposal/sandbox/selectors/src/main/org/apache/tools/ant/selectors/defaults.properties
+++ /dev/null
@@ -1 +0,0 @@
-type=org.apache.tools.ant.selectors.FileTypeSelector
diff --git a/proposal/sandbox/selectors/src/main/org/apache/tools/ant/types/FileSet.java b/proposal/sandbox/selectors/src/main/org/apache/tools/ant/types/FileSet.java
deleted file mode 100644
index 8f983ec..0000000
--- a/proposal/sandbox/selectors/src/main/org/apache/tools/ant/types/FileSet.java
+++ /dev/null
@@ -1,341 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.types;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.FileScanner;
-import org.apache.tools.ant.DirectoryScanner;
-import org.apache.tools.ant.Project;
-
-import java.io.File;
-import java.util.Stack;
-import java.util.Vector;
-
-/**
- * Moved out of MatchingTask to make it a standalone object that could
- * be referenced (by scripts for example).
- *
- * @author Arnout J. Kuiper <a href="mailto:ajkuiper@wxs.nl">ajkuiper@wxs.nl</a>
- * @author Stefano Mazzocchi <a href="mailto:stefano@apache.org">stefano@apache.org</a>
- * @author Sam Ruby <a href="mailto:rubys@us.ibm.com">rubys@us.ibm.com</a>
- * @author Jon S. Stevens <a href="mailto:jon@clearink.com">jon@clearink.com</a>
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- * @author <a href="mailto:umagesh@rediffmail.com">Magesh Umasankar</a>
- */
-public class FileSet extends DataType implements Cloneable {
-
-    private PatternSet defaultPatterns = new PatternSet();
-    private Vector additionalPatterns = new Vector();
-
-    private File dir;
-    private boolean useDefaultExcludes = true;
-    private boolean isCaseSensitive = true;
-
-    public FileSet() {
-        super();
-    }
-
-    protected FileSet(FileSet fileset) {
-        this.dir = fileset.dir;
-        this.defaultPatterns = fileset.defaultPatterns;
-        this.additionalPatterns = fileset.additionalPatterns;
-        this.useDefaultExcludes = fileset.useDefaultExcludes;
-        this.isCaseSensitive = fileset.isCaseSensitive;
-        setProject(getProject());
-    }
-
-
-
-    /**
-     * Makes this instance in effect a reference to another PatternSet
-     * instance.
-     *
-     * <p>You must not set another attribute or nest elements inside
-     * this element if you make it a reference.</p>
-     */
-    public void setRefid(Reference r) throws BuildException {
-        if (dir != null || defaultPatterns.hasPatterns()) {
-            throw tooManyAttributes();
-        }
-        if (!additionalPatterns.isEmpty()) {
-            throw noChildrenAllowed();
-        }
-        super.setRefid(r);
-    }
-
-    public void setDir(File dir) throws BuildException {
-        if (isReference()) {
-            throw tooManyAttributes();
-        }
-
-        this.dir = dir;
-    }
-
-    public File getDir(Project p) {
-        if (isReference()) {
-            return getRef(p).getDir(p);
-        }
-        return dir;
-    }
-
-    public PatternSet createPatternSet() {
-        if (isReference()) {
-            throw noChildrenAllowed();
-        }
-        PatternSet patterns = new PatternSet();
-        additionalPatterns.addElement(patterns);
-        return patterns;
-    }
-
-    /**
-     * add a name entry on the include list
-     */
-    public PatternSet.NameEntry createInclude() {
-        if (isReference()) {
-            throw noChildrenAllowed();
-        }
-        return defaultPatterns.createInclude();
-    }
-
-    /**
-     * add a name entry on the include files list
-     */
-    public PatternSet.NameEntry createIncludesFile() {
-        if (isReference()) {
-            throw noChildrenAllowed();
-        }
-        return defaultPatterns.createIncludesFile();
-    }
-
-    /**
-     * add a name entry on the exclude list
-     */
-    public PatternSet.NameEntry createExclude() {
-        if (isReference()) {
-            throw noChildrenAllowed();
-        }
-        return defaultPatterns.createExclude();
-    }
-
-    /**
-     * add a name entry on the include files list
-     */
-    public PatternSet.NameEntry createExcludesFile() {
-        if (isReference()) {
-            throw noChildrenAllowed();
-        }
-        return defaultPatterns.createExcludesFile();
-    }
-
-    /**
-     * Sets the set of include patterns. Patterns may be separated by a comma
-     * or a space.
-     *
-     * @param includes the string containing the include patterns
-     */
-    public void setIncludes(String includes) {
-        if (isReference()) {
-            throw tooManyAttributes();
-        }
-
-        defaultPatterns.setIncludes(includes);
-    }
-
-    /**
-     * Sets the set of exclude patterns. Patterns may be separated by a comma
-     * or a space.
-     *
-     * @param excludes the string containing the exclude patterns
-     */
-    public void setExcludes(String excludes) {
-        if (isReference()) {
-            throw tooManyAttributes();
-        }
-
-        defaultPatterns.setExcludes(excludes);
-    }
-
-    /**
-     * Sets the name of the file containing the includes patterns.
-     *
-     * @param incl The file to fetch the include patterns from.
-     */
-     public void setIncludesfile(File incl) throws BuildException {
-         if (isReference()) {
-             throw tooManyAttributes();
-         }
-
-         defaultPatterns.setIncludesfile(incl);
-     }
-
-    /**
-     * Sets the name of the file containing the includes patterns.
-     *
-     * @param excl The file to fetch the exclude patterns from.
-     */
-     public void setExcludesfile(File excl) throws BuildException {
-         if (isReference()) {
-             throw tooManyAttributes();
-         }
-
-         defaultPatterns.setExcludesfile(excl);
-     }
-
-    /**
-     * Sets whether default exclusions should be used or not.
-     *
-     * @param useDefaultExcludes "true"|"on"|"yes" when default exclusions
-     *                           should be used, "false"|"off"|"no" when they
-     *                           shouldn't be used.
-     */
-    public void setDefaultexcludes(boolean useDefaultExcludes) {
-        if (isReference()) {
-            throw tooManyAttributes();
-        }
-
-        this.useDefaultExcludes = useDefaultExcludes;
-    }
-
-    /**
-     * Sets case sensitivity of the file system
-     *
-     * @param isCaseSensitive "true"|"on"|"yes" if file system is case
-     *                           sensitive, "false"|"off"|"no" when not.
-     */
-    public void setCaseSensitive(boolean isCaseSensitive) {
-        this.isCaseSensitive = isCaseSensitive;
-    }
-
-    /**
-     * Returns the directory scanner needed to access the files to process.
-     */
-    public DirectoryScanner getDirectoryScanner(Project p) {
-        if (isReference()) {
-            return getRef(p).getDirectoryScanner(p);
-        }
-
-        if (dir == null) {
-            throw new BuildException("No directory specified for fileset.");
-        }
-
-        if (!dir.exists()) {
-            throw new BuildException(dir.getAbsolutePath()+" not found.");
-        }
-        if (!dir.isDirectory()) {
-            throw new BuildException(dir.getAbsolutePath()+" is not a directory.");
-        }
-
-        DirectoryScanner ds = new DirectoryScanner();
-        setupDirectoryScanner(ds, p);
-        ds.scan();
-        return ds;
-    }
-
-    public void setupDirectoryScanner(FileScanner ds, Project p) {
-        if (ds == null) {
-            throw new IllegalArgumentException("ds cannot be null");
-        }
-
-        ds.setBasedir(dir);
-
-        for (int i=0; i<additionalPatterns.size(); i++) {
-            Object o = additionalPatterns.elementAt(i);
-            defaultPatterns.append2((PatternSet) o, p);
-        }
-
-        p.log( "FileSet: Setup file scanner in dir " + dir +
-            " with " + defaultPatterns, p.MSG_DEBUG );
-
-        ds.setIncludes(defaultPatterns.getIncludePatterns2(p));
-        ds.setExcludes(defaultPatterns.getExcludePatterns2(p));
-        if (useDefaultExcludes) {
-          ds.addDefaultExcludes();
-        }
-        ds.setCaseSensitive(isCaseSensitive);
-    }
-
-    /**
-     * Performs the check for circular references and returns the
-     * referenced FileSet.
-     */
-    protected FileSet getRef(Project p) {
-        if (!checked) {
-            Stack stk = new Stack();
-            stk.push(this);
-            dieOnCircularReference(stk, p);
-        }
-
-        Object o = ref.getReferencedObject(p);
-        if (!(o instanceof FileSet)) {
-            String msg = ref.getRefId()+" doesn\'t denote a fileset";
-            throw new BuildException(msg);
-        } else {
-            return (FileSet) o;
-        }
-    }
-
-    /**
-     * Return a FileSet that has the same basedir and same patternsets
-     * as this one.
-     */
-    public Object clone() {
-        if (isReference()) {
-            return new FileSet(getRef(getProject()));
-        } else {
-            return new FileSet(this);
-        }
-    }
-
-}
diff --git a/proposal/sandbox/selectors/src/main/org/apache/tools/ant/types/Pattern.java b/proposal/sandbox/selectors/src/main/org/apache/tools/ant/types/Pattern.java
deleted file mode 100644
index 70fdf3e..0000000
--- a/proposal/sandbox/selectors/src/main/org/apache/tools/ant/types/Pattern.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
- package org.apache.tools.ant.types;
-
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.ProjectHelper;
-import org.apache.tools.ant.BuildException;
-
-import java.io.*;
-import java.util.Enumeration;
-import java.util.Stack;
-import java.util.StringTokenizer;
-import java.util.Vector;
-
-/**
- * Named collection of include/exclude tags.
- *
- * @author <a href="mailto:umagesh@apache.org">Magesh Umasankar</a>
- */
-public class Pattern {
-    private String pattern = null;
-    private Vector selectorList = null;
-
-    /**
-     * Set the pattern
-     * @param pattern    the pattern to match
-     */
-    public void setPattern(String pattern) {
-        this.pattern = pattern;
-    }
-
-    /**
-     * Set the list of Selector entries
-     * @param selectorList    the vector list of 'SelectorEntry's
-     */
-    public void setSelectorList(Vector selectorList) {
-        this.selectorList = selectorList;
-    }
-
-    /**
-     * Get the pattern
-     */
-    public String getPattern() {
-        return pattern;
-    }
-
-    /**
-     * Get the list of Selector entries
-     */
-    public Vector getSelectorList() {
-        return selectorList;
-    }
-}
diff --git a/proposal/sandbox/selectors/src/main/org/apache/tools/ant/types/PatternSet.java b/proposal/sandbox/selectors/src/main/org/apache/tools/ant/types/PatternSet.java
deleted file mode 100644
index 276d5b0..0000000
--- a/proposal/sandbox/selectors/src/main/org/apache/tools/ant/types/PatternSet.java
+++ /dev/null
@@ -1,593 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.types;
-
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.ProjectHelper;
-import org.apache.tools.ant.BuildException;
-
-import java.io.File;
-import java.io.BufferedReader;
-import java.io.FileReader;
-import java.io.IOException;
-import java.util.Enumeration;
-import java.util.Stack;
-import java.util.StringTokenizer;
-import java.util.Vector;
-
-/**
- * Named collection of include/exclude tags.
- *
- * <p>Moved out of MatchingTask to make it a standalone object that
- * could be referenced (by scripts for example).
- *
- * @author Arnout J. Kuiper <a href="mailto:ajkuiper@wxs.nl">ajkuiper@wxs.nl</a>
- * @author Stefano Mazzocchi <a href="mailto:stefano@apache.org">stefano@apache.org</a>
- * @author Sam Ruby <a href="mailto:rubys@us.ibm.com">rubys@us.ibm.com</a>
- * @author Jon S. Stevens <a href="mailto:jon@clearink.com">jon@clearink.com</a>
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- * @author <a href="mailto:umagesh@apache.org">Magesh Umasankar</a>
- */
-public class PatternSet extends DataType {
-    private Vector includeList = new Vector();
-    private Vector excludeList = new Vector();
-    private Vector includesFileList = new Vector();
-    private Vector excludesFileList = new Vector();
-
-
-     /**
-     * inner class to hold a selector list.  A SelectorEntry
-     * is made up of the pattern and selection detail.
-     */
-    public static class SelectorEntry {
-        private String type;
-        private String value;
-        private String operation;
-
-        public void setType(String t) {
-            this.type = t;
-        }
-
-        public void setValue(String val) {
-            this.value = val;
-        }
-
-        public void setOperation(String op) {
-            this.operation = op;
-        }
-
-        public String getType() {
-            return type;
-        }
-
-        public String getValue() {
-            return value;
-        }
-
-        public String getOperation() {
-            return operation;
-        }
-    }
-
-    /**
-     * inner class to hold a name on list.  "If" and "Unless" attributes
-     * may be used to invalidate the entry based on the existence of a
-     * property (typically set thru the use of the Available task).
-     */
-    public class NameEntry {
-        private String name;
-        private String ifCond;
-        private String unlessCond;
-        private Vector selectorList = new Vector();
-
-        public void setName(String name) {
-            this.name = name;
-        }
-
-        public void setIf(String cond) {
-            ifCond = cond;
-        }
-
-        public void setUnless(String cond) {
-            unlessCond = cond;
-        }
-
-        /**
-         * Include/Exclude can contain nested selectors
-         */
-        public SelectorEntry createSelector() {
-            if (isReference()) {
-                throw noChildrenAllowed();
-            }
-            return addSelectorToList(selectorList);
-        }
-
-        /**
-         * add a selector entry to the given list
-         */
-        private SelectorEntry addSelectorToList(final Vector list) {
-            final SelectorEntry result = new SelectorEntry();
-            list.addElement(result);
-            return result;
-        }
-
-        public String getName() {
-            return name;
-        }
-
-        public Vector getSelectorList() {
-            return selectorList;
-        }
-
-        public String evalName(Project p) {
-            return valid(p) ? name : null;
-        }
-
-        private boolean valid(Project p) {
-            if (ifCond != null && p.getProperty(ifCond) == null) {
-                return false;
-            } else if (unlessCond != null && p.getProperty(unlessCond) != null) {
-                return false;
-            }
-            return true;
-        }
-
-        public String toString() {
-            StringBuffer buf = new StringBuffer(name);
-            if ((ifCond != null) || (unlessCond != null)) {
-                buf.append(":");
-                String connector = "";
-
-                if (ifCond != null) {
-                    buf.append("if->");
-                    buf.append(ifCond);
-                    connector = ";";
-                }
-                if (unlessCond != null) {
-                    buf.append(connector);
-                    buf.append("unless->");
-                    buf.append(unlessCond);
-                }
-            }
-
-            return buf.toString();
-        }
-
-        public void setSelectorList(Vector list) {
-            this.selectorList = list;
-        }
-    }
-
-    public PatternSet() {
-        super();
-    }
-
-    /**
-     * Makes this instance in effect a reference to another PatternSet
-     * instance.
-     *
-     * <p>You must not set another attribute or nest elements inside
-     * this element if you make it a reference.</p>
-     */
-    public void setRefid(Reference r) throws BuildException {
-        if (!includeList.isEmpty() || !excludeList.isEmpty()) {
-            throw tooManyAttributes();
-        }
-        super.setRefid(r);
-    }
-
-    /**
-     * add a name entry on the include list
-     */
-    public NameEntry createInclude() {
-        if (isReference()) {
-            throw noChildrenAllowed();
-        }
-        return addPatternToList(includeList);
-    }
-
-    /**
-     * add a name entry on the include files list
-     */
-    public NameEntry createIncludesFile() {
-        if (isReference()) {
-            throw noChildrenAllowed();
-        }
-        return addPatternToList(includesFileList);
-    }
-
-    /**
-     * add a name entry on the exclude list
-     */
-    public NameEntry createExclude() {
-        if (isReference()) {
-            throw noChildrenAllowed();
-        }
-        return addPatternToList(excludeList);
-    }
-
-    /**
-     * add a name entry on the exclude files list
-     */
-    public NameEntry createExcludesFile() {
-        if (isReference()) {
-            throw noChildrenAllowed();
-        }
-        return addPatternToList(excludesFileList);
-    }
-
-    /**
-     * Sets the set of include patterns. Patterns may be separated by a comma
-     * or a space.
-     *
-     * @param includes the string containing the include patterns
-     */
-    public void setIncludes(String includes) {
-        if (isReference()) {
-            throw tooManyAttributes();
-        }
-        if (includes != null && includes.length() > 0) {
-            StringTokenizer tok = new StringTokenizer(includes, ", ", false);
-            while (tok.hasMoreTokens()) {
-                createInclude().setName(tok.nextToken());
-            }
-        }
-    }
-
-    /**
-     * Sets the set of exclude patterns. Patterns may be separated by a comma
-     * or a space.
-     *
-     * @param excludes the string containing the exclude patterns
-     */
-    public void setExcludes(String excludes) {
-        if (isReference()) {
-            throw tooManyAttributes();
-        }
-        if (excludes != null && excludes.length() > 0) {
-            StringTokenizer tok = new StringTokenizer(excludes, ", ", false);
-            while (tok.hasMoreTokens()) {
-                createExclude().setName(tok.nextToken());
-            }
-        }
-    }
-
-    /**
-     * add a name entry to the given list
-     */
-    private NameEntry addPatternToList(Vector list) {
-        NameEntry result = new NameEntry();
-        list.addElement(result);
-        return result;
-    }
-
-    /**
-     * Sets the name of the file containing the includes patterns.
-     *
-     * @param includesFile The file to fetch the include patterns from.
-     */
-     public void setIncludesfile(File includesFile) throws BuildException {
-         if (isReference()) {
-             throw tooManyAttributes();
-         }
-         createIncludesFile().setName(includesFile.getAbsolutePath());
-     }
-
-    /**
-     * Sets the name of the file containing the excludes patterns.
-     *
-     * @param excludesFile The file to fetch the exclude patterns from.
-     */
-     public void setExcludesfile(File excludesFile) throws BuildException {
-         if (isReference()) {
-             throw tooManyAttributes();
-         }
-         createExcludesFile().setName(excludesFile.getAbsolutePath());
-     }
-
-    /**
-     *  Reads path matching patterns from a file and adds them to the
-     *  includes or excludes list (as appropriate).
-     */
-    private void readPatterns(File patternfile, Vector patternlist, Project p)
-        throws BuildException {
-
-        BufferedReader patternReader = null;
-        try {
-            // Get a FileReader
-            patternReader =
-                new BufferedReader(new FileReader(patternfile));
-
-            // Create one NameEntry in the appropriate pattern list for each
-            // line in the file.
-            String line = patternReader.readLine();
-            while (line != null) {
-                if (line.length() > 0) {
-                    line = p.replaceProperties(line);
-                    addPatternToList(patternlist).setName(line);
-                }
-                line = patternReader.readLine();
-            }
-        } catch(IOException ioe)  {
-            String msg = "An error occured while reading from pattern file: "
-                + patternfile;
-            throw new BuildException(msg, ioe);
-        } finally {
-            if( null != patternReader ) {
-                try {
-                    patternReader.close();
-                } catch(IOException ioe) {
-                    //Ignore exception
-                }
-            }
-        }
-    }
-
-    public void append2(PatternSet other, Project p) {
-         if (isReference()) {
-             throw new BuildException("Cannot append to a reference");
-         }
-        Pattern[] incl = other.getIncludePatterns2(p);
-        if (incl != null) {
-            for (int i=0; i<incl.length; i++) {
-                NameEntry ne = createInclude();
-                ne.setName(incl[i].getPattern());
-                ne.setSelectorList(incl[i].getSelectorList());
-            }
-        }
-
-        Pattern[] excl = other.getExcludePatterns2(p);
-        if (excl != null) {
-            for (int i=0; i<excl.length; i++) {
-                NameEntry ne = createExclude();
-                ne.setName(excl[i].getPattern());
-                ne.setSelectorList(incl[i].getSelectorList());
-            }
-        }
-    }
-
-    /**
-     * Adds the patterns of the other instance to this set.
-     */
-    public void append(PatternSet other, Project p) {
-        if (isReference()) {
-            throw new BuildException("Cannot append to a reference");
-        }
-
-        String[] incl = other.getIncludePatterns(p);
-        if (incl != null) {
-            for (int i=0; i<incl.length; i++) {
-                createInclude().setName(incl[i]);
-            }
-        }
-
-        String[] excl = other.getExcludePatterns(p);
-        if (excl != null) {
-            for (int i=0; i<excl.length; i++) {
-                createExclude().setName(excl[i]);
-            }
-        }
-    }
-
-    /**
-     * Returns the filtered include patterns as an array of Patterns
-     */
-    public Pattern[] getIncludePatterns2(Project p) {
-        if (isReference()) {
-            return getRef(p).getIncludePatterns2(p);
-        } else {
-            readFiles(p);
-            return makeArray2(includeList, p);
-        }
-    }
-
-    /**
-     * Returns the filtered exclude patterns as an array of Patterns
-     */
-    public Pattern[] getExcludePatterns2(Project p) {
-        if (isReference()) {
-            return getRef(p).getExcludePatterns2(p);
-        } else {
-            readFiles(p);
-            return makeArray2(excludeList, p);
-        }
-    }
-
-    /**
-     * Returns the filtered include patterns.
-     */
-    public String[] getIncludePatterns(Project p) {
-        if (isReference()) {
-            return getRef(p).getIncludePatterns(p);
-        } else {
-            readFiles(p);
-            return makeArray(includeList, p);
-        }
-    }
-
-    /**
-     * Returns the filtered include patterns.
-     */
-    public String[] getExcludePatterns(Project p) {
-        if (isReference()) {
-            return getRef(p).getExcludePatterns(p);
-        } else {
-            readFiles(p);
-            return makeArray(excludeList, p);
-        }
-    }
-
-    /**
-     * helper for FileSet.
-     */
-    boolean hasPatterns() {
-        return includesFileList.size() > 0 || excludesFileList.size() > 0
-            || includeList.size() > 0 || excludeList.size() > 0;
-    }
-
-    /**
-     * Performs the check for circular references and returns the
-     * referenced PatternSet.
-     */
-    private PatternSet getRef(Project p) {
-        if (!checked) {
-            Stack stk = new Stack();
-            stk.push(this);
-            dieOnCircularReference(stk, p);
-        }
-
-        Object o = ref.getReferencedObject(p);
-        if (!(o instanceof PatternSet)) {
-            String msg = ref.getRefId()+" doesn\'t denote a patternset";
-            throw new BuildException(msg);
-        } else {
-            return (PatternSet) o;
-        }
-    }
-
-
-     /**
-     * Convert a vector of NameEntry elements into an array of Patterns
-     */
-    private Pattern[] makeArray2(Vector list, Project p) {
-        if (list.size() == 0) return null;
-
-        Vector tmpPatterns = new Vector();
-        for (Enumeration e = list.elements() ; e.hasMoreElements() ;) {
-            NameEntry ne = (NameEntry)e.nextElement();
-            String pattern = ne.evalName(p);
-            if (pattern != null && pattern.length() > 0) {
-                Pattern pat = new Pattern();
-                pat.setPattern(pattern);
-                pat.setSelectorList(ne.getSelectorList());
-                tmpPatterns.addElement(pat);
-            }
-        }
-
-        Pattern result[] = new Pattern[tmpPatterns.size()];
-        tmpPatterns.copyInto(result);
-        return result;
-    }
-
-    /**
-     * Convert a vector of NameEntry elements into an array of Strings.
-     */
-    private String[] makeArray(Vector list, Project p) {
-        if (list.size() == 0) {
-          return null;
-        }
-
-        Vector tmpNames = new Vector();
-        for (Enumeration e = list.elements() ; e.hasMoreElements() ;) {
-            NameEntry ne = (NameEntry)e.nextElement();
-            String pattern = ne.evalName(p);
-            if (pattern != null && pattern.length() > 0) {
-                tmpNames.addElement(pattern);
-            }
-        }
-
-        String result[] = new String[tmpNames.size()];
-        tmpNames.copyInto(result);
-        return result;
-    }
-
-    /**
-     * Read includesfile ot excludesfile if not already done so.
-     */
-    private void readFiles(Project p) {
-        if (includesFileList.size() > 0) {
-            Enumeration e = includesFileList.elements();
-            while (e.hasMoreElements()) {
-                NameEntry ne = (NameEntry)e.nextElement();
-                String fileName = ne.evalName(p);
-                if (fileName != null) {
-                    File inclFile = p.resolveFile(fileName);
-                    if (!inclFile.exists()) {
-                        throw new BuildException("Includesfile "
-                                                 + inclFile.getAbsolutePath()
-                                                 + " not found.");
-                    }
-                    readPatterns(inclFile, includeList, p);
-                }
-            }
-            includesFileList.removeAllElements();
-        }
-
-        if (excludesFileList.size() > 0) {
-            Enumeration e = excludesFileList.elements();
-            while (e.hasMoreElements()) {
-                NameEntry ne = (NameEntry)e.nextElement();
-                String fileName = ne.evalName(p);
-                if (fileName != null) {
-                    File exclFile = p.resolveFile(fileName);
-                    if (!exclFile.exists()) {
-                        throw new BuildException("Excludesfile "
-                                                 + exclFile.getAbsolutePath()
-                                                 + " not found.");
-                    }
-                    readPatterns(exclFile, excludeList, p);
-                }
-            }
-            excludesFileList.removeAllElements();
-        }
-    }
-
-    public String toString()
-    {
-        return "patternSet{ includes: " + includeList +
-            " excludes: " + excludeList + " }";
-    }
-
-}
diff --git a/proposal/sandbox/selectors/src/main/org/apache/tools/ant/types/ZipScanner.java b/proposal/sandbox/selectors/src/main/org/apache/tools/ant/types/ZipScanner.java
deleted file mode 100644
index 9c2e410..0000000
--- a/proposal/sandbox/selectors/src/main/org/apache/tools/ant/types/ZipScanner.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.types;
-
-import org.apache.tools.ant.DirectoryScanner;
-import org.apache.tools.ant.types.Pattern;
-import java.io.File;
-
-/**
- * ZipScanner accesses the pattern matching algorithm in DirectoryScanner,
- * which are protected methods that can only be accessed by subclassing.
- *
- * This implementation of FileScanner defines getIncludedFiles to return
- * only the Zip File which is being scanned, not the matching Zip entries.
- * Arguably, it should return the matching entries, however this would
- * complicate existing code which assumes that FileScanners return a
- * set of file system files that can be accessed directly.
- *
- * @author Don Ferguson <a href="mailto:don@bea.com">don@bea.com</a>
- */
-public class ZipScanner extends DirectoryScanner {
-
-    /**
-     * The zip file which should be scanned.
-     */
-    protected File srcFile;
-
-    /**
-     * Sets the srcFile for scanning. This is the jar or zip file that is scanned
-     * for matching entries.
-     *
-     * @param srcFile the (non-null) zip file name for scanning
-     */
-    public void setSrc(File srcFile) {
-        this.srcFile = srcFile;
-    }
-
-    /**
-     * Returns the zip file itself, not the matching entries within the zip file.
-     * This keeps the uptodate test in the Zip task simple; otherwise we'd need
-     * to treat zip filesets specially.
-     *
-     * @return the source file from which entries will be extracted.
-     */
-    public String[] getIncludedFiles() {
-        String[] result = new String[1];
-        result[0] = srcFile.getAbsolutePath();
-        return result;
-    }
-
-    /**
-     * Returns an empty list of directories to create.
-     */
-    public String[] getIncludedDirectories() {
-        return new String[0];
-    }
-
-    /**
-     * Initialize DirectoryScanner data structures.
-     */
-    public void init() {
-        if (includes == null) {
-            // No includes supplied, so set it to 'matches all'
-            includes = new Pattern[1];
-            includes[0] = new Pattern();
-            includes[0].setPattern("**");
-        }
-        if (excludes == null) {
-            excludes = new Pattern[0];
-        }
-    }
-
-    /**
-     * Matches a jar entry against the includes/excludes list,
-     * normalizing the path separator.
-     *
-     * @param path the (non-null) path name to test for inclusion
-     *
-     * @return <code>true</code> if the path should be included
-     *         <code>false</code> otherwise.
-     */
-    public boolean match(String path) {
-        String vpath = path.replace('/', File.separatorChar).
-            replace('\\', File.separatorChar);
-        return isIncluded(vpath) && !isExcluded(vpath);
-    }
-
-}
diff --git a/proposal/xdocs/build.xml b/proposal/xdocs/build.xml
deleted file mode 100644
index 64b6bb8..0000000
--- a/proposal/xdocs/build.xml
+++ /dev/null
@@ -1,141 +0,0 @@
-<?xml version="1.0" ?>
-<project name="XDoclet" default="main">
-
-  <!--
-    Give user a chance to override without editing this file
-    (and without typing -D each time he compiles it)
-  -->
-  <property file=".ant.properties"/>
-  <property file="${user.home}/.ant.properties"/>
-
-  <property name="log4j.jar" location="lib/log4j-core.jar"/>
-  <property name="xdoclet.jar" location="lib/xdoclet.jar"/>
-
-  <property name="src.dir"
-            location="../../src/main/org/apache/tools/ant"/>
-  <property name="src.root"
-            location="../../src/main"/>
-  <property name="docs.src"
-            location="../../xdocs"/>
-  <property name="build.dir" location="build"/>
-  <property name="gen.dir" location="${build.dir}/gen"/>
-
-  <property name="template.dir" location="templates"/>
-  <property name="task.properties.template"
-            location="${template.dir}/task_defaults_properties.template"/>
-  <property name="type.properties.template"
-            location="${template.dir}/type_defaults_properties.template"/>
-  <property name="task_xdoc.template"
-            location="${template.dir}/task_xdoc.template"/>
-  <property name="datatype_xdoc.template"
-            location="${template.dir}/datatype_xdoc.template"/>
-
-
-  <target name="init">
-    <mkdir dir="${build.dir}" />
-    <mkdir dir="${gen.dir}" />
-
-    <!-- hack, this should be outside a target but ${build.dir} gets stripped ?? -->
-    <path id="xdoclet.classpath">
-      <pathelement location="${log4j.jar}"/>
-      <pathelement location="${xdoclet.jar}"/>
-
-      <!-- javadoc is needed -->
-      <pathelement path="${java.class.path}"/>
-      <pathelement location="${build.dir}"/>
-    </path>
-
-    <taskdef name="document"
-             classname="xdoclet.doc.DocumentDocletTask"
-             classpathref="xdoclet.classpath"/>
-
-  </target>
-
-
-  <target name="clean">
-    <delete dir="${build.dir}"/>
-  </target>
-
-  <target name="compile" depends="init">
-    <javac srcdir="src" destdir="${build.dir}"
-           debug="true" classpathref="xdoclet.classpath"/>
-    <taskdef name="xdocs"
-             classname="org.apache.tools.ant.xdoclet.AntXDocletTask"
-             classpathref="xdoclet.classpath"/>
-  </target>
-
-  <target name="gen" depends="compile">
-    <xdocs sourcepath="${src.root}"
-           destdir="${gen.dir}"
-           mergedir="${basedir}/src"
-           classpathref="xdoclet.classpath">
-      <fileset dir="${src.dir}">
-        <include name="**/*.java" unless="class.name"/>
-        <include name="**/${class.name}.java" if="class.name"/>
-      </fileset>
-
-      <!-- Generate XML task descriptor files -->
-      <tasks templateFile="${task_xdoc.template}"
-             destinationfile="{0}.xml"/>
-
-      <!-- Generate XML datatype descriptor files -->
-      <datatypes templateFile="${datatype_xdoc.template}"
-                 destdir="${gen.dir}/datatypes"
-                 destinationfile="{0}.xml"/>
-
-      <!-- @todo - with some additional logic in these subtasks, they
-           could be used similar to above instead of <template> -->
-      <!-- Generate task defaults.properties -->
-      <template subTaskClassName="org.apache.tools.ant.xdoclet.TaskSubTask"
-                templateFile="${task.properties.template}"
-                destinationfile="task_defaults.properties"/>
-
-      <!-- Generate datatype defaults.properties -->
-      <template subTaskClassName="org.apache.tools.ant.xdoclet.DatatypeSubTask"
-                templateFile="${type.properties.template}"
-                destinationfile="type_defaults.properties"/>
-
-      <!-- Generate to-do list -->
-      <info destdir="${gen.dir}/todo/ant"
-            header="To-do List"
-            projectname="Ant"/>
-    </xdocs>
-
-  </target>
-
-  <target name="document" depends="init">
-    <document sourcepath="${basedir}/src"
-           destdir="${gen.dir}"
-           mergedir="${basedir}/src"
-           classpathref="xdoclet.classpath">
-      <fileset dir="${basedir}/src">
-        <include name="**/*.java" unless="class.name"/>
-        <include name="**/${class.name}.java" if="class.name"/>
-      </fileset>
-
-      <info destdir="${gen.dir}/todo/xdocs"/>
-
-      <!-- This is currently broken, checking into...
-      <documenttags/> -->
-
-    </document>
-  </target>
-
-  <target name="docs"> <!-- depends=gen -->
-    <mkdir dir="${build.dir}/docs" />
-    <!-- Copy stuff so things are in the correct relative location. -->
-    <copy todir="${build.dir}/docs">
-      <fileset dir="${basedir}/../../docs" includes="artwork/**" />
-    </copy>
-    <mkdir dir="${basedir}/xdocs" />
-    <copy todir="${basedir}/xdocs">
-      <fileset dir="${docs.src}" includes="stylesheets/project.xml" />
-    </copy>
-    <!-- Generate HTML using DVSL -->
-    <ant dir="dvsl"/>
-  </target>
-
-  <target name="main" depends="gen,document"/>
-
-</project>
-
diff --git a/proposal/xdocs/dvsl/README.txt b/proposal/xdocs/dvsl/README.txt
deleted file mode 100644
index e86af1e..0000000
--- a/proposal/xdocs/dvsl/README.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-This directory contains support for generating HTML task documentation
-from the XDoclet generated XML.  DVSL
-(http://jakarta.apache.org/velocity/dvsl/) is used for this purpose.  It has
-many of the benefits of XSLT but uses Velocity as its template language.
-
-This is in a subdirectory as it is effectively a sub-proposal demonstrating
-one way the task XML can be transformed into HTML.
-
-Directions:
-1. Generate the XML task docs by running the build.xml in the parent
-   directory.
-2. Generate the HTML docs by running the build file in this directory.
-   The output is written to ../build/docs/manual.
-
--Bill Burton <billb@progress.com>
-
diff --git a/proposal/xdocs/dvsl/build.xml b/proposal/xdocs/dvsl/build.xml
deleted file mode 100644
index 71ef4ee..0000000
--- a/proposal/xdocs/dvsl/build.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<project name="AntManual" default="taskdocs" basedir=".">
-
-  <property file="${basedir}/build.properties"/>
-
-  <property name="lib.dir" value="${basedir}/lib" />
-  <property name="build.dir" value="${basedir}/../build" />
-  <property name="docs.src" value="${basedir}/../../../xdocs" />
-  <property name="taskdocs.src" value="${build.dir}/gen" />
-
-  <!-- The docs destination directory  -->
-  <property name="docs.dest" value="${build.dir}/docs"/>
-  <property name="manual.dest" value="${docs.dest}/manual" />
-
-  <!-- Construct compile classpath -->
-  <path id="classpath">
-    <fileset dir="${lib.dir}">
-      <include name="**/*.jar"/>
-    </fileset>
-  </path>
-
-  <target name="init">
-    <taskdef name="dvsl" classname="org.apache.tools.dvsl.DVSLTask">
-      <classpath>
-        <path refid="classpath"/>
-      </classpath>
-    </taskdef>
-    <!-- Make stuff available relative to current location -->
-    <mkdir dir="${basedir}/xdocs" />
-    <copy todir="${basedir}/xdocs">
-      <fileset dir="${docs.src}" includes="stylesheets/project.xml" />
-    </copy>
-  </target>
-
-  <target name="taskdocs" depends="init"
-          description="Generate Task Documentation">
-    <dvsl basedir="${taskdocs.src}" destdir="${manual.dest}"
-          style="task.dvsl" extension=".html"
-          includes="**/*.xml">
-      <velconfig name="velocimacro.library" value="" />
-    </dvsl>
-  </target>
-
-</project>
diff --git a/proposal/xdocs/dvsl/lib/dom4j-1.2-jp.jar b/proposal/xdocs/dvsl/lib/dom4j-1.2-jp.jar
deleted file mode 100644
index cbd4a12..0000000
--- a/proposal/xdocs/dvsl/lib/dom4j-1.2-jp.jar
+++ /dev/null
Binary files differ
diff --git a/proposal/xdocs/dvsl/lib/dom4j-README.txt b/proposal/xdocs/dvsl/lib/dom4j-README.txt
deleted file mode 100644
index 07c61ae..0000000
--- a/proposal/xdocs/dvsl/lib/dom4j-README.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-This is the standard dom4j 1.2 release with a patch applied to jaxen.  The
-patch fixes a problem where DocumentHelper.createPattern("aaa | bbb") would
-fail never matching the element <bbb> because the pattern for "bbb" had been
-overwritten by the pattern for "aaa".
-
---- org/jaxen/pattern/UnionPattern.java.orig    Wed Aug  8 17:29:49 2001
-+++ org/jaxen/pattern/UnionPattern.java Wed Mar  6 01:39:51 2002
-@@ -91,7 +91,7 @@
-     public Pattern simplify()
-     {
-         this.lhs = lhs.simplify();
--        this.rhs = lhs.simplify();
-+        this.rhs = rhs.simplify();
-         init();
-         return this;
-     }
-
-
-
diff --git a/proposal/xdocs/dvsl/lib/velocity-dep-1.3-dev.jar b/proposal/xdocs/dvsl/lib/velocity-dep-1.3-dev.jar
deleted file mode 100644
index 2594020..0000000
--- a/proposal/xdocs/dvsl/lib/velocity-dep-1.3-dev.jar
+++ /dev/null
Binary files differ
diff --git a/proposal/xdocs/dvsl/lib/velocity-dvsl-0.42.jar b/proposal/xdocs/dvsl/lib/velocity-dvsl-0.42.jar
deleted file mode 100644
index 2fcc8af..0000000
--- a/proposal/xdocs/dvsl/lib/velocity-dvsl-0.42.jar
+++ /dev/null
Binary files differ
diff --git a/proposal/xdocs/dvsl/task.dvsl b/proposal/xdocs/dvsl/task.dvsl
deleted file mode 100644
index d97472b..0000000
--- a/proposal/xdocs/dvsl/task.dvsl
+++ /dev/null
@@ -1,466 +0,0 @@
-#*
- *  DVSL Stylesheet to format the Ant Task documentation.
- *#
-
-#set( $relative-path = "../../" )
-#if (false)
-#set( $body-bg = '#ffffff' )
-#set( $body-fg = '#000000' )
-#set( $body-link = '#525D76' )
-##set( $banner-bg = '#EEEEEE')
-#set( $banner-fg = '#000000')
-#set( $sub-banner-bg = '#828DA6')
-#set( $sub-banner-fg = '#ffffff')
-##set( $table-th-bg = '#FFEEEE')
-##set( $table-td-bg = '#FFEEEE')
-##set( $source-color = '#CCFFFF')
-
-#set( $table-th-bg = '#EEEEEE')
-#set( $table-td-bg = '#EEEEEE')
-#set( $banner-bg = '#a0ddf0')
-##set( $banner-bg = '#525D76')
-##set( $table-th-bg = '#039acc')
-##set( $table-td-bg = '#a0ddf0')
-#set( $source-color = '#023264')
-#end
-
-#set( $body-bg = '#ffffff' )
-#set( $body-fg = '#000000' )
-#set( $body-link = '#525D76' )
-#set( $banner-bg = '#525D76')
-#set( $banner-fg = '#ffffff')
-#set( $sub-banner-bg = '#828DA6')
-#set( $sub-banner-fg = '#ffffff')
-#set( $table-th-bg = '#cccccc')
-#set( $table-td-bg = '#eeeeee')
-#set( $source-color = '#023264')
-#set( $source-font-size = '+0')
-
-## Double quote for convenience
-#set ($qq = '"')
-
-## Macro to output argument if test evaluates to true
-#macro(ifset $test $output)
-#if ( $test )$output#end
-#end
-
-## Macro to capitalize a word making the first letter upper case
-#macro(capitalize $word)
-$word.substring(0,1).toUpperCase()$word.substring(1)
-#end
-
-
-#match( "task" )
-  #set( $project = $node.selectSingleNode("document('xdocs/stylesheets/project.xml')/project" ) )
-  #if ($node.name().equals("task"))
-    #set( $title = "#capitalize($attrib.name) Task" )
-    #set( $summary = $node.short-description )
-  #end
-
-<html>
-<head>
-  <meta http-equiv="Content-Language" content="en-us">
-  <title>$title</title>
-</head>
-
-<body bgcolor="$body-bg" text="$body-fg" link="$body-link"
-      alink="$body-link" vlink="$body-link">
-
-<table border="0" width="100%" cellspacing="4">
-
-  <!-- PAGE HEADER -->
-  <tr>
-    <td>
-      <table border="0" width="100%"><tr>
-          <td valign="bottom">
-            <font size="+3" face="arial,helvetica,sanserif"><strong>$title</strong></font>
-#*          *##if( $summary )
-            <br><font face="arial,helvetica,sanserif">$summary</font>
-#*          *##end
-          </td>
-          <td>
-#*        *##if( $project.logo )
-            #set( $alt = $project.logo )
-            #set( $home = $project.attribute("href") )
-            #set( $src = $project.logo.attribute( "href" ) )
-            <!-- PROJECT LOGO -->
-            <a href="$home">
-              <img src="${relative-path}$src" align="right" alt="$alt" border="0"/>
-            </a>
-#*        *##end
-          </td>
-      </tr></table>
-    </td>
-  </tr>
-
-  <!-- START RIGHT SIDE MAIN BODY -->
-  <tr>
-    <td  valign="top" align="left">
-#*    *##if ($node.name().equals("task"))
-#*      Use description from merged XML if available, else javadoc comment *#
-#*      *##if ($node.external.description)
-          <!-- Applying task/description -->
-#*        *#$context.applyTemplates("external/description")
-#*      *##else
-          <!-- Applying task/long-description -->
-#*        *#$context.applyTemplates("long-description")
-#*      *##end
-#*     *#$context.applyTemplates("structure/attributes")
-#*     *#$context.applyTemplates("structure/elements")
-#*     *#$context.applyTemplates("external/section")
-#*    *##end
-    </td>
-  </tr>
-  <!-- END RIGHT SIDE MAIN BODY -->
-
-  <!-- FOOTER SEPARATOR -->
-  <tr>
-    <td>
-      <hr noshade="" size="1"/>
-    </td>
-  </tr>
-
-  <!-- PAGE FOOTER -->
-  <tr>
-    <td>
-      <div align="center"><font color="$body-link" size="-1"><em>
-        Copyright &#169; 2000-2002, Apache Software Foundation
-      </em></font></div>
-    </td>
-  </tr>
-
-</table>
-
-</body>
-</html>
-#end
-
-#*
-    Macro to format a table heading cell
-*#
-#macro( th $text )
-        <td bgcolor="$table-th-bg" valign="top" align="left">
-          <font color="#000000" size="-1" face="arial,helvetica,sanserif"><b>$text</b></font>
-        </td>
-#end
-
-#*
-    Macro to format a table body cell
-*#
-#macro( td $text )
-        <td bgcolor="$table-td-bg" valign="top" align="left">
-          <font color="#000000" size="-1" face="arial,helvetica,sanserif">$text</font>
-        </td>
-#end
-
-#*
-    Macro to format a section banner
-*#
-#macro( section $anchor $name )
-      <tr><td bgcolor="$banner-bg">
-        <font color="$banner-fg" face="arial,helvetica.sanserif">
-          <a name="$anchor">
-          <strong>$name</strong></a></font>
-      </td></tr>
-#end
-
-#*
-    Macro to format a subsection banner
-*#
-#macro( subsection $anchor $name )
-      <tr><td bgcolor="$sub-banner-bg">
-        <font color="$sub-banner-fg" face="arial,helvetica.sanserif">
-          <a name="$anchor">
-          <strong>$name</strong></a></font>
-      </td></tr>
-#end
-
-
-#*
-    Process javadoc long description section
-*#
-#match( "long-description" )
-    <!-- Start Description -->
-    <table border="0" cellspacing="0" cellpadding="2" width="100%">
-      <tr><td>&nbsp;</td></tr>
-
-#*      *##section("description" "Description")
-
-      <tr><td><blockquote>
-        $node.value().trim()
-      </blockquote></td></tr>
-
-    </table>
-    <!-- End Description -->
-#end
-
-#*
-    Process external desciption
-*#
-#match( "external/description" )
-    <!-- Start Description -->
-    <table border="0" cellspacing="0" cellpadding="2" width="100%">
-      <tr><td>&nbsp;</td></tr>
-
-#*      *##section("description" "Description")
-
-      <tr><td><blockquote>
-#*      *#$context.applyTemplates("*")
-      </blockquote></td></tr>
-
-    </table>
-    <!-- End Description -->
-#end
-
-#*
-    Process top level attributes
-*#
-#match( "structure/attributes" )
-    <!-- Start Attributes -->
-    <table border="0" cellspacing="0" cellpadding="2" width="100%">
-      <tr><td>&nbsp;</td></tr>
-
-#*      *##section("attributes" "Parameters")
-
-      <tr><td><blockquote>
-        <table>
-          <tr>
-#*          *##th("Attribute")
-#*          *##th("Description")
-#*          *##th("Type")
-          </tr>
-#*        *#$context.applyTemplates("*")
-        </table>
-      </blockquote></td></tr>
-
-    </table>
-    <!-- End Attributes -->
-#end
-
-#*
-    Process a single attribute
-*#
-#match( "attribute" )
-    <!-- Attribute -->
-    <tr>
-#*    *##td($attrib.name)
-#*    *##td($node.description)
-#*    *##td($attrib.type)
-    </tr>
-#end
-
-#*
-    Process all elements
-*#
-#match( "elements" )
-    <!-- Start Elements -->
-    <table border="0" cellspacing="0" cellpadding="2" width="100%">
-      <tr><td>&nbsp;</td></tr>
-
-#*      *##section("elements" "Parameters as nested elements")
-
-      <tr><td><blockquote>
-#*      *#$context.applyTemplates("*")
-      </blockquote></td></tr>
-
-    </table>
-    <!-- End Elements -->
-#end
-
-#*
-    Process a single element
-*#
-#match( "element" )
-    <!-- Start Element -->
-    <table border="0" cellspacing="0" cellpadding="2" width="100%">
-      <tr><td>&nbsp;</td></tr>
-      <tr><td bgcolor="$sub-banner-bg">
-        <font color="$sub-banner-fg" face="arial,helvetica.sanserif" size="-1">
-          <strong>$attrib.name</strong> ($attrib.type)</font>
-      </td></tr>
-      <tr><td><blockquote>
-        $node.description.toString().trim()
-#*      *#$context.applyTemplates("*")
-      </blockquote></td></tr>
-    </table>
-    <!-- End Element -->
-#end
-
-#*
-    Process attributes within elements
-*#
-#match( "element/attributes" )
-    <!-- Start Attributes -->
-    <table border="0" cellspacing="0" cellpadding="2" width="100%">
-      <tr><td>&nbsp;</td></tr>
-
-      <tr><td>
-        <table>
-          <tr>
-#*          *##th("Attribute")
-#*          *##th("Description")
-#*          *##th("Type")
-          </tr>
-#*        *#$context.applyTemplates("*")
-        </table>
-      </td></tr>
-
-    </table>
-    <!-- End Attributes -->
-#end
-
-
-#*
- *   Process a menu for the navigation bar
- *#
-#match( "menu" )
-    <tr><td>
-    <p>
-      <strong>$attrib.name</strong>
-    </p>
-    </td><td>
-    <ul>
-        $context.applyTemplates("item")
-    </ul></td></tr>
-#end
-
-
-#*
- *   Process a menu item for the navigation bar
- *#
-#match( "item" )
-#if( $attrib.href.endsWith("$outputfilename") && !$attrib.href.startsWith("http"))
-	<strong>$attrib.name</strong>
-#else
-#if( $attrib.href.startsWith("http") )
-        <a href="$attrib.href">$attrib.name</a>
-    #else
-        <a href="${relative-path}$attrib.href">$attrib.name</a>
-    #end
-#end
-#end
-
-#*
- *  process a documentation section
- *#
-#match( "section" )
-    <table border="0" cellspacing="0" cellpadding="2" width="100%">
-      <tr><td>&nbsp;</td></tr>
-
-      <tr><td bgcolor="$banner-bg">
-          <font color="$banner-fg" face="arial,helvetica.sanserif">
-          #if ( $attrib.anchor )
-              #set( $anchor = $attrib.anchor )
-          #else
-              #set( $anchor = $attrib.name )
-          #end
-          <a name="$anchor">
-          <strong>$attrib.name</strong></a></font>
-      </td></tr>
-
-      <tr><td><blockquote>
-        $context.applyTemplates("*")
-      </blockquote></td></tr>
-
-    </table>
-#end
-
-#match( "subsection" )
-    <table border="0" cellspacing="0" cellpadding="2" width="100%">
-      <!-- Subsection heading -->
-      <tr><td bgcolor="$sub-banner-bg">
-          <font color="$sub-banner-fg" face="arial,helvetica.sanserif">
-          #if ( $attrib.anchor )
-              #set( $anchor = $attrib.anchor )
-          #else
-              #set( $anchor = $attrib.name )
-          #end
-          <a name="$anchor">
-          <strong>$attrib.name</strong></a></font>
-      </td></tr>
-      <!-- Subsection body -->
-      <tr><td>
-        $context.applyTemplates("*")
-      </td></tr>
-    </table>
-#end
-
-#match( "source" )
-    <div align="left">
-      <table cellspacing="4" cellpadding="0" border="0">
-        <tr>
-          <td bgcolor="$source-color" width="1" height="1">
-            <img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/>
-          </td>
-          <td bgcolor="$source-color" height="1">
-            <img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/>
-          </td>
-          <td bgcolor="$source-color" width="1" height="1">
-            <img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/>
-          </td>
-        </tr>
-        <tr>
-          <td bgcolor="$source-color" width="1">
-            <img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/>
-          </td>
-          <td bgcolor="#ffffff" height="1">
-          <font size="$source-font-size"><pre>$toolbox.htmlescape.getText( $node.value() )</pre></font>
-          </td>
-          <td bgcolor="$source-color" width="1">
-            <img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/>
-          </td>
-        </tr>
-        <tr>
-          <td bgcolor="$source-color" width="1" height="1">
-            <img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/>
-          </td>
-          <td bgcolor="$source-color" height="1">
-            <img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/>
-          </td>
-          <td bgcolor="$source-color" width="1" height="1">
-            <img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/>
-          </td>
-        </tr>
-      </table>
-    </div>
-#end
-
-
-#match("table")
-<table>
-$context.applyTemplates("*")
-</table>
-#end
-
-#match("tr")
-<tr>
-$context.applyTemplates("*")
-</tr>
-#end
-
-#match( "td" )
-<td bgcolor="$table-td-bg" #*
-    *##ifset($attrib.colspan "colspan=$qq$attrib.colspan$qq ")#*
-    *##ifset($attrib.rowspan "rowspan=$qq$attrib.rowspan$qq ")#*
-    *#valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-       $node.copy( $node.children() )
-    </font>
-</td>
-#end
-
-#match( "th" )
-<td bgcolor="$table-th-bg" #*
-    *##ifset($attrib.colspan "colspan=$qq$attrib.colspan$qq ")#*
-    *##ifset($attrib.rowspan "rowspan=$qq$attrib.rowspan$qq ")#*
-    *#valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-       <b>$node.copy( $node.children())</b>
-    </font>
-</td>
-#end
-
-#match("*")
-$node.copy()
-#end
-
diff --git a/proposal/xdocs/lib/LICENSE.xdoclet.txt b/proposal/xdocs/lib/LICENSE.xdoclet.txt
deleted file mode 100644
index da1589e..0000000
--- a/proposal/xdocs/lib/LICENSE.xdoclet.txt
+++ /dev/null
@@ -1,26 +0,0 @@
- Copyright (c) 2000-2002, XDoclet team
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without modification, 
- are permitted provided that the following conditions are met:
-
- Redistributions of source code must retain the above copyright notice, this list 
- of conditions and the following disclaimer.
-
- Redistributions in binary form must reproduce the above copyright notice, this list 
- of conditions and the following disclaimer in the documentation and/or other materials
- provided with the distribution.
-
- Neither the name of the XDoclet team nor the names of its contributors may be used 
- to endorse or promote products derived from this software without specific prior
- written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY 
- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 
- OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT 
- SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 
- EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
- TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 
- EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
\ No newline at end of file
diff --git a/proposal/xdocs/lib/log4j-core.jar b/proposal/xdocs/lib/log4j-core.jar
deleted file mode 100644
index da6d8c2..0000000
--- a/proposal/xdocs/lib/log4j-core.jar
+++ /dev/null
Binary files differ
diff --git a/proposal/xdocs/lib/xdoclet.jar b/proposal/xdocs/lib/xdoclet.jar
deleted file mode 100644
index 7f4df3d..0000000
--- a/proposal/xdocs/lib/xdoclet.jar
+++ /dev/null
Binary files differ
diff --git a/proposal/xdocs/log4j.properties b/proposal/xdocs/log4j.properties
deleted file mode 100644
index d93e13f..0000000
--- a/proposal/xdocs/log4j.properties
+++ /dev/null
@@ -1,23 +0,0 @@
-log4j.rootCategory=INFO, Console
-log4j.appender.Console=org.apache.log4j.ConsoleAppender
-log4j.appender.Console.layout=org.apache.log4j.PatternLayout
-log4j.appender.Console.layout.ConversionPattern=(%-35c{2} %-4L) %m%n
-
-# Uncomment to debug all
-#log4j.category.xdoclet=DEBUG
-
-# Example: Uncomment to debug all EJB Tasks only
-#log4j.category.xdoclet.ejb=DEBUG
-
-# Example: Uncomment to debug the class SubTask only
-#log4j.category.xdoclet.SubTask=DEBUG
-#log4j.category.xdoclet.ejb.tags.RelationTagsHandler=DEBUG
-#log4j.category.xdoclet.ejb.tags.MethodTagsHandler=DEBUG
-
-# Example: Uncomment to debug the tokenizeValue() method of SubTask only
-#log4j.category.xdoclet.SubTask.tokenizeValue=DEBUG
-
-# Uncomment this line if you want to see stack traces
-# Please always do so when you want to report a bug
-#log4j.category.xdoclet.DocletTask=DEBUG
-#log4j.category.xdoclet.DocletTask$DocletMain=DEBUG
diff --git a/proposal/xdocs/src/org/apache/tools/ant/taskdefs/Test.java b/proposal/xdocs/src/org/apache/tools/ant/taskdefs/Test.java
deleted file mode 100644
index 2430a80..0000000
--- a/proposal/xdocs/src/org/apache/tools/ant/taskdefs/Test.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.Task;
-
-/**
- * @ant:task name="test"
- */
-public class Test {
-    private String value;
-    
-    public void setValue (String value) {
-        this.value = value;
-    }
-}
diff --git a/proposal/xdocs/src/org/apache/tools/ant/taskdefs/condition.xml b/proposal/xdocs/src/org/apache/tools/ant/taskdefs/condition.xml
deleted file mode 100644
index 60b112b..0000000
--- a/proposal/xdocs/src/org/apache/tools/ant/taskdefs/condition.xml
+++ /dev/null
@@ -1,54 +0,0 @@
-<!-- Condition task -->
-<external>
-<description>
-
-<p>Sets a property if a certain condition holds true - this is a
-generalization of <a href="available.html">Available</a> and <a
-href="uptodate.html">Uptodate</a>.</p>
-<p>If the condition holds true, the property value is set to true by
-default; otherwise, the property is not set. You can set the value to
-something other than the default by specifying the <code>value</code>
-attribute.</p>
-<p>Conditions are specified as <a href="#nested">nested elements</a>,
-you must specify exactly one condition.</p>
-
-</description>
-
-<section anchor="examples" name="Examples">
-
-<pre>
-  &lt;condition property=&quot;javamail.complete&quot;&gt;
-    &lt;and&gt;
-      &lt;available classname=&quot;javax.activation.DataHandler&quot; /&gt;
-      &lt;available classname=&quot;javax.mail.Transport&quot; /&gt;
-    &lt;/and&gt;
-  &lt;/condition&gt;
-</pre>
-<p>sets the property <code>javamail.complete</code> if both the
-JavaBeans Activation Framework and JavaMail are available in the
-classpath.</p>
-
-<pre>
-  &lt;condition property=&quot;isMacOsButNotMacOsX&quot;&gt;
-    &lt;and&gt;
-      &lt;os family=&quot;mac&quot; />
-      &lt;not&gt;
-        &lt;os family=&quot;unix&quot; />
-      &lt;/not&gt;
-    &lt;/and&gt;
-  &lt;/condition&gt;
-</pre>
-<p>sets the property <code>isMacOsButNotMacOsX</code> if the current
-operating system is MacOS, but not MacOS X - which Ant considers to be
-in the Unix family as well.</p>
-
-<pre>
-  &lt;condition property=&quot;isSunOSonSparc&quot;&gt;
-    &lt;os name=&quot;SunOS&quot; arch=&quot;sparc&quot; />
-  &lt;/condition&gt;
-</pre>
-<p>sets the property <code>isSunOSonSparc</code> if the current
-operating system is SunOS and if it is running on a sparc architecture.</p>
-
-</section>
-</external>
diff --git a/proposal/xdocs/src/org/apache/tools/ant/taskdefs/javac.xml b/proposal/xdocs/src/org/apache/tools/ant/taskdefs/javac.xml
deleted file mode 100644
index c2b314e..0000000
--- a/proposal/xdocs/src/org/apache/tools/ant/taskdefs/javac.xml
+++ /dev/null
@@ -1,195 +0,0 @@
-<!-- javac task -->
-<external>
-<description>
-
-<p>Compiles a Java source tree.</p>
-
-<p>The source and destination directory will be recursively scanned for Java
-source files to compile. Only Java files that have no corresponding class file
-or where the class file is older than the java file will be compiled.</p>
-
-<p>Note: Ant uses only the names of the source and class files to find
-the classes that need a rebuild. It will not scan the source and therefor
-will have no knowledge about nested classes, classes that are named different
-from the source file and so on.</p>
-
-<p>The directory structure of the source tree should follow the package
-hierarchy.</p>
-
-<p>It is possible to refine the set of files that are being compiled/copied.
-This can be done with the <i>includes</i>, <i>includesfile</i>, <i>excludes</i>, <i>excludesfile</i> and <i>defaultexcludes</i>
-attributes. With the <i>includes</i> or <i>includesfile</i> attribute you specify the files you want to
-have included by using patterns. The <i>exclude</i> or <i>excludesfile</i> attribute is used to specify
-the files you want to have excluded. This is also done with patterns. And
-finally with the <i>defaultexcludes</i> attribute, you can specify whether you
-want to use default exclusions or not. See the section on <a
-href="../dirtasks.html#directorybasedtasks">directory based tasks</a>, on how the
-inclusion/exclusion of files works, and how to write patterns.</p>
-
-<p>It is possible to use different compilers. This can be selected with the
-&quot;build.compiler&quot; property or the compiler attribute. Here are the choices:-</p>
-<ul>
-  <li>classic (the standard compiler of JDK 1.1/1.2) - javac1.1 and
-     javac1.2 can be used as aliases</li>
-  <li>modern (the standard compiler of JDK 1.3/1.4) - javac1.3 and
-     javac1.4 can be used as aliases</li>
-  <li>jikes (the <a
-    href="http://oss.software.ibm.com/developerworks/opensource/jikes/project" target="_top">Jikes</a>
-    compiler)</li>
-  <li>jvc (the Command-Line Compiler from Microsoft's SDK for Java /
-    Visual J++) - microsoft can be used as an alias</li>
-  <li>kjc (the <a href="http://www.dms.at/kopi/" target="_top">kopi</a>
-    compiler)</li>
-  <li>gcj (the gcj compiler from gcc)</li>
-  <li>sj (Symantec java compiler) - symantec can be used as an alias</li>
-  <li>extJavac (run either modern or classic in a JVM of its own)</li>
-</ul>
-<p>For JDK 1.1/1.2, classic is the default. For JDK 1.3/1.4, modern is the default.
-If you wish to use a different compiler interface than those
-supplied, write a class that implements the CompilerAdapter interface
-(package org.apache.tools.ant.taskdefs.compilers). Supply the full
-classname in the &quot;build.compiler&quot; property.</p>
-
-<p>The fork attribute overrides the build.compiler setting and expects
-a JDK1.1 or higher to be set in java.home.</p>
-
-<p>This task will drop all entries that point to non-existent
-files/directories from the CLASSPATH it passes to the compiler.</p>
-
-<p><strong>Windows Note:</strong>When the modern compiler is used
-in unforked mode on Windows, it locks up the files present in the
-classpath of the &lt;javac&gt; task, and does not release them.  The side
-effect of this is that you will not be able to delete or move
-those files later on in the build.  The workaround is to fork when
-invoking the compiler.</p>
-
-</description>
-
-<section anchor="examples" name="Examples">
-<pre>  &lt;javac srcdir=&quot;${src}&quot;
-         destdir=&quot;${build}&quot;
-         classpath=&quot;xyz.jar&quot;
-         debug=&quot;on&quot;
-  /&gt;</pre>
-<p>compiles all <code>.java</code> files under the <code>${src}</code>
-directory, and stores
-the <code>.class</code> files in the <code>${build}</code> directory.
-The classpath used contains <code>xyz.jar</code>, and debug information is on.</p>
-
-<pre>  &lt;javac srcdir=&quot;${src}&quot;
-         destdir=&quot;${build}&quot;
-         fork=&quot;true&quot;
-  /&gt;</pre>
-<p>compiles all <code>.java</code> files under the <code>${src}</code>
-directory, and stores the <code>.class</code> files in the
-<code>${build}</code> directory.  This will fork off the javac
-compiler using the default javac executable.</p>
-
-<pre>  &lt;javac srcdir=&quot;${src}&quot;
-         destdir=&quot;${build}&quot;
-         fork=&quot;java$$javac.exe&quot;
-  /&gt;</pre>
-<p>compiles all <code>.java</code> files under the <code>${src}</code>
-directory, and stores the <code>.class</code> files in the
-<code>${build}</code> directory.  This will fork off the javac
-compiler using the executable named <code>java$javac.exe</code>.  Note
-that the <code>$</code> sign needs to be escaped by a second one.</p>
-
-<pre>  &lt;javac srcdir=&quot;${src}&quot;
-         destdir=&quot;${build}&quot;
-         includes=&quot;mypackage/p1/**,mypackage/p2/**&quot;
-         excludes=&quot;mypackage/p1/testpackage/**&quot;
-         classpath=&quot;xyz.jar&quot;
-         debug=&quot;on&quot;
-  /&gt;</pre>
-<p>compiles <code>.java</code> files under the <code>${src}</code>
-directory, and stores the
-<code>.class</code> files in the <code>${build}</code> directory.
-The classpath used contains <code>xyz.jar</code>, and debug information is on.
-Only files under <code>mypackage/p1</code> and <code>mypackage/p2</code> are
-used. Files in the <code>mypackage/p1/testpackage</code> directory are excluded
-from compilation.</p>
-
-<pre>  &lt;javac srcdir=&quot;${src}:${src2}&quot;
-         destdir=&quot;${build}&quot;
-         includes=&quot;mypackage/p1/**,mypackage/p2/**&quot;
-         excludes=&quot;mypackage/p1/testpackage/**&quot;
-         classpath=&quot;xyz.jar&quot;
-         debug=&quot;on&quot;
-  /&gt;</pre>
-
-<p>is the same as the previous example, with the addition of a second
-source path, defined by
-the property <code>src2</code>. This can also be represented using nested
-<code>&lt;src&gt;</code> elements as follows:</p>
-
-<pre>  &lt;javac destdir=&quot;${build}&quot;
-         classpath=&quot;xyz.jar&quot;
-         debug=&quot;on&quot;&gt;
-    &lt;src path=&quot;${src}&quot;/&gt;
-    &lt;src path=&quot;${src2}&quot;/&gt;
-    &lt;include name=&quot;mypackage/p1/**&quot;/&gt;
-    &lt;include name=&quot;mypackage/p2/**&quot;/&gt;
-    &lt;exclude name=&quot;mypackage/p1/testpackage/**&quot;/&gt;
-  &lt;/javac&gt;</pre>
-
-<p><b>Note:</b> If you are using Ant on Windows and a new DOS window pops up
-for every use of an external compiler, this may be a problem of the JDK you are using.
-This problem may occur with all JDKs &lt; 1.2.</p>
-
-<p><b>Note:</b> If you wish to compile only source-files located in some packages below a
-common root you should not include these packages in the srcdir-attribute. Use include/exclude-attributes
-or elements to filter for these packages. If you include part of your package-structure inside the srcdir-attribute
-(or nested src-elements) Ant will start to recompile your sources every time you call it.</p>
-
-</section>
-
-<section anchor="jikes" name="Jikes Notes">
-
-<p>Jikes supports some extra options, which can be set be defining
-properties prior to invoking the task. The ant developers are aware that
-this is ugly and inflexible -expect a better solution in the future. All
-the options are boolean, and must be set to &quot;true&quot; or &quot;yes&quot; to be
-interpreted as anything other than false; by default
-build.compiler.warnings is &quot;true&quot; while all others are &quot;false&quot;</p>
-
-<table border="1" cellpadding="2" cellspacing="0">
-  <tr>
-    <td valign="top">
-	build.compiler.emacs
-	</td>
-	<td valign="top">
-	Enable emacs compatible error messages
-    </td>
-  </tr>
-  <tr>
-    <td valign="top">
-	build.compiler.warnings<br />
-        <b>This property has been deprecated, use the nowarn attribute
-          instead</b>
-	</td>
-	<td valign="top">
-	don't disable warning messages
-    </td>
-  </tr>
-  <tr>
-    <td valign="top">
-	build.compiler.pedantic
-	</td>
-	<td valign="top">
-	enable pedantic warnings
-    </td>
-  </tr>
-  <tr>
-    <td valign="top">
-	build.compiler.fulldepend
-	</td>
-	<td valign="top">
-	enable full dependency checking,<br />
-	&quot;+F&quot; in the jikes manual.
-    </td>
-  </tr>
-</table>
-
-</section>
-</external>
diff --git a/proposal/xdocs/src/org/apache/tools/ant/taskdefs/javadoc.xml b/proposal/xdocs/src/org/apache/tools/ant/taskdefs/javadoc.xml
deleted file mode 100644
index 509ec7f..0000000
--- a/proposal/xdocs/src/org/apache/tools/ant/taskdefs/javadoc.xml
+++ /dev/null
@@ -1,59 +0,0 @@
-<!-- javadoc task -->
-<external>
-<description>
-
-<p>Generates code documentation using the javadoc tool.</p>
-
-<p>The source directory will be recursively scanned for Java source files to process
-but only those matching the inclusion rules, and not matching the exclusions rules
-will be passed to the javadoc tool. This
-allows wildcards to be used to choose between package names, reducing verbosity
-and management costs over time. This task, however, has no notion of
-&quot;changed&quot; files, unlike the <a href="javac.html">javac</a> task. This means
-all packages will be processed each time this task is run. In general, however,
-this task is used much less frequently.</p>
-
-<p>This task works seamlessly between different javadoc versions (1.1 and 1.2),
-with the obvious restriction that the 1.2 attributes will be ignored if run in a
-1.1 VM.</p>
-
-<p>NOTE: since javadoc calls System.exit(), javadoc cannot be run inside the
-same VM as ant without breaking functionality. For this reason, this task
-always forks the VM. This overhead is not significant since javadoc is normally a heavy
-application and will be called infrequently.</p>
-
-<p>NOTE: the packagelist attribute allows you to specify the list of packages to
-document outside of the Ant file. It's a much better practice to include everything
-inside the build.xml file. This option was added in order to make it easier to
-migrate from regular makefiles, where you would use this option of javadoc.
-The packages listed in packagelist are not checked, so the task performs even
-if some packages are missing or broken. Use this option if you wish to convert from
-an existing makefile. Once things are running you should then switch to the regular
-notation. </p>
-
-<p><i><b>DEPRECATION:</b> the javadoc2 task simply points to the javadoc task and it's
-there for back compatibility reasons. Since this task will be removed in future
-versions, you are strongly encouraged to use <a href="javadoc.html">javadoc</a>
-instead.</i></p>
-</description>
-
-<section anchor="examples" name="Example">
-<pre>  &lt;javadoc packagenames=&quot;com.dummy.test.*&quot;
-           sourcepath=&quot;src&quot;
-           excludepackagenames=&quot;com.dummy.test.doc-files.*&quot;
-           defaultexcludes=&quot;yes&quot;
-           destdir=&quot;docs/api&quot;
-           author=&quot;true&quot;
-           version=&quot;true&quot;
-           use=&quot;true&quot;
-           windowtitle=&quot;Test API&quot;&gt;
-    &lt;doctitle&gt;&lt;![CDATA[&lt;h1&gt;Test&lt;/h1&gt;]]&gt;&lt;/doctitle&gt;
-    &lt;bottom&gt;&lt;![CDATA[&lt;i&gt;Copyright &amp;#169; 2000 Dummy Corp. All Rights Reserved.&lt;/i&gt;]]&gt;&lt;/bottom&gt;
-    &lt;tag name=&quot;todo&quot; scope=&quot;all&quot; description=&quot;To do:&quot; /&gt;
-    &lt;group title=&quot;Group 1 Packages&quot; packages=&quot;com.dummy.test.a*&quot;/&gt;
-    &lt;group title=&quot;Group 2 Packages&quot; packages=&quot;com.dummy.test.b*:com.dummy.test.c*&quot;/&gt;
-    &lt;link offline=&quot;true&quot; href=&quot;http://java.sun.com/products/jdk/1.2/docs/api/&quot; packagelistLoc=&quot;C:\tmp&quot;/&gt;
-    &lt;link href=&quot;http://developer.java.sun.com/developer/products/xml/docs/api/&quot;/&gt;
-  &lt;/javadoc&gt;</pre>
-</section>
-</external>
diff --git a/proposal/xdocs/src/org/apache/tools/ant/taskdefs/tar.xml b/proposal/xdocs/src/org/apache/tools/ant/taskdefs/tar.xml
deleted file mode 100644
index 856537a..0000000
--- a/proposal/xdocs/src/org/apache/tools/ant/taskdefs/tar.xml
+++ /dev/null
@@ -1,111 +0,0 @@
-<!-- tar task -->
-<external>
-<description>
-<p>Creates a tar archive.</p>
-
-<p>The <i>basedir</i> attribute is the reference directory from where to tar.</p>
-
-<p>This task is a <a href="../dirtasks.html#directorybasedtasks">directory based task</a>
-and, as such, forms an implicit <a href="../CoreTypes/fileset.html">Fileset</a>. This
-defines which files, relative to the <i>basedir</i>, will be included in the
-archive. The tar task supports all the attributes of Fileset to refine the
-set of files to be included in the implicit fileset.</p>
-
-<p>In addition to the implicit fileset, the tar task supports nested filesets. These
-filesets are extended to allow control over the access mode, username and groupname
-to be applied to the tar entries. This is useful, for example, when preparing archives for
-Unix systems where some files need to have execute permission.</p>
-
-<p>Early versions of tar did not support path lengths greater than 100
-characters. Modern versions of tar do so, but in incompatible ways.
-The behaviour of the tar task when it encounters such paths is
-controlled by the <i>longfile</i> attribute.
-If the longfile attribute is set to <code>fail</code>, any long paths will
-cause the tar task to fail.  If the longfile attribute is set to
-<code>truncate</code>, any long paths will be truncated to the 100 character
-maximum length prior to adding to the archive. If the value of the longfile
-attribute is set to <code>omit</code> then files containing long paths will be
-omitted from the archive.  Either option ensures that the archive can be
-untarred by any compliant version of tar. If the loss of path or file
-information is not acceptable, and it rarely is, longfile may be set to the
-value <code>gnu</code>. The tar task will then produce a GNU tar file which
-can have arbitrary length paths. Note however, that the resulting archive will
-only be able to be untarred with GNU tar.  The default for the longfile
-attribute is <code>warn</code> which behaves just like the gnu option except
-that it produces a warning for each file path encountered that does not match
-the limit.</p>
-
-<p>Note that this task does not perform compression. You might want to use the
-<a href="gzip.html">GZip</a> task to prepare a .tar.gz package.</p>
-</description>
-
-<section anchor="examples" name="Examples">
-<pre>  &lt;tar tarfile=&quot;${dist}/manual.tar&quot; basedir=&quot;htdocs/manual&quot;/&gt;
-  &lt;gzip zipfile=&quot;${dist}/manual.tar.gz&quot; src=&quot;${dist}/manual.tar&quot;/&gt;</pre>
-<p>tars all files in the <code>htdocs/manual</code> directory into a file called <code>manual.tar</code>
-in the <code>${dist}</code>  directory, then applies the gzip task to compress
-it.</p>
-<pre>  &lt;tar destfile=&quot;${dist}/manual.tar&quot;
-       basedir=&quot;htdocs/manual&quot;
-       excludes=&quot;mydocs/**, **/todo.html&quot;
-  /&gt;</pre>
-<p>tars all files in the <code>htdocs/manual</code> directory into a file called <code>manual.tar</code>
-in the <code>${dist}</code> directory. Files in the directory <code>mydocs</code>,
-or files with the name <code>todo.html</code> are excluded.</p>
-
-<pre>
-&lt;tar destfile=&quot;${basedir}/docs.tar&quot;&gt;
-  &lt;tarfileset dir=&quot;${dir.src}/docs&quot;
-              fullpath=&quot;/usr/doc/ant/README&quot;
-              preserveLeadingSlashes=&quot;true&quot;&gt;
-    &lt;include name=&quot;readme.txt&quot;/&gt;
-  &lt;/tarfileset&gt;
-  &lt;tarfileset dir=&quot;${dir.src}/docs&quot;
-              prefix=&quot;/usr/doc/ant&quot;
-              preserveLeadingSlashes=&quot;true&quot;&gt;
-    &lt;include name=&quot;*.html&quot;/&gt;
-  &lt;/tarfileset&gt;
-&lt;/tar&gt;</pre>
-
-<p>
-  Writes the file <code>docs/readme.txt</code> as
-  <code>/usr/doc/ant/README</code> into the archive. All
-  <code>*.html</code> files in the <code>docs</code> directory are
-  prefixed by <code>/usr/doc/ant</code>, so for example
-  <code>docs/index.html</code> is written as
-  <code>/usr/doc/ant/index.html</code> to the archive.
-</p>
-
-
-<pre>&lt;tar longfile=&quot;gnu&quot;
-     destfile=&quot;${dist.base}/${dist.name}-src.tar&quot; &gt;
-  &lt;tarfileset dir=&quot;${dist.name}/..&quot; mode=&quot;755&quot; username=&quot;ant&quot; group=&quot;ant&quot;&gt;
-    &lt;include name=&quot;${dist.name}/bootstrap.sh&quot;/&gt;
-    &lt;include name=&quot;${dist.name}/build.sh&quot;/&gt;
-  &lt;/tarfileset&gt;
-  &lt;tarfileset dir=&quot;${dist.name}/..&quot; username=&quot;ant&quot; group=&quot;ant&quot;&gt;
-    &lt;include name=&quot;${dist.name}/**&quot;/&gt;
-    &lt;exclude name=&quot;${dist.name}/bootstrap.sh&quot;/&gt;
-    &lt;exclude name=&quot;${dist.name}/build.sh&quot;/&gt;
-  &lt;/tarfileset&gt;
-&lt;/tar&gt; </pre>
-
-<p>This example shows building a tar which uses the GNU extensions for long paths and
-where some files need to be marked as executable (mode 755)
-and the rest are use the default mode (read-write by owner). The first
-fileset selects just the executable files. The second fileset must exclude
-the executable files and include all others. </p>
-
-<p><strong>Note: </strong> The tar task does not ensure that a file is only selected
-by one fileset. If the same file is selected by more than one fileset, it will be included in the
-tar file twice, with the same path.</p>
-
-<p><strong>Note:</strong> The patterns in the include and exclude
-elements are considered to be relative to the corresponding dir
-attribute as with all other filesets.  In the example above,
-<code>${dist.name}</code> is not an absolute path, but a simple name
-of a directory, so <code>${dist.name}</code> is a valid path relative
-to <code>${dist.name}/..</code>.</p>
-
-</section>
-</external>
diff --git a/proposal/xdocs/src/org/apache/tools/ant/xdoclet/AntXDocletTask.java b/proposal/xdocs/src/org/apache/tools/ant/xdoclet/AntXDocletTask.java
deleted file mode 100644
index 0186f88..0000000
--- a/proposal/xdocs/src/org/apache/tools/ant/xdoclet/AntXDocletTask.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.xdoclet;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.types.FileSet;
-import xdoclet.DocletTask;
-import xdoclet.doc.info.InfoSubTask;
-import xdoclet.doc.DocumentDocletTask;
-
-import java.io.File;
-import java.util.Vector;
-
-public class AntXDocletTask extends DocumentDocletTask {
-    private Vector _subTasks = new Vector();
-
-    public void addTasks(TaskSubTask subtask) {
-        _subTasks.add(subtask);
-    }
-
-    public void addDatatypes(DatatypeSubTask subtask) {
-        _subTasks.add(subtask);
-    }
-
-    /**
-     * Borrowed a bit from Darrell DeBoer's myrmidon stuff (thanks Darrell!)
-     */
-    public void execute() throws BuildException {
-        // Add the base directories of all the filesets to the sourcepath
-        final Vector filesets = getFilesets();
-        for (int i = 0; i < filesets.size(); i++) {
-            final FileSet fileSet = (FileSet) filesets.elementAt(i);
-            final File basedir = fileSet.getDir(project);
-            createSourcepath().setLocation(basedir);
-        }
-
-        super.execute();
-    }
-
-    protected Vector getSubTasks() {
-        Vector subtasks = super.getSubTasks();
-
-        subtasks.addAll(_subTasks);
-
-        return subtasks;
-    }
-}
\ No newline at end of file
diff --git a/proposal/xdocs/src/org/apache/tools/ant/xdoclet/DatatypeSubTask.java b/proposal/xdocs/src/org/apache/tools/ant/xdoclet/DatatypeSubTask.java
deleted file mode 100644
index 1db3567..0000000
--- a/proposal/xdocs/src/org/apache/tools/ant/xdoclet/DatatypeSubTask.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.xdoclet;
-
-import com.sun.javadoc.ClassDoc;
-import xdoclet.TemplateSubTask;
-import xdoclet.XDocletException;
-import xdoclet.XDocletTagSupport;
-import xdoclet.tags.TypeTagsHandler;
-import xdoclet.util.TypeConversionUtil;
-
-import java.io.File;
-import java.text.MessageFormat;
-
-/**
- * Custom XDoclet subtask to handle Ant datatypes
- */
-public class DatatypeSubTask extends TemplateSubTask {
-    public final static String SUBTASK_NAME = "datatypes";
-
-    public String getSubTaskName() {
-        return SUBTASK_NAME;
-    }
-
-    /**
-     * Returns true if the class is an Ant task. This causes the task to be processed
-     * by the XDoclet template task.
-     */
-    protected boolean matchesGenerationRules(ClassDoc clazz) throws XDocletException {
-        return isAntDatatype(clazz);
-    }
-
-    /**
-     * @todo a datatype doesn't have to extend Datatype, right?  so perhaps should
-     *       another condition to flag a class with @ant.datatype name="..."
-     */
-    public static final boolean isAntDatatype(ClassDoc clazz) throws XDocletException {
-        if (clazz.isAbstract()) {
-            return false;
-        }
-
-        // no inner classes
-        if (clazz.containingClass() != null) {
-            return false;
-        }
-
-        String ignoreValue = XDocletTagSupport.getClassTagValue(clazz, "ant:datatype", "ignore", 0, null, "false", false, false);
-        boolean ignore = TypeConversionUtil.stringToBoolean(ignoreValue, true);
-
-        if (ignore) {
-            return false;
-        }
-
-        return TypeTagsHandler.isOfType(clazz,
-                "org.apache.tools.ant.types.DataType",
-                TypeTagsHandler.TYPE_HIERARCHY);
-    }
-
-    /**
-     * Custom file naming. Use the task name for the file name rather than the
-     * default class name.
-     *
-     * @todo fix hardcoded path name
-     */
-    protected String getGeneratedFileName(ClassDoc clazz) throws XDocletException {
-        String typeName = DatatypeTagsHandler.getDatatypeName(clazz);
-        return typeName + ".xml";
-    }
-
-}
diff --git a/proposal/xdocs/src/org/apache/tools/ant/xdoclet/DatatypeTagsHandler.java b/proposal/xdocs/src/org/apache/tools/ant/xdoclet/DatatypeTagsHandler.java
deleted file mode 100644
index d69c99d..0000000
--- a/proposal/xdocs/src/org/apache/tools/ant/xdoclet/DatatypeTagsHandler.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.xdoclet;
-
-import com.sun.javadoc.ClassDoc;
-import com.sun.javadoc.MethodDoc;
-import com.sun.javadoc.Parameter;
-import com.sun.javadoc.Type;
-
-import xdoclet.XDocletException;
-import xdoclet.XDocletTagSupport;
-import xdoclet.tags.AbstractProgramElementTagsHandler;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-
-/**
- * Custom tag handler for XDoclet templates for Ant-specific processing.
- *
- * @author     Erik Hatcher
- * @created    February 17, 2002
- *
- * @todo clean up logic so that all setters are gathered first (even
- * superclass) and sorted along wih them
- * @todo need to create better logic for finding proper setters
- * @todo add ifIsAntTask, among other convenience tags
- */
-public class DatatypeTagsHandler extends XDocletTagSupport {
-
-    /**
-     * Iterates over all Ant datatypes
-     */
-    public void forAllDatatypes(String template, Properties attributes) throws XDocletException {
-        ClassDoc[] classes = AbstractProgramElementTagsHandler.getAllClasses();
-        ClassDoc cur_class = null;
-
-        for (int i = 0; i < classes.length; i++) {
-            cur_class = classes[i];
-            setCurrentClass(cur_class);
-
-            if (DatatypeSubTask.isAntDatatype(cur_class)) {
-                generate(template);
-            }
-        }
-    }
-
-    /**
-     * Provides the datatype name
-     */
-    public String typeName() throws XDocletException {
-        return getDatatypeName(getCurrentClass());
-    }
-
-    public static final String getDatatypeName(ClassDoc clazz) throws XDocletException {
-        // sheesh!  There should be a friendlier method than this!
-        String tagValue = getTagValue(clazz, "ant:datatype", "name", -1,
-                null, null, null, null,
-                null, false, XDocletTagSupport.FOR_CLASS, false);
-
-        if (tagValue == null) {
-            tagValue = clazz.name();
-
-            tagValue = tagValue.toLowerCase();
-        }
-        return tagValue;
-    }
-}
-
diff --git a/proposal/xdocs/src/org/apache/tools/ant/xdoclet/TaskSubTask.java b/proposal/xdocs/src/org/apache/tools/ant/xdoclet/TaskSubTask.java
deleted file mode 100644
index 8f1098e..0000000
--- a/proposal/xdocs/src/org/apache/tools/ant/xdoclet/TaskSubTask.java
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.xdoclet;
-
-import com.sun.javadoc.ClassDoc;
-import com.sun.javadoc.MethodDoc;
-import com.sun.javadoc.Tag;
-import xdoclet.TemplateSubTask;
-import xdoclet.XDocletException;
-import xdoclet.XDocletTagSupport;
-import xdoclet.util.TypeConversionUtil;
-
-import java.io.File;
-
-/**
- * Custom XDoclet subtask to handle Ant specific needs
- */
-public class TaskSubTask extends TemplateSubTask {
-    public final static String SUBTASK_NAME = "tasks";
-
-    public String getSubTaskName() {
-        return SUBTASK_NAME;
-    }
-
-    /**
-     * Returns true if the class is an Ant task. This causes the task to be processed
-     * by the XDoclet template task.
-     */
-    protected boolean matchesGenerationRules(ClassDoc clazz) throws XDocletException {
-        return isAntTask(clazz);
-    }
-
-    /**
-     * Checks many factors to determine if the class is indeed an Ant task
-     * or not.
-     *
-     * @todo perhaps make deprecation switch configurable
-     */
-    public static final boolean isAntTask(ClassDoc clazz) throws XDocletException {
-        if (clazz.isAbstract()) {
-            return false;
-        }
-
-        // no inner classes (for now - but is this possible? desired?)
-        if (clazz.containingClass() != null) {
-            return false;
-        }
-
-        String ignoreValue = XDocletTagSupport.getClassTagValue(clazz, "ant:task", "ignore", 0, null, "false", false, false);
-        boolean ignore = TypeConversionUtil.stringToBoolean(ignoreValue, true);
-
-        if (ignore) {
-            return false;
-        }
-
-        /* Leave deprecated tasks in for now
-        Tag[] tags = clazz.tags();
-        for (int i = 0; i < tags.length; i++) {
-            if ("@deprecated".equals(tags[i].name())) {
-                return false;
-            }
-        }
-        */
-
-        if (hasExecuteMethod(clazz)) {
-            return true;
-        }
-
-        return false;
-    }
-
-    /**
-     * Check for class implementing an execute() method. Recursive calls are
-     * made to superclasses.
-     */
-    private static boolean hasExecuteMethod(ClassDoc clazz) {
-        if (clazz == null) {
-            return false;
-        }
-
-        // It ain't a task if we've climbed back to Task itself.
-        // Also ignore other special Ant classes
-        if ("org.apache.tools.ant.Task".equals(clazz.qualifiedName()) ||
-                "org.apache.tools.ant.Target".equals(clazz.qualifiedName()) ||
-                "org.apache.tools.ant.TaskAdapter".equals(clazz.qualifiedName()) ||
-                "org.apache.tools.ant.UnknownElement".equals(clazz.qualifiedName())) {
-            return false;
-        }
-
-        // need to check that only runtime exceptions are thrown?
-        MethodDoc[] methods = clazz.methods();
-        for (int i = 0; i < methods.length; i++) {
-            if ("execute".equals(methods[i].name())) {
-                if (methods[i].parameters().length == 0) {
-                    if (methods[i].returnType().typeName().equals("void")) {
-                        return true;
-                    }
-                }
-            }
-        }
-
-        return hasExecuteMethod(clazz.superclass());
-    }
-
-    /**
-     * Custom file naming. Use the task name for the file name rather than the
-     * default class name.
-     */
-    protected String getGeneratedFileName(ClassDoc clazz) throws XDocletException {
-        String dir = TaskTagsHandler.getCategoryName(clazz);
-        String taskName = TaskTagsHandler.getTaskName(clazz);
-
-        return new File(dir, taskName + ".xml").toString();
-    }
-}
diff --git a/proposal/xdocs/src/org/apache/tools/ant/xdoclet/TaskTagsHandler.java b/proposal/xdocs/src/org/apache/tools/ant/xdoclet/TaskTagsHandler.java
deleted file mode 100644
index 85f8d27..0000000
--- a/proposal/xdocs/src/org/apache/tools/ant/xdoclet/TaskTagsHandler.java
+++ /dev/null
@@ -1,427 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.xdoclet;
-
-import com.sun.javadoc.ClassDoc;
-import com.sun.javadoc.MethodDoc;
-import com.sun.javadoc.Parameter;
-import com.sun.javadoc.Type;
-
-import xdoclet.XDocletException;
-import xdoclet.XDocletTagSupport;
-import xdoclet.tags.AbstractProgramElementTagsHandler;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-
-/**
- * Custom tag handler for XDoclet templates for Ant-specific processing.
- *
- * @author     Erik Hatcher
- * @created    February 17, 2002
- *
- * @todo clean up logic so that all setters are gathered first (even
- * superclass) and sorted along wih them
- * @todo need to create better logic for finding proper setters
- * @todo add ifIsAntTask, among other convenience tags
- */
-public class TaskTagsHandler extends XDocletTagSupport {
-
-    /** Default category for tasks without a category attribute. */
-    public static final String DEFAULT_CATEGORY = "other";
-
-    /**
-     * Iterates over all Ant tasks
-     */
-    public void forAllTasks(String template, Properties attributes) throws XDocletException {
-        ClassDoc[] classes = AbstractProgramElementTagsHandler.getAllClasses();
-        ClassDoc cur_class = null;
-
-        for (int i = 0; i < classes.length; i++) {
-            cur_class = classes[i];
-            setCurrentClass(cur_class);
-
-            if (TaskSubTask.isAntTask(cur_class)) {
-                generate(template);
-            }
-        }
-    }
-
-    /**
-     * Iterates over all Ant attributes.
-     *
-     *@param  template              XDoclet template
-     *@param  attributes            Tag parameters
-     *@exception  XDocletException  Oops!
-     */
-    public void forAllAttributes(String template, Properties attributes) throws XDocletException {
-        // throw exception if not an Ant task
-
-        ClassDoc cur_class = getCurrentClass();
-
-        MethodDoc[] methods = getAttributeMethods(cur_class);
-
-        for (int i = 0; i < methods.length; i++) {
-            setCurrentMethod(methods[i]);
-            generate(template);
-        }
-    }
-
-    /**
-     * Determines if there's at least one Ant attribute.
-     *
-     *@param  template              XDoclet template
-     *@param  attributes            Tag parameters
-     *@exception  XDocletException  Oops!
-     */
-    public void ifHasAttributes(String template, Properties attributes) throws XDocletException {
-        // throw exception if not an Ant task
-
-        ClassDoc cur_class = getCurrentClass();
-
-        MethodDoc[] methods = getAttributeMethods(cur_class);
-
-        if (methods.length > 0) {
-            generate(template);
-        }
-    }
-
-    /**
-     *  Iterates over all Ant nested element methods (addXXX, addConfiguredXXX, addXXX)
-     *
-     *@param  template              XDoclet template
-     *@param  attributes            Tag parameters
-     *@exception  XDocletException  Oops!
-     */
-    public void forAllElements(String template, Properties attributes) throws XDocletException {
-        // throw exception if not an Ant task
-
-        ClassDoc cur_class = getCurrentClass();
-
-        MethodDoc[] methods = getElementMethods(cur_class);
-
-        for (int i = 0; i < methods.length; i++) {
-            setCurrentMethod(methods[i]);
-            generate(template);
-        }
-    }
-
-
-    /**
-     * Provides the element name for the current method
-     */
-    public String elementName() throws XDocletException {
-        String methodName = getCurrentMethod().name();
-        String elementName = "<not a valid element>";
-        if (methodName.startsWith("addConfigured")) {
-            elementName = methodName.substring(13, methodName.length());
-        }
-        else if (methodName.startsWith("add")) {
-            elementName = methodName.substring(3, methodName.length());
-        }
-        else if (methodName.startsWith("create")) {
-            elementName = methodName.substring(6, methodName.length());
-        }
-        return elementName.toLowerCase();
-    }
-
-    /**
-     * Provides the element type for the current method
-     */
-    public String elementType() throws XDocletException {
-        ClassDoc classDoc = elementClassDoc();
-        if (classDoc == null) {
-            throw new XDocletException("Method is not an Ant element!");
-        }
-        return classDoc.qualifiedName();
-    }
-
-    /**
-     * Provides the element type for the current method.  If the return type
-     * is null, the first parameter is used.
-     */
-    private ClassDoc elementClassDoc() throws XDocletException {
-        ClassDoc classDoc = null;
-        String methodName = getCurrentMethod().name();
-        if (methodName.startsWith("addConfigured") ||
-            methodName.startsWith("add") ||
-            methodName.startsWith("create"))
-        {
-            classDoc = getCurrentMethod().returnType().asClassDoc();
-            if (classDoc == null) {
-                Parameter[] params = getCurrentMethod().parameters();
-                if (params.length == 1) {
-                    classDoc = params[0].type().asClassDoc();
-                }
-            }
-        }
-        return classDoc;
-    }
-
-    /**
-     * Provides the Ant task name.
-     *
-     * @see #getTaskName(ClassDoc)
-	 * @doc:tag      type="content"
-     */
-    public String taskName() throws XDocletException {
-        return getTaskName(getCurrentClass());
-    }
-
-    /**
-     * Provides the Ant task name.
-     *
-     * Order of rules:
-     * <ol>
-     *   <li>Value of @ant:task name="..."</li>
-     *   <li>Lowercased classname with "Task" suffix removed</li>
-     * </ol>
-     */
-    public static final String getTaskName(ClassDoc clazz) throws XDocletException {
-        // sheesh!  There should be a friendlier method than this!
-        String tagValue = getTagValue(clazz, "ant:task", "name", -1,
-                null, null, null, null,
-                null, false, XDocletTagSupport.FOR_CLASS, false);
-
-        if (tagValue == null) {
-            // use classname, but strip "Task" suffix if there
-            tagValue = clazz.name();
-
-            if (tagValue.endsWith("Task")) {
-                tagValue = tagValue.substring(0, tagValue.indexOf("Task"));
-            }
-
-            tagValue = tagValue.toLowerCase();
-        }
-        return tagValue;
-    }
-
-    /**
-     * Provides the Ant category name.
-     *
-     * @see #getCategoryName(ClassDoc)
-     */
-    public String categoryName() throws XDocletException {
-        return getCategoryName(getCurrentClass());
-    }
-
-    /**
-     * Provides the Ant category name as the Value of the category attribute,
-     * <code>@ant:task&nbsp;category="..."</code>.
-     */
-    public static final String getCategoryName(ClassDoc clazz) throws XDocletException {
-        String tagValue = getTagValue(clazz, "ant:task", "category", -1,
-                null, null, null, null,
-                null, false, XDocletTagSupport.FOR_CLASS, false);
-        if (tagValue != null) {
-            tagValue = tagValue.toLowerCase();
-        }
-        else {
-            tagValue = DEFAULT_CATEGORY;
-        }
-        return tagValue;
-    }
-
-
-    /**
-     * Returns true if the method corresponds to an Ant task attribute using
-     * the rules from IntrospectionHelper
-     *
-     * @todo filter out deprecated methods
-     *       only filter org.apache.tools.ant.Task setters that are hidden
-     *       check that it returns void and only has single argument
-     *       incorporate rules for argument types from IntrospectionHelper
-     *           - i.e. not an array
-     *           - primitives/wrappers
-     *           - File
-     *           - Path
-     *           - EnumeratedAttribute
-     *           - Class with string constructor
-     */
-    private boolean isAntAttribute(MethodDoc method) {
-        String[] excludeList = new String[]{"setLocation", "setDescription", "setOwningTarget", "setRuntimeConfigurableWrapper",
-                                            "setTaskName", "setTaskType", "setProject"};
-        for (int i = 0; i < excludeList.length; i++) {
-            if (excludeList[i].equals(method.name())) {
-                return true;
-            }
-        }
-
-        return false;
-    }
-
-    /**
-     * @todo need to add checks for number of parameters and non-supported parameters
-     */
-    private MethodDoc[] getAttributeMethods(ClassDoc cur_class) throws XDocletException {
-        MethodDoc[] methods = getMethods(cur_class);
-        List attributeMethods = new ArrayList();
-
-        for (int i = 0; i < methods.length; i++) {
-            if (!methods[i].name().startsWith("set")) {
-                continue;
-            }
-
-            // if superclass is org.apache.tools.ant.Task then
-            // remove some known unallowed properties
-            if (isAntAttribute(methods[i])) {
-                continue;
-            }
-
-            // ensure method only has one parameter
-            Parameter[] params = methods[i].parameters();
-            if (params.length != 1) {
-                continue;
-            }
-
-            attributeMethods.add(methods[i]);
-        }
-
-        return (MethodDoc[]) attributeMethods.toArray(new MethodDoc[0]);
-    }
-
-    /**
-     * @todo add checks for number parameters and appropriate return value
-     *       check for proper exception too?
-     *       method prefixes: add, create, addConfigured (but not addText)
-     */
-    private MethodDoc[] getElementMethods(ClassDoc cur_class) throws XDocletException {
-        MethodDoc[] methods = getMethods(cur_class);
-        List attributeMethods = new ArrayList();
-
-        for (int i = 0; i < methods.length; i++) {
-            String name = methods[i].name();
-
-            // ensure if there are no parameters, there is a return type,
-            // otherwise ensure there's only one parameter.
-            Parameter[] params = methods[i].parameters();
-            if (params.length == 0) {
-                if (methods[i].returnType().asClassDoc() == null) {
-                    continue;
-                }
-            }
-            else if (params.length != 1) {
-                continue;
-            }
-
-            if ((name.startsWith("add") && !name.equals("addTask")) ||
-                    name.startsWith("create")) {
-                attributeMethods.add(methods[i]);
-            }
-
-        }
-
-        return (MethodDoc[]) attributeMethods.toArray(new MethodDoc[0]);
-    }
-
-
-    /**
-     * This is a slightly refactored (thank you IntelliJ) version of
-     * some cut-and-paste from XDoclet code.  It sorts all methods together
-     * rather than in batches of superclasses like XDoclet stuff does.
-     */
-    private MethodDoc[] getMethods(ClassDoc cur_class) throws XDocletException {
-        Map already = new HashMap();
-
-        List methods = new ArrayList();
-
-        while (cur_class != null) {
-            List curMethods = Arrays.asList(cur_class.methods());
-
-            for (int j = 0; j < curMethods.size(); j++) {
-                MethodDoc method = (MethodDoc) curMethods.get(j);
-                if (method.containingClass() == cur_class) {
-                    if (already.containsKey(method) == false) {
-                        already.put(method, method);
-                        methods.add(method);
-                    }
-                }
-            }
-
-            cur_class = cur_class.superclass();
-        }
-
-        return sortMethods(methods);
-    }
-
-    private MethodDoc[] sortMethods(List methods) {
-        //sort methods
-        Collections.sort(methods,
-                new Comparator() {
-                    public int compare(Object o1, Object o2) {
-                        MethodDoc m1 = (MethodDoc) o1;
-                        MethodDoc m2 = (MethodDoc) o2;
-
-                        return m1.name().compareTo(m2.name());
-                    }
-
-
-                    public boolean equals(Object obj) {
-                        //dumb
-                        return obj == this;
-                    }
-                });
-
-        return (MethodDoc[]) methods.toArray(new MethodDoc[0]);
-    }
-
-
-}
-
diff --git a/proposal/xdocs/templates/datatype_xdoc.template b/proposal/xdocs/templates/datatype_xdoc.template
deleted file mode 100644
index 748d544..0000000
--- a/proposal/xdocs/templates/datatype_xdoc.template
+++ /dev/null
@@ -1,49 +0,0 @@
-<XDtTagDef:tagDef namespace="AntDatatype" handler="org.apache.tools.ant.xdoclet.DatatypeTagsHandler"/>
-<XDtTagDef:tagDef namespace="AntTask" handler="org.apache.tools.ant.xdoclet.TaskTagsHandler"/>
-<datatype name="<XDtAntDatatype:typeName/>"
-          classname="<XDtClass:fullClassName/>">
-  <short-description><![CDATA[<XDtClass:firstSentenceDescription/>]]></short-description>
-  <long-description>
-    <![CDATA[<XDtClass:classComment no-comment-signs="true"/>]]>
-  </long-description>
-
-  <structure>
-
-    <attributes>
-    <XDtAntTask:forAllAttributes>
-      <attribute name="<XDtMethod:propertyName/>" type="<XDtParameter:forAllMethodParams><XDtParameter:methodParamType/></XDtParameter:forAllMethodParams>">
-        <description><![CDATA[
-          <XDtMethod:methodComment no-comment-signs="true"/>
-        ]]></description>
-      </attribute>
-    </XDtAntTask:forAllAttributes>
-    </attributes>
-
-    <elements>
-    <XDtAntTask:forAllElements>
-      <element name="<XDtAntTask:elementName/>" type="<XDtAntTask:elementType/>">
-        <description>
-          <![CDATA[<XDtMethod:methodComment no-comment-signs="true"/>]]>
-        </description>
-        <XDtClass:pushClass value="<XDtAntTask:elementType/>">
-        <XDtAntTask:ifHasAttributes>
-        <attributes>
-          <XDtAntTask:forAllAttributes>
-          <attribute name="<XDtMethod:propertyName/>" type="<XDtParameter:forAllMethodParams><XDtParameter:methodParamType/></XDtParameter:forAllMethodParams>">
-            <description><![CDATA[
-              <XDtMethod:methodComment no-comment-signs="true"/>
-            ]]></description>
-          </attribute>
-          </XDtAntTask:forAllAttributes>
-        </attributes>
-        </XDtAntTask:ifHasAttributes>
-        </XDtClass:pushClass>
-      </element>
-
-    </XDtAntTask:forAllElements>
-    </elements>
-
-    </structure>
-</datatype>
-
-
diff --git a/proposal/xdocs/templates/task_defaults_properties.template b/proposal/xdocs/templates/task_defaults_properties.template
deleted file mode 100644
index 99fbdb9..0000000
--- a/proposal/xdocs/templates/task_defaults_properties.template
+++ /dev/null
@@ -1,3 +0,0 @@
-<XDtTagDef:tagDef namespace="Ant" handler="org.apache.tools.ant.xdoclet.TaskTagsHandler"/>
-<XDtAnt:forAllTasks><XDtAnt:taskName/>=<XDtClass:fullClassName/>
-</XDtAnt:forAllTasks>
diff --git a/proposal/xdocs/templates/task_xdoc.template b/proposal/xdocs/templates/task_xdoc.template
deleted file mode 100644
index 190e0c2..0000000
--- a/proposal/xdocs/templates/task_xdoc.template
+++ /dev/null
@@ -1,62 +0,0 @@
-<XDtTagDef:tagDef namespace="Ant" handler="org.apache.tools.ant.xdoclet.TaskTagsHandler"/>
-<task name="<XDtAnt:taskName/>" category="<XDtAnt:categoryName/>"
-      classname="<XDtClass:fullClassName/>">
-
-  <XDtMerge:merge file="{0}.xml" generateMergedFile="false"></XDtMerge:merge>
-
-  <short-description><![CDATA[<XDtClass:firstSentenceDescription/>]]></short-description>
-  <long-description>
-    <![CDATA[<XDtClass:classComment no-comment-signs="true"/>]]>
-  </long-description>
-
-  <structure>
-
-    <attributes>
-    <XDtAnt:forAllAttributes>
-      <attribute name="<XDtMethod:propertyName/>" type="<XDtParameter:forAllMethodParams><XDtParameter:methodParamType/></XDtParameter:forAllMethodParams>">
-        <description><![CDATA[
-          <XDtMethod:methodComment no-comment-signs="true"/>
-        ]]></description>
-      </attribute>
-    </XDtAnt:forAllAttributes>
-    </attributes>
-
-    <elements>
-    <XDtAnt:forAllElements>
-      <element name="<XDtAnt:elementName/>" type="<XDtAnt:elementType/>">
-        <description>
-          <![CDATA[<XDtMethod:methodComment no-comment-signs="true"/>]]>
-        </description>
-        <XDtClass:pushClass value="<XDtAnt:elementType/>">
-        <XDtAnt:ifHasAttributes>
-        <attributes>
-          <XDtAnt:forAllAttributes>
-          <attribute name="<XDtMethod:propertyName/>" type="<XDtParameter:forAllMethodParams><XDtParameter:methodParamType/></XDtParameter:forAllMethodParams>">
-            <description><![CDATA[
-              <XDtMethod:methodComment no-comment-signs="true"/>
-            ]]></description>
-          </attribute>
-          </XDtAnt:forAllAttributes>
-        </attributes>
-        </XDtAnt:ifHasAttributes>
-        </XDtClass:pushClass>
-      </element>
-
-    </XDtAnt:forAllElements>
-    </elements>
-
-    <!-- @todo: wrap setCurrentMethod inside AntTagsHandler -->
-    <!-- @todo: create a XDtAnt:description wrapper for methodComment -->
-    <XDtMethod:setCurrentMethod name="addText" parameters="java.lang.String">
-      <body>
-        <description><![CDATA[
-          <XDtMethod:methodComment no-comment-signs="true"/>
-        ]]></description>
-      </body>
-    </XDtMethod:setCurrentMethod>
-
-  </structure>
-
-</task>
-
-
diff --git a/proposal/xdocs/templates/type_defaults_properties.template b/proposal/xdocs/templates/type_defaults_properties.template
deleted file mode 100644
index 3e1cf72..0000000
--- a/proposal/xdocs/templates/type_defaults_properties.template
+++ /dev/null
@@ -1,3 +0,0 @@
-<XDtTagDef:tagDef namespace="Ant" handler="org.apache.tools.ant.xdoclet.DatatypeTagsHandler"/>
-<XDtAnt:forAllDatatypes><XDtAnt:typeName/>=<XDtClass:fullClassName/>
-</XDtAnt:forAllDatatypes>
diff --git a/src/antidote/WHAT-IS-THIS-P b/src/antidote/WHAT-IS-THIS-P
deleted file mode 100644
index b63f1aa..0000000
--- a/src/antidote/WHAT-IS-THIS-P
+++ /dev/null
@@ -1,6 +0,0 @@
-This /used/ to be the home of Antidote, the GUI for Ant. It has moved
-(or rather, graduate) to the cvs module jakarta-ant-antidote, and must
-be retrieved separately from Ant, but can be found in the same place you found
-source version of Ant.
-
--- The Antidote Team --
diff --git a/src/etc/RequiredHeader.txt b/src/etc/RequiredHeader.txt
deleted file mode 100755
index ee178c0..0000000
--- a/src/etc/RequiredHeader.txt
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
diff --git a/src/etc/ant-update.xsl b/src/etc/ant-update.xsl
deleted file mode 100644
index 492a784..0000000
--- a/src/etc/ant-update.xsl
+++ /dev/null
@@ -1,155 +0,0 @@
-<xsl:stylesheet	xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
-<xsl:output method="xml" indent="yes"/>
-<!--
- The Apache Software License, Version 1.1
-
- Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- 1. Redistributions of source code must retain the above copyright
-    notice, this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in
-    the documentation and/or other materials provided with the
-    distribution.
-
- 3. The end-user documentation included with the redistribution, if
-    any, must include the following acknowlegement:
-       "This product includes software developed by the
-        Apache Software Foundation (http://www.apache.org/)."
-    Alternately, this acknowlegement may appear in the software itself,
-    if and wherever such third-party acknowlegements normally appear.
-
- 4. The names "The Jakarta Project", "Ant", and "Apache Software
-    Foundation" must not be used to endorse or promote products derived
-    from this software without prior written permission. For written
-    permission, please contact apache@apache.org.
-
- 5. Products derived from this software may not be called "Apache"
-    nor may "Apache" appear in their names without prior written
-    permission of the Apache Group.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
- ====================================================================
-
- This software consists of voluntary contributions made by many
- individuals on behalf of the Apache Software Foundation.  For more
- information on the Apache Software Foundation, please see
- <http://www.apache.org/>.
- -->
- 
-<!--
-
-  The purpose have this XSL is to provide a fast way to update a buildfile
-  from deprecated tasks.
-  
-  It should particulary be useful when there is a lot of build files to migrate.
-  If you do not want to migrate to a particular task and want to keep it for
-  various reason, just comment the appropriate template.
-  
-  !!!! Use at your own risk. !!!!
-  
-  @author <a href="sbailliez@apache.org">Stephane Bailliez</a>
-  
--->
- 
- 
-  <!-- (zip|jar|war|ear)file attributes are replaced by destfile in their respective task -->
-  <xsl:template match="zip">
-    <zip destfile="{@zipfile}">
-      <xsl:apply-templates select="@*[not(name()='zipfile')]|node()"/>
-    </zip>
-  </xsl:template>
-  <xsl:template match="jar">
-    <jar destfile="{@jarfile}">
-      <xsl:apply-templates select="@*[not(name()='jarfile')]|node()"/>
-    </jar>
-  </xsl:template>
-  <xsl:template match="war">
-    <war destfile="{@warfile}">
-      <xsl:apply-templates select="@*[not(name()='warfile')]|node()"/>
-    </war>
-  </xsl:template>
-  <xsl:template match="ear">
-    <ear destfile="{@earfile}">
-      <xsl:apply-templates select="@*[not(name()='earfile')]|node()"/>
-    </ear>
-  </xsl:template>
-   
- 
-  <!-- copydir is replaced by copy -->
-  <xsl:template match="copydir">
-    <copy todir="{@dest}">
-      <xsl:apply-templates select="@flatten|@filtering"/>
-      <xsl:if test="@forceoverwrite">
-        <xsl:attribute name="overwrite"><xsl:value-of select="@forceoverwrite"/></xsl:attribute>
-      </xsl:if>
-      <fileset dir="{@src}">
-          <xsl:apply-templates select="@includes|@includesfile|@excludes|@excludesfile|node()"/>
-      </fileset>
-    </copy>
-  </xsl:template>
-
-  <!-- copyfile is replaced by copy -->
-  <xsl:template match="copyfile">
-    <copy file="{@src}" tofile="{@dest}">
-      <xsl:apply-templates select="@filtering"/>
-      <xsl:if test="@forceoverwrite">
-        <xsl:attribute name="overwrite"><xsl:value-of select="@forceoverwrite"/></xsl:attribute>
-      </xsl:if>
-    </copy>
-  </xsl:template>
-
-  <!-- deltree is replaced by delete -->
-  <xsl:template match="deltree">
-    <delete dir="{@dir}"/>
-  </xsl:template>
-
-  <!-- execon is replaced by apply -->
-  <xsl:template match="execon">
-    <apply>
-      <xsl:apply-templates select="@*|node()"/>
-    </apply>
-  </xsl:template>
-
-  <!-- rename is replaced by move -->
-  <xsl:template match="rename">
-    <move file="{@src}" tofile="{@dest}">
-      <xsl:if test="@replace">
-        <xsl:attribute name="overwrite"><xsl:value-of select="@replace"/></xsl:attribute>
-      </xsl:if>
-    </move>
-  </xsl:template>
-
-  <!-- javadoc2 is replaced by javadoc -->
-  <xsl:template match="javadoc2">
-    <javadoc>
-      <xsl:apply-templates select="@*|node()"/>
-    </javadoc>
-  </xsl:template>
-
-
-  <!-- Copy every node and attributes recursively -->
-  <xsl:template match="node()|@*">
-    <xsl:copy>
-      <xsl:apply-templates select="@*|node()"/>
-    </xsl:copy>
-  </xsl:template>
-  
-</xsl:stylesheet>
\ No newline at end of file
diff --git a/src/etc/changelog.xsl b/src/etc/changelog.xsl
deleted file mode 100644
index 6c44f5e..0000000
--- a/src/etc/changelog.xsl
+++ /dev/null
@@ -1,179 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-
-<xsl:stylesheet
-    xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
-    version='1.0'>
-
-<!--
- The Apache Software License, Version 1.1
-
- Copyright (c) 2002 The Apache Software Foundation.  All rights
- reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- 1. Redistributions of source code must retain the above copyright
-    notice, this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in
-    the documentation and/or other materials provided with the
-    distribution.
-
- 3. The end-user documentation included with the redistribution, if
-    any, must include the following acknowlegement:
-       "This product includes software developed by the
-        Apache Software Foundation (http://www.apache.org/)."
-    Alternately, this acknowlegement may appear in the software itself,
-    if and wherever such third-party acknowlegements normally appear.
-
- 4. The names "The Jakarta Project", "Ant", and "Apache Software
-    Foundation" must not be used to endorse or promote products derived
-    from this software without prior written permission. For written
-    permission, please contact apache@apache.org.
-
- 5. Products derived from this software may not be called "Apache"
-    nor may "Apache" appear in their names without prior written
-    permission of the Apache Group.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
- ====================================================================
-
- This software consists of voluntary contributions made by many
- individuals on behalf of the Apache Software Foundation.  For more
- information on the Apache Software Foundation, please see
- <http://www.apache.org/>.
- -->
-  <xsl:param name="title"/>
-  <xsl:param name="module"/>
-  <xsl:param name="cvsweb"/>
-
-  <xsl:output method="html" indent="yes"  encoding="US-ASCII"/>
-
-  <!-- Copy standard document elements.  Elements that
-       should be ignored must be filtered by apply-templates
-       tags. -->
-  <xsl:template match="*">
-    <xsl:copy>
-      <xsl:copy-of select="attribute::*[. != '']"/>
-      <xsl:apply-templates/>
-    </xsl:copy>
-  </xsl:template>
-
-  <xsl:template match="changelog">
-    <HTML>
-      <HEAD>
-        <TITLE><xsl:value-of select="$title"/></TITLE>
-      </HEAD>
-      <BODY link="#000000" alink="#000000" vlink="#000000" text="#000000">
-        <style type="text/css">
-          body, p {
-          font-family: verdana,arial,helvetica;
-          font-size: 80%;
-          color:#000000;
-          }
-	  .dateAndAuthor {
-          font-family: verdana,arial,helvetica;
-          font-size: 80%;
-          font-weight: bold;
-          text-align:left;
-          background:#a6caf0;
-	  }
-          tr, td{
-          font-family: verdana,arial,helvetica;
-          font-size: 80%;
-          background:#eeeee0;
-          }	  
-	  </style>        
-          <h1>
-            <a name="top"><xsl:value-of select="$title"/></a>
-          </h1>
-          <p align="right">Designed for use with <a href="http://jakarta.apache.org">Ant</a>.</p>
-          <hr size="2"/>
-        <TABLE BORDER="0" WIDTH="100%" CELLPADDING="3" CELLSPACING="1">
-          
-          <xsl:apply-templates select=".//entry">
-            <xsl:sort select="date" data-type="text" order="descending"/>
-            <xsl:sort select="time" data-type="text" order="descending"/>
-          </xsl:apply-templates>
-          
-        </TABLE>
-        
-      </BODY>
-    </HTML>
-  </xsl:template>
-  
-  <xsl:template match="entry">
-    <TR>
-      <TD colspan="2" class="dateAndAuthor">
-        <xsl:value-of select="date"/><xsl:text> </xsl:text><xsl:value-of select="time"/><xsl:text> </xsl:text><xsl:value-of select="author"/>
-      </TD>
-    </TR>
-    <TR>
-      <TD width="20">
-        <xsl:text>    </xsl:text>
-      </TD>
-      <TD>
-        <pre>
-<xsl:apply-templates select="msg"/></pre>
-        <ul>
-          <xsl:apply-templates select="file"/>
-        </ul>
-      </TD>
-    </TR>
-  </xsl:template>
-
-  <xsl:template match="date">
-    <i><xsl:value-of select="."/></i>
-  </xsl:template>
-
-  <xsl:template match="time">
-    <i><xsl:value-of select="."/></i>
-  </xsl:template>
-
-  <xsl:template match="author">
-    <i>
-      <a>
-        <xsl:attribute name="href">mailto:<xsl:value-of select="."/></xsl:attribute>
-        <xsl:value-of select="."/>
-      </a>
-    </i>
-  </xsl:template>
-
-  <xsl:template match="file">
-    <li>
-      <a>
-        <xsl:choose>
-          <xsl:when test="string-length(prevrevision) = 0 ">
-            <xsl:attribute name="href"><xsl:value-of select="$cvsweb"/><xsl:value-of select="$module" />/<xsl:value-of select="name" />?rev=<xsl:value-of select="revision" />&amp;content-type=text/x-cvsweb-markup</xsl:attribute>
-          </xsl:when>
-          <xsl:otherwise>
-            <xsl:attribute name="href"><xsl:value-of select="$cvsweb"/><xsl:value-of select="$module" />/<xsl:value-of select="name" />?r1=<xsl:value-of select="revision" />&amp;r2=<xsl:value-of select="prevrevision"/></xsl:attribute>
-          </xsl:otherwise>
-        </xsl:choose>
-        <xsl:value-of select="name" /> (<xsl:value-of select="revision"/>)
-      </a>
-    </li>
-  </xsl:template>
-
-  <!-- Any elements within a msg are processed,
-       so that we can preserve HTML tags. -->
-  <xsl:template match="msg">
-    <b><xsl:apply-templates/></b>
-  </xsl:template>
-  
-</xsl:stylesheet>
-
diff --git a/src/etc/checkstyle-frames.xsl b/src/etc/checkstyle-frames.xsl
deleted file mode 100644
index 104af5c..0000000
--- a/src/etc/checkstyle-frames.xsl
+++ /dev/null
@@ -1,324 +0,0 @@
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
-    xmlns:lxslt="http://xml.apache.org/xslt"
-    xmlns:redirect="org.apache.xalan.xslt.extensions.Redirect"
-    extension-element-prefixes="redirect">
-
-<!--
- The Apache Software License, Version 1.1
-
- Copyright (c) 2002 The Apache Software Foundation.  All rights
- reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- 1. Redistributions of source code must retain the above copyright
-    notice, this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in
-    the documentation and/or other materials provided with the
-    distribution.
-
- 3. The end-user documentation included with the redistribution, if
-    any, must include the following acknowlegement:
-       "This product includes software developed by the
-        Apache Software Foundation (http://www.apache.org/)."
-    Alternately, this acknowlegement may appear in the software itself,
-    if and wherever such third-party acknowlegements normally appear.
-
- 4. The names "The Jakarta Project", "Ant", and "Apache Software
-    Foundation" must not be used to endorse or promote products derived
-    from this software without prior written permission. For written
-    permission, please contact apache@apache.org.
-
- 5. Products derived from this software may not be called "Apache"
-    nor may "Apache" appear in their names without prior written
-    permission of the Apache Group.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
- ====================================================================
-
- This software consists of voluntary contributions made by many
- individuals on behalf of the Apache Software Foundation.  For more
- information on the Apache Software Foundation, please see
- <http://www.apache.org/>.
- -->
-
-    <xsl:output method="html" indent="yes" encoding="US-ASCII"/>
-    <xsl:decimal-format decimal-separator="." grouping-separator="," />
-
-    <xsl:param name="output.dir" select="'.'"/>
-
-    <xsl:template match="checkstyle">
-        <!-- create the index.html -->
-        <redirect:write file="{$output.dir}/index.html">
-            <xsl:call-template name="index.html"/>
-        </redirect:write>
-
-        <!-- create the stylesheet.css -->
-        <redirect:write file="{$output.dir}/stylesheet.css">
-            <xsl:call-template name="stylesheet.css"/>
-        </redirect:write>
-
-        <!-- create the overview-summary.html at the root -->
-        <redirect:write file="{$output.dir}/overview-frame.html">
-            <xsl:apply-templates select="." mode="overview"/>
-        </redirect:write>
-
-        <!-- create the all-classes.html at the root -->
-        <redirect:write file="{$output.dir}/allclasses-frame.html">
-            <xsl:apply-templates select="." mode="all.classes"/>
-        </redirect:write>
-
-        <!-- process all files -->
-        <xsl:apply-templates select="file"/>
-    </xsl:template>
-
-    <xsl:template name="index.html">
-        <html>
-            <head>
-                <title>CheckStyle Audit</title>
-            </head>
-            <frameset cols="20%,80%">
-                <frame src="allclasses-frame.html" name="fileListFrame"/>
-                <frame src="overview-frame.html" name="fileFrame"/>
-            </frameset>
-            <noframes>
-                <h2>Frame Alert</h2>
-                <p>
-                    This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client.
-                </p>
-            </noframes>
-        </html>
-    </xsl:template>
-
-    <xsl:template name="pageHeader">
-        <table border="0" cellpadding="0" cellspacing="0" width="100%">
-            <tr>
-                <td class="text-align:right"><h2>CheckStyle Audit</h2></td>
-            </tr>
-            <tr>
-                <td class="text-align:right">Designed for use with <a href='http://checkstyle.sourceforge.net/'>CheckStyle</a> and <a href='http://jakarta.apache.org'>Ant</a>.</td>
-            </tr>
-        </table>
-        <hr size="1"/>
-    </xsl:template>
-
-    <xsl:template match="checkstyle" mode="overview">
-        <html>
-            <head>
-                <link rel="stylesheet" type="text/css" href="stylesheet.css"/>
-            </head>
-            <body>
-                <!-- page header -->
-                <xsl:call-template name="pageHeader"/>
-
-                <!-- Summary part -->
-                <xsl:apply-templates select="." mode="summary"/>
-                <hr size="1" width="100%" align="left"/>
-
-                <!-- File list part -->
-                <xsl:apply-templates select="." mode="filelist"/>
-            </body>
-        </html>
-    </xsl:template>
-
-    <xsl:template name="stylesheet.css">
-        .bannercell {
-        border: 0px;
-        padding: 0px;
-        }
-        body {
-        margin-left: 10;
-        margin-right: 10;
-        font:normal 80% arial,helvetica,sanserif;
-        background-color:#FFFFFF;
-        color:#000000;
-        }
-        .a td {
-        background: #efefef;
-        }
-        .b td {
-        background: #fff;
-        }
-        th, td {
-        text-align: left;
-        vertical-align: top;
-        }
-        th {
-        font-weight:bold;
-        background: #ccc;
-        color: black;
-        }
-        table, th, td {
-        font-size:100%;
-        border: none
-        }
-        table.log tr td, tr th {
-
-        }
-        h2 {
-        font-weight:bold;
-        font-size:140%;
-        margin-bottom: 5;
-        }
-        h3 {
-        font-size:100%;
-        font-weight:bold;
-        background: #525D76;
-        color: white;
-        text-decoration: none;
-        padding: 5px;
-        margin-right: 2px;
-        margin-left: 2px;
-        margin-bottom: 0;
-        }
-    </xsl:template>
-
-    <!--
-    Creates an all-classes.html file that contains a link to all files.
-    -->
-    <xsl:template match="checkstyle" mode="all.classes">
-        <html>
-            <head>
-                <link rel="stylesheet" type="text/css" href="stylesheet.css"/>
-            </head>
-            <body>
-                <h2>Files</h2>
-                <p>
-                    <table width="100%">
-                        <!-- For each file create its part -->
-                        <xsl:apply-templates select="file" mode="all.classes">
-                            <xsl:sort select="@name"/>
-                        </xsl:apply-templates>
-                    </table>
-                </p>
-            </body>
-        </html>
-    </xsl:template>
-
-    <xsl:template match="checkstyle" mode="filelist">
-        <h3>Files</h3>
-        <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
-            <tr>
-                <th>Name</th>
-                <th>Errors</th>
-            </tr>
-            <xsl:apply-templates select="file" mode="filelist">
-                <xsl:sort select="@name"/>
-            </xsl:apply-templates>
-        </table>
-    </xsl:template>
-
-    <xsl:template match="file" mode="filelist">
-        <tr>
-            <xsl:call-template name="alternated-row"/>
-            <td nowrap="nowrap">
-                <a>
-                    <xsl:attribute name="href">
-                        <xsl:text>files/</xsl:text><xsl:value-of select="@name"/><xsl:text>.html</xsl:text>
-                    </xsl:attribute>
-                    <xsl:value-of select="@name"/>
-                </a>
-            </td>
-            <td><xsl:value-of select="count(error)"/></td>
-        </tr>
-    </xsl:template>
-
-    <xsl:template match="file" mode="all.classes">
-        <tr>
-            <td nowrap="nowrap">
-                <a target="fileFrame">
-                    <xsl:attribute name="href">
-                        <xsl:text>files/</xsl:text><xsl:value-of select="@name"/><xsl:text>.html</xsl:text>
-                    </xsl:attribute>
-                    <xsl:value-of select="@name"/>
-                </a>
-            </td>
-        </tr>
-    </xsl:template>
-
-    <!--
-    transform string like a/b/c to ../../../
-    @param path the path to transform into a descending directory path
-    -->
-    <xsl:template name="path">
-        <xsl:param name="path"/>
-        <xsl:if test="contains($path,'/')">
-            <xsl:text>../</xsl:text>
-            <xsl:call-template name="path">
-                <xsl:with-param name="path"><xsl:value-of select="substring-after($path,'/')"/></xsl:with-param>
-            </xsl:call-template>
-        </xsl:if>
-        <xsl:if test="not(contains($path,'/')) and not($path = '')">
-            <xsl:text>../</xsl:text>
-        </xsl:if>
-    </xsl:template>
-
-    <xsl:template match="file">
-        <redirect:write file="{$output.dir}/files/{@name}.html">
-            <html>
-                <head>
-                    <link rel="stylesheet" type="text/css">
-                        <xsl:attribute name="href"><xsl:call-template name="path"><xsl:with-param name="path" select="@name"/></xsl:call-template><xsl:text>stylesheet.css</xsl:text></xsl:attribute>
-                    </link>
-                </head>
-                <body>
-                    <xsl:call-template name="pageHeader"/>
-                    <h3>File <xsl:value-of select="@name"/></h3>
-                    <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
-                        <tr>
-                            <th>Error Description</th>
-                            <th>Line</th>
-                        </tr>
-                        <xsl:for-each select="error">
-                            <tr>
-                                <xsl:call-template name="alternated-row"/>
-                                <td><xsl:value-of select="@message"/></td>
-                                <td><xsl:value-of select="@line"/></td>
-                            </tr>
-                        </xsl:for-each>
-                    </table>
-                </body>
-            </html>
-        </redirect:write>
-    </xsl:template>
-
-    <xsl:template match="checkstyle" mode="summary">
-        <h3>Summary</h3>
-        <xsl:variable name="fileCount" select="count(file)"/>
-        <xsl:variable name="errorCount" select="count(file/error)"/>
-        <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
-            <tr>
-                <th>Files</th>
-                <th>Errors</th>
-            </tr>
-            <tr>
-                <xsl:call-template name="alternated-row"/>
-                <td><xsl:value-of select="$fileCount"/></td>
-                <td><xsl:value-of select="$errorCount"/></td>
-            </tr>
-        </table>
-    </xsl:template>
-
-    <xsl:template name="alternated-row">
-        <xsl:attribute name="class">
-            <xsl:if test="position() mod 2 = 1">a</xsl:if>
-            <xsl:if test="position() mod 2 = 0">b</xsl:if>
-        </xsl:attribute>
-    </xsl:template>
-</xsl:stylesheet>
-
diff --git a/src/etc/coverage-frames.xsl b/src/etc/coverage-frames.xsl
deleted file mode 100644
index 3881f1a..0000000
--- a/src/etc/coverage-frames.xsl
+++ /dev/null
@@ -1,533 +0,0 @@
-<xsl:stylesheet	xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
-	xmlns:lxslt="http://xml.apache.org/xslt"
-	xmlns:redirect="org.apache.xalan.xslt.extensions.Redirect"
-	extension-element-prefixes="redirect">
-<xsl:output	method="html" indent="yes"/>
-<xsl:decimal-format decimal-separator="." grouping-separator="," />
-<!--
- The Apache Software License, Version 1.1
-
- Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- 1. Redistributions of source code must retain the above copyright
-    notice, this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in
-    the documentation and/or other materials provided with the
-    distribution.
-
- 3. The end-user documentation included with the redistribution, if
-    any, must include the following acknowlegement:
-       "This product includes software developed by the
-        Apache Software Foundation (http://www.apache.org/)."
-    Alternately, this acknowlegement may appear in the software itself,
-    if and wherever such third-party acknowlegements normally appear.
-
- 4. The names "The Jakarta Project", "Ant", and "Apache Software
-    Foundation" must not be used to endorse or promote products derived
-    from this software without prior written permission. For written
-    permission, please contact apache@apache.org.
-
- 5. Products derived from this software may not be called "Apache"
-    nor may "Apache" appear in their names without prior written
-    permission of the Apache Group.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
- ====================================================================
-
- This software consists of voluntary contributions made by many
- individuals on behalf of the Apache Software Foundation.  For more
- information on the Apache Software Foundation, please see
- <http://www.apache.org/>.
- -->
-
-<!--
- 
- Sample stylesheet to be used with JProbe 3.0 XML output.
- 
- It creates a set of HTML files a la javadoc where you can browse easily
- through all packages and classes.
- 
- It is best used with JProbe Coverage Ant task that gives you the benefit
- of a reference classpath so that you have the list of classes/methods
- that are not used at all in a given classpath.
- 
- @author Stephane Bailliez <a href="mailto:sbailliez@apache.org"/>
- 
--->
-
-<!-- default output directory is current directory -->
-<xsl:param name="output.dir" select="'.'"/>
-
-<!-- ======================================================================
-	Root element
-    ======================================================================= -->
-<xsl:template match="/snapshot">
-	<!-- create the index.html -->
-	<redirect:write file="{$output.dir}/index.html">
-		<xsl:call-template name="index.html"/>
-	</redirect:write>
-
-	<!-- create the stylesheet.css -->
-	<redirect:write file="{$output.dir}/stylesheet.css">
-		<xsl:call-template name="stylesheet.css"/>
-	</redirect:write>
-
-	<!-- create the overview-packages.html at the root -->
-	<redirect:write file="{$output.dir}/overview-summary.html">
-		<xsl:apply-templates select="." mode="overview.packages"/>
-	</redirect:write>
-
-	<!-- create the all-packages.html at the root -->
-	<redirect:write file="{$output.dir}/overview-frame.html">
-		<xsl:apply-templates select="." mode="all.packages"/>
-	</redirect:write>
-	
-	<!-- create the all-classes.html at the root -->
-	<redirect:write file="{$output.dir}/allclasses-frame.html">
-		<xsl:apply-templates select="." mode="all.classes"/>
-	</redirect:write>
-	
-	<!-- process all packages -->
-	<xsl:apply-templates select="./package" mode="write"/>
-</xsl:template>
-
-<!-- =======================================================================
-	Frameset definition. Entry point for the report.
-	3 frames: packageListFrame, classListFrame, classFrame
-    ======================================================================= -->
-<xsl:template name="index.html">
-<html>
-	<head><title>Coverage Results.</title></head>
-	<frameset cols="20%,80%">
-		<frameset rows="30%,70%">
-			<frame src="overview-frame.html" name="packageListFrame"/>
-			<frame src="allclasses-frame.html" name="classListFrame"/>
-		</frameset>
-		<frame src="overview-summary.html" name="classFrame"/>
-	</frameset>
-	<noframes>
-		<h2>Frame Alert</h2>
-		<p>
-		This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client.
-		</p>
-	</noframes>
-</html>
-</xsl:template>
-
-<!-- =======================================================================
-	Stylesheet CSS used
-    ======================================================================= -->
-<!-- this is the stylesheet css to use for nearly everything -->
-<xsl:template name="stylesheet.css">
-    .bannercell {
-      border: 0px;
-      padding: 0px;
-    }
-    body {
-      margin-left: 10;
-      margin-right: 10;
-      font:normal 80% arial,helvetica,sanserif;
-      background-color:#FFFFFF;
-      color:#000000;
-    }
-    .a td { 
-      background: #efefef;
-    }
-    .b td { 
-      background: #fff;
-    }
-    th, td {
-      text-align: left;
-      vertical-align: top;
-    }
-    th {
-      font-weight:bold;
-      background: #ccc;
-      color: black;
-    }
-    table, th, td {
-      font-size:100%;
-      border: none
-    }
-    table.log tr td, tr th {
-      
-    }
-    h2 {
-      font-weight:bold;
-      font-size:140%;
-      margin-bottom: 5;
-    }
-    h3 {
-      font-size:100%;
-      font-weight:bold;
-      background: #525D76;
-      color: white;
-      text-decoration: none;
-      padding: 5px;
-      margin-right: 2px;
-      margin-left: 2px;
-      margin-bottom: 0;
-    }
-</xsl:template>
-
-<!-- =======================================================================
-	List of all classes in all packages
-	This will be the first page in the classListFrame
-    ======================================================================= -->
-<xsl:template match="snapshot" mode="all.classes">
-	<html>
-		<head>
-			<xsl:call-template name="create.stylesheet.link"/>
-		</head>
-		<body>
-			<h2>Classes</h2>
-			<table width="100%">
-				<xsl:for-each select="package/class">
-					<xsl:sort select="@name"/>
-				    <xsl:variable name="package.name" select="(ancestor::package)[last()]/@name"/>
-				    <xsl:variable name="link">
-						<xsl:if test="not($package.name='')">
-							<xsl:value-of select="translate($package.name,'.','/')"/><xsl:text>/</xsl:text>
-						</xsl:if><xsl:value-of select="@name"/><xsl:text>.html</xsl:text>
-				    </xsl:variable>
-					<tr>
-						<td nowrap="nowrap">
-							<a target="classFrame" href="{$link}"><xsl:value-of select="@name"/></a>
-						</td>
-					</tr>
-				</xsl:for-each>
-			</table>
-		</body>
-	</html>
-</xsl:template>
-
-<!-- list of all packages -->
-<xsl:template match="snapshot" mode="all.packages">
-	<html>
-		<head>
-			<xsl:call-template name="create.stylesheet.link"/>
-		</head>
-		<body>
-			<h2><a href="overview-summary.html" target="classFrame">Home</a></h2>
-			<h2>Packages</h2>
-			<table width="100%">
-				<xsl:for-each select="package">
-					<xsl:sort select="@name" order="ascending"/>
-					<tr>
-						<td nowrap="nowrap">
-							<a href="{translate(@name,'.','/')}/package-summary.html" target="classFrame">
-								<xsl:value-of select="@name"/>
-							</a>
-						</td>
-					</tr>
-				</xsl:for-each>
-			</table>
-		</body>
-	</html>
-</xsl:template>
-
-<!-- overview of statistics in packages -->
-<xsl:template match="snapshot" mode="overview.packages">
-	<html>
-		<head>
-			<xsl:call-template name="create.stylesheet.link"/>
-		</head>
-		<body onload="open('allclasses-frame.html','classListFrame')">
-		<xsl:call-template name="pageHeader"/>
-		<h3>Summary</h3>
-		<table class="log" cellpadding="5" cellspacing="2" width="100%">
-			<tr>
-				<!--th width="10%" nowrap="nowrap">Date</th>
-				<th width="10%" nowrap="nowrap">Elapsed time</th-->
-				<th width="10%" nowrap="nowrap">Reported Classes</th>
-				<th width="10%" nowrap="nowrap">Methods Hit</th>
-				<th width="10%" nowrap="nowrap">Lines Hit</th>
-			</tr>
-			<tr class="a">
-				<!--td nowrap="nowrap"><xsl:value-of select="execution_log/@program_start"/></td>
-				<td><xsl:value-of select="format-number(execution_log/@elapsed_time div 1000,'0.0')"/>secs</td-->
-				<td><xsl:value-of select="count(package/class)"/></td>
-				<td><xsl:value-of select="format-number(cov.data/@hit_methods div cov.data/@total_methods,'0.0%')"/></td>
-				<td><xsl:value-of select="format-number(cov.data/@hit_lines div cov.data/@total_lines,'0.0%')"/></td>
-			</tr>
-		</table>
-		<table border="0" width="100%">
-		<tr>
-		<td	style="text-align: justify;">
-		To ensure accurate test runs on Java applications, developers need to know how much of
-		the code has been tested, and where to find any untested code. Coverage helps you
-		locate untested code, and measure precisely how much code has been exercised.
-		The result is a higher quality application in a shorter period of time.
-		<p/>
-		</td>
-		</tr>
-		</table>
-
-		<h3>Packages</h3>
-		<table class="log" cellpadding="5" cellspacing="2" width="100%">
-			<xsl:apply-templates select="package[1]" mode="stats.header"/>
-			<!-- display packages and sort them via their coverage rate -->
-			<xsl:for-each select="package">
-				<xsl:sort data-type="number" select="cov.data/@hit_lines div cov.data/@total_lines"/>
-				<tr>
-				  <xsl:call-template name="alternate-row"/>
-					<td><a href="{translate(@name,'.','/')}/package-summary.html"><xsl:value-of select="@name"/></a></td>
-					<td><xsl:value-of select="format-number(cov.data/@hit_methods div cov.data/@total_methods,'0.0%')"/></td>
-					<td><xsl:value-of select="format-number(cov.data/@hit_lines div cov.data/@total_lines,'0.0%')"/></td>
-				</tr>
-			</xsl:for-each>
-		</table>
-		<xsl:call-template name="pageFooter"/>
-		</body>
-		</html>
-</xsl:template>
-
-<!--
- detailed info for a package. It will output the list of classes
-, the summary page, and the info for each class
--->
-<xsl:template match="package" mode="write">
-	<xsl:variable name="package.dir">
-		<xsl:if test="not(@name = '')"><xsl:value-of select="translate(@name,'.','/')"/></xsl:if>
-		<xsl:if test="@name = ''">.</xsl:if>
-	</xsl:variable>
-
-	<!-- create a classes-list.html in the package directory -->
-	<redirect:write file="{$output.dir}/{$package.dir}/package-frame.html">
-		<xsl:apply-templates select="." mode="classes.list"/>
-	</redirect:write>
-	
-	<!-- create a package-summary.html in the package directory -->
-	<redirect:write file="{$output.dir}/{$package.dir}/package-summary.html">
-		<xsl:apply-templates select="." mode="package.summary"/>
-	</redirect:write>
-	
-	<!-- for each class, creates a @name.html -->
-	<xsl:for-each select="class">
-		<redirect:write file="{$output.dir}/{$package.dir}/{@name}.html">
-			<xsl:apply-templates select="." mode="class.details"/>
-		</redirect:write>
-	</xsl:for-each>
-</xsl:template>
-
-<!-- list of classes in a package -->
-<xsl:template match="package" mode="classes.list">
-	<html>
-		<HEAD>
-			<xsl:call-template name="create.stylesheet.link">
-				<xsl:with-param name="package.name" select="@name"/>
-			</xsl:call-template>
-		</HEAD>
-		<BODY>
-			<table width="100%">
-				<tr>
-					<td nowrap="nowrap">
-						<H2><a href="package-summary.html" target="classFrame"><xsl:value-of select="@name"/></a></H2>
-					</td>
-				</tr>
-			</table>
-	
-			<H2>Classes</H2>
-			<TABLE WIDTH="100%">
-				<xsl:for-each select="class">
-					<xsl:sort select="@name"/>
-					<tr>
-						<td nowrap="nowrap">
-							<a href="{@name}.html" target="classFrame"><xsl:value-of select="@name"/></a>
-						</td>
-					</tr>
-				</xsl:for-each>
-			</TABLE>
-		</BODY>
-	</html>
-</xsl:template>
-
-<!-- summary of a package -->
-<xsl:template match="package" mode="package.summary">
-	<HTML>
-		<HEAD>
-			<xsl:call-template name="create.stylesheet.link">
-				<xsl:with-param name="package.name" select="@name"/>
-			</xsl:call-template>
-		</HEAD>
-		<!-- when loading this package, it will open the classes into the frame -->
-		<BODY onload="open('package-frame.html','classListFrame')">
-			<xsl:call-template name="pageHeader"/>
-			<h3>Package <xsl:value-of select="@name"/></h3>			
-			<table class="log" cellpadding="5" cellspacing="2" width="100%">
-				<xsl:apply-templates select="." mode="stats.header"/>
-				<xsl:apply-templates select="." mode="stats"/>
-			</table>
-					
-			<xsl:if test="count(class) &gt; 0">
-				<H3>Classes</H3>
-				<table class="log" cellpadding="5" cellspacing="2" width="100%">
-					<xsl:apply-templates select="." mode="stats.header"/>
-					<xsl:apply-templates select="class" mode="stats">
-						<xsl:sort data-type="number" select="cov.data/@hit_lines div cov.data/@total_lines"/>
-					</xsl:apply-templates>
-				</table>
-			</xsl:if>
-			<xsl:call-template name="pageFooter"/>
-		</BODY>
-	</HTML>
-</xsl:template>
-
-<!-- details of a class -->
-<xsl:template match="class" mode="class.details">
-	<xsl:variable name="package.name" select="(ancestor::package)[last()]/@name"/>
-	<HTML>
-		<HEAD>
-			<xsl:call-template name="create.stylesheet.link">
-				<xsl:with-param name="package.name" select="$package.name"/>
-			</xsl:call-template>
-		</HEAD>
-		<BODY>
-			<xsl:call-template name="pageHeader"/>
-			<H3>Class <xsl:if test="not($package.name = '')"><xsl:value-of select="$package.name"/>.</xsl:if><xsl:value-of select="@name"/></H3>
-
-			<!-- class summary -->
-			<table class="log" cellpadding="5" cellspacing="2" width="100%">
-				<xsl:apply-templates select="." mode="stats.header"/>
-				<xsl:apply-templates select="." mode="stats"/>
-			</table>
-	
-			<!-- details of methods -->
-			<H3>Methods</H3>
-			<table class="log" cellpadding="5" cellspacing="2" width="100%">
-				<xsl:apply-templates select="method[1]" mode="stats.header"/>
-				<xsl:apply-templates select="method" mode="stats">
-					<xsl:sort data-type="number" select="cov.data/@hit_lines div cov.data/@total_lines"/>
-				</xsl:apply-templates>
-			</table>
-			<xsl:call-template name="pageFooter"/>
-		</BODY>
-	</HTML>
-
-</xsl:template>
-
-<!-- Page Header -->
-<xsl:template name="pageHeader">
-  <!-- jakarta logo -->
-  <table border="0" cellpadding="0" cellspacing="0" width="100%">
-  <tr>
-    <td class="bannercell" rowspan="2">
-      <a href="http://jakarta.apache.org/">
-      <img src="http://jakarta.apache.org/images/jakarta-logo.gif" alt="http://jakarta.apache.org" align="left" border="0"/>
-      </a>
-    </td>
-		<td style="text-align:right"><h2>Source Code Coverage</h2></td>
-		</tr>
-		<tr>
-		<td style="text-align:right">Designed for use with <a href='http://www.sitraka.com/jprobe'>Sitraka JProbe</a> and <a href='http://jakarta.apache.org'>Ant</a>.</td>
-		</tr>
-  </table>
-	<hr size="1"/>
-</xsl:template>
-
-<!-- Page Footer -->
-<xsl:template name="pageFooter">
-    <table width="100%">
-      <tr><td><hr noshade="yes" size="1"/></td></tr>
-      <tr><td>
-      <div align="center"><font color="#525D76" size="-1"><em>
-      Copyright &#169; 1999-2001, Apache Software Foundation
-      </em></font></div>
-      </td></tr>
-    </table>
-</xsl:template>
-
-
-<xsl:template name="table.header">
-	<tr>
-		<th width="80%">Name</th>
-		<th width="10%" nowrap="nowrap">Methods Hit</th>
-		<th width="10%" nowrap="nowrap">Lines Hit</th>
-	</tr>
-</xsl:template>
-
-<xsl:template match="method" mode="stats.header">
-	<tr>
-		<th width="90%">Name</th>
-		<th width="10%" nowrap="nowrap">Lines Hit</th>
-	</tr>
-</xsl:template>
-<xsl:template match="method" mode="stats">
-	<tr>
-	  <xsl:call-template name="alternate-row"/>
-		<td><xsl:value-of select="@name"/></td>
-		<td>
-		<xsl:value-of select="format-number(cov.data/@hit_lines div cov.data/@total_lines,'0.0%')"/>
-		</td>
-	</tr>
-</xsl:template>
-
-<xsl:template match="package|class" mode="stats.header">
-	<tr>
-		<th width="80%">Name</th>
-		<th width="10%" nowrap="nowrap">Methods Hit</th>
-		<th width="10%" nowrap="nowrap">Lines Hit</th>
-	</tr>
-</xsl:template>
-<xsl:template match="package|class" mode="stats">
-	<tr>
-	  <xsl:call-template name="alternate-row"/>
-		<td><xsl:value-of select="@name"/></td>
-		<td><xsl:value-of select="format-number(cov.data/@hit_methods div cov.data/@total_methods,'0.0%')"/></td>
-		<td><xsl:value-of select="format-number(cov.data/@hit_lines div cov.data/@total_lines,'0.0%')"/></td>
-	</tr>
-</xsl:template>
-
-<!--
-    transform string like a.b.c to ../../../
-    @param path the path to transform into a descending directory path
--->
-<xsl:template name="path">
-	<xsl:param name="path"/>
-	<xsl:if test="contains($path,'.')">
-		<xsl:text>../</xsl:text>
-		<xsl:call-template name="path">
-			<xsl:with-param name="path"><xsl:value-of select="substring-after($path,'.')"/></xsl:with-param>
-		</xsl:call-template>
-	</xsl:if>
-	<xsl:if test="not(contains($path,'.')) and not($path = '')">
-		<xsl:text>../</xsl:text>
-	</xsl:if>
-</xsl:template>
-
-
-<!-- create the link to the stylesheet based on the package name -->
-<xsl:template name="create.stylesheet.link">
-	<xsl:param name="package.name"/>
-	<LINK REL ="stylesheet" TYPE="text/css" TITLE="Style"><xsl:attribute name="href"><xsl:if test="not($package.name = 'unnamed package')"><xsl:call-template name="path"><xsl:with-param name="path" select="$package.name"/></xsl:call-template></xsl:if>stylesheet.css</xsl:attribute></LINK>
-</xsl:template>
-
-<!-- alternated row style -->
-<xsl:template name="alternate-row">
-<xsl:attribute name="class">
-  <xsl:if test="position() mod 2 = 1">a</xsl:if>
-  <xsl:if test="position() mod 2 = 0">b</xsl:if>
-</xsl:attribute>
-</xsl:template>
-
-</xsl:stylesheet>
-
-
diff --git a/src/etc/jdepend-frames.xsl b/src/etc/jdepend-frames.xsl
deleted file mode 100644
index 5c73a11..0000000
--- a/src/etc/jdepend-frames.xsl
+++ /dev/null
@@ -1,522 +0,0 @@
-<xsl:stylesheet  xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
-  xmlns:lxslt="http://xml.apache.org/xslt"
-  xmlns:redirect="org.apache.xalan.xslt.extensions.Redirect"
-  extension-element-prefixes="redirect">
-<xsl:output method="html" indent="yes" encoding="US-ASCII"/>
-<!--
- The Apache Software License, Version 1.1
-
- Copyright (c) 2002 The Apache Software Foundation.  All rights
- reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- 1. Redistributions of source code must retain the above copyright
-    notice, this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in
-    the documentation and/or other materials provided with the
-    distribution.
-
- 3. The end-user documentation included with the redistribution, if
-    any, must include the following acknowlegement:
-       "This product includes software developed by the
-        Apache Software Foundation (http://www.apache.org/)."
-    Alternately, this acknowlegement may appear in the software itself,
-    if and wherever such third-party acknowlegements normally appear.
-
- 4. The names "The Jakarta Project", "Ant", and "Apache Software
-    Foundation" must not be used to endorse or promote products derived
-    from this software without prior written permission. For written
-    permission, please contact apache@apache.org.
-
- 5. Products derived from this software may not be called "Apache"
-    nor may "Apache" appear in their names without prior written
-    permission of the Apache Group.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
- ====================================================================
-
- This software consists of voluntary contributions made by many
- individuals on behalf of the Apache Software Foundation.  For more
- information on the Apache Software Foundation, please see
- <http://www.apache.org/>.
- -->
-<!--
-
- Sample stylesheet to be used with JDepend XML output.
- 
- It creates a set of HTML files a la javadoc where you can browse easily
- through all packages and classes.
- 
- @author <a href="mailto:jtulley@novell.com">Jeff Tulley</a>
-
-  -->
-<xsl:param name="output.dir" select="'.'"/>
-
-<xsl:template match="JDepend">
-   <!-- create the index.html -->
-   <redirect:write file="{$output.dir}/index.html">
-      <xsl:call-template name="index.html"/>
-   </redirect:write>
-
-  <!-- create the stylesheet.css -->
-  <redirect:write file="{$output.dir}/stylesheet.css">
-    <xsl:call-template name="stylesheet.css"/>
-   </redirect:write>
-
-   <!-- create the overview-packages.html at the root -->
-  <redirect:write file="{$output.dir}/overview-summary.html">
-    <xsl:apply-templates select="." mode="overview.packages"/>
-  </redirect:write>
-
-   <!-- create the overview-packages.html at the root -->
-   <redirect:write file="{$output.dir}/overview-packages.html">
-    <xsl:apply-templates select="." mode="packages.details"/>
-  </redirect:write>
-
-   <!-- create the overview-cycles.html at the root -->
-   <redirect:write file="{$output.dir}/overview-cycles.html">
-    <xsl:apply-templates select="." mode="cycles.details"/>
-  </redirect:write>
-
-   <!-- create the overview-cycles.html at the root -->
-   <redirect:write file="{$output.dir}/overview-explanations.html">
-    <xsl:apply-templates select="." mode="explanations"/>
-  </redirect:write>
-
-  <!-- create the all-packages.html at the root -->
-   <redirect:write file="{$output.dir}/all-packages.html">
-    <xsl:apply-templates select="Packages" mode="all.packages"/>
-  </redirect:write>
-  
-  <!-- create the all-cycles.html at the root -->
-  <redirect:write file="{$output.dir}/all-cycles.html">
-    <xsl:apply-templates select="Cycles" mode="all.cycles"/>
-  </redirect:write>
-</xsl:template>
-
-
-<xsl:template name="index.html">
-<html>
-   <head>
-      <title>JDepend Analysis</title>
-   </head>
-      <frameset cols="20%,80%">
-         <frameset rows="30%,70%">
-            <frame src="all-packages.html" name="packageListFrame"/>
-            <frame src="all-cycles.html" name="classListFrame"/>
-         </frameset>
-         <frame src="overview-summary.html" name="classFrame"/>
-      </frameset>
-      <noframes>
-         <h2>Frame Alert</h2>
-         <p>
-            This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client.
-         </p>
-      </noframes>
-</html>
-</xsl:template>
-
-<!-- this is the stylesheet css to use for nearly everything -->
-<xsl:template name="stylesheet.css">
-   <style type="text/css">
-    body {
-    font:normal 68% verdana,arial,helvetica;
-    color:#000000;
-    }
-    table tr td, tr th {
-      font-size: 68%;
-    }
-    table.details tr th{
-    font-weight: bold;
-    text-align:left;
-    background:#a6caf0;
-    }
-    table.details tr td{
-    background:#eeeee0;
-    }
-    
-    p {
-    line-height:1.5em;
-    margin-top:0.5em; margin-bottom:1.0em;
-    margin-left:2em;
-    margin-right:2em;
-    }
-    h1 {
-    margin: 0px 0px 5px; font: 165% verdana,arial,helvetica
-    }
-    h2 {
-    margin-top: 1em; margin-bottom: 0.5em; font: bold 125% verdana,arial,helvetica
-    }
-    h3 {
-    margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica
-    }
-    h4 {
-    margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
-    }
-    h5 {
-    margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
-    }
-    h6 {
-    margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
-    }
-    .Error {
-    font-weight:bold; color:red;
-    }
-    .Failure {
-    font-weight:bold; color:purple;
-    }
-    .Properties {
-    text-align:right;
-    }
-  </style>
-</xsl:template>
-
-<xsl:template match="JDepend" mode="overview.packages">
-   <html>
-      <head>
-         <link rel="stylesheet" type="text/css" href="stylesheet.css"/>
-      </head>
-      <body>
-         <xsl:call-template name="pageHeader"/>
-  <table width="100%"><tr align="left"><h2>Summary</h2><td>
-  </td><td align="right">
-  [summary]
-  [<a href="overview-packages.html">packages</a>]
-  [<a href="overview-cycles.html">cycles</a>]
-  [<a href="overview-explanations.html">explanations</a>]
-   </td></tr></table>
-         <table width="100%" class="details">
-            <tr>
-               <th>Package</th>
-               <th>Total Classes</th>
-               <th><a href="overview-explanations.html#EXnumber">Abstract Classes</a></th>
-               <th><a href="overview-explanations.html#EXnumber">Concrete Classes</a></th>
-               <th><a href="overview-explanations.html#EXafferent">Afferent Couplings</a></th>
-               <th><a href="overview-explanations.html#EXefferent">Efferent Couplings</a></th>
-               <th><a href="overview-explanations.html#EXabstractness">Abstractness</a></th>
-               <th><a href="overview-explanations.html#EXinstability">Instability</a></th>
-               <th><a href="overview-explanations.html#EXdistance">Distance</a></th>
-      
-            </tr>
-            <xsl:for-each select="./Packages/Package">
-               <xsl:if test="count(error) = 0">
-                  <tr>
-                     <td align="left">
-                        <a>
-                           <xsl:attribute name="href">overview-packages.html#PK<xsl:value-of select="@name"/>
-                           </xsl:attribute>
-                           <xsl:value-of select="@name"/>
-                        </a>
-                     </td>
-                     <td align="right"><xsl:value-of select="Stats/TotalClasses"/></td>
-                     <td align="right"><xsl:value-of select="Stats/AbstractClasses"/></td>
-                     <td align="right"><xsl:value-of select="Stats/ConcreteClasses"/></td>
-                     <td align="right"><xsl:value-of select="Stats/Ca"/></td>
-                     <td align="right"><xsl:value-of select="Stats/Ce"/></td>
-                     <td align="right"><xsl:value-of select="Stats/A"/></td>
-                     <td align="right"><xsl:value-of select="Stats/I"/></td>
-                     <td align="right"><xsl:value-of select="Stats/D"/></td>
-                  </tr>
-               </xsl:if>
-            </xsl:for-each>
-            <xsl:for-each select="./Packages/Package">
-               <xsl:if test="count(error) &gt; 0">
-                  <tr>
-                     <td align="left">
-                        <xsl:value-of select="@name"/>
-                     </td>
-                     <td align="left" colspan="8"><xsl:value-of select="error"/></td>
-                  </tr>
-               </xsl:if>
-            </xsl:for-each>
-         </table>
-      </body>
-   </html>
-</xsl:template>
-
-<xsl:template match="JDepend" mode="packages.details">
-   <html>
-      <head>
-          <link rel="stylesheet" type="text/css" href="stylesheet.css"/>
-      </head>
-      <body>
-         <xsl:call-template name="pageHeader"/>
-  <table width="100%"><tr align="left"><h2>Packages</h2><td>
-  </td><td align="right">
-  [<a href="overview-summary.html">summary</a>]
-  [packages]
-  [<a href="overview-cycles.html">cycles</a>]
-  [<a href="overview-explanations.html">explanations</a>]
-   </td></tr></table>
-  
-  <xsl:for-each select="./Packages/Package">
-    <xsl:if test="count(error) = 0">
-      <h3><a><xsl:attribute name="name">PK<xsl:value-of select="@name"/></xsl:attribute>
-      <xsl:value-of select="@name"/></a></h3>
-      
-      <table width="100%"><tr>
-        <td><a href="overview-explanations.html#EXafferent">Afferent Couplings</a>: <xsl:value-of select="Stats/Ca"/></td>
-        <td><a href="overview-explanations.html#EXefferent">Efferent Couplings</a>: <xsl:value-of select="Stats/Ce"/></td>
-        <td><a href="overview-explanations.html#EXabstractness">Abstractness</a>: <xsl:value-of select="Stats/A"/></td>
-        <td><a href="overview-explanations.html#EXinstability">Instability</a>: <xsl:value-of select="Stats/I"/></td>
-        <td><a href="overview-explanations.html#EXdistance">Distance</a>: <xsl:value-of select="Stats/D"/></td>
-      </tr></table>
-      
-      <table width="100%" class="details">
-        <tr>
-          <th>Abstract Classes</th>
-          <th>Concrete Classes</th>
-          <th>Used by Packages</th>
-          <th>Uses Packages</th>
-        </tr>
-        <tr>
-          <td valign="top" width="25%">
-          <xsl:if test="count(AbstractClasses/Class)=0">
-              <i>None</i>
-            </xsl:if>
-            <xsl:for-each select="AbstractClasses/Class">
-              <xsl:value-of select="node()"/><br/>
-            </xsl:for-each>
-          </td>
-          <td valign="top" width="25%">
-            <xsl:if test="count(ConcreteClasses/Class)=0">
-              <i>None</i>
-            </xsl:if>
-            <xsl:for-each select="ConcreteClasses/Class">
-              <xsl:value-of select="node()"/><br/>
-            </xsl:for-each>
-          </td>
-          <td valign="top" width="25%">
-            <xsl:if test="count(UsedBy/Package)=0">
-              <i>None</i>
-            </xsl:if>
-            <xsl:for-each select="UsedBy/Package">
-              <a>
-                        <xsl:attribute name="href">overview-packages.html#PK<xsl:value-of select="node()"/></xsl:attribute>
-                <xsl:value-of select="node()"/>
-              </a><br/>
-            </xsl:for-each>
-          </td>
-          <td valign="top" width="25%">
-            <xsl:if test="count(DependsUpon/Package)=0">
-              <i>None</i>
-            </xsl:if>
-            <xsl:for-each select="DependsUpon/Package">
-              <a>
-                        <xsl:attribute name="href">overview-packages.html#PK<xsl:value-of select="node()"/></xsl:attribute>
-                <xsl:value-of select="node()"/>
-              </a><br/>
-            </xsl:for-each>
-          </td>
-        </tr>
-      </table>
-    </xsl:if>
-  </xsl:for-each>
-  <!-- this is often a long listing; provide a lower navigation table also -->
-  <table width="100%"><tr align="left"><td></td><td align="right">
-  [<a href="overview-summary.html">summary</a>]
-  [packages]
-  [<a href="overview-cycles.html">cycles</a>]
-  [<a href="overview-explanations.html">explanations</a>]
-   </td></tr></table>
-      </body>
-   </html>
-</xsl:template>
-
-<xsl:template match="JDepend" mode="cycles.details">
-   <html>
-      <head>
-         <link rel="stylesheet" type="text/css" href="stylesheet.css"/>
-      </head>
-      <body>
-         <xsl:call-template name="pageHeader"/>
-  <table width="100%"><tr align="left"><h2>Cycles</h2><td>
-  </td><td align="right">
-  [<a href="overview-summary.html">summary</a>]
-  [<a href="overview-packages.html">packages</a>]
-  [cycles]
-  [<a href="overview-explanations.html">explanations</a>]
-   </td></tr></table>
-  <!--<table width="100%"><tr><td>
-  </td><td align="right">
-    [<a href="#NVsummary">summary</a>]
-  [<a href="#NVpackages">packages</a>]
-  [<a href="#NVcycles">cycles</a>]
-   [<a href="#NVexplanations">explanations</a>]
-  </td></tr></table> -->
-  
-  <xsl:if test="count(Cycles/Package) = 0">
-    <p>There are no cyclic dependancies.</p>
-  </xsl:if>
-  <xsl:for-each select="Cycles/Package">
-     <h3><a><xsl:attribute name="name">#CY<xsl:value-of select="@Name"/></xsl:attribute><xsl:value-of select="@Name"/></a></h3><p>
-    <xsl:for-each select="Package">
-      <xsl:value-of select="."/><br/>
-    </xsl:for-each></p>
-  </xsl:for-each>
-  <!-- this is often a long listing; provide a lower navigation table also -->
-  <table width="100%"><tr align="left"><td></td><td align="right">
-  [<a href="overview-summary.html">summary</a>]
-  [<a href="overview-packages.html">packages</a>]
-  [cycles]
-  [<a href="overview-explanations.html">explanations</a>]
-   </td></tr></table>
-  </body>
-  </html>
-</xsl:template>
-    
-<xsl:template match="JDepend" mode="explanations">
-   <html>
-      <head>
-         <link rel="stylesheet" type="text/css" href="stylesheet.css"/>
-      </head>
-      <body>
-         <xsl:call-template name="pageHeader"/>
-
-  <table width="100%"><tr align="left"><h2>Explanations</h2><td>
-  </td><td align="right">
-  [<a href="overview-summary.html">summary</a>]
-  [<a href="overview-packages.html">packages</a>]
-  [<a href="overview-cycles.html">cycles</a>]
-  [explanations]
-   </td></tr></table>
-  
-  <p>The following explanations are for quick reference and are lifted directly from the original <a href="http://www.clarkware.com/software/JDepend.html">JDepend documentation</a>.</p>
-  
-  <h3><a name="EXnumber">Number of Classes</a></h3>
-    <p>The number of concrete and abstract classes (and interfaces) in the package is an indicator of the extensibility of the package.</p>
-  <h3><a name="EXafferent">Afferent Couplings</a></h3>
-    <p>The number of other packages that depend upon classes within the package is an indicator of the package's responsibility. </p>
-  <h3><a name="EXefferent">Efferent Couplings</a></h3>
-    <p>The number of other packages that the classes in the package depend upon is an indicator of the package's independence. </p>
-  <h3><a name="EXabstractness">Abstractness</a></h3> 
-    <p>The ratio of the number of abstract classes (and interfaces) in the analyzed package to the total number of classes in the analyzed package. </p>
-    <p>The range for this metric is 0 to 1, with A=0 indicating a completely concrete package and A=1 indicating a completely abstract package. </p>
-  <h3><a name="EXinstability">Instability</a></h3>
-    <p>The ratio of efferent coupling (Ce) to total coupling (Ce / (Ce + Ca)). This metric is an indicator of the package's resilience to change. </p>
-    <p>The range for this metric is 0 to 1, with I=0 indicating a completely stable package and I=1 indicating a completely instable package. </p>
-  <h3><a name="EXdistance">Distance</a></h3>
-    <p>The perpendicular distance of a package from the idealized line A + I = 1. This metric is an indicator of the package's balance between abstractness and stability. </p>
-    <p>A package squarely on the main sequence is optimally balanced with respect to its abstractness and stability. Ideal packages are either completely abstract and stable (x=0, y=1) or completely concrete and instable (x=1, y=0). </p>
-    <p>The range for this metric is 0 to 1, with D=0 indicating a package that is coincident with the main sequence and D=1 indicating a package that is as far from the main sequence as possible. </p>
-  
-      </body>
-   </html>
-</xsl:template>
-  
-  
-<!--
-Creates an html file that contains a link to all package links in overview-packages.html.
-  @bug there will be a problem here, I don't know yet how to handle unnamed package :(
--->
-<xsl:template match="JDepend/Packages" mode="all.packages">
-  <html>
-    <head>
-      <link rel="stylesheet" type="text/css" href="stylesheet.css"/>
-    </head>
-    <body>
-  <table width="100%"><tr align="left"><td></td><td nowrap="nowrap" align="right">
-  [<a href="overview-summary.html" target="classFrame">summary</a>]
-  [<a href="overview-packages.html" target="classFrame">packages</a>]
-  [<a href="overview-cycles.html" target="classFrame">cycles</a>]
-  [<a href="overview-explanations.html" target="classFrame">explanations</a>]
-   </td></tr></table>
-      <h2>Packages</h2>
-        <table width="100%">
-          <xsl:apply-templates select="Package[count(error)=0]" mode="all.packages.link">
-            <xsl:sort select="@name"/>
-          </xsl:apply-templates>
-          <xsl:apply-templates select="Package[count(error) &gt; 0]" mode="all.packages.nolink">
-            <xsl:sort select="@name"/>
-          </xsl:apply-templates>
-        </table>
-    </body>
-  </html>
-</xsl:template>
-
-<xsl:template match="JDepend/Packages/Package" mode="all.packages.link">
-  <tr>
-    <td nowrap="nowrap">
-         <a href="overview-packages.html#PK{@name}" target="classFrame">
-        <xsl:value-of select="@name"/>
-      </a>
-    </td>
-  </tr>
-</xsl:template>
-
-<!--
-I do not know JDepend enough to know if every error results in a non-analyzed package,
-but that is how I am presenting it to the viewer.  This may need to change.
-  @bug there will be a problem here, I don't know yet how to handle unnamed package :(
--->
-<xsl:template match="JDepend/Packages/Package" mode="all.packages.nolink">
-  <tr>
-    <td nowrap="nowrap">
-       Not Analyzed: <xsl:value-of select="@name"/>
-    </td>
-  </tr>
-</xsl:template>
-
-<!--
-Creates an html file that contains a link to all package links in overview-cycles.html.
-  @bug there will be a problem here, I don't know yet how to handle unnamed package :(
--->
-<xsl:template match="JDepend/Cycles" mode="all.cycles">
-  <html>
-    <head>
-      <link rel="stylesheet" type="text/css" href="stylesheet.css"/>
-    </head>
-    <body>
-  <table width="100%"><tr align="left"><td></td><td nowrap="nowrap" align="right">
-  [<a href="overview-summary.html" target="classFrame">summary</a>]
-  [<a href="overview-packages.html" target="classFrame">packages</a>]
-  [<a href="overview-cycles.html" target="classFrame">cycles</a>]
-  [<a href="overview-explanations.html" target="classFrame">explanations</a>]
-   </td></tr></table>
-      <h2>Cycles</h2>
-        <table width="100%">
-           <xsl:apply-templates select="Package" mode="all.cycles">
-            <xsl:sort select="@Name"/>
-          </xsl:apply-templates>
-        </table>
-    </body>
-  </html>
-</xsl:template>
-
-<xsl:template match="JDepend/Cycles/Package" mode="all.cycles">
-  <tr>
-    <td nowrap="nowrap">
-         <a href="overview-cycles.html#CY{@Name}" target="classFrame"><xsl:value-of select="@Name"/></a>
-    </td>
-  </tr>
-</xsl:template>
-    
-<!-- Page HEADER -->
-<xsl:template name="pageHeader">
-   <h1>JDepend Analysis</h1>
-  <table width="100%">
-  <tr>
-    <td align="left"></td>
-      <td align="right">Designed for use with <a href="http://www.clarkware.com/software/JDepend.html">JDepend</a> and <a href="http://jakarta.apache.org">Ant</a>.</td>
-  </tr>
-  </table>
-  <hr size="1"/>
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/src/etc/jdepend.xsl b/src/etc/jdepend.xsl
deleted file mode 100644
index 64d981f..0000000
--- a/src/etc/jdepend.xsl
+++ /dev/null
@@ -1,312 +0,0 @@
-<xsl:stylesheet	xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
-
-<!--
- The Apache Software License, Version 1.1
-
- Copyright (c) 2002 The Apache Software Foundation.  All rights
- reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- 1. Redistributions of source code must retain the above copyright
-    notice, this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in
-    the documentation and/or other materials provided with the
-    distribution.
-
- 3. The end-user documentation included with the redistribution, if
-    any, must include the following acknowlegement:
-       "This product includes software developed by the
-        Apache Software Foundation (http://www.apache.org/)."
-    Alternately, this acknowlegement may appear in the software itself,
-    if and wherever such third-party acknowlegements normally appear.
-
- 4. The names "The Jakarta Project", "Ant", and "Apache Software
-    Foundation" must not be used to endorse or promote products derived
-    from this software without prior written permission. For written
-    permission, please contact apache@apache.org.
-
- 5. Products derived from this software may not be called "Apache"
-    nor may "Apache" appear in their names without prior written
-    permission of the Apache Group.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
- ====================================================================
-
- This software consists of voluntary contributions made by many
- individuals on behalf of the Apache Software Foundation.  For more
- information on the Apache Software Foundation, please see
- <http://www.apache.org/>.
- -->
-
-<xsl:output method="html" indent="yes"  encoding="US-ASCII"/>
-
-<xsl:template match="JDepend">
-	<html>
-	<head>
-		<title>JDepend Analysis</title>
-		
-	<style type="text/css">
-	  body {
-		font:normal 68% verdana,arial,helvetica;
-		color:#000000;
-	  }
-	  table tr td, tr th {
-		  font-size: 68%;
-	  }
-	  table.details tr th{
-		font-weight: bold;
-		text-align:left;
-		background:#a6caf0;
-	  }
-	  table.details tr td{
-		background:#eeeee0;
-	  }
-	  
-	  p {
-		line-height:1.5em;
-		margin-top:0.5em; margin-bottom:1.0em;
-		margin-left:2em;
-		margin-right:2em;
-	  }
-	  h1 {
-		margin: 0px 0px 5px; font: 165% verdana,arial,helvetica
-	  }
-	  h2 {
-		margin-top: 1em; margin-bottom: 0.5em; font: bold 125% verdana,arial,helvetica
-	  }
-	  h3 {
-		margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica
-	  }
-	  h4 {
-		margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
-	  }
-	  h5 {
-		margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
-	  }
-	  h6 {
-		margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
-	  }
-	  .Error {
-		font-weight:bold; color:red;
-	  }
-	  .Failure {
-		font-weight:bold; color:purple;
-	  }
-	  .Properties {
-		text-align:right;
-	  }
-	  </style>
-		
-		
-	</head>
-	<body>
-	<!--h1>JDepend Report</h1>
-	<ul>
-	<xsl:for-each select="./Packages/Package">
-				<xsl:sort select="@name"/>
-		<li><xsl:value-of select="@name"/></li>
-	</xsl:for-each>
-	</ul-->
-	
-	<h1><a name="top">JDepend Analysis</a></h1>
-	<p align="right">Designed for use with <a href="http://www.clarkware.com/software/JDepend.html">JDepend</a> and <a href="http://jakarta.apache.org">Ant</a>.</p>
-	<hr size="2" />
-	
-	<table width="100%"><tr><td>
-	<a name="NVsummary"><h2>Summary</h2></a>
-	</td><td align="right">
-	[<a href="#NVsummary">summary</a>]
-	[<a href="#NVpackages">packages</a>]
-	[<a href="#NVcycles">cycles</a>]
-	[<a href="#NVexplanations">explanations</a>]
-	</td></tr></table>
-	
-	<table width="100%" class="details">
-		<tr>
-			<th>Package</th>
-			<th>Total Classes</th>
-			<th><a href="#EXnumber">Abstract Classes</a></th>
-			<th><a href="#EXnumber">Concrete Classes</a></th>
-			<th><a href="#EXafferent">Afferent Couplings</a></th>
-			<th><a href="#EXefferent">Efferent Couplings</a></th>
-			<th><a href="#EXabstractness">Abstractness</a></th>
-			<th><a href="#EXinstability">Instability</a></th>
-			<th><a href="#EXdistance">Distance</a></th>
-			
-		</tr>
-	<xsl:for-each select="./Packages/Package">
-		<xsl:if test="count(error) = 0">
-			<tr>
-				<td align="left">
-					<a>
-					<xsl:attribute name="href">#PK<xsl:value-of select="@name"/>
-					</xsl:attribute>
-					<xsl:value-of select="@name"/>
-					</a>
-				</td>
-				<td align="right"><xsl:value-of select="Stats/TotalClasses"/></td>
-				<td align="right"><xsl:value-of select="Stats/AbstractClasses"/></td>
-				<td align="right"><xsl:value-of select="Stats/ConcreteClasses"/></td>
-				<td align="right"><xsl:value-of select="Stats/Ca"/></td>
-				<td align="right"><xsl:value-of select="Stats/Ce"/></td>
-				<td align="right"><xsl:value-of select="Stats/A"/></td>
-				<td align="right"><xsl:value-of select="Stats/I"/></td>
-				<td align="right"><xsl:value-of select="Stats/D"/></td>
-				
-
-			</tr>
-		</xsl:if>
-	</xsl:for-each>
-	<xsl:for-each select="./Packages/Package">
-		<xsl:if test="count(error) &gt; 0">
-			<tr>
-				<td align="left">
-					<xsl:value-of select="@name"/>
-				</td>
-				<td align="left" colspan="8"><xsl:value-of select="error"/></td>
-			</tr>
-		</xsl:if>
-	</xsl:for-each>
-	</table>
-	
-	<table width="100%"><tr><td>
-	<a name="NVpackages"><h2>Packages</h2></a>
-	</td><td align="right">
-	[<a href="#NVsummary">summary</a>]
-	[<a href="#NVpackages">packages</a>]
-	[<a href="#NVcycles">cycles</a>]
-	[<a href="#NVexplanations">explanations</a>]
-	</td></tr></table>
-	
-	<xsl:for-each select="./Packages/Package">
-		<xsl:if test="count(error) = 0">
-			<h3><a><xsl:attribute name="name">PK<xsl:value-of select="@name"/></xsl:attribute>
-			<xsl:value-of select="@name"/></a></h3>
-			
-			<table width="100%"><tr>
-				<td><a href="#EXafferent">Afferent Couplings</a>: <xsl:value-of select="Stats/Ca"/></td>
-				<td><a href="#EXefferent">Efferent Couplings</a>: <xsl:value-of select="Stats/Ce"/></td>
-				<td><a href="#EXabstractness">Abstractness</a>: <xsl:value-of select="Stats/A"/></td>
-				<td><a href="#EXinstability">Instability</a>: <xsl:value-of select="Stats/I"/></td>
-				<td><a href="#EXdistance">Distance</a>: <xsl:value-of select="Stats/D"/></td>
-			</tr></table>
-			
-			<table width="100%" class="details">
-				<tr>
-					<th>Abstract Classes</th>
-					<th>Concrete Classes</th>
-					<th>Used by Packages</th>
-					<th>Uses Packages</th>
-				</tr>
-				<tr>
-					<td valign="top" width="25%">
-					<xsl:if test="count(AbstractClasses/Class)=0">
-							<i>None</i>
-						</xsl:if>
-						<xsl:for-each select="AbstractClasses/Class">
-							<xsl:value-of select="node()"/><br/>
-						</xsl:for-each>
-					</td>
-					<td valign="top" width="25%">
-						<xsl:if test="count(ConcreteClasses/Class)=0">
-							<i>None</i>
-						</xsl:if>
-						<xsl:for-each select="ConcreteClasses/Class">
-							<xsl:value-of select="node()"/><br/>
-						</xsl:for-each>
-					</td>
-					<td valign="top" width="25%">
-						<xsl:if test="count(UsedBy/Package)=0">
-							<i>None</i>
-						</xsl:if>
-						<xsl:for-each select="UsedBy/Package">
-							<a>
-								<xsl:attribute name="href">#PK<xsl:value-of select="node()"/></xsl:attribute>
-								<xsl:value-of select="node()"/>
-							</a><br/>
-						</xsl:for-each>
-					</td>
-					<td valign="top" width="25%">
-						<xsl:if test="count(DependsUpon/Package)=0">
-							<i>None</i>
-						</xsl:if>
-						<xsl:for-each select="DependsUpon/Package">
-							<a>
-								<xsl:attribute name="href">#PK<xsl:value-of select="node()"/></xsl:attribute>
-								<xsl:value-of select="node()"/>
-							</a><br/>
-						</xsl:for-each>
-					</td>
-				</tr>
-			</table>
-		</xsl:if>
-	</xsl:for-each>
-	
-	<table width="100%"><tr><td>
-	<a name="NVcycles"><h2>Cycles</h2></a>
-	</td><td align="right">
-	[<a href="#NVsummary">summary</a>]
-	[<a href="#NVpackages">packages</a>]
-	[<a href="#NVcycles">cycles</a>]
-	[<a href="#NVexplanations">explanations</a>]
-	</td></tr></table>
-	
-	<xsl:if test="count(Cycles/Package) = 0">
-		<p>There are no cyclic dependancies.</p>
-	</xsl:if>
-	<xsl:for-each select="Cycles/Package">
-		<h3><xsl:value-of select="@Name"/></h3><p>
-		<xsl:for-each select="Package">
-			<xsl:value-of select="."/><br/>
-		</xsl:for-each></p>
-	</xsl:for-each>
-	
-	<table width="100%"><tr><td>
-	<a name="NVexplanations"><h2>Explanations</h2></a>
-	</td><td align="right">
-	[<a href="#NVsummary">summary</a>]
-	[<a href="#NVpackages">packages</a>]
-	[<a href="#NVcycles">cycles</a>]
-	[<a href="#NVexplanations">explanations</a>]
-	</td></tr></table>
-	
-	<p>The following explanations are for quick reference and are lifted directly from the original <a href="http://www.clarkware.com/software/JDepend.html">JDepend documentation</a>.</p>
-	
-	<h3><a name="EXnumber">Number of Classes</a></h3>
-		<p>The number of concrete and abstract classes (and interfaces) in the package is an indicator of the extensibility of the package.</p>
-	<h3><a name="EXafferent">Afferent Couplings</a></h3>
-		<p>The number of other packages that depend upon classes within the package is an indicator of the package's responsibility. </p>
-	<h3><a name="EXefferent">Efferent Couplings</a></h3>
-		<p>The number of other packages that the classes in the package depend upon is an indicator of the package's independence. </p>
-	<h3><a name="EXabstractness">Abstractness</a></h3> 
-		<p>The ratio of the number of abstract classes (and interfaces) in the analyzed package to the total number of classes in the analyzed package. </p>
-		<p>The range for this metric is 0 to 1, with A=0 indicating a completely concrete package and A=1 indicating a completely abstract package. </p>
-	<h3><a name="EXinstability">Instability</a></h3>
-		<p>The ratio of efferent coupling (Ce) to total coupling (Ce / (Ce + Ca)). This metric is an indicator of the package's resilience to change. </p>
-		<p>The range for this metric is 0 to 1, with I=0 indicating a completely stable package and I=1 indicating a completely instable package. </p>
-	<h3><a name="EXdistance">Distance</a></h3>
-		<p>The perpendicular distance of a package from the idealized line A + I = 1. This metric is an indicator of the package's balance between abstractness and stability. </p>
-		<p>A package squarely on the main sequence is optimally balanced with respect to its abstractness and stability. Ideal packages are either completely abstract and stable (x=0, y=1) or completely concrete and instable (x=1, y=0). </p>
-		<p>The range for this metric is 0 to 1, with D=0 indicating a package that is coincident with the main sequence and D=1 indicating a package that is as far from the main sequence as possible. </p>
-	
-	</body>
-	</html>
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/src/etc/junit-frames.xsl b/src/etc/junit-frames.xsl
deleted file mode 100644
index 8b4e5bc..0000000
--- a/src/etc/junit-frames.xsl
+++ /dev/null
@@ -1,743 +0,0 @@
-<xsl:stylesheet	xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
-	xmlns:lxslt="http://xml.apache.org/xslt"
-	xmlns:redirect="org.apache.xalan.xslt.extensions.Redirect"
-	extension-element-prefixes="redirect">
-<xsl:output method="html" indent="yes" encoding="US-ASCII"/>
-<xsl:decimal-format decimal-separator="." grouping-separator=","/>
-<!--
- The Apache Software License, Version 1.1
-
- Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- 1. Redistributions of source code must retain the above copyright
-    notice, this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in
-    the documentation and/or other materials provided with the
-    distribution.
-
- 3. The end-user documentation included with the redistribution, if
-    any, must include the following acknowlegement:
-       "This product includes software developed by the
-        Apache Software Foundation (http://www.apache.org/)."
-    Alternately, this acknowlegement may appear in the software itself,
-    if and wherever such third-party acknowlegements normally appear.
-
- 4. The names "The Jakarta Project", "Ant", and "Apache Software
-    Foundation" must not be used to endorse or promote products derived
-    from this software without prior written permission. For written
-    permission, please contact apache@apache.org.
-
- 5. Products derived from this software may not be called "Apache"
-    nor may "Apache" appear in their names without prior written
-    permission of the Apache Group.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
- ====================================================================
-
- This software consists of voluntary contributions made by many
- individuals on behalf of the Apache Software Foundation.  For more
- information on the Apache Software Foundation, please see
- <http://www.apache.org/>.
- -->
-
-<!--
- 
- Sample stylesheet to be used with An JUnitReport output.
- 
- It creates a set of HTML files a la javadoc where you can browse easily
- through all packages and classes.
- 
- @author Stephane Bailliez <a href="mailto:sbailliez@apache.org"/>
- @author Erik Hatcher <a href="mailto:ehatcher@apache.org"/>
- 
--->
-<xsl:param name="output.dir" select="'.'"/>
-
-
-<xsl:template match="testsuites">
-	<!-- create the index.html -->
-	<redirect:write file="{$output.dir}/index.html">
-		<xsl:call-template name="index.html"/>
-	</redirect:write>
-
-	<!-- create the stylesheet.css -->
-	<redirect:write file="{$output.dir}/stylesheet.css">
-		<xsl:call-template name="stylesheet.css"/>
-	</redirect:write>
-
-	<!-- create the overview-packages.html at the root -->
-	<redirect:write file="{$output.dir}/overview-summary.html">
-		<xsl:apply-templates select="." mode="overview.packages"/>
-	</redirect:write>
-
-	<!-- create the all-packages.html at the root -->
-	<redirect:write file="{$output.dir}/overview-frame.html">
-		<xsl:apply-templates select="." mode="all.packages"/>
-	</redirect:write>
-	
-	<!-- create the all-classes.html at the root -->
-	<redirect:write file="{$output.dir}/allclasses-frame.html">
-		<xsl:apply-templates select="." mode="all.classes"/>
-	</redirect:write>
-	
-	<!-- process all packages -->
-	<xsl:for-each select="./testsuite[not(./@package = preceding-sibling::testsuite/@package)]">
-		<xsl:call-template name="package">
-			<xsl:with-param name="name" select="@package"/>
-		</xsl:call-template>
-	</xsl:for-each>
-</xsl:template>
-
-
-<xsl:template name="package">
-	<xsl:param name="name"/>
-	<xsl:variable name="package.dir">
-		<xsl:if test="not($name = '')"><xsl:value-of select="translate($name,'.','/')"/></xsl:if>
-		<xsl:if test="$name = ''">.</xsl:if>
-	</xsl:variable>	
-	<!--Processing package <xsl:value-of select="@name"/> in <xsl:value-of select="$output.dir"/> -->
-	<!-- create a classes-list.html in the package directory -->
-	<redirect:write file="{$output.dir}/{$package.dir}/package-frame.html">
-		<xsl:call-template name="classes.list">
-			<xsl:with-param name="name" select="$name"/>
-		</xsl:call-template>
-	</redirect:write>
-	
-	<!-- create a package-summary.html in the package directory -->
-	<redirect:write file="{$output.dir}/{$package.dir}/package-summary.html">
-		<xsl:call-template name="package.summary">
-			<xsl:with-param name="name" select="$name"/>
-		</xsl:call-template>
-	</redirect:write>
-	
-	<!-- for each class, creates a @name.html -->
-	<!-- @bug there will be a problem with inner classes having the same name, it will be overwritten -->
-	<xsl:for-each select="/testsuites/testsuite[@package = $name]">
-		<redirect:write file="{$output.dir}/{$package.dir}/{@name}.html">
-			<xsl:apply-templates select="." mode="class.details"/>
-		</redirect:write>
-	</xsl:for-each>
-</xsl:template>
-
-<xsl:template name="index.html">
-<html>
-	<head>
-		<title>Unit Test Results.</title>
-	</head>
-	<frameset cols="20%,80%">
-		<frameset rows="30%,70%">
-			<frame src="overview-frame.html" name="packageListFrame"/>
-			<frame src="allclasses-frame.html" name="classListFrame"/>
-		</frameset>
-		<frame src="overview-summary.html" name="classFrame"/>
-	</frameset>
-	<noframes>
-		<h2>Frame Alert</h2>
-		<p>
-		This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client.
-		</p>
-	</noframes>
-</html>
-</xsl:template>
-
-<!-- this is the stylesheet css to use for nearly everything -->
-<xsl:template name="stylesheet.css">
-body {
-	font:normal 68% verdana,arial,helvetica;
-	color:#000000;
-}
-table tr td, table tr th {
-    font-size: 68%;
-}
-table.details tr th{
-	font-weight: bold;
-	text-align:left;
-	background:#a6caf0;
-}
-table.details tr td{
-	background:#eeeee0;
-}
-
-p {
-	line-height:1.5em;
-	margin-top:0.5em; margin-bottom:1.0em;
-}
-h1 {
-	margin: 0px 0px 5px; font: 165% verdana,arial,helvetica
-}
-h2 {
-	margin-top: 1em; margin-bottom: 0.5em; font: bold 125% verdana,arial,helvetica
-}
-h3 {
-	margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica
-}
-h4 {
-	margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
-}
-h5 {
-	margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
-}
-h6 {
-	margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
-}
-.Error {
-	font-weight:bold; color:red;
-}
-.Failure {
-	font-weight:bold; color:purple;
-}
-.Properties {
-  text-align:right;
-}
-</xsl:template>
-
-
-<!-- ======================================================================
-    This page is created for every testsuite class.
-    It prints a summary of the testsuite and detailed information about
-    testcase methods.
-     ====================================================================== -->
-<xsl:template match="testsuite" mode="class.details">
-	<xsl:variable name="package.name" select="@package"/>
-	<html>
-		<head>
-			<xsl:call-template name="create.stylesheet.link">
-				<xsl:with-param name="package.name" select="$package.name"/>
-			</xsl:call-template>
-      <script language="JavaScript">
-        var TestCases = new Array();
-        var cur;
-        <xsl:apply-templates select="properties"/>
-       </script>
-       <script language="JavaScript"><![CDATA[
-        function displayProperties (name) {
-          var win = window.open('','JUnitSystemProperties','scrollbars=1,resizable=1');
-          var doc = win.document.open();
-          doc.write("<html><head><title>Properties of " + name + "</title>");
-          doc.write("<style>")
-          doc.write("body {font:normal 68% verdana,arial,helvetica;	color:#000000; }");
-          doc.write("table tr td, table tr th { font-size: 68%; }");
-          doc.write("table.properties { border-collapse:collapse; border-left:solid 1 #cccccc; border-top:solid 1 #cccccc; padding:5px; }");
-          doc.write("table.properties th { text-align:left; border-right:solid 1 #cccccc; border-bottom:solid 1 #cccccc; background-color:#eeeeee; }");
-          doc.write("table.properties td { font:normal; text-align:left; border-right:solid 1 #cccccc; border-bottom:solid 1 #cccccc; background-color:#fffffff; }");
-          doc.write("h3 { margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica }");
-          doc.write("</style>");
-          doc.write("</head><body>");
-          doc.write("<h3>Properties of " + name + "</h3>");
-          doc.write("<div align=\"right\"><a href=\"javascript:window.close();\">Close</a></div>");
-          doc.write("<table class='properties'>");
-          doc.write("<tr><th>Name</th><th>Value</th></tr>");
-          for (prop in TestCases[name]) {
-            doc.write("<tr><th>" + prop + "</th><td>" + TestCases[name][prop] + "</td></tr>");
-          }
-          doc.write("</table>");
-          doc.write("</body></html>");
-          doc.close();
-          win.focus();
-        }
-      ]]>  
-      </script>
-		</head>
-		<body>
-			<xsl:call-template name="pageHeader"/>	
-			<h3>Class <xsl:if test="not($package.name = '')"><xsl:value-of select="$package.name"/>.</xsl:if><xsl:value-of select="@name"/></h3>
-
-			
-			<table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
-				<xsl:call-template name="testsuite.test.header"/>
-				<xsl:apply-templates select="." mode="print.test"/>
-			</table>
-	
-			<h2>Tests</h2>
-			<p>
-			<table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
-        <xsl:call-template name="testcase.test.header"/>
-			  <!--
-			  test can even not be started at all (failure to load the class)
-			  so report the error directly
-			  -->
-				<xsl:if test="./error">
-					<tr class="Error">
-						<td colspan="4"><xsl:apply-templates select="./error"/></td>
-					</tr>
-				</xsl:if>
-				<xsl:apply-templates select="./testcase" mode="print.test"/>
-			</table>
-			</p>
-      <div class="Properties">
-        <a>
-          <xsl:attribute name="href">javascript:displayProperties('<xsl:value-of select="@package"/>.<xsl:value-of select="@name"/>');</xsl:attribute>
-          Properties &#187;
-        </a>
-      </div>
-		</body>
-	</html>
-</xsl:template>
-
-  <!--
-   Write properties into a JavaScript data structure.
-   This is based on the original idea by Erik Hatcher (ehatcher@apache.org)
-   -->
-  <xsl:template match="properties">
-    cur = TestCases['<xsl:value-of select="../@package"/>.<xsl:value-of select="../@name"/>'] = new Array();
-  	<xsl:for-each select="property">
-    <xsl:sort select="@name"/>
-        cur['<xsl:value-of select="@name"/>'] = '<xsl:call-template name="JS-escape"><xsl:with-param name="string" select="@value"/></xsl:call-template>';
-  	</xsl:for-each>
-  </xsl:template>
-
-
-<!-- ======================================================================
-    This page is created for every package.
-    It prints the name of all classes that belongs to this package.
-    @param name the package name to print classes.
-     ====================================================================== -->
-<!-- list of classes in a package -->
-<xsl:template name="classes.list">
-	<xsl:param name="name"/>
-	<html>
-		<head>
-			<xsl:call-template name="create.stylesheet.link">
-				<xsl:with-param name="package.name" select="$name"/>
-			</xsl:call-template>
-		</head>
-		<body>
-			<table width="100%">
-				<tr>
-					<td nowrap="nowrap">
-						<h2><a href="package-summary.html" target="classFrame"><xsl:value-of select="$name"/></a></h2>
-					</td>
-				</tr>
-			</table>
-	
-			<h2>Classes</h2>
-			<p>
-			<table width="100%">
-				<xsl:for-each select="/testsuites/testsuite[./@package = $name]">
-					<xsl:sort select="@name"/>
-					<tr>
-						<td nowrap="nowrap">
-							<a href="{@name}.html" target="classFrame"><xsl:value-of select="@name"/></a>
-						</td>
-					</tr>
-				</xsl:for-each>
-			</table>
-			</p>
-		</body>
-	</html>
-</xsl:template>
-
-
-<!--
-	Creates an all-classes.html file that contains a link to all package-summary.html
-	on each class.
--->
-<xsl:template match="testsuites" mode="all.classes">
-	<html>
-		<head>
-			<xsl:call-template name="create.stylesheet.link">
-				<xsl:with-param name="package.name"/>
-			</xsl:call-template>
-		</head>
-		<body>
-			<h2>Classes</h2>
-			<p>
-			<table width="100%">
-				<xsl:apply-templates select="testsuite" mode="all.classes">
-					<xsl:sort select="@name"/>
-				</xsl:apply-templates>
-			</table>
-			</p>
-		</body>
-	</html>
-</xsl:template>
-
-<xsl:template match="testsuite" mode="all.classes">
-	<xsl:variable name="package.name" select="@package"/>
-	<tr>
-		<td nowrap="nowrap">
-			<a target="classFrame">
-				<xsl:attribute name="href">
-					<xsl:if test="not($package.name='')">
-						<xsl:value-of select="translate($package.name,'.','/')"/><xsl:text>/</xsl:text>
-					</xsl:if><xsl:value-of select="@name"/><xsl:text>.html</xsl:text>
-				</xsl:attribute>
-				<xsl:value-of select="@name"/>
-			</a>
-		</td>
-	</tr>
-</xsl:template>
-
-
-<!--
-	Creates an html file that contains a link to all package-summary.html files on
-	each package existing on testsuites.
-	@bug there will be a problem here, I don't know yet how to handle unnamed package :(
--->
-<xsl:template match="testsuites" mode="all.packages">
-	<html>
-		<head>
-			<xsl:call-template name="create.stylesheet.link">
-				<xsl:with-param name="package.name"/>
-			</xsl:call-template>
-		</head>
-		<body>
-			<h2><a href="overview-summary.html" target="classFrame">Home</a></h2>
-			<h2>Packages</h2>
-			<p>
-				<table width="100%">
-					<xsl:apply-templates select="testsuite[not(./@package = preceding-sibling::testsuite/@package)]" mode="all.packages">
-						<xsl:sort select="@package"/>
-					</xsl:apply-templates>
-				</table>
-			</p>
-		</body>
-	</html>
-</xsl:template>
-
-<xsl:template match="testsuite" mode="all.packages">
-	<tr>
-		<td nowrap="nowrap">
-			<a href="{translate(@package,'.','/')}/package-summary.html" target="classFrame">
-				<xsl:value-of select="@package"/>
-			</a>
-		</td>
-	</tr>
-</xsl:template>
-
-
-<xsl:template match="testsuites" mode="overview.packages">
-	<html>
-		<head>
-			<xsl:call-template name="create.stylesheet.link">
-				<xsl:with-param name="package.name"/>
-			</xsl:call-template>
-		</head>
-		<body>
-		<xsl:attribute name="onload">open('allclasses-frame.html','classListFrame')</xsl:attribute>
-		<xsl:call-template name="pageHeader"/>
-		<h2>Summary</h2>
-		<xsl:variable name="testCount" select="sum(testsuite/@tests)"/>
-		<xsl:variable name="errorCount" select="sum(testsuite/@errors)"/>
-		<xsl:variable name="failureCount" select="sum(testsuite/@failures)"/>
-		<xsl:variable name="timeCount" select="sum(testsuite/@time)"/>
-		<xsl:variable name="successRate" select="($testCount - $failureCount - $errorCount) div $testCount"/>
-		<table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
-		<tr valign="top">
-			<th>Tests</th>
-			<th>Failures</th>
-			<th>Errors</th>
-			<th>Success rate</th>
-			<th>Time</th>
-		</tr>
-		<tr valign="top">
-			<xsl:attribute name="class">
-				<xsl:choose>
-					<xsl:when test="$errorCount &gt; 0">Error</xsl:when>
-					<xsl:when test="$failureCount &gt; 0">Failure</xsl:when>
-					<xsl:otherwise>Pass</xsl:otherwise>
-				</xsl:choose>
-			</xsl:attribute>
-			<td><xsl:value-of select="$testCount"/></td>
-			<td><xsl:value-of select="$failureCount"/></td>
-			<td><xsl:value-of select="$errorCount"/></td>
-			<td>
-				<xsl:call-template name="display-percent">
-					<xsl:with-param name="value" select="$successRate"/>
-				</xsl:call-template>
-			</td>
-			<td>
-				<xsl:call-template name="display-time">
-					<xsl:with-param name="value" select="$timeCount"/>
-				</xsl:call-template>
-			</td>
-
-		</tr>
-		</table>
-		<table border="0" width="95%">
-		<tr>
-		<td	style="text-align: justify;">
-		Note: <em>failures</em> are anticipated and checked for with assertions while <em>errors</em> are unanticipated.
-		</td>
-		</tr>
-		</table>
-		
-		<h2>Packages</h2>
-		<table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
-			<xsl:call-template name="testsuite.test.header"/>
-			<xsl:for-each select="testsuite[not(./@package = preceding-sibling::testsuite/@package)]">
-				<xsl:sort select="@package" order="ascending"/>
-				<!-- get the node set containing all testsuites that have the same package -->
-				<xsl:variable name="insamepackage" select="/testsuites/testsuite[./@package = current()/@package]"/>
-				<tr valign="top">
-					<!-- display a failure if there is any failure/error in the package -->
-					<xsl:attribute name="class">
-						<xsl:choose>
-							<xsl:when test="sum($insamepackage/@errors) &gt; 0">Error</xsl:when>
-							<xsl:when test="sum($insamepackage/@failures) &gt; 0">Failure</xsl:when>
-							<xsl:otherwise>Pass</xsl:otherwise>
-						</xsl:choose>
-					</xsl:attribute>
-					<td><a href="{translate(@package,'.','/')}/package-summary.html"><xsl:value-of select="@package"/></a></td>
-					<td><xsl:value-of select="sum($insamepackage/@tests)"/></td>
-					<td><xsl:value-of select="sum($insamepackage/@errors)"/></td>
-					<td><xsl:value-of select="sum($insamepackage/@failures)"/></td>
-					<td>
-					<xsl:call-template name="display-time">
-						<xsl:with-param name="value" select="sum($insamepackage/@time)"/>
-					</xsl:call-template>
-					</td>
-				</tr>
-			</xsl:for-each>
-		</table>
-		</body>
-		</html>
-</xsl:template>
-
-
-<xsl:template name="package.summary">
-	<xsl:param name="name"/>
-	<html>
-		<head>
-			<xsl:call-template name="create.stylesheet.link">
-				<xsl:with-param name="package.name" select="$name"/>
-			</xsl:call-template>
-		</head>
-		<body>
-			<xsl:attribute name="onload">open('package-frame.html','classListFrame')</xsl:attribute>
-			<xsl:call-template name="pageHeader"/>
-			<h3>Package <xsl:value-of select="$name"/></h3>
-			
-			<!--table border="0" cellpadding="5" cellspacing="2" width="95%">
-				<xsl:call-template name="class.metrics.header"/>
-				<xsl:apply-templates select="." mode="print.metrics"/>
-			</table-->
-			
-			<xsl:variable name="insamepackage" select="/testsuites/testsuite[./@package = $name]"/>
-			<xsl:if test="count($insamepackage) &gt; 0">
-				<h2>Classes</h2>
-				<p>
-				<table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
-					<xsl:call-template name="testsuite.test.header"/>
-					<xsl:apply-templates select="$insamepackage" mode="print.test">
-						<xsl:sort select="@name"/>
-					</xsl:apply-templates>
-				</table>
-				</p>
-			</xsl:if>
-		</body>
-	</html>
-</xsl:template>
-
-
-<!--
-    transform string like a.b.c to ../../../
-    @param path the path to transform into a descending directory path
--->
-<xsl:template name="path">
-	<xsl:param name="path"/>
-	<xsl:if test="contains($path,'.')">
-		<xsl:text>../</xsl:text>	
-		<xsl:call-template name="path">
-			<xsl:with-param name="path"><xsl:value-of select="substring-after($path,'.')"/></xsl:with-param>
-		</xsl:call-template>	
-	</xsl:if>
-	<xsl:if test="not(contains($path,'.')) and not($path = '')">
-		<xsl:text>../</xsl:text>	
-	</xsl:if>
-</xsl:template>
-
-
-<!-- create the link to the stylesheet based on the package name -->
-<xsl:template name="create.stylesheet.link">
-	<xsl:param name="package.name"/>
-	<link rel="stylesheet" type="text/css" title="Style"><xsl:attribute name="href"><xsl:if test="not($package.name = 'unnamed package')"><xsl:call-template name="path"><xsl:with-param name="path" select="$package.name"/></xsl:call-template></xsl:if>stylesheet.css</xsl:attribute></link>
-</xsl:template>
-
-
-<!-- Page HEADER -->
-<xsl:template name="pageHeader">
-	<h1>Unit Test Results</h1>
-	<table width="100%">
-	<tr>
-		<td align="left"></td>
-		<td align="right">Designed for use with <a href='http://www.junit.org'>JUnit</a> and <a href='http://jakarta.apache.org'>Ant</a>.</td>
-	</tr>
-	</table>
-	<hr size="1"/>
-</xsl:template>
-
-<!-- class header -->
-<xsl:template name="testsuite.test.header">
-	<tr valign="top">
-		<th width="80%">Name</th>
-		<th>Tests</th>
-		<th>Errors</th>
-		<th>Failures</th>
-		<th nowrap="nowrap">Time(s)</th>
-	</tr>
-</xsl:template>
-
-<!-- method header -->
-<xsl:template name="testcase.test.header">
-	<tr valign="top">
-		<th>Name</th>
-		<th>Status</th>
-		<th width="80%">Type</th>
-		<th nowrap="nowrap">Time(s)</th>
-	</tr>
-</xsl:template>
-
-
-<!-- class information -->
-<xsl:template match="testsuite" mode="print.test">
-	<tr valign="top">		
-		<xsl:attribute name="class">
-			<xsl:choose>
-				<xsl:when test="@errors[.&gt; 0]">Error</xsl:when>
-				<xsl:when test="@failures[.&gt; 0]">Failure</xsl:when>
-				<xsl:otherwise>Pass</xsl:otherwise>
-			</xsl:choose>
-		</xsl:attribute>
-		<td><a href="{@name}.html"><xsl:value-of select="@name"/></a></td>
-		<td><xsl:apply-templates select="@tests"/></td>
-		<td><xsl:apply-templates select="@errors"/></td>
-		<td><xsl:apply-templates select="@failures"/></td>
-		<td><xsl:call-template name="display-time">
-				<xsl:with-param name="value" select="@time"/>
-			</xsl:call-template>
-        </td>
-	</tr>
-</xsl:template>
-
-<xsl:template match="testcase" mode="print.test">
-	<tr valign="top">
-	    <xsl:attribute name="class">
-			<xsl:choose>
-				<xsl:when test="error">Error</xsl:when>
-				<xsl:when test="failure">Failure</xsl:when>
-				<xsl:otherwise>TableRowColor</xsl:otherwise>
-			</xsl:choose>
-		</xsl:attribute>
-		<td><xsl:value-of select="@name"/></td>
-		<xsl:choose>
-			<xsl:when test="failure">
-				<td>Failure</td>
-				<td><xsl:apply-templates select="failure"/></td>
-			</xsl:when>
-			<xsl:when test="error">
-				<td>Error</td>
-				<td><xsl:apply-templates select="error"/></td>
-			</xsl:when>
-			<xsl:otherwise>
-				<td>Success</td>
-				<td></td>
-			</xsl:otherwise>
-		</xsl:choose>
-		<td>
-		    <xsl:call-template name="display-time">
-                <xsl:with-param name="value" select="@time"/>
-		    </xsl:call-template>
-		</td>
-    </tr>
-</xsl:template>
-
-
-<!-- Note : the below template error and failure are the same style
-            so just call the same style store in the toolkit template -->
-<xsl:template match="failure">
-	<xsl:call-template name="display-failures"/>
-</xsl:template>
-
-<xsl:template match="error">
-	<xsl:call-template name="display-failures"/>
-</xsl:template>
-
-<!-- Style for the error and failure in the testcase template -->
-<xsl:template name="display-failures">
-	<xsl:choose>
-		<xsl:when test="not(@message)">N/A</xsl:when>
-		<xsl:otherwise>
-			<xsl:value-of select="@message"/>
-		</xsl:otherwise>
-	</xsl:choose>
-	<!-- display the stacktrace -->
-	<code>
-		<p/>
-		<xsl:call-template name="br-replace">
-			<xsl:with-param name="word" select="."/>
-		</xsl:call-template>
-	</code>
-	<!-- the latter is better but might be problematic for non-21" monitors... -->
-	<!--pre><xsl:value-of select="."/></pre-->
-</xsl:template>
-
-<xsl:template name="JS-escape">
-	<xsl:param name="string"/>
-	<xsl:choose>
-		<xsl:when test="contains($string,&quot;'&quot;)">
-			<xsl:value-of select="substring-before($string,&quot;'&quot;)"/>\&apos;<xsl:call-template name="JS-escape">
-				<xsl:with-param name="string" select="substring-after($string,&quot;'&quot;)"/>
-			</xsl:call-template>
-		</xsl:when> 
-		<xsl:when test="contains($string,'\')">
-			<xsl:value-of select="substring-before($string,'\')"/>\\<xsl:call-template name="JS-escape">
-				<xsl:with-param name="string" select="substring-after($string,'\')"/>
-			</xsl:call-template>
-		</xsl:when>
-		<xsl:otherwise>
-			<xsl:value-of select="$string"/>
-		</xsl:otherwise>
-	</xsl:choose>
-</xsl:template>
-
-
-<!--
-	template that will convert a carriage return into a br tag
-	@param word the text from which to convert CR to BR tag
--->
-<xsl:template name="br-replace">
-	<xsl:param name="word"/>
-	<xsl:choose>
-		<xsl:when test="contains($word,'&#xA;')">
-			<xsl:value-of select="substring-before($word,'&#xA;')"/>
-			<br/>
-			<xsl:call-template name="br-replace">
-				<xsl:with-param name="word" select="substring-after($word,'&#xA;')"/>
-			</xsl:call-template>
-		</xsl:when>
-		<xsl:otherwise>
-			<xsl:value-of select="$word"/>
-		</xsl:otherwise>
-	</xsl:choose>
-</xsl:template>
-
-<xsl:template name="display-time">
-	<xsl:param name="value"/>
-	<xsl:value-of select="format-number($value,'0.000')"/>
-</xsl:template>
-
-<xsl:template name="display-percent">
-	<xsl:param name="value"/>
-	<xsl:value-of select="format-number($value,'0.00%')"/>
-</xsl:template>
-</xsl:stylesheet>
-	
diff --git a/src/etc/junit-noframes.xsl b/src/etc/junit-noframes.xsl
deleted file mode 100644
index ea70028..0000000
--- a/src/etc/junit-noframes.xsl
+++ /dev/null
@@ -1,517 +0,0 @@
-<xsl:stylesheet	xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
-<xsl:output method="html" indent="yes" encoding="US-ASCII"/>
-<xsl:decimal-format decimal-separator="." grouping-separator="," />
-<!--
- The Apache Software License, Version 1.1
-
- Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- 1. Redistributions of source code must retain the above copyright
-    notice, this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in
-    the documentation and/or other materials provided with the
-    distribution.
-
- 3. The end-user documentation included with the redistribution, if
-    any, must include the following acknowlegement:
-       "This product includes software developed by the
-        Apache Software Foundation (http://www.apache.org/)."
-    Alternately, this acknowlegement may appear in the software itself,
-    if and wherever such third-party acknowlegements normally appear.
-
- 4. The names "The Jakarta Project", "Ant", and "Apache Software
-    Foundation" must not be used to endorse or promote products derived
-    from this software without prior written permission. For written
-    permission, please contact apache@apache.org.
-
- 5. Products derived from this software may not be called "Apache"
-    nor may "Apache" appear in their names without prior written
-    permission of the Apache Group.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
- ====================================================================
-
- This software consists of voluntary contributions made by many
- individuals on behalf of the Apache Software Foundation.  For more
- information on the Apache Software Foundation, please see
- <http://www.apache.org/>.
- -->
- 
-<!--
- 
- Sample stylesheet to be used with An JUnitReport output.
- 
- It creates a non-framed report that can be useful to send via
- e-mail or such.
- 
- @author Stephane Bailliez <a href="mailto:sbailliez@apache.org"/>
- @author Erik Hatcher <a href="mailto:ehatcher@apache.org"/>
- 
--->
-<xsl:template match="testsuites">
-	<HTML>
-		<HEAD>
-    <style type="text/css">
-      body {
-      	font:normal 68% verdana,arial,helvetica;
-      	color:#000000;
-      }
-      table tr td, table tr th {
-          font-size: 68%;
-      }
-      table.details tr th{
-      	font-weight: bold;
-      	text-align:left;
-      	background:#a6caf0;
-      }
-      table.details tr td{
-      	background:#eeeee0;
-      }
-      
-      p {
-      	line-height:1.5em;
-      	margin-top:0.5em; margin-bottom:1.0em;
-      }
-      h1 {
-      	margin: 0px 0px 5px; font: 165% verdana,arial,helvetica
-      }
-      h2 {
-      	margin-top: 1em; margin-bottom: 0.5em; font: bold 125% verdana,arial,helvetica
-      }
-      h3 {
-      	margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica
-      }
-      h4 {
-      	margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
-      }
-      h5 {
-      	margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
-      }
-      h6 {
-      	margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
-      }
-      .Error {
-      	font-weight:bold; color:red;
-      }
-      .Failure {
-      	font-weight:bold; color:purple;
-      }
-      .Properties {
-      	text-align:right;
-      }
-      </style>
-      <script language="JavaScript">
-        var TestCases = new Array();
-        var cur;
-        <xsl:for-each select="./testsuite">      
-            <xsl:apply-templates select="properties"/>
-        </xsl:for-each>
-
-       </script>
-       <script language="JavaScript"><![CDATA[
-        function displayProperties (name) {
-          var win = window.open('','JUnitSystemProperties','scrollbars=1,resizable=1');
-          var doc = win.document.open();
-          doc.write("<html><head><title>Properties of " + name + "</title>");
-          doc.write("<style>")
-          doc.write("body {font:normal 68% verdana,arial,helvetica;	color:#000000; }");
-          doc.write("table tr td, table tr th { font-size: 68%; }");
-          doc.write("table.properties { border-collapse:collapse; border-left:solid 1 #cccccc; border-top:solid 1 #cccccc; padding:5px; }");
-          doc.write("table.properties th { text-align:left; border-right:solid 1 #cccccc; border-bottom:solid 1 #cccccc; background-color:#eeeeee; }");
-          doc.write("table.properties td { font:normal; text-align:left; border-right:solid 1 #cccccc; border-bottom:solid 1 #cccccc; background-color:#fffffff; }");
-          doc.write("h3 { margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica }");
-          doc.write("</style>");
-          doc.write("</head><body>");
-          doc.write("<h3>Properties of " + name + "</h3>");
-          doc.write("<div align=\"right\"><a href=\"javascript:window.close();\">Close</a></div>");
-          doc.write("<table class='properties'>");
-          doc.write("<tr><th>Name</th><th>Value</th></tr>");
-          for (prop in TestCases[name]) {
-            doc.write("<tr><th>" + prop + "</th><td>" + TestCases[name][prop] + "</td></tr>");
-          }
-          doc.write("</table>");
-          doc.write("</body></html>");
-          doc.close();
-          win.focus();
-        }
-      ]]>  
-      </script>
-		</HEAD>
-		<body>
-			<a name="top"></a>
-			<xsl:call-template name="pageHeader"/>	
-			
-			<!-- Summary part -->
-			<xsl:call-template name="summary"/>
-			<hr size="1" width="95%" align="left"/>
-			
-			<!-- Package List part -->
-			<xsl:call-template name="packagelist"/>
-			<hr size="1" width="95%" align="left"/>
-			
-			<!-- For each package create its part -->
-			<xsl:call-template name="packages"/>
-			<hr size="1" width="95%" align="left"/>
-			
-			<!-- For each class create the  part -->
-			<xsl:call-template name="classes"/>
-			
-		</body>
-	</HTML>
-</xsl:template>
-	
-	
-	
-	<!-- ================================================================== -->
-	<!-- Write a list of all packages with an hyperlink to the anchor of    -->
-	<!-- of the package name.                                               -->
-	<!-- ================================================================== -->
-	<xsl:template name="packagelist">	
-		<h2>Packages</h2>
-		Note: package statistics are not computed recursively, they only sum up all of its testsuites numbers.
-		<table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
-			<xsl:call-template name="testsuite.test.header"/>
-			<!-- list all packages recursively -->
-			<xsl:for-each select="./testsuite[not(./@package = preceding-sibling::testsuite/@package)]">
-				<xsl:sort select="@package"/>
-				<xsl:variable name="testsuites-in-package" select="/testsuites/testsuite[./@package = current()/@package]"/>
-				<xsl:variable name="testCount" select="sum($testsuites-in-package/@tests)"/>
-				<xsl:variable name="errorCount" select="sum($testsuites-in-package/@errors)"/>
-				<xsl:variable name="failureCount" select="sum($testsuites-in-package/@failures)"/>
-				<xsl:variable name="timeCount" select="sum($testsuites-in-package/@time)"/>
-				
-				<!-- write a summary for the package -->
-				<tr valign="top">
-					<!-- set a nice color depending if there is an error/failure -->
-					<xsl:attribute name="class">
-						<xsl:choose>
-							<xsl:when test="$failureCount &gt; 0">Failure</xsl:when>
-							<xsl:when test="$errorCount &gt; 0">Error</xsl:when>
-						</xsl:choose>
-					</xsl:attribute>
-					<td><a href="#{@package}"><xsl:value-of select="@package"/></a></td>
-					<td><xsl:value-of select="$testCount"/></td>
-					<td><xsl:value-of select="$errorCount"/></td>
-					<td><xsl:value-of select="$failureCount"/></td>
-					<td>
-					<xsl:call-template name="display-time">
-						<xsl:with-param name="value" select="$timeCount"/>
-					</xsl:call-template>
-					</td>
-				</tr>
-			</xsl:for-each>
-		</table>		
-	</xsl:template>
-	
-	
-	<!-- ================================================================== -->
-	<!-- Write a package level report                                       -->
-	<!-- It creates a table with values from the document:                  -->
-	<!-- Name | Tests | Errors | Failures | Time                            -->
-	<!-- ================================================================== -->
-	<xsl:template name="packages">
-		<!-- create an anchor to this package name -->
-		<xsl:for-each select="/testsuites/testsuite[not(./@package = preceding-sibling::testsuite/@package)]">
-			<xsl:sort select="@package"/>
-				<a name="{@package}"></a>
-				<h3>Package <xsl:value-of select="@package"/></h3>
-				
-				<table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
-					<xsl:call-template name="testsuite.test.header"/>
-			
-					<!-- match the testsuites of this package -->
-					<xsl:apply-templates select="/testsuites/testsuite[./@package = current()/@package]" mode="print.test"/>
-				</table>
-				<a href="#top">Back to top</a>
-				<p/>
-				<p/>
-		</xsl:for-each>
-	</xsl:template>
-	
-	<xsl:template name="classes">
-		<xsl:for-each select="testsuite">
-			<xsl:sort select="@name"/>
-			<!-- create an anchor to this class name -->
-			<a name="{@name}"></a>
-			<h3>TestCase <xsl:value-of select="@name"/></h3>
-			
-			<table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
-			  <xsl:call-template name="testcase.test.header"/>
-			  <!--
-			  test can even not be started at all (failure to load the class)
-			  so report the error directly
-			  -->
-				<xsl:if test="./error">
-					<tr class="Error">
-						<td colspan="4"><xsl:apply-templates select="./error"/></td>
-					</tr>
-				</xsl:if>
-				<xsl:apply-templates select="./testcase" mode="print.test"/>
-			</table>
-            <div class="Properties">
-                <a>
-			        <xsl:attribute name="href">javascript:displayProperties('<xsl:value-of select="@package"/>.<xsl:value-of select="@name"/>');</xsl:attribute>
-			        Properties &#187;
-			    </a>
-            </div>
-			<p/>
-			
-			<a href="#top">Back to top</a>
-		</xsl:for-each>
-	</xsl:template>
-	
-	<xsl:template name="summary">
-		<h2>Summary</h2>
-		<xsl:variable name="testCount" select="sum(testsuite/@tests)"/>
-		<xsl:variable name="errorCount" select="sum(testsuite/@errors)"/>
-		<xsl:variable name="failureCount" select="sum(testsuite/@failures)"/>
-		<xsl:variable name="timeCount" select="sum(testsuite/@time)"/>
-		<xsl:variable name="successRate" select="($testCount - $failureCount - $errorCount) div $testCount"/>
-		<table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
-		<tr valign="top">
-			<th>Tests</th>
-			<th>Failures</th>
-			<th>Errors</th>
-			<th>Success rate</th>
-			<th>Time</th>
-		</tr>
-		<tr valign="top">
-			<xsl:attribute name="class">
-				<xsl:choose>
-					<xsl:when test="$failureCount &gt; 0">Failure</xsl:when>
-					<xsl:when test="$errorCount &gt; 0">Error</xsl:when>
-				</xsl:choose>
-			</xsl:attribute>
-			<td><xsl:value-of select="$testCount"/></td>
-			<td><xsl:value-of select="$failureCount"/></td>
-			<td><xsl:value-of select="$errorCount"/></td>
-			<td>
-				<xsl:call-template name="display-percent">
-					<xsl:with-param name="value" select="$successRate"/>
-				</xsl:call-template>
-			</td>
-			<td>
-				<xsl:call-template name="display-time">
-					<xsl:with-param name="value" select="$timeCount"/>
-				</xsl:call-template>
-			</td>
-
-		</tr>
-		</table>
-		<table border="0" width="95%">
-		<tr>
-		<td	style="text-align: justify;">
-		Note: <i>failures</i> are anticipated and checked for with assertions while <i>errors</i> are unanticipated.
-		</td>
-		</tr>
-		</table>
-	</xsl:template>
-	
-  <!--
-   Write properties into a JavaScript data structure.
-   This is based on the original idea by Erik Hatcher (ehatcher@apache.org)
-   -->
-  <xsl:template match="properties">
-    cur = TestCases['<xsl:value-of select="../@package"/>.<xsl:value-of select="../@name"/>'] = new Array();
-  	<xsl:for-each select="property">
-    <xsl:sort select="@name"/>
-        cur['<xsl:value-of select="@name"/>'] = '<xsl:call-template name="JS-escape"><xsl:with-param name="string" select="@value"/></xsl:call-template>';
-  	</xsl:for-each>
-  </xsl:template>
-	
-<!-- Page HEADER -->
-<xsl:template name="pageHeader">
-	<h1>Unit Test Results</h1>
-	<table width="100%">
-	<tr>
-		<td align="left"></td>
-		<td align="right">Designed for use with <a href='http://www.junit.org'>JUnit</a> and <a href='http://jakarta.apache.org/ant'>Ant</a>.</td>
-	</tr>
-	</table>
-	<hr size="1"/>
-</xsl:template>
-
-<xsl:template match="testsuite" mode="header">
-	<tr valign="top">
-		<th width="80%">Name</th>
-		<th>Tests</th>
-		<th>Errors</th>
-		<th>Failures</th>
-		<th nowrap="nowrap">Time(s)</th>
-	</tr>
-</xsl:template>
-
-<!-- class header -->
-<xsl:template name="testsuite.test.header">
-	<tr valign="top">
-		<th width="80%">Name</th>
-		<th>Tests</th>
-		<th>Errors</th>
-		<th>Failures</th>
-		<th nowrap="nowrap">Time(s)</th>
-	</tr>
-</xsl:template>
-
-<!-- method header -->
-<xsl:template name="testcase.test.header">
-	<tr valign="top">
-		<th>Name</th>
-		<th>Status</th>
-		<th width="80%">Type</th>
-		<th nowrap="nowrap">Time(s)</th>
-	</tr>
-</xsl:template>
-
-
-<!-- class information -->
-<xsl:template match="testsuite" mode="print.test">
-	<tr valign="top">
-		<!-- set a nice color depending if there is an error/failure -->
-		<xsl:attribute name="class">
-			<xsl:choose>
-				<xsl:when test="@failures[.&gt; 0]">Failure</xsl:when>
-				<xsl:when test="@errors[.&gt; 0]">Error</xsl:when>
-			</xsl:choose>
-		</xsl:attribute>
-	
-		<!-- print testsuite information -->
-		<td><a href="#{@name}"><xsl:value-of select="@name"/></a></td>
-		<td><xsl:value-of select="@tests"/></td>
-		<td><xsl:value-of select="@errors"/></td>
-		<td><xsl:value-of select="@failures"/></td>
-		<td>
-			<xsl:call-template name="display-time">
-				<xsl:with-param name="value" select="@time"/>
-			</xsl:call-template>
-		</td>
-	</tr>
-</xsl:template>
-
-<xsl:template match="testcase" mode="print.test">
-	<tr valign="top">
-		<xsl:attribute name="class">
-			<xsl:choose>
-				<xsl:when test="failure | error">Error</xsl:when>
-			</xsl:choose>
-		</xsl:attribute>
-		<td><xsl:value-of select="@name"/></td>
-		<xsl:choose>
-			<xsl:when test="failure">
-				<td>Failure</td>
-				<td><xsl:apply-templates select="failure"/></td>
-			</xsl:when>
-			<xsl:when test="error">
-				<td>Error</td>
-				<td><xsl:apply-templates select="error"/></td>
-			</xsl:when>
-			<xsl:otherwise>
-				<td>Success</td>
-				<td></td>
-			</xsl:otherwise>
-		</xsl:choose>
-		<td>
-			<xsl:call-template name="display-time">
-				<xsl:with-param name="value" select="@time"/>
-			</xsl:call-template>
-		</td>
-	</tr>
-</xsl:template>
-
-
-<xsl:template match="failure">
-	<xsl:call-template name="display-failures"/>
-</xsl:template>
-
-<xsl:template match="error">
-	<xsl:call-template name="display-failures"/>
-</xsl:template>
-
-<!-- Style for the error and failure in the tescase template -->
-<xsl:template name="display-failures">
-	<xsl:choose>
-		<xsl:when test="not(@message)">N/A</xsl:when>
-		<xsl:otherwise>
-			<xsl:value-of select="@message"/>
-		</xsl:otherwise>
-	</xsl:choose>
-	<!-- display the stacktrace -->
-	<code>
-		<p/>
-		<xsl:call-template name="br-replace">
-			<xsl:with-param name="word" select="."/>
-		</xsl:call-template>
-	</code>
-	<!-- the later is better but might be problematic for non-21" monitors... -->
-	<!--pre><xsl:value-of select="."/></pre-->
-</xsl:template>
-
-<xsl:template name="JS-escape">
-	<xsl:param name="string"/>
-	<xsl:choose>
-		<xsl:when test="contains($string,&quot;'&quot;)">
-			<xsl:value-of select="substring-before($string,&quot;'&quot;)"/>\&apos;<xsl:call-template name="JS-escape">
-				<xsl:with-param name="string" select="substring-after($string,&quot;'&quot;)"/>
-			</xsl:call-template>
-		</xsl:when> 
-		<xsl:when test="contains($string,'\')">
-			<xsl:value-of select="substring-before($string,'\')"/>\\<xsl:call-template name="JS-escape">
-				<xsl:with-param name="string" select="substring-after($string,'\')"/>
-			</xsl:call-template>
-		</xsl:when>
-		<xsl:otherwise>
-			<xsl:value-of select="$string"/>
-		</xsl:otherwise>
-	</xsl:choose>
-</xsl:template>
-
-
-<!--
-	template that will convert a carriage return into a br tag
-	@param word the text from which to convert CR to BR tag
--->
-<xsl:template name="br-replace">
-	<xsl:param name="word"/>
-	<xsl:choose>
-		<xsl:when test="contains($word,'&#xA;')">
-			<xsl:value-of select="substring-before($word,'&#xA;')"/>
-			<br/>
-			<xsl:call-template name="br-replace">
-				<xsl:with-param name="word" select="substring-after($word,'&#xA;')"/>
-			</xsl:call-template>
-		</xsl:when>
-		<xsl:otherwise>
-			<xsl:value-of select="$word"/>
-		</xsl:otherwise>
-	</xsl:choose>
-</xsl:template>
-
-<xsl:template name="display-time">
-	<xsl:param name="value"/>
-	<xsl:value-of select="format-number($value,'0.000')"/>
-</xsl:template>
-
-<xsl:template name="display-percent">
-	<xsl:param name="value"/>
-	<xsl:value-of select="format-number($value,'0.00%')"/>
-</xsl:template>
-
-</xsl:stylesheet>
-
diff --git a/src/etc/log.xsl b/src/etc/log.xsl
deleted file mode 100644
index 744736c..0000000
--- a/src/etc/log.xsl
+++ /dev/null
@@ -1,247 +0,0 @@
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
-<xsl:output method="html" indent="yes" encoding="US-ASCII"/>
-<!--
- The Apache Software License, Version 1.1
-
- Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- 1. Redistributions of source code must retain the above copyright
-    notice, this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in
-    the documentation and/or other materials provided with the
-    distribution.
-
- 3. The end-user documentation included with the redistribution, if
-    any, must include the following acknowlegement:
-       "This product includes software developed by the
-    Apache Software Foundation (http://www.apache.org/)."
-    Alternately, this acknowlegement may appear in the software itself,
-    if and wherever such third-party acknowlegements normally appear.
-
- 4. The names "The Jakarta Project", "Ant", and "Apache Software
-    Foundation" must not be used to endorse or promote products derived
-    from this software without prior written permission. For written
-    permission, please contact apache@apache.org.
-
- 5. Products derived from this software may not be called "Apache"
-    nor may "Apache" appear in their names without prior written
-    permission of the Apache Group.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
- ====================================================================
-
- This software consists of voluntary contributions made by many
- individuals on behalf of the Apache Software Foundation.  For more
- information on the Apache Software Foundation, please see
- <http://www.apache.org/>.
- -->
- 
-<!--
-
-  The purpose have this XSL is to provide a nice way to look at the output
-  from the Ant XmlLogger (ie: ant -listener org.apache.tools.ant.XmlLogger )
-  
-  @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
-  
--->
-<xsl:decimal-format decimal-separator="." grouping-separator="," />
-
-<xsl:template match="/">
-<html>
-  <head>
-    <style type="text/css">
-    .bannercell {
-      border: 0px;
-      padding: 0px;
-    }
-    body {
-      margin: 0;
-      font:normal 100% arial,helvetica,sanserif;
-      background-color:#FFFFFF;
-      color:#000000;
-    }
-    table.status {
-      font:bold 80% arial,helvetica,sanserif;
-      background-color:#525D76;
-      color:#ffffff;
-    }
-    table.log tr td, tr th {
-      font-size: 80%;
-    }
-    .error {
-      color:red;
-    }
-    .warn {
-      color:brown;
-    }
-    .info {
-      color:gray;
-    }
-    .debug{
-      color:gray;
-    }
-    .failed {
-      font-size:80%;
-      background-color: red;
-      color:#FFFFFF;
-      font-weight: bold
-    }
-    .complete {
-      font-size:80%;
-      background-color: #525D76;
-      color:#FFFFFF;
-      font-weight: bold
-    }
-    .a td { 
-      background: #efefef;
-    }
-    .b td { 
-      background: #fff;
-    }
-    th, td {
-      text-align: left;
-      vertical-align: top;
-    }
-    th {
-      background: #ccc;
-      color: black;
-    }
-    table, th, td {
-      border: none
-    }
-    h3 {
-      font:bold 80% arial,helvetica,sanserif;
-      background: #525D76;
-      color: white;
-      text-decoration: none;
-      padding: 5px;
-      margin-right: 2px;
-      margin-left: 2px;
-      margin-bottom: 0;
-    }
-    </style>
-  </head>
-  <body>
-    <!-- jakarta logo -->
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-    <tr>
-      <td valign="top" class="bannercell">
-        <a href="http://jakarta.apache.org/">
-        <img src="http://jakarta.apache.org/images/jakarta-logo.gif" alt="http://jakarta.apache.org" align="left" border="0"/>
-        </a>
-      </td>
-      <td style="text-align:right;vertical-align:bottom">
-        <a href="htp://jakarta.apache.org/ant">Jakarta Ant</a>
-      </td>
-    </tr>
-    </table>
-      
-    <table border="0" width="100%">
-    <tr><td><hr noshade="yes" size="1"/></td></tr>
-    </table>
-
-    <xsl:apply-templates select="build"/>
-
-    <!-- FOOTER -->
-    <table width="100%">
-      <tr><td><hr noshade="yes" size="1"/></td></tr>
-      <tr><td>
-      <div align="center"><font color="#525D76" size="-1"><em>
-      Copyright &#169; 2000-2002, Apache Software Foundation
-      </em></font></div>
-      </td></tr>
-    </table>
-  </body>
-</html>
-</xsl:template>
-
-<xsl:template match="build">
-  <!-- build status -->
-  <table width="100%">
-    <xsl:attribute name="class">
-      <xsl:if test="@error">failed</xsl:if>
-      <xsl:if test="not(@error)">complete</xsl:if>
-    </xsl:attribute>
-    <tr>
-      <xsl:if test="@error">
-        <td nowrap="yes">Build Failed</td> 
-      </xsl:if>
-      <xsl:if test="not(@error)">
-        <td nowrap="yes">Build Complete</td>
-      </xsl:if>
-        <td style="text-align:right" nowrap="yes">Total Time: <xsl:value-of select="@time"/></td>
-    </tr>
-    <tr>
-      <td colspan="2">
-        <xsl:if test="@error">
-          <tt><xsl:value-of select="@error"/></tt><br/>
-          <i style="font-size:80%">See the <a href="#stacktrace" alt="Click for details">stacktrace</a>.</i>
-        </xsl:if>
-      </td>
-    </tr>
-  </table>
-  <table border="1" cellspacing="2" cellpadding="3" width="100%" style="font-size:80%">
-    <tr class="a"><td width="1">ant.file</td><td><xsl:value-of select="substring-after(message[contains(text(),'ant.file')], '->')"/></td></tr>
-    <tr class="b"><td width="1">ant.version</td><td><xsl:value-of select="substring-after(message[contains(text(),'ant.version')], '->')"/></td></tr>
-    <tr class="a"><td width="1">java.version</td><td><xsl:value-of select="substring-after(message[contains(text(),'java.vm.version')], '->')"/></td></tr>
-    <tr class="b"><td width="1">os.name</td><td><xsl:value-of select="substring-after(message[contains(text(),'os.name')], '->')"/></td></tr>
-  </table>
-  <!-- build information -->
-  <h3>Build events</h3>
-  <table class="log" border="1" cellspacing="2" cellpadding="3" width="100%">
-  <tr>
-    <th nowrap="yes" align="left" width="1%">target</th>
-    <th nowrap="yes" align="left" width="1%">task</th>
-    <th nowrap="yes" align="left">message</th>
-  </tr>
-  <xsl:apply-templates select=".//message[@priority != 'debug']"/>
-  </table>
-  <p>
-  <!-- stacktrace -->
-  <xsl:if test="stacktrace">
-  <a name="stacktrace"/>
-  <h3>Error details</h3>
-  <table width="100%">
-    <tr><td>
-      <pre><xsl:value-of select="stacktrace"/></pre>
-    </td></tr>
-  </table>
-  </xsl:if>
-  </p>
-</xsl:template>
-
-<!-- report every message but those with debug priority -->
-<xsl:template match="message[@priority!='debug']">
-  <tr valign="top">
-    <!-- alternated row style -->
-    <xsl:attribute name="class">
-      <xsl:if test="position() mod 2 = 1">a</xsl:if>
-      <xsl:if test="position() mod 2 = 0">b</xsl:if>
-    </xsl:attribute>
-    <td nowrap="yes" width="1%"><xsl:value-of select="../../@name"/></td>
-    <td nowrap="yes" style="text-align:right" width="1%">[ <xsl:value-of select="../@name"/> ]</td>
-    <td class="{@priority}" nowrap="yes">
-            <xsl:value-of select="text()"/>
-    </td>
-  </tr>
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/src/etc/manifest b/src/etc/manifest
deleted file mode 100644
index ef7be33..0000000
--- a/src/etc/manifest
+++ /dev/null
@@ -1,5 +0,0 @@
-Manifest-Version: 1.0
-Main-Class: org.apache.tools.ant.Main
-Class-Path: jaxp.jar parser.jar crimson.jar optional.jar xalan.jar
-
-
diff --git a/src/etc/maudit-frames.xsl b/src/etc/maudit-frames.xsl
deleted file mode 100644
index 476f65e..0000000
--- a/src/etc/maudit-frames.xsl
+++ /dev/null
@@ -1,547 +0,0 @@
-<xsl:stylesheet	xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
-	xmlns:lxslt="http://xml.apache.org/xslt"
-	xmlns:redirect="org.apache.xalan.xslt.extensions.Redirect"
-	extension-element-prefixes="redirect">
-<xsl:output	method="html" indent="yes" encoding="US-ASCII"/>
-<xsl:decimal-format decimal-separator="." grouping-separator="," />
-<!--
- The Apache Software License, Version 1.1
-
- Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- 1. Redistributions of source code must retain the above copyright
-    notice, this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in
-    the documentation and/or other materials provided with the
-    distribution.
-
- 3. The end-user documentation included with the redistribution, if
-    any, must include the following acknowlegement:
-       "This product includes software developed by the
-        Apache Software Foundation (http://www.apache.org/)."
-    Alternately, this acknowlegement may appear in the software itself,
-    if and wherever such third-party acknowlegements normally appear.
-
- 4. The names "The Jakarta Project", "Ant", and "Apache Software
-    Foundation" must not be used to endorse or promote products derived
-    from this software without prior written permission. For written
-    permission, please contact apache@apache.org.
-
- 5. Products derived from this software may not be called "Apache"
-    nor may "Apache" appear in their names without prior written
-    permission of the Apache Group.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
- ====================================================================
-
- This software consists of voluntary contributions made by many
- individuals on behalf of the Apache Software Foundation.  For more
- information on the Apache Software Foundation, please see
- <http://www.apache.org/>.
- -->
-<!--
-
-    Stylesheet to transform an XML file generated by the Ant MAudit task into
-    a set of JavaDoc-like HTML page to make pages more convenient to be browsed.
-    
-    It use the Xalan redirect extension to write to multiple output files.
-
-    @author Stephane Bailliez <a href="mailto:sbailliez@apache.org"/>
--->
-
-<xsl:param name="output.dir" select="'.'"/>
-
-
-<xsl:template match="classes">
-	<!-- create the index.html -->
-	<redirect:write file="{$output.dir}/index.html">
-		<xsl:call-template name="index.html"/>
-	</redirect:write>
-
-	<!-- create the stylesheet.css -->
-	<redirect:write file="{$output.dir}/stylesheet.css">
-		<xsl:call-template name="stylesheet.css"/>
-	</redirect:write>
-
-	<!-- create the overview-packages.html at the root -->
-	<redirect:write file="{$output.dir}/overview-summary.html">
-		<xsl:apply-templates select="." mode="overview.packages"/>
-	</redirect:write>
-
-	<!-- create the all-packages.html at the root -->
-	<redirect:write file="{$output.dir}/overview-frame.html">
-		<xsl:apply-templates select="." mode="all.packages"/>
-	</redirect:write>
-	
-	<!-- create the all-classes.html at the root -->
-	<redirect:write file="{$output.dir}/allclasses-frame.html">
-		<xsl:apply-templates select="." mode="all.classes"/>
-	</redirect:write>
-	
-	<!-- process all packages -->
-	<xsl:for-each select="./class[not(./@package = preceding-sibling::class/@package)]">
-		<xsl:call-template name="package">
-			<xsl:with-param name="name" select="@package"/>
-		</xsl:call-template>
-	</xsl:for-each>
-</xsl:template>
-
-
-<xsl:template name="package">
-	<xsl:param name="name"/>
-	<xsl:variable name="package.dir">
-		<xsl:if test="not($name = '')"><xsl:value-of select="translate($name,'.','/')"/></xsl:if>
-		<xsl:if test="$name = ''">.</xsl:if>
-	</xsl:variable>	
-	<!--Processing package <xsl:value-of select="@name"/> in <xsl:value-of select="$output.dir"/> -->
-	<!-- create a classes-list.html in the package directory -->
-	<redirect:write file="{$output.dir}/{$package.dir}/package-frame.html">
-		<xsl:call-template name="classes.list">
-			<xsl:with-param name="name" select="$name"/>
-		</xsl:call-template>
-	</redirect:write>
-	
-	<!-- create a package-summary.html in the package directory -->
-	<redirect:write file="{$output.dir}/{$package.dir}/package-summary.html">
-		<xsl:call-template name="package.summary">
-			<xsl:with-param name="name" select="$name"/>
-		</xsl:call-template>
-	</redirect:write>
-	
-	<!-- for each class, creates a @name.html -->
-	<!-- @bug there will be a problem with inner classes having the same name, it will be overwritten -->
-	<xsl:for-each select="/classes/class[@package = $name]">
-		<redirect:write file="{$output.dir}/{$package.dir}/{@name}.html">
-			<xsl:apply-templates select="." mode="class.details"/>
-		</redirect:write>
-	</xsl:for-each>
-</xsl:template>
-
-<xsl:template name="index.html">
-<HTML>
-	<HEAD><TITLE>Audit Results.</TITLE></HEAD>
-	<FRAMESET cols="20%,80%">
-		<FRAMESET rows="30%,70%">
-			<FRAME src="overview-frame.html" name="packageListFrame"/>
-			<FRAME src="allclasses-frame.html" name="classListFrame"/>
-		</FRAMESET>
-		<FRAME src="overview-summary.html" name="classFrame"/>
-	</FRAMESET>
-	<noframes>
-		<H2>Frame Alert</H2>
-		<P>
-		This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client.
-		</P>
-	</noframes>
-</HTML>
-</xsl:template>
-
-
-<!-- this is the stylesheet css to use for nearly everything -->
-<xsl:template name="stylesheet.css">
-    .bannercell {
-      border: 0px;
-      padding: 0px;
-    }
-    body {
-      margin-left: 10;
-      margin-right: 10;
-      font:normal 80% arial,helvetica,sanserif;
-      background-color:#FFFFFF;
-      color:#000000;
-    }
-    .a td { 
-      background: #efefef;
-    }
-    .b td { 
-      background: #fff;
-    }
-    th, td {
-      text-align: left;
-      vertical-align: top;
-    }
-    th {
-      font-weight:bold;
-      background: #ccc;
-      color: black;
-    }
-    table, th, td {
-      font-size:100%;
-      border: none
-    }
-    table.log tr td, tr th {
-      
-    }
-    h2 {
-      font-weight:bold;
-      font-size:140%;
-      margin-bottom: 5;
-    }
-    h3 {
-      font-size:100%;
-      font-weight:bold;
-      background: #525D76;
-      color: white;
-      text-decoration: none;
-      padding: 5px;
-      margin-right: 2px;
-      margin-left: 2px;
-      margin-bottom: 0;
-    }
-</xsl:template>
-
-
-<!-- print the violations of the class -->
-<xsl:template match="class" mode="class.details">
-	<xsl:variable name="package.name" select="@package"/>
-	<HTML>
-		<HEAD>
-			<xsl:call-template name="create.stylesheet.link">
-				<xsl:with-param name="package.name" select="$package.name"/>
-			</xsl:call-template>
-		</HEAD>
-		<BODY>
-			<xsl:call-template name="pageHeader"/>
-			<H3>Class <xsl:if test="not($package.name = '')"><xsl:value-of select="$package.name"/>.</xsl:if><xsl:value-of select="@name"/></H3>
-
-			<table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
-				<xsl:call-template name="class.audit.header"/>
-				<xsl:apply-templates select="." mode="print.audit"/>
-			</table>
-	
-			<H3>Violations</H3>
-			<table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
-				<xsl:call-template name="violation.audit.header"/>
-				<xsl:apply-templates select="./violation" mode="print.audit">
-					<xsl:sort data-type="number" select="@line"/>
-				</xsl:apply-templates>
-			</table>
-			<xsl:call-template name="pageFooter"/>
-		</BODY>
-	</HTML>
-</xsl:template>
-
-
-<!-- list of classes in a package -->
-<xsl:template name="classes.list">
-	<xsl:param name="name"/>
-	<HTML>
-		<HEAD>
-			<xsl:call-template name="create.stylesheet.link">
-				<xsl:with-param name="package.name" select="$name"/>
-			</xsl:call-template>
-		</HEAD>
-		<BODY>
-			<table width="100%">
-				<tr>
-					<td nowrap="nowrap">
-						<H2><a href="package-summary.html" target="classFrame"><xsl:value-of select="$name"/></a></H2>
-					</td>
-				</tr>
-			</table>
-	
-			<h2>Classes</h2>
-			<TABLE WIDTH="100%">
-				<xsl:apply-templates select="/classes/class[./@package = $name]" mode="classes.list">
-					<xsl:sort select="@name"/>
-				</xsl:apply-templates>
-			</TABLE>
-		</BODY>
-	</HTML>
-</xsl:template>
-<!-- the class to list -->
-<xsl:template match="class" mode="classes.list">
-	<tr>
-		<td nowrap="nowrap">
-			<!-- @bug naming to fix for inner classes -->
-			<a href="{@name}.html" target="classFrame"><xsl:value-of select="@name"/></a>
-		</td>
-	</tr>
-</xsl:template>
-
-
-<!--
-	Creates an all-classes.html file that contains a link to all package-summary.html
-	on each class.
--->
-<xsl:template match="classes" mode="all.classes">
-	<html>
-		<head>
-			<xsl:call-template name="create.stylesheet.link">
-				<xsl:with-param name="package.name"/>
-			</xsl:call-template>
-		</head>
-		<body>
-			<h2>Classes</h2>
-			<table width="100%">
-				<xsl:apply-templates select=".//class" mode="all.classes">
-					<xsl:sort select="@name"/>
-				</xsl:apply-templates>
-			</table>
-		</body>
-	</html>
-</xsl:template>
-
-<xsl:template match="class" mode="all.classes">
-    <!-- (ancestor::package)[last()] is buggy in MSXML3 ? -->
-    <xsl:variable name="package.name" select="@package"/>
-	<tr>
-		<td nowrap="nowrap">
-			<a target="classFrame">
-				<xsl:attribute name="href">
-					<xsl:if test="not($package.name='')">
-						<xsl:value-of select="translate($package.name,'.','/')"/><xsl:text>/</xsl:text>
-					</xsl:if><xsl:value-of select="@name"/><xsl:text>.html</xsl:text>
-				</xsl:attribute>
-				<xsl:value-of select="@name"/>
-			</a>
-		</td>
-	</tr>
-</xsl:template>
-
-
-<!--
-	Creates an html file that contains a link to all package-summary.html files on
-	each package existing on testsuites.
-	@bug there will be a problem here, I don't know yet how to handle unnamed package :(
--->
-<xsl:template match="classes" mode="all.packages">
-	<html>
-		<head>
-			<xsl:call-template name="create.stylesheet.link">
-				<xsl:with-param name="package.name"/>
-			</xsl:call-template>
-		</head>
-		<body>
-			<h2><a href="overview-summary.html" target="classFrame">Home</a></h2>
-			<h2>Packages</h2>
-				<table width="100%">
-					<xsl:apply-templates select="class[not(./@package = preceding-sibling::class/@package)]" mode="all.packages">
-						<xsl:sort select="@package" order="ascending"/>
-					</xsl:apply-templates>
-				</table>
-		</body>
-	</html>
-</xsl:template>
-
-<xsl:template match="class" mode="all.packages">
-	<tr>
-		<td nowrap="nowrap">
-			<a href="{translate(@package,'.','/')}/package-summary.html" target="classFrame">
-				<xsl:value-of select="@package"/>
-			</a>
-		</td>
-	</tr>
-</xsl:template>
-
-
-<xsl:template match="classes" mode="overview.packages">
-	<html>
-		<head>
-			<xsl:call-template name="create.stylesheet.link">
-				<xsl:with-param name="package.name"/>
-			</xsl:call-template>
-		</head>
-		<body onload="open('allclasses-frame.html','classListFrame')">
-		<xsl:call-template name="pageHeader"/>
-		<h3>Summary</h3>
-		<table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
-		<tr>
-			<th>Audited classes</th>
-			<th>Reported classes</th>
-			<th>Violations</th>
-		</tr>
-		<tr class="a">
-			<td><xsl:value-of select="@audited"/></td>
-			<td><xsl:value-of select="@reported"/></td>
-			<td><xsl:value-of select="@violations"/></td>
-		</tr>
-		</table>
-		<table border="0" width="100%">
-		<tr>
-		<td	style="text-align: justify;">
-		Note: Rules checked have originated from style guidelines suggested by the language designers,
-		experience from the Java development community and insite experience. Violations are generally
-		reported with a reference to the <a href="http://java.sun.com/docs/books/jls/second_edition/html/jTOC.doc.html">Java Language Specifications</a> (JLS x.x.x)
-		and Metamata Audit rules (x.x).
-		Please consult these documents for additional information about violations.
-		<p/>
-		Rules checked also enforce adherence to <a href="http://java.sun.com/docs/codeconv/html/CodeConvTOC.doc.html">Sun Java coding guidelines</a> in use at Jakarta.
-		<p/>
-		One should note that these violations do not necessary underline errors but should be used
-		as an indication for <i>possible</i> errors. As always, use your best judgment and review
-		them carefully, it might save you hours of debugging.
-		</td>
-		</tr>
-		</table>
-
-		<h3>Packages</h3>
-		<table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
-			<xsl:call-template name="class.audit.header"/>
-			<xsl:for-each select="class[not(./@package = preceding-sibling::class/@package)]">
-				<xsl:sort select="@package" order="ascending"/>
-				<tr>
-          <xsl:call-template name="alternate-row"/>
-					<td><a href="{translate(@package,'.','/')}/package-summary.html"><xsl:value-of select="@package"/></a></td>
-					<td><xsl:value-of select="sum(/classes/class[./@package = current()/@package]/@violations)"/></td>
-				</tr>
-			</xsl:for-each>
-		</table>
-		<xsl:call-template name="pageFooter"/>
-		</body>
-		</html>
-</xsl:template>
-
-
-<xsl:template name="package.summary">
-	<xsl:param name="name"/>
-	<HTML>
-		<HEAD>
-			<xsl:call-template name="create.stylesheet.link">
-				<xsl:with-param name="package.name" select="$name"/>
-			</xsl:call-template>
-		</HEAD>
-		<BODY>
-			<xsl:attribute name="onload">open('package-frame.html','classListFrame')</xsl:attribute>
-			<xsl:call-template name="pageHeader"/>
-			<h3>Package <xsl:value-of select="$name"/></h3>
-			
-			<!--table border="0" cellpadding="5" cellspacing="2" width="100%">
-				<xsl:call-template name="class.metrics.header"/>
-				<xsl:apply-templates select="." mode="print.metrics"/>
-			</table-->
-			
-			<xsl:if test="count(/classes/class[./@package = $name]) &gt; 0">
-				<H3>Classes</H3>
-				<table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
-					<xsl:call-template name="class.audit.header"/>
-					<xsl:apply-templates select="/classes/class[./@package = $name]" mode="print.audit">
-						<xsl:sort select="@name"/>
-					</xsl:apply-templates>
-				</table>
-			</xsl:if>
-			<xsl:call-template name="pageFooter"/>
-		</BODY>
-	</HTML>
-</xsl:template>
-
-
-<!--
-    transform string like a.b.c to ../../../
-    @param path the path to transform into a descending directory path
--->
-<xsl:template name="path">
-	<xsl:param name="path"/>
-	<xsl:if test="contains($path,'.')">
-		<xsl:text>../</xsl:text>	
-		<xsl:call-template name="path">
-			<xsl:with-param name="path"><xsl:value-of select="substring-after($path,'.')"/></xsl:with-param>
-		</xsl:call-template>	
-	</xsl:if>
-	<xsl:if test="not(contains($path,'.')) and not($path = '')">
-		<xsl:text>../</xsl:text>	
-	</xsl:if>
-</xsl:template>
-
-
-<!-- create the link to the stylesheet based on the package name -->
-<xsl:template name="create.stylesheet.link">
-	<xsl:param name="package.name"/>
-	<LINK REL ="stylesheet" TYPE="text/css" TITLE="Style"><xsl:attribute name="href"><xsl:if test="not($package.name = 'unnamed package')"><xsl:call-template name="path"><xsl:with-param name="path" select="$package.name"/></xsl:call-template></xsl:if>stylesheet.css</xsl:attribute></LINK>
-</xsl:template>
-
-<!-- Page HEADER -->
-<xsl:template name="pageHeader">
-
-  <!-- jakarta logo -->
-  <table border="0" cellpadding="0" cellspacing="0" width="100%">
-  <tr>
-    <td class="bannercell" rowspan="2">
-      <a href="http://jakarta.apache.org/">
-      <img src="http://jakarta.apache.org/images/jakarta-logo.gif" alt="http://jakarta.apache.org" align="left" border="0"/>
-      </a>
-    </td>
-		<td style="text-align:right"><h2>Source Code Audit</h2></td>
-		</tr>
-		<tr>
-		<td style="text-align:right">Designed for use with <a href='http://www.webgain.com/products/quality_analyzer/'>Webgain QA/Metamata Audit</a> and <a href='http://jakarta.apache.org'>Ant</a>.</td>
-		</tr>
-  </table>
-	<hr size="1"/>
-</xsl:template>
-
-<!-- Page HEADER -->
-<xsl:template name="pageFooter">
-    <table width="100%">
-      <tr><td><hr noshade="yes" size="1"/></td></tr>
-      <tr><td>
-      <div align="center"><font color="#525D76" size="-1"><em>
-      Copyright &#169; 1999-2001, Apache Software Foundation
-      </em></font></div>
-      </td></tr>
-    </table>
-</xsl:template>
-
-
-<!-- class header -->
-<xsl:template name="class.audit.header">
-	<tr>
-		<th width="80%">Name</th>
-		<th>Violations</th>
-	</tr>
-</xsl:template>
-
-<!-- method header -->
-<xsl:template name="violation.audit.header">
-	<tr>
-		<th>Line</th>
-		<th>Message</th>
-	</tr>
-</xsl:template>
-
-
-<!-- class information -->
-<xsl:template match="class" mode="print.audit">
-	<tr>
-    <xsl:call-template name="alternate-row"/>
-		<td><a href="{@name}.html"><xsl:value-of select="@name"/></a></td>
-		<td><xsl:apply-templates select="@violations"/></td>
-	</tr>
-</xsl:template>
-
-<xsl:template match="violation" mode="print.audit">
-	<tr>
-    <xsl:call-template name="alternate-row"/>
-		<td><xsl:value-of select="@line"/></td>
-		<td><xsl:apply-templates select="@message"/></td>
-	</tr>
-</xsl:template>
-
-<!-- alternated row style -->
-<xsl:template name="alternate-row">
-<xsl:attribute name="class">
-  <xsl:if test="position() mod 2 = 1">a</xsl:if>
-  <xsl:if test="position() mod 2 = 0">b</xsl:if>
-</xsl:attribute>
-</xsl:template>
-
-</xsl:stylesheet>
-	
diff --git a/src/etc/mmetrics-frames.xsl b/src/etc/mmetrics-frames.xsl
deleted file mode 100644
index 0011129..0000000
--- a/src/etc/mmetrics-frames.xsl
+++ /dev/null
@@ -1,1070 +0,0 @@
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
-  xmlns:lxslt="http://xml.apache.org/xslt"
-  xmlns:xalan="http://xml.apache.org/xalan"
-  xmlns:redirect="org.apache.xalan.xslt.extensions.Redirect"
-  exclude-result-prefixes="xalan"
-  extension-element-prefixes="redirect">
-<xsl:output method="html" indent="yes" encoding="US-ASCII"/>
-<xsl:decimal-format decimal-separator="." grouping-separator="," />
-<!--
- The Apache Software License, Version 1.1
-
- Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- 1. Redistributions of source code must retain the above copyright
-    notice, this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in
-    the documentation and/or other materials provided with the
-    distribution.
-
- 3. The end-user documentation included with the redistribution, if
-    any, must include the following acknowlegement:
-       "This product includes software developed by the
-        Apache Software Foundation (http://www.apache.org/)."
-    Alternately, this acknowlegement may appear in the software itself,
-    if and wherever such third-party acknowlegements normally appear.
-
- 4. The names "The Jakarta Project", "Ant", and "Apache Software
-    Foundation" must not be used to endorse or promote products derived
-    from this software without prior written permission. For written
-    permission, please contact apache@apache.org.
-
- 5. Products derived from this software may not be called "Apache"
-    nor may "Apache" appear in their names without prior written
-    permission of the Apache Group.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
- ====================================================================
-
- This software consists of voluntary contributions made by many
- individuals on behalf of the Apache Software Foundation.  For more
- information on the Apache Software Foundation, please see
- <http://www.apache.org/>.
- -->
-<!--
-  @author Stephane Bailliez <a href="mailto:sbailliez@apache.org"/>
-  --> 
-<xsl:param name="output.dir" select="'.'"/>
-
-<!-- default max value for the metrics -->
-<xsl:param name="vg.max" select="10"/>
-<xsl:param name="loc.max" select="1000"/>
-<xsl:param name="dit.max" select="10"/>
-<xsl:param name="noa.max" select="250"/>
-<xsl:param name="nrm.max" select="50"/>
-<xsl:param name="nlm.max" select="250"/>
-<xsl:param name="wmc.max" select="250"/>
-<xsl:param name="rfc.max" select="50"/>
-<xsl:param name="dac.max" select="10"/>
-<xsl:param name="fanout.max" select="10"/>
-<xsl:param name="cbo.max" select="15"/>
-<xsl:param name="lcom.max" select="10"/>
-<xsl:param name="nocl.max" select="10"/>
-
-
-<!-- create a tree fragment to speed up processing -->
-<xsl:variable name="doctree.var">
-  <xsl:element name="classes">
-    <xsl:for-each select=".//class">
-      <xsl:element name="class">
-        <xsl:attribute name="package">
-          <xsl:value-of select="(ancestor::package)[last()]/@name"/>
-        </xsl:attribute>
-        <xsl:copy-of select="@*"/>
-        <xsl:attribute name="name">
-          <xsl:apply-templates select="." mode="class.name"/>
-        </xsl:attribute>
-        <xsl:copy-of select="method"/>
-      </xsl:element>
-    </xsl:for-each>
-  </xsl:element>
-</xsl:variable>
-
-<xsl:variable name="doctree" select="xalan:nodeset($doctree.var)"/>
-
-<xsl:template match="metrics">
-
-  <!-- create the index.html -->
-  <redirect:write file="{$output.dir}/index.html">
-    <xsl:call-template name="index.html"/>
-  </redirect:write>
-
-  <!-- create the stylesheet.css -->
-  <redirect:write file="{$output.dir}/stylesheet.css">
-    <xsl:call-template name="stylesheet.css"/>
-  </redirect:write>
-
-  <redirect:write file="{$output.dir}/metrics-reference.html">
-    <xsl:call-template name="metrics-reference.html"/>
-  </redirect:write>
-  
-  <!-- create the overview-packages.html at the root -->
-  <redirect:write file="{$output.dir}/overview-summary.html">
-    <xsl:apply-templates select="." mode="overview.packages"/>
-  </redirect:write>
-
-  <!-- create the all-packages.html at the root -->
-  <redirect:write file="{$output.dir}/overview-frame.html">
-    <xsl:apply-templates select="." mode="all.packages"/>
-  </redirect:write>
-  
-  <!-- create the all-classes.html at the root -->
-  <redirect:write file="{$output.dir}/allclasses-frame.html">
-    <xsl:apply-templates select="." mode="all.classes"/>
-  </redirect:write>
-  
-  <!-- process all packages -->
-  <xsl:apply-templates select=".//package"/>
-</xsl:template>
-
-
-<xsl:template match="package">
-  <xsl:variable name="package.name" select="@name"/>
-  <xsl:variable name="package.dir">
-    <xsl:if test="not($package.name = 'unnamed package')"><xsl:value-of select="translate($package.name,'.','/')"/></xsl:if>
-    <xsl:if test="$package.name = 'unnamed package'">.</xsl:if>
-  </xsl:variable> 
-  <!-- create a classes-list.html in the package directory -->
-  <redirect:write file="{$output.dir}/{$package.dir}/package-frame.html">
-    <xsl:apply-templates select="." mode="classes.list"/>
-  </redirect:write>
-  
-  <!-- create a package-summary.html in the package directory -->
-  <redirect:write file="{$output.dir}/{$package.dir}/package-summary.html">
-    <xsl:apply-templates select="." mode="package.summary"/>
-  </redirect:write>
-  
-  <!-- for each class, creates a @name.html -->
-  <!-- @bug there will be a problem with inner classes having the same name, it will be overwritten -->
-  <xsl:for-each select="$doctree/classes/class[@package = current()/@name]">
-      <!--Processing <xsl:value-of select="$class.name"/><xsl:text>&#10;</xsl:text> -->
-    <redirect:write file="{$output.dir}/{$package.dir}/{@name}.html">
-      <xsl:apply-templates select="." mode="class.details"/>
-    </redirect:write>
-  </xsl:for-each>
-</xsl:template>
-
-<!-- little trick to compute the classname for inner and non inner classes -->
-<!-- this is all in one line to avoid CRLF in the name -->
-<xsl:template match="class" mode="class.name">
-    <xsl:if test="parent::class"><xsl:apply-templates select="parent::class" mode="class.name"/>.<xsl:value-of select="@name"/></xsl:if><xsl:if test="not(parent::class)"><xsl:value-of select="@name"/></xsl:if>
-</xsl:template>
-
-
-<xsl:template name="index.html">
-<HTML>
-  <HEAD><TITLE>Metrics Results.</TITLE></HEAD>
-  <FRAMESET cols="20%,80%">
-    <FRAMESET rows="30%,70%">
-      <FRAME src="overview-frame.html" name="packageListFrame"/>
-      <FRAME src="allclasses-frame.html" name="classListFrame"/>
-    </FRAMESET>
-    <FRAME src="overview-summary.html" name="classFrame"/>
-  </FRAMESET>
-  <noframes>
-    <H2>Frame Alert</H2>
-    <P>
-    This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client.
-    </P>
-  </noframes>
-</HTML>
-</xsl:template>
-
-<!-- this is the stylesheet css to use for nearly everything -->
-<xsl:template name="metrics-reference.html">
-<html>
-<head>
-<link title="Style" type="text/css" rel="stylesheet" href="stylesheet.css"/>
-</head>
-<body style="text-align:justify;">
-<h2>Metrics Reference</h2>
-<a href="#V(G)">V(G)</a> |
-<a href="#LOC">LOC</a> |
-<a href="#DIT">DIT</a> |
-<a href="#NOA">NOA</a> |
-<a href="#NRM">NRM</a> |
-<a href="#NLM">NLM</a> |
-<a href="#WMC">WMC</a> |
-<a href="#RFC">RFC</a> |
-<a href="#DAC">DAC</a> |
-<a href="#FANOUT">FANOUT</a> |
-<a href="#CBO">CBO</a> |
-<a href="#LCOM">LCOM</a> |
-<a href="#NOC">NOC</a>
-
-<a name="V(G)"/>
-<h3>Cyclomatic Complexity - V(G)</h3>
-This metric was introduced in the 1970s to measure the amount of control
-flow complexity or branching complexity in a module such as a
-subroutine. It gives the number of paths that may be taken through the
-code, and was initially developed to give some measure of the cost of
-producing a test case for the module by executing each path.
-<p/>
-Methods with a high cyclomatic complexity tend to be more difficult to
-understand and maintain. In general the more complex the methods of an
-application, the more difficult it will be to test it, and this will adversely
-affect its reliability.
-<p/>
-V(G) is a measure of the control flow complexity of a method or
-constructor.  It counts the number of branches in the body of the method,
-defined as:
-<ul>
-<li>while statements;</li>
-<li>if statements;</li>
-<li>for statements.</li>
-</ul>
-
-The metric can also be configured to count each case of a switch
-statement as well.
-
-<a name="LOC"/>
-<h3>Lines of Code - LOC</h3>
-
-This is perhaps the simplest of all the metrics to define and compute.
-Counting lines has a long history as a software metric dating from before
-the rise of structured programming, and it is still in widespread use today.
-The size of a method affects the ease with which it can be understood, its
-reusability and its maintainability. There are a variety of ways that the size
-can be calculated. These include counting all the lines of code, the number
-of statements, the blank lines of code, the lines of commentary, and the
-lines consisting only of syntax such as block delimiters.
-<p/>
-This metric can also be used for sizing other constructs as well, for
-example, the overall size of a Java class or package can be measured by
-counting the number of source lines it consists of.
-<p/>
-LOC can be used to determine the size of a compilation unit (source file),
-class or interface, method, constructor, or field.  It can be configured to
-ignore:
-<ul>
-<li>blank lines;</li>
-<li>lines consisting only of comments;</li>
-<li>lines consisting only of opening and closing braces.</li>
-</ul>
-
-<a name="DIT"/>
-<h3>Depth of Inheritance Hierarchy - DIT</h3>
-
-This metric calculates how far down the inheritance hierarchy a class is
-declared. In Java all classes have java.lang.Object as their ultimate
-superclass, which is defined to have a depth of 1. So a class that
-immediately extends java.lang.Object has a metric value of 2; any of its
-subclasses will have a value of 3, and so on.
-<p/>
-A class that is deep within the tree inherits more methods and state
-variables, thereby increasing its complexity and making it difficult to
-predict its behavior. It can be harder to understand a system with many
-inheritance layers.
-<p/>
-DIT is defined for classes and interfaces:
-<ul>
-<li>all interface types have a depth of 1;</li>
-<li>the class java.lang.Object has a depth of 1;</li>
-<li>all other classes have a depth of 1 + the depth of their super class.</li>
-</ul>
-
-<a name="NOA"/>
-<h3>Number of Attributes - NOA</h3>
-
-The number of distinct state variables in a class serves as one measure of
-its complexity. The more state a class represents the more difficult it is to
-maintain invariants for it. It also hinders comprehensibility and reuse.
-<p/>
-In Java, state can be exposed to subclasses through protected fields, which
-entails that the subclass also be aware of and maintain any invariants. This
-interference with the class's data encapsulation can be a source of defects
-and hidden dependencies between the state variables.
-<p/>
-NOA is defined for classes and interfaces.  It counts the number of fields
-declared in the class or interface.
-
-<a name="NRM"/>
-<h3>Number of Remote Methods - NRM</h3>
-
-NRM is defined for classes.  A remote method call is defined as an
-invocation of a method that is not declared in any of:
-<ul>
-<li>the class itself;</li>
-<li>a class or interface that the class extends or implements;</li>
-<li>a class or method that extends the class.</li>
-</ul>
-
-The value is the count of all the remote method calls in all of the methods
-and constructors of the class.
-
-<a name="NLM"/>
-<h3>Number of Local Methods - NLM</h3>
-
-NLM is defined for classes and interfaces.  A local method is defined as a
-method that is declared in the class or interface. NLM can be configured to
-include the local methods of all of the class's superclasses.  Methods with
-public, protected, package and private visibility can be independently
-counted by setting configuration parameters.
-
-<a name="WMC"/>
-<h3>Weighted Methods per Class - WMC</h3>
-
-If the number of methods in a class can be determined during the design
-and modeling phase of a project, it can be used as a predictor of how
-much time and effort is needed to develop, debug and maintain it. This
-metric can be further refined by incorporating a weighting for the
-complexity of each method. The usual weighting is given by the cyclomatic
-complexity of the method.
-<p/>
-The subclasses of a class inherit all of its public and protected methods,
-and possibly its package methods as well, so the number of methods a
-class has directly impacts the complexity of its subclasses. Classes with
-large numbers of methods are often specific to a particular application,
-reducing the ability to reuse them.
-<p/>
-The definition of WMC is based upon NLM, and it provides the same
-configuration parameters for counting inherited methods and of varying
-visibility. The main difference is that NLM always counts each method as 1,
-whereas WMC will weight each method. There are two weighting schemes:
-<ul>
-<li>V(G) the cyclomatic complexity of the method is used as its weight.
-   Methods from class files are given a V(G) of 1.</li>
-<li>the arity, or the number of parameters of the method are used to
-   determine the weight.</li>
-</ul>
-
-<a name="RFC"/>
-<h3>Response For Class - RFC</h3>
-
-The response set of a class is the set of all methods that can be invoked as
-a result of a message sent to an object of the class. This includes methods
-in the class's inheritance hierarchy and methods that can be invoked on
-other objects. The Response For Class metric is defined to be size of the
-response set for the class. A class which provides a larger response set is
-considered to be more complex than one with a smaller response set.
-<p/>
-One reason for this is that if a method call on a class can result in a large
-number of different method calls on the target and other classes, then it
-can be harder to test the behavior of the class and debug problems. It will
-typically require a deeper understanding of the potential interactions that
-objects of the class can have with the rest of the system.
-<p/>
-RFC is defined as the sum of NLM and NRM for the class.  The local methods
-include all of the public, protected, package and private methods, but not
-methods declared only in a superclass.
-
-<a name="DAC"/>
-<h3>Data Abstraction Coupling - DAC</h3>
-
-DAC is defined for classes and interfaces.  It counts the number of reference
-types that are used in the field declarations of the class or interface.  The
-component types of arrays are also counted.  Any field with a type that is
-either a supertype or a subtype of the class is not counted.
-
-<a name="FANOUT"/>
-<h3>Fan Out - FANOUT</h3>
-
-FANOUT is defined for classes and interfaces, constructors and methods. It
-counts the number of reference types that are used in:
-<ul>
-<li>field declarations;</li>
-<li>formal parameters and return types;</li>
-<li>throws declarations;</li>
-<li>local variables.</li>
-</ul>
-
-The component types of arrays are also counted. Any type that is either a
-supertype or a subtype of the class is not counted.
-
-<a name="CBO"/>
-<h3>Coupling Between Objects - CBO</h3>
-
-When one object or class uses another object or class they are said to be
-coupled. One major source of coupling is that between a superclass and a
-subclass. A coupling is also introduced when a method or field in another
-class is accessed, or when an object of another class is passed into or out
-of a method invocation. Coupling Between Objects is a measure of the
-non-inheritance coupling between two objects.
-<p/>
-A high value of coupling reduces the modularity of the class and makes
-reuse more difficult. The more independent a class is the more likely it is
-that it will be possible to reuse it in another part of the system. When a
-class is coupled to another class it becomes sensitive to changes in that
-class, thereby making maintenance for difficult. In addition, a class that is
-overly dependent on other classes can be difficult to understand and test in
-isolation.
-<p/>
-CBO is defined for classes and interfaces, constructors and methods. It
-counts the number of reference types that are used in:
-<ul>
-<li>field declarations</li>
-<li>formal parameters and return types</li>
-<li>throws declarations</li>
-<li>local variables</li>
-</ul>
-
-It also counts:
-<ul>
-<li>types from which field and method selections are made</li>
-</ul>
-
-The component types of arrays are also counted. Any type that is either a
-supertype or a subtype of the class is not counted.
-
-<a name="LCOM"/>
-<h3>Lack of Cohesion Of Methods - LCOM</h3>
-
-The cohesion of a class is the degree to which its methods are related to
-each other. It is determined by examining the pattern of state variable
-accesses within the set of methods. If all the methods access the same state
-variables then they have high cohesion; if they access disjoint sets of
-variables then the cohesion is low. An extreme example of low cohesion
-would be if none of the methods accessed any of the state variables.
-
-If a class exhibits low method cohesion it indicates that the design of the
-class has probably been partitioned incorrectly, and could benefit by being
-split into more classes with individually higher cohesion. On the other
-hand, a high value of cohesion (a low lack of cohesion) implies that the
-class is well designed. A cohesive class will tend to provide a high degree
-of encapsulation, whereas a lack of cohesion decreases encapsulation and
-increases complexity.
-<p/>
-Another form of cohesion that is useful for Java programs is cohesion
-between nested and enclosing classes. A nested class that has very low
-cohesion with its enclosing class would probably better designed as a peer
-class rather than a nested class.
-<p/>
-LCOM is defined for classes. Operationally, LCOM takes each pair of
-methods in the class and determines the set of fields they each access. If
-they have disjoint sets of field accesses increase the count P by one. If they
-share at least one field access then increase Q by one. After considering
-each pair of methods,
-LCOM = (P > Q) ? (P - Q) : 0
-<p/>
-Indirect access to fields via local methods can be considered by setting a
-metric configuration parameter.
-
-<a name="NOC"/>
-<h3>Number Of Classes - NOC</h3>
-
-The overall size of the system can be estimated by calculating the number
-of classes it contains. A large system with more classes is more complex
-than a smaller one because the number of potential interactions between
-objects is higher. This reduces the comprehensibility of the system which
-in turn makes it harder to test, debug and maintain.
-<p/>
-If the number of classes in the system can be projected during the initial
-design phase of the project it can serve as a base for estimating the total
-effort and cost of developing, debugging and maintaining the system.
-<p/>
-The NOC metric can also usefully be applied at the package and class level
-as well as the total system.
-<p/>
-NOCL is defined for class and interfaces. It counts the number of classes or
-interfaces that are declared. This is usually 1, but nested class declarations
-will increase this number.
-</body>
-</html>
-</xsl:template>
-
-<!-- this is the stylesheet css to use for nearly everything -->
-<xsl:template name="stylesheet.css">
-    .bannercell {
-      border: 0px;
-      padding: 0px;
-    }
-    body {
-      margin-left: 10;
-      margin-right: 10;
-      font:normal 80% arial,helvetica,sanserif;
-      background-color:#FFFFFF;
-      color:#000000;
-    }
-    .a td { 
-      background: #efefef;
-    }
-    .b td { 
-      background: #fff;
-    }
-    th, td {
-      text-align: left;
-      vertical-align: top;
-    }
-    th {
-      font-weight:bold;
-      background: #ccc;
-      color: black;
-    }
-    table, th, td {
-      font-size:100%;
-      border: none
-    }
-    table.log tr td, tr th {
-      
-    }
-    h2 {
-      font-weight:bold;
-      font-size:140%;
-      margin-bottom: 5;
-    }
-    h3 {
-      font-size:100%;
-      font-weight:bold;
-      background: #525D76;
-      color: white;
-      text-decoration: none;
-      padding: 5px;
-      margin-right: 2px;
-      margin-left: 2px;
-      margin-bottom: 0;
-    }
-    .Error {
-      font-weight:bold; color:red;
-    }
-
-</xsl:template>
-
-<!-- print the metrics of the class -->
-<xsl:template match="class" mode="class.details">
-  <!--xsl:variable name="package.name" select="(ancestor::package)[last()]/@name"/-->
-  <xsl:variable name="package.name" select="@package"/>
-  <HTML>
-    <HEAD>
-      <xsl:call-template name="create.stylesheet.link">
-        <xsl:with-param name="package.name" select="$package.name"/>
-      </xsl:call-template>
-    </HEAD>
-    <BODY>
-      <xsl:call-template name="pageHeader"/>
-      
-      <H3>Class <xsl:if test="not($package.name = 'unnamed package')"><xsl:value-of select="$package.name"/>.</xsl:if><xsl:value-of select="@name"/></H3>
-      <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
-        <xsl:call-template name="all.metrics.header"/>
-        <xsl:apply-templates select="." mode="print.metrics"/>
-      </table>
-  
-      <H3>Methods</H3>
-      <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
-        <xsl:call-template name="method.metrics.header"/>
-        <xsl:apply-templates select="method" mode="print.metrics"/>
-      </table>
-      
-      <xsl:call-template name="pageFooter"/>
-    </BODY>
-  </HTML>
-</xsl:template>
-
-
-<!-- list of classes in a package -->
-<xsl:template match="package" mode="classes.list">
-  <HTML>
-    <HEAD>
-      <xsl:call-template name="create.stylesheet.link">
-        <xsl:with-param name="package.name" select="@name"/>
-      </xsl:call-template>
-    </HEAD>
-    <BODY>
-      <table width="100%">
-        <tr>
-          <td nowrap="nowrap">
-            <H2><a href="package-summary.html" target="classFrame"><xsl:value-of select="@name"/></a></H2>
-          </td>
-        </tr>
-      </table>
-  
-      <H2>Classes</H2>
-      <TABLE WIDTH="100%">
-        <!-- xalan-nodeset:nodeset for Xalan 1.2.2 -->
-            <xsl:for-each select="$doctree/classes/class[@package = current()/@name]">
-                <xsl:sort select="@name"/>
-          <tr>
-            <td nowrap="nowrap">
-              <a href="{@name}.html" target="classFrame"><xsl:value-of select="@name"/></a>
-            </td>
-          </tr>               
-            </xsl:for-each>
-      </TABLE>
-    </BODY>
-  </HTML>
-</xsl:template>
-
-
-<!--
-  Creates an all-classes.html file that contains a link to all package-summary.html
-  on each class.
--->
-<xsl:template match="metrics" mode="all.classes">
-  <html>
-    <head>
-      <xsl:call-template name="create.stylesheet.link">
-        <xsl:with-param name="package.name" select="''"/>
-      </xsl:call-template>
-    </head>
-    <body>
-      <h2>Classes</h2>
-      <table width="100%">
-          <xsl:for-each select="$doctree/classes/class">
-              <xsl:sort select="@name"/>
-              <xsl:apply-templates select="." mode="all.classes"/>
-          </xsl:for-each>
-      </table>
-    </body>
-  </html>
-</xsl:template>
-
-<xsl:template match="class" mode="all.classes">
-    <xsl:variable name="package.name" select="@package"/>
-    <xsl:variable name="class.name" select="@name"/>
-  <tr>
-    <td nowrap="nowrap">
-      <a target="classFrame">
-        <xsl:attribute name="href">
-          <xsl:if test="not($package.name='unnamed package')">
-            <xsl:value-of select="translate($package.name,'.','/')"/><xsl:text>/</xsl:text>
-          </xsl:if>
-          <xsl:value-of select="$class.name"/><xsl:text>.html</xsl:text>
-        </xsl:attribute>
-        <xsl:value-of select="$class.name"/>
-      </a>
-    </td>
-  </tr>
-</xsl:template>
-
-<!--
-  Creates an html file that contains a link to all package-summary.html files on
-  each package existing on testsuites.
-  @bug there will be a problem here, I don't know yet how to handle unnamed package :(
--->
-<xsl:template match="metrics" mode="all.packages">
-  <html>
-    <head>
-      <xsl:call-template name="create.stylesheet.link">
-        <xsl:with-param name="package.name" select="./package/@name"/>
-      </xsl:call-template>
-    </head>
-    <body>
-      <h2><a href="overview-summary.html" target="classFrame">Home</a></h2>
-      <h2>Packages</h2>
-        <table width="100%">
-          <xsl:apply-templates select=".//package[not(./@name = 'unnamed package')]" mode="all.packages">
-            <xsl:sort select="@name"/>
-          </xsl:apply-templates>
-        </table>
-    </body>
-  </html>
-</xsl:template>
-
-<xsl:template match="package" mode="all.packages">
-  <tr>
-    <td nowrap="nowrap">
-      <a href="{translate(@name,'.','/')}/package-summary.html" target="classFrame">
-        <xsl:value-of select="@name"/>
-      </a>
-    </td>
-  </tr>
-</xsl:template>
-
-
-<xsl:template match="metrics" mode="overview.packages">
-  <html>
-    <head>
-      <xsl:call-template name="create.stylesheet.link">
-        <xsl:with-param name="package.name" select="''"/>
-      </xsl:call-template>
-    </head>
-    <body onload="open('allclasses-frame.html','classListFrame')">
-    <xsl:call-template name="pageHeader"/>
-    <h3>Summary</h3>
-    <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
-    <tr>
-      <th><a href="metrics-reference.html#V(G)">V(G)</a></th>
-      <th><a href="metrics-reference.html#LOC">LOC</a></th>
-      <th><a href="metrics-reference.html#DIT">DIT</a></th>
-      <th><a href="metrics-reference.html#NOA">NOA</a></th>
-      <th><a href="metrics-reference.html#NRM">NRM</a></th>
-      <th><a href="metrics-reference.html#NLM">NLM</a></th>
-      <th><a href="metrics-reference.html#WMC">WMC</a></th>
-      <th><a href="metrics-reference.html#RFC">RFC</a></th>
-      <th><a href="metrics-reference.html#DAC">DAC</a></th>
-      <th><a href="metrics-reference.html#FANOUT">FANOUT</a></th>
-      <th><a href="metrics-reference.html#CBO">CBO</a></th>
-      <th><a href="metrics-reference.html#LCOM">LCOM</a></th>
-      <th><a href="metrics-reference.html#NOCL">NOCL</a></th>
-    </tr>
-    <xsl:apply-templates select="." mode="print.metrics"/>
-    </table>    
-    <table border="0" width="100%">
-    <tr>
-    <td style="text-align: justify;">
-    Note: Metrics evaluate the quality of software by analyzing the program source and quantifying
-    various kind of complexity. Complexity is a common source of problems and defects in software.
-    High complexity makes it more difficult to develop, understand, maintain, extend, test and debug
-    a program.
-    <p/>
-    The primary use of metrics is to focus your attention on those parts of code that potentially are
-    complexity hot spots. Once the complex areas your program have been uncovered, you can take remedial
-    actions.
-    For additional information about metrics and their meaning, please consult
-    Metamata Metrics manual.
-    </td>
-    </tr>
-    </table>
-
-    <h3>Packages</h3>
-    <table border="0" cellpadding="5" cellspacing="2" width="100%">
-      <xsl:call-template name="all.metrics.header"/>
-      <xsl:for-each select=".//package[not(@name = 'unnamed package')]">
-        <xsl:sort select="@name" order="ascending"/>
-        <xsl:apply-templates select="." mode="print.metrics"/>
-      </xsl:for-each>
-    </table>
-    <!-- @bug there could some classes at this level (classes in unnamed package) -->
-    <xsl:call-template name="pageFooter"/>
-    </body>
-    </html>
-</xsl:template>
-
-<xsl:template match="package" mode="package.summary">
-  <HTML>
-    <HEAD>
-      <xsl:call-template name="create.stylesheet.link">
-        <xsl:with-param name="package.name" select="@name"/>
-      </xsl:call-template>
-    </HEAD>
-    <body onload="open('package-frame.html','classListFrame')">
-      <xsl:call-template name="pageHeader"/>
-      <!-- create an anchor to this package name -->
-      <h3>Package <xsl:value-of select="@name"/></h3>
-      
-      <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
-        <xsl:call-template name="all.metrics.header"/>
-        <xsl:apply-templates select="." mode="print.metrics"/>
-      </table>
-      
-      <table border="0" width="100%">
-      <tr>
-      <td style="text-align: justify;">
-      Note: Metrics evaluate the quality of software by analyzing the program source and quantifying
-      various kind of complexity. Complexity is a common source of problems and defects in software.
-      High complexity makes it more difficult to develop, understand, maintain, extend, test and debug
-      a program.
-      <p/>
-      The primary use of metrics is to focus your attention on those parts of code that potentially are
-      complexity hot spots. Once the complex areas your program have been uncovered, you can take remedial
-      actions.
-      For additional information about metrics and their meaning, please consult
-      Metamata Metrics manual.
-      </td>
-      </tr>
-      </table>
-      
-      <xsl:variable name="classes-in-package" select="$doctree/classes/class[@package = current()/@name]"/>
-      <xsl:if test="count($classes-in-package) &gt; 0">
-        <H3>Classes</H3>
-        <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
-          <xsl:call-template name="all.metrics.header"/>
-          <xsl:for-each select="$classes-in-package">
-                <xsl:sort select="@name"/>
-                <xsl:apply-templates select="." mode="print.metrics"/>
-          </xsl:for-each>
-        </table>
-      </xsl:if>
-      
-      <xsl:call-template name="pageFooter"/>
-    </body>
-  </HTML>
-</xsl:template>
-
-
-<!--
-    transform string like a.b.c to ../../../
-    @param path the path to transform into a descending directory path
--->
-<xsl:template name="path">
-  <xsl:param name="path"/>
-  <xsl:if test="contains($path,'.')">
-    <xsl:text>../</xsl:text>  
-    <xsl:call-template name="path">
-      <xsl:with-param name="path"><xsl:value-of select="substring-after($path,'.')"/></xsl:with-param>
-    </xsl:call-template>  
-  </xsl:if>
-  <xsl:if test="not(contains($path,'.')) and not($path = '')">
-    <xsl:text>../</xsl:text>  
-  </xsl:if>
-</xsl:template>
-
-
-<!-- create the link to the stylesheet based on the package name -->
-<xsl:template name="create.stylesheet.link">
-  <xsl:param name="package.name"/>
-  <LINK REL ="stylesheet" TYPE="text/css" TITLE="Style"><xsl:attribute name="href"><xsl:if test="not($package.name = 'unnamed package')"><xsl:call-template name="path"><xsl:with-param name="path" select="$package.name"/></xsl:call-template></xsl:if>stylesheet.css</xsl:attribute></LINK>
-</xsl:template>
-
-
-<!-- Page Header -->
-<xsl:template name="pageHeader">
-
-  <!-- jakarta logo -->
-  <table border="0" cellpadding="0" cellspacing="0" width="100%">
-  <tr>
-    <td class="bannercell" rowspan="2">
-      <a href="http://jakarta.apache.org/">
-      <img src="http://jakarta.apache.org/images/jakarta-logo.gif" alt="http://jakarta.apache.org" align="left" border="0"/>
-      </a>
-    </td>
-    <td style="text-align:right"><h2>Source Code Metrics</h2></td>
-    </tr>
-    <tr>
-    <td style="text-align:right">Designed for use with <a href='http://www.webgain.com/products/quality_analyzer/'>Webgain QA/Metamata Metrics</a> and <a href='http://jakarta.apache.org'>Ant</a>.</td>
-    </tr>
-  </table>
-  <hr size="1"/>
-</xsl:template>
-
-<!-- Page Footer -->
-<xsl:template name="pageFooter">
-    <table width="100%">
-      <tr><td><hr noshade="yes" size="1"/></td></tr>
-      <tr><td>
-      <div align="center"><font color="#525D76" size="-1"><em>
-      Copyright &#169; 1999-2001, Apache Software Foundation
-      </em></font></div>
-      </td></tr>
-    </table>
-</xsl:template>
-
-<!-- class header -->
-<xsl:template name="all.metrics.header">
-  <tr>
-    <th width="80%">Name</th>
-    <th nowrap="nowrap">V(G)</th>
-    <th>LOC</th>
-    <th>DIT</th>
-    <th>NOA</th>
-    <th>NRM</th>
-    <th>NLM</th>
-    <th>WMC</th>
-    <th>RFC</th>
-    <th>DAC</th>
-    <th>FANOUT</th>
-    <th>CBO</th>
-    <th>LCOM</th>
-    <th>NOCL</th>
-  </tr>
-</xsl:template>
-
-<!-- method header -->
-<xsl:template name="method.metrics.header">
-  <tr>
-    <th width="80%">Name</th>
-    <th nowrap="nowrap">V(G)</th>
-    <th>LOC</th>
-    <th>FANOUT</th>
-    <th>CBO</th>
-  </tr>
-</xsl:template>
-
-<!-- method information -->
-<xsl:template match="method" mode="print.metrics">
-  <tr>
-    <xsl:call-template name="alternate-row"/>
-    <td><xsl:apply-templates select="@name"/></td>
-    <td><xsl:apply-templates select="@vg"/></td>
-    <td><xsl:apply-templates select="@loc"/></td>
-    <td><xsl:apply-templates select="@fanout"/></td>
-    <td><xsl:apply-templates select="@cbo"/></td>
-  </tr>
-</xsl:template>
-
-<!-- class information -->
-<xsl:template match="class" mode="print.metrics">
-  <tr>
-    <xsl:call-template name="alternate-row"/>
-    <td><a href="{@name}.html"><xsl:value-of select="@name"/></a></td>
-    <td><xsl:apply-templates select="@vg"/></td>
-    <td><xsl:apply-templates select="@loc"/></td>
-    <td><xsl:apply-templates select="@dit"/></td>
-    <td><xsl:apply-templates select="@noa"/></td>
-    <td><xsl:apply-templates select="@nrm"/></td>
-    <td><xsl:apply-templates select="@nlm"/></td>
-    <td><xsl:apply-templates select="@wmc"/></td>
-    <td><xsl:apply-templates select="@rfc"/></td>
-    <td><xsl:apply-templates select="@dac"/></td>
-    <td><xsl:apply-templates select="@fanout"/></td>
-    <td><xsl:apply-templates select="@cbo"/></td>
-    <td><xsl:apply-templates select="@lcom"/></td>
-    <td><xsl:apply-templates select="@nocl"/></td>
-  </tr>
-</xsl:template>
-
-<xsl:template match="file|package" mode="print.metrics">
-  <tr>
-    <xsl:call-template name="alternate-row"/>
-    <td>
-    <a href="{translate(@name,'.','/')}/package-summary.html" target="classFrame">
-    <xsl:value-of select="@name"/>
-    </a>
-    </td>
-    <td><xsl:apply-templates select="@vg"/></td>
-    <td><xsl:apply-templates select="@loc"/></td>
-    <td><xsl:apply-templates select="@dit"/></td>
-    <td><xsl:apply-templates select="@noa"/></td>
-    <td><xsl:apply-templates select="@nrm"/></td>
-    <td><xsl:apply-templates select="@nlm"/></td>
-    <td><xsl:apply-templates select="@wmc"/></td>
-    <td><xsl:apply-templates select="@rfc"/></td>
-    <td><xsl:apply-templates select="@dac"/></td>
-    <td><xsl:apply-templates select="@fanout"/></td>
-    <td><xsl:apply-templates select="@cbo"/></td>
-    <td><xsl:apply-templates select="@lcom"/></td>
-    <td><xsl:apply-templates select="@nocl"/></td>
-  </tr>
-</xsl:template>
-
-<xsl:template match="metrics" mode="print.metrics">
-  <tr>
-    <xsl:call-template name="alternate-row"/>
-      <!-- the global metrics is the top package metrics -->
-    <td><xsl:apply-templates select="./package/@vg"/></td>
-    <td><xsl:apply-templates select="./package/@loc"/></td>
-    <td><xsl:apply-templates select="./package/@dit"/></td>
-    <td><xsl:apply-templates select="./package/@noa"/></td>
-    <td><xsl:apply-templates select="./package/@nrm"/></td>
-    <td><xsl:apply-templates select="./package/@nlm"/></td>
-    <td><xsl:apply-templates select="./package/@wmc"/></td>
-    <td><xsl:apply-templates select="./package/@rfc"/></td>
-    <td><xsl:apply-templates select="./package/@dac"/></td>
-    <td><xsl:apply-templates select="./package/@fanout"/></td>
-    <td><xsl:apply-templates select="./package/@cbo"/></td>
-    <td><xsl:apply-templates select="./package/@lcom"/></td>
-    <td><xsl:apply-templates select="./package/@nocl"/></td>
-  </tr>
-</xsl:template>
-
-<!-- alternated row style -->
-<xsl:template name="alternate-row">
-<xsl:attribute name="class">
-  <xsl:if test="position() mod 2 = 1">a</xsl:if>
-  <xsl:if test="position() mod 2 = 0">b</xsl:if>
-</xsl:attribute>
-</xsl:template>
-
-
-<!-- how to display the metrics with their max value -->
-<!-- @todo the max values must be external to the xsl -->
-
-  <xsl:template match="@vg">
-    <xsl:call-template name="display-value">
-      <xsl:with-param name="value" select="current()"/>
-      <xsl:with-param name="max" select="$vg.max"/>
-    </xsl:call-template>
-  </xsl:template>
-
-  <xsl:template match="@loc">
-    <xsl:call-template name="display-value">
-      <xsl:with-param name="value" select="current()"/>
-      <xsl:with-param name="max" select="$loc.max"/>
-    </xsl:call-template>
-  </xsl:template>
-  
-  <xsl:template match="@dit">
-    <xsl:call-template name="display-value">
-      <xsl:with-param name="value" select="current()"/>
-      <xsl:with-param name="max" select="$dit.max"/>
-    </xsl:call-template>
-  </xsl:template>
-
-  <xsl:template match="@noa">
-    <xsl:call-template name="display-value">
-      <xsl:with-param name="value" select="current()"/>
-      <xsl:with-param name="max" select="$noa.max"/>
-    </xsl:call-template>
-  </xsl:template>
-
-  <xsl:template match="@nrm">
-    <xsl:call-template name="display-value">
-      <xsl:with-param name="value" select="current()"/>
-      <xsl:with-param name="max" select="$nrm.max"/>
-    </xsl:call-template>
-  </xsl:template>
-
-  <xsl:template match="@nlm">
-    <xsl:call-template name="display-value">
-      <xsl:with-param name="value" select="current()"/>
-      <xsl:with-param name="max" select="$nlm.max"/>
-    </xsl:call-template>
-  </xsl:template>
-
-  <xsl:template match="@wmc">
-    <xsl:call-template name="display-value">
-      <xsl:with-param name="value" select="current()"/>
-      <xsl:with-param name="max" select="$wmc.max"/>
-    </xsl:call-template>
-  </xsl:template>
-
-  <xsl:template match="@rfc">
-    <xsl:call-template name="display-value">
-      <xsl:with-param name="value" select="current()"/>
-      <xsl:with-param name="max" select="$rfc.max"/>
-    </xsl:call-template>
-  </xsl:template>
-
-  <xsl:template match="@dac">
-    <xsl:call-template name="display-value">
-      <xsl:with-param name="value" select="current()"/>
-      <xsl:with-param name="max" select="$dac.max"/>
-    </xsl:call-template>
-  </xsl:template>
-
-  <xsl:template match="@fanout">
-    <xsl:call-template name="display-value">
-      <xsl:with-param name="value" select="current()"/>
-      <xsl:with-param name="max" select="$fanout.max"/>
-    </xsl:call-template>
-  </xsl:template>
-
-  <xsl:template match="@cbo">
-    <xsl:call-template name="display-value">
-      <xsl:with-param name="value" select="current()"/>
-      <xsl:with-param name="max" select="$cbo.max"/>
-    </xsl:call-template>
-  </xsl:template>
-
-  <xsl:template match="@lcom">
-    <xsl:call-template name="display-value">
-      <xsl:with-param name="value" select="current()"/>
-      <xsl:with-param name="max" select="$lcom.max"/>
-    </xsl:call-template>
-  </xsl:template>
-
-  <xsl:template match="@nocl">
-    <xsl:call-template name="display-value">
-      <xsl:with-param name="value" select="current()"/>
-      <xsl:with-param name="max" select="$nocl.max"/>
-    </xsl:call-template>
-  </xsl:template>
-
-  <xsl:template name="display-value">
-    <xsl:param name="value"/>
-    <xsl:param name="max"/>
-    <xsl:if test="$value > $max">
-      <xsl:attribute name="class">Error</xsl:attribute>
-    </xsl:if>
-    <xsl:value-of select="$value"/>
-  </xsl:template>
-
-</xsl:stylesheet>
-  
diff --git a/src/etc/tagdiff.xsl b/src/etc/tagdiff.xsl
deleted file mode 100644
index 4dac8f4..0000000
--- a/src/etc/tagdiff.xsl
+++ /dev/null
@@ -1,162 +0,0 @@
-<!-- a stylesheet to display changelogs ala netbeans -->
-<xsl:stylesheet
-    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-    version="1.0">
-
-  <xsl:param name="title"/>
-  <xsl:param name="module"/>
-  <xsl:param name="cvsweb"/>
-
-  <xsl:output method="html" indent="yes"/>
-
-  <!-- Copy standard document elements.  Elements that
-       should be ignored must be filtered by apply-templates
-       tags. -->
-  <xsl:template match="*">
-    <xsl:copy>
-      <xsl:copy-of select="attribute::*[. != '']"/>
-      <xsl:apply-templates/>
-    </xsl:copy>
-  </xsl:template>
-
-  <xsl:template match="tagdiff">
-    <HTML>
-      <HEAD>
-        <TITLE><xsl:value-of select="$title"/></TITLE>
-      </HEAD>
-      <BODY link="#000000" alink="#000000" vlink="#000000" text="#000000">
-        <style type="text/css">
-          body, p {
-          font-family: verdana,arial,helvetica;
-          font-size: 80%;
-          color:#000000;
-          }
-	  .dateAndAuthor {
-          font-family: verdana,arial,helvetica;
-          font-size: 80%;
-          font-weight: bold;
-          text-align:left;
-          background:#a6caf0;
-	  }
-          tr, td{
-          font-family: verdana,arial,helvetica;
-          font-size: 80%;
-          background:#eeeee0;
-          }	  
-	  </style>        
-          <h1>
-            <a name="top"><xsl:value-of select="$title"/></a>
-          </h1>
-          Tagdiff between <xsl:value-of select="@startTag"/> <xsl:value-of select="@startDate"/> and
-			<xsl:value-of select="@endTag"/> <xsl:value-of select="@endDate"/>
-          <p align="right">Designed for use with <a href="http://jakarta.apache.org">Ant</a>.</p>
-          <hr size="2"/>
-	<a name="TOP"/>
-	<table width="100%">
-		<tr>
-			<td align="right">
-				<a href="#New">New Files</a> |
-				<a href="#Modified">Modified Files</a> |
-				<a href="#Removed">Removed Files</a>
-			</td>
-		</tr>
-	</table>
-        <TABLE BORDER="0" WIDTH="100%" CELLPADDING="3" CELLSPACING="1">
-		<xsl:call-template name="show-entries">
-			<xsl:with-param name="title">New Files</xsl:with-param>
-			<xsl:with-param name="anchor">New</xsl:with-param>
-			<xsl:with-param name="entries" select=".//entry[file/revision][not(file/prevrevision)]"/>
-		</xsl:call-template>
-
-		<xsl:call-template name="show-entries">
-			<xsl:with-param name="title">Modified Files</xsl:with-param>
-			<xsl:with-param name="anchor">Modified</xsl:with-param>
-			<xsl:with-param name="entries" select=".//entry[file/revision][file/prevrevision]"/>
-		</xsl:call-template>
-
-		<xsl:call-template name="show-entries">
-			<xsl:with-param name="title">Removed Files</xsl:with-param>
-			<xsl:with-param name="anchor">Removed</xsl:with-param>
-			<xsl:with-param name="entries" select=".//entry[not(file/revision)][not(file/prevrevision)]"/>
-		</xsl:call-template>
-        </TABLE>
-        
-      </BODY>
-    </HTML>
-  </xsl:template>
-
-  <xsl:template name="show-entries">
-	<xsl:param name="title"/>
-	<xsl:param name="anchor"/>
-	<xsl:param name="entries"/>
-	<TR>
-		<TD colspan="2" class="dateAndAuthor">
-			<a>
-				<xsl:attribute name="name"><xsl:value-of select="$anchor"/></xsl:attribute>
-				<xsl:value-of select="$title"/> - <xsl:value-of select="count($entries)"/> entries
-			</a>
-			<a href="#TOP">(back to top)</a>
-		</TD>
-	</TR>
-	<TR>
-		<TD width="20">
-			<xsl:text>    </xsl:text>
-		</TD>
-		<TD>
-		        <ul>
-				<xsl:apply-templates select="$entries"/>
-			</ul>
-		</TD>
-	</TR>
-  </xsl:template>  
-
-  <xsl:template match="entry">
-	<xsl:apply-templates select="file"/>
-  </xsl:template>
-
-  <xsl:template match="date">
-    <i><xsl:value-of select="."/></i>
-  </xsl:template>
-
-  <xsl:template match="time">
-    <i><xsl:value-of select="."/></i>
-  </xsl:template>
-
-  <xsl:template match="author">
-    <i>
-      <a>
-        <xsl:attribute name="href">mailto:<xsl:value-of select="."/></xsl:attribute>
-        <xsl:value-of select="."/>
-      </a>
-    </i>
-  </xsl:template>
-
-  <xsl:template match="file">
-    <li>
-      <a target="_new">
-        <xsl:attribute name="href"><xsl:value-of select="$cvsweb"/><xsl:value-of select="$module" />/<xsl:value-of select="name" /></xsl:attribute>
-        <xsl:value-of select="name" />
-      </a>
-      <xsl:if test="string-length(prevrevision) > 0 or string-length(revision) > 0">
-      <xsl:text> </xsl:text>
-      <a target="_new">
-        <xsl:choose>
-          <xsl:when test="string-length(prevrevision) = 0 ">
-            <xsl:attribute name="href"><xsl:value-of select="$cvsweb"/><xsl:value-of select="$module" />/<xsl:value-of select="name" />?rev=<xsl:value-of select="revision" />&amp;content-type=text/x-cvsweb-markup</xsl:attribute>
-          </xsl:when>
-          <xsl:otherwise>
-            <xsl:attribute name="href"><xsl:value-of select="$cvsweb"/><xsl:value-of select="$module" />/<xsl:value-of select="name" />?r1=<xsl:value-of select="revision" />&amp;r2=<xsl:value-of select="prevrevision"/>&amp;diff_format=h</xsl:attribute>
-          </xsl:otherwise>
-        </xsl:choose> (<xsl:value-of select="revision"/>)
-      </a>
-      </xsl:if>
-    </li>
-  </xsl:template>
-
-  <!-- Any elements within a msg are processed,
-       so that we can preserve HTML tags. -->
-  <xsl:template match="msg">
-    <b><xsl:apply-templates/></b>
-  </xsl:template>
-  
-</xsl:stylesheet>
diff --git a/src/etc/testcases/.cvsignore b/src/etc/testcases/.cvsignore
deleted file mode 100644
index 08def9b..0000000
--- a/src/etc/testcases/.cvsignore
+++ /dev/null
@@ -1,2 +0,0 @@
-taskdefs.tmp
-
diff --git a/src/etc/testcases/asf-logo.gif b/src/etc/testcases/asf-logo.gif
deleted file mode 100644
index 22eb9d7..0000000
--- a/src/etc/testcases/asf-logo.gif
+++ /dev/null
Binary files differ
diff --git a/src/etc/testcases/core/immutable.xml b/src/etc/testcases/core/immutable.xml
deleted file mode 100644
index e32b469..0000000
--- a/src/etc/testcases/core/immutable.xml
+++ /dev/null
@@ -1,63 +0,0 @@
-<?xml version="1.0"?>
-
-<project name="available-test" basedir="." default="test1">
-
-  <target name="test1">
-    <property name="test" value="original"/>
-    <available file="immutable.xml" property="test" value="override"/>
-  </target>
-  
-  <target name="test2">
-    <tstamp/>
-    <tstamp prefix="start"/>
-  </target>
-
-  <target name="test3">
-    <property name="DSTAMP" value="original"/>
-    <tstamp/>
-  </target>
-
-  <target name="test4">
-    <property name="test" value="original"/>
-    <condition property="test" value="override">
-      <equals arg1="1" arg2="1"/>
-    </condition>
-  </target>
-
-  <target name="test5">
-    <property name="test" value="original"/>
-    <checksum file="immutable.xml" verifyProperty="test"/>
-  </target>
-  
-  <target name="test6">
-    <property name="test1" value="original"/>
-    <property name="test2" value="original"/>
-    <!--  How to make this cross-platform? -->
-    <exec executable="cmd.exe" os="Windows 2000" outputproperty="test1" resultProperty="test2">
-      <arg line="/c dir"/>
-    </exec>
-  </target>
-
-  <target name="test7">
-    <property name="test" value="original"/>
-    <pathconvert targetos="unix" property="test" >
-      <path>
-        <pathelement location="/lib/weblogicaux.jar" />
-        <pathelement location="/classes" />
-        <pathelement location="/mssqlserver4/classes" />
-        <pathelement location="c:\winnt\System32" />
-      </path>
-    </pathconvert>
-  </target>
-
-  <target name="test8">
-    <antcall inheritAll="false" target="echo-target">
-      <param name="echo.value" value="Meep meep!" />
-    </antcall>
-  </target>
-
-  <target name="echo-target">
-    <echo message="Value of echo=${echo.value}"/>
-  </target>
-
-</project>
diff --git a/src/etc/testcases/core/include/basic/include.inc b/src/etc/testcases/core/include/basic/include.inc
deleted file mode 100644
index 3332925..0000000
--- a/src/etc/testcases/core/include/basic/include.inc
+++ /dev/null
@@ -1,3 +0,0 @@
-<target name="test1">
-    <echo message="from included entity"/>
-</target>
diff --git a/src/etc/testcases/core/include/basic/include.xml b/src/etc/testcases/core/include/basic/include.xml
deleted file mode 100644
index f5879f2..0000000
--- a/src/etc/testcases/core/include/basic/include.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE project [
-  <!ENTITY include SYSTEM "file:./include.inc">
-]>
-
-<project name="include-test" basedir="." default="test1">
-    &include;
-</project>
diff --git a/src/etc/testcases/core/include/basic/relative.xml b/src/etc/testcases/core/include/basic/relative.xml
deleted file mode 100644
index bcdf7ee..0000000
--- a/src/etc/testcases/core/include/basic/relative.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE project [
-  <!ENTITY include SYSTEM "./include.inc">
-]>
-
-<project name="include-test" basedir="." default="test1">
-    &include;
-</project>
diff --git "a/src/etc/testcases/core/include/frag\043ment/include.inc" "b/src/etc/testcases/core/include/frag\043ment/include.inc"
deleted file mode 100644
index 3332925..0000000
--- "a/src/etc/testcases/core/include/frag\043ment/include.inc"
+++ /dev/null
@@ -1,3 +0,0 @@
-<target name="test1">
-    <echo message="from included entity"/>
-</target>
diff --git "a/src/etc/testcases/core/include/frag\043ment/include.xml" "b/src/etc/testcases/core/include/frag\043ment/include.xml"
deleted file mode 100644
index 5dbeff6..0000000
--- "a/src/etc/testcases/core/include/frag\043ment/include.xml"
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE project [
-  <!ENTITY include SYSTEM "file:include.inc">
-]>
-
-<project name="include-test" basedir="." default="test1">
-    &include;
-</project>
diff --git "a/src/etc/testcases/core/include/frag\043ment/relative.xml" "b/src/etc/testcases/core/include/frag\043ment/relative.xml"
deleted file mode 100644
index f71ed40..0000000
--- "a/src/etc/testcases/core/include/frag\043ment/relative.xml"
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE project [
-  <!ENTITY include SYSTEM "include.inc">
-]>
-
-<project name="include-test" basedir="." default="test1">
-    &include;
-</project>
diff --git "a/src/etc/testcases/core/include/frag\043ment/simple.xml" "b/src/etc/testcases/core/include/frag\043ment/simple.xml"
deleted file mode 100644
index acdff54..0000000
--- "a/src/etc/testcases/core/include/frag\043ment/simple.xml"
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0"?>
-<project name="include-test" basedir="." default="test1">
-<target name="test1">
-    <echo message="from simple buildfile"/>
-</target>
-</project>
diff --git a/src/etc/testcases/taskdefs/.cvsignore b/src/etc/testcases/taskdefs/.cvsignore
deleted file mode 100644
index 08def9b..0000000
--- a/src/etc/testcases/taskdefs/.cvsignore
+++ /dev/null
@@ -1,2 +0,0 @@
-taskdefs.tmp
-
diff --git a/src/etc/testcases/taskdefs/abstractcvstask.xml b/src/etc/testcases/taskdefs/abstractcvstask.xml
deleted file mode 100644
index 9a7da3f..0000000
--- a/src/etc/testcases/taskdefs/abstractcvstask.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0"?>
-
-<project name="abstractcvstask-test" basedir="../../../../" 
-         default="all">
-
-  <property name="file" value="ant.properties.sample" />
-  <target name="all">
-    <cvs failonerror="true" command="status ${file}"/>
-    <cvs failonerror="true">
-      <commandline>
-        <argument value="up"/>
-        <argument value="-r"/>
-        <argument value="1.1"/>
-        <argument value="${file}"/>
-      </commandline>
-    </cvs>
-    <cvs failonerror="true" command="status ${file}"/>
-    <cvs failonerror="true">
-      <commandline>
-        <argument line="up -r HEAD ${file}" />
-      </commandline>
-    </cvs>
-    <cvs failonerror="true" command="status ${file}"/>
-  </target>
-
-  <target name="package-attribute">
-    <mkdir dir="tmpdir" />
-    <cvs cvsroot=":pserver:anoncvs@cvs.apache.org:/home/cvspublic"
-         package="jakarta-ant/build.xml"
-         dest="tmpdir"
-         quiet="true" />
-  </target>
-
-  <target name="tag-attribute">
-    <mkdir dir="tmpdir" />
-    <cvs cvsroot=":pserver:anoncvs@cvs.apache.org:/home/cvspublic"
-         package="jakarta-ant/build.xml"
-         dest="tmpdir"
-         quiet="true"
-         tag="ANT_141" />
-    <cvs cvsroot=":pserver:anoncvs@cvs.apache.org:/home/cvspublic"
-         package="jakarta-ant/build.xml"
-         dest="tmpdir"
-         command="status"/>
-  </target>
-
-  <target name="cleanup">
-    <delete dir="tmpdir" />
-  </target>
-</project>
diff --git a/src/etc/testcases/taskdefs/ant.xml b/src/etc/testcases/taskdefs/ant.xml
deleted file mode 100644
index 4024bc3..0000000
--- a/src/etc/testcases/taskdefs/ant.xml
+++ /dev/null
@@ -1,86 +0,0 @@
-<?xml version="1.0"?>
-
-<project name="ant-test" basedir="." default="test1">
-
-  <target name="cleanup">
-    <delete file="test1.log" />
-    <delete file="test2.log" />
-    <delete file="ant/test3.log" />
-    <delete file="ant/test4.log" />
-  </target>
-
-  <target name="all" depends="test1,test2,test3,test4"/>
-
-  <target name="test1">
-    <ant antfile="ant.xml" dir="." target="test1"/>
-  </target>
-
-  <target name="test2">
-    <antcall/>
-  </target>
-
-  <target name="test3">
-    <antcall target="test3"/>
-  </target>
-
-  <target name="test4">
-    <antcall target=""/>
-  </target>
-
-  <target name="test5">
-    <antcall target="dummy"/>
-  </target>
-
-  <target name="test6">
-    <ant antfile="ant.xml" dir="." target="dummy"/>
-  </target>
-
-  <target name="dummy">
-  </target>
-
-  <target name="inheritBasedir">
-    <ant antfile="ant/ant.xml" target="dummy" inheritAll="true" />
-  </target>
-
-  <target name="doNotInheritBasedir">
-    <ant antfile="ant/ant.xml" target="dummy" inheritAll="false" />
-  </target>
-
-  <target name="explicitBasedir1">
-    <ant antfile="taskdefs/ant/ant.xml" target="dummy" inheritAll="true" 
-         dir=".." />
-  </target>
-
-  <target name="explicitBasedir2">
-    <ant antfile="taskdefs/ant/ant.xml" target="dummy" inheritAll="false" 
-         dir=".." />
-  </target>
-
-  <target name="tripleCall">
-    <ant antfile="ant/ant.xml" target="callback" inheritAll="false" />
-  </target>
-
-  <target name="testInherit">
-    <ant antfile="ant/references.xml" inheritRefs="true" target="dummy" />
-  </target>
-
-  <target name="testNoInherit">
-    <ant antfile="ant/references.xml" inheritRefs="false" target="dummy" />
-  </target>
-
-  <target name="testRename">
-    <ant antfile="ant/references.xml" inheritRefs="false" target="dummy">
-      <reference refid="path" torefid="newpath" />
-    </ant>
-  </target>
-
-  <target name="testLogfilePlacement">
-    <ant antfile="ant.xml" target="dummy" output="test1.log"
-         inheritall="false" />
-    <ant antfile="ant.xml" target="dummy" output="test2.log" />
-    <ant antfile="ant.xml" target="dummy" output="test3.log"
-         inheritall="false" dir="ant" />
-    <ant antfile="ant.xml" target="dummy" output="test4.log" 
-         dir="ant" />
-  </target>
-</project>
diff --git a/src/etc/testcases/taskdefs/ant/ant.xml b/src/etc/testcases/taskdefs/ant/ant.xml
deleted file mode 100644
index a1d585e..0000000
--- a/src/etc/testcases/taskdefs/ant/ant.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<project name="test" default="def" basedir=".">
-
-  <target name="def">
-    <fail>This build file should only be run from within the testcase</fail>
-  </target>
-
-  <target name="dummy">
-    <echo message="${basedir}" />
-  </target>
-
-  <target name="callback">
-    <ant antfile="../ant.xml" target="dummy" inheritAll="false" />
-  </target>
-
-
-</project>
\ No newline at end of file
diff --git a/src/etc/testcases/taskdefs/ant/references.xml b/src/etc/testcases/taskdefs/ant/references.xml
deleted file mode 100644
index 937a0e5..0000000
--- a/src/etc/testcases/taskdefs/ant/references.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<project name="test" default="def" basedir=".">
-
-  <path id="no-override" />
-
-  <target name="def">
-    <fail>This build file should only be run from within the testcase</fail>
-  </target>
-
-  <target name="dummy" />
-</project>
\ No newline at end of file
diff --git a/src/etc/testcases/taskdefs/antstructure.xml b/src/etc/testcases/taskdefs/antstructure.xml
deleted file mode 100644
index 8d49ad9..0000000
--- a/src/etc/testcases/taskdefs/antstructure.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0"?>
-
-<project name="antstructure-test" basedir="." default="test1">
-
-  <target name="test1">
-    <antstructure/>
-  </target>
-
-</project>
diff --git a/src/etc/testcases/taskdefs/available.xml b/src/etc/testcases/taskdefs/available.xml
deleted file mode 100644
index 4bdd7fd..0000000
--- a/src/etc/testcases/taskdefs/available.xml
+++ /dev/null
@@ -1,137 +0,0 @@
-<?xml version="1.0"?>
-
-<project name="available-test" basedir="." default="test1">
-
-  <target name="test1">
-    <available/>
-  </target>
-
-  <target name="test2">
-    <available property="test"/>
-  </target>
-
-  <target name="test3">
-    <available file="test"/>
-  </target>
-
-  <target name="test4">
-    <available property="test" 
-               file="src/etc/testcases/taskdefs/this_file_does_not_exist"/>
-  </target>
-
-  <target name="test5">
-    <available property="test" 
-               file="available.xml"/>
-  </target>
-
-  <target name="test6">
-    <available property="test" 
-               resource="org/apache/tools/ant/taskdefs/this_resource_does_not_exist"/>
-  </target>
-
-  <target name="test7">
-    <available property="test" 
-               resource="org/apache/tools/ant/taskdefs/defaults.properties"/>
-  </target>
-
-  <target name="test8">
-    <available property="test" 
-               classname="org.apache.tools.ant.taskdefs.this_class_does_not_exist"/>
-  </target>
-
-  <target name="test9">
-    <available property="test" 
-               classname="org.apache.tools.ant.taskdefs.Ant"/>
-  </target>
-
-  <target name="test10">
-    <available property="test" 
-               file="available.xml"
-               resource="org/apache/tools/ant/taskdefs/defaults.properties"
-               classname="org.apache.tools.ant.taskdefs.Ant"/>
-  </target>
-  
-  <target name="test11">
-    <available property="test" 
-               file="src/etc/testcases/taskdefs/available.xml"
-               resource="org/apache/tools/ant/taskdefs/defaults.properties"
-               classname="org.apache.tools.ant.taskdefs.this_class_does_not_exist"/>
-  </target>  
-  
-  <target name="test12">
-    <available property="" 
-               file="available.xml"/>
-  </target>
-
-  <target name="test13">
-    <available property="test" 
-               file="" type="file" />
-  </target>
-
-  <target name="test13b">
-    <available property="test" 
-               file=""/>
-  </target>
-
-  <target name="test14">
-    <available property="test" 
-               resource=""/>
-  </target>
-
-  <target name="test15">
-    <available property="test" 
-               classname="org.apache.tools.ant.taskdefs.this_class_does_not_exist"/>
-  </target>
-
-  <target name="test16">
-    <available property="test" 
-               file="" type="dir"/>
-  </target>
-
-  <target name="test17">
-    <available property="test" 
-               file="../taskdefs" type="dir"/>
-  </target>
-
-  <target name="test18">
-    <available property="test" 
-               file="../this_dir_should_never_exist" type="dir"/>
-  </target>
-
-  <target name="test19">
-    <available property="test" 
-               file="available.xml" type="Foo"/>
-  </target>
-
-  <target name="test20">
-    <available property="test" ignoresystemclasses="true"
-               classname="java.awt.Graphics"/>
-  </target>
-
-  <target name="test21">
-    <available property="test" ignoresystemclasses="true"
-               classname="java.awt.Graphics" classpath="${java.home}/lib/rt.jar:${java.home}/lib/classes.zip"/>
-  </target>
-
-  <target name="test22">
-    <available property="test" ignoresystemclasses="false"
-               classname="java.awt.Graphics"/>
-  </target>
-
-  <target name="test23">
-    <available property="test"
-               classname="java.awt.Graphics"/>
-  </target>
-
-  <target name="test24">
-    <!-- create a dummy file and look for it -->
-    <mkdir dir="${user.dir}/test"/>
-    <echo message="package test;public class test {}" file="${user.dir}/test/test.java"/>
-    <javac srcdir="${user.dir}" includes="test/test.java"/>
-    <jar destfile="${user.dir}/test.jar" basedir="${user.dir}" includes="test/test.class"/>
-    <available property="test"
-               classname="test.test" classpath="${user.dir}/test.jar"/>
-    <delete dir="${user.dir}/test"/>
-    <delete file="${user.dir}/test.jar"/>
-  </target>
-</project>
diff --git a/src/etc/testcases/taskdefs/basename.xml b/src/etc/testcases/taskdefs/basename.xml
deleted file mode 100644
index 1438197..0000000
--- a/src/etc/testcases/taskdefs/basename.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0"?>
-
-<project name="xxx-test" basedir="." default="test1">
-
-  <target name="test1">
-    <basename/>
-  </target>
-
-  <target name="test2">
-    <basename property="propname"/>
-  </target>
-
-  <target name="test3">
-    <basename file="filename"/>
-  </target>
-
-  <target name="test4">
-    <basename property="file.w.suf" file="${user.dir}/foo.txt"/>
-  </target>
-
-  <target name="test5">
-    <basename property="file.wo.suf" file="foo.txt" suffix="txt"/>
-  </target>
-
-</project>
diff --git a/src/etc/testcases/taskdefs/bunzip2.xml b/src/etc/testcases/taskdefs/bunzip2.xml
deleted file mode 100644
index a5517b9..0000000
--- a/src/etc/testcases/taskdefs/bunzip2.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0"?>
-
-<project basedir="." default="cleanup">
-
-  <target name="realTest">
-    <bunzip2 src="expected/asf-logo-huge.tar.bz2" dest="asf-logo-huge.tar" />
-  </target>
-
-  <target name="cleanup">
-    <delete file="asf-logo-huge.tar" />
-  </target>
-
-</project>
\ No newline at end of file
diff --git a/src/etc/testcases/taskdefs/bzip2.xml b/src/etc/testcases/taskdefs/bzip2.xml
deleted file mode 100644
index 6c4dc9d..0000000
--- a/src/etc/testcases/taskdefs/bzip2.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0"?>
-
-<project basedir="." default="cleanup">
-
-  <target name="realTest">
-    <bzip2 src="expected/asf-logo-huge.tar" zipfile="asf-logo-huge.tar.bz2" />
-  </target>
-
-  <target name="testDateCheck">
-    <touch file="asf-logo.gif.bz2"/>
-    <bzip2 src="../asf-logo.gif" zipfile="asf-logo.gif.bz2" />
-  </target>
-
-  <target name="cleanup">
-    <delete file="asf-logo-huge.tar.bz2" />
-    <delete file="asf-logo.gif.bz2" />
-  </target>
-
-</project>
\ No newline at end of file
diff --git a/src/etc/testcases/taskdefs/checksum.xml b/src/etc/testcases/taskdefs/checksum.xml
deleted file mode 100644
index b0ea72e..0000000
--- a/src/etc/testcases/taskdefs/checksum.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0"?>
-<project default="cleanup" basedir=".">
-
-  <target name="cleanup">
-    <delete file="../asf-logo.gif.md5" />
-  </target>
-
-  <target name="createMd5">
-    <checksum file="../asf-logo.gif" fileext=".md5" />
-  </target>
-
-  <target name="setProperty">
-    <checksum file="../asf-logo.gif" property="logo.md5" />
-  </target>
-
-  <target name="verifyAsTask">
-    <copy file="expected/asf-logo.gif.md5" todir=".." />
-    <checksum file="../asf-logo.gif" fileext=".md5" 
-              verifyproperty="logo.md5" />
-
-    <copy file="checksum.xml" tofile="../asf-logo.gif.md5" 
-          overwrite="true" />
-    <checksum file="../asf-logo.gif" fileext=".md5" 
-              verifyproperty="no.logo.md5" />
-  </target>
-
-  <target name="verifyAsCondition">
-    <copy file="expected/asf-logo.gif.md5" todir=".." />
-    <condition property="logo.md5">
-      <checksum file="../asf-logo.gif" fileext=".md5" />
-    </condition>
-
-    <copy file="checksum.xml" tofile="../asf-logo.gif.md5" 
-          overwrite="true" />
-    <condition property="no.logo.md5">
-      <checksum file="../asf-logo.gif" fileext=".md5" />
-    </condition>
-  </target>
-</project>
\ No newline at end of file
diff --git a/src/etc/testcases/taskdefs/concat.xml b/src/etc/testcases/taskdefs/concat.xml
deleted file mode 100644
index 8a28ef6..0000000
--- a/src/etc/testcases/taskdefs/concat.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0"?>
-
-<project name="concat-test" basedir="." default="test1">
-
-  <property name="tmp.file" value="concat.tmp" />
-  <property name="tmp.file.2" value="concat.tmp.2" />
-
-  <property name="world" value="World" />
-
-  <target name="test1">
-    <concat>
-    </concat>
-  </target>
-
-  <target name="test2">
-    <concat destfile="">Hello, ${world}!</concat>
-  </target>
-
-  <target name="test3">
-    <concat destfile="${tmp.file}">Hello, ${world}!</concat>
-  </target>
-
-  <target name="test4">
-    <concat destfile="${tmp.file.2}">
-      <fileset dir="${basedir}" includes="${tmp.file}" />
-      <filelist dir="${basedir}" files="${tmp.file},${tmp.file}" />
-    </concat>
-  </target>
-
-  <target name="test5">
-    <concat>Hello, ${world}!</concat>
-  </target>
-
-</project>
diff --git a/src/etc/testcases/taskdefs/condition.xml b/src/etc/testcases/taskdefs/condition.xml
deleted file mode 100644
index 92497af..0000000
--- a/src/etc/testcases/taskdefs/condition.xml
+++ /dev/null
@@ -1,337 +0,0 @@
-<?xml version="1.0"?>
-
-<!-- test conditioning -->
-<project name="condition-test" basedir="." default="test1">
-
-  <target name="basic">
-    <condition property="basic">
-      <equals arg1="a" arg2="a" />
-    </condition>
-    <echo>${basic}</echo>
-  </target>
-
-  <target name="condition-incomplete">
-    <condition >
-      <equals arg1="a" arg2="a" />
-    </condition>
-  </target>  
-
-  <target name="condition-empty">
-    <condition property="condition-empty"/>
-    <echo>${condition-empty}</echo>
-  </target>  
-  
-  <target name="shortcut">
-    <property name="shortcut" value="set"/>
-    <condition property="shortcut">
-      <equals arg1="a" arg2="a" />
-    </condition>
-    <echo>${shortcut}</echo>
-  </target>
-
-  <target name="dontset">
-    <condition property="dontset">
-      <equals arg1="a" arg2="b" />
-    </condition>
-    <echo>${dontset}</echo>
-  </target>
-
-  <target name="setvalue">
-    <condition property="setvalue" value="woowoo" >
-      <equals arg1="a" arg2="a" />
-    </condition>
-    <echo>${setvalue}</echo>
-  </target>
-
-  <target name="negation">
-    <condition property="negation">
-      <not>
-        <equals arg1="a" arg2="B" />
-      </not>
-    </condition>
-    <echo>${negation}</echo>
-  </target>
-  
-  <target name="negationfalse">
-    <condition property="negationfalse">
-      <not>
-        <equals arg1="a" arg2="a" />
-      </not>
-    </condition>
-    <echo>${negationfalse}</echo>
-  </target>
-  
-  <target name="negationincomplete">
-    <condition property="negationincomplete">
-      <not />
-    </condition>
-    <echo>${negationincomplete}</echo>
-  </target>
-  
-  <target name="and">
-    <condition property="and">
-      <and>
-        <equals arg1="a" arg2="a" />
-        <equals arg1="B" arg2="B" />
-      </and>
-    </condition>
-    <echo>${and}</echo>
-  </target>
-
-  <target name="andfails">
-    <condition property="andfails">
-      <and>
-        <equals arg1="a" arg2="B" />
-        <equals arg1="B" arg2="a" />
-      </and>
-    </condition>
-    <echo>${andfails}</echo>
-  </target>  
-  
-  <target name="andincomplete">
-    <condition property="andincomplete">
-      <and>
-        <equals arg1="a" arg2="B" />
-      </and>
-    </condition>
-    <echo>${andincomplete}</echo>
-  </target>
-    
-  
-  <target name="andempty">
-    <condition property="andempty">
-      <and/>
-    </condition>
-    <echo>${andempty}</echo>
-  </target>
-    
-    
-  <target name="or">
-    <condition property="or">
-      <or>
-        <equals arg1="a" arg2="B" />
-        <equals arg1="B" arg2="B" />
-      </or>
-    </condition>
-    <echo>${or}</echo>
-  </target>
-    
-  <target name="orincomplete">
-    <condition property="orincomplete">
-      <or>
-        <equals arg1="a" arg2="a" />
-      </or>
-    </condition>
-    <echo>${orincomplete}</echo>
-  </target>
-  
-  <target name="orempty">
-    <condition property="orempty">
-      <or/>
-    </condition>
-    <echo>${orempty}</echo>
-  </target>
-  
-  <target name="orfails">
-    <condition property="orfails">
-      <or>
-        <equals arg1="a" arg2="B" />
-        <equals arg1="B" arg2="a" />
-      </or>
-    </condition>
-    <echo>${orfails}</echo>
-  </target>  
-
-  <target name="orboth">
-    <condition property="orboth">
-      <or>
-        <equals arg1="a" arg2="a" />
-        <equals arg1="B" arg2="B" />
-      </or>
-    </condition>
-    <echo>${orboth}</echo>
-  </target>   
-  
-  <target name="filesmatch-identical" >
-    <condition property="filesmatch-identical">
-        <filesmatch 
-          file1="condition.xml"
-          file2="condition.xml" />
-    </condition>
-    <echo>${filesmatch-identical}</echo>
-  </target>   
-  
-  <target name="filesmatch-incomplete" >
-    <condition property="filesmatch-incomplete">
-        <filesmatch 
-          file1="condition.xml"/>
-    </condition>
-    <echo>${filesmatch-incomplete}</echo>
-  </target> 
-  
-  <target name="filesmatch-oddsizes" >
-    <condition property="filesmatch-oddsizes">
-        <filesmatch 
-          file1="condition.xml"
-          file2="property.xml" />
-    </condition>
-    <echo>${filesmatch-oddsizes}</echo>
-  </target>   
-
-  <target name="filesmatch-existence" >
-    <condition property="filesmatch-existence">
-      <filesmatch 
-        file1="condition.xml" 
-        file2="this-file-doesnt-exist.xml" />
-    </condition>
-    <echo>${filesmatch-existence}</echo>
-  </target>   
-
-  <target name="filesmatch-different">
-    <echo file="match1.txt" message="012345676890" />
-    <echo file="match2.txt" message="012345676889" />
-    <condition property="filesmatch-different">
-      <filesmatch 
-        file1="match1.txt" 
-        file2="match2.txt" />
-    </condition>
-    <echo>${filesmatch-different}</echo>
-  </target>   
-  
-  <target name="filesmatch-match" >
-    <echo file="match3.txt" message="012345676890" />
-    <echo file="match4.txt" message="012345676890" />
-    <condition property="filesmatch-match">
-      <filesmatch 
-        file1="match3.txt" 
-        file2="match4.txt" />
-    </condition>
-    <echo>${filesmatch-match}</echo>
-  </target>   
-  
-  <target name="contains" >
-    <condition property="contains">
-      <contains 
-        string="abcd" 
-        substring="cd" />
-    </condition>
-    <echo>${contains}</echo>
-  </target> 
-  
-  <target name="contains-doesnt" >
-    <condition property="contains-doesnt">
-      <contains 
-        string="abcd" 
-        substring="CD" />
-    </condition>
-    <echo>${contains-doesnt}</echo>
-  </target> 
-  
-  <target name="contains-anycase" >
-    <condition property="contains-anycase">
-      <contains casesensitive="false"
-        string="abcd" 
-        substring="CD" />
-    </condition>
-    <echo>${contains-anycase}</echo>
-  </target> 
-  
-  <target name="contains-incomplete1" >
-    <condition property="contains-incomplete1">
-      <contains 
-        string="abcd" />
-    </condition>
-    <echo>${contains-incomplete1}</echo>
-  </target> 
-
-  <target name="contains-incomplete2" >
-    <condition property="contains-incomplete2">
-      <contains 
-        substring="CD" />
-    </condition>
-    <echo>${contains-incomplete2}</echo>
-  </target> 
-
-  <target name="istrue" >
-    <property name="t" value="true" />
-    <property name="o" value="o" />
-    <property name="n" value="n" />
-    <condition property="istrue">
-      <and>
-        <istrue value="${t}" />
-        <istrue value="TRUE" />
-        <istrue value="yes" />
-        <istrue value="YeS" />
-        <istrue value="on" />
-        <istrue value="${o}${n}" />
-      </and>
-    </condition>
-    <echo>${istrue}</echo>
-  </target> 
-
-  <target name="istrue-not" >
-    <condition property="istrue-not">
-      <istrue 
-        value="this sentence is true" />
-    </condition>
-    <echo>${istrue-not}</echo>
-  </target> 
-
-  <target name="istrue-false" >
-    <condition property="istrue-false">
-      <or>
-        <istrue value="false" />
-        <istrue value="" />
-      </or>
-    </condition>
-    <echo>${istrue-false}</echo>
-  </target> 
-  
-  <target name="istrue-incomplete" >
-    <condition property="istrue-incomplete">
-      <istrue />
-    </condition>
-    <echo>${istrue-incomplete}</echo>
-  </target>
-  
-  
-  <target name="isfalse-true" >
-    <property name="t" value="true" />
-    <condition property="isfalse-true">
-      <isfalse 
-        value="${t}" />
-    </condition>
-    <echo>${isfalse-true}</echo>
-  </target> 
-
-  <target name="isfalse-not" >
-    <condition property="isfalse-not">
-      <isfalse 
-        value="this sentence is true" />
-    </condition>
-    <echo>${isfalse-not}</echo>
-  </target> 
-
-  <target name="isfalse-false" >
-    <condition property="isfalse-false">
-      <isfalse 
-        value="false" />
-    </condition>
-    <echo>${isfalse-false}</echo>
-  </target> 
-  
-  <target name="isfalse-incomplete" >
-    <condition property="isfalse-incomplete">
-      <isfalse />
-    </condition>
-    <echo>${isfalse-incomplete}</echo>
-  </target>
-  
-  <target name="cleanup" >
-    <delete file="match1.txt" />
-    <delete file="match2.txt" />
-    <delete file="match3.txt" />
-    <delete file="match4.txt" />
-  </target>
-   
-</project>
diff --git a/src/etc/testcases/taskdefs/copy.filterset b/src/etc/testcases/taskdefs/copy.filterset
deleted file mode 100644
index 367acbb..0000000
--- a/src/etc/testcases/taskdefs/copy.filterset
+++ /dev/null
@@ -1 +0,0 @@
-This is the @TITLE@.
\ No newline at end of file
diff --git a/src/etc/testcases/taskdefs/copy.xml b/src/etc/testcases/taskdefs/copy.xml
deleted file mode 100644
index 73014a7..0000000
--- a/src/etc/testcases/taskdefs/copy.xml
+++ /dev/null
@@ -1,78 +0,0 @@
-<?xml version="1.0"?>
-
-<project name="copy-test" basedir="." default="test1">
-
-  <target name="test1">
-    <copy file="copy.xml" tofile="copytest1.tmp" />
-  </target>
- 
-  <target name="test2">
-    <copy file="copy.xml" todir="copytest1dir" overwrite="true"/>
-  </target>
-
-  <target name="test3">
-    <!-- create an empty file -->
-    <touch file="copytest3.tmp"/>
-    <!--wait -->
-    <sleep seconds="4"/>
-    <!-- copy a different file to two places --> 
-    <copy file="copy.xml" tofile="copytest3a.tmp" overwrite="true"/>
-    <copy file="copy.xml" tofile="copytest3b.tmp" overwrite="true"/>
-    <!--wait -->
-    <sleep seconds="4"/>
-    <!-- copy an old file onto a newer file (should not work) -->
-    <copy file="copytest3.tmp" tofile="copytest3b.tmp" />
-    <!-- copy an older file onto a new one, should succeed -->
-    <copy file="copytest3.tmp" tofile="copytest3c.tmp"
-      overwrite="true"
-      preservelastmodified="true" />
-    <!-- copy a newer file onto an older one (should work) -->
-    <copy file="copytest3a.tmp" tofile="copytest3.tmp" 
-      preservelastmodified="true" />
-    <!-- expected state :
-      3a.tmp==3.tmp==copy.xml
-      timeof(3a.tmp)==timeof(3.tmp)==now()-4
-      sizeof(3c)==0
-      timeof(3c.tmp)<timeof(3a.tmp);
-      3b.tmp==copy.xml
-    -->
-  </target>
-  
-  <target name="test_single_file_fileset">
-    <copy tofile="copytest_single_file_fileset.tmp">
-      <fileset dir="." includes="copy.xml"/>
-    </copy>
-  </target>
-  
-  <target name="testFilterSet">
-    <copy file="copy.filterset" tofile="copy.filterset.tmp">
-      <filterset>
-        <filter token="TITLE" value="Apache Ant Project"/>
-      </filterset>
-    </copy>
-  </target>
-
-  <target name="testFilterChain">
-    <copy file="copy.filterset" tofile="copy.filterchain.tmp">
-      <filterchain>
-        <replacetokens>
-          <token key="TITLE" value="Apache Ant Project"/>
-        </replacetokens>
-      </filterchain>
-    </copy>
-  </target>
-
-  <target name="cleanup"> 
-    <delete file="copytest1.tmp"/>
-    <delete file="copytest3.tmp"/>
-    <delete file="copytest3a.tmp"/>
-    <delete file="copytest3b.tmp"/>
-    <delete file="copytest3c.tmp"/>
-    <delete file="copytest_single_file_fileset.tmp"/>
-    <delete file="copy.filterset.tmp"/>
-    <delete file="copy.filterchain.tmp"/>
-    <delete dir="copytest1dir"/>
-  </target>
-
-
-</project>
diff --git a/src/etc/testcases/taskdefs/copydir.xml b/src/etc/testcases/taskdefs/copydir.xml
deleted file mode 100644
index ef46693..0000000
--- a/src/etc/testcases/taskdefs/copydir.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0"?>
-
-<project name="copydir-test" basedir="." default="test1">
-
-  <target name="test1">
-    <copydir/>
-  </target>
-
-  <target name="test2">
-    <copydir src=""/>
-  </target>
-
-  <target name="test3">
-    <copydir dest=""/>
-  </target>
-
-  <target name="test4">
-    <copydir src="." 
-             dest="."/>
-  </target>
-
-  <target name="test5">
-    <mkdir dir="../taskdefs.tmp" />
-    <copydir src="." 
-             dest="../taskdefs.tmp"/>
-  </target>
-
-  <target name="test6">
-    <copydir src="." 
-             dest="template.xml"/>
-  </target>
-
-  <target name="cleanup">
-    <delete dir="../taskdefs.tmp" />
-  </target>
-
-</project>
diff --git a/src/etc/testcases/taskdefs/copyfile.xml b/src/etc/testcases/taskdefs/copyfile.xml
deleted file mode 100644
index 34d3cd4..0000000
--- a/src/etc/testcases/taskdefs/copyfile.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0"?>
-
-<project name="copyfile-test" basedir="." default="test1">
-
-  <target name="test1">
-    <copyfile/>
-  </target>
-
-  <target name="test2">
-    <copyfile src=""/>
-  </target>
-
-  <target name="test3">
-    <copyfile dest=""/>
-  </target>
-
-  <target name="test4">
-    <copyfile src="template.xml" 
-             dest="template.xml"/>
-  </target>
-
-  <target name="test5">
-    <copyfile src="copyfile.xml" 
-             dest="copyfile.tmp"/>
-  </target>
-
-  <target name="test6">
-    <delete file="testdir"/>
-    <mkdir dir="testdir" />
-    <copyfile src="copyfile.xml" 
-              dest="testdir"
-              forceoverwrite="true" />
-  </target>
-
-  <target name="cleanup">
-    <delete dir="testdir" />
-  </target>
-</project>
diff --git a/src/etc/testcases/taskdefs/cvspass.xml b/src/etc/testcases/taskdefs/cvspass.xml
deleted file mode 100644
index fcc62ad..0000000
--- a/src/etc/testcases/taskdefs/cvspass.xml
+++ /dev/null
@@ -1,69 +0,0 @@
-<?xml version="1.0"?>
-
-<project name="cvspass-test" basedir="." default="test1">
-
-  <taskdef name="cvspass" classname="org.apache.tools.ant.taskdefs.CVSPass"/>
-
-  <target name="test1">
-    <cvspass />
-  </target>
- 
-  <target name="test2">
-    <cvspass
-      cvsroot=":pserver:anoncvs@jakarta.apache.org:/home/cvspublic"
-      passfile="testpassfile.tmp"
-    />
-  </target>
- 
-  <!-- testPassFile -->
-  <target name="test3">
-    <cvspass
-      cvsroot=":pserver:anoncvs@jakarta.apache.org:/home/cvspublic"
-      password="anoncvs"
-      passfile="testpassfile.tmp"
-    />
-  </target>
-
-  <!-- testPassFileDuplicateEntry -->
-  <target name="test4">
-    <cvspass
-      cvsroot=":pserver:anoncvs@jakarta.apache.org:/home/cvspublic"
-      password="anoncvs"
-      passfile="testpassfile.tmp"
-    />
-    <cvspass
-      cvsroot=":pserver:anoncvs@jakarta.apache.org:/home/cvspublic"
-      password="anoncvs"
-      passfile="testpassfile.tmp"
-    />
-    <cvspass
-      cvsroot=":pserver:guest@cvs.tigris.org:/cvs"
-      password="guest"
-      passfile="testpassfile.tmp"
-    />
-  </target>
-
-  <!-- testPassFileMultipleEntry -->
-  <target name="test5">
-    <cvspass
-      cvsroot=":pserver:anoncvs@jakarta.apache.org:/home/cvspublic"
-      password="anoncvs"
-      passfile="testpassfile.tmp"
-    />
-    <cvspass
-      cvsroot=":pserver:anoncvs@xml.apache.org:/home/cvspublic"
-      password="anoncvs"
-      passfile="testpassfile.tmp"
-    />
-    <cvspass
-      cvsroot=":pserver:guest@cvs.tigris.org:/cvs"
-      password="guest"
-      passfile="testpassfile.tmp"
-    />
-  </target>
-
-  <target name="cleanup"> 
-    <delete file="testpassfile.tmp"/>
-  </target>
-
-</project>
diff --git a/src/etc/testcases/taskdefs/delete.xml b/src/etc/testcases/taskdefs/delete.xml
deleted file mode 100644
index 0d0c09b..0000000
--- a/src/etc/testcases/taskdefs/delete.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0"?>
-
-<project name="delete-test" basedir="." default="test1">
-
-  <target name="test1">
-    <delete/>
-  </target>
-
-  <target name="test2">
-    <copydir src="." 
-             dest="taskdefs.tmp"/>
-    <delete file="taskdefs.tmp"/>
-  </target>
-
-  <target name="test4">
-    <copydir src="." 
-             dest="taskdefs.tmp"/>
-    <delete dir="taskdefs.tmp"/>
-  </target>
-
-  <target name="cleanup">
-    <delete dir="taskdefs.tmp" />
-  </target>
-
-</project>
diff --git a/src/etc/testcases/taskdefs/deltree.xml b/src/etc/testcases/taskdefs/deltree.xml
deleted file mode 100644
index 77ae999..0000000
--- a/src/etc/testcases/taskdefs/deltree.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0"?>
-
-<project name="deltree-test" basedir="." default="test1">
-
-  <target name="test1">
-    <deltree/>
-  </target>
-
-  <target name="test2">
-    <deltree dir="taskdefs.tmp"/>
-  </target>
-
-</project>
diff --git a/src/etc/testcases/taskdefs/dependset.xml b/src/etc/testcases/taskdefs/dependset.xml
deleted file mode 100644
index 021a932..0000000
--- a/src/etc/testcases/taskdefs/dependset.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0"?>
-
-<project name="dependset-test" basedir="." default="test1">
-
-  <target name="test1">
-    <dependset/>
-  </target>
-
-  <target name="test2">
-    <dependset>
-      <srcfilelist dir="." includes="test2.tmp"/>
-    </dependset>
-  </target>
-
-  <target name="test3">
-    <dependset>
-      <targetfileset dir="." files="test3.tmp"/>
-    </dependset>
-  </target>
-
-  <target name="test4">
-    <touch file="test4.tmp"/>
-    <dependset>
-      <srcfilelist dir="." files="test4.tmp"/>
-      <targetfileset dir="." includes="i-do-not-exist"/>
-    </dependset>
-  </target>
-
-  <target name="test5">
-    <touch file="older.tmp"/>
-    <sleep seconds="3" />
-    <touch file="newer.tmp"/>
-    <dependset>
-      <srcfilelist dir="." files="newer.tmp"/>
-      <targetfilelist dir="." files="older.tmp"/>
-    </dependset>
-  </target>
-  
-  <target name="cleanup"> 
-    <delete file="test4.tmp"/>
-    <delete file="older.tmp"/>
-    <delete file="newer.tmp"/>
-  </target>
-</project>
diff --git a/src/etc/testcases/taskdefs/dirname.xml b/src/etc/testcases/taskdefs/dirname.xml
deleted file mode 100644
index 6f018da..0000000
--- a/src/etc/testcases/taskdefs/dirname.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0"?>
-
-<project name="xxx-test" basedir="." default="test1">
-
-  <target name="test1">
-    <dirname/>
-  </target>
-
-  <target name="test2">
-    <dirname property="propname"/>
-  </target>
-
-  <target name="test3">
-    <dirname file="filename"/>
-  </target>
-
-  <target name="test4">
-    <dirname property="local.dir" file="/usr/local/foo.txt"/>
-  </target>
-
-  <target name="test5">
-    <dirname property="base.dir" file="foo.txt"/>
-  </target>
-
-</project>
diff --git a/src/etc/testcases/taskdefs/dynamictask.xml b/src/etc/testcases/taskdefs/dynamictask.xml
deleted file mode 100644
index 63ee19a..0000000
--- a/src/etc/testcases/taskdefs/dynamictask.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0"?>
-
-<project name="dynamic-test" default="simple">
-
-  <path id="testclasses">
-    <pathelement location="../../../../build/testcases" />
-    <pathelement path="${java.class.path}" />
-  </path>
-
-  <target name="simple">
-    <taskdef name="dyna"
-             classname="org.apache.tools.ant.taskdefs.DynamicTask">
-      <classpath refid="testclasses" />
-    </taskdef>
-    <dyna prop1="1" prop2="2">
-      <sub prop3="3"/>
-      <anything prop4="4"/>
-    </dyna>
-  </target>
-
-</project>
diff --git a/src/etc/testcases/taskdefs/echo.xml b/src/etc/testcases/taskdefs/echo.xml
deleted file mode 100644
index 7898104..0000000
--- a/src/etc/testcases/taskdefs/echo.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0"?>
-
-<project name="echo-test" basedir="." default="test1">
-
-  <target name="test1">
-    <echo/>
-  </target>
-
-  <target name="test2">
-    <echo message="OUTPUT OF ECHO"/>
-  </target>
-
-  <target name="test3">
-    <echo>
-    This 
-    is
-    a 
-    multiline
-    message
-    </echo>
-  </target>
-
-</project>
\ No newline at end of file
diff --git a/src/etc/testcases/taskdefs/expected/asf-logo-huge.tar b/src/etc/testcases/taskdefs/expected/asf-logo-huge.tar
deleted file mode 100644
index 3f92609..0000000
--- a/src/etc/testcases/taskdefs/expected/asf-logo-huge.tar
+++ /dev/null
Binary files differ
diff --git a/src/etc/testcases/taskdefs/expected/asf-logo-huge.tar.bz2 b/src/etc/testcases/taskdefs/expected/asf-logo-huge.tar.bz2
deleted file mode 100644
index 7c2d215..0000000
--- a/src/etc/testcases/taskdefs/expected/asf-logo-huge.tar.bz2
+++ /dev/null
Binary files differ
diff --git a/src/etc/testcases/taskdefs/expected/asf-logo.gif.bz2 b/src/etc/testcases/taskdefs/expected/asf-logo.gif.bz2
deleted file mode 100644
index 0e73d25..0000000
--- a/src/etc/testcases/taskdefs/expected/asf-logo.gif.bz2
+++ /dev/null
Binary files differ
diff --git a/src/etc/testcases/taskdefs/expected/asf-logo.gif.gz b/src/etc/testcases/taskdefs/expected/asf-logo.gif.gz
deleted file mode 100644
index decc918..0000000
--- a/src/etc/testcases/taskdefs/expected/asf-logo.gif.gz
+++ /dev/null
Binary files differ
diff --git a/src/etc/testcases/taskdefs/expected/asf-logo.gif.md5 b/src/etc/testcases/taskdefs/expected/asf-logo.gif.md5
deleted file mode 100644
index 5c886a5..0000000
--- a/src/etc/testcases/taskdefs/expected/asf-logo.gif.md5
+++ /dev/null
@@ -1 +0,0 @@
-0541d3df42520911f268abc730f3afe0
\ No newline at end of file
diff --git a/src/etc/testcases/taskdefs/expected/asf-logo.gif.tar b/src/etc/testcases/taskdefs/expected/asf-logo.gif.tar
deleted file mode 100644
index fc0f790..0000000
--- a/src/etc/testcases/taskdefs/expected/asf-logo.gif.tar
+++ /dev/null
Binary files differ
diff --git a/src/etc/testcases/taskdefs/expected/asf-logo.gif.tar.bz2 b/src/etc/testcases/taskdefs/expected/asf-logo.gif.tar.bz2
deleted file mode 100644
index 99a91fc..0000000
--- a/src/etc/testcases/taskdefs/expected/asf-logo.gif.tar.bz2
+++ /dev/null
Binary files differ
diff --git a/src/etc/testcases/taskdefs/expected/asf-logo.gif.tar.gz b/src/etc/testcases/taskdefs/expected/asf-logo.gif.tar.gz
deleted file mode 100644
index ddd23a2..0000000
--- a/src/etc/testcases/taskdefs/expected/asf-logo.gif.tar.gz
+++ /dev/null
Binary files differ
diff --git a/src/etc/testcases/taskdefs/expected/asf-logo.gif.zip b/src/etc/testcases/taskdefs/expected/asf-logo.gif.zip
deleted file mode 100644
index 5f970d5..0000000
--- a/src/etc/testcases/taskdefs/expected/asf-logo.gif.zip
+++ /dev/null
Binary files differ
diff --git a/src/etc/testcases/taskdefs/expected/copy.filterset.filtered b/src/etc/testcases/taskdefs/expected/copy.filterset.filtered
deleted file mode 100644
index ddbcf5d..0000000
--- a/src/etc/testcases/taskdefs/expected/copy.filterset.filtered
+++ /dev/null
@@ -1 +0,0 @@
-This is the Apache Ant Project.
diff --git a/src/etc/testcases/taskdefs/fail.xml b/src/etc/testcases/taskdefs/fail.xml
deleted file mode 100644
index a55aa13..0000000
--- a/src/etc/testcases/taskdefs/fail.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0"?>
-
-<project name="fail-test" basedir="." default="test1">
-
-  <target name="test1">
-    <fail/>
-  </target>
-
-  <target name="test2">
-    <fail message="test2"/>
-  </target>
-
-  <target name="testText">
-    <fail>testText</fail>
-  </target>
-  
-  <target name="testIf">
-    <fail if="foo" />
-  </target>
-
-  <target name="testUnless">
-    <fail unless="foo" />
-  </target>
-
-</project>
diff --git a/src/etc/testcases/taskdefs/filter.xml b/src/etc/testcases/taskdefs/filter.xml
deleted file mode 100644
index f2ea3a6..0000000
--- a/src/etc/testcases/taskdefs/filter.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version="1.0"?>
-
-<project name="filter-test" basedir="." default="test1">
-
-  <target name="test1">
-    <filter/>
-  </target>
-
-  <target name="test2">
-    <filter token=""/>
-  </target>
-
-  <target name="test3">
-    <filter value=""/>
-  </target>
-
-  <target name="test4">
-    <filter token="" value=""/>
-  </target>
-
-  <target name="test5">
-    <filter token="year" value="2000" />
-    <copy file="filter1.txt" tofile="filtered.tmp" filtering="yes" overwrite="yes" />
-  </target>
-
-  <target name="test6">
-    <filter token="year" value="2000" />
-    <copy todir="./taskdefs.tmp" filtering="yes" overwrite="yes">
-      <fileset dir="." includes="filter1.txt" />
-    </copy>
-  </target>
-
-  <target name="test7">
-    <filter token="ROOT" value="root" />
-    <copy file="filter2.txt" tofile="filtered.tmp" filtering="yes" overwrite="yes" />
-  </target>
-
-  <target name="test8">
-    <filter token="ROOT" value="root" />
-    <copy todir="./taskdefs.tmp" filtering="yes" overwrite="yes">
-      <fileset dir="." includes="filter2.txt"/>
-    </copy>
-  </target>
-
-  <target name="cleanup">
-    <delete dir="taskdefs.tmp" />
-  </target>
-
-</project>
diff --git a/src/etc/testcases/taskdefs/filter1.txt b/src/etc/testcases/taskdefs/filter1.txt
deleted file mode 100644
index 4e4f976..0000000
--- a/src/etc/testcases/taskdefs/filter1.txt
+++ /dev/null
@@ -1 +0,0 @@
-@year@
diff --git a/src/etc/testcases/taskdefs/filter2.txt b/src/etc/testcases/taskdefs/filter2.txt
deleted file mode 100644
index dccd06b..0000000
--- a/src/etc/testcases/taskdefs/filter2.txt
+++ /dev/null
@@ -1 +0,0 @@
-<%@ include file="@ROOT@/some/include.jsp"%>
diff --git a/src/etc/testcases/taskdefs/fixcrlf/build.xml b/src/etc/testcases/taskdefs/fixcrlf/build.xml
deleted file mode 100644
index b99f579..0000000
--- a/src/etc/testcases/taskdefs/fixcrlf/build.xml
+++ /dev/null
@@ -1,124 +0,0 @@
-<?xml version="1.0"?>
-<project default="cleanup" basedir=".">
-  <target name="init">
-    <mkdir dir="result" />
-  </target>
-
-  <target name="cleanup">
-    <delete dir="result" />
-  </target>
-
-  <target name="test1" depends="init">
-    <fixcrlf srcdir="input" destdir="result"
-             includes="Junk1.java"
-             javafiles="true"
-             tab="add"
-             eol="crlf"
-             eof="asis"
-             />
-  </target>
-
-  <target name="test2" depends="init">
-    <fixcrlf srcdir="input" destdir="result"
-             includes="Junk2.java"
-             javafiles="true"
-             tab="add"
-             cr="add"
-             eol="crlf"
-             eof="asis"
-             />
-  </target>
-
-  <target name="test3" depends="init">
-    <fixcrlf srcdir="input" destdir="result"
-             includes="Junk3.java"
-             javafiles="true"
-             tab="remove"
-             eol="lf"
-             eof="asis"
-             />
-  </target>
-
-  <target name="test4" depends="init">
-    <fixcrlf srcdir="input" destdir="result"
-             includes="Junk4.java"
-             javafiles="true"
-             tab="remove"
-             eol="lf"
-             eof="asis"
-             />
-  </target>
-
-  <target name="test5" depends="init">
-    <fixcrlf srcdir="input" destdir="result"
-             includes="Junk5.java"
-             tab="remove"
-             eol="lf"
-             eof="asis"
-             />
-  </target>
-
-  <target name="test6" depends="init">
-    <fixcrlf srcdir="input" destdir="result"
-             includes="Junk6.java"
-             tab="add"
-             cr="remove"
-             eol="crlf"
-             eof="asis"
-             />
-  </target>
-
-  <target name="test7" depends="init">
-    <fixcrlf srcdir="input" destdir="result"
-             includes="Junk7.java"
-             tab="add"
-             cr="add"
-             eof="asis"
-             />
-  </target>
-
-  <target name="test8" depends="init">
-    <fixcrlf srcdir="input" destdir="result"
-             includes="Junk8.java"
-             javafiles="true"
-             tab="add"
-             cr="add"
-             eof="add"
-             />
-  </target>
-
-  <target name="test9" depends="init">
-    <fixcrlf srcdir="input" destdir="result"
-             includes="Junk9.java"
-             javafiles="true"
-             tab="remove"
-             cr="remove"
-             eof="remove"
-             />
-  </target>
-
-  <target name="testMacLines" depends="init">
-    <fixcrlf srcdir="input" destdir="result"
-             includes="Mac2Unix"
-             eol="lf"
-             />
-  </target>
-
-  <target name="testEncoding" depends="init">
-    <fixcrlf srcdir="input" destdir="result"
-             includes="input.crlf.utf16"
-             javafiles="false"
-             cr="remove"
-             encoding="UTF16"
-             />
-  </target>
-
-  <target name="testLongLines" depends="init">
-    <fixcrlf srcdir="input" destdir="result"
-             includes="longlines.crlf"
-             javafiles="false"
-             cr="remove"
-             />
-  </target>
-
-</project>
diff --git a/src/etc/testcases/taskdefs/fixcrlf/expected/Junk1.java b/src/etc/testcases/taskdefs/fixcrlf/expected/Junk1.java
deleted file mode 100644
index 7321b8d..0000000
--- a/src/etc/testcases/taskdefs/fixcrlf/expected/Junk1.java
+++ /dev/null
@@ -1,12 +0,0 @@
-public class Junk1 {

-    public boolean mybool;

-    public static void main (String[] args) {

-	System.out.println("I have	a tab");

-	//	Here is a comment with an embedded tab

-	if (mybool) {	/* Here is a multi-line

-			   (with embedded'	'tab)

-	    Comment */char mychar = '	';	//<-tab->	<-

-	} // end of if (mybool)

-	

-    } // end of main ()

-}

diff --git a/src/etc/testcases/taskdefs/fixcrlf/expected/Junk2.java b/src/etc/testcases/taskdefs/fixcrlf/expected/Junk2.java
deleted file mode 100644
index 7321b8d..0000000
--- a/src/etc/testcases/taskdefs/fixcrlf/expected/Junk2.java
+++ /dev/null
@@ -1,12 +0,0 @@
-public class Junk1 {

-    public boolean mybool;

-    public static void main (String[] args) {

-	System.out.println("I have	a tab");

-	//	Here is a comment with an embedded tab

-	if (mybool) {	/* Here is a multi-line

-			   (with embedded'	'tab)

-	    Comment */char mychar = '	';	//<-tab->	<-

-	} // end of if (mybool)

-	

-    } // end of main ()

-}

diff --git a/src/etc/testcases/taskdefs/fixcrlf/expected/Junk3.java b/src/etc/testcases/taskdefs/fixcrlf/expected/Junk3.java
deleted file mode 100644
index 3427166..0000000
--- a/src/etc/testcases/taskdefs/fixcrlf/expected/Junk3.java
+++ /dev/null
@@ -1,12 +0,0 @@
-public class Junk1 {
-    public boolean mybool;
-    public static void main (String[] args) {
-        System.out.println("I have	a tab");
-        //      Here is a comment with an embedded tab
-        if (mybool) {   /* Here is a multi-line
-                           (with embedded'      'tab)
-            Comment */char mychar = '	';      //<-tab->       <-
-        } // end of if (mybool)
-        
-    } // end of main ()
-}
diff --git a/src/etc/testcases/taskdefs/fixcrlf/expected/Junk4.java b/src/etc/testcases/taskdefs/fixcrlf/expected/Junk4.java
deleted file mode 100644
index 3427166..0000000
--- a/src/etc/testcases/taskdefs/fixcrlf/expected/Junk4.java
+++ /dev/null
@@ -1,12 +0,0 @@
-public class Junk1 {
-    public boolean mybool;
-    public static void main (String[] args) {
-        System.out.println("I have	a tab");
-        //      Here is a comment with an embedded tab
-        if (mybool) {   /* Here is a multi-line
-                           (with embedded'      'tab)
-            Comment */char mychar = '	';      //<-tab->       <-
-        } // end of if (mybool)
-        
-    } // end of main ()
-}
diff --git a/src/etc/testcases/taskdefs/fixcrlf/expected/Junk5.java b/src/etc/testcases/taskdefs/fixcrlf/expected/Junk5.java
deleted file mode 100644
index bba01a5..0000000
--- a/src/etc/testcases/taskdefs/fixcrlf/expected/Junk5.java
+++ /dev/null
@@ -1,12 +0,0 @@
-public class Junk1 {
-    public boolean mybool;
-    public static void main (String[] args) {
-        System.out.println("I have      a tab");
-        //      Here is a comment with an embedded tab
-        if (mybool) {   /* Here is a multi-line
-                           (with embedded'      'tab)
-            Comment */char mychar = '   ';      //<-tab->       <-
-        } // end of if (mybool)
-        
-    } // end of main ()
-}
diff --git a/src/etc/testcases/taskdefs/fixcrlf/expected/Junk6.java b/src/etc/testcases/taskdefs/fixcrlf/expected/Junk6.java
deleted file mode 100644
index 7321b8d..0000000
--- a/src/etc/testcases/taskdefs/fixcrlf/expected/Junk6.java
+++ /dev/null
@@ -1,12 +0,0 @@
-public class Junk1 {

-    public boolean mybool;

-    public static void main (String[] args) {

-	System.out.println("I have	a tab");

-	//	Here is a comment with an embedded tab

-	if (mybool) {	/* Here is a multi-line

-			   (with embedded'	'tab)

-	    Comment */char mychar = '	';	//<-tab->	<-

-	} // end of if (mybool)

-	

-    } // end of main ()

-}

diff --git a/src/etc/testcases/taskdefs/fixcrlf/expected/Junk7.java b/src/etc/testcases/taskdefs/fixcrlf/expected/Junk7.java
deleted file mode 100644
index 7321b8d..0000000
--- a/src/etc/testcases/taskdefs/fixcrlf/expected/Junk7.java
+++ /dev/null
@@ -1,12 +0,0 @@
-public class Junk1 {

-    public boolean mybool;

-    public static void main (String[] args) {

-	System.out.println("I have	a tab");

-	//	Here is a comment with an embedded tab

-	if (mybool) {	/* Here is a multi-line

-			   (with embedded'	'tab)

-	    Comment */char mychar = '	';	//<-tab->	<-

-	} // end of if (mybool)

-	

-    } // end of main ()

-}

diff --git a/src/etc/testcases/taskdefs/fixcrlf/expected/Junk8.java b/src/etc/testcases/taskdefs/fixcrlf/expected/Junk8.java
deleted file mode 100644
index 82a8e84..0000000
--- a/src/etc/testcases/taskdefs/fixcrlf/expected/Junk8.java
+++ /dev/null
@@ -1,13 +0,0 @@
-public class Junk1 {

-    public boolean mybool;

-    public static void main (String[] args) {

-	System.out.println("I have	a tab");

-	//	Here is a comment with an embedded tab

-	if (mybool) {	/* Here is a multi-line

-			   (with embedded'	'tab)

-	    Comment */char mychar = '	';	//<-tab->	<-

-	} // end of if (mybool)

-	

-    } // end of main ()

-}

-
\ No newline at end of file
diff --git a/src/etc/testcases/taskdefs/fixcrlf/expected/Junk9.java b/src/etc/testcases/taskdefs/fixcrlf/expected/Junk9.java
deleted file mode 100644
index 3427166..0000000
--- a/src/etc/testcases/taskdefs/fixcrlf/expected/Junk9.java
+++ /dev/null
@@ -1,12 +0,0 @@
-public class Junk1 {
-    public boolean mybool;
-    public static void main (String[] args) {
-        System.out.println("I have	a tab");
-        //      Here is a comment with an embedded tab
-        if (mybool) {   /* Here is a multi-line
-                           (with embedded'      'tab)
-            Comment */char mychar = '	';      //<-tab->       <-
-        } // end of if (mybool)
-        
-    } // end of main ()
-}
diff --git a/src/etc/testcases/taskdefs/fixcrlf/expected/Mac2Unix b/src/etc/testcases/taskdefs/fixcrlf/expected/Mac2Unix
deleted file mode 100644
index c0d0fb4..0000000
--- a/src/etc/testcases/taskdefs/fixcrlf/expected/Mac2Unix
+++ /dev/null
@@ -1,2 +0,0 @@
-line1
-line2
diff --git a/src/etc/testcases/taskdefs/fixcrlf/expected/input.lf.utf16 b/src/etc/testcases/taskdefs/fixcrlf/expected/input.lf.utf16
deleted file mode 100644
index 8ffb4e4..0000000
--- a/src/etc/testcases/taskdefs/fixcrlf/expected/input.lf.utf16
+++ /dev/null
Binary files differ
diff --git a/src/etc/testcases/taskdefs/fixcrlf/expected/longlines.lf b/src/etc/testcases/taskdefs/fixcrlf/expected/longlines.lf
deleted file mode 100644
index fdef172..0000000
--- a/src/etc/testcases/taskdefs/fixcrlf/expected/longlines.lf
+++ /dev/null
@@ -1,2 +0,0 @@
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-abc
diff --git a/src/etc/testcases/taskdefs/fixcrlf/input/Junk1.java b/src/etc/testcases/taskdefs/fixcrlf/input/Junk1.java
deleted file mode 100644
index ad69747..0000000
--- a/src/etc/testcases/taskdefs/fixcrlf/input/Junk1.java
+++ /dev/null
@@ -1,12 +0,0 @@
-public class Junk1 {
-    public boolean mybool;
-    public static void main (String[] args) {
-	System.out.println("I have	a tab");
-	//	Here is a comment with an embedded tab
-	if (mybool) {	/* Here is a multi-line
-			   (with embedded'	'tab)
-	    Comment */char mychar = '	';	//<-tab->	<-
-	} // end of if (mybool)
-	
-    } // end of main ()
-}
diff --git a/src/etc/testcases/taskdefs/fixcrlf/input/Junk2.java b/src/etc/testcases/taskdefs/fixcrlf/input/Junk2.java
deleted file mode 100644
index ad69747..0000000
--- a/src/etc/testcases/taskdefs/fixcrlf/input/Junk2.java
+++ /dev/null
@@ -1,12 +0,0 @@
-public class Junk1 {
-    public boolean mybool;
-    public static void main (String[] args) {
-	System.out.println("I have	a tab");
-	//	Here is a comment with an embedded tab
-	if (mybool) {	/* Here is a multi-line
-			   (with embedded'	'tab)
-	    Comment */char mychar = '	';	//<-tab->	<-
-	} // end of if (mybool)
-	
-    } // end of main ()
-}
diff --git a/src/etc/testcases/taskdefs/fixcrlf/input/Junk3.java b/src/etc/testcases/taskdefs/fixcrlf/input/Junk3.java
deleted file mode 100644
index ad69747..0000000
--- a/src/etc/testcases/taskdefs/fixcrlf/input/Junk3.java
+++ /dev/null
@@ -1,12 +0,0 @@
-public class Junk1 {
-    public boolean mybool;
-    public static void main (String[] args) {
-	System.out.println("I have	a tab");
-	//	Here is a comment with an embedded tab
-	if (mybool) {	/* Here is a multi-line
-			   (with embedded'	'tab)
-	    Comment */char mychar = '	';	//<-tab->	<-
-	} // end of if (mybool)
-	
-    } // end of main ()
-}
diff --git a/src/etc/testcases/taskdefs/fixcrlf/input/Junk4.java b/src/etc/testcases/taskdefs/fixcrlf/input/Junk4.java
deleted file mode 100644
index 3427166..0000000
--- a/src/etc/testcases/taskdefs/fixcrlf/input/Junk4.java
+++ /dev/null
@@ -1,12 +0,0 @@
-public class Junk1 {
-    public boolean mybool;
-    public static void main (String[] args) {
-        System.out.println("I have	a tab");
-        //      Here is a comment with an embedded tab
-        if (mybool) {   /* Here is a multi-line
-                           (with embedded'      'tab)
-            Comment */char mychar = '	';      //<-tab->       <-
-        } // end of if (mybool)
-        
-    } // end of main ()
-}
diff --git a/src/etc/testcases/taskdefs/fixcrlf/input/Junk5.java b/src/etc/testcases/taskdefs/fixcrlf/input/Junk5.java
deleted file mode 100644
index 3427166..0000000
--- a/src/etc/testcases/taskdefs/fixcrlf/input/Junk5.java
+++ /dev/null
@@ -1,12 +0,0 @@
-public class Junk1 {
-    public boolean mybool;
-    public static void main (String[] args) {
-        System.out.println("I have	a tab");
-        //      Here is a comment with an embedded tab
-        if (mybool) {   /* Here is a multi-line
-                           (with embedded'      'tab)
-            Comment */char mychar = '	';      //<-tab->       <-
-        } // end of if (mybool)
-        
-    } // end of main ()
-}
diff --git a/src/etc/testcases/taskdefs/fixcrlf/input/Junk6.java b/src/etc/testcases/taskdefs/fixcrlf/input/Junk6.java
deleted file mode 100644
index 3427166..0000000
--- a/src/etc/testcases/taskdefs/fixcrlf/input/Junk6.java
+++ /dev/null
@@ -1,12 +0,0 @@
-public class Junk1 {
-    public boolean mybool;
-    public static void main (String[] args) {
-        System.out.println("I have	a tab");
-        //      Here is a comment with an embedded tab
-        if (mybool) {   /* Here is a multi-line
-                           (with embedded'      'tab)
-            Comment */char mychar = '	';      //<-tab->       <-
-        } // end of if (mybool)
-        
-    } // end of main ()
-}
diff --git a/src/etc/testcases/taskdefs/fixcrlf/input/Junk7.java b/src/etc/testcases/taskdefs/fixcrlf/input/Junk7.java
deleted file mode 100644
index 3427166..0000000
--- a/src/etc/testcases/taskdefs/fixcrlf/input/Junk7.java
+++ /dev/null
@@ -1,12 +0,0 @@
-public class Junk1 {
-    public boolean mybool;
-    public static void main (String[] args) {
-        System.out.println("I have	a tab");
-        //      Here is a comment with an embedded tab
-        if (mybool) {   /* Here is a multi-line
-                           (with embedded'      'tab)
-            Comment */char mychar = '	';      //<-tab->       <-
-        } // end of if (mybool)
-        
-    } // end of main ()
-}
diff --git a/src/etc/testcases/taskdefs/fixcrlf/input/Junk8.java b/src/etc/testcases/taskdefs/fixcrlf/input/Junk8.java
deleted file mode 100644
index ad69747..0000000
--- a/src/etc/testcases/taskdefs/fixcrlf/input/Junk8.java
+++ /dev/null
@@ -1,12 +0,0 @@
-public class Junk1 {
-    public boolean mybool;
-    public static void main (String[] args) {
-	System.out.println("I have	a tab");
-	//	Here is a comment with an embedded tab
-	if (mybool) {	/* Here is a multi-line
-			   (with embedded'	'tab)
-	    Comment */char mychar = '	';	//<-tab->	<-
-	} // end of if (mybool)
-	
-    } // end of main ()
-}
diff --git a/src/etc/testcases/taskdefs/fixcrlf/input/Junk9.java b/src/etc/testcases/taskdefs/fixcrlf/input/Junk9.java
deleted file mode 100644
index 82a8e84..0000000
--- a/src/etc/testcases/taskdefs/fixcrlf/input/Junk9.java
+++ /dev/null
@@ -1,13 +0,0 @@
-public class Junk1 {

-    public boolean mybool;

-    public static void main (String[] args) {

-	System.out.println("I have	a tab");

-	//	Here is a comment with an embedded tab

-	if (mybool) {	/* Here is a multi-line

-			   (with embedded'	'tab)

-	    Comment */char mychar = '	';	//<-tab->	<-

-	} // end of if (mybool)

-	

-    } // end of main ()

-}

-
\ No newline at end of file
diff --git a/src/etc/testcases/taskdefs/fixcrlf/input/Mac2Unix b/src/etc/testcases/taskdefs/fixcrlf/input/Mac2Unix
deleted file mode 100644
index 5397a14..0000000
--- a/src/etc/testcases/taskdefs/fixcrlf/input/Mac2Unix
+++ /dev/null
Binary files differ
diff --git a/src/etc/testcases/taskdefs/fixcrlf/input/input.crlf.utf16 b/src/etc/testcases/taskdefs/fixcrlf/input/input.crlf.utf16
deleted file mode 100644
index 81ad581..0000000
--- a/src/etc/testcases/taskdefs/fixcrlf/input/input.crlf.utf16
+++ /dev/null
Binary files differ
diff --git a/src/etc/testcases/taskdefs/fixcrlf/input/longlines.crlf b/src/etc/testcases/taskdefs/fixcrlf/input/longlines.crlf
deleted file mode 100644
index f379d34..0000000
--- a/src/etc/testcases/taskdefs/fixcrlf/input/longlines.crlf
+++ /dev/null
@@ -1,2 +0,0 @@
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

-abc

diff --git a/src/etc/testcases/taskdefs/get.xml b/src/etc/testcases/taskdefs/get.xml
deleted file mode 100644
index 3c6c20c..0000000
--- a/src/etc/testcases/taskdefs/get.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0"?>
-
-<project name="xxx-test" basedir="." default="test1">
-
-  <target name="test1">
-    <get/>
-  </target>
-
-  <target name="test2">
-    <get src=""/>
-  </target>
-
-  <target name="test3">
-    <get src="" dest=""/>
-  </target>
-
-  <target name="test4">
-    <get src="" dest=""/>
-  </target>
-
-  <target name="test5">
-    <get src="http://www.apache.org/" dest=""/>
-  </target>
-
-  <target name="test6">
-    <get src="http://www.apache.org/" dest="get.tmp"/>
-  </target>
-
-</project>
diff --git a/src/etc/testcases/taskdefs/gunzip.xml b/src/etc/testcases/taskdefs/gunzip.xml
deleted file mode 100644
index 84d5598..0000000
--- a/src/etc/testcases/taskdefs/gunzip.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0"?>
-
-<project name="xxx-test" basedir="." default="test1">
-
-  <target name="test1">
-    <gunzip/>
-  </target>
-
-  <target name="test2">
-    <gunzip src=""/>
-  </target>
-
-  <target name="cleanup">
-    <delete file="asf-logo.gif" />
-  </target>
-
-  <target name="testGzipTask">
-    <ant antfile="gzip.xml" target="realTest" />
-    <gunzip src="asf-logo.gif.gz" dest="asf-logo.gif" />
-    <ant antfile="gzip.xml" target="cleanup" />
-  </target>
-
-  <target name="realTest">
-    <gunzip src="expected/asf-logo.gif.gz" dest="asf-logo.gif" />
-  </target>
-
-</project>
diff --git a/src/etc/testcases/taskdefs/gzip.xml b/src/etc/testcases/taskdefs/gzip.xml
deleted file mode 100644
index f4b5e0e..0000000
--- a/src/etc/testcases/taskdefs/gzip.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0"?>
-
-<project name="xxx-test" basedir="." default="test1">
-
-  <target name="test1">
-    <gzip/>
-  </target>
-
-  <target name="test2">
-    <gzip src=""/>
-  </target>
-
-  <target name="test3">
-    <gzip zipfile=""/>
-  </target>
-
-  <target name="test4">
-    <gzip src="gzip.xml" zipfile="." />
-  </target>
-
-  <target name="realTest">
-    <gzip src="../asf-logo.gif" zipfile="asf-logo.gif.gz" />
-  </target>
-
-  <target name="testDateCheck">
-    <touch file="asf-logo.gif.gz"/>
-    <gzip src="../asf-logo.gif" zipfile="asf-logo.gif.gz" />
-  </target>
-
-  <target name="cleanup">
-    <delete file="asf-logo.gif.gz" />
-  </target>
-
-</project>
diff --git a/src/etc/testcases/taskdefs/initializeclass.xml b/src/etc/testcases/taskdefs/initializeclass.xml
deleted file mode 100644
index 17e7017..0000000
--- a/src/etc/testcases/taskdefs/initializeclass.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-
-<project name="test" default="all">
-  <target name="all"/>
-
-  <target name="forked">
-    <java fork="true" output="forkedout" 
-          className="org.apache.tools.ant.taskdefs.dir1.B">
-
-      <classpath>
-        <pathelement path="../../../../build/testcases"/>
-        <pathelement location="${java.home}/lib/classes.zip" />
-      </classpath>
-    </java>
-  </target>
-
-  <target name="unforked">
-    <java className="org.apache.tools.ant.taskdefs.dir1.B">
-      <classpath>
-        <pathelement path="../../../../build/testcases"/>
-        <pathelement location="${java.home}/lib/classes.zip" />
-      </classpath>
-    </java>
-  </target>
-</project>
diff --git a/src/etc/testcases/taskdefs/input.properties b/src/etc/testcases/taskdefs/input.properties
deleted file mode 100644
index a1aa352..0000000
--- a/src/etc/testcases/taskdefs/input.properties
+++ /dev/null
@@ -1,11 +0,0 @@
-Press\ Return\ key\ to\ continue...=test
-All\ data\ is\ going\ to\ be\ deleted\ from\ DB\ continue?=test
-All\ data\ is\ going\ to\ be\ deleted\ from\ db\ continue\ (y/n)?=y
-Please\ enter\ db-username\:=scott
-#
-# JDK 1.1 doesn't seem to handle blanks in the property key
-#
-Press_Return_key_to_continue...=test
-All_data_is_going_to_be_deleted_from_DB_continue?=test
-All_data_is_going_to_be_deleted_from_db_continue_(y/n)?=y
-Please_enter_db_username=scott
diff --git a/src/etc/testcases/taskdefs/input.xml b/src/etc/testcases/taskdefs/input.xml
deleted file mode 100644
index 9e7942e..0000000
--- a/src/etc/testcases/taskdefs/input.xml
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0"?>
-
-<project name="input-test" basedir="." default="test1">
-
-  <target name="test1">
-    <input>Press Return key to continue...</input>
-  </target>
-
-  <target name="test2">
-    <input message="Press Return key to continue..." />
-  </target>
-
-  <target name="test3">
-    <input message="All data is going to be deleted from DB continue?"
-           validargs="y,n"
-           />
-  </target>
-
-  <target name="test5">
-    <input message="All data is going to be deleted from db continue (y/n)?"
-           validargs="y,n"
-           />
-  </target>
-
-  <target name="test6">
-    <input message="Please enter db-username:"
-           addproperty="db.user"
-           />
-  </target>
-
-  <target name="test1.1">
-    <input>Press_Return_key_to_continue...</input>
-  </target>
-
-  <target name="test2.1">
-    <input message="Press_Return_key_to_continue..." />
-  </target>
-
-  <target name="test3.1">
-    <input message="All_data_is_going_to_be_deleted_from_DB_continue?"
-           validargs="y,n"
-           />
-  </target>
-
-  <target name="test5.1">
-    <input message="All_data_is_going_to_be_deleted_from_db_continue_(y/n)?"
-           validargs="y,n"
-           />
-  </target>
-
-  <target name="test6.1">
-    <input message="Please_enter_db_username"
-           addproperty="db.user"
-           />
-  </target>
-
-</project>
diff --git a/src/etc/testcases/taskdefs/jar.xml b/src/etc/testcases/taskdefs/jar.xml
deleted file mode 100644
index 3bbfdf7..0000000
--- a/src/etc/testcases/taskdefs/jar.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0"?>
-
-<project name="jar-test" basedir="." default="test1">
-
-  <target name="test1">
-    <jar/>
-  </target>
-
-  <target name="test2">
-    <jar
-    	jarfile="jar.tmp"
-    	manifest="none"
-    />
-  </target>
-
-  <target name="test3">
-    <jar
-    	destfile="jar.tmp"
-	whenempty="format C: /y" 
-    />
-  </target>
-
-  <target name="test4">
-   <jar
-    	destfile="tmp.jar"
-	basedir="."
-	includes="jar.xml"
-    />
-  </target>
-
-  <!-- This test is to make sure upToDate is working -->
-  <target name="test5">
-    <jar
-    	destfile="tmp.jar"
-	basedir="."
-	includes="jar.xml"
-    />
-  </target>
-
-  <target name="cleanup">
-    <delete file="tmp.jar" />
-  </target>
-
-</project>
diff --git a/src/etc/testcases/taskdefs/java.xml b/src/etc/testcases/taskdefs/java.xml
deleted file mode 100644
index 5d9bba1..0000000
--- a/src/etc/testcases/taskdefs/java.xml
+++ /dev/null
@@ -1,92 +0,0 @@
-<?xml version="1.0"?>
-
-<project name="java-test" basedir="." default="">
-
-  <property name="app" 
-    value="org.apache.tools.ant.taskdefs.JavaTest$$EntryPoint" />
-
-  <property name="app2" 
-    value="org.apache.tools.ant.taskdefs.JavaTest$$ExceptingEntryPoint" />
-    
-  <path id="test.classpath">
-    <pathelement location="${build.tests}"/>
-  </path>
-  
-  <target name="testNoJarNoClassname">
-    <java/>
-  </target>
-
-  <target name="testJarNoFork">
-    <java jar="test.jar" fork="false"/>
-  </target>  
-  
-  
-  <target name="testJarAndClassName">
-    <java jar="test.jar" classname="${app}" />
-  </target>
-  
-  <target name="testClassnameAndJar">
-    <java classname="${app}" jar="test.jar"  />
-  </target>  
-  
-  <target name="testRun">
-    <fail unless="tests-classpath.value" /> 
-    <java classname="${app}"
-      classpath="${tests-classpath.value}"/>
-  </target>
-
-  <target name="testRunFail">
-    <java classname="${app}" 
-      classpath="${tests-classpath.value}"
-      >
-      <arg value="-1"/>
-    </java>
-  </target>
-
-  <target name="testRunFailFoe">
-    <java classname="${app}"
-      classpath="${tests-classpath.value}"
-      failonerror="true">
-      <arg value="-1"/>
-    </java>
-  </target>
-
-  <target name="testRunFailFoeFork">
-    <java classname="${app}"
-        classpath="${tests-classpath.value}"
-        failonerror="true"
-        fork="true">
-        <arg value="-1"/>
-    </java>
-  </target>
-
-  <target name="testExcepting">
-    <java classname="${app2}"
-        classpath="${tests-classpath.value}"
-        >
-    </java>
-  </target>
-
-  <target name="testExceptingFork">
-    <java classname="${app2}"
-          classpath="${tests-classpath.value}"
-          fork="true">
-    </java>
-  </target>
-
-  <target name="testExceptingFoe">
-    <java classname="${app2}"
-        classpath="${tests-classpath.value}"
-        failonerror="true">
-    </java>
-  </target>
-
-  <target name="testExceptingFoeFork">
-    <java classname="${app2}"
-        classpath="${tests-classpath.value}"
-        failonerror="true"
-        fork="true">
-    </java>
-  </target>
-  
-</project>
diff --git a/src/etc/testcases/taskdefs/loadfile.xml b/src/etc/testcases/taskdefs/loadfile.xml
deleted file mode 100644
index 9b91d78..0000000
--- a/src/etc/testcases/taskdefs/loadfile.xml
+++ /dev/null
@@ -1,147 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<project name="loadfile-test" basedir="." default="testLoadAFile">
-
-
-  <target name="init">
-  </target>
-
-  <target name="testNoSourcefileDefined" depends="init">
-    <loadfile property="foo" />
-  </target>
-
-  <target name="testNoPropertyDefined"
-    depends="init">
-    <loadfile srcFile="somefile" />
-  </target>
-
-
-  <target name="testNoSourcefilefound"
-    depends="init">
-    <loadfile property="missing" srcFile="somefile" />
-  </target>
-
-  <target name="testFailOnError"
-    depends="init">
-    <loadfile
-      property="testFailOnError"
-      srcFile="somefile"
-      failonerror="false"/>
-  </target>
-
-  <target name="testLoadAFile"
-    depends="init">
-    <echo
-      message="What's it going to be then, eh?"
-      file="loadfile1.tmp"
-      />
-    <loadfile property="testLoadAFile" srcFile="loadfile1.tmp" />
-    <echo>${testLoadAFile}</echo>
-  </target>
-
-  <target name="testLoadAFileEnc"
-    depends="init">
-    <loadfile property="testLoadAFileEnc"
-      srcFile="loadfile.xml"
-      encoding="ISO-8859-1"/>
-  </target>
-
-  <target name="testEvalProps"
-    depends="init">
-    <property name="weather" value="rain" />
-    <echo
-      message="All these moments will be lost in time, like teardrops in the ${weather}"
-      file="loadfile1.tmp"
-      />
-    <loadfile property="testEvalProps"
-        srcFile="loadfile1.tmp">
-        <filterchain>
-          <expandproperties/>
-        </filterchain>
-    </loadfile>
-    <echo>${testEvalProps}</echo>
-  </target>
-
-  <target name="testFilterChain"
-    depends="init">
-      <echo file="loadfile1.tmp">#Line 1
-REM Line 2
---Line 3
-Line 4
-Hello World!</echo>
-      <loadfile srcFile="loadfile1.tmp" 
-        property="testFilterChain">
-        <filterchain>
-          <headfilter lines="5"/>
-          <striplinecomments>
-            <comment value="--"/>
-            <comment value="REM "/>
-            <comment value="#"/>
-          </striplinecomments>
-          <filterreader classname="org.apache.tools.ant.filters.TailFilter">
-            <param name="lines" value="1"/>
-          </filterreader>
-          <linecontains>
-            <contains value="World!"/>
-          </linecontains>
-        </filterchain>
-      </loadfile>
-  </target>
-
-  <target name="testStripJavaComments"
-    depends="init">
-      <echo file="loadfile1.tmp">
-/*
-Comment "1"
-*/
-public class test1 {
-    //Some comment
-    int x = 1/2;
-    private static final String GREETING="*/Hello/*";
-    private static final String GREETING1="/*Hello*/";
-
-    public static void main( String args[] ) {
-    }
-}</echo>
-      <echo file="nocomments.tmp">
-
-public class test1 {
-    
-    int x = 1/2;
-    private static final String GREETING="*/Hello/*";
-    private static final String GREETING1="/*Hello*/";
-
-    public static void main( String args[] ) {
-    }
-}</echo>
-      <loadfile srcFile="loadfile1.tmp" 
-        property="testStripJavaComments">
-        <filterchain>
-          <stripjavacomments/>
-        </filterchain>
-      </loadfile>
-      <loadfile srcFile="nocomments.tmp" 
-        property="expected"/>
-  </target>
-
-  <target name="testOneLine"
-    depends="init">
-    <echo
-      message="1,&#10;2,&#13;3,&#13;&#10;4"
-      file="loadfile1.tmp"
-      />
-    <loadfile property="testOneLine"
-        srcFile="loadfile1.tmp">
-      <filterchain>
-        <striplinebreaks/>
-      </filterchain>
-    </loadfile>
-    <echo>${testOneLine}</echo>
-  </target>
-
-
-  <target name="cleanup">
-    <delete file="loadfile1.tmp"/>
-    <delete file="nocomments.tmp"/>
-  </target>
-
-  </project>
diff --git a/src/etc/testcases/taskdefs/loadproperties.xml b/src/etc/testcases/taskdefs/loadproperties.xml
deleted file mode 100644
index 7f1706d..0000000
--- a/src/etc/testcases/taskdefs/loadproperties.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<project name="loadproperties-test" 
-         basedir="." 
-         default="testPrefixedProperties">
-
-  <target name="init">
-  </target>
-
-  <target name="testPrefixedProperties" depends="init">
-    <property name="server" value="localhost"/>
-    <echo file="properties.tmp">
-#http.@PORT@ = 90
-http.@PORT@ = 80
-http.@SERVER@ = ${server}
-    </echo>
-    <loadproperties srcFile="properties.tmp">
-      <filterchain>
-        <striplinecomments>
-          <comment value="#"/>
-        </striplinecomments>
-        <prefixlines prefix="server1."/>
-        <replacetokens>
-          <token key="PORT" value="port"/>
-          <token key="SERVER" value="server"/>
-        </replacetokens>
-        <expandproperties/>
-      </filterchain>
-    </loadproperties>
-    <property name="server1.http.url" 
-      value="http://${server1.http.server}:${server1.http.port}"/>
-  </target>
-
-  <target name="cleanup">
-    <delete file="properties.tmp"/>
-  </target>
-
-</project>
diff --git a/src/etc/testcases/taskdefs/manifest.xml b/src/etc/testcases/taskdefs/manifest.xml
deleted file mode 100644
index 33d7f99..0000000
--- a/src/etc/testcases/taskdefs/manifest.xml
+++ /dev/null
@@ -1,185 +0,0 @@
-<?xml version="1.0"?>
-
-<!-- Manifest tests build file
-     author: Conor MacNeill -->
-<project name="manifest-test" basedir="." default="test1">
-
-  <target name="test1">
-    <jar file="mftest1.jar" manifest="manifests/test1.mf"/>
-    <unjar src="mftest1.jar" dest="manifests">
-      <include name="META-INF/MANIFEST.MF"/>
-    </unjar>
-  </target>
-  
-  <target name="test2">
-    <jar file="mftest2.jar" manifest="manifests/test2.mf"/>
-    <unjar src="mftest2.jar" dest="manifests">
-      <include name="META-INF/MANIFEST.MF"/>
-    </unjar>
-  </target>
-  
-  <target name="test3">
-    <jar file="mftest3.jar" manifest="manifests/test3.mf"/>
-  </target>
-  
-  <target name="test4">
-    <jar file="mftest4.jar" manifest="manifests/test4.mf"/>
-  </target>
-  
-  <target name="test5">
-    <jar file="mftest5.jar" manifest="manifests/test5.mf"/>
-  </target>
-  
-  <target name="test6">
-    <jar file="mftest6.jar" manifest="manifests/test6.mf"/>
-  </target>
-  
-  <target name="test7">
-    <jar file="mftest7.jar" manifest="manifests/test7.mf"/>
-  </target>
-  
-  <target name="test8">
-    <jar file="mftest8.jar">
-      <manifest>
-        <attribute name="Class-Path" value="fubar"/>
-        <section name="Test">
-          <attribute name="TestAttr" value="Test"/>
-        </section>
-      </manifest>
-    </jar>
-    <unjar src="mftest8.jar" dest="manifests">
-      <include name="META-INF/MANIFEST.MF"/>
-    </unjar>
-  </target>
-
-  <target name="test9">
-    <jar file="mftest9.jar">
-      <manifest>
-        <attribute name="Class-Path" value="fubar"/>
-        <section name="Test">
-          <attribute name="Name" value="Test"/>
-        </section>
-      </manifest>
-    </jar>
-  </target>
-
-  <target name="test10">
-    <jar file="mftest10.jar">
-      <manifest>
-        <attribute value="fubar"/>
-      </manifest>
-    </jar>
-  </target>
-
-  <target name="test11">
-    <jar file="mftest11.jar">
-      <manifest>
-        <attribute name="Test"/>
-      </manifest>
-    </jar>
-  </target>
-
-  <target name="test12">
-    <jar file="mftest12.jar">
-      <manifest>
-        <section>
-          <attribute name="TestAttr" value="Test"/>
-        </section>
-      </manifest>
-    </jar>
-  </target>
-
-  <target name="test13">
-    <jar file="mftest13.jar">
-      <manifest>
-        <attribute name="Test" value="Test1"/>
-        <attribute name="Test" value="Test2"/>
-      </manifest>
-    </jar>
-  </target>
-
-  <target name="test14">
-    <jar file="mftest14.jar">
-      <manifest>
-        <attribute name="Class-path" value="Test1"/>
-        <attribute name="Class-path" value="Test2"/>
-        <attribute name="Class-Path" value="Test3"/>
-        <attribute name="class-Path" value="Test4"/>
-      </manifest>
-    </jar>
-    <unjar src="mftest14.jar" dest="manifests">
-      <include name="META-INF/MANIFEST.MF"/>
-    </unjar>
-  </target>
-
-  <target name="testNoFile">
-    <manifest />
-  </target>
-
-  <target name="testLongLine">
-    <jar file="mftestLongLine.jar">
-      <manifest>
-        <attribute name="Class-path" 
-                   value="${test.longline}"/>
-      </manifest>
-    </jar>
-    <unjar src="mftestLongLine.jar" dest="manifests">
-      <include name="META-INF/MANIFEST.MF"/>
-    </unjar>
-  </target>
-
-  <target name="testOrder1">
-    <jar file="mftestOrder1.jar">
-      <manifest>
-        <section name="Test1">
-          <attribute name="TestAttr1" value="Test1"/>
-          <attribute name="TestAttr2" value="Test2"/>
-        </section>
-        <section name="Test2">
-          <attribute name="TestAttrx" value="Testx"/>
-        </section>
-      </manifest>
-    </jar>
-    <unjar src="mftestOrder1.jar" dest="manifests">
-      <include name="META-INF/MANIFEST.MF"/>
-    </unjar>
-  </target>
-
-  <target name="testOrder2">
-    <jar file="mftestOrder2.jar">
-      <manifest>
-        <section name="Test2">
-          <attribute name="TestAttrx" value="Testx"/>
-        </section>
-        <section name="Test1">
-          <attribute name="TestAttr2" value="Test2"/>
-          <attribute name="TestAttr1" value="Test1"/>
-        </section>
-      </manifest>
-    </jar>
-    <unjar src="mftestOrder2.jar" dest="manifests">
-      <include name="META-INF/MANIFEST.MF"/>
-    </unjar>
-  </target>
-
-  
-  
-  <target name="testReplace">
-    <copy file="manifests/test2.mf" toFile="mftest.mf" />
-    <manifest file="mftest.mf" />
-  </target>
-
-  <target name="testUpdate">
-    <copy file="manifests/test2.mf" toFile="mftest.mf" />
-    <manifest file="mftest.mf" mode="update">
-      <attribute name="Foo" value="Bar" />
-    </manifest>
-  </target>
-
-  <target name="clean">
-    <delete>
-      <fileset dir="." includes="mftest*"/>
-    </delete>
-    <delete dir="manifests/META-INF"/>
-  </target>
-</project>
diff --git a/src/etc/testcases/taskdefs/manifests/test1.mf b/src/etc/testcases/taskdefs/manifests/test1.mf
deleted file mode 100644
index 8b13789..0000000
--- a/src/etc/testcases/taskdefs/manifests/test1.mf
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/src/etc/testcases/taskdefs/manifests/test2.mf b/src/etc/testcases/taskdefs/manifests/test2.mf
deleted file mode 100644
index b8a88bd..0000000
--- a/src/etc/testcases/taskdefs/manifests/test2.mf
+++ /dev/null
@@ -1,2 +0,0 @@
-Manifest-Version: 2.0
-
diff --git a/src/etc/testcases/taskdefs/manifests/test3.mf b/src/etc/testcases/taskdefs/manifests/test3.mf
deleted file mode 100644
index 6aa82cc..0000000
--- a/src/etc/testcases/taskdefs/manifests/test3.mf
+++ /dev/null
@@ -1,3 +0,0 @@
-Manifest-Version: 1.0
-Header-without-colon maybe mistyped
-
diff --git a/src/etc/testcases/taskdefs/manifests/test4.mf b/src/etc/testcases/taskdefs/manifests/test4.mf
deleted file mode 100644
index 27afb18..0000000
--- a/src/etc/testcases/taskdefs/manifests/test4.mf
+++ /dev/null
@@ -1,4 +0,0 @@
-Manifest-Version: 1.0
-
- Can't start with a continuation line
-
diff --git a/src/etc/testcases/taskdefs/manifests/test5.mf b/src/etc/testcases/taskdefs/manifests/test5.mf
deleted file mode 100644
index 0fb8dea..0000000
--- a/src/etc/testcases/taskdefs/manifests/test5.mf
+++ /dev/null
@@ -1,3 +0,0 @@
-Manifest-Version: 1.0
-Name: test5 
-
diff --git a/src/etc/testcases/taskdefs/manifests/test6.mf b/src/etc/testcases/taskdefs/manifests/test6.mf
deleted file mode 100644
index 97988c6..0000000
--- a/src/etc/testcases/taskdefs/manifests/test6.mf
+++ /dev/null
@@ -1,5 +0,0 @@
-Manifest-Version: 1.0
-
-Test: test6
-Class-Path: fubar 
-
diff --git a/src/etc/testcases/taskdefs/manifests/test7.mf b/src/etc/testcases/taskdefs/manifests/test7.mf
deleted file mode 100644
index 72aace0..0000000
--- a/src/etc/testcases/taskdefs/manifests/test7.mf
+++ /dev/null
@@ -1,4 +0,0 @@
-Manifest-Version: 1.0
-Class-Path: fubar
-From: Jack 
-
diff --git a/src/etc/testcases/taskdefs/mkdir.xml b/src/etc/testcases/taskdefs/mkdir.xml
deleted file mode 100644
index d0e168b..0000000
--- a/src/etc/testcases/taskdefs/mkdir.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0"?>
-
-<project name="xxx-test" basedir="." default="test1">
-
-  <target name="test1">
-    <mkdir/>
-  </target>
-
-  <target name="test2">
-    <mkdir dir="template.xml"/>
-  </target>
-
-  <target name="test3">
-    <mkdir dir="testdir.tmp"/>
-  </target>
-
-</project>
diff --git a/src/etc/testcases/taskdefs/move.xml b/src/etc/testcases/taskdefs/move.xml
deleted file mode 100644
index e40e785..0000000
--- a/src/etc/testcases/taskdefs/move.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0"?>
-
-<project name="move-test" basedir="." default="testFilterSet">
-
-  <target name="testFilterSet">
-    <copy file="copy.filterset" tofile="move.filterset"/>
-    <move file="move.filterset" tofile="move.filterset.tmp">
-      <filterset>
-        <filter token="TITLE" value="Apache Ant Project"/>
-      </filterset>
-    </move>
-  </target>
-
-  <target name="testFilterChain">
-    <copy file="copy.filterset" tofile="move.filterchain"/>
-    <move file="move.filterchain" tofile="move.filterchain.tmp">
-      <filterchain>
-        <replacetokens>
-          <token key="TITLE" value="Apache Ant Project"/>
-        </replacetokens>
-      </filterchain>
-    </move>
-  </target>
-
-  <target name="cleanup"> 
-    <delete file="move.filterset.tmp"/>
-    <delete file="move.filterchain.tmp"/>
-  </target>
-
-</project>
diff --git a/src/etc/testcases/taskdefs/optional/WsdlToDotnet.xml b/src/etc/testcases/taskdefs/optional/WsdlToDotnet.xml
deleted file mode 100644
index a925f7a..0000000
--- a/src/etc/testcases/taskdefs/optional/WsdlToDotnet.xml
+++ /dev/null
@@ -1,129 +0,0 @@
-<?xml version="1.0"?>
-
-<project name="wsdl-to-java-jtest" basedir="." default="">
-
-
-  <property environment="env"/>
-  <property name="build.dir" location="wsdl/build"/>
-  <property name="cache.dir" location="${build.dir}/cache"/>
-  <property name="src.dir" location="${build.dir}/src"/>
-  <property name="classes.dir" location="${build.dir}/classes"/>
-  <property name="local.wsdl" 
-    location="wsdl/StockQuoteService.wsdl" />
-  <property name="out.csc" location="${src.dir}/out.cs"/>
-  <property name="out.app" location="${classes.dir}/out.dll"/>
-  <property name="out.type" value="module"/>
-  <property name="endpoint"
-    value="http://nagoya.apache.org:5049/Axis/StockQuoteService.jws" />
-  <property name="endpoint.wsdl" 
-    value="http://nagoya.apache.org:5049/Axis/StockQuoteService.jws?wsdl" />
-  
-  <target name="init" depends="validate">
-    <mkdir dir="${build.dir}"/>
-    <mkdir dir="${cache.dir}"/>
-    <mkdir dir="${src.dir}"/>
-    <mkdir dir="${classes.dir}"/>
-  </target>
-  
-  <target name="probe_for_apps" >
-   <condition property="wsdl.found">
-      <or>
-        <available file="wsdl"     filepath="${env.PATH}" />
-        <available file="wsdl.exe" filepath="${env.PATH}" />
-        <available file="wsdl.exe" filepath="${env.Path}" />
-      </or>
-    </condition>
-   <echo> wsdl.found=${wsdl.found}</echo>
-   <condition property="csc.found">
-      <or>
-        <available file="csc"     filepath="${env.PATH}" />
-        <available file="csc.exe" filepath="${env.PATH}" />
-        <available file="csc.exe" filepath="${env.Path}" />
-      </or>
-    </condition>
-   <echo> csc.found=${csc.found}</echo>
-   <condition property="dotnetapps.found">
-      <and>
-        <isset property="csc.found"/>
-        <isset property="wsdl.found"/>
-      </and>
-    </condition>
-   <echo> dotnetapps.found=${dotnetapps.found}</echo>
-  </target>
-  
-  <target name="teardown">
-    <delete dir="${build.dir}"/>
-  </target>  
-
-  <target name="validate" depends="probe_for_apps" >
-    <fail unless="dotnetapps.found">Needed .net apps are missing</fail>
-  </target>  
-  
-  
-  <target name="testNoParams">
-    <WsdlToDotnet/>
-  </target>
-
-  <target name="testNoSrc">
-    <WsdlToDotnet destFile="${out.csc}"/>
-  </target>
-
-  <target name="testDestIsDir" depends="init">
-    <WsdlToDotnet destFile="${build.dir}"
-      srcFile="${local.wsdl}"/>
-  </target>
-  
-  <target name="testBothSrc" depends="init">
-    <WsdlToDotnet destFile="${out.csc}"
-      srcFile="${local.wsdl}"
-      url="${endpoint.wsdl}"
-      />
-  </target>
-
-  <target name="testSrcIsDir" depends="init">
-    <WsdlToDotnet destFile="${out.csc}"
-      srcFile="${build.dir}"
-      />
-  </target>
-
-  <target name="testSrcIsMissing" depends="init">
-    <WsdlToDotnet destFile="${out.csc}"
-      srcFile="${build.dir}/invalidfile.wsdl"
-      />
-  </target>
-  
-  <target name="testLocalWsdl" depends="init">
-    <WsdlToDotnet destFile="${out.csc}"
-      srcFile="${local.wsdl}"
-      />
-    <csc 
-      srcDir="${src.dir}"
-      destFile="${out.app}"
-      targetType="${out.type}"
-      />
-    <available property="app.created" file="${out.app}"/>
-    <fail unless="app.created">No app created</fail>
-  </target>
-  
-  <target name="testLocalWsdlServer" depends="init">
-    <WsdlToDotnet destFile="${out.csc}"
-      srcFile="${local.wsdl}"
-      server="true"
-      />
-    <csc 
-      srcDir="${src.dir}"
-      destFile="${out.app}"
-      targetType="${out.type}" 
-      fileAlign="512"
-      />
-    <available property="app.created" file="${out.app}"/>
-    <fail unless="app.created">No app created</fail>
-  </target>
-  
-  <target name="testInvalidExtraOps" depends="init">
-    <WsdlToDotnet destFile="${out.csc}"
-      srcFile="${local.wsdl}"
-      extraOptions="/newOption:not-one-known-of"
-      />
-  </target>    
-</project>
diff --git a/src/etc/testcases/taskdefs/optional/antlr/antlr.g b/src/etc/testcases/taskdefs/optional/antlr/antlr.g
deleted file mode 100644
index 641b968..0000000
--- a/src/etc/testcases/taskdefs/optional/antlr/antlr.g
+++ /dev/null
@@ -1,60 +0,0 @@
-class CalcParser extends Parser;
-options {
-	buildAST = true;	// uses CommonAST by default
-}
-
-expr
-	:	mexpr (PLUS^ mexpr)* SEMI!
-	;
-
-mexpr
-	:	atom (STAR^ atom)*
-	;
-
-atom:	INT
-	;
-
-class CalcLexer extends Lexer;
-
-WS	:	(' '
-	|	'\t'
-	|	'\n'
-	|	'\r')
-		{ _ttype = Token.SKIP; }
-	;
-
-LPAREN:	'('
-	;
-
-RPAREN:	')'
-	;
-
-STAR:	'*'
-	;
-
-PLUS:	'+'
-	;
-
-SEMI:	';'
-	;
-
-protected
-DIGIT
-	:	'0'..'9'
-	;
-
-INT	:	(DIGIT)+
-	;
-
-class CalcTreeWalker extends TreeParser;
-
-expr returns [float r]
-{
-	float a,b;
-	r=0;
-}
-	:	#(PLUS a=expr b=expr)	{r = a+b;}
-	|	#(STAR a=expr b=expr)	{r = a*b;}
-	|	i:INT			{r = (float)Integer.parseInt(i.getText());}
-	;
-
diff --git a/src/etc/testcases/taskdefs/optional/antlr/antlr.xml b/src/etc/testcases/taskdefs/optional/antlr/antlr.xml
deleted file mode 100644
index 163ffdd..0000000
--- a/src/etc/testcases/taskdefs/optional/antlr/antlr.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version="1.0"?>
-
-<project name="antlr-test" basedir="." default="test1">
-
-  <property name="tmp.dir" location="antlr.tmp"/>
-
-
-  <target name="test1">
-    <antlr/>
-  </target>
-
-  <target name="test2">
-    <antlr target="antlr.g" outputdirectory="${tmp.dir}"/>
-  </target>
-
-  <target name="test3">
-    <mkdir dir="${tmp.dir}"/>
-    <antlr target="antlr.g" outputdirectory="${tmp.dir}"/>
-  </target>
-
-  <target name="test4">
-    <mkdir dir="${tmp.dir}"/>
-    <antlr target="java.g" outputdirectory="${tmp.dir}"/>
-    <antlr dir="${tmp.dir}" target="java.tree.g" outputdirectory="${tmp.dir}"/>
-  </target>
-
-  <target name="test5">
-    <mkdir dir="${tmp.dir}"/>
-    <antlr target="java.tree.g" outputdirectory="${tmp.dir}" fork="yes"/>
-  </target>
-
-  <target name="test6">
-    <mkdir dir="${tmp.dir}"/>
-    <antlr target="java.g" outputdirectory="${tmp.dir}" />
-    <antlr dir="${tmp.dir}"
-           target="java.tree.g"
-           outputdirectory="${tmp.dir}"
-           fork="yes"/>
-  </target>
-
-  <target name="test7">
-    <antlr target="antlr.xml"/>
-  </target>    
-
-  <target name="cleanup">
-    <delete dir="${tmp.dir}" />
-  </target>
-
-</project>
\ No newline at end of file
diff --git a/src/etc/testcases/taskdefs/optional/antlr/java.g b/src/etc/testcases/taskdefs/optional/antlr/java.g
deleted file mode 100644
index d16ef72..0000000
--- a/src/etc/testcases/taskdefs/optional/antlr/java.g
+++ /dev/null
@@ -1,1166 +0,0 @@
-/** Java 1.2 Recognizer
- *
- * Run 'java Main <directory full of java files>'
- *
- * Contributing authors:
- *		John Mitchell		johnm@non.net
- *		Terence Parr		parrt@magelang.com
- *		John Lilley			jlilley@empathy.com
- *		Scott Stanchfield	thetick@magelang.com
- *		Markus Mohnen       mohnen@informatik.rwth-aachen.de
- *		Peter Williams		pwilliams@netdynamics.com
- *
- * Version 1.00 December 9, 1997 -- initial release
- * Version 1.01 December 10, 1997
- *		fixed bug in octal def (0..7 not 0..8)
- * Version 1.10 August 1998 (parrt)
- *		added tree construction
- *		fixed definition of WS,comments for mac,pc,unix newlines
- *		added unary plus
- * Version 1.11 (Nov 20, 1998)
- *		Added "shutup" option to turn off last ambig warning.
- *		Fixed inner class def to allow named class defs as statements
- *		synchronized requires compound not simple statement
- *		add [] after builtInType DOT class in primaryExpression
- *		"const" is reserved but not valid..removed from modifiers
- * Version 1.12 (Feb 2, 1999)
- *		Changed LITERAL_xxx to xxx in tree grammar.
- *		Updated java.g to use tokens {...} now for 2.6.0 (new feature).
- *
- * Version 1.13 (Apr 23, 1999)
- *		Didn't have (stat)? for else clause in tree parser.
- *		Didn't gen ASTs for interface extends.  Updated tree parser too.
- *		Updated to 2.6.0.
- * Version 1.14 (Jun 20, 1999)
- *		Allowed final/abstract on local classes.
- *		Removed local interfaces from methods
- *		Put instanceof precedence where it belongs...in relationalExpr
- *			It also had expr not type as arg; fixed it.
- *		Missing ! on SEMI in classBlock
- *		fixed: (expr) + "string" was parsed incorrectly (+ as unary plus).
- *		fixed: didn't like Object[].class in parser or tree parser
- * Version 1.15 (Jun 26, 1999)
- *		Screwed up rule with instanceof in it. :(  Fixed.
- *		Tree parser didn't like (expr).something; fixed.
- *		Allowed multiple inheritance in tree grammar. oops.
- * Version 1.16 (August 22, 1999)
- *		Extending an interface built a wacky tree: had extra EXTENDS.
- *		Tree grammar didn't allow multiple superinterfaces.
- *		Tree grammar didn't allow empty var initializer: {}
- * Version 1.17 (October 12, 1999)
- *		ESC lexer rule allowed 399 max not 377 max.
- *		java.tree.g didn't handle the expression of synchronized
- *			statements.
- *
- * Version tracking now done with following ID:
- *
- * $Id$
- *
- * BUG:
- * 		Doesn't like boolean.class!
- *
- * class Test {
- *   public static void main( String args[] ) {
- *     if (boolean.class.equals(boolean.class)) {
- *       System.out.println("works");
- *     }
- *   }
- * }
- *
- * This grammar is in the PUBLIC DOMAIN
- */
-class JavaRecognizer extends Parser;
-options {
-	k = 2;                           // two token lookahead
-	exportVocab=Java;                // Call its vocabulary "Java"
-	codeGenMakeSwitchThreshold = 2;  // Some optimizations
-	codeGenBitsetTestThreshold = 3;
-	defaultErrorHandler = false;     // Don't generate parser error handlers
-	buildAST = true;
-}
-
-tokens {
-	BLOCK; MODIFIERS; OBJBLOCK; SLIST; CTOR_DEF; METHOD_DEF; VARIABLE_DEF; 
-	INSTANCE_INIT; STATIC_INIT; TYPE; CLASS_DEF; INTERFACE_DEF; 
-	PACKAGE_DEF; ARRAY_DECLARATOR; EXTENDS_CLAUSE; IMPLEMENTS_CLAUSE;
-	PARAMETERS; PARAMETER_DEF; LABELED_STAT; TYPECAST; INDEX_OP; 
-	POST_INC; POST_DEC; METHOD_CALL; EXPR; ARRAY_INIT; 
-	IMPORT; UNARY_MINUS; UNARY_PLUS; CASE_GROUP; ELIST; FOR_INIT; FOR_CONDITION; 
-	FOR_ITERATOR; EMPTY_STAT; FINAL="final"; ABSTRACT="abstract";
-}
-	
-// Compilation Unit: In Java, this is a single file.  This is the start
-//   rule for this parser
-compilationUnit
-	:	// A compilation unit starts with an optional package definition
-		(	packageDefinition
-		|	/* nothing */
-		)
-
-		// Next we have a series of zero or more import statements
-		( importDefinition )*
-
-		// Wrapping things up with any number of class or interface
-		//    definitions
-		( typeDefinition )*
-
-		EOF!
-	;
-
-
-// Package statement: "package" followed by an identifier.
-packageDefinition
-	options {defaultErrorHandler = true;} // let ANTLR handle errors
-	:	p:"package"^ {#p.setType(PACKAGE_DEF);} identifier SEMI!
-	;
-
-
-// Import statement: import followed by a package or class name
-importDefinition
-	options {defaultErrorHandler = true;}
-	:	i:"import"^ {#i.setType(IMPORT);} identifierStar SEMI!
-	;
-
-// A type definition in a file is either a class or interface definition.
-typeDefinition
-	options {defaultErrorHandler = true;}
-	:	m:modifiers!
-		( classDefinition[#m]
-		| interfaceDefinition[#m]
-		)
-	|	SEMI!
-	;
-
-/** A declaration is the creation of a reference or primitive-type variable
- *  Create a separate Type/Var tree for each var in the var list.
- */
-declaration!
-	:	m:modifiers t:typeSpec[false] v:variableDefinitions[#m,#t]
-		{#declaration = #v;}
-	;
-
-// A list of zero or more modifiers.  We could have used (modifier)* in
-//   place of a call to modifiers, but I thought it was a good idea to keep
-//   this rule separate so they can easily be collected in a Vector if
-//   someone so desires
-modifiers
-	:	( modifier )*
-		{#modifiers = #([MODIFIERS, "MODIFIERS"], #modifiers);}
-	;
-
-
-// A type specification is a type name with possible brackets afterwards
-//   (which would make it an array type).
-typeSpec[boolean addImagNode]
-	: classTypeSpec[addImagNode]
-	| builtInTypeSpec[addImagNode]
-	;
-
-// A class type specification is a class type with possible brackets afterwards
-//   (which would make it an array type).
-classTypeSpec[boolean addImagNode]
-	:	identifier (lb:LBRACK^ {#lb.setType(ARRAY_DECLARATOR);} RBRACK!)*
-		{
-			if ( addImagNode ) {
-				#classTypeSpec = #(#[TYPE,"TYPE"], #classTypeSpec);
-			}
-		}
-	;
-
-// A builtin type specification is a builtin type with possible brackets
-// afterwards (which would make it an array type).
-builtInTypeSpec[boolean addImagNode]
-	:	builtInType (lb:LBRACK^ {#lb.setType(ARRAY_DECLARATOR);} RBRACK!)*
-		{
-			if ( addImagNode ) {
-				#builtInTypeSpec = #(#[TYPE,"TYPE"], #builtInTypeSpec);
-			}
-		}
-	;
-
-// A type name. which is either a (possibly qualified) class name or
-//   a primitive (builtin) type
-type
-	:	identifier
-	|	builtInType
-	;
-
-// The primitive types.
-builtInType
-	:	"void"
-	|	"boolean"
-	|	"byte"
-	|	"char"
-	|	"short"
-	|	"int"
-	|	"float"
-	|	"long"
-	|	"double"
-	;
-
-// A (possibly-qualified) java identifier.  We start with the first IDENT
-//   and expand its name by adding dots and following IDENTS
-identifier
-	:	IDENT  ( DOT^ IDENT )*
-	;
-
-identifierStar
-	:	IDENT
-		( DOT^ IDENT )*
-		( DOT^ STAR  )?
-	;
-
-
-// modifiers for Java classes, interfaces, class/instance vars and methods
-modifier
-	:	"private"
-	|	"public"
-	|	"protected"
-	|	"static"
-	|	"transient"
-	|	"final"
-	|	"abstract"
-	|	"native"
-	|	"threadsafe"
-	|	"synchronized"
-//	|	"const"			// reserved word; leave out
-	|	"volatile"
-	;
-
-
-// Definition of a Java class
-classDefinition![AST modifiers]
-	:	"class" IDENT
-		// it _might_ have a superclass...
-		sc:superClassClause
-		// it might implement some interfaces...
-		ic:implementsClause
-		// now parse the body of the class
-		cb:classBlock
-		{#classDefinition = #(#[CLASS_DEF,"CLASS_DEF"],
-							   modifiers,IDENT,sc,ic,cb);}
-	;
-
-superClassClause!
-	:	( "extends" id:identifier )?
-		{#superClassClause = #(#[EXTENDS_CLAUSE,"EXTENDS_CLAUSE"],id);}
-	;
-
-// Definition of a Java Interface
-interfaceDefinition![AST modifiers]
-	:	"interface" IDENT
-		// it might extend some other interfaces
-		ie:interfaceExtends
-		// now parse the body of the interface (looks like a class...)
-		cb:classBlock
-		{#interfaceDefinition = #(#[INTERFACE_DEF,"INTERFACE_DEF"],
-									modifiers,IDENT,ie,cb);}
-	;
-
-
-// This is the body of a class.  You can have fields and extra semicolons,
-// That's about it (until you see what a field is...)
-classBlock
-	:	LCURLY!
-			( field | SEMI! )*
-		RCURLY!
-		{#classBlock = #([OBJBLOCK, "OBJBLOCK"], #classBlock);}
-	;
-
-// An interface can extend several other interfaces...
-interfaceExtends
-	:	(
-		e:"extends"!
-		identifier ( COMMA! identifier )*
-		)?
-		{#interfaceExtends = #(#[EXTENDS_CLAUSE,"EXTENDS_CLAUSE"],
-							#interfaceExtends);}
-	;
-
-// A class can implement several interfaces...
-implementsClause
-	:	(
-			i:"implements"! identifier ( COMMA! identifier )*
-		)?
-		{#implementsClause = #(#[IMPLEMENTS_CLAUSE,"IMPLEMENTS_CLAUSE"],
-								 #implementsClause);}
-	;
-
-// Now the various things that can be defined inside a class or interface...
-// Note that not all of these are really valid in an interface (constructors,
-//   for example), and if this grammar were used for a compiler there would
-//   need to be some semantic checks to make sure we're doing the right thing...
-field!
-	:	// method, constructor, or variable declaration
-		mods:modifiers
-		(	h:ctorHead s:compoundStatement // constructor
-			{#field = #(#[CTOR_DEF,"CTOR_DEF"], mods, h, s);}
-
-		|	cd:classDefinition[#mods]       // inner class
-			{#field = #cd;}
-			
-		|	id:interfaceDefinition[#mods]   // inner interface
-			{#field = #id;}
-
-		|	t:typeSpec[false]  // method or variable declaration(s)
-			(	IDENT  // the name of the method
-
-				// parse the formal parameter declarations.
-				LPAREN! param:parameterDeclarationList RPAREN!
-
-				rt:returnTypeBrackersOnEndOfMethodHead[#t]
-
-				// get the list of exceptions that this method is declared to throw
-				(tc:throwsClause)?
-
-				( s2:compoundStatement | SEMI )
-				{#field = #(#[METHOD_DEF,"METHOD_DEF"],
-						     mods,
-							 #(#[TYPE,"TYPE"],rt),
-							 IDENT,
-							 param,
-							 tc,
-							 s2);}
-			|	v:variableDefinitions[#mods,#t] SEMI
-//				{#field = #(#[VARIABLE_DEF,"VARIABLE_DEF"], v);}
-				{#field = #v;}
-			)
-		)
-
-    // "static { ... }" class initializer
-	|	"static" s3:compoundStatement
-		{#field = #(#[STATIC_INIT,"STATIC_INIT"], s3);}
-
-    // "{ ... }" instance initializer
-	|	s4:compoundStatement
-		{#field = #(#[INSTANCE_INIT,"INSTANCE_INIT"], s4);}
-	;
-
-variableDefinitions[AST mods, AST t]
-	:	variableDeclarator[getASTFactory().dupTree(mods),
-						   getASTFactory().dupTree(t)]
-		(	COMMA!
-			variableDeclarator[getASTFactory().dupTree(mods),
-							   getASTFactory().dupTree(t)]
-		)*
-	;
-
-/** Declaration of a variable.  This can be a class/instance variable,
- *   or a local variable in a method
- * It can also include possible initialization.
- */
-variableDeclarator![AST mods, AST t]
-	:	id:IDENT d:declaratorBrackets[t] v:varInitializer
-		{#variableDeclarator = #(#[VARIABLE_DEF,"VARIABLE_DEF"], mods, #(#[TYPE,"TYPE"],d), id, v);}
-	;
-
-declaratorBrackets[AST typ]
-	:	{#declaratorBrackets=typ;}
-		(lb:LBRACK^ {#lb.setType(ARRAY_DECLARATOR);} RBRACK!)*
-	;
-
-varInitializer
-	:	( ASSIGN^ initializer )?
-	;
-
-// This is an initializer used to set up an array.
-arrayInitializer
-	:	lc:LCURLY^ {#lc.setType(ARRAY_INIT);}
-			(	initializer
-				(
-					// CONFLICT: does a COMMA after an initializer start a new
-					//           initializer or start the option ',' at end?
-					//           ANTLR generates proper code by matching
-					//			 the comma as soon as possible.
-					options {
-						warnWhenFollowAmbig = false;
-					}
-				:
-					COMMA! initializer
-				)*
-				(COMMA!)?
-			)?
-		RCURLY!
-	;
-
-
-// The two "things" that can initialize an array element are an expression
-//   and another (nested) array initializer.
-initializer
-	:	expression
-	|	arrayInitializer
-	;
-
-// This is the header of a method.  It includes the name and parameters
-//   for the method.
-//   This also watches for a list of exception classes in a "throws" clause.
-ctorHead
-	:	IDENT  // the name of the method
-
-		// parse the formal parameter declarations.
-		LPAREN! parameterDeclarationList RPAREN!
-
-		// get the list of exceptions that this method is declared to throw
-		(throwsClause)?
-	;
-
-// This is a list of exception classes that the method is declared to throw
-throwsClause
-	:	"throws"^ identifier ( COMMA! identifier )*
-	;
-
-
-returnTypeBrackersOnEndOfMethodHead[AST typ]
-	:	{#returnTypeBrackersOnEndOfMethodHead = typ;}
-		(lb:LBRACK^ {#lb.setType(ARRAY_DECLARATOR);} RBRACK!)*
-	;
-
-// A list of formal parameters
-parameterDeclarationList
-	:	( parameterDeclaration ( COMMA! parameterDeclaration )* )?
-		{#parameterDeclarationList = #(#[PARAMETERS,"PARAMETERS"],
-									#parameterDeclarationList);}
-	;
-
-// A formal parameter.
-parameterDeclaration!
-	:	pm:parameterModifier t:typeSpec[false] id:IDENT
-		pd:parameterDeclaratorBrackets[#t]
-		{#parameterDeclaration = #(#[PARAMETER_DEF,"PARAMETER_DEF"],
-									pm, #([TYPE,"TYPE"],pd), id);}
-	;
-
-parameterDeclaratorBrackets[AST t]
-	:	{#parameterDeclaratorBrackets = t;}
-		(lb:LBRACK^ {#lb.setType(ARRAY_DECLARATOR);} RBRACK!)*
-	;
-
-parameterModifier
-	:	(f:"final")?
-		{#parameterModifier = #(#[MODIFIERS,"MODIFIERS"], f);}
-	;
-
-// Compound statement.  This is used in many contexts:
-//   Inside a class definition prefixed with "static":
-//      it is a class initializer
-//   Inside a class definition without "static":
-//      it is an instance initializer
-//   As the body of a method
-//   As a completely indepdent braced block of code inside a method
-//      it starts a new scope for variable definitions
-
-compoundStatement
-	:	lc:LCURLY^ {#lc.setType(SLIST);}
-			// include the (possibly-empty) list of statements
-			(statement)*
-		RCURLY!
-	;
-
-
-statement
-	// A list of statements in curly braces -- start a new scope!
-	:	compoundStatement
-
-	// class definition
-	|	classDefinition[#[MODIFIERS, "MODIFIERS"]]
-
-	// final class definition
-	|	"final"! classDefinition[#(#[MODIFIERS, "MODIFIERS"],#[FINAL,"final"])]
-
-	// abstract class definition
-	|	"abstract"! classDefinition[#(#[MODIFIERS, "MODIFIERS"],#[ABSTRACT,"abstract"])]
-
-	// declarations are ambiguous with "ID DOT" relative to expression
-	// statements.  Must backtrack to be sure.  Could use a semantic
-	// predicate to test symbol table to see what the type was coming
-	// up, but that's pretty hard without a symbol table ;)
-	|	(declaration)=> declaration SEMI!
-
-	// An expression statement.  This could be a method call,
-	// assignment statement, or any other expression evaluated for
-	// side-effects.
-	|	expression SEMI!
-
-	// Attach a label to the front of a statement
-	|	IDENT c:COLON^ {#c.setType(LABELED_STAT);} statement
-
-	// If-else statement
-	|	"if"^ LPAREN! expression RPAREN! statement
-		(
-			// CONFLICT: the old "dangling-else" problem...
-			//           ANTLR generates proper code matching
-			//			 as soon as possible.  Hush warning.
-			options {
-				warnWhenFollowAmbig = false;
-			}
-		:
-			"else"! statement
-		)?
-
-	// For statement
-	|	"for"^
-			LPAREN!
-				forInit SEMI!   // initializer
-				forCond	SEMI!   // condition test
-				forIter         // updater
-			RPAREN!
-			statement                     // statement to loop over
-
-	// While statement
-	|	"while"^ LPAREN! expression RPAREN! statement
-
-	// do-while statement
-	|	"do"^ statement "while"! LPAREN! expression RPAREN! SEMI!
-
-	// get out of a loop (or switch)
-	|	"break"^ (IDENT)? SEMI!
-
-	// do next iteration of a loop
-	|	"continue"^ (IDENT)? SEMI!
-
-	// Return an expression
-	|	"return"^ (expression)? SEMI!
-
-	// switch/case statement
-	|	"switch"^ LPAREN! expression RPAREN! LCURLY!
-			( casesGroup )*
-		RCURLY!
-
-	// exception try-catch block
-	|	tryBlock
-
-	// throw an exception
-	|	"throw"^ expression SEMI!
-
-	// synchronize a statement
-	|	"synchronized"^ LPAREN! expression RPAREN! compoundStatement
-
-	// empty statement
-	|	s:SEMI {#s.setType(EMPTY_STAT);}
-	;
-
-
-casesGroup
-	:	(	// CONFLICT: to which case group do the statements bind?
-			//           ANTLR generates proper code: it groups the
-			//           many "case"/"default" labels together then
-			//           follows them with the statements
-			options {
-				warnWhenFollowAmbig = false;
-			}
-			:
-			aCase
-		)+
-		caseSList
-		{#casesGroup = #([CASE_GROUP, "CASE_GROUP"], #casesGroup);}
-	;
-
-aCase
-	:	("case"^ expression | "default") COLON!
-	;
-
-caseSList
-	:	(statement)*
-		{#caseSList = #(#[SLIST,"SLIST"],#caseSList);}
-	;
-
-// The initializer for a for loop
-forInit
-		// if it looks like a declaration, it is
-	:	(	(declaration)=> declaration
-		// otherwise it could be an expression list...
-		|	expressionList
-		)?
-		{#forInit = #(#[FOR_INIT,"FOR_INIT"],#forInit);}
-	;
-
-forCond
-	:	(expression)?
-		{#forCond = #(#[FOR_CONDITION,"FOR_CONDITION"],#forCond);}
-	;
-
-forIter
-	:	(expressionList)?
-		{#forIter = #(#[FOR_ITERATOR,"FOR_ITERATOR"],#forIter);}
-	;
-
-// an exception handler try/catch block
-tryBlock
-	:	"try"^ compoundStatement
-		(handler)*
-		( "finally"^ compoundStatement )?
-	;
-
-
-// an exception handler
-handler
-	:	"catch"^ LPAREN! parameterDeclaration RPAREN! compoundStatement
-	;
-
-
-// expressions
-// Note that most of these expressions follow the pattern
-//   thisLevelExpression :
-//       nextHigherPrecedenceExpression
-//           (OPERATOR nextHigherPrecedenceExpression)*
-// which is a standard recursive definition for a parsing an expression.
-// The operators in java have the following precedences:
-//    lowest  (13)  = *= /= %= += -= <<= >>= >>>= &= ^= |=
-//            (12)  ?:
-//            (11)  ||
-//            (10)  &&
-//            ( 9)  |
-//            ( 8)  ^
-//            ( 7)  &
-//            ( 6)  == !=
-//            ( 5)  < <= > >=
-//            ( 4)  << >>
-//            ( 3)  +(binary) -(binary)
-//            ( 2)  * / %
-//            ( 1)  ++ -- +(unary) -(unary)  ~  !  (type)
-//                  []   () (method call)  . (dot -- identifier qualification)
-//                  new   ()  (explicit parenthesis)
-//
-// the last two are not usually on a precedence chart; I put them in
-// to point out that new has a higher precedence than '.', so you
-// can validy use
-//     new Frame().show()
-// 
-// Note that the above precedence levels map to the rules below...
-// Once you have a precedence chart, writing the appropriate rules as below
-//   is usually very straightfoward
-
-
-
-// the mother of all expressions
-expression
-	:	assignmentExpression
-		{#expression = #(#[EXPR,"EXPR"],#expression);}
-	;
-
-
-// This is a list of expressions.
-expressionList
-	:	expression (COMMA! expression)*
-		{#expressionList = #(#[ELIST,"ELIST"], expressionList);}
-	;
-
-
-// assignment expression (level 13)
-assignmentExpression
-	:	conditionalExpression
-		(	(	ASSIGN^
-            |   PLUS_ASSIGN^
-            |   MINUS_ASSIGN^
-            |   STAR_ASSIGN^
-            |   DIV_ASSIGN^
-            |   MOD_ASSIGN^
-            |   SR_ASSIGN^
-            |   BSR_ASSIGN^
-            |   SL_ASSIGN^
-            |   BAND_ASSIGN^
-            |   BXOR_ASSIGN^
-            |   BOR_ASSIGN^
-            )
-			assignmentExpression
-		)?
-	;
-
-
-// conditional test (level 12)
-conditionalExpression
-	:	logicalOrExpression
-		( QUESTION^ assignmentExpression COLON! conditionalExpression )?
-	;
-
-
-// logical or (||)  (level 11)
-logicalOrExpression
-	:	logicalAndExpression (LOR^ logicalAndExpression)*
-	;
-
-
-// logical and (&&)  (level 10)
-logicalAndExpression
-	:	inclusiveOrExpression (LAND^ inclusiveOrExpression)*
-	;
-
-
-// bitwise or non-short-circuiting or (|)  (level 9)
-inclusiveOrExpression
-	:	exclusiveOrExpression (BOR^ exclusiveOrExpression)*
-	;
-
-
-// exclusive or (^)  (level 8)
-exclusiveOrExpression
-	:	andExpression (BXOR^ andExpression)*
-	;
-
-
-// bitwise or non-short-circuiting and (&)  (level 7)
-andExpression
-	:	equalityExpression (BAND^ equalityExpression)*
-	;
-
-
-// equality/inequality (==/!=) (level 6)
-equalityExpression
-	:	relationalExpression ((NOT_EQUAL^ | EQUAL^) relationalExpression)*
-	;
-
-
-// boolean relational expressions (level 5)
-relationalExpression
-	:	shiftExpression
-		(	(	(	LT^
-				|	GT^
-				|	LE^
-				|	GE^
-				)
-				shiftExpression
-			)*
-		|	"instanceof"^ typeSpec[true]
-		)
-	;
-
-
-// bit shift expressions (level 4)
-shiftExpression
-	:	additiveExpression ((SL^ | SR^ | BSR^) additiveExpression)*
-	;
-
-
-// binary addition/subtraction (level 3)
-additiveExpression
-	:	multiplicativeExpression ((PLUS^ | MINUS^) multiplicativeExpression)*
-	;
-
-
-// multiplication/division/modulo (level 2)
-multiplicativeExpression
-	:	unaryExpression ((STAR^ | DIV^ | MOD^ ) unaryExpression)*
-	;
-
-unaryExpression
-	:	INC^ unaryExpression
-	|	DEC^ unaryExpression
-	|	MINUS^ {#MINUS.setType(UNARY_MINUS);} unaryExpression
-	|	PLUS^  {#PLUS.setType(UNARY_PLUS);} unaryExpression
-	|	unaryExpressionNotPlusMinus
-	;
-
-unaryExpressionNotPlusMinus
-	:	BNOT^ unaryExpression
-	|	LNOT^ unaryExpression
-
-	|	(	// subrule allows option to shut off warnings
-			options {
-				// "(int" ambig with postfixExpr due to lack of sequence
-				// info in linear approximate LL(k).  It's ok.  Shut up.
-				generateAmbigWarnings=false;
-			}
-		:	// If typecast is built in type, must be numeric operand
-			// Also, no reason to backtrack if type keyword like int, float...
-			lpb:LPAREN^ {#lpb.setType(TYPECAST);} builtInTypeSpec[true] RPAREN!
-			unaryExpression
-
-			// Have to backtrack to see if operator follows.  If no operator
-			// follows, it's a typecast.  No semantic checking needed to parse.
-			// if it _looks_ like a cast, it _is_ a cast; else it's a "(expr)"
-		|	(LPAREN classTypeSpec[true] RPAREN unaryExpressionNotPlusMinus)=>
-			lp:LPAREN^ {#lp.setType(TYPECAST);} classTypeSpec[true] RPAREN!
-			unaryExpressionNotPlusMinus
-
-		|	postfixExpression
-		)
-	;
-
-// qualified names, array expressions, method invocation, post inc/dec
-postfixExpression
-	:	primaryExpression // start with a primary
-
-		(	// qualified id (id.id.id.id...) -- build the name
-			DOT^ ( IDENT
-				| "this"
-				| "class"
-				| newExpression
-				| "super" LPAREN ( expressionList )? RPAREN
-				)
-			// the above line needs a semantic check to make sure "class"
-			//   is the _last_ qualifier.
-
-			// allow ClassName[].class
-		|	( lbc:LBRACK^ {#lbc.setType(ARRAY_DECLARATOR);} RBRACK! )+
-			DOT^ "class"
-
-			// an array indexing operation
-		|	lb:LBRACK^ {#lb.setType(INDEX_OP);} expression RBRACK!
-
-			// method invocation
-			// The next line is not strictly proper; it allows x(3)(4) or
-			//  x[2](4) which are not valid in Java.  If this grammar were used
-			//  to validate a Java program a semantic check would be needed, or
-			//   this rule would get really ugly...
-		|	lp:LPAREN^ {#lp.setType(METHOD_CALL);}
-				argList
-			RPAREN!
-		)*
-
-		// possibly add on a post-increment or post-decrement.
-		// allows INC/DEC on too much, but semantics can check
-		(	in:INC^ {#in.setType(POST_INC);}
-	 	|	de:DEC^ {#de.setType(POST_DEC);}
-		|	// nothing
-		)
-
-		// look for int.class and int[].class
-	|	builtInType 
-		( lbt:LBRACK^ {#lbt.setType(ARRAY_DECLARATOR);} RBRACK! )*
-		DOT^ "class"
-	;
-
-// the basic element of an expression
-primaryExpression
-	:	IDENT
-	|	newExpression
-	|	constant
-	|	"super"
-	|	"true"
-	|	"false"
-	|	"this"
-	|	"null"
-	|	LPAREN! assignmentExpression RPAREN!
-	;
-
-/** object instantiation.
- *  Trees are built as illustrated by the following input/tree pairs:
- *  
- *  new T()
- *  
- *  new
- *   |
- *   T --  ELIST
- *           |
- *          arg1 -- arg2 -- .. -- argn
- *  
- *  new int[]
- *
- *  new
- *   |
- *  int -- ARRAY_DECLARATOR
- *  
- *  new int[] {1,2}
- *
- *  new
- *   |
- *  int -- ARRAY_DECLARATOR -- ARRAY_INIT
- *                                  |
- *                                EXPR -- EXPR
- *                                  |      |
- *                                  1      2
- *  
- *  new int[3]
- *  new
- *   |
- *  int -- ARRAY_DECLARATOR
- *                |
- *              EXPR
- *                |
- *                3
- *  
- *  new int[1][2]
- *  
- *  new
- *   |
- *  int -- ARRAY_DECLARATOR
- *               |
- *         ARRAY_DECLARATOR -- EXPR
- *               |              |
- *             EXPR             1
- *               |
- *               2
- *  
- */
-newExpression
-	:	"new"^ type
-		(	LPAREN! argList RPAREN! (classBlock)?
-
-			//java 1.1
-			// Note: This will allow bad constructs like
-			//    new int[4][][3] {exp,exp}.
-			//    There needs to be a semantic check here...
-			// to make sure:
-			//   a) [ expr ] and [ ] are not mixed
-			//   b) [ expr ] and an init are not used together
-
-		|	newArrayDeclarator (arrayInitializer)?
-		)
-	;
-
-argList
-	:	(	expressionList
-		|	/*nothing*/
-			{#argList = #[ELIST,"ELIST"];}
-		)
-	;
-
-newArrayDeclarator
-	:	(
-			// CONFLICT:
-			// newExpression is a primaryExpression which can be
-			// followed by an array index reference.  This is ok,
-			// as the generated code will stay in this loop as
-			// long as it sees an LBRACK (proper behavior)
-			options {
-				warnWhenFollowAmbig = false;
-			}
-		:
-			lb:LBRACK^ {#lb.setType(ARRAY_DECLARATOR);}
-				(expression)?
-			RBRACK!
-		)+
-	;
-
-constant
-	:	NUM_INT
-	|	CHAR_LITERAL
-	|	STRING_LITERAL
-	|	NUM_FLOAT
-	;
-
-
-//----------------------------------------------------------------------------
-// The Java scanner
-//----------------------------------------------------------------------------
-class JavaLexer extends Lexer;
-
-options {
-	exportVocab=Java;      // call the vocabulary "Java"
-	testLiterals=false;    // don't automatically test for literals
-	k=4;                   // four characters of lookahead
-}
-
-
-
-// OPERATORS
-QUESTION		:	'?'		;
-LPAREN			:	'('		;
-RPAREN			:	')'		;
-LBRACK			:	'['		;
-RBRACK			:	']'		;
-LCURLY			:	'{'		;
-RCURLY			:	'}'		;
-COLON			:	':'		;
-COMMA			:	','		;
-//DOT			:	'.'		;
-ASSIGN			:	'='		;
-EQUAL			:	"=="	;
-LNOT			:	'!'		;
-BNOT			:	'~'		;
-NOT_EQUAL		:	"!="	;
-DIV				:	'/'		;
-DIV_ASSIGN		:	"/="	;
-PLUS			:	'+'		;
-PLUS_ASSIGN		:	"+="	;
-INC				:	"++"	;
-MINUS			:	'-'		;
-MINUS_ASSIGN	:	"-="	;
-DEC				:	"--"	;
-STAR			:	'*'		;
-STAR_ASSIGN		:	"*="	;
-MOD				:	'%'		;
-MOD_ASSIGN		:	"%="	;
-SR				:	">>"	;
-SR_ASSIGN		:	">>="	;
-BSR				:	">>>"	;
-BSR_ASSIGN		:	">>>="	;
-GE				:	">="	;
-GT				:	">"		;
-SL				:	"<<"	;
-SL_ASSIGN		:	"<<="	;
-LE				:	"<="	;
-LT				:	'<'		;
-BXOR			:	'^'		;
-BXOR_ASSIGN		:	"^="	;
-BOR				:	'|'		;
-BOR_ASSIGN		:	"|="	;
-LOR				:	"||"	;
-BAND			:	'&'		;
-BAND_ASSIGN		:	"&="	;
-LAND			:	"&&"	;
-SEMI			:	';'		;
-
-
-// Whitespace -- ignored
-WS	:	(	' '
-		|	'\t'
-		|	'\f'
-		// handle newlines
-		|	(	"\r\n"  // Evil DOS
-			|	'\r'    // Macintosh
-			|	'\n'    // Unix (the right way)
-			)
-			{ newline(); }
-		)
-		{ _ttype = Token.SKIP; }
-	;
-
-// Single-line comments
-SL_COMMENT
-	:	"//"
-		(~('\n'|'\r'))* ('\n'|'\r'('\n')?)
-		{$setType(Token.SKIP); newline();}
-	;
-
-// multiple-line comments
-ML_COMMENT
-	:	"/*"
-		(	/*	'\r' '\n' can be matched in one alternative or by matching
-				'\r' in one iteration and '\n' in another.  I am trying to
-				handle any flavor of newline that comes in, but the language
-				that allows both "\r\n" and "\r" and "\n" to all be valid
-				newline is ambiguous.  Consequently, the resulting grammar
-				must be ambiguous.  I'm shutting this warning off.
-			 */
-			options {
-				generateAmbigWarnings=false;
-			}
-		:
-			{ LA(2)!='/' }? '*'
-		|	'\r' '\n'		{newline();}
-		|	'\r'			{newline();}
-		|	'\n'			{newline();}
-		|	~('*'|'\n'|'\r')
-		)*
-		"*/"
-		{$setType(Token.SKIP);}
-	;
-
-
-// character literals
-CHAR_LITERAL
-	:	'\'' ( ESC | ~'\'' ) '\''
-	;
-
-// string literals
-STRING_LITERAL
-	:	'"' (ESC|~('"'|'\\'))* '"'
-	;
-
-
-// escape sequence -- note that this is protected; it can only be called
-//   from another lexer rule -- it will not ever directly return a token to
-//   the parser
-// There are various ambiguities hushed in this rule.  The optional
-// '0'...'9' digit matches should be matched here rather than letting
-// them go back to STRING_LITERAL to be matched.  ANTLR does the
-// right thing by matching immediately; hence, it's ok to shut off
-// the FOLLOW ambig warnings.
-protected
-ESC
-	:	'\\'
-		(	'n'
-		|	'r'
-		|	't'
-		|	'b'
-		|	'f'
-		|	'"'
-		|	'\''
-		|	'\\'
-		|	('u')+ HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT 
-		|	('0'..'3')
-			(
-				options {
-					warnWhenFollowAmbig = false;
-				}
-			:	('0'..'7')
-				(	
-					options {
-						warnWhenFollowAmbig = false;
-					}
-				:	'0'..'7'
-				)?
-			)?
-		|	('4'..'7')
-			(
-				options {
-					warnWhenFollowAmbig = false;
-				}
-			:	('0'..'9')
-			)?
-		)
-	;
-
-
-// hexadecimal digit (again, note it's protected!)
-protected
-HEX_DIGIT
-	:	('0'..'9'|'A'..'F'|'a'..'f')
-	;
-
-
-// a dummy rule to force vocabulary to be all characters (except special
-//   ones that ANTLR uses internally (0 to 2)
-protected
-VOCAB
-	:	'\3'..'\377'
-	;
-
-
-// an identifier.  Note that testLiterals is set to true!  This means
-// that after we match the rule, we look in the literals table to see
-// if it's a literal or really an identifer
-IDENT
-	options {testLiterals=true;}
-	:	('a'..'z'|'A'..'Z'|'_'|'$') ('a'..'z'|'A'..'Z'|'_'|'0'..'9'|'$')*
-	;
-
-
-// a numeric literal
-NUM_INT
-	{boolean isDecimal=false;}
-	:	'.' {_ttype = DOT;}
-			(('0'..'9')+ (EXPONENT)? (FLOAT_SUFFIX)? { _ttype = NUM_FLOAT; })?
-	|	(	'0' {isDecimal = true;} // special case for just '0'
-			(	('x'|'X')
-				(											// hex
-					// the 'e'|'E' and float suffix stuff look
-					// like hex digits, hence the (...)+ doesn't
-					// know when to stop: ambig.  ANTLR resolves
-					// it correctly by matching immediately.  It
-					// is therefor ok to hush warning.
-					options {
-						warnWhenFollowAmbig=false;
-					}
-				:	HEX_DIGIT
-				)+
-			|	('0'..'7')+									// octal
-			)?
-		|	('1'..'9') ('0'..'9')*  {isDecimal=true;}		// non-zero decimal
-		)
-		(	('l'|'L')
-		
-		// only check to see if it's a float if looks like decimal so far
-		|	{isDecimal}?
-			(	'.' ('0'..'9')* (EXPONENT)? (FLOAT_SUFFIX)?
-			|	EXPONENT (FLOAT_SUFFIX)?
-			|	FLOAT_SUFFIX
-			)
-			{ _ttype = NUM_FLOAT; }
-		)?
-	;
-
-
-// a couple protected methods to assist in matching floating point numbers
-protected
-EXPONENT
-	:	('e'|'E') ('+'|'-')? ('0'..'9')+
-	;
-
-
-protected
-FLOAT_SUFFIX
-	:	'f'|'F'|'d'|'D'
-	;
-
diff --git a/src/etc/testcases/taskdefs/optional/antlr/java.tree.g b/src/etc/testcases/taskdefs/optional/antlr/java.tree.g
deleted file mode 100644
index 5cb6d88..0000000
--- a/src/etc/testcases/taskdefs/optional/antlr/java.tree.g
+++ /dev/null
@@ -1,314 +0,0 @@
-/** Java 1.2 AST Recognizer Grammar
- *
- * Author:
- *	Terence Parr	parrt@jguru.com
- *
- * Version tracking now done with following ID:
- *
- * $Id$
- *
- * This grammar is in the PUBLIC DOMAIN
- *
- * BUGS
- */
-class JavaTreeParser extends TreeParser;
-
-options {
-	importVocab = Java;
-}
-
-compilationUnit
-	:	(packageDefinition)?
-		(importDefinition)*
-		(typeDefinition)*
-	;
-
-packageDefinition
-	:	#( PACKAGE_DEF identifier )
-	;
-
-importDefinition
-	:	#( IMPORT identifierStar )
-	;
-
-typeDefinition
-	:	#(CLASS_DEF modifiers IDENT extendsClause implementsClause objBlock )
-	|	#(INTERFACE_DEF modifiers IDENT extendsClause interfaceBlock )
-	;
-
-typeSpec
-	:	#(TYPE typeSpecArray)
-	;
-
-typeSpecArray
-	:	#( ARRAY_DECLARATOR typeSpecArray )
-	|	type
-	;
-
-type:	identifier
-	|	builtInType
-	;
-
-builtInType
-    :   "void"
-    |   "boolean"
-    |   "byte"
-    |   "char"
-    |   "short"
-    |   "int"
-    |   "float"
-    |   "long"
-    |   "double"
-    ;
-
-modifiers
-	:	#( MODIFIERS (modifier)* )
-	;
-
-modifier
-    :   "private"
-    |   "public"
-    |   "protected"
-    |   "static"
-    |   "transient"
-    |   "final"
-    |   "abstract"
-    |   "native"
-    |   "threadsafe"
-    |   "synchronized"
-    |   "const"
-    |   "volatile"
-    ;
-
-extendsClause
-	:	#(EXTENDS_CLAUSE (identifier)* )
-	;
-
-implementsClause
-	:	#(IMPLEMENTS_CLAUSE (identifier)* )
-	;
-
-
-interfaceBlock
-	:	#(	OBJBLOCK
-			(	methodDecl
-			|	variableDef
-			)*
-		)
-	;
-	
-objBlock
-	:	#(	OBJBLOCK
-			(	ctorDef
-			|	methodDef
-			|	variableDef
-			|	typeDefinition
-			|	#(STATIC_INIT slist)
-			|	#(INSTANCE_INIT slist)
-			)*
-		)
-	;
-
-ctorDef
-	:	#(CTOR_DEF modifiers methodHead slist)
-	;
-
-methodDecl
-	:	#(METHOD_DEF modifiers typeSpec methodHead)
-	;
-
-methodDef
-	:	#(METHOD_DEF modifiers typeSpec methodHead (slist)?)
-	;
-
-variableDef
-	:	#(VARIABLE_DEF modifiers typeSpec variableDeclarator varInitializer)
-	;
-
-parameterDef
-	:	#(PARAMETER_DEF modifiers typeSpec IDENT )
-	;
-
-objectinitializer
-	:	#(INSTANCE_INIT slist)
-	;
-
-variableDeclarator
-	:	IDENT
-	|	LBRACK variableDeclarator
-	;
-
-varInitializer
-	:	#(ASSIGN initializer)
-	|
-	;
-
-initializer
-	:	expression
-	|	arrayInitializer
-	;
-
-arrayInitializer
-	:	#(ARRAY_INIT (initializer)*)
-	;
-
-methodHead
-	:	IDENT #( PARAMETERS (parameterDef)* ) (throwsClause)?
-	;
-
-throwsClause
-	:	#( "throws" (identifier)* )
-	;
-
-identifier
-	:	IDENT
-	|	#( DOT identifier IDENT )
-	;
-
-identifierStar
-	:	IDENT
-	|	#( DOT identifier (STAR|IDENT) )
-	;
-
-slist
-	:	#( SLIST (stat)* )
-	;
-
-stat:	typeDefinition
-	|	variableDef
-	|	expression
-	|	#(LABELED_STAT IDENT stat)
-	|	#("if" expression stat (stat)? )
-	|	#(	"for"
-			#(FOR_INIT (variableDef | elist)?)
-			#(FOR_CONDITION (expression)?)
-			#(FOR_ITERATOR (elist)?)
-			stat
-		)
-	|	#("while" expression stat)
-	|	#("do" stat expression)
-	|	#("break" (IDENT)? )
-	|	#("continue" (IDENT)? )
-	|	#("return" (expression)? )
-	|	#("switch" expression (caseGroup)*)
-	|	#("throw" expression)
-	|	#("synchronized" expression stat)
-	|	tryBlock
-	|	slist // nested SLIST
-	|	EMPTY_STAT
-	;
-
-caseGroup
-	:	#(CASE_GROUP (#("case" expression) | "default")+ slist)
-	;
-
-tryBlock
-	:	#( "try" slist (handler)* (#("finally" slist))? )
-	;
-
-handler
-	:	#( "catch" parameterDef slist )
-	;
-
-elist
-	:	#( ELIST (expression)* )
-	;
-
-expression
-	:	#(EXPR expr)
-	;
-
-expr:	#(QUESTION expr expr expr)	// trinary operator
-	|	#(ASSIGN expr expr)			// binary operators...
-	|	#(PLUS_ASSIGN expr expr)
-	|	#(MINUS_ASSIGN expr expr)
-	|	#(STAR_ASSIGN expr expr)
-	|	#(DIV_ASSIGN expr expr)
-	|	#(MOD_ASSIGN expr expr)
-	|	#(SR_ASSIGN expr expr)
-	|	#(BSR_ASSIGN expr expr)
-	|	#(SL_ASSIGN expr expr)
-	|	#(BAND_ASSIGN expr expr)
-	|	#(BXOR_ASSIGN expr expr)
-	|	#(BOR_ASSIGN expr expr)
-	|	#(LOR expr expr)
-	|	#(LAND expr expr)
-	|	#(BOR expr expr)
-	|	#(BXOR expr expr)
-	|	#(BAND expr expr)
-	|	#(NOT_EQUAL expr expr)
-	|	#(EQUAL expr expr)
-	|	#(LT expr expr)
-	|	#(GT expr expr)
-	|	#(LE expr expr)
-	|	#(GE expr expr)
-	|	#(SL expr expr)
-	|	#(SR expr expr)
-	|	#(BSR expr expr)
-	|	#(PLUS expr expr)
-	|	#(MINUS expr expr)
-	|	#(DIV expr expr)
-	|	#(MOD expr expr)
-	|	#(STAR expr expr)
-	|	#(INC expr)
-	|	#(DEC expr)
-	|	#(POST_INC expr)
-	|	#(POST_DEC expr)
-	|	#(BNOT expr)
-	|	#(LNOT expr)
-	|	#("instanceof" expr expr)
-	|	#(UNARY_MINUS expr)
-	|	#(UNARY_PLUS expr)
-	|	primaryExpression
-	;
-
-primaryExpression
-    :   IDENT
-    |   #(	DOT
-			(	expr
-				(	IDENT
-				|	arrayIndex
-				|	"this"
-				|	"class"
-				|	#( "new" IDENT elist )
-				)
-			|	#(ARRAY_DECLARATOR type)
-			|	builtInType ("class")?
-			)
-		)
-	|	arrayIndex
-	|	#(METHOD_CALL primaryExpression elist)
-	|	#(TYPECAST typeSpec expr)
-	|   newExpression
-	|   constant
-    |   "super"
-    |   "true"
-    |   "false"
-    |   "this"
-    |   "null"
-	|	typeSpec // type name used with instanceof
-	;
-
-arrayIndex
-	:	#(INDEX_OP primaryExpression expression)
-	;
-
-constant
-    :   NUM_INT
-    |   CHAR_LITERAL
-    |   STRING_LITERAL
-    |   NUM_FLOAT
-    ;
-
-newExpression
-	:	#(	"new" type
-			(	newArrayDeclarator (arrayInitializer)?
-			|	elist
-			)
-		)
-			
-	;
-
-newArrayDeclarator
-	:	#( ARRAY_DECLARATOR (newArrayDeclarator)? (expression)? )
-	;
diff --git a/src/etc/testcases/taskdefs/optional/depend/depend.xml b/src/etc/testcases/taskdefs/optional/depend/depend.xml
deleted file mode 100644
index 11430da..0000000
--- a/src/etc/testcases/taskdefs/optional/depend/depend.xml
+++ /dev/null
@@ -1,155 +0,0 @@
-<?xml version="1.0"?>
-
-<project name="depend" basedir="." default="help">
-  <property name="src1.dir" value="src1"/>
-  <property name="src2.dir" value="src2"/>
-  <property name="src3.dir" value="src3"/>
-  <property name="src4.dir" value="src4"/>
-  <property name="src5.dir" value="src5"/>
-  
-  <property name="tempsrc.dir" value="working"/>
-  <property name="cache.dir" value="working"/>
-  <property name="classes.dir" value="classes"/>
-  <target name="help">
-    <echo>This buildfile is used as part of Ant's test suite.</echo>
-  </target>
-
-  <target name="basesetup" depends="clean">
-    <mkdir dir="${tempsrc.dir}"/>
-  </target>
-  
-  <target name="src1setup" depends="basesetup">
-    <copy todir="${tempsrc.dir}">
-      <fileset dir="${src1.dir}"/>
-    </copy>
-  </target>
-  
-  <target name="src2setup" depends="basesetup">
-    <copy todir="${tempsrc.dir}">
-      <fileset dir="${src2.dir}"/>
-    </copy>
-  </target>
-
-  <target name="src3setup" depends="basesetup">
-    <copy todir="${tempsrc.dir}">
-      <fileset dir="${src3.dir}"/>
-    </copy>
-  </target>
-
-  <target name="src4setup" depends="basesetup">
-    <copy todir="${tempsrc.dir}">
-      <fileset dir="${src4.dir}"/>
-    </copy>
-  </target>
-
-  <target name="src5setup" depends="basesetup">
-    <copy todir="${tempsrc.dir}">
-      <fileset dir="${src5.dir}"/>
-    </copy>
-  </target>
-
-  <target name="compile">
-    <mkdir dir="${classes.dir}"/>
-    <javac srcdir="${tempsrc.dir}" destdir="${classes.dir}"/>
-  </target>
-  
-  <target name="clean">
-    <delete dir="${classes.dir}"/>
-    <delete dir="${tempsrc.dir}"/>
-  </target>
-
-  <target name="testdirect" depends="src1setup, compile">
-    <sleep seconds="3"/>
-    <delete file="${tempsrc.dir}/C.java"/>
-    <copy file="${src1.dir}/C.java" tofile="${tempsrc.dir}/C.java"/>
-    <depend srcdir="${tempsrc.dir}" destdir="${classes.dir}"/>
-    <fileset id="result" dir="${classes.dir}"/>
-  </target>
-
-  <target name="testclosure" depends="src1setup, compile">
-    <sleep seconds="3"/>
-    <delete file="${tempsrc.dir}/C.java"/>
-    <copy file="${src1.dir}/C.java" tofile="${tempsrc.dir}/C.java"/>
-    <depend srcdir="${tempsrc.dir}" destdir="${classes.dir}" closure="yes"/>
-    <fileset id="result" dir="${classes.dir}"/>
-  </target>
-
-  <target name="testbasicset" depends="src1setup, compile">
-    <classfileset id="result" dir="${classes.dir}" rootclass="A"/>
-  </target>
-
-  <target name="testsmallset" depends="src1setup, compile">
-    <classfileset id="result" dir="${classes.dir}" rootclass="B"/>
-  </target>
-
-  <target name="testcomboset" depends="src1setup, compile">
-    <classfileset id="result" dir="${classes.dir}" rootclass="B">
-      <include name="**/C.class"/>
-    </classfileset>
-  </target>
-  
-  <target name="testbyreference" depends="src1setup, compile">
-    <classfileset id="classSet" dir="${classes.dir}" rootclass="A">
-      <include name="**/C.class"/>
-    </classfileset>
-    <jar destfile="${tempsrc.dir}/test.jar">
-      <fileset refid="classSet"/>
-    </jar>
-  </target>
-  
-  <target name="testinner" depends="src2setup, compile">
-    <sleep seconds="3"/>
-    <delete file="${tempsrc.dir}/B.java"/>
-    <copy file="${src2.dir}/B.java" tofile="${tempsrc.dir}/B.java"/>
-    <depend srcdir="${tempsrc.dir}" destdir="${classes.dir}" closure="yes"/>
-    <fileset id="result" dir="${classes.dir}"/>
-  </target>
-
-  <target name="testinnerinner" depends="src3setup, compile">
-    <sleep seconds="3"/>
-    <delete file="${tempsrc.dir}/B.java"/>
-    <copy file="${src3.dir}/B.java" tofile="${tempsrc.dir}/B.java"/>
-    <depend srcdir="${tempsrc.dir}" destdir="${classes.dir}" closure="yes"/>
-    <fileset id="result" dir="${classes.dir}"/>
-  </target>
-  
-  <target name="testnosource" depends="src1setup, compile">
-    <depend destdir="${classes.dir}" closure="yes"/>
-  </target>
-
-  <target name="testemptysource" depends="src1setup, compile">
-    <depend srcdir="" destdir="${classes.dir}" closure="yes"/>
-  </target>
-
-  <target name="testinnerclosure" depends="src4setup">
-    <mkdir dir="${classes.dir}"/>
-    <path id="path.compile">
-        <pathelement location="${classes.dir}"/>
-    </path>
-
-    <javac srcdir="${tempsrc.dir}" destdir="${classes.dir}"
-           classpathref="path.compile"/>
-    
-    <sleep seconds="3"/>
-    <depend srcdir="${tempsrc.dir}" destdir="${classes.dir}" 
-            closure="yes" dump="yes"
-            classpathref="path.compile"/>
-           
-    <fileset id="result" dir="${classes.dir}"/>
-  </target>
-  
-  <target name="testcache" depends="src1setup, compile">
-    <depend cache="${cache.dir}" srcdir="${tempsrc.dir}" 
-            destdir="${classes.dir}" closure="yes"/>
-    <depend cache="${cache.dir}" srcdir="${tempsrc.dir}" 
-            destdir="${classes.dir}" closure="yes"/>
-  </target>
-
-  <target name="testnonpublic" depends="src5setup, compile">
-    <sleep seconds="3"/>
-    <delete file="${tempsrc.dir}/B.java"/>
-    <copy file="${src2.dir}/B.java" tofile="${tempsrc.dir}/B.java"/>
-    <depend srcdir="${tempsrc.dir}" destdir="${classes.dir}" closure="yes"/>
-    <fileset id="result" dir="${classes.dir}"/>
-  </target>
-</project>
diff --git a/src/etc/testcases/taskdefs/optional/depend/src1/A.java b/src/etc/testcases/taskdefs/optional/depend/src1/A.java
deleted file mode 100644
index 917673a..0000000
--- a/src/etc/testcases/taskdefs/optional/depend/src1/A.java
+++ /dev/null
@@ -1,4 +0,0 @@
-public class A extends B {
-    private D d = new D();
-}
-
diff --git a/src/etc/testcases/taskdefs/optional/depend/src1/B.java b/src/etc/testcases/taskdefs/optional/depend/src1/B.java
deleted file mode 100644
index cdad75e..0000000
--- a/src/etc/testcases/taskdefs/optional/depend/src1/B.java
+++ /dev/null
@@ -1,3 +0,0 @@
-public class B extends C {
-}
-
diff --git a/src/etc/testcases/taskdefs/optional/depend/src1/C.java b/src/etc/testcases/taskdefs/optional/depend/src1/C.java
deleted file mode 100644
index 90f60bf..0000000
--- a/src/etc/testcases/taskdefs/optional/depend/src1/C.java
+++ /dev/null
@@ -1,3 +0,0 @@
-public class C {
-}
-
diff --git a/src/etc/testcases/taskdefs/optional/depend/src1/D.java b/src/etc/testcases/taskdefs/optional/depend/src1/D.java
deleted file mode 100644
index 3bfc14f..0000000
--- a/src/etc/testcases/taskdefs/optional/depend/src1/D.java
+++ /dev/null
@@ -1,3 +0,0 @@
-public class D {
-}
-
diff --git a/src/etc/testcases/taskdefs/optional/depend/src2/A.java b/src/etc/testcases/taskdefs/optional/depend/src2/A.java
deleted file mode 100644
index 9e635d9..0000000
--- a/src/etc/testcases/taskdefs/optional/depend/src2/A.java
+++ /dev/null
@@ -1,5 +0,0 @@
-public class A {
-    static private class Inner extends B {
-    }
-}
-
diff --git a/src/etc/testcases/taskdefs/optional/depend/src2/B.java b/src/etc/testcases/taskdefs/optional/depend/src2/B.java
deleted file mode 100644
index b4e908f..0000000
--- a/src/etc/testcases/taskdefs/optional/depend/src2/B.java
+++ /dev/null
@@ -1,3 +0,0 @@
-public class B {
-}
-
diff --git a/src/etc/testcases/taskdefs/optional/depend/src3/A.java b/src/etc/testcases/taskdefs/optional/depend/src3/A.java
deleted file mode 100644
index 74e4742..0000000
--- a/src/etc/testcases/taskdefs/optional/depend/src3/A.java
+++ /dev/null
@@ -1,7 +0,0 @@
-public class A {
-    static private class Inner {
-        static private class Inner2 extends B {
-        }
-    }
-}
-
diff --git a/src/etc/testcases/taskdefs/optional/depend/src3/B.java b/src/etc/testcases/taskdefs/optional/depend/src3/B.java
deleted file mode 100644
index b4e908f..0000000
--- a/src/etc/testcases/taskdefs/optional/depend/src3/B.java
+++ /dev/null
@@ -1,3 +0,0 @@
-public class B {
-}
-
diff --git a/src/etc/testcases/taskdefs/optional/depend/src4/test/Outer.java b/src/etc/testcases/taskdefs/optional/depend/src4/test/Outer.java
deleted file mode 100644
index a352716..0000000
--- a/src/etc/testcases/taskdefs/optional/depend/src4/test/Outer.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package test;
-
-public class Outer {
-    static class Inner {
-    }
-}
-
diff --git a/src/etc/testcases/taskdefs/optional/depend/src5/A.java b/src/etc/testcases/taskdefs/optional/depend/src5/A.java
deleted file mode 100644
index b8f9180..0000000
--- a/src/etc/testcases/taskdefs/optional/depend/src5/A.java
+++ /dev/null
@@ -1,6 +0,0 @@
-public class A {
-    APrivate dependency = new APrivate();
-}
-
-class APrivate extends B {
-}
diff --git a/src/etc/testcases/taskdefs/optional/depend/src5/B.java b/src/etc/testcases/taskdefs/optional/depend/src5/B.java
deleted file mode 100644
index b4e908f..0000000
--- a/src/etc/testcases/taskdefs/optional/depend/src5/B.java
+++ /dev/null
@@ -1,3 +0,0 @@
-public class B {
-}
-
diff --git a/src/etc/testcases/taskdefs/optional/echoproperties.xml b/src/etc/testcases/taskdefs/optional/echoproperties.xml
deleted file mode 100644
index 0000bc8..0000000
--- a/src/etc/testcases/taskdefs/optional/echoproperties.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-<project name="test" default="def" basedir=".">
-
-  <target name="def">
-  </target>
-
-  <target name="setup">
-    <property name="a.set" value="true" />
-    <property name="b.set" value="false" />
-  </target>
-
-  <target name="testEchoToLog" depends="setup">
-    <echoproperties />
-  </target>
-
-  <target name="testEchoToBadFile" depends="setup">
-    <echoproperties destfile="." />
-  </target>
-
-  <target name="testEchoToBadFileFail" depends="setup">
-    <echoproperties destfile="." failonerror="yes" />
-  </target>
-
-  <target name="testEchoToBadFileNoFail" depends="setup">
-    <echoproperties destfile="." failonerror="no" />
-  </target>
-
-  <target name="testEchoToGoodFile" depends="setup">
-    <echoproperties destfile="test.properties" />
-  </target>
-
-  <target name="testEchoToGoodFileFail" depends="setup">
-    <echoproperties destfile="test.properties" failonerror="yes" />
-  </target>
-
-  <target name="testEchoToGoodFileNoFail" depends="setup">
-    <echoproperties destfile="test.properties" failonerror="no" />
-  </target>
-
-  <target name="testEchoPrefix" depends="setup">
-    <echoproperties destfile="test-prefix.properties" prefix="a." />
-  </target>
-
-  <target name="cleanup">
-    <delete file="test.properties" failonerror="no" />
-    <delete file="test-prefix.properties" failonerror="no" />
-  </target>
-
-</project>
-
diff --git a/src/etc/testcases/taskdefs/optional/jsp/1nvalid-classname.jsp b/src/etc/testcases/taskdefs/optional/jsp/1nvalid-classname.jsp
deleted file mode 100644
index c8ea87d..0000000
--- a/src/etc/testcases/taskdefs/optional/jsp/1nvalid-classname.jsp
+++ /dev/null
@@ -1,9 +0,0 @@
-<%@ page language="java" %>
-<html>
-<head/>
-<body>
-
-my name is <%= this.getClass().getName()  %>
-
-</body>
-</html>
diff --git a/src/etc/testcases/taskdefs/optional/jsp/WEB-INF/web.xml b/src/etc/testcases/taskdefs/optional/jsp/WEB-INF/web.xml
deleted file mode 100644
index 04b1c4b..0000000
--- a/src/etc/testcases/taskdefs/optional/jsp/WEB-INF/web.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
-  "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
-<web-app/>
diff --git a/src/etc/testcases/taskdefs/optional/jsp/default.jsp b/src/etc/testcases/taskdefs/optional/jsp/default.jsp
deleted file mode 100644
index 14851f0..0000000
--- a/src/etc/testcases/taskdefs/optional/jsp/default.jsp
+++ /dev/null
@@ -1,9 +0,0 @@
-<%@ page language="java" %>
-<html>
-<head/>
-<body>
-
-It is now <%= System.currentTimeMillis() %>
-
-</body>
-</html>
diff --git a/src/etc/testcases/taskdefs/optional/jsp/missing_tld.jsp b/src/etc/testcases/taskdefs/optional/jsp/missing_tld.jsp
deleted file mode 100644
index 9df4c5a..0000000
--- a/src/etc/testcases/taskdefs/optional/jsp/missing_tld.jsp
+++ /dev/null
@@ -1,16 +0,0 @@
-<%@ page language="java" %>
-<%@ taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean" %>
-<%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %>
-<%@ taglib uri="/WEB-INF/tlds/struts-template.tld" prefix="template" %>
-<html:html locale="true">
-<head>
-<title>shouldnt compile</title>
-<html:base/>
-</head>
-<body>
-
-This page should not compile because refers to TLDs that arent around.
-
-</body>
-
-</html:html>
diff --git a/src/etc/testcases/taskdefs/optional/jsp/simple.jsp b/src/etc/testcases/taskdefs/optional/jsp/simple.jsp
deleted file mode 100644
index 14851f0..0000000
--- a/src/etc/testcases/taskdefs/optional/jsp/simple.jsp
+++ /dev/null
@@ -1,9 +0,0 @@
-<%@ page language="java" %>
-<html>
-<head/>
-<body>
-
-It is now <%= System.currentTimeMillis() %>
-
-</body>
-</html>
diff --git a/src/etc/testcases/taskdefs/optional/jsp/uriroot.jsp b/src/etc/testcases/taskdefs/optional/jsp/uriroot.jsp
deleted file mode 100644
index 14851f0..0000000
--- a/src/etc/testcases/taskdefs/optional/jsp/uriroot.jsp
+++ /dev/null
@@ -1,9 +0,0 @@
-<%@ page language="java" %>
-<html>
-<head/>
-<body>
-
-It is now <%= System.currentTimeMillis() %>
-
-</body>
-</html>
diff --git a/src/etc/testcases/taskdefs/optional/jsp/xml.jsp b/src/etc/testcases/taskdefs/optional/jsp/xml.jsp
deleted file mode 100644
index a92896d..0000000
--- a/src/etc/testcases/taskdefs/optional/jsp/xml.jsp
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0" ?>
-<!-- :mode=xml:indentSize=2 -->
-<!-- note the lack of a language setting here. crimson whined when ISO-8859-1 was set,
-	 that it thought it was loading a file of type ISO_8859_1 and
-	 so there was a mismatch, even though the mismatch is only 
-	 between hyphen types -->
-<jsp:root
-  xmlns:jsp="http://java.sun.com/JSP/Page"
-  version="1.2"
-  >
-<jsp:directive.page language="java" />
-<jsp:directive.page contentType="application/xml" />
-<timestamp>
-<jsp:expression>System.currentTimeMillis()</jsp:expression>
-</timestamp>
-</jsp:root>
diff --git a/src/etc/testcases/taskdefs/optional/jspc.xml b/src/etc/testcases/taskdefs/optional/jspc.xml
deleted file mode 100644
index 0bd5882..0000000
--- a/src/etc/testcases/taskdefs/optional/jspc.xml
+++ /dev/null
@@ -1,88 +0,0 @@
-<?xml version="1.0"?>
-
-<project name="jspc-test" default="main" basedir=".">
-
-   <target name="main" depends="testSimple">
-   </target>
-
-    <target name="init">
-        <property name="jsp.dir" location="jsp"/>
-        <property name="jsp.output.dir" location="${jsp.dir}/java"/>
-        <property name="jsp.verbosity" value="3"/>
-        <mkdir dir="${jsp.output.dir}"/>
-    </target>
-    
-    <target name="cleanup">
-        <delete dir="${jsp.output.dir}"/>   
-    </target>
-   
-   <!-- this should fail -->
-   <!-- it should not create an output file, but it does, which needs
-        cleanup -->
-   <target name="testNoTld" depends="init">
-        <jspc
-           destdir="${jsp.output.dir}"
-           srcdir="${jsp.dir}"
-           verbose="${jsp.verbosity}">
-            <include
-               name="missing_tld.jsp"/>
-        </jspc>
-   </target>
-
-   <!-- this should compile to simple.java -->
-   <target name="testSimple" depends="init">
-        <jspc
-           destdir="${jsp.output.dir}"
-           srcdir="${jsp.dir}"
-           verbose="${jsp.verbosity}">
-            <include
-               name="simple.jsp"/>
-        </jspc>
-   </target>   
-
-    <!-- this should compile to uriroot.java -->
-    <target name="testUriroot" depends="init">
-        <jspc
-           destdir="${jsp.output.dir}"
-           uriroot="${jsp.dir}"
-           srcdir="${jsp.dir}"
-           verbose="${jsp.verbosity}">
-            <include
-                name="uriroot.jsp"/>
-        </jspc>
-    </target> 
-   
-   <!-- this should compile an xml format jsp page to xml.java -->
-    <target name="testXml" depends="init">
-      <jspc
-        destdir="${jsp.output.dir}"
-        uriroot="${jsp.dir}"
-        srcdir="${jsp.dir}"
-        verbose="${jsp.verbosity}">
-          <include name="xml.jsp"/>
-      </jspc>
-   </target>
-   
-   <!-- this should compile default.jsp to mangled(%default).java -->
-   <target name="testKeyword" depends="init">
-        <jspc
-           destdir="${jsp.output.dir}"
-           srcdir="${jsp.dir}"
-           verbose="${jsp.verbosity}">
-            <include
-               name="default.jsp"/>
-        </jspc>
-   </target>  
-   
-   <!-- this should compile default.jsp to mangled(%default).java -->
-   <target name="testInvalidClassname" depends="init">
-        <jspc
-           destdir="${jsp.output.dir}"
-           srcdir="${jsp.dir}"
-           verbose="${jsp.verbosity}">
-            <include
-               name="1nvalid-classname.jsp"/>
-        </jspc>
-   </target>  
-   
-</project>
diff --git a/src/etc/testcases/taskdefs/optional/junit.xml b/src/etc/testcases/taskdefs/optional/junit.xml
deleted file mode 100644
index 7662668..0000000
--- a/src/etc/testcases/taskdefs/optional/junit.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0"?>
-
-<project name="junit-test" basedir="." default="outputTests">
-  <property name="showoutput" value="false" />
-  <path id="test">
-    <pathelement path="${java.class.path}" />
-    <pathelement location="../../../../../build/testcases" />
-  </path>
-
-  <target name="testForkedOutput">
-    <junit fork="yes" haltonerror="true" haltonfailure="true" 
-           showoutput="${showoutput}">
-      <test name="org.example.junit.Output" />
-      <classpath refid="test" />
-    </junit>
-  </target>
-
-  <target name="testNonForkedOutput">
-    <junit fork="false" haltonerror="true" haltonfailure="true"
-           showoutput="${showoutput}">
-      <test name="org.example.junit.Output" />
-      <classpath refid="test" />
-    </junit>
-  </target>
-
-  <target name="testForkedThreadedOutput">
-    <junit fork="yes" haltonerror="true" haltonfailure="true"
-           showoutput="${showoutput}">
-      <test name="org.example.junit.ThreadedOutput" />
-      <classpath refid="test" />
-    </junit>
-  </target>
-
-  <target name="testNonForkedThreadedOutput">
-    <junit fork="false" haltonerror="true" haltonfailure="true"
-           showoutput="${showoutput}">
-      <test name="org.example.junit.ThreadedOutput" />
-      <classpath refid="test" />
-    </junit>
-  </target>
-
-  <target name="outputTests" 
-          depends="testForkedOutput,testNonForkedOutput,testForkedThreadedOutput,testNonForkedThreadedOutput" />
-
-</project>
\ No newline at end of file
diff --git a/src/etc/testcases/taskdefs/optional/propertyfile.xml b/src/etc/testcases/taskdefs/optional/propertyfile.xml
deleted file mode 100644
index 75f1af3..0000000
--- a/src/etc/testcases/taskdefs/optional/propertyfile.xml
+++ /dev/null
@@ -1,71 +0,0 @@
-<?xml version="1.0"?>
-
-<project name="propertyfile-test" default="main" basedir=".">
-
-   <property file="propertyfile.build.properties"/>
-   
-   <target name="main">
-      <fail>
-         This file is for testing purposes only...
-         @see PropertyFileTest.java for more info.
-      </fail>
-   </target>
-   
-   <target name="update-existing-properties">
-      <propertyfile
-          file="${test.propertyfile}"
-          comment="unit test for the property file task..." >
-        <entry  key="firstname" value="${firstname}" />
-        <entry  key="lastname"  value="${lastname}" />
-        <entry  key="email"     value="${email}" />
-        <entry  key="phone"     default="${phone}" />
-        <entry  key="age"       default="${age}" type="int"/>
-        <entry  key="date"      default="${date}" type="date"/>
-      </propertyfile>
-      
-   </target>
-   
-   <target name="exercise">
-     <propertyfile file="${test.propertyfile}">
-        <entry key="existing.prop"
-               type="int"
-               default="23"/>
-        <entry key="ethans.birth"
-               value="2002/01/21 12:18"
-               type="date"/>
-        <entry key="first.birthday"
-               value="1"
-               default="2002/01/21"
-               pattern="yyyy/MM/dd"
-               unit="year"
-               type="date"
-               operation="+"/>
-        <entry key="int.with.default"
-               value="1"
-               default="2"
-               operation="+"
-               type="int"/>
-        <entry key="int.without.default"
-               value="1"
-               operation="+"
-               type="int"/>
-        <entry key="string.with.default"
-               value="&gt;"
-               default="--"
-               operation="+"/>
-        <entry key="string.without.default"
-               value="."
-               operation="+"/>
-        <entry key="olderThanAWeek"
-               type="date"
-               default="0201"
-               operation="-"
-               value="8"
-               pattern="MMdd"/>
-     </propertyfile>
-     <property file="${test.propertyfile}"/>
-   </target>
-
-</project>
-
-
diff --git a/src/etc/testcases/taskdefs/optional/pvcs.xml b/src/etc/testcases/taskdefs/optional/pvcs.xml
deleted file mode 100644
index 3dce42e..0000000
--- a/src/etc/testcases/taskdefs/optional/pvcs.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0"?>
-
-<project name="pvcs-test" basedir="." default="test1">
-
-  <taskdef name="pvcs" classname="org.apache.tools.ant.taskdefs.Pvcs"/>
-
-  <target name="test1">
-    <pvcs/>
-  </target>
-
-  <target name="test2">
-    <pvcs pvcsbin="/home/tc/projects/pvcsant/src/etc/testcases/taskdefs" repository="/mnt/pvcs"/>
-  </target>
-
-  <target name="test3">
-    <pvcs pvcsbin="\home\cvs\pvcsant\src\etc\testcases\taskdefs" repository="/mnt/pvcs" pvcsproject="/qviknet"/>
-  </target>
-
-  <target name="test4">
-    <pvcs pvcsbin="\home\cvs\pvcsant\src\etc\testcases\taskdefs" repository="/mnt/pvcs" pvcsproject="/qviknet" workspace="/@/Public/buildws"/>
-  </target>
-
-  <target name="test5" description="Get the latest from PVCS">
-    <pvcs pvcsbin="/home/cvs/pvcsant/src/etc/testcases/taskdefs" 
-			 repository="//ct4serv2/pvcs/monitor"/>
-  </target>
-
-  <target name="test6" description="No pcli to be found">
-    <pvcs pvcsbin="/never/heard/of/a/directory/structure/like/this" 
-			 repository="//ct4serv2/pvcs/monitor"/>
-  </target>
-
-
-</project>
diff --git a/src/etc/testcases/taskdefs/optional/replaceregexp.properties b/src/etc/testcases/taskdefs/optional/replaceregexp.properties
deleted file mode 100644
index 4c1c531..0000000
--- a/src/etc/testcases/taskdefs/optional/replaceregexp.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-OldAbc=Def
-
diff --git a/src/etc/testcases/taskdefs/optional/replaceregexp.xml b/src/etc/testcases/taskdefs/optional/replaceregexp.xml
deleted file mode 100644
index 2c61475..0000000
--- a/src/etc/testcases/taskdefs/optional/replaceregexp.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<project name="test" default="def" basedir=".">
-
-  <target name="def">
-    <fail>This build file should only be run from within the testcase</fail>
-  </target>
-
-  <target name="setup">
-    <copy file="replaceregexp.properties" tofile="test.properties" />
-  </target>
-
-  <target name="testReplace" depends="setup">
-    <replaceregexp file="test.properties" byline="true">
-      <regexp pattern="Old(.*)=(.*)" />
-      <substitution expression="NewProp=\1\2" />
-    </replaceregexp>
-  </target>
-
-  <target name="cleanup">
-    <delete file="test.properties" />
-  </target>
-
-</project>
-
diff --git a/src/etc/testcases/taskdefs/optional/sitraka/covreport-test.xml b/src/etc/testcases/taskdefs/optional/sitraka/covreport-test.xml
deleted file mode 100644
index 6c4d0e1..0000000
--- a/src/etc/testcases/taskdefs/optional/sitraka/covreport-test.xml
+++ /dev/null
@@ -1,9949 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- !DOCTYPE snapshot SYSTEM "snapshot.dtd" -->
-<snapshot version="1.0">
-  <execution_log generator="Coverage 3.0.0" program_name="org.apache.tools.ant.Main" program_start="18 nov. 01 14:31:55" snapshot_created="18 nov. 01 14:35:40" elapsed_time="224623" machine_name="UNKNOWN-P7VGK60" machine_type="Pentium" os_name="Windows NT" os_version="5" />
-  <cov.data calls="12264994" hit_methods="992" total_methods="3055" hit_lines="2260" total_lines="17094" />
-  <package name="java.io">
-    <cov.data calls="210142" hit_methods="150" total_methods="527" hit_lines="277" total_lines="3259" />
-    <class name="PrintStream" source="PrintStream.java">
-      <cov.data calls="435" hit_methods="9" total_methods="31" hit_lines="0" total_lines="191" />
-      <method name="&lt;init&gt;(java.io.OutputStream, boolean)">
-        <cov.data calls="2" hit_lines="0" total_lines="8" />
-      </method>
-      <method name="&lt;init&gt;(java.io.OutputStream)">
-        <cov.data calls="2" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="println(String)">
-        <cov.data calls="12" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="println(char[])">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="println(double)">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="println(float)">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="println(long)">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="println(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="println(char)">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="println(boolean)">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="println()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="println(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="flush()">
-        <cov.data calls="108" hit_lines="0" total_lines="10" />
-      </method>
-      <method name="print(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="print(char)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="print(boolean)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="print(float)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="print(double)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="print(char[])">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="print(String)">
-        <cov.data calls="31" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="print(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="print(long)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="write(char[])">
-        <cov.data calls="0" hit_lines="0" total_lines="19" />
-      </method>
-      <method name="write(byte[], int, int)">
-        <cov.data calls="43" hit_lines="0" total_lines="14" />
-      </method>
-      <method name="write(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="14" />
-      </method>
-      <method name="write(String)">
-        <cov.data calls="31" hit_lines="0" total_lines="16" />
-      </method>
-      <method name="newLine()">
-        <cov.data calls="12" hit_lines="0" total_lines="16" />
-      </method>
-      <method name="close()">
-        <cov.data calls="0" hit_lines="0" total_lines="16" />
-      </method>
-      <method name="ensureOpen()">
-        <cov.data calls="194" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="checkError()">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="setError()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-    </class>
-    <class name="BufferedOutputStream" source="BufferedOutputStream.java">
-      <cov.data calls="169" hit_methods="3" total_methods="6" hit_lines="0" total_lines="35" />
-      <method name="&lt;init&gt;(java.io.OutputStream, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="6" />
-      </method>
-      <method name="&lt;init&gt;(java.io.OutputStream)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="flush()">
-        <cov.data calls="63" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="write(byte[], int, int)">
-        <cov.data calls="43" hit_lines="0" total_lines="14" />
-      </method>
-      <method name="write(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="flushBuffer()">
-        <cov.data calls="63" hit_lines="0" total_lines="5" />
-      </method>
-    </class>
-    <class name="Writer" source="Writer.java">
-      <cov.data calls="1222" hit_methods="2" total_methods="9" hit_lines="0" total_lines="35" />
-      <method name="&lt;init&gt;(Object)">
-        <cov.data calls="27" hit_lines="0" total_lines="6" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="flush()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="write(char[], int, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="write(String)">
-        <cov.data calls="1195" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="write(String, int, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="14" />
-      </method>
-      <method name="write(char[])">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="write(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="8" />
-      </method>
-      <method name="close()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-    </class>
-    <class name="FilterInputStream" source="FilterInputStream.java">
-      <cov.data calls="584" hit_methods="3" total_methods="10" hit_lines="0" total_lines="15" />
-      <method name="&lt;init&gt;(java.io.InputStream)">
-        <cov.data calls="502" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="reset()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="read(byte[], int, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="read(byte[])">
-        <cov.data calls="21" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="read()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="skip(long)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="available()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="close()">
-        <cov.data calls="61" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="mark(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="markSupported()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-    </class>
-    <class name="InputStream" source="InputStream.java">
-      <cov.data calls="1374" hit_methods="2" total_methods="10" hit_lines="0" total_lines="57" />
-      <method name="&lt;init&gt;()">
-        <cov.data calls="1372" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="reset()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="read(byte[], int, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="29" />
-      </method>
-      <method name="read(byte[])">
-        <cov.data calls="2" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="read()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="skip(long)">
-        <cov.data calls="0" hit_lines="0" total_lines="21" />
-      </method>
-      <method name="available()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="close()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="mark(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="markSupported()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-    </class>
-    <class name="BufferedWriter" source="BufferedWriter.java">
-      <cov.data calls="3663" hit_methods="9" total_methods="12" hit_lines="0" total_lines="93" />
-      <method name="&lt;init&gt;(java.io.Writer, int)">
-        <cov.data calls="13" hit_lines="0" total_lines="11" />
-      </method>
-      <method name="&lt;init&gt;(java.io.Writer)">
-        <cov.data calls="13" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;clinit&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="flush()">
-        <cov.data calls="1" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="min(int, int)">
-        <cov.data calls="1103" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="write(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="7" />
-      </method>
-      <method name="write(String, int, int)">
-        <cov.data calls="1199" hit_lines="0" total_lines="14" />
-      </method>
-      <method name="write(char[], int, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="29" />
-      </method>
-      <method name="newLine()">
-        <cov.data calls="17" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="close()">
-        <cov.data calls="10" hit_lines="0" total_lines="9" />
-      </method>
-      <method name="ensureOpen()">
-        <cov.data calls="1253" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="flushBuffer()">
-        <cov.data calls="54" hit_lines="0" total_lines="8" />
-      </method>
-    </class>
-    <class name="Win32FileSystem" source="Win32FileSystem.java">
-      <cov.data calls="105583" hit_methods="18" total_methods="39" hit_lines="0" total_lines="229" />
-      <method name="hashCode(java.io.File)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="7" />
-      </method>
-      <method name="&lt;clinit&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="compare(java.io.File, java.io.File)">
-        <cov.data calls="874" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="isAbsolute(java.io.File)">
-        <cov.data calls="1" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="setReadOnly(java.io.File)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="access(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="checkAccess(java.io.File, boolean)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="list(java.io.File)">
-        <cov.data calls="449" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="delete(java.io.File)">
-        <cov.data calls="11" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="isLetter(char)">
-        <cov.data calls="17707" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="initIDs()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="prefixLength(String)">
-        <cov.data calls="17601" hit_lines="0" total_lines="15" />
-      </method>
-      <method name="deleteOnExit(java.io.File)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="listRoots()">
-        <cov.data calls="0" hit_lines="0" total_lines="18" />
-      </method>
-      <method name="normalize(String, int, int)">
-        <cov.data calls="131" hit_lines="0" total_lines="58" />
-      </method>
-      <method name="normalize(String)">
-        <cov.data calls="17608" hit_lines="0" total_lines="16" />
-      </method>
-      <method name="getDefaultParent()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="resolve(String, String)">
-        <cov.data calls="14200" hit_lines="0" total_lines="18" />
-      </method>
-      <method name="resolve(java.io.File)">
-        <cov.data calls="3704" hit_lines="0" total_lines="39" />
-      </method>
-      <method name="canonicalize(String)">
-        <cov.data calls="33" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="getBooleanAttributes(java.io.File)">
-        <cov.data calls="9298" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="getLastModifiedTime(java.io.File)">
-        <cov.data calls="3123" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="getLength(java.io.File)">
-        <cov.data calls="16" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="createFileExclusively(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="createDirectory(java.io.File)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="rename(java.io.File, java.io.File)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="setLastModifiedTime(java.io.File, long)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="getSeparator()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getPathSeparator()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="isSlash(char)">
-        <cov.data calls="6518" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="slashify(String)">
-        <cov.data calls="14201" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="normalizePrefix(String, int, StringBuffer)">
-        <cov.data calls="106" hit_lines="0" total_lines="28" />
-      </method>
-      <method name="getDriveDirectory(char)">
-        <cov.data calls="0" hit_lines="0" total_lines="7" />
-      </method>
-      <method name="getDriveDirectory(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="driveIndex(char)">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="getUserPath()">
-        <cov.data calls="2" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getDrive(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="listRoots0()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-    </class>
-    <class name="FileSystem" source="FileSystem.java">
-      <cov.data calls="0" hit_methods="0" total_methods="26" hit_lines="0" total_lines="1" />
-      <method name="hashCode(java.io.File)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="compare(java.io.File, java.io.File)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="isAbsolute(java.io.File)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="setReadOnly(java.io.File)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="checkAccess(java.io.File, boolean)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="list(java.io.File)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="delete(java.io.File)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="prefixLength(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="deleteOnExit(java.io.File)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="listRoots()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="normalize(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="getDefaultParent()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="resolve(String, String)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="resolve(java.io.File)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="canonicalize(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="getBooleanAttributes(java.io.File)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="getLastModifiedTime(java.io.File)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="getLength(java.io.File)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="createFileExclusively(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="createDirectory(java.io.File)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="rename(java.io.File, java.io.File)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="setLastModifiedTime(java.io.File, long)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="getFileSystem()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="getSeparator()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="getPathSeparator()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-    </class>
-    <class name="File" source="File.java">
-      <cov.data calls="36322" hit_methods="19" total_methods="50" hit_lines="0" total_lines="260" />
-      <method name="hashCode()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="compareTo(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="compareTo(java.io.File)">
-        <cov.data calls="874" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="&lt;init&gt;(java.io.File, String)">
-        <cov.data calls="14195" hit_lines="0" total_lines="17" />
-      </method>
-      <method name="&lt;init&gt;(String, String)">
-        <cov.data calls="5" hit_lines="0" total_lines="17" />
-      </method>
-      <method name="&lt;init&gt;(String)">
-        <cov.data calls="3401" hit_lines="0" total_lines="7" />
-      </method>
-      <method name="&lt;init&gt;(String, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="&lt;clinit&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="equals(Object)">
-        <cov.data calls="874" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="toString()">
-        <cov.data calls="356" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getName()">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="length()">
-        <cov.data calls="16" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="getParent()">
-        <cov.data calls="5" hit_lines="0" total_lines="7" />
-      </method>
-      <method name="isAbsolute()">
-        <cov.data calls="1" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getCanonicalPath()">
-        <cov.data calls="33" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="setReadOnly()">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="list()">
-        <cov.data calls="449" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="list(java.io.FilenameFilter)">
-        <cov.data calls="0" hit_lines="0" total_lines="11" />
-      </method>
-      <method name="writeObject(java.io.ObjectOutputStream)">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="readObject(java.io.ObjectInputStream)">
-        <cov.data calls="0" hit_lines="0" total_lines="7" />
-      </method>
-      <method name="delete()">
-        <cov.data calls="11" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="getPath()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getCanonicalFile()">
-        <cov.data calls="5" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="toURL()">
-        <cov.data calls="5" hit_lines="0" total_lines="11" />
-      </method>
-      <method name="exists()">
-        <cov.data calls="1562" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="getAbsolutePath()">
-        <cov.data calls="3671" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getPrefixLength()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getParentFile()">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="getAbsoluteFile()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="canRead()">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="canWrite()">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="isDirectory()">
-        <cov.data calls="4107" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="isFile()">
-        <cov.data calls="3629" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="isHidden()">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="lastModified()">
-        <cov.data calls="3123" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="createNewFile()">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="deleteOnExit()">
-        <cov.data calls="0" hit_lines="0" total_lines="6" />
-      </method>
-      <method name="listFiles(java.io.FilenameFilter)">
-        <cov.data calls="0" hit_lines="0" total_lines="9" />
-      </method>
-      <method name="listFiles()">
-        <cov.data calls="0" hit_lines="0" total_lines="8" />
-      </method>
-      <method name="listFiles(java.io.FileFilter)">
-        <cov.data calls="0" hit_lines="0" total_lines="10" />
-      </method>
-      <method name="mkdir()">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="mkdirs()">
-        <cov.data calls="0" hit_lines="0" total_lines="8" />
-      </method>
-      <method name="renameTo(java.io.File)">
-        <cov.data calls="0" hit_lines="0" total_lines="6" />
-      </method>
-      <method name="setLastModified(long)">
-        <cov.data calls="0" hit_lines="0" total_lines="6" />
-      </method>
-      <method name="listRoots()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="generateFile(String, String, java.io.File)">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="getTempDir()">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="checkAndCreate(String, SecurityManager)">
-        <cov.data calls="0" hit_lines="0" total_lines="11" />
-      </method>
-      <method name="createTempFile(String, String, java.io.File)">
-        <cov.data calls="0" hit_lines="0" total_lines="15" />
-      </method>
-      <method name="createTempFile(String, String)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-    </class>
-    <class name="FilterOutputStream" source="FilterOutputStream.java">
-      <cov.data calls="3" hit_methods="1" total_methods="6" hit_lines="0" total_lines="21" />
-      <method name="&lt;init&gt;(java.io.OutputStream)">
-        <cov.data calls="3" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="flush()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="write(byte[], int, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="7" />
-      </method>
-      <method name="write(byte[])">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="write(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="close()">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-    </class>
-    <class name="ObjectStreamField" source="ObjectStreamField.java">
-      <cov.data calls="0" hit_methods="0" total_methods="21" hit_lines="0" total_lines="113" />
-      <method name="compareTo(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="8" />
-      </method>
-      <method name="&lt;init&gt;(String, char, reflect.Field, String)">
-        <cov.data calls="0" hit_lines="0" total_lines="7" />
-      </method>
-      <method name="&lt;init&gt;(String, boolean)">
-        <cov.data calls="0" hit_lines="0" total_lines="6" />
-      </method>
-      <method name="&lt;init&gt;(reflect.Field)">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="&lt;init&gt;(String, Class)">
-        <cov.data calls="0" hit_lines="0" total_lines="31" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;clinit&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="toString()">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="getName()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="isPrimitive()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getField()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="class$(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getType()">
-        <cov.data calls="0" hit_lines="0" total_lines="26" />
-      </method>
-      <method name="getTypeCode()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getTypeString()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getOffset()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="setOffset(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="typeEquals(java.io.ObjectStreamField)">
-        <cov.data calls="0" hit_lines="0" total_lines="11" />
-      </method>
-      <method name="setField(reflect.Field)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="constructSearchKey(String, Class)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="setSearchKeyTypeString(boolean)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-    </class>
-    <class name="ObjectStreamClass" source="ObjectStreamClass.java">
-      <cov.data calls="0" hit_methods="0" total_methods="61" hit_lines="0" total_lines="984" />
-      <method name="&lt;init&gt;(String, long)">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="&lt;init&gt;(Class, java.io.ObjectStreamClass, boolean, boolean)">
-        <cov.data calls="0" hit_lines="0" total_lines="35" />
-      </method>
-      <method name="&lt;clinit&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="toString()">
-        <cov.data calls="0" hit_lines="0" total_lines="7" />
-      </method>
-      <method name="getName()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getSuperclass()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getFields()">
-        <cov.data calls="0" hit_lines="0" total_lines="6" />
-      </method>
-      <method name="getField(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="16" />
-      </method>
-      <method name="getField(String, Class)">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="getDeclaredMethod(String, Class[], int, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="18" />
-      </method>
-      <method name="access$000(java.io.ObjectStreamClass)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="class$(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="access$200(Class)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="access$300()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="access$400(java.io.ObjectStreamClass, String, Class[], int, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="init()">
-        <cov.data calls="0" hit_lines="0" total_lines="201" />
-      </method>
-      <method name="write(java.io.ObjectOutputStream)">
-        <cov.data calls="0" hit_lines="0" total_lines="38" />
-      </method>
-      <method name="access$500(java.io.ObjectStreamClass, reflect.Method)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="typeEquals(java.io.ObjectStreamClass)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getSignature(reflect.Constructor)">
-        <cov.data calls="0" hit_lines="0" total_lines="10" />
-      </method>
-      <method name="getSignature(reflect.Method)">
-        <cov.data calls="0" hit_lines="0" total_lines="11" />
-      </method>
-      <method name="getSignature(Class)">
-        <cov.data calls="0" hit_lines="0" total_lines="38" />
-      </method>
-      <method name="compareClassNames(String, String, char)">
-        <cov.data calls="0" hit_lines="0" total_lines="9" />
-      </method>
-      <method name="lookup(Class)">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="lookupInternal(Class)">
-        <cov.data calls="0" hit_lines="0" total_lines="41" />
-      </method>
-      <method name="getSerialVersionUID()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="forClass()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getFieldsNoCopy()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="validateLocalClass(Class)">
-        <cov.data calls="0" hit_lines="0" total_lines="48" />
-      </method>
-      <method name="setClass(Class)">
-        <cov.data calls="0" hit_lines="0" total_lines="86" />
-      </method>
-      <method name="setSuperclass(java.io.ObjectStreamClass)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="hasWriteObject()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="hasExternalizableBlockDataMode()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="localClassDescriptor()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="isSerializable()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="isExternalizable()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="isNonSerializable()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="computeFieldInfo()">
-        <cov.data calls="0" hit_lines="0" total_lines="81" />
-      </method>
-      <method name="computeSerialVersionUID(Class)">
-        <cov.data calls="0" hit_lines="0" total_lines="125" />
-      </method>
-      <method name="read(java.io.ObjectInputStream)">
-        <cov.data calls="0" hit_lines="0" total_lines="52" />
-      </method>
-      <method name="lightCopy(java.io.ObjectStreamClass)">
-        <cov.data calls="0" hit_lines="0" total_lines="13" />
-      </method>
-      <method name="initProxyClassDesc(Class)">
-        <cov.data calls="0" hit_lines="0" total_lines="10" />
-      </method>
-      <method name="verifyInstanceDeserialization()">
-        <cov.data calls="0" hit_lines="0" total_lines="10" />
-      </method>
-      <method name="findDescriptorFor(Class)">
-        <cov.data calls="0" hit_lines="0" total_lines="27" />
-      </method>
-      <method name="insertDescriptorFor(java.io.ObjectStreamClass)">
-        <cov.data calls="0" hit_lines="0" total_lines="10" />
-      </method>
-      <method name="initNative()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="getFieldIDs(java.io.ObjectStreamField[], long[], long[])">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="hasStaticInitializer(Class)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="isResolvable()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="isReplaceable()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="invokeMethod(reflect.Method, Object, Object[])">
-        <cov.data calls="0" hit_lines="0" total_lines="18" />
-      </method>
-      <method name="checkSuperMethodAccess(reflect.Method)">
-        <cov.data calls="0" hit_lines="0" total_lines="12" />
-      </method>
-      <method name="isSameClassPackage(Class, Class)">
-        <cov.data calls="0" hit_lines="0" total_lines="14" />
-      </method>
-      <method name="initStaticMethodArgs()">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="access$002(java.io.ObjectStreamClass, java.io.ObjectStreamField[])">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="access$102(java.io.ObjectStreamClass, long)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="access$600(java.io.ObjectStreamClass)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="access$700()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="access$800()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="access$900()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="access$1002(java.io.ObjectStreamClass, boolean)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-    </class>
-    <class name="BufferedInputStream" source="BufferedInputStream.java">
-      <cov.data calls="0" hit_methods="0" total_methods="14" hit_lines="0" total_lines="113" />
-      <method name="&lt;init&gt;(java.io.InputStream)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;(java.io.InputStream, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="6" />
-      </method>
-      <method name="&lt;clinit&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="reset()">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="fill()">
-        <cov.data calls="0" hit_lines="0" total_lines="24" />
-      </method>
-      <method name="read(byte[], int, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="15" />
-      </method>
-      <method name="read()">
-        <cov.data calls="0" hit_lines="0" total_lines="7" />
-      </method>
-      <method name="skip(long)">
-        <cov.data calls="0" hit_lines="0" total_lines="21" />
-      </method>
-      <method name="available()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="close()">
-        <cov.data calls="0" hit_lines="0" total_lines="6" />
-      </method>
-      <method name="mark(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="markSupported()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="ensureOpen()">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="read1(byte[], int, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="17" />
-      </method>
-    </class>
-    <class name="ObjectStreamClass$ObjectStreamClassEntry" source="ObjectStreamClass.java">
-      <cov.data calls="0" hit_methods="0" total_methods="1" hit_lines="0" total_lines="2" />
-      <method name="&lt;init&gt;(java.io.ObjectStreamClass)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-    </class>
-    <class name="FileOutputStream" source="FileOutputStream.java">
-      <cov.data calls="24500" hit_methods="9" total_methods="15" hit_lines="0" total_lines="40" />
-      <method name="&lt;init&gt;(String, boolean)">
-        <cov.data calls="12" hit_lines="0" total_lines="12" />
-      </method>
-      <method name="&lt;init&gt;(java.io.File)">
-        <cov.data calls="12" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;(java.io.FileDescriptor)">
-        <cov.data calls="0" hit_lines="0" total_lines="10" />
-      </method>
-      <method name="&lt;init&gt;(String)">
-        <cov.data calls="12" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;clinit&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="finalize()">
-        <cov.data calls="4" hit_lines="0" total_lines="8" />
-      </method>
-      <method name="write(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="write(byte[])">
-        <cov.data calls="11024" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="write(byte[], int, int)">
-        <cov.data calls="1192" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="open(String)">
-        <cov.data calls="12" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="close()">
-        <cov.data calls="16" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="getFD()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="initIDs()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="openAppend(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="writeBytes(byte[], int, int)">
-        <cov.data calls="12216" hit_lines="0" total_lines="0" />
-      </method>
-    </class>
-    <class name="OutputStreamWriter" source="OutputStreamWriter.java">
-      <cov.data calls="263" hit_methods="7" total_methods="11" hit_lines="0" total_lines="103" />
-      <method name="&lt;init&gt;(java.io.OutputStream)">
-        <cov.data calls="13" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;(java.io.OutputStream, sun.io.CharToByteConverter)">
-        <cov.data calls="13" hit_lines="0" total_lines="8" />
-      </method>
-      <method name="&lt;init&gt;(java.io.OutputStream, String)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="flush()">
-        <cov.data calls="11" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="write(String, int, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="7" />
-      </method>
-      <method name="write(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="write(char[], int, int)">
-        <cov.data calls="54" hit_lines="0" total_lines="37" />
-      </method>
-      <method name="close()">
-        <cov.data calls="10" hit_lines="0" total_lines="10" />
-      </method>
-      <method name="ensureOpen()">
-        <cov.data calls="108" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="flushBuffer()">
-        <cov.data calls="54" hit_lines="0" total_lines="19" />
-      </method>
-      <method name="getEncoding()">
-        <cov.data calls="0" hit_lines="0" total_lines="6" />
-      </method>
-    </class>
-    <class name="FileDescriptor" source="FileDescriptor.java">
-      <cov.data calls="340" hit_methods="1" total_methods="6" hit_lines="0" total_lines="8" />
-      <method name="&lt;init&gt;(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="340" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="&lt;clinit&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="initIDs()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="valid()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="sync()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-    </class>
-    <class name="ObjectStreamClass$CompareMemberByName" source="ObjectStreamClass.java">
-      <cov.data calls="0" hit_methods="0" total_methods="3" hit_lines="0" total_lines="13" />
-      <method name="&lt;init&gt;(java.io.ObjectStreamClass$1)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="compare(Object, Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="11" />
-      </method>
-    </class>
-    <class name="OutputStream" source="OutputStream.java">
-      <cov.data calls="48" hit_methods="1" total_methods="6" hit_lines="0" total_lines="17" />
-      <method name="&lt;init&gt;()">
-        <cov.data calls="48" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="flush()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="write(byte[], int, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="12" />
-      </method>
-      <method name="write(byte[])">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="write(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="close()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-    </class>
-    <class name="ObjectStreamClass$CompareClassByName" source="ObjectStreamClass.java">
-      <cov.data calls="0" hit_methods="0" total_methods="3" hit_lines="0" total_lines="5" />
-      <method name="&lt;init&gt;(java.io.ObjectStreamClass$1)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="compare(Object, Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-    </class>
-    <class name="FileInputStream" source="FileInputStream.java">
-      <cov.data calls="3461" hit_methods="9" total_methods="15" hit_lines="0" total_lines="30" />
-      <method name="&lt;init&gt;(java.io.File)">
-        <cov.data calls="328" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;(java.io.FileDescriptor)">
-        <cov.data calls="0" hit_lines="0" total_lines="10" />
-      </method>
-      <method name="&lt;init&gt;(String)">
-        <cov.data calls="328" hit_lines="0" total_lines="8" />
-      </method>
-      <method name="&lt;clinit&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="finalize()">
-        <cov.data calls="304" hit_lines="0" total_lines="6" />
-      </method>
-      <method name="read()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="read(byte[])">
-        <cov.data calls="50" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="read(byte[], int, int)">
-        <cov.data calls="697" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="open(String)">
-        <cov.data calls="328" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="readBytes(byte[], int, int)">
-        <cov.data calls="747" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="skip(long)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="available()">
-        <cov.data calls="45" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="close()">
-        <cov.data calls="634" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="getFD()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="initIDs()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-    </class>
-    <class name="DataInputStream" source="DataInputStream.java">
-      <cov.data calls="122" hit_methods="2" total_methods="19" hit_lines="10" total_lines="120" />
-      <method name="&lt;init&gt;(java.io.InputStream)">
-        <cov.data calls="61" hit_lines="2" total_lines="2" />
-      </method>
-      <method name="readLine()">
-        <cov.data calls="0" hit_lines="0" total_lines="24" />
-      </method>
-      <method name="readInt()">
-        <cov.data calls="0" hit_lines="0" total_lines="8" />
-      </method>
-      <method name="read(byte[], int, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="read(byte[])">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="readByte()">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="readShort()">
-        <cov.data calls="0" hit_lines="0" total_lines="6" />
-      </method>
-      <method name="readUTF()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="readUTF(java.io.DataInput)">
-        <cov.data calls="0" hit_lines="0" total_lines="31" />
-      </method>
-      <method name="readChar()">
-        <cov.data calls="0" hit_lines="0" total_lines="6" />
-      </method>
-      <method name="readFloat()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="readFully(byte[], int, int)">
-        <cov.data calls="61" hit_lines="8" total_lines="10" />
-      </method>
-      <method name="readFully(byte[])">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="skipBytes(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="6" />
-      </method>
-      <method name="readBoolean()">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="readUnsignedByte()">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="readUnsignedShort()">
-        <cov.data calls="0" hit_lines="0" total_lines="6" />
-      </method>
-      <method name="readLong()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="readDouble()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-    </class>
-    <class name="ByteArrayInputStream" source="ByteArrayInputStream.java">
-      <cov.data calls="157" hit_methods="3" total_methods="11" hit_lines="19" total_lines="50" />
-      <method name="&lt;init&gt;(byte[], int, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="8" />
-      </method>
-      <method name="&lt;init&gt;(byte[])">
-        <cov.data calls="29" hit_lines="7" total_lines="7" />
-      </method>
-      <method name="reset()">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="read(byte[], int, int)">
-        <cov.data calls="64" hit_lines="11" total_lines="14" />
-      </method>
-      <method name="read()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="skip(long)">
-        <cov.data calls="0" hit_lines="0" total_lines="7" />
-      </method>
-      <method name="available()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="close()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="mark(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="markSupported()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="ensureOpen()">
-        <cov.data calls="64" hit_lines="1" total_lines="1" />
-      </method>
-    </class>
-    <class name="ByteArrayOutputStream" source="ByteArrayOutputStream.java">
-      <cov.data calls="173" hit_methods="6" total_methods="13" hit_lines="23" total_lines="45" />
-      <method name="&lt;init&gt;()">
-        <cov.data calls="31" hit_lines="2" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;(int)">
-        <cov.data calls="31" hit_lines="5" total_lines="6" />
-      </method>
-      <method name="toString(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="toString(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="toString()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="reset()">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="size()">
-        <cov.data calls="108" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="write(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="9" />
-      </method>
-      <method name="write(byte[], int, int)">
-        <cov.data calls="1" hit_lines="11" total_lines="13" />
-      </method>
-      <method name="close()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="ensureOpen()">
-        <cov.data calls="1" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="toByteArray()">
-        <cov.data calls="1" hit_lines="3" total_lines="3" />
-      </method>
-      <method name="writeTo(java.io.OutputStream)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-    </class>
-    <class name="IOException" source="IOException.java">
-      <cov.data calls="13" hit_methods="1" total_methods="2" hit_lines="2" total_lines="4" />
-      <method name="&lt;init&gt;(String)">
-        <cov.data calls="13" hit_lines="2" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-    </class>
-    <class name="FileNotFoundException" source="FileNotFoundException.java">
-      <cov.data calls="13" hit_methods="1" total_methods="3" hit_lines="2" total_lines="6" />
-      <method name="&lt;init&gt;(String)">
-        <cov.data calls="13" hit_lines="2" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;(String, String)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-    </class>
-    <class name="Reader" source="Reader.java">
-      <cov.data calls="72" hit_methods="1" total_methods="11" hit_lines="5" total_lines="33" />
-      <method name="&lt;init&gt;(Object)">
-        <cov.data calls="72" hit_lines="5" total_lines="6" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="reset()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="read(char[], int, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="read(char[])">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="read()">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="skip(long)">
-        <cov.data calls="0" hit_lines="0" total_lines="14" />
-      </method>
-      <method name="close()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="mark(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="markSupported()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="ready()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-    </class>
-    <class name="BufferedReader" source="BufferedReader.java">
-      <cov.data calls="30939" hit_methods="11" total_methods="16" hit_lines="84" total_lines="184" />
-      <method name="&lt;init&gt;(java.io.Reader)">
-        <cov.data calls="12" hit_lines="2" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;(java.io.Reader, int)">
-        <cov.data calls="36" hit_lines="10" total_lines="11" />
-      </method>
-      <method name="&lt;clinit&gt;()">
-        <cov.data calls="1" hit_lines="2" total_lines="2" />
-      </method>
-      <method name="reset()">
-        <cov.data calls="0" hit_lines="0" total_lines="8" />
-      </method>
-      <method name="readLine(boolean)">
-        <cov.data calls="286" hit_lines="33" total_lines="37" />
-      </method>
-      <method name="readLine()">
-        <cov.data calls="286" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="fill()">
-        <cov.data calls="39" hit_lines="8" total_lines="23" />
-      </method>
-      <method name="read()">
-        <cov.data calls="14947" hit_lines="9" total_lines="14" />
-      </method>
-      <method name="read(char[], int, int)">
-        <cov.data calls="24" hit_lines="8" total_lines="14" />
-      </method>
-      <method name="skip(long)">
-        <cov.data calls="0" hit_lines="0" total_lines="23" />
-      </method>
-      <method name="close()">
-        <cov.data calls="27" hit_lines="6" total_lines="8" />
-      </method>
-      <method name="mark(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="9" />
-      </method>
-      <method name="markSupported()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="ensureOpen()">
-        <cov.data calls="15257" hit_lines="2" total_lines="3" />
-      </method>
-      <method name="read1(char[], int, int)">
-        <cov.data calls="24" hit_lines="3" total_lines="17" />
-      </method>
-      <method name="ready()">
-        <cov.data calls="0" hit_lines="0" total_lines="11" />
-      </method>
-    </class>
-    <class name="InputStreamReader" source="InputStreamReader.java">
-      <cov.data calls="448" hit_methods="11" total_methods="14" hit_lines="54" total_lines="78" />
-      <method name="&lt;init&gt;(java.io.InputStream, String)">
-        <cov.data calls="4" hit_lines="2" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;(java.io.InputStream, sun.io.ByteToCharConverter)">
-        <cov.data calls="36" hit_lines="8" total_lines="9" />
-      </method>
-      <method name="&lt;init&gt;(java.io.InputStream)">
-        <cov.data calls="32" hit_lines="2" total_lines="2" />
-      </method>
-      <method name="fill(char[], int, int)">
-        <cov.data calls="63" hit_lines="15" total_lines="16" />
-      </method>
-      <method name="read(char[], int, int)">
-        <cov.data calls="63" hit_lines="5" total_lines="8" />
-      </method>
-      <method name="read()">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="close()">
-        <cov.data calls="27" hit_lines="7" total_lines="9" />
-      </method>
-      <method name="ensureOpen()">
-        <cov.data calls="79" hit_lines="2" total_lines="3" />
-      </method>
-      <method name="getEncoding()">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="ready()">
-        <cov.data calls="16" hit_lines="3" total_lines="4" />
-      </method>
-      <method name="malfunction()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="convertInto(char[], int, int)">
-        <cov.data calls="39" hit_lines="6" total_lines="9" />
-      </method>
-      <method name="flushInto(char[], int, int)">
-        <cov.data calls="34" hit_lines="3" total_lines="4" />
-      </method>
-      <method name="inReady()">
-        <cov.data calls="55" hit_lines="1" total_lines="2" />
-      </method>
-    </class>
-    <class name="FilePermission" source="FilePermission.java">
-      <cov.data calls="116" hit_methods="6" total_methods="17" hit_lines="32" total_lines="122" />
-      <method name="hashCode()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="&lt;init&gt;(String, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="&lt;init&gt;(String, String)">
-        <cov.data calls="23" hit_lines="3" total_lines="3" />
-      </method>
-      <method name="&lt;clinit&gt;()">
-        <cov.data calls="1" hit_lines="2" total_lines="2" />
-      </method>
-      <method name="equals(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="6" />
-      </method>
-      <method name="access$000(java.io.FilePermission)">
-        <cov.data calls="23" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="access$100(java.io.FilePermission)">
-        <cov.data calls="23" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="implies(java.security.Permission)">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="init(int)">
-        <cov.data calls="23" hit_lines="11" total_lines="24" />
-      </method>
-      <method name="writeObject(java.io.ObjectOutputStream)">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="readObject(java.io.ObjectInputStream)">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="getActions()">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="getActions(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="18" />
-      </method>
-      <method name="newPermissionCollection()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="impliesIgnoreMask(java.io.FilePermission)">
-        <cov.data calls="0" hit_lines="0" total_lines="15" />
-      </method>
-      <method name="getMask()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getMask(String)">
-        <cov.data calls="23" hit_lines="14" total_lines="32" />
-      </method>
-    </class>
-    <class name="FilePermission$1" source="FilePermission.java">
-      <cov.data calls="46" hit_methods="2" total_methods="2" hit_lines="5" total_lines="8" />
-      <method name="&lt;init&gt;(java.io.FilePermission)">
-        <cov.data calls="23" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="run()">
-        <cov.data calls="23" hit_lines="4" total_lines="7" />
-      </method>
-    </class>
-    <class name="FileReader" source="FileReader.java">
-      <cov.data calls="26" hit_methods="1" total_methods="3" hit_lines="2" total_lines="6" />
-      <method name="&lt;init&gt;(java.io.File)">
-        <cov.data calls="26" hit_lines="2" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;(java.io.FileDescriptor)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-    </class>
-    <class name="FileWriter" source="FileWriter.java">
-      <cov.data calls="10" hit_methods="1" total_methods="4" hit_lines="2" total_lines="8" />
-      <method name="&lt;init&gt;(String, boolean)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;(java.io.File)">
-        <cov.data calls="10" hit_lines="2" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;(java.io.FileDescriptor)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-    </class>
-    <class name="StringWriter" source="StringWriter.java">
-      <cov.data calls="0" hit_methods="0" total_methods="11" hit_lines="0" total_lines="35" />
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="&lt;init&gt;(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="7" />
-      </method>
-      <method name="toString()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="flush()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="write(char[], int, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="7" />
-      </method>
-      <method name="write(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="write(String, int, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="write(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="close()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="ensureOpen()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getBuffer()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-    </class>
-    <class name="StringReader" source="StringReader.java">
-      <cov.data calls="0" hit_methods="0" total_methods="10" hit_lines="0" total_lines="55" />
-      <method name="&lt;init&gt;(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="6" />
-      </method>
-      <method name="reset()">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="read(char[], int, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="13" />
-      </method>
-      <method name="read()">
-        <cov.data calls="0" hit_lines="0" total_lines="6" />
-      </method>
-      <method name="skip(long)">
-        <cov.data calls="0" hit_lines="0" total_lines="8" />
-      </method>
-      <method name="close()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="mark(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="7" />
-      </method>
-      <method name="markSupported()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="ensureOpen()">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="ready()">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-    </class>
-    <class name="UnsupportedEncodingException" source="UnsupportedEncodingException.java">
-      <cov.data calls="0" hit_methods="0" total_methods="2" hit_lines="0" total_lines="4" />
-      <method name="&lt;init&gt;(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-    </class>
-    <class name="PrintWriter" source="PrintWriter.java">
-      <cov.data calls="40" hit_methods="11" total_methods="34" hit_lines="37" total_lines="136" />
-      <method name="&lt;init&gt;(java.io.Writer, boolean)">
-        <cov.data calls="1" hit_lines="7" total_lines="7" />
-      </method>
-      <method name="&lt;init&gt;(java.io.OutputStream)">
-        <cov.data calls="1" hit_lines="2" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;(java.io.OutputStream, boolean)">
-        <cov.data calls="1" hit_lines="2" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;(java.io.Writer)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="println(String)">
-        <cov.data calls="4" hit_lines="4" total_lines="5" />
-      </method>
-      <method name="println(char[])">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="println(double)">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="println(float)">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="println(long)">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="println(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="println(char)">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="println(boolean)">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="println()">
-        <cov.data calls="5" hit_lines="2" total_lines="2" />
-      </method>
-      <method name="println(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="flush()">
-        <cov.data calls="1" hit_lines="4" total_lines="6" />
-      </method>
-      <method name="print(boolean)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="print(char)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="print(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="print(long)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="print(float)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="print(double)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="print(char[])">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="print(String)">
-        <cov.data calls="4" hit_lines="3" total_lines="4" />
-      </method>
-      <method name="print(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="write(char[])">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="write(char[], int, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="7" />
-      </method>
-      <method name="write(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="7" />
-      </method>
-      <method name="write(String, int, int)">
-        <cov.data calls="4" hit_lines="4" total_lines="7" />
-      </method>
-      <method name="write(String)">
-        <cov.data calls="4" hit_lines="2" total_lines="2" />
-      </method>
-      <method name="newLine()">
-        <cov.data calls="5" hit_lines="5" total_lines="9" />
-      </method>
-      <method name="close()">
-        <cov.data calls="0" hit_lines="0" total_lines="8" />
-      </method>
-      <method name="ensureOpen()">
-        <cov.data calls="10" hit_lines="2" total_lines="3" />
-      </method>
-      <method name="checkError()">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="setError()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-    </class>
-  </package>
-  <package name="java.util">
-    <cov.data calls="3780020" hit_methods="248" total_methods="768" hit_lines="718" total_lines="4461" />
-    <class name="AbstractList" source="AbstractList.java">
-      <cov.data calls="68484" hit_methods="2" total_methods="17" hit_lines="0" total_lines="72" />
-      <method name="hashCode()">
-        <cov.data calls="0" hit_lines="0" total_lines="7" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="68456" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="equals(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="14" />
-      </method>
-      <method name="indexOf(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="11" />
-      </method>
-      <method name="lastIndexOf(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="11" />
-      </method>
-      <method name="get(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="set(int, Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="add(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="add(int, Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="clear()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="remove(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="iterator()">
-        <cov.data calls="28" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="addAll(int, java.util.Collection)">
-        <cov.data calls="0" hit_lines="0" total_lines="7" />
-      </method>
-      <method name="subList(int, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="removeRange(int, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="6" />
-      </method>
-      <method name="listIterator(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="listIterator()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-    </class>
-    <class name="Stack" source="Stack.java">
-      <cov.data calls="6615" hit_methods="5" total_methods="6" hit_lines="0" total_lines="23" />
-      <method name="&lt;init&gt;()">
-        <cov.data calls="938" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="push(Object)">
-        <cov.data calls="4256" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="pop()">
-        <cov.data calls="709" hit_lines="0" total_lines="6" />
-      </method>
-      <method name="peek()">
-        <cov.data calls="710" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="empty()">
-        <cov.data calls="2" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="search(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="6" />
-      </method>
-    </class>
-    <class name="HashMap" source="HashMap.java">
-      <cov.data calls="7403" hit_methods="16" total_methods="30" hit_lines="0" total_lines="336" />
-      <method name="&lt;init&gt;(int)">
-        <cov.data calls="507" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="92" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;(java.util.Map)">
-        <cov.data calls="3" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="&lt;init&gt;(int, float)">
-        <cov.data calls="603" hit_lines="0" total_lines="13" />
-      </method>
-      <method name="&lt;clinit&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="put(Object, Object)">
-        <cov.data calls="2183" hit_lines="0" total_lines="38" />
-      </method>
-      <method name="clone()">
-        <cov.data calls="0" hit_lines="0" total_lines="14" />
-      </method>
-      <method name="get(Object)">
-        <cov.data calls="3526" hit_lines="0" total_lines="15" />
-      </method>
-      <method name="access$000(java.util.HashMap, int)">
-        <cov.data calls="9" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="access$100(java.util.HashMap)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="values()">
-        <cov.data calls="0" hit_lines="0" total_lines="17" />
-      </method>
-      <method name="size()">
-        <cov.data calls="1" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="access$200(java.util.HashMap)">
-        <cov.data calls="1" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="clear()">
-        <cov.data calls="0" hit_lines="0" total_lines="6" />
-      </method>
-      <method name="remove(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="40" />
-      </method>
-      <method name="access$300(java.util.HashMap)">
-        <cov.data calls="1" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="loadFactor()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="keySet()">
-        <cov.data calls="3" hit_lines="0" total_lines="22" />
-      </method>
-      <method name="entrySet()">
-        <cov.data calls="6" hit_lines="0" total_lines="58" />
-      </method>
-      <method name="isEmpty()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="containsValue(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="15" />
-      </method>
-      <method name="containsKey(Object)">
-        <cov.data calls="46" hit_lines="0" total_lines="14" />
-      </method>
-      <method name="rehash()">
-        <cov.data calls="407" hit_lines="0" total_lines="21" />
-      </method>
-      <method name="putAll(java.util.Map)">
-        <cov.data calls="6" hit_lines="0" total_lines="6" />
-      </method>
-      <method name="writeObject(java.io.ObjectOutputStream)">
-        <cov.data calls="0" hit_lines="0" total_lines="19" />
-      </method>
-      <method name="readObject(java.io.ObjectInputStream)">
-        <cov.data calls="0" hit_lines="0" total_lines="16" />
-      </method>
-      <method name="capacity()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getHashIterator(int)">
-        <cov.data calls="9" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="access$308(java.util.HashMap)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="access$110(java.util.HashMap)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-    </class>
-    <class name="Properties" source="Properties.java">
-      <cov.data calls="711" hit_methods="10" total_methods="18" hit_lines="0" total_lines="228" />
-      <method name="&lt;init&gt;(java.util.Properties)">
-        <cov.data calls="11" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="11" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;clinit&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="setProperty(String, String)">
-        <cov.data calls="1" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getProperty(String, String)">
-        <cov.data calls="2" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="getProperty(String)">
-        <cov.data calls="228" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="load(java.io.InputStream)">
-        <cov.data calls="4" hit_lines="0" total_lines="71" />
-      </method>
-      <method name="enumerate(java.util.Hashtable)">
-        <cov.data calls="2" hit_lines="0" total_lines="8" />
-      </method>
-      <method name="list(java.io.PrintStream)">
-        <cov.data calls="0" hit_lines="0" total_lines="12" />
-      </method>
-      <method name="list(java.io.PrintWriter)">
-        <cov.data calls="0" hit_lines="0" total_lines="12" />
-      </method>
-      <method name="continueLine(String)">
-        <cov.data calls="150" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="loadConvert(String)">
-        <cov.data calls="300" hit_lines="0" total_lines="42" />
-      </method>
-      <method name="saveConvert(String, boolean)">
-        <cov.data calls="0" hit_lines="0" total_lines="38" />
-      </method>
-      <method name="save(java.io.OutputStream, String)">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="store(java.io.OutputStream, String)">
-        <cov.data calls="0" hit_lines="0" total_lines="17" />
-      </method>
-      <method name="writeln(java.io.BufferedWriter, String)">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="propertyNames()">
-        <cov.data calls="2" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="toHex(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-    </class>
-    <class name="Collections$EmptyMap" source="Collections.java">
-      <cov.data calls="2" hit_methods="2" total_methods="12" hit_lines="0" total_lines="12" />
-      <method name="hashCode()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="&lt;init&gt;(java.util.Collections$1)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="equals(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="get(Object)">
-        <cov.data calls="1" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="values()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="size()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="keySet()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="entrySet()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="isEmpty()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="containsValue(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="containsKey(Object)">
-        <cov.data calls="1" hit_lines="0" total_lines="1" />
-      </method>
-    </class>
-    <class name="Set" source="Set.java">
-      <cov.data calls="0" hit_methods="0" total_methods="15" hit_lines="0" total_lines="0" />
-      <method name="hashCode()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="equals(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="add(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="size()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="toArray(Object[])">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="toArray()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="contains(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="clear()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="remove(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="isEmpty()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="iterator()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="containsAll(java.util.Collection)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="addAll(java.util.Collection)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="removeAll(java.util.Collection)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="retainAll(java.util.Collection)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-    </class>
-    <class name="Collection" source="Collection.java">
-      <cov.data calls="0" hit_methods="0" total_methods="15" hit_lines="0" total_lines="0" />
-      <method name="hashCode()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="equals(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="add(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="size()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="toArray(Object[])">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="toArray()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="contains(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="clear()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="remove(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="isEmpty()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="iterator()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="containsAll(java.util.Collection)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="addAll(java.util.Collection)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="removeAll(java.util.Collection)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="retainAll(java.util.Collection)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-    </class>
-    <class name="Collections" source="Collections.java">
-      <cov.data calls="0" hit_methods="0" total_methods="39" hit_lines="0" total_lines="172" />
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;clinit&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="min(java.util.Collection, java.util.Comparator)">
-        <cov.data calls="0" hit_lines="0" total_lines="11" />
-      </method>
-      <method name="min(java.util.Collection)">
-        <cov.data calls="0" hit_lines="0" total_lines="8" />
-      </method>
-      <method name="access$100(Object, Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="max(java.util.Collection)">
-        <cov.data calls="0" hit_lines="0" total_lines="8" />
-      </method>
-      <method name="max(java.util.Collection, java.util.Comparator)">
-        <cov.data calls="0" hit_lines="0" total_lines="11" />
-      </method>
-      <method name="synchronizedSet(java.util.Set, Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="synchronizedSet(java.util.Set)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="synchronizedCollection(java.util.Collection)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="synchronizedCollection(java.util.Collection, Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="copy(java.util.List, java.util.List)">
-        <cov.data calls="0" hit_lines="0" total_lines="9" />
-      </method>
-      <method name="synchronizedList(java.util.List)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="synchronizedList(java.util.List, Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="reverse(java.util.List)">
-        <cov.data calls="0" hit_lines="0" total_lines="7" />
-      </method>
-      <method name="sort(java.util.List, java.util.Comparator)">
-        <cov.data calls="0" hit_lines="0" total_lines="8" />
-      </method>
-      <method name="sort(java.util.List)">
-        <cov.data calls="0" hit_lines="0" total_lines="8" />
-      </method>
-      <method name="binarySearch(java.util.List, Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="29" />
-      </method>
-      <method name="binarySearch(java.util.List, Object, java.util.Comparator)">
-        <cov.data calls="0" hit_lines="0" total_lines="33" />
-      </method>
-      <method name="shuffle(java.util.List)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="shuffle(java.util.List, java.util.Random)">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="swap(java.util.List, int, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="fill(java.util.List, Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="unmodifiableCollection(java.util.Collection)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="unmodifiableSet(java.util.Set)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="unmodifiableSortedSet(java.util.SortedSet)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="unmodifiableList(java.util.List)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="unmodifiableMap(java.util.Map)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="unmodifiableSortedMap(java.util.SortedMap)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="synchronizedSortedSet(java.util.SortedSet)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="synchronizedMap(java.util.Map)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="synchronizedSortedMap(java.util.SortedMap)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="singleton(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="singletonList(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="singletonMap(Object, Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="nCopies(int, Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="reverseOrder()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="enumeration(java.util.Collection)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="eq(Object, Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-    </class>
-    <class name="Collections$EmptySet" source="Collections.java">
-      <cov.data calls="0" hit_methods="0" total_methods="5" hit_lines="0" total_lines="5" />
-      <method name="&lt;init&gt;(java.util.Collections$1)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="size()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="contains(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="iterator()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-    </class>
-    <class name="HashSet" source="HashSet.java">
-      <cov.data calls="325" hit_methods="2" total_methods="15" hit_lines="0" total_lines="56" />
-      <method name="&lt;init&gt;(java.util.Collection)">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="&lt;init&gt;(int, float)">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="&lt;init&gt;(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="29" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="&lt;clinit&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="clone()">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="add(Object)">
-        <cov.data calls="296" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="size()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="contains(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="clear()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="remove(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="isEmpty()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="writeObject(java.io.ObjectOutputStream)">
-        <cov.data calls="0" hit_lines="0" total_lines="13" />
-      </method>
-      <method name="readObject(java.io.ObjectInputStream)">
-        <cov.data calls="0" hit_lines="0" total_lines="16" />
-      </method>
-      <method name="iterator()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-    </class>
-    <class name="Collections$EmptyList" source="Collections.java">
-      <cov.data calls="0" hit_methods="0" total_methods="5" hit_lines="0" total_lines="5" />
-      <method name="&lt;init&gt;(java.util.Collections$1)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="get(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="size()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="contains(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-    </class>
-    <class name="Collections$ReverseComparator" source="Collections.java">
-      <cov.data calls="0" hit_methods="0" total_methods="3" hit_lines="0" total_lines="5" />
-      <method name="&lt;init&gt;(java.util.Collections$1)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="compare(Object, Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-    </class>
-    <class name="HashMap$Entry" source="HashMap.java">
-      <cov.data calls="1902" hit_methods="3" total_methods="8" hit_lines="0" total_lines="19" />
-      <method name="hashCode()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="&lt;init&gt;(int, Object, Object, java.util.HashMap$Entry)">
-        <cov.data calls="1900" hit_lines="0" total_lines="6" />
-      </method>
-      <method name="equals(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="clone()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="toString()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getValue()">
-        <cov.data calls="1" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getKey()">
-        <cov.data calls="1" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="setValue(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-    </class>
-    <class name="AbstractSet" source="AbstractSet.java">
-      <cov.data calls="38" hit_methods="1" total_methods="4" hit_lines="0" total_lines="33" />
-      <method name="hashCode()">
-        <cov.data calls="0" hit_lines="0" total_lines="8" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="38" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="equals(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="9" />
-      </method>
-      <method name="removeAll(java.util.Collection)">
-        <cov.data calls="0" hit_lines="0" total_lines="14" />
-      </method>
-    </class>
-    <class name="Locale" source="Locale.java">
-      <cov.data calls="1595" hit_methods="11" total_methods="35" hit_lines="0" total_lines="408" />
-      <method name="hashCode()">
-        <cov.data calls="41" hit_lines="0" total_lines="7" />
-      </method>
-      <method name="&lt;init&gt;(String, String)">
-        <cov.data calls="2" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;(String, String, String)">
-        <cov.data calls="8" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="&lt;clinit&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="equals(Object)">
-        <cov.data calls="21" hit_lines="0" total_lines="10" />
-      </method>
-      <method name="clone()">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="toString()">
-        <cov.data calls="10" hit_lines="0" total_lines="11" />
-      </method>
-      <method name="toLowerCase(String)">
-        <cov.data calls="8" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="toUpperCase(String)">
-        <cov.data calls="16" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="getDefault()">
-        <cov.data calls="1479" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getLanguage()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="writeObject(java.io.ObjectOutputStream)">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="readObject(java.io.ObjectInputStream)">
-        <cov.data calls="0" hit_lines="0" total_lines="6" />
-      </method>
-      <method name="setDefault(java.util.Locale)">
-        <cov.data calls="0" hit_lines="0" total_lines="8" />
-      </method>
-      <method name="getAvailableLocales()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getISOCountries()">
-        <cov.data calls="0" hit_lines="0" total_lines="8" />
-      </method>
-      <method name="getISOLanguages()">
-        <cov.data calls="0" hit_lines="0" total_lines="8" />
-      </method>
-      <method name="getLanguagesForCountry(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="23" />
-      </method>
-      <method name="getCountry()">
-        <cov.data calls="1" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getVariant()">
-        <cov.data calls="1" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getISO3Language()">
-        <cov.data calls="0" hit_lines="0" total_lines="12" />
-      </method>
-      <method name="getISO3Country()">
-        <cov.data calls="0" hit_lines="0" total_lines="12" />
-      </method>
-      <method name="getDisplayLanguage()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getDisplayLanguage(java.util.Locale)">
-        <cov.data calls="0" hit_lines="0" total_lines="52" />
-      </method>
-      <method name="getDisplayCountry()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getDisplayCountry(java.util.Locale)">
-        <cov.data calls="0" hit_lines="0" total_lines="52" />
-      </method>
-      <method name="getDisplayVariant()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getDisplayVariant(java.util.Locale)">
-        <cov.data calls="0" hit_lines="0" total_lines="18" />
-      </method>
-      <method name="getDisplayName()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getDisplayName(java.util.Locale)">
-        <cov.data calls="0" hit_lines="0" total_lines="72" />
-      </method>
-      <method name="getDisplayVariantArray(java.util.ResourceBundle)">
-        <cov.data calls="0" hit_lines="0" total_lines="16" />
-      </method>
-      <method name="formatList(String[], String[])">
-        <cov.data calls="0" hit_lines="0" total_lines="23" />
-      </method>
-      <method name="composeList(java.text.MessageFormat, String[])">
-        <cov.data calls="0" hit_lines="0" total_lines="13" />
-      </method>
-      <method name="findStringMatch(String[][], String, String)">
-        <cov.data calls="0" hit_lines="0" total_lines="12" />
-      </method>
-      <method name="convertOldISOCodes(String)">
-        <cov.data calls="8" hit_lines="0" total_lines="9" />
-      </method>
-    </class>
-    <class name="AbstractMap" source="AbstractMap.java">
-      <cov.data calls="604" hit_methods="1" total_methods="16" hit_lines="0" total_lines="181" />
-      <method name="hashCode()">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="604" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="put(Object, Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="equals(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="23" />
-      </method>
-      <method name="toString()">
-        <cov.data calls="0" hit_lines="0" total_lines="13" />
-      </method>
-      <method name="get(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="15" />
-      </method>
-      <method name="values()">
-        <cov.data calls="0" hit_lines="0" total_lines="30" />
-      </method>
-      <method name="size()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="clear()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="remove(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="22" />
-      </method>
-      <method name="keySet()">
-        <cov.data calls="0" hit_lines="0" total_lines="30" />
-      </method>
-      <method name="entrySet()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="isEmpty()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="containsValue(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="15" />
-      </method>
-      <method name="containsKey(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="15" />
-      </method>
-      <method name="putAll(java.util.Map)">
-        <cov.data calls="0" hit_lines="0" total_lines="6" />
-      </method>
-    </class>
-    <class name="Iterator" source="Iterator.java">
-      <cov.data calls="0" hit_methods="0" total_methods="3" hit_lines="0" total_lines="0" />
-      <method name="next()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="remove()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="hasNext()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-    </class>
-    <class name="Hashtable$EmptyIterator" source="Hashtable.java">
-      <cov.data calls="0" hit_methods="0" total_methods="4" hit_lines="0" total_lines="5" />
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="next()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="remove()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="hasNext()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-    </class>
-    <class name="Hashtable$Entry" source="Hashtable.java">
-      <cov.data calls="2987" hit_methods="1" total_methods="8" hit_lines="0" total_lines="22" />
-      <method name="hashCode()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="&lt;init&gt;(int, Object, Object, java.util.Hashtable$Entry)">
-        <cov.data calls="2987" hit_lines="0" total_lines="6" />
-      </method>
-      <method name="equals(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="clone()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="toString()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getValue()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getKey()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="setValue(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="6" />
-      </method>
-    </class>
-    <class name="HashMap$EmptyHashIterator" source="HashMap.java">
-      <cov.data calls="3" hit_methods="1" total_methods="4" hit_lines="0" total_lines="6" />
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="next()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="remove()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="hasNext()">
-        <cov.data calls="3" hit_lines="0" total_lines="1" />
-      </method>
-    </class>
-    <class name="Dictionary" source="Dictionary.java">
-      <cov.data calls="551" hit_methods="1" total_methods="8" hit_lines="0" total_lines="2" />
-      <method name="&lt;init&gt;()">
-        <cov.data calls="551" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="put(Object, Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="get(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="size()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="remove(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="keys()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="isEmpty()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="elements()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-    </class>
-    <class name="ArrayList" source="ArrayList.java">
-      <cov.data calls="19553" hit_methods="7" total_methods="25" hit_lines="0" total_lines="177" />
-      <method name="&lt;init&gt;()">
-        <cov.data calls="72" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;(java.util.Collection)">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="&lt;init&gt;(int)">
-        <cov.data calls="72" hit_lines="0" total_lines="6" />
-      </method>
-      <method name="clone()">
-        <cov.data calls="0" hit_lines="0" total_lines="8" />
-      </method>
-      <method name="indexOf(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="10" />
-      </method>
-      <method name="lastIndexOf(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="10" />
-      </method>
-      <method name="get(int)">
-        <cov.data calls="9671" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="set(int, Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="add(int, Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="10" />
-      </method>
-      <method name="add(Object)">
-        <cov.data calls="33" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="size()">
-        <cov.data calls="1" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="toArray()">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="toArray(Object[])">
-        <cov.data calls="0" hit_lines="0" total_lines="10" />
-      </method>
-      <method name="contains(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="clear()">
-        <cov.data calls="0" hit_lines="0" total_lines="8" />
-      </method>
-      <method name="remove(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="12" />
-      </method>
-      <method name="isEmpty()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="writeObject(java.io.ObjectOutputStream)">
-        <cov.data calls="0" hit_lines="0" total_lines="9" />
-      </method>
-      <method name="readObject(java.io.ObjectInputStream)">
-        <cov.data calls="0" hit_lines="0" total_lines="10" />
-      </method>
-      <method name="trimToSize()">
-        <cov.data calls="0" hit_lines="0" total_lines="8" />
-      </method>
-      <method name="ensureCapacity(int)">
-        <cov.data calls="33" hit_lines="0" total_lines="11" />
-      </method>
-      <method name="addAll(java.util.Collection)">
-        <cov.data calls="0" hit_lines="0" total_lines="9" />
-      </method>
-      <method name="addAll(int, java.util.Collection)">
-        <cov.data calls="0" hit_lines="0" total_lines="18" />
-      </method>
-      <method name="removeRange(int, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="10" />
-      </method>
-      <method name="RangeCheck(int)">
-        <cov.data calls="9671" hit_lines="0" total_lines="4" />
-      </method>
-    </class>
-    <class name="AbstractCollection" source="AbstractCollection.java">
-      <cov.data calls="68522" hit_methods="2" total_methods="15" hit_lines="0" total_lines="98" />
-      <method name="&lt;init&gt;()">
-        <cov.data calls="68494" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="toString()">
-        <cov.data calls="28" hit_lines="0" total_lines="11" />
-      </method>
-      <method name="add(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="size()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="toArray()">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="toArray(Object[])">
-        <cov.data calls="0" hit_lines="0" total_lines="13" />
-      </method>
-      <method name="contains(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="11" />
-      </method>
-      <method name="clear()">
-        <cov.data calls="0" hit_lines="0" total_lines="6" />
-      </method>
-      <method name="remove(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="17" />
-      </method>
-      <method name="isEmpty()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="iterator()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="containsAll(java.util.Collection)">
-        <cov.data calls="0" hit_lines="0" total_lines="6" />
-      </method>
-      <method name="addAll(java.util.Collection)">
-        <cov.data calls="0" hit_lines="0" total_lines="7" />
-      </method>
-      <method name="removeAll(java.util.Collection)">
-        <cov.data calls="0" hit_lines="0" total_lines="9" />
-      </method>
-      <method name="retainAll(java.util.Collection)">
-        <cov.data calls="0" hit_lines="0" total_lines="9" />
-      </method>
-    </class>
-    <class name="Random" source="Random.java">
-      <cov.data calls="18" hit_methods="4" total_methods="12" hit_lines="0" total_lines="48" />
-      <method name="&lt;init&gt;(long)">
-        <cov.data calls="1" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="next(int)">
-        <cov.data calls="8" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="nextDouble()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="nextInt(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="12" />
-      </method>
-      <method name="nextInt()">
-        <cov.data calls="8" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="setSeed(long)">
-        <cov.data calls="1" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="nextBytes(byte[])">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="nextLong()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="nextBoolean()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="nextFloat()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="nextGaussian()">
-        <cov.data calls="0" hit_lines="0" total_lines="14" />
-      </method>
-    </class>
-    <class name="List" source="List.java">
-      <cov.data calls="0" hit_methods="0" total_methods="25" hit_lines="0" total_lines="0" />
-      <method name="hashCode()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="equals(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="indexOf(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="lastIndexOf(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="get(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="set(int, Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="add(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="add(int, Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="size()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="toArray()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="toArray(Object[])">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="contains(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="clear()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="remove(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="remove(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="isEmpty()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="iterator()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="containsAll(java.util.Collection)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="addAll(int, java.util.Collection)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="addAll(java.util.Collection)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="removeAll(java.util.Collection)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="retainAll(java.util.Collection)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="subList(int, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="listIterator(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="listIterator()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-    </class>
-    <class name="Map" source="Map.java">
-      <cov.data calls="0" hit_methods="0" total_methods="14" hit_lines="0" total_lines="0" />
-      <method name="hashCode()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="put(Object, Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="equals(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="get(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="values()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="size()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="clear()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="remove(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="keySet()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="entrySet()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="isEmpty()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="containsValue(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="containsKey(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="putAll(java.util.Map)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-    </class>
-    <class name="Hashtable$EmptyEnumerator" source="Hashtable.java">
-      <cov.data calls="31" hit_methods="1" total_methods="3" hit_lines="0" total_lines="4" />
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="nextElement()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="hasMoreElements()">
-        <cov.data calls="31" hit_lines="0" total_lines="1" />
-      </method>
-    </class>
-    <class name="Hashtable" source="Hashtable.java">
-      <cov.data calls="12660" hit_methods="17" total_methods="35" hit_lines="0" total_lines="258" />
-      <method name="hashCode()">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="471" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;(java.util.Map)">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="&lt;init&gt;(int)">
-        <cov.data calls="79" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;(int, float)">
-        <cov.data calls="551" hit_lines="0" total_lines="13" />
-      </method>
-      <method name="&lt;clinit&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="put(Object, Object)">
-        <cov.data calls="3040" hit_lines="0" total_lines="30" />
-      </method>
-      <method name="equals(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="23" />
-      </method>
-      <method name="clone()">
-        <cov.data calls="0" hit_lines="0" total_lines="14" />
-      </method>
-      <method name="toString()">
-        <cov.data calls="0" hit_lines="0" total_lines="13" />
-      </method>
-      <method name="get(Object)">
-        <cov.data calls="7038" hit_lines="0" total_lines="9" />
-      </method>
-      <method name="access$100(java.util.Hashtable, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="values()">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="size()">
-        <cov.data calls="1" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="contains(Object)">
-        <cov.data calls="10" hit_lines="0" total_lines="13" />
-      </method>
-      <method name="access$200(java.util.Hashtable)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="clear()">
-        <cov.data calls="236" hit_lines="0" total_lines="6" />
-      </method>
-      <method name="remove(Object)">
-        <cov.data calls="69" hit_lines="0" total_lines="18" />
-      </method>
-      <method name="access$400(java.util.Hashtable)">
-        <cov.data calls="1" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="keys()">
-        <cov.data calls="25" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="keySet()">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="entrySet()">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="isEmpty()">
-        <cov.data calls="21" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="elements()">
-        <cov.data calls="28" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="containsValue(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="containsKey(Object)">
-        <cov.data calls="927" hit_lines="0" total_lines="9" />
-      </method>
-      <method name="rehash()">
-        <cov.data calls="109" hit_lines="0" total_lines="21" />
-      </method>
-      <method name="putAll(java.util.Map)">
-        <cov.data calls="0" hit_lines="0" total_lines="6" />
-      </method>
-      <method name="getEnumeration(int)">
-        <cov.data calls="53" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="getIterator(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="writeObject(java.io.ObjectOutputStream)">
-        <cov.data calls="0" hit_lines="0" total_lines="15" />
-      </method>
-      <method name="readObject(java.io.ObjectInputStream)">
-        <cov.data calls="0" hit_lines="0" total_lines="26" />
-      </method>
-      <method name="access$508(java.util.Hashtable)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="access$210(java.util.Hashtable)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="access$500(java.util.Hashtable)">
-        <cov.data calls="1" hit_lines="0" total_lines="1" />
-      </method>
-    </class>
-    <class name="Enumeration" source="Enumeration.java">
-      <cov.data calls="0" hit_methods="0" total_methods="2" hit_lines="0" total_lines="0" />
-      <method name="nextElement()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="hasMoreElements()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-    </class>
-    <class name="Vector" source="Vector.java">
-      <cov.data calls="1425417" hit_methods="19" total_methods="47" hit_lines="0" total_lines="244" />
-      <method name="hashCode()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="elementAt(int)">
-        <cov.data calls="520671" hit_lines="0" total_lines="12" />
-      </method>
-      <method name="&lt;init&gt;(java.util.Collection)">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="68138" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;(int)">
-        <cov.data calls="68384" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;(int, int)">
-        <cov.data calls="68384" hit_lines="0" total_lines="7" />
-      </method>
-      <method name="equals(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="clone()">
-        <cov.data calls="0" hit_lines="0" total_lines="8" />
-      </method>
-      <method name="toString()">
-        <cov.data calls="28" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="indexOf(Object, int)">
-        <cov.data calls="191" hit_lines="0" total_lines="10" />
-      </method>
-      <method name="indexOf(Object)">
-        <cov.data calls="131" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="lastIndexOf(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="lastIndexOf(Object, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="13" />
-      </method>
-      <method name="get(int)">
-        <cov.data calls="110" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="set(int, Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="6" />
-      </method>
-      <method name="add(Object)">
-        <cov.data calls="1426" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="add(int, Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="addElement(Object)">
-        <cov.data calls="345956" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="size()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="toArray()">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="toArray(Object[])">
-        <cov.data calls="2" hit_lines="0" total_lines="10" />
-      </method>
-      <method name="contains(Object)">
-        <cov.data calls="60" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="copyInto(Object[])">
-        <cov.data calls="467" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="clear()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="remove(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="remove(int)">
-        <cov.data calls="388" hit_lines="0" total_lines="12" />
-      </method>
-      <method name="isEmpty()">
-        <cov.data calls="366" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="elements()">
-        <cov.data calls="1183" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="trimToSize()">
-        <cov.data calls="0" hit_lines="0" total_lines="8" />
-      </method>
-      <method name="ensureCapacity(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="ensureCapacityHelper(int)">
-        <cov.data calls="347382" hit_lines="0" total_lines="12" />
-      </method>
-      <method name="setSize(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="10" />
-      </method>
-      <method name="capacity()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="firstElement()">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="lastElement()">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="setElementAt(Object, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="6" />
-      </method>
-      <method name="removeElementAt(int)">
-        <cov.data calls="175" hit_lines="0" total_lines="15" />
-      </method>
-      <method name="insertElementAt(Object, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="10" />
-      </method>
-      <method name="removeElement(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="7" />
-      </method>
-      <method name="removeAllElements()">
-        <cov.data calls="1975" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="containsAll(java.util.Collection)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="addAll(int, java.util.Collection)">
-        <cov.data calls="0" hit_lines="0" total_lines="18" />
-      </method>
-      <method name="addAll(java.util.Collection)">
-        <cov.data calls="0" hit_lines="0" total_lines="9" />
-      </method>
-      <method name="removeAll(java.util.Collection)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="retainAll(java.util.Collection)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="subList(int, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="removeRange(int, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="10" />
-      </method>
-    </class>
-    <class name="StringTokenizer" source="StringTokenizer.java">
-      <cov.data calls="1690960" hit_methods="9" total_methods="12" hit_lines="0" total_lines="84" />
-      <method name="&lt;init&gt;(String, String, boolean)">
-        <cov.data calls="63980" hit_lines="0" total_lines="10" />
-      </method>
-      <method name="&lt;init&gt;(String, String)">
-        <cov.data calls="63944" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;(String)">
-        <cov.data calls="4" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="nextElement()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="hasMoreElements()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="countTokens()">
-        <cov.data calls="4" hit_lines="0" total_lines="10" />
-      </method>
-      <method name="nextToken()">
-        <cov.data calls="342747" hit_lines="0" total_lines="12" />
-      </method>
-      <method name="nextToken(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="7" />
-      </method>
-      <method name="setMaxDelimChar()">
-        <cov.data calls="63980" hit_lines="0" total_lines="13" />
-      </method>
-      <method name="skipDelimiters(int)">
-        <cov.data calls="406777" hit_lines="0" total_lines="11" />
-      </method>
-      <method name="scanToken(int)">
-        <cov.data calls="342763" hit_lines="0" total_lines="13" />
-      </method>
-      <method name="hasMoreTokens()">
-        <cov.data calls="406761" hit_lines="0" total_lines="2" />
-      </method>
-    </class>
-    <class name="Comparator" source="Comparator.java">
-      <cov.data calls="0" hit_methods="0" total_methods="2" hit_lines="0" total_lines="0" />
-      <method name="equals(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="compare(Object, Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-    </class>
-    <class name="Map$Entry" source="Map.java">
-      <cov.data calls="0" hit_methods="0" total_methods="5" hit_lines="0" total_lines="0" />
-      <method name="hashCode()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="equals(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="getValue()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="getKey()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="setValue(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-    </class>
-    <class name="EmptyStackException" source="EmptyStackException.java">
-      <cov.data calls="534" hit_methods="1" total_methods="1" hit_lines="2" total_lines="2" />
-      <method name="&lt;init&gt;()">
-        <cov.data calls="534" hit_lines="2" total_lines="2" />
-      </method>
-    </class>
-    <class name="BitSet" source="BitSet.java">
-      <cov.data calls="157" hit_methods="5" total_methods="20" hit_lines="18" total_lines="137" />
-      <method name="hashCode()">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;(int)">
-        <cov.data calls="1" hit_lines="5" total_lines="6" />
-      </method>
-      <method name="equals(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="17" />
-      </method>
-      <method name="clone()">
-        <cov.data calls="0" hit_lines="0" total_lines="6" />
-      </method>
-      <method name="toString()">
-        <cov.data calls="0" hit_lines="0" total_lines="11" />
-      </method>
-      <method name="length()">
-        <cov.data calls="0" hit_lines="0" total_lines="8" />
-      </method>
-      <method name="get(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="7" />
-      </method>
-      <method name="set(int)">
-        <cov.data calls="51" hit_lines="9" total_lines="10" />
-      </method>
-      <method name="size()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="clear(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="9" />
-      </method>
-      <method name="readObject(java.io.ObjectInputStream)">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="ensureCapacity(int)">
-        <cov.data calls="2" hit_lines="2" total_lines="6" />
-      </method>
-      <method name="unitIndex(int)">
-        <cov.data calls="52" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="bit(int)">
-        <cov.data calls="51" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="recalculateUnitsInUse()">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="andNot(java.util.BitSet)">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="and(java.util.BitSet)">
-        <cov.data calls="0" hit_lines="0" total_lines="11" />
-      </method>
-      <method name="or(java.util.BitSet)">
-        <cov.data calls="0" hit_lines="0" total_lines="11" />
-      </method>
-      <method name="xor(java.util.BitSet)">
-        <cov.data calls="0" hit_lines="0" total_lines="12" />
-      </method>
-    </class>
-    <class name="EventObject" source="EventObject.java">
-      <cov.data calls="2097" hit_methods="1" total_methods="3" hit_lines="4" total_lines="7" />
-      <method name="&lt;init&gt;(Object)">
-        <cov.data calls="2097" hit_lines="4" total_lines="5" />
-      </method>
-      <method name="toString()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getSource()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-    </class>
-    <class name="HashMap$3" source="HashMap.java">
-      <cov.data calls="12" hit_methods="2" total_methods="6" hit_lines="2" total_lines="34" />
-      <method name="&lt;init&gt;(java.util.HashMap)">
-        <cov.data calls="6" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="size()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="contains(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="11" />
-      </method>
-      <method name="clear()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="remove(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="18" />
-      </method>
-      <method name="iterator()">
-        <cov.data calls="6" hit_lines="1" total_lines="1" />
-      </method>
-    </class>
-    <class name="HashMap$HashIterator" source="HashMap.java">
-      <cov.data calls="52" hit_methods="3" total_methods="4" hit_lines="27" total_lines="48" />
-      <method name="&lt;init&gt;(java.util.HashMap, int)">
-        <cov.data calls="6" hit_lines="8" total_lines="8" />
-      </method>
-      <method name="next()">
-        <cov.data calls="20" hit_lines="11" total_lines="14" />
-      </method>
-      <method name="remove()">
-        <cov.data calls="0" hit_lines="0" total_lines="18" />
-      </method>
-      <method name="hasNext()">
-        <cov.data calls="26" hit_lines="8" total_lines="8" />
-      </method>
-    </class>
-    <class name="HashMap$1" source="HashMap.java">
-      <cov.data calls="6" hit_methods="2" total_methods="6" hit_lines="2" total_lines="9" />
-      <method name="&lt;init&gt;(java.util.HashMap)">
-        <cov.data calls="3" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="size()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="contains(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="clear()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="remove(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="iterator()">
-        <cov.data calls="3" hit_lines="1" total_lines="1" />
-      </method>
-    </class>
-    <class name="Hashtable$Enumerator" source="Hashtable.java">
-      <cov.data calls="1201" hit_methods="3" total_methods="6" hit_lines="27" total_lines="55" />
-      <method name="&lt;init&gt;(java.util.Hashtable, int, boolean)">
-        <cov.data calls="22" hit_lines="9" total_lines="9" />
-      </method>
-      <method name="next()">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="remove()">
-        <cov.data calls="0" hit_lines="0" total_lines="22" />
-      </method>
-      <method name="nextElement()">
-        <cov.data calls="581" hit_lines="10" total_lines="12" />
-      </method>
-      <method name="hasMoreElements()">
-        <cov.data calls="598" hit_lines="8" total_lines="8" />
-      </method>
-      <method name="hasNext()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-    </class>
-    <class name="Calendar" source="Calendar.java">
-      <cov.data calls="263389" hit_methods="22" total_methods="52" hit_lines="77" total_lines="202" />
-      <method name="hashCode()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="&lt;init&gt;(java.util.TimeZone, java.util.Locale)">
-        <cov.data calls="7" hit_lines="10" total_lines="10" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;clinit&gt;()">
-        <cov.data calls="1" hit_lines="2" total_lines="2" />
-      </method>
-      <method name="equals(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="6" />
-      </method>
-      <method name="clone()">
-        <cov.data calls="0" hit_lines="0" total_lines="10" />
-      </method>
-      <method name="toString()">
-        <cov.data calls="0" hit_lines="0" total_lines="21" />
-      </method>
-      <method name="get(int)">
-        <cov.data calls="5720" hit_lines="2" total_lines="2" />
-      </method>
-      <method name="set(int, int, int, int, int, int)">
-        <cov.data calls="951" hit_lines="7" total_lines="7" />
-      </method>
-      <method name="set(int, int, int, int, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="6" />
-      </method>
-      <method name="set(int, int)">
-        <cov.data calls="5710" hit_lines="6" total_lines="6" />
-      </method>
-      <method name="set(int, int, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="add(int, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="isSet(int)">
-        <cov.data calls="19093" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="getInstance(java.util.Locale)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getInstance(java.util.TimeZone, java.util.Locale)">
-        <cov.data calls="4" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="getInstance()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getInstance(java.util.TimeZone)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="clear()">
-        <cov.data calls="951" hit_lines="7" total_lines="7" />
-      </method>
-      <method name="clear(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="7" />
-      </method>
-      <method name="writeObject(java.io.ObjectOutputStream)">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="readObject(java.io.ObjectInputStream)">
-        <cov.data calls="0" hit_lines="0" total_lines="11" />
-      </method>
-      <method name="getAvailableLocales()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="setTime(java.util.Date)">
-        <cov.data calls="12" hit_lines="2" total_lines="2" />
-      </method>
-      <method name="getTime()">
-        <cov.data calls="4" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="setTimeZone(java.util.TimeZone)">
-        <cov.data calls="6657" hit_lines="3" total_lines="3" />
-      </method>
-      <method name="getTimeZone()">
-        <cov.data calls="12405" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="setLenient(boolean)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="isLenient()">
-        <cov.data calls="2865" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="getFirstDayOfWeek()">
-        <cov.data calls="17175" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="getMinimalDaysInFirstWeek()">
-        <cov.data calls="11450" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="getMaximum(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="getLeastMaximum(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="before(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="computeTime()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="computeFields()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="getTimeInMillis()">
-        <cov.data calls="955" hit_lines="2" total_lines="2" />
-      </method>
-      <method name="setTimeInMillis(long)">
-        <cov.data calls="5725" hit_lines="8" total_lines="8" />
-      </method>
-      <method name="internalGet(int)">
-        <cov.data calls="63963" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="internalSet(int, int)">
-        <cov.data calls="103055" hit_lines="2" total_lines="2" />
-      </method>
-      <method name="complete()">
-        <cov.data calls="5724" hit_lines="3" total_lines="6" />
-      </method>
-      <method name="after(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="roll(int, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="7" />
-      </method>
-      <method name="roll(int, boolean)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="setFirstDayOfWeek(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="setMinimalDaysInFirstWeek(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="getMinimum(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="getGreatestMinimum(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="getActualMinimum(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="14" />
-      </method>
-      <method name="getActualMaximum(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="16" />
-      </method>
-      <method name="setWeekCountData(java.util.Locale)">
-        <cov.data calls="7" hit_lines="11" total_lines="11" />
-      </method>
-      <method name="updateTime()">
-        <cov.data calls="955" hit_lines="4" total_lines="4" />
-      </method>
-    </class>
-    <class name="GregorianCalendar" source="GregorianCalendar.java">
-      <cov.data calls="133644" hit_methods="23" total_methods="47" hit_lines="198" total_lines="514" />
-      <method name="hashCode()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="&lt;init&gt;(java.util.TimeZone)">
-        <cov.data calls="1" hit_lines="2" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;(java.util.Locale)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;(java.util.TimeZone, java.util.Locale)">
-        <cov.data calls="7" hit_lines="6" total_lines="6" />
-      </method>
-      <method name="&lt;init&gt;(int, int, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="9" />
-      </method>
-      <method name="&lt;init&gt;(int, int, int, int, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="11" />
-      </method>
-      <method name="&lt;init&gt;(int, int, int, int, int, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="12" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="2" hit_lines="2" total_lines="2" />
-      </method>
-      <method name="&lt;clinit&gt;()">
-        <cov.data calls="1" hit_lines="7" total_lines="7" />
-      </method>
-      <method name="equals(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="add(int, int)">
-        <cov.data calls="4" hit_lines="10" total_lines="59" />
-      </method>
-      <method name="getMaximum(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getLeastMaximum(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="computeTime()">
-        <cov.data calls="955" hit_lines="37" total_lines="46" />
-      </method>
-      <method name="computeFields()">
-        <cov.data calls="5725" hit_lines="31" total_lines="40" />
-      </method>
-      <method name="roll(int, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="95" />
-      </method>
-      <method name="roll(int, boolean)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="getMinimum(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getGreatestMinimum(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getActualMinimum(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getActualMaximum(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="19" />
-      </method>
-      <method name="setGregorianChange(java.util.Date)">
-        <cov.data calls="0" hit_lines="0" total_lines="10" />
-      </method>
-      <method name="getGregorianChange()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="isLeapYear(int)">
-        <cov.data calls="13364" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="inDaylightTime()">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="getISOYear()">
-        <cov.data calls="0" hit_lines="0" total_lines="9" />
-      </method>
-      <method name="timeToFields(long, boolean)">
-        <cov.data calls="6680" hit_lines="41" total_lines="58" />
-      </method>
-      <method name="computeJulianDay(boolean, int)">
-        <cov.data calls="955" hit_lines="32" total_lines="59" />
-      </method>
-      <method name="millisToJulianDay(long)">
-        <cov.data calls="6680" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="julianDayToMillis(long)">
-        <cov.data calls="955" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="julianDayToDayOfWeek(long)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="floorDivide(int, int, int[])">
-        <cov.data calls="20040" hit_lines="3" total_lines="6" />
-      </method>
-      <method name="floorDivide(long, int, int[])">
-        <cov.data calls="7635" hit_lines="6" total_lines="6" />
-      </method>
-      <method name="floorDivide(int, int)">
-        <cov.data calls="2865" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="floorDivide(long, long)">
-        <cov.data calls="6680" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="aggregateStamp(int, int)">
-        <cov.data calls="2865" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="weekNumber(int, int)">
-        <cov.data calls="5725" hit_lines="5" total_lines="5" />
-      </method>
-      <method name="monthLength(int, int)">
-        <cov.data calls="13364" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="monthLength(int)">
-        <cov.data calls="13364" hit_lines="3" total_lines="4" />
-      </method>
-      <method name="prevMonthLength(int)">
-        <cov.data calls="6680" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="yearLength(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="yearLength()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="pinDayOfMonth()">
-        <cov.data calls="4" hit_lines="4" total_lines="4" />
-      </method>
-      <method name="validateFields()">
-        <cov.data calls="0" hit_lines="0" total_lines="13" />
-      </method>
-      <method name="boundsCheck(int, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getEpochDay()">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="internalGetEra()">
-        <cov.data calls="19093" hit_lines="1" total_lines="1" />
-      </method>
-    </class>
-    <class name="NoSuchElementException" source="NoSuchElementException.java">
-      <cov.data calls="0" hit_methods="0" total_methods="2" hit_lines="0" total_lines="4" />
-      <method name="&lt;init&gt;(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-    </class>
-    <class name="Vector$1" source="Vector.java">
-      <cov.data calls="5661" hit_methods="3" total_methods="3" hit_lines="6" total_lines="8" />
-      <method name="&lt;init&gt;(java.util.Vector)">
-        <cov.data calls="1183" hit_lines="2" total_lines="2" />
-      </method>
-      <method name="nextElement()">
-        <cov.data calls="1595" hit_lines="3" total_lines="5" />
-      </method>
-      <method name="hasMoreElements()">
-        <cov.data calls="2883" hit_lines="1" total_lines="1" />
-      </method>
-    </class>
-    <class name="AbstractList$Itr" source="AbstractList.java">
-      <cov.data calls="276" hit_methods="4" total_methods="6" hit_lines="11" total_lines="25" />
-      <method name="&lt;init&gt;(java.util.AbstractList, java.util.AbstractList$1)">
-        <cov.data calls="28" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="&lt;init&gt;(java.util.AbstractList)">
-        <cov.data calls="28" hit_lines="4" total_lines="4" />
-      </method>
-      <method name="next()">
-        <cov.data calls="110" hit_lines="4" total_lines="6" />
-      </method>
-      <method name="remove()">
-        <cov.data calls="0" hit_lines="0" total_lines="10" />
-      </method>
-      <method name="hasNext()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="checkForComodification()">
-        <cov.data calls="110" hit_lines="2" total_lines="3" />
-      </method>
-    </class>
-    <class name="Date" source="Date.java">
-      <cov.data calls="14326" hit_methods="13" total_methods="40" hit_lines="42" total_lines="259" />
-      <method name="hashCode()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="compareTo(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="compareTo(java.util.Date)">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="&lt;init&gt;(int, int, int, int, int, int)">
-        <cov.data calls="951" hit_lines="9" total_lines="11" />
-      </method>
-      <method name="&lt;init&gt;(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;(int, int, int, int, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;(int, int, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;(long)">
-        <cov.data calls="971" hit_lines="4" total_lines="4" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="16" hit_lines="2" total_lines="2" />
-      </method>
-      <method name="&lt;clinit&gt;()">
-        <cov.data calls="1" hit_lines="7" total_lines="7" />
-      </method>
-      <method name="equals(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="clone()">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="toString()">
-        <cov.data calls="0" hit_lines="0" total_lines="10" />
-      </method>
-      <method name="getField(int)">
-        <cov.data calls="5706" hit_lines="7" total_lines="14" />
-      </method>
-      <method name="writeObject(java.io.ObjectOutputStream)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="readObject(java.io.ObjectInputStream)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="setField(int, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="setTime(long)">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="getTime()">
-        <cov.data calls="974" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="getYear()">
-        <cov.data calls="951" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="getMonth()">
-        <cov.data calls="951" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="getDate()">
-        <cov.data calls="951" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="getHours()">
-        <cov.data calls="951" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="getMinutes()">
-        <cov.data calls="951" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="getSeconds()">
-        <cov.data calls="951" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="parse(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="120" />
-      </method>
-      <method name="setDate(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="before(java.util.Date)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="after(java.util.Date)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="setSeconds(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="setHours(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="setMinutes(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="UTC(int, int, int, int, int, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="7" />
-      </method>
-      <method name="setYear(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="setMonth(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="getDay()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="toLocaleString()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="toGMTString()">
-        <cov.data calls="0" hit_lines="0" total_lines="8" />
-      </method>
-      <method name="getTimezoneOffset()">
-        <cov.data calls="0" hit_lines="0" total_lines="15" />
-      </method>
-      <method name="makeStaticCalendars()">
-        <cov.data calls="1" hit_lines="6" total_lines="6" />
-      </method>
-    </class>
-    <class name="ResourceBundle" source="ResourceBundle.java">
-      <cov.data calls="1532" hit_methods="17" total_methods="25" hit_lines="145" total_lines="213" />
-      <method name="&lt;init&gt;()">
-        <cov.data calls="8" hit_lines="4" total_lines="4" />
-      </method>
-      <method name="&lt;clinit&gt;()">
-        <cov.data calls="1" hit_lines="4" total_lines="4" />
-      </method>
-      <method name="class$(String)">
-        <cov.data calls="1" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="getBundle(String, java.util.Locale)">
-        <cov.data calls="10" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="getBundle(String, java.util.Locale, ClassLoader)">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="getBundle(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getObject(String)">
-        <cov.data calls="1380" hit_lines="6" total_lines="7" />
-      </method>
-      <method name="getLoader()">
-        <cov.data calls="10" hit_lines="6" total_lines="6" />
-      </method>
-      <method name="getStringArray(String)">
-        <cov.data calls="28" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="setLocale(String, String)">
-        <cov.data calls="8" hit_lines="16" total_lines="20" />
-      </method>
-      <method name="setParent(java.util.ResourceBundle)">
-        <cov.data calls="8" hit_lines="2" total_lines="2" />
-      </method>
-      <method name="getString(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getLocale()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getKeys()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="getClassContext()">
-        <cov.data calls="10" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="getBundleImpl(String, java.util.Locale, ClassLoader)">
-        <cov.data calls="10" hit_lines="30" total_lines="50" />
-      </method>
-      <method name="propagate(ClassLoader, java.util.Vector, java.util.Vector, Object)">
-        <cov.data calls="4" hit_lines="7" total_lines="7" />
-      </method>
-      <method name="throwMissingResourceException(String, java.util.Locale)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="cleanUpConstructionList()">
-        <cov.data calls="0" hit_lines="0" total_lines="6" />
-      </method>
-      <method name="findBundle(ClassLoader, String, String, Object, Object)">
-        <cov.data calls="12" hit_lines="25" total_lines="38" />
-      </method>
-      <method name="calculateBundleNames(String, java.util.Locale)">
-        <cov.data calls="4" hit_lines="18" total_lines="24" />
-      </method>
-      <method name="findBundleInCache(ClassLoader, String)">
-        <cov.data calls="18" hit_lines="5" total_lines="6" />
-      </method>
-      <method name="putBundleInCache(ClassLoader, String, Object)">
-        <cov.data calls="10" hit_lines="7" total_lines="8" />
-      </method>
-      <method name="loadBundle(ClassLoader, String)">
-        <cov.data calls="10" hit_lines="12" total_lines="21" />
-      </method>
-      <method name="handleGetObject(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-    </class>
-    <class name="ResourceBundle$ResourceCacheKey" source="ResourceBundle.java">
-      <cov.data calls="270" hit_methods="7" total_methods="7" hit_lines="20" total_lines="27" />
-      <method name="hashCode()">
-        <cov.data calls="78" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="&lt;init&gt;(java.util.ResourceBundle$1)">
-        <cov.data calls="1" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="1" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="equals(Object)">
-        <cov.data calls="26" hit_lines="7" total_lines="13" />
-      </method>
-      <method name="clone()">
-        <cov.data calls="20" hit_lines="1" total_lines="2" />
-      </method>
-      <method name="clear()">
-        <cov.data calls="48" hit_lines="2" total_lines="2" />
-      </method>
-      <method name="setKeyValues(ClassLoader, String)">
-        <cov.data calls="96" hit_lines="7" total_lines="7" />
-      </method>
-    </class>
-    <class name="ListResourceBundle" source="ListResourceBundle.java">
-      <cov.data calls="82" hit_methods="3" total_methods="6" hit_lines="13" total_lines="24" />
-      <method name="&lt;init&gt;()">
-        <cov.data calls="5" hit_lines="3" total_lines="3" />
-      </method>
-      <method name="access$000(java.util.ListResourceBundle)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getKeys()">
-        <cov.data calls="0" hit_lines="0" total_lines="9" />
-      </method>
-      <method name="handleGetObject(String)">
-        <cov.data calls="72" hit_lines="3" total_lines="3" />
-      </method>
-      <method name="getContents()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="loadLookup()">
-        <cov.data calls="5" hit_lines="7" total_lines="8" />
-      </method>
-    </class>
-    <class name="ResourceBundle$1" source="ResourceBundle.java">
-      <cov.data calls="4" hit_methods="2" total_methods="2" hit_lines="3" total_lines="4" />
-      <method name="&lt;init&gt;(ClassLoader, String)">
-        <cov.data calls="2" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="run()">
-        <cov.data calls="2" hit_lines="2" total_lines="3" />
-      </method>
-    </class>
-    <class name="TimeZone" source="TimeZone.java">
-      <cov.data calls="14319" hit_methods="8" total_methods="24" hit_lines="28" total_lines="99" />
-      <method name="&lt;init&gt;()">
-        <cov.data calls="328" hit_lines="2" total_lines="2" />
-      </method>
-      <method name="&lt;clinit&gt;()">
-        <cov.data calls="1" hit_lines="4" total_lines="4" />
-      </method>
-      <method name="clone()">
-        <cov.data calls="6667" hit_lines="3" total_lines="4" />
-      </method>
-      <method name="getDefault()">
-        <cov.data calls="6664" hit_lines="11" total_lines="12" />
-      </method>
-      <method name="class$(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getOffset(int, int, int, int, int, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="getOffset(int, int, int, int, int, int, int, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="setDefault(java.util.TimeZone)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="getDisplayName(boolean, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getDisplayName(boolean, int, java.util.Locale)">
-        <cov.data calls="0" hit_lines="0" total_lines="15" />
-      </method>
-      <method name="getDisplayName()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getDisplayName(java.util.Locale)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getTimeZone(String)">
-        <cov.data calls="3" hit_lines="4" total_lines="4" />
-      </method>
-      <method name="getID()">
-        <cov.data calls="327" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="getRawOffset()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="useDaylightTime()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="inDaylightTime(java.util.Date)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="setRawOffset(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="setID(String)">
-        <cov.data calls="328" hit_lines="3" total_lines="4" />
-      </method>
-      <method name="getAvailableIDs(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="7" />
-      </method>
-      <method name="getAvailableIDs()">
-        <cov.data calls="0" hit_lines="0" total_lines="7" />
-      </method>
-      <method name="getSystemTimeZoneID(String, String)">
-        <cov.data calls="1" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="hasSameRules(java.util.TimeZone)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="parseCustomTimeZone(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="31" />
-      </method>
-    </class>
-    <class name="SimpleTimeZone" source="SimpleTimeZone.java">
-      <cov.data calls="34071" hit_methods="10" total_methods="36" hit_lines="83" total_lines="276" />
-      <method name="hashCode()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="&lt;init&gt;(int, String, int, int, int, int, int, int, int, int, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;(int, String, int, int, int, int, int, int, int, int, int, int, int)">
-        <cov.data calls="119" hit_lines="20" total_lines="21" />
-      </method>
-      <method name="&lt;init&gt;(int, String, int, int, int, int, int, int, int, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;(int, String)">
-        <cov.data calls="209" hit_lines="8" total_lines="8" />
-      </method>
-      <method name="&lt;clinit&gt;()">
-        <cov.data calls="1" hit_lines="3" total_lines="3" />
-      </method>
-      <method name="equals(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="6" />
-      </method>
-      <method name="clone()">
-        <cov.data calls="6667" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="toString()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="writeObject(java.io.ObjectOutputStream)">
-        <cov.data calls="0" hit_lines="0" total_lines="10" />
-      </method>
-      <method name="readObject(java.io.ObjectInputStream)">
-        <cov.data calls="0" hit_lines="0" total_lines="15" />
-      </method>
-      <method name="getOffset(int, int, int, int, int, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="8" />
-      </method>
-      <method name="getOffset(int, int, int, int, int, int, int, int)">
-        <cov.data calls="6680" hit_lines="10" total_lines="12" />
-      </method>
-      <method name="getRawOffset()">
-        <cov.data calls="6680" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="getDSTSavings()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="useDaylightTime()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="inDaylightTime(java.util.Date)">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="setRawOffset(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="hasSameRules(java.util.TimeZone)">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="setStartYear(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="setStartRule(int, int, int, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="7" />
-      </method>
-      <method name="setStartRule(int, int, int, int, boolean)">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="setStartRule(int, int, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="setEndRule(int, int, int, int, boolean)">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="setEndRule(int, int, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="setEndRule(int, int, int, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="7" />
-      </method>
-      <method name="compareToRule(int, int, int, int, int, int, int, int, int, int, int, int)">
-        <cov.data calls="13358" hit_lines="5" total_lines="33" />
-      </method>
-      <method name="setDSTSavings(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="decodeRules()">
-        <cov.data calls="119" hit_lines="3" total_lines="3" />
-      </method>
-      <method name="decodeStartRule()">
-        <cov.data calls="119" hit_lines="16" total_lines="23" />
-      </method>
-      <method name="decodeEndRule()">
-        <cov.data calls="119" hit_lines="16" total_lines="23" />
-      </method>
-      <method name="makeRulesCompatible()">
-        <cov.data calls="0" hit_lines="0" total_lines="37" />
-      </method>
-      <method name="packRules()">
-        <cov.data calls="0" hit_lines="0" total_lines="8" />
-      </method>
-      <method name="unpackRules(byte[])">
-        <cov.data calls="0" hit_lines="0" total_lines="8" />
-      </method>
-      <method name="packTimes()">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="unpackTimes(int[])">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-    </class>
-    <class name="TimeZone$1" source="TimeZone.java">
-      <cov.data calls="2" hit_methods="2" total_methods="2" hit_lines="3" total_lines="3" />
-      <method name="&lt;init&gt;(String)">
-        <cov.data calls="1" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="run()">
-        <cov.data calls="1" hit_lines="2" total_lines="2" />
-      </method>
-    </class>
-    <class name="TimeZoneData" source="TimeZone.java">
-      <cov.data calls="4" hit_methods="2" total_methods="3" hit_lines="7" total_lines="8" />
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="&lt;clinit&gt;()">
-        <cov.data calls="1" hit_lines="5" total_lines="5" />
-      </method>
-      <method name="get(String)">
-        <cov.data calls="3" hit_lines="2" total_lines="2" />
-      </method>
-    </class>
-  </package>
-  <package name="java.lang">
-    <cov.data calls="8076788" hit_methods="214" total_methods="807" hit_lines="45" total_lines="3726" />
-    <class name="ThreadGroup" source="ThreadGroup.java">
-      <cov.data calls="4" hit_methods="2" total_methods="35" hit_lines="0" total_lines="370" />
-      <method name="&lt;init&gt;(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;(ThreadGroup, String)">
-        <cov.data calls="0" hit_lines="0" total_lines="12" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="uncaughtException(Thread, Throwable)">
-        <cov.data calls="0" hit_lines="0" total_lines="6" />
-      </method>
-      <method name="toString()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getName()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="add(Thread)">
-        <cov.data calls="2" hit_lines="0" total_lines="18" />
-      </method>
-      <method name="add(ThreadGroup)">
-        <cov.data calls="0" hit_lines="0" total_lines="18" />
-      </method>
-      <method name="getParent()">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="setDaemon(boolean)">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="remove(ThreadGroup)">
-        <cov.data calls="0" hit_lines="0" total_lines="22" />
-      </method>
-      <method name="remove(Thread)">
-        <cov.data calls="0" hit_lines="0" total_lines="21" />
-      </method>
-      <method name="stop()">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="interrupt()">
-        <cov.data calls="0" hit_lines="0" total_lines="17" />
-      </method>
-      <method name="destroy()">
-        <cov.data calls="0" hit_lines="0" total_lines="27" />
-      </method>
-      <method name="suspend()">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="resume()">
-        <cov.data calls="0" hit_lines="0" total_lines="17" />
-      </method>
-      <method name="activeCount()">
-        <cov.data calls="0" hit_lines="0" total_lines="17" />
-      </method>
-      <method name="enumerate(ThreadGroup[], int, boolean)">
-        <cov.data calls="0" hit_lines="0" total_lines="30" />
-      </method>
-      <method name="enumerate(ThreadGroup[])">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="enumerate(Thread[])">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="enumerate(ThreadGroup[], boolean)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="enumerate(Thread[], boolean)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="enumerate(Thread[], int, boolean)">
-        <cov.data calls="0" hit_lines="0" total_lines="31" />
-      </method>
-      <method name="isDaemon()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="checkAccess()">
-        <cov.data calls="2" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="getMaxPriority()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="isDestroyed()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="setMaxPriority(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="19" />
-      </method>
-      <method name="parentOf(ThreadGroup)">
-        <cov.data calls="0" hit_lines="0" total_lines="6" />
-      </method>
-      <method name="activeGroupCount()">
-        <cov.data calls="0" hit_lines="0" total_lines="17" />
-      </method>
-      <method name="stopOrSuspend(boolean)">
-        <cov.data calls="0" hit_lines="0" total_lines="25" />
-      </method>
-      <method name="list(java.io.PrintStream, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="24" />
-      </method>
-      <method name="list()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="allowThreadSuspension(boolean)">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-    </class>
-    <class name="ThreadLocal" source="ThreadLocal.java">
-      <cov.data calls="959" hit_methods="4" total_methods="4" hit_lines="0" total_lines="20" />
-      <method name="&lt;init&gt;()">
-        <cov.data calls="1" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="get()">
-        <cov.data calls="952" hit_lines="0" total_lines="10" />
-      </method>
-      <method name="set(Object)">
-        <cov.data calls="5" hit_lines="0" total_lines="6" />
-      </method>
-      <method name="initialValue()">
-        <cov.data calls="1" hit_lines="0" total_lines="1" />
-      </method>
-    </class>
-    <class name="LinkageError" source="LinkageError.java">
-      <cov.data calls="0" hit_methods="0" total_methods="2" hit_lines="0" total_lines="4" />
-      <method name="&lt;init&gt;(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-    </class>
-    <class name="ClassCastException" source="ClassCastException.java">
-      <cov.data calls="0" hit_methods="0" total_methods="2" hit_lines="0" total_lines="4" />
-      <method name="&lt;init&gt;(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-    </class>
-    <class name="Comparable" source="Comparable.java">
-      <cov.data calls="0" hit_methods="0" total_methods="1" hit_lines="0" total_lines="0" />
-      <method name="compareTo(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-    </class>
-    <class name="Boolean" source="Boolean.java">
-      <cov.data calls="14" hit_methods="3" total_methods="10" hit_lines="0" total_lines="22" />
-      <method name="hashCode()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="&lt;init&gt;(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;(boolean)">
-        <cov.data calls="12" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="&lt;clinit&gt;()">
-        <cov.data calls="1" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="equals(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="toString()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="valueOf(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="booleanValue()">
-        <cov.data calls="1" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getBoolean(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="7" />
-      </method>
-      <method name="toBoolean(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-    </class>
-    <class name="StrictMath" source="StrictMath.java">
-      <cov.data calls="2" hit_methods="2" total_methods="35" hit_lines="0" total_lines="43" />
-      <method name="sin(double)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="cos(double)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="tan(double)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="atan2(double, double)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="sqrt(double)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="&lt;clinit&gt;()">
-        <cov.data calls="1" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="min(float, float)">
-        <cov.data calls="0" hit_lines="0" total_lines="6" />
-      </method>
-      <method name="min(long, long)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="min(int, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="min(double, double)">
-        <cov.data calls="0" hit_lines="0" total_lines="6" />
-      </method>
-      <method name="max(double, double)">
-        <cov.data calls="0" hit_lines="0" total_lines="6" />
-      </method>
-      <method name="max(float, float)">
-        <cov.data calls="0" hit_lines="0" total_lines="6" />
-      </method>
-      <method name="max(long, long)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="max(int, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="asin(double)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="acos(double)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="atan(double)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="toRadians(double)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="toDegrees(double)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="exp(double)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="log(double)">
-        <cov.data calls="1" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="IEEEremainder(double, double)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="ceil(double)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="floor(double)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="rint(double)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="pow(double, double)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="round(float)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="round(double)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="initRNG()">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="random()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="abs(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="abs(long)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="abs(float)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="abs(double)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-    </class>
-    <class name="Integer" source="Integer.java">
-      <cov.data calls="28" hit_methods="8" total_methods="28" hit_lines="0" total_lines="227" />
-      <method name="hashCode()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="compareTo(Integer)">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="compareTo(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="&lt;init&gt;(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="&lt;init&gt;(int)">
-        <cov.data calls="1" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="&lt;clinit&gt;()">
-        <cov.data calls="1" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="equals(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="toString(int, int)">
-        <cov.data calls="8" hit_lines="0" total_lines="27" />
-      </method>
-      <method name="toString(int)">
-        <cov.data calls="8" hit_lines="0" total_lines="41" />
-      </method>
-      <method name="toString()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="toHexString(int)">
-        <cov.data calls="1" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="valueOf(String, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="valueOf(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="byteValue()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="shortValue()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="intValue()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="longValue()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="floatValue()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="doubleValue()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="decode(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="40" />
-      </method>
-      <method name="parseInt(String)">
-        <cov.data calls="4" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="parseInt(String, int)">
-        <cov.data calls="4" hit_lines="0" total_lines="64" />
-      </method>
-      <method name="toOctalString(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="toBinaryString(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="toUnsignedString(int, int)">
-        <cov.data calls="1" hit_lines="0" total_lines="10" />
-      </method>
-      <method name="getInteger(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getInteger(String, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="getInteger(String, Integer)">
-        <cov.data calls="0" hit_lines="0" total_lines="13" />
-      </method>
-    </class>
-    <class name="Shutdown" source="Shutdown.java">
-      <cov.data calls="6" hit_methods="6" total_methods="12" hit_lines="0" total_lines="113" />
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="&lt;clinit&gt;()">
-        <cov.data calls="1" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="exit(int)">
-        <cov.data calls="1" hit_lines="0" total_lines="34" />
-      </method>
-      <method name="shutdown()">
-        <cov.data calls="0" hit_lines="0" total_lines="14" />
-      </method>
-      <method name="add(Thread)">
-        <cov.data calls="0" hit_lines="0" total_lines="17" />
-      </method>
-      <method name="class$(String)">
-        <cov.data calls="1" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="remove(Thread)">
-        <cov.data calls="0" hit_lines="0" total_lines="15" />
-      </method>
-      <method name="runAllFinalizers()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="setRunFinalizersOnExit(boolean)">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="runHooks()">
-        <cov.data calls="1" hit_lines="0" total_lines="12" />
-      </method>
-      <method name="halt(int)">
-        <cov.data calls="1" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="sequence()">
-        <cov.data calls="1" hit_lines="0" total_lines="14" />
-      </method>
-    </class>
-    <class name="ClassLoader" source="ClassLoader.java">
-      <cov.data calls="9689" hit_methods="27" total_methods="51" hit_lines="0" total_lines="477" />
-      <method name="&lt;init&gt;(ClassLoader)">
-        <cov.data calls="0" hit_lines="0" total_lines="8" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="29" hit_lines="0" total_lines="8" />
-      </method>
-      <method name="&lt;clinit&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="loadClass(String, boolean)">
-        <cov.data calls="1176" hit_lines="0" total_lines="18" />
-      </method>
-      <method name="loadClass(String)">
-        <cov.data calls="618" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="loadClassInternal(String)">
-        <cov.data calls="547" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="findNative(ClassLoader, String)">
-        <cov.data calls="27" hit_lines="0" total_lines="12" />
-      </method>
-      <method name="addClass(Class)">
-        <cov.data calls="442" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="getSystemClassLoader()">
-        <cov.data calls="41" hit_lines="0" total_lines="20" />
-      </method>
-      <method name="checkPackageAccess(Class, java.security.ProtectionDomain)">
-        <cov.data calls="296" hit_lines="0" total_lines="15" />
-      </method>
-      <method name="getPackage(String)">
-        <cov.data calls="637" hit_lines="0" total_lines="14" />
-      </method>
-      <method name="setSigners(Class, Object[])">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="getResourceAsStream(String)">
-        <cov.data calls="10" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="getResource(String)">
-        <cov.data calls="44" hit_lines="0" total_lines="9" />
-      </method>
-      <method name="getCallerClassLoader()">
-        <cov.data calls="593" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="getGetClassLoaderPerm()">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="isAncestor(ClassLoader)">
-        <cov.data calls="0" hit_lines="0" total_lines="8" />
-      </method>
-      <method name="getSystemResourceAsStream(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="getSystemResource(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="findClass(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="defineClass(String, byte[], int, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="defineClass(String, byte[], int, int, java.security.ProtectionDomain)">
-        <cov.data calls="442" hit_lines="0" total_lines="19" />
-      </method>
-      <method name="defineClass(byte[], int, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="checkCerts(String, java.security.CodeSource)">
-        <cov.data calls="442" hit_lines="0" total_lines="29" />
-      </method>
-      <method name="compareCerts(java.security.cert.Certificate[], java.security.cert.Certificate[])">
-        <cov.data calls="377" hit_lines="0" total_lines="35" />
-      </method>
-      <method name="resolveClass(Class)">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="findSystemClass(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="6" />
-      </method>
-      <method name="getParent()">
-        <cov.data calls="0" hit_lines="0" total_lines="10" />
-      </method>
-      <method name="findBootstrapClass0(String)">
-        <cov.data calls="586" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="defineClass0(String, byte[], int, int, java.security.ProtectionDomain)">
-        <cov.data calls="442" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="resolveClass0(Class)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="findBootstrapClass(String)">
-        <cov.data calls="586" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="check()">
-        <cov.data calls="1028" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="findLoadedClass(String)">
-        <cov.data calls="1204" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="getResources(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="9" />
-      </method>
-      <method name="findResources(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="findResource(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getBootstrapResource(String)">
-        <cov.data calls="22" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="getSystemResources(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="getBootstrapResources(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="getBootstrapClassPath()">
-        <cov.data calls="22" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="definePackage(String, String, String, String, String, String, String, java.net.URL)">
-        <cov.data calls="65" hit_lines="0" total_lines="11" />
-      </method>
-      <method name="getPackages()">
-        <cov.data calls="0" hit_lines="0" total_lines="18" />
-      </method>
-      <method name="findLibrary(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getDefaultDomain()">
-        <cov.data calls="0" hit_lines="0" total_lines="20" />
-      </method>
-      <method name="initializePath(String)">
-        <cov.data calls="2" hit_lines="0" total_lines="29" />
-      </method>
-      <method name="loadLibrary(Class, String, boolean)">
-        <cov.data calls="5" hit_lines="0" total_lines="43" />
-      </method>
-      <method name="loadLibrary0(Class, java.io.File)">
-        <cov.data calls="5" hit_lines="0" total_lines="78" />
-      </method>
-      <method name="access$000()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="access$100()">
-        <cov.data calls="1" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="class$(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-    </class>
-    <class name="Error" source="Error.java">
-      <cov.data calls="0" hit_methods="0" total_methods="2" hit_lines="0" total_lines="4" />
-      <method name="&lt;init&gt;(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-    </class>
-    <class name="ArrayStoreException" source="ArrayStoreException.java">
-      <cov.data calls="0" hit_methods="0" total_methods="2" hit_lines="0" total_lines="4" />
-      <method name="&lt;init&gt;(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-    </class>
-    <class name="Thread" source="Thread.java">
-      <cov.data calls="1203" hit_methods="6" total_methods="51" hit_lines="0" total_lines="216" />
-      <method name="&lt;init&gt;(Runnable, String)">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="&lt;init&gt;(ThreadGroup, Runnable)">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="&lt;init&gt;(Runnable)">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="&lt;init&gt;(ThreadGroup, Runnable, String)">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="&lt;init&gt;(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="&lt;init&gt;(ThreadGroup, String)">
-        <cov.data calls="2" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="&lt;clinit&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="run()">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="exit()">
-        <cov.data calls="0" hit_lines="0" total_lines="7" />
-      </method>
-      <method name="registerNatives()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="toString()">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="getName()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="currentThread()">
-        <cov.data calls="1193" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="dumpStack()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="getThreadGroup()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="setPriority(int)">
-        <cov.data calls="2" hit_lines="0" total_lines="9" />
-      </method>
-      <method name="setDaemon(boolean)">
-        <cov.data calls="0" hit_lines="0" total_lines="6" />
-      </method>
-      <method name="start()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="nextThreadNum()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="yield()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="sleep(long, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="15" />
-      </method>
-      <method name="sleep(long)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="init(ThreadGroup, Runnable, String)">
-        <cov.data calls="2" hit_lines="0" total_lines="36" />
-      </method>
-      <method name="stop()">
-        <cov.data calls="0" hit_lines="0" total_lines="15" />
-      </method>
-      <method name="stop(Throwable)">
-        <cov.data calls="0" hit_lines="0" total_lines="13" />
-      </method>
-      <method name="interrupt()">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="interrupted()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="isInterrupted(boolean)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="isInterrupted()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="destroy()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="isAlive()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="suspend()">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="resume()">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="getPriority()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="setName(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="activeCount()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="enumerate(Thread[])">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="countStackFrames()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="join()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="join(long)">
-        <cov.data calls="0" hit_lines="0" total_lines="22" />
-      </method>
-      <method name="join(long, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="15" />
-      </method>
-      <method name="isDaemon()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="checkAccess()">
-        <cov.data calls="2" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="getContextClassLoader()">
-        <cov.data calls="0" hit_lines="0" total_lines="11" />
-      </method>
-      <method name="setContextClassLoader(ClassLoader)">
-        <cov.data calls="0" hit_lines="0" total_lines="6" />
-      </method>
-      <method name="setPriority0(int)">
-        <cov.data calls="2" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="stop0(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="suspend0()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="resume0()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="interrupt0()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-    </class>
-    <class name="Object" source="Object.java">
-      <cov.data calls="18182" hit_methods="8" total_methods="14" hit_lines="0" total_lines="21" />
-      <method name="hashCode()">
-        <cov.data calls="2274" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="&lt;clinit&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="finalize()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="wait(long, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="15" />
-      </method>
-      <method name="wait(long)">
-        <cov.data calls="20" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="wait()">
-        <cov.data calls="10" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="registerNatives()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="getClass()">
-        <cov.data calls="791" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="equals(Object)">
-        <cov.data calls="6204" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="clone()">
-        <cov.data calls="8549" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="toString()">
-        <cov.data calls="1" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="notify()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="notifyAll()">
-        <cov.data calls="333" hit_lines="0" total_lines="0" />
-      </method>
-    </class>
-    <class name="Byte" source="Byte.java">
-      <cov.data calls="1" hit_methods="1" total_methods="20" hit_lines="0" total_lines="66" />
-      <method name="hashCode()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="compareTo(Byte)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="compareTo(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="&lt;init&gt;(byte)">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="&lt;init&gt;(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="&lt;clinit&gt;()">
-        <cov.data calls="1" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="equals(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="toString()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="toString(byte)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="valueOf(String, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="valueOf(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="byteValue()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="shortValue()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="intValue()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="longValue()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="floatValue()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="doubleValue()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="parseByte(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="parseByte(String, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="decode(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="37" />
-      </method>
-    </class>
-    <class name="Double" source="Double.java">
-      <cov.data calls="4" hit_methods="3" total_methods="24" hit_lines="0" total_lines="36" />
-      <method name="hashCode()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="compareTo(Double)">
-        <cov.data calls="0" hit_lines="0" total_lines="12" />
-      </method>
-      <method name="compareTo(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="&lt;init&gt;(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;(double)">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="&lt;clinit&gt;()">
-        <cov.data calls="1" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="equals(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="toString(double)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="toString()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="valueOf(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="isNaN(double)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="isNaN()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="isInfinite()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="isInfinite(double)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="byteValue()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="shortValue()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="intValue()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="longValue()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="floatValue()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="doubleValue()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="parseDouble(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="doubleToLongBits(double)">
-        <cov.data calls="2" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="doubleToRawLongBits(double)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="longBitsToDouble(long)">
-        <cov.data calls="1" hit_lines="0" total_lines="0" />
-      </method>
-    </class>
-    <class name="InheritableThreadLocal" source="InheritableThreadLocal.java">
-      <cov.data calls="2" hit_methods="1" total_methods="5" hit_lines="0" total_lines="34" />
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="get()">
-        <cov.data calls="0" hit_lines="0" total_lines="11" />
-      </method>
-      <method name="set(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="7" />
-      </method>
-      <method name="bequeath(Thread, Thread)">
-        <cov.data calls="2" hit_lines="0" total_lines="13" />
-      </method>
-      <method name="childValue(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-    </class>
-    <class name="ArithmeticException" source="ArithmeticException.java">
-      <cov.data calls="0" hit_methods="0" total_methods="2" hit_lines="0" total_lines="4" />
-      <method name="&lt;init&gt;(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-    </class>
-    <class name="Short" source="Short.java">
-      <cov.data calls="1" hit_methods="1" total_methods="20" hit_lines="0" total_lines="69" />
-      <method name="hashCode()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="compareTo(Short)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="compareTo(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="&lt;init&gt;(short)">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="&lt;init&gt;(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="&lt;clinit&gt;()">
-        <cov.data calls="1" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="equals(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="toString()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="toString(short)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="valueOf(String, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="valueOf(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="byteValue()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="shortValue()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="intValue()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="longValue()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="floatValue()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="doubleValue()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="decode(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="40" />
-      </method>
-      <method name="parseShort(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="parseShort(String, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-    </class>
-    <class name="Class" source="Class.java">
-      <cov.data calls="6366" hit_methods="23" total_methods="54" hit_lines="0" total_lines="146" />
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="&lt;clinit&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="registerNatives()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="toString()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getName()">
-        <cov.data calls="268" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="forName(String)">
-        <cov.data calls="185" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="forName(String, boolean, ClassLoader)">
-        <cov.data calls="0" hit_lines="0" total_lines="10" />
-      </method>
-      <method name="forName0(String, boolean, ClassLoader)">
-        <cov.data calls="185" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="newInstance()">
-        <cov.data calls="432" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="newInstance0()">
-        <cov.data calls="432" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="isInstance(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="isAssignableFrom(Class)">
-        <cov.data calls="2400" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="isInterface()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="isArray()">
-        <cov.data calls="448" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="isPrimitive()">
-        <cov.data calls="123" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="getClassLoader()">
-        <cov.data calls="53" hit_lines="0" total_lines="11" />
-      </method>
-      <method name="getClassLoader0()">
-        <cov.data calls="71" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="getSuperclass()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="getPackage()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getInterfaces()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="getComponentType()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="getModifiers()">
-        <cov.data calls="502" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="getSigners()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="setSigners(Object[])">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="getDeclaringClass()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="getClasses()">
-        <cov.data calls="0" hit_lines="0" total_lines="27" />
-      </method>
-      <method name="getFields()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="getMethods()">
-        <cov.data calls="29" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="getConstructors()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="getField(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="getMethod(String, Class[])">
-        <cov.data calls="10" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="getConstructor(Class[])">
-        <cov.data calls="368" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="getDeclaredClasses()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="getDeclaredFields()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="getDeclaredMethods()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="getDeclaredConstructors()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="getDeclaredField(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="getDeclaredMethod(String, Class[])">
-        <cov.data calls="1" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="getDeclaredConstructor(Class[])">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="getResourceAsStream(String)">
-        <cov.data calls="6" hit_lines="0" total_lines="7" />
-      </method>
-      <method name="getResource(String)">
-        <cov.data calls="12" hit_lines="0" total_lines="7" />
-      </method>
-      <method name="getProtectionDomain()">
-        <cov.data calls="0" hit_lines="0" total_lines="18" />
-      </method>
-      <method name="getProtectionDomain0()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="setProtectionDomain0(java.security.ProtectionDomain)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="getPrimitiveClass(String)">
-        <cov.data calls="7" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="checkMemberAccess(int, ClassLoader)">
-        <cov.data calls="408" hit_lines="0" total_lines="14" />
-      </method>
-      <method name="resolveName(String)">
-        <cov.data calls="18" hit_lines="0" total_lines="18" />
-      </method>
-      <method name="getFields0(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="getMethods0(int)">
-        <cov.data calls="29" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="getConstructors0(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="getField0(String, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="getMethod0(String, Class[], int)">
-        <cov.data calls="11" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="getConstructor0(Class[], int)">
-        <cov.data calls="368" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="getDeclaredClasses0()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-    </class>
-    <class name="NoClassDefFoundError" source="NoClassDefFoundError.java">
-      <cov.data calls="0" hit_methods="0" total_methods="2" hit_lines="0" total_lines="4" />
-      <method name="&lt;init&gt;(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-    </class>
-    <class name="Compiler$1" source="Compiler.java">
-      <cov.data calls="0" hit_methods="0" total_methods="2" hit_lines="0" total_lines="22" />
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="run()">
-        <cov.data calls="0" hit_lines="0" total_lines="21" />
-      </method>
-    </class>
-    <class name="Throwable" source="Throwable.java">
-      <cov.data calls="4198" hit_methods="3" total_methods="10" hit_lines="0" total_lines="27" />
-      <method name="&lt;init&gt;(String)">
-        <cov.data calls="980" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="1119" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="printStackTrace(java.io.PrintWriter)">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="printStackTrace(java.io.PrintStream)">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="printStackTrace()">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="fillInStackTrace()">
-        <cov.data calls="2099" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="toString()">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="getMessage()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getLocalizedMessage()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="printStackTrace0(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-    </class>
-    <class name="OutOfMemoryError" source="OutOfMemoryError.java">
-      <cov.data calls="0" hit_methods="0" total_methods="2" hit_lines="0" total_lines="4" />
-      <method name="&lt;init&gt;(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-    </class>
-    <class name="Compiler" source="Compiler.java">
-      <cov.data calls="0" hit_methods="0" total_methods="10" hit_lines="0" total_lines="2" />
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="&lt;clinit&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="registerNatives()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="access$000()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="initialize()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="compileClass(Class)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="compileClasses(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="command(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="enable()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="disable()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-    </class>
-    <class name="StackOverflowError" source="StackOverflowError.java">
-      <cov.data calls="0" hit_methods="0" total_methods="2" hit_lines="0" total_lines="4" />
-      <method name="&lt;init&gt;(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-    </class>
-    <class name="Long" source="Long.java">
-      <cov.data calls="324" hit_methods="4" total_methods="28" hit_lines="0" total_lines="180" />
-      <method name="hashCode()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="compareTo(Long)">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="compareTo(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="&lt;init&gt;(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="&lt;init&gt;(long)">
-        <cov.data calls="317" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="&lt;clinit&gt;()">
-        <cov.data calls="1" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="equals(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="toString(long, int)">
-        <cov.data calls="3" hit_lines="0" total_lines="22" />
-      </method>
-      <method name="toString(long)">
-        <cov.data calls="3" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="toString()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="toHexString(long)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="valueOf(String, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="valueOf(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="byteValue()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="shortValue()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="intValue()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="longValue()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="floatValue()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="doubleValue()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="decode(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="40" />
-      </method>
-      <method name="toOctalString(long)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="toBinaryString(long)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="toUnsignedString(long, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="9" />
-      </method>
-      <method name="parseLong(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="parseLong(String, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="63" />
-      </method>
-      <method name="getLong(String, Long)">
-        <cov.data calls="0" hit_lines="0" total_lines="13" />
-      </method>
-      <method name="getLong(String, long)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="getLong(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-    </class>
-    <class name="Number" source="Number.java">
-      <cov.data calls="318" hit_methods="1" total_methods="7" hit_lines="0" total_lines="3" />
-      <method name="&lt;init&gt;()">
-        <cov.data calls="318" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="byteValue()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="shortValue()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="intValue()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="longValue()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="floatValue()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="doubleValue()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-    </class>
-    <class name="Runnable" source="Runnable.java">
-      <cov.data calls="0" hit_methods="0" total_methods="1" hit_lines="0" total_lines="0" />
-      <method name="run()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-    </class>
-    <class name="Float" source="Float.java">
-      <cov.data calls="1156" hit_methods="2" total_methods="25" hit_lines="0" total_lines="38" />
-      <method name="hashCode()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="compareTo(Float)">
-        <cov.data calls="0" hit_lines="0" total_lines="12" />
-      </method>
-      <method name="compareTo(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="&lt;init&gt;(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;(float)">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="&lt;init&gt;(double)">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="&lt;clinit&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="equals(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="toString(float)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="toString()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="valueOf(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="isNaN()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="isNaN(float)">
-        <cov.data calls="1154" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="parseFloat(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="isInfinite()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="isInfinite(float)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="byteValue()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="shortValue()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="intValue()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="longValue()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="floatValue()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="doubleValue()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="floatToIntBits(float)">
-        <cov.data calls="2" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="floatToRawIntBits(float)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="intBitsToFloat(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-    </class>
-    <class name="StringBuffer" source="StringBuffer.java">
-      <cov.data calls="445234" hit_methods="14" total_methods="42" hit_lines="0" total_lines="238" />
-      <method name="&lt;init&gt;(int)">
-        <cov.data calls="49319" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="&lt;init&gt;(String)">
-        <cov.data calls="144" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="48696" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="toString()">
-        <cov.data calls="50737" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="append(double)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="append(float)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="append(long)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="append(int)">
-        <cov.data calls="8" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="append(char)">
-        <cov.data calls="74410" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="append(boolean)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="append(char[], int, int)">
-        <cov.data calls="10" hit_lines="0" total_lines="6" />
-      </method>
-      <method name="append(char[])">
-        <cov.data calls="0" hit_lines="0" total_lines="7" />
-      </method>
-      <method name="append(Object)">
-        <cov.data calls="4181" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="append(String)">
-        <cov.data calls="90162" hit_lines="0" total_lines="11" />
-      </method>
-      <method name="length()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="charAt(int)">
-        <cov.data calls="4374" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="getChars(int, int, char[], int)">
-        <cov.data calls="0" hit_lines="0" total_lines="11" />
-      </method>
-      <method name="substring(int, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="7" />
-      </method>
-      <method name="substring(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="replace(int, int, String)">
-        <cov.data calls="0" hit_lines="0" total_lines="18" />
-      </method>
-      <method name="setShared()">
-        <cov.data calls="50737" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getValue()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="readObject(java.io.ObjectInputStream)">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="copy()">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="ensureCapacity(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="capacity()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="expandCapacity(int)">
-        <cov.data calls="70027" hit_lines="0" total_lines="12" />
-      </method>
-      <method name="setLength(int)">
-        <cov.data calls="2172" hit_lines="0" total_lines="27" />
-      </method>
-      <method name="setCharAt(int, char)">
-        <cov.data calls="257" hit_lines="0" total_lines="6" />
-      </method>
-      <method name="delete(int, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="15" />
-      </method>
-      <method name="deleteCharAt(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="7" />
-      </method>
-      <method name="insert(int, char)">
-        <cov.data calls="0" hit_lines="0" total_lines="9" />
-      </method>
-      <method name="insert(int, char[])">
-        <cov.data calls="0" hit_lines="0" total_lines="13" />
-      </method>
-      <method name="insert(int, long)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="insert(int, float)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="insert(int, double)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="insert(int, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="insert(int, boolean)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="insert(int, char[], int, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="15" />
-      </method>
-      <method name="insert(int, String)">
-        <cov.data calls="0" hit_lines="0" total_lines="17" />
-      </method>
-      <method name="insert(int, Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="reverse()">
-        <cov.data calls="0" hit_lines="0" total_lines="8" />
-      </method>
-    </class>
-    <class name="Character" source="Character.java">
-      <cov.data calls="42340" hit_methods="5" total_methods="33" hit_lines="0" total_lines="118" />
-      <method name="hashCode()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="compareTo(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="compareTo(Character)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="&lt;init&gt;(char)">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="&lt;clinit&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="equals(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="toString()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="toLowerCase(char)">
-        <cov.data calls="33070" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="toUpperCase(char)">
-        <cov.data calls="6135" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="charValue()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="isLowerCase(char)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="isUpperCase(char)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="isTitleCase(char)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="isDigit(char)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="isDefined(char)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="isLetter(char)">
-        <cov.data calls="3107" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="isLetterOrDigit(char)">
-        <cov.data calls="24" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="isJavaLetter(char)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="isJavaLetterOrDigit(char)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="isJavaIdentifierStart(char)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="isJavaIdentifierPart(char)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="isUnicodeIdentifierStart(char)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="isUnicodeIdentifierPart(char)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="isIdentifierIgnorable(char)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="toTitleCase(char)">
-        <cov.data calls="0" hit_lines="0" total_lines="26" />
-      </method>
-      <method name="digit(char, int)">
-        <cov.data calls="4" hit_lines="0" total_lines="13" />
-      </method>
-      <method name="getNumericValue(char)">
-        <cov.data calls="0" hit_lines="0" total_lines="26" />
-      </method>
-      <method name="isSpace(char)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="isSpaceChar(char)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="isWhitespace(char)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="isISOControl(char)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getType(char)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="forDigit(int, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="10" />
-      </method>
-    </class>
-    <class name="ClassNotFoundException" source="ClassNotFoundException.java">
-      <cov.data calls="962" hit_methods="1" total_methods="7" hit_lines="0" total_lines="28" />
-      <method name="&lt;init&gt;(String)">
-        <cov.data calls="962" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;(String, Throwable)">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="printStackTrace()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="printStackTrace(java.io.PrintStream)">
-        <cov.data calls="0" hit_lines="0" total_lines="9" />
-      </method>
-      <method name="printStackTrace(java.io.PrintWriter)">
-        <cov.data calls="0" hit_lines="0" total_lines="9" />
-      </method>
-      <method name="getException()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-    </class>
-    <class name="String$CaseInsensitiveComparator" source="String.java">
-      <cov.data calls="874" hit_methods="1" total_methods="3" hit_lines="0" total_lines="20" />
-      <method name="&lt;init&gt;(String$1)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="compare(Object, Object)">
-        <cov.data calls="874" hit_lines="0" total_lines="18" />
-      </method>
-    </class>
-    <class name="Exception" source="Exception.java">
-      <cov.data calls="2099" hit_methods="2" total_methods="2" hit_lines="0" total_lines="4" />
-      <method name="&lt;init&gt;(String)">
-        <cov.data calls="980" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="1119" hit_lines="0" total_lines="2" />
-      </method>
-    </class>
-    <class name="System" source="System.java">
-      <cov.data calls="376546" hit_methods="16" total_methods="34" hit_lines="0" total_lines="120" />
-      <method name="arraycopy(Object, int, Object, int, int)">
-        <cov.data calls="361119" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;clinit&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="exit(int)">
-        <cov.data calls="1" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="runFinalizersOnExit(boolean)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="initializeSystemClass()">
-        <cov.data calls="0" hit_lines="0" total_lines="10" />
-      </method>
-      <method name="setProperty(String, String)">
-        <cov.data calls="1" hit_lines="0" total_lines="9" />
-      </method>
-      <method name="registerNatives()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="getSecurityManager()">
-        <cov.data calls="15282" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="loadLibrary(String)">
-        <cov.data calls="5" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="getProperty(String, String)">
-        <cov.data calls="2" hit_lines="0" total_lines="10" />
-      </method>
-      <method name="getProperty(String)">
-        <cov.data calls="83" hit_lines="0" total_lines="10" />
-      </method>
-      <method name="mapLibraryName(String)">
-        <cov.data calls="5" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="load(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="runFinalization()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="currentTimeMillis()">
-        <cov.data calls="29" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="setIn(java.io.InputStream)">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="setOut(java.io.PrintStream)">
-        <cov.data calls="2" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="setErr(java.io.PrintStream)">
-        <cov.data calls="2" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="checkIO()">
-        <cov.data calls="4" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="setIn0(java.io.InputStream)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="setOut0(java.io.PrintStream)">
-        <cov.data calls="2" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="setErr0(java.io.PrintStream)">
-        <cov.data calls="2" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="setSecurityManager(SecurityManager)">
-        <cov.data calls="0" hit_lines="0" total_lines="6" />
-      </method>
-      <method name="setSecurityManager0(SecurityManager)">
-        <cov.data calls="0" hit_lines="0" total_lines="28" />
-      </method>
-      <method name="identityHashCode(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="initProperties(java.util.Properties)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="getProperties()">
-        <cov.data calls="2" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="setProperties(java.util.Properties)">
-        <cov.data calls="0" hit_lines="0" total_lines="9" />
-      </method>
-      <method name="getenv(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="gc()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="nullInputStream()">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="nullPrintStream()">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="getCallerClass()">
-        <cov.data calls="5" hit_lines="0" total_lines="0" />
-      </method>
-    </class>
-    <class name="VirtualMachineError" source="VirtualMachineError.java">
-      <cov.data calls="0" hit_methods="0" total_methods="2" hit_lines="0" total_lines="4" />
-      <method name="&lt;init&gt;(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-    </class>
-    <class name="RuntimeException" source="RuntimeException.java">
-      <cov.data calls="576" hit_methods="2" total_methods="2" hit_lines="0" total_lines="4" />
-      <method name="&lt;init&gt;(String)">
-        <cov.data calls="5" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="571" hit_lines="0" total_lines="2" />
-      </method>
-    </class>
-    <class name="String" source="String.java">
-      <cov.data calls="7164199" hit_methods="41" total_methods="65" hit_lines="0" total_lines="625" />
-      <method name="hashCode()">
-        <cov.data calls="13309" hit_lines="0" total_lines="11" />
-      </method>
-      <method name="compareTo(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="compareTo(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="29" />
-      </method>
-      <method name="&lt;init&gt;(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="15" />
-      </method>
-      <method name="&lt;init&gt;(char[])">
-        <cov.data calls="1858" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="&lt;init&gt;(char[], int, int)">
-        <cov.data calls="2903" hit_lines="0" total_lines="16" />
-      </method>
-      <method name="&lt;init&gt;(byte[], int, int, int)">
-        <cov.data calls="3053" hit_lines="0" total_lines="27" />
-      </method>
-      <method name="&lt;init&gt;(byte[], int)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="&lt;init&gt;(byte[], int, int, String)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;(byte[], String)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;(byte[], int, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;(byte[])">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;(StringBuffer)">
-        <cov.data calls="50737" hit_lines="0" total_lines="8" />
-      </method>
-      <method name="&lt;init&gt;(int, int, char[])">
-        <cov.data calls="349989" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="&lt;init&gt;(byte[], int, int, sun.io.ByteToCharConverter)">
-        <cov.data calls="0" hit_lines="0" total_lines="26" />
-      </method>
-      <method name="&lt;clinit&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="equals(Object)">
-        <cov.data calls="165634" hit_lines="0" total_lines="20" />
-      </method>
-      <method name="toString()">
-        <cov.data calls="4251" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getBTCConverter(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="12" />
-      </method>
-      <method name="getCTBConverter(String)">
-        <cov.data calls="952" hit_lines="0" total_lines="12" />
-      </method>
-      <method name="length()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="charAt(int)">
-        <cov.data calls="3734831" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="getChars(int, int, char[], int)">
-        <cov.data calls="282564" hit_lines="0" total_lines="12" />
-      </method>
-      <method name="getBytes()">
-        <cov.data calls="3" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getBytes(sun.io.CharToByteConverter)">
-        <cov.data calls="955" hit_lines="0" total_lines="22" />
-      </method>
-      <method name="getBytes(String)">
-        <cov.data calls="952" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getBytes(int, int, byte[], int)">
-        <cov.data calls="0" hit_lines="0" total_lines="18" />
-      </method>
-      <method name="equalsIgnoreCase(String)">
-        <cov.data calls="2005" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="compareToIgnoreCase(String)">
-        <cov.data calls="874" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="regionMatches(int, String, int, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="16" />
-      </method>
-      <method name="regionMatches(boolean, int, String, int, int)">
-        <cov.data calls="1923" hit_lines="0" total_lines="34" />
-      </method>
-      <method name="startsWith(String)">
-        <cov.data calls="70315" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="startsWith(String, int)">
-        <cov.data calls="82164" hit_lines="0" total_lines="16" />
-      </method>
-      <method name="endsWith(String)">
-        <cov.data calls="11849" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="indexOf(int)">
-        <cov.data calls="904300" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="indexOf(int, int)">
-        <cov.data calls="905864" hit_lines="0" total_lines="15" />
-      </method>
-      <method name="indexOf(String)">
-        <cov.data calls="1985" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="indexOf(String, int)">
-        <cov.data calls="2586" hit_lines="0" total_lines="45" />
-      </method>
-      <method name="lastIndexOf(String, int)">
-        <cov.data calls="2" hit_lines="0" total_lines="44" />
-      </method>
-      <method name="lastIndexOf(int)">
-        <cov.data calls="2489" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="lastIndexOf(int, int)">
-        <cov.data calls="3285" hit_lines="0" total_lines="9" />
-      </method>
-      <method name="lastIndexOf(String)">
-        <cov.data calls="2" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="substring(int, int)">
-        <cov.data calls="350299" hit_lines="0" total_lines="10" />
-      </method>
-      <method name="substring(int)">
-        <cov.data calls="1933" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="concat(String)">
-        <cov.data calls="1502" hit_lines="0" total_lines="8" />
-      </method>
-      <method name="replace(char, char)">
-        <cov.data calls="9987" hit_lines="0" total_lines="25" />
-      </method>
-      <method name="toLowerCase(java.util.Locale)">
-        <cov.data calls="2792" hit_lines="0" total_lines="40" />
-      </method>
-      <method name="toLowerCase()">
-        <cov.data calls="1432" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="toUpperCase()">
-        <cov.data calls="33" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="toUpperCase(java.util.Locale)">
-        <cov.data calls="33" hit_lines="0" total_lines="65" />
-      </method>
-      <method name="trim()">
-        <cov.data calls="617" hit_lines="0" total_lines="12" />
-      </method>
-      <method name="toCharArray()">
-        <cov.data calls="188295" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="valueOf(char[], int, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="valueOf(char[])">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="valueOf(Object)">
-        <cov.data calls="4292" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="valueOf(double)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="valueOf(boolean)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="valueOf(char)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="valueOf(int)">
-        <cov.data calls="8" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="valueOf(long)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="valueOf(float)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="copyValueOf(char[], int, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="copyValueOf(char[])">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="intern()">
-        <cov.data calls="1342" hit_lines="0" total_lines="0" />
-      </method>
-    </class>
-    <class name="ThreadDeath" source="ThreadDeath.java">
-      <cov.data calls="0" hit_methods="0" total_methods="1" hit_lines="0" total_lines="1" />
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-    </class>
-    <class name="NullPointerException" source="NullPointerException.java">
-      <cov.data calls="1" hit_methods="1" total_methods="2" hit_lines="0" total_lines="4" />
-      <method name="&lt;init&gt;(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="1" hit_lines="0" total_lines="2" />
-      </method>
-    </class>
-    <class name="Runtime" source="Runtime.java">
-      <cov.data calls="12" hit_methods="3" total_methods="28" hit_lines="0" total_lines="106" />
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="&lt;clinit&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="exit(int)">
-        <cov.data calls="1" hit_lines="0" total_lines="6" />
-      </method>
-      <method name="runFinalizersOnExit(boolean)">
-        <cov.data calls="0" hit_lines="0" total_lines="10" />
-      </method>
-      <method name="loadLibrary(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="loadLibrary0(Class, String)">
-        <cov.data calls="5" hit_lines="0" total_lines="10" />
-      </method>
-      <method name="load(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="runFinalization()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="halt(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="6" />
-      </method>
-      <method name="gc()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="getRuntime()">
-        <cov.data calls="6" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="load0(Class, String)">
-        <cov.data calls="0" hit_lines="0" total_lines="10" />
-      </method>
-      <method name="addShutdownHook(Thread)">
-        <cov.data calls="0" hit_lines="0" total_lines="6" />
-      </method>
-      <method name="removeShutdownHook(Thread)">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="execInternal(String[], String[], String)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="exec(String, String[])">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="exec(String[], String[])">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="exec(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="exec(String, String[], java.io.File)">
-        <cov.data calls="0" hit_lines="0" total_lines="14" />
-      </method>
-      <method name="exec(String[], String[], java.io.File)">
-        <cov.data calls="0" hit_lines="0" total_lines="24" />
-      </method>
-      <method name="exec(String[])">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="freeMemory()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="totalMemory()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="runFinalization0()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="traceInstructions(boolean)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="traceMethodCalls(boolean)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="getLocalizedInputStream(java.io.InputStream)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getLocalizedOutputStream(java.io.OutputStream)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-    </class>
-    <class name="ClassLoader$4" source="ClassLoader.java">
-      <cov.data calls="10" hit_methods="2" total_methods="2" hit_lines="2" total_lines="2" />
-      <method name="&lt;init&gt;(java.io.File)">
-        <cov.data calls="5" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="run()">
-        <cov.data calls="5" hit_lines="1" total_lines="1" />
-      </method>
-    </class>
-    <class name="ClassLoader$NativeLibrary" source="ClassLoader.java">
-      <cov.data calls="29" hit_methods="4" total_methods="7" hit_lines="5" total_lines="18" />
-      <method name="&lt;init&gt;(Class, String)">
-        <cov.data calls="1" hit_lines="4" total_lines="4" />
-      </method>
-      <method name="finalize()">
-        <cov.data calls="0" hit_lines="0" total_lines="12" />
-      </method>
-      <method name="getFromClass()">
-        <cov.data calls="1" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="access$200(ClassLoader$NativeLibrary)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="load(String)">
-        <cov.data calls="1" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="find(String)">
-        <cov.data calls="26" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="unload()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-    </class>
-    <class name="Math" source="Math.java">
-      <cov.data calls="605" hit_methods="4" total_methods="35" hit_lines="5" total_lines="51" />
-      <method name="sin(double)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="cos(double)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="tan(double)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="atan2(double, double)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="sqrt(double)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="&lt;clinit&gt;()">
-        <cov.data calls="1" hit_lines="2" total_lines="2" />
-      </method>
-      <method name="min(float, float)">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="min(long, long)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="min(int, int)">
-        <cov.data calls="68" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="min(double, double)">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="max(double, double)">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="max(float, float)">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="max(long, long)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="max(int, int)">
-        <cov.data calls="535" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="asin(double)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="acos(double)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="atan(double)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="toRadians(double)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="toDegrees(double)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="exp(double)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="log(double)">
-        <cov.data calls="1" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="IEEEremainder(double, double)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="ceil(double)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="floor(double)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="rint(double)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="pow(double, double)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="round(float)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="round(double)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="initRNG()">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="random()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="abs(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="abs(long)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="abs(float)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="abs(double)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-    </class>
-    <class name="Package" source="Package.java">
-      <cov.data calls="703" hit_methods="5" total_methods="29" hit_lines="21" total_lines="128" />
-      <method name="hashCode()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="&lt;init&gt;(String, java.util.jar.Manifest, java.net.URL)">
-        <cov.data calls="0" hit_lines="0" total_lines="32" />
-      </method>
-      <method name="&lt;init&gt;(String, String, String, String, String, String, String, java.net.URL)">
-        <cov.data calls="65" hit_lines="10" total_lines="10" />
-      </method>
-      <method name="&lt;init&gt;(String, java.util.jar.Manifest, java.net.URL, Package$1)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="&lt;clinit&gt;()">
-        <cov.data calls="1" hit_lines="3" total_lines="3" />
-      </method>
-      <method name="toString()">
-        <cov.data calls="0" hit_lines="0" total_lines="9" />
-      </method>
-      <method name="getName()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getPackage(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="getPackage(Class)">
-        <cov.data calls="0" hit_lines="0" total_lines="9" />
-      </method>
-      <method name="getPackages()">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="access$000()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="access$100(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getSystemPackage(String)">
-        <cov.data calls="130" hit_lines="7" total_lines="9" />
-      </method>
-      <method name="getSystemPackages()">
-        <cov.data calls="0" hit_lines="0" total_lines="6" />
-      </method>
-      <method name="access$200()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="access$400()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="isSealed()">
-        <cov.data calls="377" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="isSealed(java.net.URL)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="isCompatibleWith(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="20" />
-      </method>
-      <method name="getSpecificationTitle()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getSpecificationVersion()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getSpecificationVendor()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getImplementationTitle()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getImplementationVersion()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getImplementationVendor()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="defineSystemPackage(String, String)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="loadManifest(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="6" />
-      </method>
-      <method name="getSystemPackage0(String)">
-        <cov.data calls="130" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="getSystemPackages0()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-    </class>
-    <class name="RuntimePermission" source="RuntimePermission.java">
-      <cov.data calls="18" hit_methods="1" total_methods="2" hit_lines="2" total_lines="4" />
-      <method name="&lt;init&gt;(String, String)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;(String)">
-        <cov.data calls="18" hit_lines="2" total_lines="2" />
-      </method>
-    </class>
-    <class name="IndexOutOfBoundsException" source="IndexOutOfBoundsException.java">
-      <cov.data calls="36" hit_methods="1" total_methods="2" hit_lines="2" total_lines="4" />
-      <method name="&lt;init&gt;(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="36" hit_lines="2" total_lines="2" />
-      </method>
-    </class>
-    <class name="ArrayIndexOutOfBoundsException" source="ArrayIndexOutOfBoundsException.java">
-      <cov.data calls="36" hit_methods="1" total_methods="3" hit_lines="2" total_lines="6" />
-      <method name="&lt;init&gt;(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="36" hit_lines="2" total_lines="2" />
-      </method>
-    </class>
-    <class name="NoSuchMethodException" source="NoSuchMethodException.java">
-      <cov.data calls="47" hit_methods="1" total_methods="2" hit_lines="2" total_lines="4" />
-      <method name="&lt;init&gt;(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="47" hit_lines="2" total_lines="2" />
-      </method>
-    </class>
-    <class name="Void" source="Void.java">
-      <cov.data calls="1" hit_methods="1" total_methods="2" hit_lines="1" total_lines="2" />
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="&lt;clinit&gt;()">
-        <cov.data calls="1" hit_lines="1" total_lines="1" />
-      </method>
-    </class>
-    <class name="StringIndexOutOfBoundsException" source="StringIndexOutOfBoundsException.java">
-      <cov.data calls="0" hit_methods="0" total_methods="3" hit_lines="0" total_lines="6" />
-      <method name="&lt;init&gt;(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-    </class>
-    <class name="SecurityException" source="SecurityException.java">
-      <cov.data calls="0" hit_methods="0" total_methods="2" hit_lines="0" total_lines="4" />
-      <method name="&lt;init&gt;(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-    </class>
-    <class name="IllegalAccessException" source="IllegalAccessException.java">
-      <cov.data calls="0" hit_methods="0" total_methods="2" hit_lines="0" total_lines="4" />
-      <method name="&lt;init&gt;(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-    </class>
-    <class name="InstantiationException" source="InstantiationException.java">
-      <cov.data calls="0" hit_methods="0" total_methods="2" hit_lines="0" total_lines="4" />
-      <method name="&lt;init&gt;(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-    </class>
-    <class name="IllegalArgumentException" source="IllegalArgumentException.java">
-      <cov.data calls="0" hit_methods="0" total_methods="2" hit_lines="0" total_lines="4" />
-      <method name="&lt;init&gt;(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-    </class>
-    <class name="NumberFormatException" source="NumberFormatException.java">
-      <cov.data calls="0" hit_methods="0" total_methods="2" hit_lines="0" total_lines="4" />
-      <method name="&lt;init&gt;(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-    </class>
-    <class name="Process" source="Process.java">
-      <cov.data calls="0" hit_methods="0" total_methods="7" hit_lines="0" total_lines="1" />
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="destroy()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="getInputStream()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="getOutputStream()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="exitValue()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="getErrorStream()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="waitFor()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-    </class>
-    <class name="ExceptionInInitializerError" source="ExceptionInInitializerError.java">
-      <cov.data calls="0" hit_methods="0" total_methods="7" hit_lines="0" total_lines="24" />
-      <method name="&lt;init&gt;(Throwable)">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="&lt;init&gt;(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="printStackTrace()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="printStackTrace(java.io.PrintStream)">
-        <cov.data calls="0" hit_lines="0" total_lines="7" />
-      </method>
-      <method name="printStackTrace(java.io.PrintWriter)">
-        <cov.data calls="0" hit_lines="0" total_lines="7" />
-      </method>
-      <method name="getException()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-    </class>
-    <class name="InterruptedException" source="InterruptedException.java">
-      <cov.data calls="0" hit_methods="0" total_methods="2" hit_lines="0" total_lines="4" />
-      <method name="&lt;init&gt;(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-    </class>
-    <class name="CloneNotSupportedException" source="CloneNotSupportedException.java">
-      <cov.data calls="0" hit_methods="0" total_methods="2" hit_lines="0" total_lines="4" />
-      <method name="&lt;init&gt;(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-    </class>
-    <class name="ClassFormatError" source="ClassFormatError.java">
-      <cov.data calls="0" hit_methods="0" total_methods="2" hit_lines="0" total_lines="4" />
-      <method name="&lt;init&gt;(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-    </class>
-    <class name="IllegalStateException" source="IllegalStateException.java">
-      <cov.data calls="0" hit_methods="0" total_methods="2" hit_lines="0" total_lines="4" />
-      <method name="&lt;init&gt;(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-    </class>
-    <class name="ThreadLocal$SecureKey" source="ThreadLocal.java">
-      <cov.data calls="1" hit_methods="1" total_methods="2" hit_lines="1" total_lines="2" />
-      <method name="&lt;init&gt;(ThreadLocal)">
-        <cov.data calls="1" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="threadLocal()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-    </class>
-    <class name="Shutdown$Lock" source="Shutdown.java">
-      <cov.data calls="2" hit_methods="2" total_methods="2" hit_lines="2" total_lines="2" />
-      <method name="&lt;init&gt;(Shutdown$1)">
-        <cov.data calls="1" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="1" hit_lines="1" total_lines="1" />
-      </method>
-    </class>
-  </package>
-  <package name="java.lang.ref">
-    <cov.data calls="8161" hit_methods="27" total_methods="53" hit_lines="0" total_lines="208" />
-    <class name="Finalizer$FinalizerThread" source="Finalizer.java">
-      <cov.data calls="0" hit_methods="0" total_methods="2" hit_lines="0" total_lines="8" />
-      <method name="&lt;init&gt;(ThreadGroup)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="run()">
-        <cov.data calls="0" hit_lines="0" total_lines="6" />
-      </method>
-    </class>
-    <class name="PhantomReference" source="PhantomReference.java">
-      <cov.data calls="0" hit_methods="0" total_methods="2" hit_lines="0" total_lines="3" />
-      <method name="&lt;init&gt;(Object, ref.ReferenceQueue)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="get()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-    </class>
-    <class name="WeakReference" source="WeakReference.java">
-      <cov.data calls="0" hit_methods="0" total_methods="2" hit_lines="0" total_lines="4" />
-      <method name="&lt;init&gt;(Object, ref.ReferenceQueue)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-    </class>
-    <class name="Reference$Lock" source="Reference.java">
-      <cov.data calls="0" hit_methods="0" total_methods="2" hit_lines="0" total_lines="2" />
-      <method name="&lt;init&gt;(ref.Reference$1)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-    </class>
-    <class name="SoftReference" source="SoftReference.java">
-      <cov.data calls="1134" hit_methods="3" total_methods="3" hit_lines="0" total_lines="9" />
-      <method name="&lt;init&gt;(Object, ref.ReferenceQueue)">
-        <cov.data calls="10" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="&lt;init&gt;(Object)">
-        <cov.data calls="60" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="get()">
-        <cov.data calls="1064" hit_lines="0" total_lines="3" />
-      </method>
-    </class>
-    <class name="Reference$ReferenceHandler" source="Reference.java">
-      <cov.data calls="0" hit_methods="0" total_methods="2" hit_lines="0" total_lines="21" />
-      <method name="&lt;init&gt;(ThreadGroup, String)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="run()">
-        <cov.data calls="0" hit_lines="0" total_lines="19" />
-      </method>
-    </class>
-    <class name="ReferenceQueue$Null" source="ReferenceQueue.java">
-      <cov.data calls="0" hit_methods="0" total_methods="3" hit_lines="0" total_lines="3" />
-      <method name="&lt;init&gt;(ref.ReferenceQueue$1)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="enqueue(ref.Reference)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-    </class>
-    <class name="Finalizer" source="Finalizer.java">
-      <cov.data calls="3069" hit_methods="9" total_methods="17" hit_lines="0" total_lines="93" />
-      <method name="&lt;init&gt;(Object)">
-        <cov.data calls="397" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="&lt;clinit&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="register(Object)">
-        <cov.data calls="397" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="add()">
-        <cov.data calls="397" hit_lines="0" total_lines="8" />
-      </method>
-      <method name="access$000()">
-        <cov.data calls="313" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="access$100(ref.Finalizer)">
-        <cov.data calls="313" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="access$200()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="invokeFinalizeMethod(Object)">
-        <cov.data calls="313" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="hasBeenFinalized()">
-        <cov.data calls="313" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="remove()">
-        <cov.data calls="313" hit_lines="0" total_lines="18" />
-      </method>
-      <method name="runFinalizer()">
-        <cov.data calls="313" hit_lines="0" total_lines="15" />
-      </method>
-      <method name="forkSecondaryFinalizer(Runnable)">
-        <cov.data calls="0" hit_lines="0" total_lines="17" />
-      </method>
-      <method name="runFinalization()">
-        <cov.data calls="0" hit_lines="0" total_lines="10" />
-      </method>
-      <method name="runAllFinalizers()">
-        <cov.data calls="0" hit_lines="0" total_lines="12" />
-      </method>
-      <method name="access$300()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="access$302(ref.Finalizer)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="access$400(ref.Finalizer)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-    </class>
-    <class name="FinalReference" source="FinalReference.java">
-      <cov.data calls="397" hit_methods="1" total_methods="1" hit_lines="0" total_lines="2" />
-      <method name="&lt;init&gt;(Object, ref.ReferenceQueue)">
-        <cov.data calls="397" hit_lines="0" total_lines="2" />
-      </method>
-    </class>
-    <class name="Reference" source="Reference.java">
-      <cov.data calls="2206" hit_methods="6" total_methods="10" hit_lines="0" total_lines="24" />
-      <method name="&lt;init&gt;(Object)">
-        <cov.data calls="60" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;(Object, ref.ReferenceQueue)">
-        <cov.data calls="467" hit_lines="0" total_lines="11" />
-      </method>
-      <method name="&lt;clinit&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="get()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="access$100()">
-        <cov.data calls="354" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="access$200()">
-        <cov.data calls="678" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="clear()">
-        <cov.data calls="313" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="isEnqueued()">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="enqueue()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="access$202(ref.Reference)">
-        <cov.data calls="334" hit_lines="0" total_lines="1" />
-      </method>
-    </class>
-    <class name="ReferenceQueue$Lock" source="ReferenceQueue.java">
-      <cov.data calls="2" hit_methods="2" total_methods="2" hit_lines="0" total_lines="2" />
-      <method name="&lt;init&gt;(ref.ReferenceQueue$1)">
-        <cov.data calls="1" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="1" hit_lines="0" total_lines="1" />
-      </method>
-    </class>
-    <class name="ReferenceQueue" source="ReferenceQueue.java">
-      <cov.data calls="1353" hit_methods="6" total_methods="7" hit_lines="0" total_lines="37" />
-      <method name="&lt;init&gt;()">
-        <cov.data calls="1" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="&lt;clinit&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="enqueue(ref.Reference)">
-        <cov.data calls="323" hit_lines="0" total_lines="10" />
-      </method>
-      <method name="remove(long)">
-        <cov.data calls="313" hit_lines="0" total_lines="13" />
-      </method>
-      <method name="remove()">
-        <cov.data calls="313" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="reallyPoll()">
-        <cov.data calls="363" hit_lines="0" total_lines="8" />
-      </method>
-      <method name="poll()">
-        <cov.data calls="40" hit_lines="0" total_lines="3" />
-      </method>
-    </class>
-  </package>
-  <package name="java.security">
-    <cov.data calls="5554" hit_methods="45" total_methods="149" hit_lines="91" total_lines="1148" />
-    <class name="PrivilegedAction" source="PrivilegedAction.java">
-      <cov.data calls="0" hit_methods="0" total_methods="1" hit_lines="0" total_lines="0" />
-      <method name="run()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-    </class>
-    <class name="PrivilegedExceptionAction" source="PrivilegedExceptionAction.java">
-      <cov.data calls="0" hit_methods="0" total_methods="1" hit_lines="0" total_lines="0" />
-      <method name="run()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-    </class>
-    <class name="ProtectionDomain" source="ProtectionDomain.java">
-      <cov.data calls="19" hit_methods="2" total_methods="5" hit_lines="0" total_lines="14" />
-      <method name="&lt;init&gt;(java.security.CodeSource, java.security.PermissionCollection)">
-        <cov.data calls="18" hit_lines="0" total_lines="7" />
-      </method>
-      <method name="toString()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getCodeSource()">
-        <cov.data calls="1" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getPermissions()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="implies(java.security.Permission)">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-    </class>
-    <class name="Guard" source="Guard.java">
-      <cov.data calls="0" hit_methods="0" total_methods="1" hit_lines="0" total_lines="0" />
-      <method name="checkGuard(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-    </class>
-    <class name="SecureClassLoader" source="SecureClassLoader.java">
-      <cov.data calls="920" hit_methods="4" total_methods="7" hit_lines="0" total_lines="59" />
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="8" />
-      </method>
-      <method name="&lt;init&gt;(ClassLoader)">
-        <cov.data calls="0" hit_lines="0" total_lines="8" />
-      </method>
-      <method name="&lt;clinit&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getProtectionDomain(java.security.CodeSource)">
-        <cov.data calls="442" hit_lines="0" total_lines="24" />
-      </method>
-      <method name="defineClass(String, byte[], int, int, java.security.CodeSource)">
-        <cov.data calls="442" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="check()">
-        <cov.data calls="18" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="getPermissions(java.security.CodeSource)">
-        <cov.data calls="18" hit_lines="0" total_lines="10" />
-      </method>
-    </class>
-    <class name="Permission" source="Permission.java">
-      <cov.data calls="42" hit_methods="2" total_methods="9" hit_lines="0" total_lines="13" />
-      <method name="hashCode()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="&lt;init&gt;(String)">
-        <cov.data calls="41" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="equals(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="toString()">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="getName()">
-        <cov.data calls="1" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="implies(java.security.Permission)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="getActions()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="newPermissionCollection()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="checkGuard(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-    </class>
-    <class name="AccessController" source="AccessController.java">
-      <cov.data calls="1083" hit_methods="7" total_methods="9" hit_lines="0" total_lines="27" />
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="checkPermission(java.security.Permission)">
-        <cov.data calls="0" hit_lines="0" total_lines="19" />
-      </method>
-      <method name="doPrivileged(java.security.PrivilegedExceptionAction)">
-        <cov.data calls="41" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="doPrivileged(java.security.PrivilegedAction)">
-        <cov.data calls="62" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="doPrivileged(java.security.PrivilegedExceptionAction, java.security.AccessControlContext)">
-        <cov.data calls="930" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="doPrivileged(java.security.PrivilegedAction, java.security.AccessControlContext)">
-        <cov.data calls="44" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="getInheritedAccessControlContext()">
-        <cov.data calls="2" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="getContext()">
-        <cov.data calls="2" hit_lines="0" total_lines="7" />
-      </method>
-      <method name="getStackAccessControlContext()">
-        <cov.data calls="2" hit_lines="0" total_lines="0" />
-      </method>
-    </class>
-    <class name="BasicPermission" source="BasicPermission.java">
-      <cov.data calls="36" hit_methods="2" total_methods="9" hit_lines="0" total_lines="60" />
-      <method name="hashCode()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="&lt;init&gt;(String, String)">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="&lt;init&gt;(String)">
-        <cov.data calls="18" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="equals(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="9" />
-      </method>
-      <method name="implies(java.security.Permission)">
-        <cov.data calls="0" hit_lines="0" total_lines="20" />
-      </method>
-      <method name="init(String)">
-        <cov.data calls="18" hit_lines="0" total_lines="18" />
-      </method>
-      <method name="readObject(java.io.ObjectInputStream)">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="getActions()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="newPermissionCollection()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-    </class>
-    <class name="AccessControlContext" source="AccessControlContext.java">
-      <cov.data calls="2" hit_methods="1" total_methods="15" hit_lines="0" total_lines="389" />
-      <method name="hashCode()">
-        <cov.data calls="0" hit_lines="0" total_lines="10" />
-      </method>
-      <method name="&lt;init&gt;(java.security.AccessControlContext, java.security.DomainCombiner)">
-        <cov.data calls="0" hit_lines="0" total_lines="23" />
-      </method>
-      <method name="&lt;init&gt;(java.security.ProtectionDomain[], java.security.DomainCombiner)">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="&lt;init&gt;(java.security.ProtectionDomain[])">
-        <cov.data calls="0" hit_lines="0" total_lines="13" />
-      </method>
-      <method name="&lt;init&gt;(java.security.ProtectionDomain[], boolean)">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="&lt;clinit&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="isPrivileged()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="equals(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="29" />
-      </method>
-      <method name="checkPermission(java.security.Permission)">
-        <cov.data calls="0" hit_lines="0" total_lines="56" />
-      </method>
-      <method name="getDebug()">
-        <cov.data calls="0" hit_lines="0" total_lines="8" />
-      </method>
-      <method name="getDomainCombiner()">
-        <cov.data calls="0" hit_lines="0" total_lines="6" />
-      </method>
-      <method name="combineWithPrivilegedContext()">
-        <cov.data calls="0" hit_lines="0" total_lines="88" />
-      </method>
-      <method name="optimize()">
-        <cov.data calls="2" hit_lines="0" total_lines="107" />
-      </method>
-      <method name="goCombiner(java.security.ProtectionDomain[], java.security.AccessControlContext, boolean)">
-        <cov.data calls="0" hit_lines="0" total_lines="14" />
-      </method>
-      <method name="containsAllPDs(java.security.AccessControlContext)">
-        <cov.data calls="0" hit_lines="0" total_lines="25" />
-      </method>
-    </class>
-    <class name="PrivilegedActionException" source="PrivilegedActionException.java">
-      <cov.data calls="1002" hit_methods="2" total_methods="6" hit_lines="4" total_lines="21" />
-      <method name="&lt;init&gt;(Exception)">
-        <cov.data calls="501" hit_lines="3" total_lines="3" />
-      </method>
-      <method name="printStackTrace()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="printStackTrace(java.io.PrintStream)">
-        <cov.data calls="0" hit_lines="0" total_lines="7" />
-      </method>
-      <method name="printStackTrace(java.io.PrintWriter)">
-        <cov.data calls="0" hit_lines="0" total_lines="7" />
-      </method>
-      <method name="toString()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getException()">
-        <cov.data calls="501" hit_lines="1" total_lines="1" />
-      </method>
-    </class>
-    <class name="CodeSource" source="CodeSource.java">
-      <cov.data calls="2246" hit_methods="5" total_methods="11" hit_lines="17" total_lines="138" />
-      <method name="hashCode()">
-        <cov.data calls="478" hit_lines="2" total_lines="3" />
-      </method>
-      <method name="&lt;init&gt;(java.net.URL, java.security.cert.Certificate[])">
-        <cov.data calls="442" hit_lines="4" total_lines="5" />
-      </method>
-      <method name="equals(Object)">
-        <cov.data calls="424" hit_lines="8" total_lines="27" />
-      </method>
-      <method name="toString()">
-        <cov.data calls="0" hit_lines="0" total_lines="9" />
-      </method>
-      <method name="getCertificates()">
-        <cov.data calls="884" hit_lines="2" total_lines="3" />
-      </method>
-      <method name="implies(java.security.CodeSource)">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="writeObject(java.io.ObjectOutputStream)">
-        <cov.data calls="0" hit_lines="0" total_lines="12" />
-      </method>
-      <method name="readObject(java.io.ObjectInputStream)">
-        <cov.data calls="0" hit_lines="0" total_lines="22" />
-      </method>
-      <method name="getLocation()">
-        <cov.data calls="18" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="matchCerts(java.security.CodeSource)">
-        <cov.data calls="0" hit_lines="0" total_lines="12" />
-      </method>
-      <method name="matchLocation(java.security.CodeSource)">
-        <cov.data calls="0" hit_lines="0" total_lines="41" />
-      </method>
-    </class>
-    <class name="Policy" source="Policy.java">
-      <cov.data calls="20" hit_methods="3" total_methods="8" hit_lines="10" total_lines="21" />
-      <method name="&lt;init&gt;()">
-        <cov.data calls="1" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="class$(String)">
-        <cov.data calls="1" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="getPermissions(java.security.CodeSource)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="isSet()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getPolicyNoCheck()">
-        <cov.data calls="18" hit_lines="8" total_lines="11" />
-      </method>
-      <method name="getPolicy()">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="setPolicy(java.security.Policy)">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="refresh()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-    </class>
-    <class name="Policy$1" source="Policy.java">
-      <cov.data calls="2" hit_methods="2" total_methods="2" hit_lines="2" total_lines="2" />
-      <method name="&lt;init&gt;()">
-        <cov.data calls="1" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="run()">
-        <cov.data calls="1" hit_lines="1" total_lines="1" />
-      </method>
-    </class>
-    <class name="Security" source="Security.java">
-      <cov.data calls="6" hit_methods="6" total_methods="38" hit_lines="33" total_lines="334" />
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;clinit&gt;()">
-        <cov.data calls="1" hit_lines="2" total_lines="2" />
-      </method>
-      <method name="setProperty(String, String)">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="check(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="access$000()">
-        <cov.data calls="1" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="class$(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getProperty(String)">
-        <cov.data calls="1" hit_lines="6" total_lines="7" />
-      </method>
-      <method name="debug(String, Throwable)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="debug(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="initialize()">
-        <cov.data calls="1" hit_lines="12" total_lines="16" />
-      </method>
-      <method name="reloadProviders()">
-        <cov.data calls="0" hit_lines="0" total_lines="17" />
-      </method>
-      <method name="error(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="error(String, Throwable)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="initializeStatic()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="loadProviders()">
-        <cov.data calls="1" hit_lines="10" total_lines="12" />
-      </method>
-      <method name="securityPropFile(String)">
-        <cov.data calls="1" hit_lines="2" total_lines="2" />
-      </method>
-      <method name="getProviderProperty(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="23" />
-      </method>
-      <method name="getProviderProperty(String, java.security.Provider)">
-        <cov.data calls="0" hit_lines="0" total_lines="9" />
-      </method>
-      <method name="getStandardName(String, String, java.security.Provider)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getAlgorithmProperty(String, String)">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="getEngineClassName(String, String, String)">
-        <cov.data calls="0" hit_lines="0" total_lines="20" />
-      </method>
-      <method name="getEngineClassName(String, String)">
-        <cov.data calls="0" hit_lines="0" total_lines="16" />
-      </method>
-      <method name="insertProviderAt(java.security.Provider, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="13" />
-      </method>
-      <method name="addProvider(java.security.Provider)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="removeProvider(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="11" />
-      </method>
-      <method name="getProviders(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="11" />
-      </method>
-      <method name="getProviders()">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="getProviders(java.util.Map)">
-        <cov.data calls="0" hit_lines="0" total_lines="28" />
-      </method>
-      <method name="getProvider(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="7" />
-      </method>
-      <method name="checkSuperclass(Class, Class)">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="getImpl(String, String, String)">
-        <cov.data calls="0" hit_lines="0" total_lines="18" />
-      </method>
-      <method name="invalidateSMCache(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="getAllQualifyingCandidates(String, String, java.security.Provider[])">
-        <cov.data calls="0" hit_lines="0" total_lines="13" />
-      </method>
-      <method name="getProvidersNotUsingCache(String, String, String, String, java.util.HashSet, java.security.Provider[])">
-        <cov.data calls="0" hit_lines="0" total_lines="13" />
-      </method>
-      <method name="isCriterionSatisfied(java.security.Provider, String, String, String, String)">
-        <cov.data calls="0" hit_lines="0" total_lines="18" />
-      </method>
-      <method name="isStandardAttr(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="isConstraintSatisfied(String, String, String)">
-        <cov.data calls="0" hit_lines="0" total_lines="9" />
-      </method>
-      <method name="getFilterComponents(String, String)">
-        <cov.data calls="0" hit_lines="0" total_lines="24" />
-      </method>
-    </class>
-    <class name="Security$1" source="Security.java">
-      <cov.data calls="2" hit_methods="2" total_methods="2" hit_lines="3" total_lines="3" />
-      <method name="&lt;init&gt;()">
-        <cov.data calls="1" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="run()">
-        <cov.data calls="1" hit_lines="2" total_lines="2" />
-      </method>
-    </class>
-    <class name="Provider" source="Provider.java">
-      <cov.data calls="102" hit_methods="4" total_methods="18" hit_lines="18" total_lines="53" />
-      <method name="&lt;init&gt;(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;(String, double, String)">
-        <cov.data calls="2" hit_lines="7" total_lines="7" />
-      </method>
-      <method name="put(Object, Object)">
-        <cov.data calls="49" hit_lines="2" total_lines="2" />
-      </method>
-      <method name="toString()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getName()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="check(String)">
-        <cov.data calls="49" hit_lines="3" total_lines="4" />
-      </method>
-      <method name="values()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="load(java.io.InputStream)">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="debug(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="debug(String, Throwable)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="clear()">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="remove(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="keySet()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="entrySet()">
-        <cov.data calls="0" hit_lines="0" total_lines="7" />
-      </method>
-      <method name="putAll(java.util.Map)">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="loadProvider(String)">
-        <cov.data calls="2" hit_lines="6" total_lines="10" />
-      </method>
-      <method name="getVersion()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getInfo()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-    </class>
-    <class name="PermissionCollection" source="PermissionCollection.java">
-      <cov.data calls="72" hit_methods="3" total_methods="7" hit_lines="4" total_lines="14" />
-      <method name="&lt;init&gt;()">
-        <cov.data calls="18" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="toString()">
-        <cov.data calls="0" hit_lines="0" total_lines="10" />
-      </method>
-      <method name="add(java.security.Permission)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="implies(java.security.Permission)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="setReadOnly()">
-        <cov.data calls="18" hit_lines="2" total_lines="2" />
-      </method>
-      <method name="elements()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="isReadOnly()">
-        <cov.data calls="36" hit_lines="1" total_lines="1" />
-      </method>
-    </class>
-  </package>
-  <package name="java.lang.reflect">
-    <cov.data calls="3843" hit_methods="8" total_methods="55" hit_lines="2" total_lines="189" />
-    <class name="ReflectPermission" source="ReflectPermission.java">
-      <cov.data calls="0" hit_methods="0" total_methods="2" hit_lines="0" total_lines="4" />
-      <method name="&lt;init&gt;(String, String)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-    </class>
-    <class name="Constructor" source="Constructor.java">
-      <cov.data calls="115" hit_methods="1" total_methods="10" hit_lines="0" total_lines="49" />
-      <method name="hashCode()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="equals(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="16" />
-      </method>
-      <method name="toString()">
-        <cov.data calls="0" hit_lines="0" total_lines="26" />
-      </method>
-      <method name="getName()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="newInstance(Object[])">
-        <cov.data calls="115" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="getModifiers()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getDeclaringClass()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getParameterTypes()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getExceptionTypes()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-    </class>
-    <class name="AccessibleObject" source="AccessibleObject.java">
-      <cov.data calls="0" hit_methods="0" total_methods="7" hit_lines="0" total_lines="23" />
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="&lt;clinit&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="class$(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="setAccessible(boolean)">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="setAccessible(reflect.AccessibleObject[], boolean)">
-        <cov.data calls="0" hit_lines="0" total_lines="6" />
-      </method>
-      <method name="setAccessible0(reflect.AccessibleObject, boolean)">
-        <cov.data calls="0" hit_lines="0" total_lines="9" />
-      </method>
-      <method name="isAccessible()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-    </class>
-    <class name="Method" source="Method.java">
-      <cov.data calls="3226" hit_methods="5" total_methods="12" hit_lines="0" total_lines="59" />
-      <method name="hashCode()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="invoke(Object, Object[])">
-        <cov.data calls="1148" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="equals(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="17" />
-      </method>
-      <method name="toString()">
-        <cov.data calls="0" hit_lines="0" total_lines="27" />
-      </method>
-      <method name="getName()">
-        <cov.data calls="1" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getModifiers()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getDeclaringClass()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getReturnType()">
-        <cov.data calls="1" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getParameterTypes()">
-        <cov.data calls="1038" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getExceptionTypes()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="copy(Class[])">
-        <cov.data calls="1038" hit_lines="0" total_lines="7" />
-      </method>
-    </class>
-    <class name="Member" source="Member.java">
-      <cov.data calls="0" hit_methods="0" total_methods="3" hit_lines="0" total_lines="0" />
-      <method name="getName()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="getModifiers()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="getDeclaringClass()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-    </class>
-    <class name="InvocationTargetException" source="InvocationTargetException.java">
-      <cov.data calls="0" hit_methods="0" total_methods="7" hit_lines="0" total_lines="25" />
-      <method name="&lt;init&gt;(Throwable)">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="&lt;init&gt;(Throwable, String)">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="printStackTrace()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="printStackTrace(java.io.PrintStream)">
-        <cov.data calls="0" hit_lines="0" total_lines="7" />
-      </method>
-      <method name="printStackTrace(java.io.PrintWriter)">
-        <cov.data calls="0" hit_lines="0" total_lines="7" />
-      </method>
-      <method name="getTargetException()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-    </class>
-    <class name="Modifier" source="Modifier.java">
-      <cov.data calls="502" hit_methods="2" total_methods="14" hit_lines="2" total_lines="29" />
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="toString(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="16" />
-      </method>
-      <method name="isInterface(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="isPrivate(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="isTransient(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="isStatic(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="isPublic(int)">
-        <cov.data calls="251" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="isProtected(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="isAbstract(int)">
-        <cov.data calls="251" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="isFinal(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="isSynchronized(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="isVolatile(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="isNative(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="isStrict(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-    </class>
-  </package>
-  <package name="java.net">
-    <cov.data calls="13717" hit_methods="53" total_methods="135" hit_lines="37" total_lines="1130" />
-    <class name="URLStreamHandler" source="URLStreamHandler.java">
-      <cov.data calls="5198" hit_methods="10" total_methods="12" hit_lines="0" total_lines="256" />
-      <method name="hashCode(java.net.URL)">
-        <cov.data calls="54" hit_lines="0" total_lines="34" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="equals(java.net.URL, java.net.URL)">
-        <cov.data calls="434" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="openConnection(java.net.URL)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="sameFile(java.net.URL, java.net.URL)">
-        <cov.data calls="434" hit_lines="0" total_lines="22" />
-      </method>
-      <method name="toExternalForm(java.net.URL)">
-        <cov.data calls="52" hit_lines="0" total_lines="14" />
-      </method>
-      <method name="parseURL(java.net.URL, String, int, int)">
-        <cov.data calls="511" hit_lines="0" total_lines="122" />
-      </method>
-      <method name="setURL(java.net.URL, String, String, int, String, String)">
-        <cov.data calls="462" hit_lines="0" total_lines="26" />
-      </method>
-      <method name="setURL(java.net.URL, String, String, int, String, String, String, String, String)">
-        <cov.data calls="973" hit_lines="0" total_lines="7" />
-      </method>
-      <method name="getDefaultPort()">
-        <cov.data calls="922" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getHostAddress(java.net.URL)">
-        <cov.data calls="922" hit_lines="0" total_lines="16" />
-      </method>
-      <method name="hostsEqual(java.net.URL, java.net.URL)">
-        <cov.data calls="434" hit_lines="0" total_lines="10" />
-      </method>
-    </class>
-    <class name="URL" source="URL.java">
-      <cov.data calls="4170" hit_methods="23" total_methods="33" hit_lines="0" total_lines="363" />
-      <method name="hashCode()">
-        <cov.data calls="566" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="&lt;init&gt;(String, String, int, String, java.net.URLStreamHandler)">
-        <cov.data calls="45" hit_lines="0" total_lines="32" />
-      </method>
-      <method name="&lt;init&gt;(String)">
-        <cov.data calls="8" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;(java.net.URL, String)">
-        <cov.data calls="973" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;(java.net.URL, String, java.net.URLStreamHandler)">
-        <cov.data calls="973" hit_lines="0" total_lines="100" />
-      </method>
-      <method name="&lt;init&gt;(String, String, String)">
-        <cov.data calls="5" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;(String, String, int, String)">
-        <cov.data calls="5" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;clinit&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="equals(Object)">
-        <cov.data calls="434" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="toString()">
-        <cov.data calls="52" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="set(String, String, int, String, String, String, String, String)">
-        <cov.data calls="973" hit_lines="0" total_lines="16" />
-      </method>
-      <method name="set(String, String, int, String, String)">
-        <cov.data calls="0" hit_lines="0" total_lines="19" />
-      </method>
-      <method name="openStream()">
-        <cov.data calls="8" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="writeObject(java.io.ObjectOutputStream)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="readObject(java.io.ObjectInputStream)">
-        <cov.data calls="0" hit_lines="0" total_lines="38" />
-      </method>
-      <method name="getPath()">
-        <cov.data calls="1" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="openConnection()">
-        <cov.data calls="47" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getProtocol()">
-        <cov.data calls="1" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getFile()">
-        <cov.data calls="1" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getHost()">
-        <cov.data calls="1" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="isValidProtocol(String)">
-        <cov.data calls="8" hit_lines="0" total_lines="14" />
-      </method>
-      <method name="checkSpecifyHandler(SecurityManager)">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="getQuery()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getUserInfo()">
-        <cov.data calls="1" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getAuthority()">
-        <cov.data calls="1" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getPort()">
-        <cov.data calls="1" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getRef()">
-        <cov.data calls="1" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="sameFile(java.net.URL)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="toExternalForm()">
-        <cov.data calls="52" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getContent()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getContent(Class[])">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="setURLStreamHandlerFactory(java.net.URLStreamHandlerFactory)">
-        <cov.data calls="0" hit_lines="0" total_lines="12" />
-      </method>
-      <method name="getURLStreamHandler(String)">
-        <cov.data calls="13" hit_lines="0" total_lines="90" />
-      </method>
-    </class>
-    <class name="URLStreamHandlerFactory" source="URLStreamHandlerFactory.java">
-      <cov.data calls="0" hit_methods="0" total_methods="1" hit_lines="0" total_lines="0" />
-      <method name="createURLStreamHandler(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-    </class>
-    <class name="URLClassLoader" source="URLClassLoader.java">
-      <cov.data calls="2319" hit_methods="8" total_methods="17" hit_lines="0" total_lines="228" />
-      <method name="&lt;init&gt;(java.net.URL[])">
-        <cov.data calls="0" hit_lines="0" total_lines="9" />
-      </method>
-      <method name="&lt;init&gt;(java.net.URL[], ClassLoader, java.net.URLStreamHandlerFactory)">
-        <cov.data calls="0" hit_lines="0" total_lines="9" />
-      </method>
-      <method name="&lt;init&gt;(java.net.URL[], ClassLoader)">
-        <cov.data calls="0" hit_lines="0" total_lines="9" />
-      </method>
-      <method name="newInstance(java.net.URL[], ClassLoader)">
-        <cov.data calls="0" hit_lines="0" total_lines="12" />
-      </method>
-      <method name="newInstance(java.net.URL[])">
-        <cov.data calls="0" hit_lines="0" total_lines="13" />
-      </method>
-      <method name="findClass(String)">
-        <cov.data calls="930" hit_lines="0" total_lines="18" />
-      </method>
-      <method name="defineClass(String, sun.misc.Resource)">
-        <cov.data calls="442" hit_lines="0" total_lines="34" />
-      </method>
-      <method name="findResources(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="findResource(String)">
-        <cov.data calls="44" hit_lines="0" total_lines="8" />
-      </method>
-      <method name="definePackage(String, java.util.jar.Manifest, java.net.URL)">
-        <cov.data calls="65" hit_lines="0" total_lines="44" />
-      </method>
-      <method name="access$000(java.net.URLClassLoader)">
-        <cov.data calls="1" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="access$100(java.net.URLClassLoader, String, sun.misc.Resource)">
-        <cov.data calls="442" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getPermissions(java.security.CodeSource)">
-        <cov.data calls="18" hit_lines="0" total_lines="51" />
-      </method>
-      <method name="access$300(java.net.URLClassLoader)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="addURL(java.net.URL)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="getURLs()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="isSealed(String, java.util.jar.Manifest)">
-        <cov.data calls="377" hit_lines="0" total_lines="12" />
-      </method>
-    </class>
-    <class name="URLClassLoader$1" source="URLClassLoader.java">
-      <cov.data calls="1860" hit_methods="2" total_methods="2" hit_lines="6" total_lines="7" />
-      <method name="&lt;init&gt;(java.net.URLClassLoader, String)">
-        <cov.data calls="930" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="run()">
-        <cov.data calls="930" hit_lines="5" total_lines="6" />
-      </method>
-    </class>
-    <class name="URLConnection" source="URLConnection.java">
-      <cov.data calls="48" hit_methods="2" total_methods="51" hit_lines="14" total_lines="240" />
-      <method name="&lt;init&gt;(java.net.URL)">
-        <cov.data calls="47" hit_lines="9" total_lines="9" />
-      </method>
-      <method name="&lt;clinit&gt;()">
-        <cov.data calls="1" hit_lines="5" total_lines="5" />
-      </method>
-      <method name="toString()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="access$000()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getURL()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getPermission()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getContent(Class[])">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="getContent()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="getInputStream()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="connect()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="setRequestProperty(String, String)">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="getDate()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getContentLength()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getHeaderField(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getHeaderField(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getHeaderFieldKey(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getFileNameMap()">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="getContentType()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="guessContentTypeFromStream(java.io.InputStream)">
-        <cov.data calls="0" hit_lines="0" total_lines="47" />
-      </method>
-      <method name="guessContentTypeFromName(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="setFileNameMap(java.net.FileNameMap)">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="getContentEncoding()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getExpiration()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getLastModified()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getHeaderFieldInt(String, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="getHeaderFieldDate(String, long)">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="getOutputStream()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="setDoInput(boolean)">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="getDoInput()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="setDoOutput(boolean)">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="getDoOutput()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="setAllowUserInteraction(boolean)">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="getAllowUserInteraction()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="setDefaultAllowUserInteraction(boolean)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="getDefaultAllowUserInteraction()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="setUseCaches(boolean)">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="getUseCaches()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="setIfModifiedSince(long)">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="getIfModifiedSince()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getDefaultUseCaches()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="setDefaultUseCaches(boolean)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="getRequestProperty(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="setDefaultRequestProperty(String, String)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getDefaultRequestProperty(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="setContentHandlerFactory(java.net.ContentHandlerFactory)">
-        <cov.data calls="0" hit_lines="0" total_lines="7" />
-      </method>
-      <method name="getContentHandler()">
-        <cov.data calls="0" hit_lines="0" total_lines="16" />
-      </method>
-      <method name="stripOffParameters(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="lookupContentHandlerClassFor(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="16" />
-      </method>
-      <method name="typeToPackageName(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="11" />
-      </method>
-      <method name="getContentHandlerPkgPrefixes()">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="checkfpx(java.io.InputStream)">
-        <cov.data calls="0" hit_lines="0" total_lines="46" />
-      </method>
-    </class>
-    <class name="ContentHandler" source="ContentHandler.java">
-      <cov.data calls="1" hit_methods="1" total_methods="3" hit_lines="1" total_lines="6" />
-      <method name="&lt;init&gt;()">
-        <cov.data calls="1" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="getContent(java.net.URLConnection, Class[])">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="getContent(java.net.URLConnection)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-    </class>
-    <class name="UnknownContentHandler" source="URLConnection.java">
-      <cov.data calls="1" hit_methods="1" total_methods="2" hit_lines="1" total_lines="2" />
-      <method name="&lt;init&gt;()">
-        <cov.data calls="1" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="getContent(java.net.URLConnection)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-    </class>
-    <class name="URLClassLoader$2" source="URLClassLoader.java">
-      <cov.data calls="88" hit_methods="2" total_methods="2" hit_lines="2" total_lines="2" />
-      <method name="&lt;init&gt;(java.net.URLClassLoader, String)">
-        <cov.data calls="44" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="run()">
-        <cov.data calls="44" hit_lines="1" total_lines="1" />
-      </method>
-    </class>
-    <class name="JarURLConnection" source="JarURLConnection.java">
-      <cov.data calls="32" hit_methods="4" total_methods="10" hit_lines="13" total_lines="22" />
-      <method name="&lt;init&gt;(java.net.URL)">
-        <cov.data calls="8" hit_lines="3" total_lines="3" />
-      </method>
-      <method name="getCertificates()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="getManifest()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getAttributes()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="getMainAttributes()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="getJarFile()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="getJarEntry()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getJarFileURL()">
-        <cov.data calls="8" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="getEntryName()">
-        <cov.data calls="8" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="parseSpecs(java.net.URL)">
-        <cov.data calls="8" hit_lines="8" total_lines="9" />
-      </method>
-    </class>
-    <class name="MalformedURLException" source="MalformedURLException.java">
-      <cov.data calls="0" hit_methods="0" total_methods="2" hit_lines="0" total_lines="4" />
-      <method name="&lt;init&gt;(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-    </class>
-  </package>
-  <package name="java.util.zip">
-    <cov.data calls="86626" hit_methods="104" total_methods="174" hit_lines="285" total_lines="659" />
-    <class name="ZipFile" source="ZipFile.java">
-      <cov.data calls="37851" hit_methods="21" total_methods="33" hit_lines="47" total_lines="84" />
-      <method name="&lt;init&gt;(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;(java.io.File, int)">
-        <cov.data calls="30" hit_lines="10" total_lines="12" />
-      </method>
-      <method name="&lt;init&gt;(java.io.File)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;clinit&gt;()">
-        <cov.data calls="1" hit_lines="3" total_lines="3" />
-      </method>
-      <method name="finalize()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="getName()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getMethod(long)">
-        <cov.data calls="511" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="access$000(java.util.zip.ZipFile, java.util.zip.Inflater)">
-        <cov.data calls="409" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="access$100(java.util.zip.ZipFile)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="size()">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="access$200(java.util.zip.ZipFile)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="access$300(long, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="access$400(long, long)">
-        <cov.data calls="510" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="access$500(long)">
-        <cov.data calls="511" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="read(long, long, int, byte[], int, int)">
-        <cov.data calls="1754" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="access$600(long)">
-        <cov.data calls="511" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="access$700(long, long, int, byte[], int, int)">
-        <cov.data calls="1754" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="open(String, int)">
-        <cov.data calls="30" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="close()">
-        <cov.data calls="0" hit_lines="0" total_lines="11" />
-      </method>
-      <method name="close(long)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="initIDs()">
-        <cov.data calls="1" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="getInputStream(String)">
-        <cov.data calls="511" hit_lines="8" total_lines="12" />
-      </method>
-      <method name="getInputStream(java.util.zip.ZipEntry)">
-        <cov.data calls="511" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="entries()">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="getEntry(long, String)">
-        <cov.data calls="18566" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="getEntry(String)">
-        <cov.data calls="9304" hit_lines="10" total_lines="12" />
-      </method>
-      <method name="getSize(long)">
-        <cov.data calls="511" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="getTotal(long)">
-        <cov.data calls="30" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="freeEntry(long, long)">
-        <cov.data calls="1063" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="getInflater()">
-        <cov.data calls="413" hit_lines="7" total_lines="8" />
-      </method>
-      <method name="releaseInflater(java.util.zip.Inflater)">
-        <cov.data calls="409" hit_lines="3" total_lines="4" />
-      </method>
-      <method name="getNextEntry(long, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="getCSize(long)">
-        <cov.data calls="511" hit_lines="0" total_lines="0" />
-      </method>
-    </class>
-    <class name="ZipEntry" source="ZipEntry.java">
-      <cov.data calls="13810" hit_methods="23" total_methods="28" hit_lines="66" total_lines="93" />
-      <method name="hashCode()">
-        <cov.data calls="634" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="&lt;init&gt;(java.util.zip.ZipEntry)">
-        <cov.data calls="575" hit_lines="15" total_lines="15" />
-      </method>
-      <method name="&lt;init&gt;(String, long)">
-        <cov.data calls="553" hit_lines="9" total_lines="9" />
-      </method>
-      <method name="&lt;init&gt;(String)">
-        <cov.data calls="317" hit_lines="10" total_lines="12" />
-      </method>
-      <method name="&lt;init&gt;(long)">
-        <cov.data calls="0" hit_lines="0" total_lines="8" />
-      </method>
-      <method name="&lt;clinit&gt;()">
-        <cov.data calls="1" hit_lines="3" total_lines="3" />
-      </method>
-      <method name="clone()">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="toString()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getName()">
-        <cov.data calls="667" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="getMethod()">
-        <cov.data calls="3181" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="setSize(long)">
-        <cov.data calls="317" hit_lines="3" total_lines="4" />
-      </method>
-      <method name="initIDs()">
-        <cov.data calls="1" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="isDirectory()">
-        <cov.data calls="88" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="getSize()">
-        <cov.data calls="1217" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="initFields(long)">
-        <cov.data calls="553" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="setTime(long)">
-        <cov.data calls="317" hit_lines="2" total_lines="2" />
-      </method>
-      <method name="getTime()">
-        <cov.data calls="951" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="getCompressedSize()">
-        <cov.data calls="911" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="setCompressedSize(long)">
-        <cov.data calls="317" hit_lines="2" total_lines="2" />
-      </method>
-      <method name="setCrc(long)">
-        <cov.data calls="317" hit_lines="3" total_lines="4" />
-      </method>
-      <method name="getCrc()">
-        <cov.data calls="674" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="setMethod(int)">
-        <cov.data calls="317" hit_lines="3" total_lines="4" />
-      </method>
-      <method name="setExtra(byte[])">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="getExtra()">
-        <cov.data calls="317" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="setComment(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="getComment()">
-        <cov.data calls="317" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="dosToJavaTime(long)">
-        <cov.data calls="951" hit_lines="2" total_lines="2" />
-      </method>
-      <method name="javaToDosTime(long)">
-        <cov.data calls="317" hit_lines="4" total_lines="5" />
-      </method>
-    </class>
-    <class name="ZipFile$ZipFileInputStream" source="ZipFile.java">
-      <cov.data calls="3799" hit_methods="5" total_methods="7" hit_lines="27" total_lines="38" />
-      <method name="&lt;init&gt;(long, long)">
-        <cov.data calls="511" hit_lines="7" total_lines="7" />
-      </method>
-      <method name="read()">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="read(byte[], int, int)">
-        <cov.data calls="1755" hit_lines="12" total_lines="13" />
-      </method>
-      <method name="skip(long)">
-        <cov.data calls="0" hit_lines="0" total_lines="6" />
-      </method>
-      <method name="available()">
-        <cov.data calls="10" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="close()">
-        <cov.data calls="507" hit_lines="2" total_lines="2" />
-      </method>
-      <method name="cleanup()">
-        <cov.data calls="1016" hit_lines="5" total_lines="5" />
-      </method>
-    </class>
-    <class name="InflaterInputStream" source="InflaterInputStream.java">
-      <cov.data calls="4026" hit_methods="5" total_methods="10" hit_lines="25" total_lines="64" />
-      <method name="&lt;init&gt;(java.io.InputStream, java.util.zip.Inflater, int)">
-        <cov.data calls="413" hit_lines="8" total_lines="10" />
-      </method>
-      <method name="&lt;init&gt;(java.io.InputStream, java.util.zip.Inflater)">
-        <cov.data calls="413" hit_lines="2" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;(java.io.InputStream)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="fill()">
-        <cov.data calls="0" hit_lines="0" total_lines="6" />
-      </method>
-      <method name="read()">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="read(byte[], int, int)">
-        <cov.data calls="1591" hit_lines="10" total_lines="14" />
-      </method>
-      <method name="skip(long)">
-        <cov.data calls="0" hit_lines="0" total_lines="16" />
-      </method>
-      <method name="available()">
-        <cov.data calls="9" hit_lines="3" total_lines="4" />
-      </method>
-      <method name="close()">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="ensureOpen()">
-        <cov.data calls="1600" hit_lines="2" total_lines="3" />
-      </method>
-    </class>
-    <class name="ZipFile$1" source="ZipFile.java">
-      <cov.data calls="2410" hit_methods="4" total_methods="4" hit_lines="14" total_lines="19" />
-      <method name="&lt;init&gt;(java.util.zip.ZipFile, java.io.InputStream, java.util.zip.Inflater)">
-        <cov.data calls="413" hit_lines="2" total_lines="2" />
-      </method>
-      <method name="fill()">
-        <cov.data calls="1579" hit_lines="5" total_lines="9" />
-      </method>
-      <method name="available()">
-        <cov.data calls="9" hit_lines="2" total_lines="3" />
-      </method>
-      <method name="close()">
-        <cov.data calls="409" hit_lines="5" total_lines="5" />
-      </method>
-    </class>
-    <class name="Inflater" source="Inflater.java">
-      <cov.data calls="13508" hit_methods="15" total_methods="28" hit_lines="31" total_lines="60" />
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;(boolean)">
-        <cov.data calls="25" hit_lines="4" total_lines="4" />
-      </method>
-      <method name="&lt;clinit&gt;()">
-        <cov.data calls="1" hit_lines="3" total_lines="3" />
-      </method>
-      <method name="finalize()">
-        <cov.data calls="4" hit_lines="2" total_lines="2" />
-      </method>
-      <method name="reset(long)">
-        <cov.data calls="388" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="reset()">
-        <cov.data calls="388" hit_lines="6" total_lines="7" />
-      </method>
-      <method name="init(boolean)">
-        <cov.data calls="25" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="initIDs()">
-        <cov.data calls="1" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="end()">
-        <cov.data calls="4" hit_lines="4" total_lines="4" />
-      </method>
-      <method name="end(long)">
-        <cov.data calls="4" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="setInput(byte[])">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="setInput(byte[], int, int)">
-        <cov.data calls="1579" hit_lines="6" total_lines="8" />
-      </method>
-      <method name="finished()">
-        <cov.data calls="1591" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="needsDictionary()">
-        <cov.data calls="1579" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="needsInput()">
-        <cov.data calls="1579" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="inflate(byte[], int, int)">
-        <cov.data calls="3170" hit_lines="3" total_lines="5" />
-      </method>
-      <method name="inflate(byte[])">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="setDictionary(long, byte[], int, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="setDictionary(byte[], int, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="7" />
-      </method>
-      <method name="setDictionary(byte[])">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="getRemaining()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getAdler()">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="getAdler(long)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="getTotalIn()">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="getTotalIn(long)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="getTotalOut()">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="getTotalOut(long)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="inflateBytes(byte[], int, int)">
-        <cov.data calls="3170" hit_lines="0" total_lines="0" />
-      </method>
-    </class>
-    <class name="ZipInputStream" source="ZipInputStream.java">
-      <cov.data calls="0" hit_methods="0" total_methods="15" hit_lines="0" total_lines="165" />
-      <method name="&lt;init&gt;(java.io.InputStream)">
-        <cov.data calls="0" hit_lines="0" total_lines="8" />
-      </method>
-      <method name="read(byte[], int, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="28" />
-      </method>
-      <method name="skip(long)">
-        <cov.data calls="0" hit_lines="0" total_lines="15" />
-      </method>
-      <method name="available()">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="close()">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="ensureOpen()">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="readFully(byte[], int, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="7" />
-      </method>
-      <method name="getNextEntry()">
-        <cov.data calls="0" hit_lines="0" total_lines="11" />
-      </method>
-      <method name="closeEntry()">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="readLOC()">
-        <cov.data calls="0" hit_lines="0" total_lines="28" />
-      </method>
-      <method name="getUTF8String(byte[], int, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="33" />
-      </method>
-      <method name="createZipEntry(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="readEnd(java.util.zip.ZipEntry)">
-        <cov.data calls="0" hit_lines="0" total_lines="18" />
-      </method>
-      <method name="get16(byte[], int)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="get32(byte[], int)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-    </class>
-    <class name="DeflaterOutputStream" source="DeflaterOutputStream.java">
-      <cov.data calls="1732" hit_methods="5" total_methods="8" hit_lines="23" total_lines="39" />
-      <method name="&lt;init&gt;(java.io.OutputStream, java.util.zip.Deflater)">
-        <cov.data calls="1" hit_lines="2" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;(java.io.OutputStream)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;(java.io.OutputStream, java.util.zip.Deflater, int)">
-        <cov.data calls="1" hit_lines="6" total_lines="8" />
-      </method>
-      <method name="write(byte[], int, int)">
-        <cov.data calls="328" hit_lines="8" total_lines="11" />
-      </method>
-      <method name="write(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="close()">
-        <cov.data calls="1" hit_lines="3" total_lines="3" />
-      </method>
-      <method name="finish()">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="deflate()">
-        <cov.data calls="1401" hit_lines="4" total_lines="4" />
-      </method>
-    </class>
-    <class name="CRC32" source="CRC32.java">
-      <cov.data calls="1295" hit_methods="6" total_methods="9" hit_lines="11" total_lines="17" />
-      <method name="&lt;init&gt;()">
-        <cov.data calls="3" hit_lines="2" total_lines="2" />
-      </method>
-      <method name="&lt;clinit&gt;()">
-        <cov.data calls="1" hit_lines="2" total_lines="2" />
-      </method>
-      <method name="reset()">
-        <cov.data calls="317" hit_lines="2" total_lines="2" />
-      </method>
-      <method name="getValue()">
-        <cov.data calls="318" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="update(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="update(int, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="update(byte[])">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="update(byte[], int, int)">
-        <cov.data calls="328" hit_lines="4" total_lines="6" />
-      </method>
-      <method name="updateBytes(int, byte[], int, int)">
-        <cov.data calls="328" hit_lines="0" total_lines="0" />
-      </method>
-    </class>
-    <class name="ZipException" source="ZipException.java">
-      <cov.data calls="0" hit_methods="0" total_methods="2" hit_lines="0" total_lines="4" />
-      <method name="&lt;init&gt;(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-    </class>
-    <class name="Deflater" source="Deflater.java">
-      <cov.data calls="8195" hit_methods="20" total_methods="30" hit_lines="41" total_lines="76" />
-      <method name="&lt;init&gt;(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;(int, boolean)">
-        <cov.data calls="1" hit_lines="6" total_lines="6" />
-      </method>
-      <method name="&lt;clinit&gt;()">
-        <cov.data calls="1" hit_lines="3" total_lines="3" />
-      </method>
-      <method name="finalize()">
-        <cov.data calls="1" hit_lines="2" total_lines="2" />
-      </method>
-      <method name="reset(long)">
-        <cov.data calls="297" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="reset()">
-        <cov.data calls="297" hit_lines="6" total_lines="7" />
-      </method>
-      <method name="init(int, int, boolean)">
-        <cov.data calls="1" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="initIDs()">
-        <cov.data calls="1" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="end()">
-        <cov.data calls="1" hit_lines="4" total_lines="4" />
-      </method>
-      <method name="end(long)">
-        <cov.data calls="1" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="setInput(byte[])">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="setInput(byte[], int, int)">
-        <cov.data calls="328" hit_lines="6" total_lines="8" />
-      </method>
-      <method name="finished()">
-        <cov.data calls="2026" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="needsInput()">
-        <cov.data calls="656" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="setDictionary(byte[], int, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="6" />
-      </method>
-      <method name="setDictionary(byte[])">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="setDictionary(long, byte[], int, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="getAdler()">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="getAdler(long)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="getTotalIn()">
-        <cov.data calls="297" hit_lines="2" total_lines="3" />
-      </method>
-      <method name="getTotalIn(long)">
-        <cov.data calls="297" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="getTotalOut(long)">
-        <cov.data calls="297" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="getTotalOut()">
-        <cov.data calls="297" hit_lines="2" total_lines="3" />
-      </method>
-      <method name="setLevel(int)">
-        <cov.data calls="297" hit_lines="3" total_lines="6" />
-      </method>
-      <method name="finish()">
-        <cov.data calls="297" hit_lines="2" total_lines="2" />
-      </method>
-      <method name="deflate(byte[], int, int)">
-        <cov.data calls="1401" hit_lines="3" total_lines="5" />
-      </method>
-      <method name="deflate(byte[])">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="setStrategy(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="7" />
-      </method>
-      <method name="deflateBytes(byte[], int, int)">
-        <cov.data calls="1401" hit_lines="0" total_lines="0" />
-      </method>
-    </class>
-  </package>
-  <package name="java.util.jar">
-    <cov.data calls="76626" hit_methods="55" total_methods="90" hit_lines="260" total_lines="488" />
-    <class name="JarFile" source="JarFile.java">
-      <cov.data calls="20129" hit_methods="10" total_methods="14" hit_lines="57" total_lines="74" />
-      <method name="&lt;init&gt;(String, boolean)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;(java.io.File)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;(java.io.File, boolean)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;(java.io.File, boolean, int)">
-        <cov.data calls="30" hit_lines="3" total_lines="3" />
-      </method>
-      <method name="&lt;init&gt;(String)">
-        <cov.data calls="30" hit_lines="2" total_lines="2" />
-      </method>
-      <method name="getBytes(java.util.zip.ZipEntry)">
-        <cov.data calls="61" hit_lines="5" total_lines="5" />
-      </method>
-      <method name="access$000(java.util.jar.JarFile)">
-        <cov.data calls="442" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="getManifest()">
-        <cov.data calls="472" hit_lines="12" total_lines="17" />
-      </method>
-      <method name="getInputStream(java.util.zip.ZipEntry)">
-        <cov.data calls="450" hit_lines="9" total_lines="10" />
-      </method>
-      <method name="getJarEntry(String)">
-        <cov.data calls="9296" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="entries()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="getMetaInfEntryNames()">
-        <cov.data calls="23" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="getEntry(String)">
-        <cov.data calls="9304" hit_lines="4" total_lines="4" />
-      </method>
-      <method name="initializeVerifier()">
-        <cov.data calls="21" hit_lines="20" total_lines="23" />
-      </method>
-    </class>
-    <class name="JarEntry" source="JarEntry.java">
-      <cov.data calls="597" hit_methods="2" total_methods="5" hit_lines="6" total_lines="10" />
-      <method name="&lt;init&gt;(java.util.zip.ZipEntry)">
-        <cov.data calls="575" hit_lines="2" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;(java.util.jar.JarEntry)">
-        <cov.data calls="22" hit_lines="4" total_lines="4" />
-      </method>
-      <method name="&lt;init&gt;(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="getCertificates()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getAttributes()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-    </class>
-    <class name="JarFile$JarFileEntry" source="JarFile.java">
-      <cov.data calls="995" hit_methods="2" total_methods="3" hit_lines="5" total_lines="12" />
-      <method name="&lt;init&gt;(java.util.jar.JarFile, java.util.zip.ZipEntry)">
-        <cov.data calls="553" hit_lines="3" total_lines="3" />
-      </method>
-      <method name="getCertificates()">
-        <cov.data calls="442" hit_lines="2" total_lines="5" />
-      </method>
-      <method name="getAttributes()">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-    </class>
-    <class name="Manifest" source="Manifest.java">
-      <cov.data calls="4579" hit_methods="8" total_methods="15" hit_lines="44" total_lines="85" />
-      <method name="hashCode()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="&lt;init&gt;(java.util.jar.Manifest)">
-        <cov.data calls="0" hit_lines="0" total_lines="6" />
-      </method>
-      <method name="&lt;init&gt;(java.io.InputStream)">
-        <cov.data calls="28" hit_lines="5" total_lines="5" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="3" hit_lines="4" total_lines="4" />
-      </method>
-      <method name="equals(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="clone()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="clear()">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="write(java.io.OutputStream)">
-        <cov.data calls="0" hit_lines="0" total_lines="13" />
-      </method>
-      <method name="read(java.io.InputStream)">
-        <cov.data calls="28" hit_lines="29" total_lines="33" />
-      </method>
-      <method name="getAttributes(String)">
-        <cov.data calls="893" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="getMainAttributes()">
-        <cov.data calls="473" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="getEntries()">
-        <cov.data calls="899" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="make72Safe(StringBuffer)">
-        <cov.data calls="0" hit_lines="0" total_lines="8" />
-      </method>
-      <method name="parseName(byte[], int)">
-        <cov.data calls="451" hit_lines="2" total_lines="3" />
-      </method>
-      <method name="toLower(int)">
-        <cov.data calls="1804" hit_lines="1" total_lines="1" />
-      </method>
-    </class>
-    <class name="Attributes" source="Attributes.java">
-      <cov.data calls="5785" hit_methods="12" total_methods="24" hit_lines="33" total_lines="82" />
-      <method name="hashCode()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="&lt;init&gt;(java.util.jar.Attributes)">
-        <cov.data calls="3" hit_lines="3" total_lines="3" />
-      </method>
-      <method name="&lt;init&gt;(int)">
-        <cov.data calls="482" hit_lines="3" total_lines="3" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="31" hit_lines="2" total_lines="2" />
-      </method>
-      <method name="put(Object, Object)">
-        <cov.data calls="1301" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="equals(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="clone()">
-        <cov.data calls="3" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="get(Object)">
-        <cov.data calls="861" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="getValue(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getValue(java.util.jar.Attributes$Name)">
-        <cov.data calls="861" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="values()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="size()">
-        <cov.data calls="454" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="clear()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="remove(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="write(java.io.DataOutputStream)">
-        <cov.data calls="0" hit_lines="0" total_lines="11" />
-      </method>
-      <method name="keySet()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="entrySet()">
-        <cov.data calls="6" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="isEmpty()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="containsValue(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="containsKey(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="putAll(java.util.Map)">
-        <cov.data calls="3" hit_lines="2" total_lines="2" />
-      </method>
-      <method name="read(java.util.jar.Manifest$FastInputStream, byte[])">
-        <cov.data calls="479" hit_lines="16" total_lines="23" />
-      </method>
-      <method name="writeMain(java.io.DataOutputStream)">
-        <cov.data calls="0" hit_lines="0" total_lines="20" />
-      </method>
-      <method name="putValue(String, String)">
-        <cov.data calls="1301" hit_lines="1" total_lines="1" />
-      </method>
-    </class>
-    <class name="Manifest$FastInputStream" source="Manifest.java">
-      <cov.data calls="5097" hit_methods="6" total_methods="11" hit_lines="38" total_lines="72" />
-      <method name="&lt;init&gt;(java.io.InputStream, int)">
-        <cov.data calls="28" hit_lines="5" total_lines="5" />
-      </method>
-      <method name="&lt;init&gt;(java.io.InputStream)">
-        <cov.data calls="28" hit_lines="2" total_lines="2" />
-      </method>
-      <method name="readLine(byte[], int, int)">
-        <cov.data calls="2264" hit_lines="23" total_lines="23" />
-      </method>
-      <method name="readLine(byte[])">
-        <cov.data calls="2264" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="fill()">
-        <cov.data calls="62" hit_lines="5" total_lines="5" />
-      </method>
-      <method name="read()">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="read(byte[], int, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="13" />
-      </method>
-      <method name="skip(long)">
-        <cov.data calls="0" hit_lines="0" total_lines="9" />
-      </method>
-      <method name="available()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="close()">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="peek()">
-        <cov.data calls="451" hit_lines="2" total_lines="3" />
-      </method>
-    </class>
-    <class name="Attributes$Name" source="Attributes.java">
-      <cov.data calls="39241" hit_methods="8" total_methods="9" hit_lines="36" total_lines="42" />
-      <method name="hashCode()">
-        <cov.data calls="2182" hit_lines="3" total_lines="3" />
-      </method>
-      <method name="&lt;init&gt;(String)">
-        <cov.data calls="1318" hit_lines="6" total_lines="8" />
-      </method>
-      <method name="&lt;clinit&gt;()">
-        <cov.data calls="1" hit_lines="17" total_lines="17" />
-      </method>
-      <method name="equals(Object)">
-        <cov.data calls="35" hit_lines="2" total_lines="3" />
-      </method>
-      <method name="toString()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="isDigit(char)">
-        <cov.data calls="1699" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="isValid(String)">
-        <cov.data calls="1318" hit_lines="5" total_lines="7" />
-      </method>
-      <method name="isValid(char)">
-        <cov.data calls="16344" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="isAlpha(char)">
-        <cov.data calls="16344" hit_lines="1" total_lines="1" />
-      </method>
-    </class>
-    <class name="JarVerifier" source="JarVerifier.java">
-      <cov.data calls="203" hit_methods="7" total_methods="9" hit_lines="41" total_lines="111" />
-      <method name="&lt;init&gt;(java.util.jar.Manifest, byte[])">
-        <cov.data calls="28" hit_lines="13" total_lines="13" />
-      </method>
-      <method name="&lt;clinit&gt;()">
-        <cov.data calls="1" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="beginEntry(java.util.jar.JarEntry, sun.security.util.ManifestEntryVerifier)">
-        <cov.data calls="33" hit_lines="9" total_lines="30" />
-      </method>
-      <method name="update(int, byte[], int, int, sun.security.util.ManifestEntryVerifier)">
-        <cov.data calls="66" hit_lines="5" total_lines="6" />
-      </method>
-      <method name="update(int, sun.security.util.ManifestEntryVerifier)">
-        <cov.data calls="0" hit_lines="0" total_lines="6" />
-      </method>
-      <method name="doneWithMeta()">
-        <cov.data calls="21" hit_lines="8" total_lines="8" />
-      </method>
-      <method name="nothingToVerify()">
-        <cov.data calls="21" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="getCerts(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="processEntry(sun.security.util.ManifestEntryVerifier)">
-        <cov.data calls="33" hit_lines="4" total_lines="45" />
-      </method>
-    </class>
-  </package>
-  <package name="java.security.cert">
-    <cov.data calls="0" hit_methods="0" total_methods="10" hit_lines="0" total_lines="25" />
-    <class name="Certificate" source="Certificate.java">
-      <cov.data calls="0" hit_methods="0" total_methods="10" hit_lines="0" total_lines="25" />
-      <method name="hashCode()">
-        <cov.data calls="0" hit_lines="0" total_lines="6" />
-      </method>
-      <method name="&lt;init&gt;(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="equals(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="13" />
-      </method>
-      <method name="toString()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="getType()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="verify(java.security.PublicKey)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="verify(java.security.PublicKey, String)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="getEncoded()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="getPublicKey()">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="writeReplace()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-    </class>
-  </package>
-  <package name="java.text">
-    <cov.data calls="864" hit_methods="64" total_methods="245" hit_lines="435" total_lines="1620" />
-    <class name="Format" source="Format.java">
-      <cov.data calls="16" hit_methods="1" total_methods="6" hit_lines="1" total_lines="10" />
-      <method name="&lt;init&gt;()">
-        <cov.data calls="16" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="clone()">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="format(Object, StringBuffer, java.text.FieldPosition)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="format(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="parseObject(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="parseObject(String, java.text.ParsePosition)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-    </class>
-    <class name="NumberFormat" source="NumberFormat.java">
-      <cov.data calls="295" hit_methods="16" total_methods="39" hit_lines="42" total_lines="95" />
-      <method name="hashCode()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="12" hit_lines="12" total_lines="12" />
-      </method>
-      <method name="&lt;clinit&gt;()">
-        <cov.data calls="1" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="equals(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="7" />
-      </method>
-      <method name="clone()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="getInstance()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getInstance(java.util.Locale, int)">
-        <cov.data calls="4" hit_lines="6" total_lines="6" />
-      </method>
-      <method name="getInstance(java.util.Locale)">
-        <cov.data calls="4" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="writeObject(java.io.ObjectOutputStream)">
-        <cov.data calls="0" hit_lines="0" total_lines="6" />
-      </method>
-      <method name="readObject(java.io.ObjectInputStream)">
-        <cov.data calls="0" hit_lines="0" total_lines="10" />
-      </method>
-      <method name="getAvailableLocales()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="format(long)">
-        <cov.data calls="16" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="format(double, StringBuffer, java.text.FieldPosition)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="format(long, StringBuffer, java.text.FieldPosition)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="format(Object, StringBuffer, java.text.FieldPosition)">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="format(double)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="parse(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="parse(String, java.text.ParsePosition)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="parseObject(String, java.text.ParsePosition)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="isParseIntegerOnly()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="setParseIntegerOnly(boolean)">
-        <cov.data calls="4" hit_lines="2" total_lines="2" />
-      </method>
-      <method name="getNumberInstance()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getNumberInstance(java.util.Locale)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getCurrencyInstance(java.util.Locale)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getCurrencyInstance()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getPercentInstance()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getPercentInstance(java.util.Locale)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getScientificInstance()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getScientificInstance(java.util.Locale)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="isGroupingUsed()">
-        <cov.data calls="98" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="setGroupingUsed(boolean)">
-        <cov.data calls="16" hit_lines="2" total_lines="2" />
-      </method>
-      <method name="getMaximumIntegerDigits()">
-        <cov.data calls="16" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="setMaximumIntegerDigits(int)">
-        <cov.data calls="20" hit_lines="3" total_lines="4" />
-      </method>
-      <method name="getMinimumIntegerDigits()">
-        <cov.data calls="16" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="setMinimumIntegerDigits(int)">
-        <cov.data calls="20" hit_lines="3" total_lines="4" />
-      </method>
-      <method name="getMaximumFractionDigits()">
-        <cov.data calls="16" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="setMaximumFractionDigits(int)">
-        <cov.data calls="12" hit_lines="3" total_lines="4" />
-      </method>
-      <method name="getMinimumFractionDigits()">
-        <cov.data calls="24" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="setMinimumFractionDigits(int)">
-        <cov.data calls="16" hit_lines="3" total_lines="4" />
-      </method>
-    </class>
-    <class name="DecimalFormat" source="DecimalFormat.java">
-      <cov.data calls="201" hit_methods="13" total_methods="43" hit_lines="196" total_lines="624" />
-      <method name="hashCode()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="&lt;init&gt;(String, java.text.DecimalFormatSymbols)">
-        <cov.data calls="4" hit_lines="15" total_lines="15" />
-      </method>
-      <method name="&lt;init&gt;(String)">
-        <cov.data calls="8" hit_lines="15" total_lines="15" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="22" />
-      </method>
-      <method name="&lt;clinit&gt;()">
-        <cov.data calls="1" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="equals(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="clone()">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="readObject(java.io.ObjectInputStream)">
-        <cov.data calls="0" hit_lines="0" total_lines="8" />
-      </method>
-      <method name="format(double, StringBuffer, java.text.FieldPosition)">
-        <cov.data calls="0" hit_lines="0" total_lines="25" />
-      </method>
-      <method name="format(long, StringBuffer, java.text.FieldPosition)">
-        <cov.data calls="16" hit_lines="9" total_lines="19" />
-      </method>
-      <method name="parse(String, java.text.ParsePosition)">
-        <cov.data calls="0" hit_lines="0" total_lines="31" />
-      </method>
-      <method name="setMaximumIntegerDigits(int)">
-        <cov.data calls="20" hit_lines="2" total_lines="2" />
-      </method>
-      <method name="setMinimumIntegerDigits(int)">
-        <cov.data calls="20" hit_lines="2" total_lines="2" />
-      </method>
-      <method name="setMaximumFractionDigits(int)">
-        <cov.data calls="12" hit_lines="2" total_lines="2" />
-      </method>
-      <method name="setMinimumFractionDigits(int)">
-        <cov.data calls="16" hit_lines="2" total_lines="2" />
-      </method>
-      <method name="subformat(StringBuffer, java.text.FieldPosition, boolean, boolean)">
-        <cov.data calls="16" hit_lines="31" total_lines="91" />
-      </method>
-      <method name="subparse(String, java.text.ParsePosition, java.text.DigitList, boolean, boolean[])">
-        <cov.data calls="0" hit_lines="0" total_lines="89" />
-      </method>
-      <method name="getDecimalFormatSymbols()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="setDecimalFormatSymbols(java.text.DecimalFormatSymbols)">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="getPositivePrefix()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="setPositivePrefix(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="getNegativePrefix()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="setNegativePrefix(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="getPositiveSuffix()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="setPositiveSuffix(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="getNegativeSuffix()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="setNegativeSuffix(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="getMultiplier()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="setMultiplier(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="getGroupingSize()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="setGroupingSize(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="isDecimalSeparatorAlwaysShown()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="setDecimalSeparatorAlwaysShown(boolean)">
-        <cov.data calls="16" hit_lines="2" total_lines="2" />
-      </method>
-      <method name="toPattern(boolean)">
-        <cov.data calls="0" hit_lines="0" total_lines="28" />
-      </method>
-      <method name="toPattern()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="toLocalizedPattern()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="expandAffixes()">
-        <cov.data calls="12" hit_lines="10" total_lines="10" />
-      </method>
-      <method name="expandAffix(String, StringBuffer)">
-        <cov.data calls="48" hit_lines="9" total_lines="18" />
-      </method>
-      <method name="appendAffix(StringBuffer, String, String, boolean)">
-        <cov.data calls="0" hit_lines="0" total_lines="25" />
-      </method>
-      <method name="appendAffix(StringBuffer, String, boolean)">
-        <cov.data calls="0" hit_lines="0" total_lines="11" />
-      </method>
-      <method name="applyPattern(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="applyPattern(String, boolean)">
-        <cov.data calls="12" hit_lines="96" total_lines="162" />
-      </method>
-      <method name="applyLocalizedPattern(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-    </class>
-    <class name="DateFormat" source="DateFormat.java">
-      <cov.data calls="8" hit_methods="2" total_methods="30" hit_lines="2" total_lines="55" />
-      <method name="hashCode()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="4" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="equals(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="clone()">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="get(int, int, int, java.util.Locale)">
-        <cov.data calls="0" hit_lines="0" total_lines="10" />
-      </method>
-      <method name="getInstance()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getAvailableLocales()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="format(java.util.Date)">
-        <cov.data calls="4" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="format(java.util.Date, StringBuffer, java.text.FieldPosition)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="format(Object, StringBuffer, java.text.FieldPosition)">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="parse(String, java.text.ParsePosition)">
-        <cov.data calls="0" hit_lines="0" total_lines="0" />
-      </method>
-      <method name="parse(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="parseObject(String, java.text.ParsePosition)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getTimeInstance(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getTimeInstance()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getTimeInstance(int, java.util.Locale)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getDateInstance(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getDateInstance()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getDateInstance(int, java.util.Locale)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getDateTimeInstance(int, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getDateTimeInstance()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getDateTimeInstance(int, int, java.util.Locale)">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="setCalendar(java.util.Calendar)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="getCalendar()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="setNumberFormat(java.text.NumberFormat)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="getNumberFormat()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="setTimeZone(java.util.TimeZone)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="getTimeZone()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="setLenient(boolean)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="isLenient()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-    </class>
-    <class name="SimpleDateFormat" source="SimpleDateFormat.java">
-      <cov.data calls="41" hit_methods="9" total_methods="30" hit_lines="66" total_lines="423" />
-      <method name="hashCode()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="&lt;init&gt;(String, java.util.Locale)">
-        <cov.data calls="4" hit_lines="6" total_lines="6" />
-      </method>
-      <method name="&lt;init&gt;(String, java.text.DateFormatSymbols)">
-        <cov.data calls="0" hit_lines="0" total_lines="6" />
-      </method>
-      <method name="&lt;init&gt;(int, int, java.util.Locale)">
-        <cov.data calls="0" hit_lines="0" total_lines="18" />
-      </method>
-      <method name="&lt;init&gt;(String)">
-        <cov.data calls="3" hit_lines="2" total_lines="2" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="&lt;clinit&gt;()">
-        <cov.data calls="1" hit_lines="3" total_lines="3" />
-      </method>
-      <method name="equals(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="clone()">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="readObject(java.io.ObjectInputStream)">
-        <cov.data calls="0" hit_lines="0" total_lines="6" />
-      </method>
-      <method name="format(java.util.Date, StringBuffer, java.text.FieldPosition)">
-        <cov.data calls="4" hit_lines="18" total_lines="22" />
-      </method>
-      <method name="initialize(java.util.Locale)">
-        <cov.data calls="4" hit_lines="9" total_lines="9" />
-      </method>
-      <method name="parse(String, java.text.ParsePosition)">
-        <cov.data calls="0" hit_lines="0" total_lines="97" />
-      </method>
-      <method name="toPattern()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="toLocalizedPattern()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="applyPattern(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="applyLocalizedPattern(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="initializeDefaultCentury()">
-        <cov.data calls="4" hit_lines="4" total_lines="4" />
-      </method>
-      <method name="parseAmbiguousDatesAsAfter(java.util.Date)">
-        <cov.data calls="4" hit_lines="4" total_lines="4" />
-      </method>
-      <method name="set2DigitYearStart(java.util.Date)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="get2DigitYearStart()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="subFormat(char, int, int, java.text.FieldPosition)">
-        <cov.data calls="9" hit_lines="17" total_lines="60" />
-      </method>
-      <method name="zeroPaddingNumber(long, int, int)">
-        <cov.data calls="8" hit_lines="3" total_lines="3" />
-      </method>
-      <method name="matchString(String, int, int, String[])">
-        <cov.data calls="0" hit_lines="0" total_lines="13" />
-      </method>
-      <method name="matchZoneString(String, int, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="subParseZoneString(String, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="21" />
-      </method>
-      <method name="subParse(String, int, char, int, boolean, boolean[])">
-        <cov.data calls="0" hit_lines="0" total_lines="106" />
-      </method>
-      <method name="translatePattern(String, String, String)">
-        <cov.data calls="0" hit_lines="0" total_lines="18" />
-      </method>
-      <method name="getDateFormatSymbols()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="setDateFormatSymbols(java.text.DateFormatSymbols)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-    </class>
-    <class name="ParseException" source="ParseException.java">
-      <cov.data calls="0" hit_methods="0" total_methods="2" hit_lines="0" total_lines="4" />
-      <method name="&lt;init&gt;(String, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="getErrorOffset()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-    </class>
-    <class name="DateFormatSymbols" source="DateFormatSymbols.java">
-      <cov.data calls="21" hit_methods="7" total_methods="31" hit_lines="60" total_lines="138" />
-      <method name="hashCode()">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="&lt;init&gt;(java.util.Locale)">
-        <cov.data calls="4" hit_lines="11" total_lines="11" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="11" />
-      </method>
-      <method name="&lt;clinit&gt;()">
-        <cov.data calls="1" hit_lines="2" total_lines="2" />
-      </method>
-      <method name="equals(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="equals(String[], String[])">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="clone()">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="getZoneIndex(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="getEras()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="setEras(String[])">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="getMonths()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="setMonths(String[])">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="getShortMonths()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="setShortMonths(String[])">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="getWeekdays()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="setWeekdays(String[])">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="getShortWeekdays()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="setShortWeekdays(String[])">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="getAmPmStrings()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="setAmPmStrings(String[])">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="getZoneStrings()">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="setZoneStrings(String[][])">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="getLocalPatternChars()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="setLocalPatternChars(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="getLocaleElements(java.util.Locale)">
-        <cov.data calls="2" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="getZoneData(java.util.Locale)">
-        <cov.data calls="2" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="cacheLookup(java.util.Locale)">
-        <cov.data calls="4" hit_lines="12" total_lines="16" />
-      </method>
-      <method name="loadZoneStrings(java.util.Locale, java.util.ResourceBundle)">
-        <cov.data calls="4" hit_lines="13" total_lines="13" />
-      </method>
-      <method name="initializeData(java.util.Locale)">
-        <cov.data calls="4" hit_lines="20" total_lines="20" />
-      </method>
-      <method name="duplicate(String[])">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="copyMembers(java.text.DateFormatSymbols, java.text.DateFormatSymbols)">
-        <cov.data calls="0" hit_lines="0" total_lines="10" />
-      </method>
-    </class>
-    <class name="DecimalFormatSymbols" source="DecimalFormatSymbols.java">
-      <cov.data calls="89" hit_methods="8" total_methods="36" hit_lines="35" total_lines="94" />
-      <method name="hashCode()">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="&lt;init&gt;(java.util.Locale)">
-        <cov.data calls="12" hit_lines="4" total_lines="4" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="&lt;clinit&gt;()">
-        <cov.data calls="1" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="equals(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="clone()">
-        <cov.data calls="4" hit_lines="1" total_lines="2" />
-      </method>
-      <method name="readObject(java.io.ObjectInputStream)">
-        <cov.data calls="0" hit_lines="0" total_lines="6" />
-      </method>
-      <method name="initialize(java.util.Locale)">
-        <cov.data calls="12" hit_lines="25" total_lines="26" />
-      </method>
-      <method name="getNaN()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getInfinity()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getZeroDigit()">
-        <cov.data calls="16" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="getGroupingSeparator()">
-        <cov.data calls="16" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="getMonetaryDecimalSeparator()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getDecimalSeparator()">
-        <cov.data calls="16" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="getExponentialSymbol()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getInternationalCurrencySymbol()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getCurrencySymbol()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getPercent()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getPerMill()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getMinusSign()">
-        <cov.data calls="12" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="getDigit()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getPatternSeparator()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="setPercent(char)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="setZeroDigit(char)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="setGroupingSeparator(char)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="setDecimalSeparator(char)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="setPerMill(char)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="setDigit(char)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="setPatternSeparator(char)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="setInfinity(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="setNaN(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="setMinusSign(char)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="setCurrencySymbol(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="setInternationalCurrencySymbol(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="setMonetaryDecimalSeparator(char)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="setExponentialSymbol(char)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-    </class>
-    <class name="DigitList" source="DigitList.java">
-      <cov.data calls="45" hit_methods="4" total_methods="19" hit_lines="22" total_lines="157" />
-      <method name="hashCode()">
-        <cov.data calls="0" hit_lines="0" total_lines="4" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="12" hit_lines="4" total_lines="4" />
-      </method>
-      <method name="&lt;clinit&gt;()">
-        <cov.data calls="1" hit_lines="6" total_lines="6" />
-      </method>
-      <method name="equals(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="11" />
-      </method>
-      <method name="toString()">
-        <cov.data calls="0" hit_lines="0" total_lines="6" />
-      </method>
-      <method name="append(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="set(long, int)">
-        <cov.data calls="16" hit_lines="11" total_lines="15" />
-      </method>
-      <method name="set(double, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="set(double, int, boolean)">
-        <cov.data calls="0" hit_lines="0" total_lines="37" />
-      </method>
-      <method name="set(long)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="clear()">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="getLong()">
-        <cov.data calls="0" hit_lines="0" total_lines="6" />
-      </method>
-      <method name="round(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="16" />
-      </method>
-      <method name="isZero()">
-        <cov.data calls="16" hit_lines="1" total_lines="2" />
-      </method>
-      <method name="fitsIntoLong(boolean, boolean)">
-        <cov.data calls="0" hit_lines="0" total_lines="11" />
-      </method>
-      <method name="getDouble()">
-        <cov.data calls="0" hit_lines="0" total_lines="7" />
-      </method>
-      <method name="shouldRoundUp(int)">
-        <cov.data calls="0" hit_lines="0" total_lines="10" />
-      </method>
-      <method name="isLongMIN_VALUE()">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="log10(double)">
-        <cov.data calls="0" hit_lines="0" total_lines="7" />
-      </method>
-    </class>
-    <class name="FieldPosition" source="FieldPosition.java">
-      <cov.data calls="148" hit_methods="4" total_methods="9" hit_lines="11" total_lines="20" />
-      <method name="hashCode()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="&lt;init&gt;(int)">
-        <cov.data calls="20" hit_lines="6" total_lines="6" />
-      </method>
-      <method name="equals(Object)">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="toString()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getField()">
-        <cov.data calls="64" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="setBeginIndex(int)">
-        <cov.data calls="32" hit_lines="2" total_lines="2" />
-      </method>
-      <method name="setEndIndex(int)">
-        <cov.data calls="32" hit_lines="2" total_lines="2" />
-      </method>
-      <method name="getEndIndex()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getBeginIndex()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-    </class>
-  </package>
-  <package name="java.sql">
-    <cov.data calls="0" hit_methods="0" total_methods="14" hit_lines="0" total_lines="54" />
-    <class name="SQLException" source="SQLException.java">
-      <cov.data calls="0" hit_methods="0" total_methods="8" hit_lines="0" total_lines="38" />
-      <method name="&lt;init&gt;(String, String)">
-        <cov.data calls="0" hit_lines="0" total_lines="8" />
-      </method>
-      <method name="&lt;init&gt;(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="7" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="7" />
-      </method>
-      <method name="&lt;init&gt;(String, String, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="8" />
-      </method>
-      <method name="getNextException()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="setNextException(java.sql.SQLException)">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-      <method name="getSQLState()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getErrorCode()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-    </class>
-    <class name="SQLWarning" source="SQLWarning.java">
-      <cov.data calls="0" hit_methods="0" total_methods="6" hit_lines="0" total_lines="16" />
-      <method name="&lt;init&gt;(String, String)">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="&lt;init&gt;(String)">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="&lt;init&gt;()">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="&lt;init&gt;(String, String, int)">
-        <cov.data calls="0" hit_lines="0" total_lines="3" />
-      </method>
-      <method name="getNextWarning()">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-      <method name="setNextWarning(java.sql.SQLWarning)">
-        <cov.data calls="0" hit_lines="0" total_lines="2" />
-      </method>
-    </class>
-  </package>
-  <package name="java.text.resources">
-    <cov.data calls="2649" hit_methods="22" total_methods="22" hit_lines="104" total_lines="106" />
-    <class name="LocaleElements" source="LocaleElements.java">
-      <cov.data calls="2" hit_methods="2" total_methods="2" hit_lines="2" total_lines="2" />
-      <method name="&lt;init&gt;()">
-        <cov.data calls="1" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="getContents()">
-        <cov.data calls="1" hit_lines="1" total_lines="1" />
-      </method>
-    </class>
-    <class name="LocaleElements_fr" source="LocaleElements_fr.java">
-      <cov.data calls="2" hit_methods="2" total_methods="2" hit_lines="2" total_lines="2" />
-      <method name="&lt;init&gt;()">
-        <cov.data calls="1" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="getContents()">
-        <cov.data calls="1" hit_lines="1" total_lines="1" />
-      </method>
-    </class>
-    <class name="LocaleElements_fr_FR" source="LocaleElements_fr_FR.java">
-      <cov.data calls="2" hit_methods="2" total_methods="2" hit_lines="2" total_lines="2" />
-      <method name="&lt;init&gt;()">
-        <cov.data calls="1" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="getContents()">
-        <cov.data calls="1" hit_lines="1" total_lines="1" />
-      </method>
-    </class>
-    <class name="DateFormatZoneData" source="DateFormatZoneData.java">
-      <cov.data calls="1319" hit_methods="5" total_methods="5" hit_lines="77" total_lines="79" />
-      <method name="&lt;init&gt;()">
-        <cov.data calls="3" hit_lines="3" total_lines="3" />
-      </method>
-      <method name="getKeys()">
-        <cov.data calls="4" hit_lines="9" total_lines="9" />
-      </method>
-      <method name="handleGetObject(String)">
-        <cov.data calls="1308" hit_lines="12" total_lines="13" />
-      </method>
-      <method name="getContents()">
-        <cov.data calls="1" hit_lines="43" total_lines="43" />
-      </method>
-      <method name="loadLookup()">
-        <cov.data calls="3" hit_lines="10" total_lines="11" />
-      </method>
-    </class>
-    <class name="DateFormatZoneData_fr" source="DateFormatZoneData_fr.java">
-      <cov.data calls="2" hit_methods="2" total_methods="2" hit_lines="2" total_lines="2" />
-      <method name="&lt;init&gt;()">
-        <cov.data calls="1" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="getContents()">
-        <cov.data calls="1" hit_lines="1" total_lines="1" />
-      </method>
-    </class>
-    <class name="DateFormatZoneData$1" source="DateFormatZoneData.java">
-      <cov.data calls="1316" hit_methods="3" total_methods="3" hit_lines="13" total_lines="13" />
-      <method name="&lt;init&gt;(java.text.resources.DateFormatZoneData, java.util.Enumeration, java.util.Enumeration)">
-        <cov.data calls="2" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="nextElement()">
-        <cov.data calls="658" hit_lines="9" total_lines="9" />
-      </method>
-      <method name="hasMoreElements()">
-        <cov.data calls="656" hit_lines="3" total_lines="3" />
-      </method>
-    </class>
-    <class name="LocaleElements_en" source="LocaleElements_en.java">
-      <cov.data calls="2" hit_methods="2" total_methods="2" hit_lines="2" total_lines="2" />
-      <method name="&lt;init&gt;()">
-        <cov.data calls="1" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="getContents()">
-        <cov.data calls="1" hit_lines="1" total_lines="1" />
-      </method>
-    </class>
-    <class name="LocaleElements_en_US" source="LocaleElements_en_US.java">
-      <cov.data calls="2" hit_methods="2" total_methods="2" hit_lines="2" total_lines="2" />
-      <method name="&lt;init&gt;()">
-        <cov.data calls="1" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="getContents()">
-        <cov.data calls="1" hit_lines="1" total_lines="1" />
-      </method>
-    </class>
-    <class name="DateFormatZoneData_en" source="DateFormatZoneData_en.java">
-      <cov.data calls="2" hit_methods="2" total_methods="2" hit_lines="2" total_lines="2" />
-      <method name="&lt;init&gt;()">
-        <cov.data calls="1" hit_lines="1" total_lines="1" />
-      </method>
-      <method name="getContents()">
-        <cov.data calls="1" hit_lines="1" total_lines="1" />
-      </method>
-    </class>
-  </package>
-  <package name="java.awt">
-    <cov.data calls="4" hit_methods="2" total_methods="6" hit_lines="6" total_lines="21" />
-    <class name="ComponentOrientation" source="ComponentOrientation.java">
-      <cov.data calls="4" hit_methods="2" total_methods="6" hit_lines="6" total_lines="21" />
-      <method name="&lt;init&gt;(int)">
-        <cov.data calls="3" hit_lines="3" total_lines="3" />
-      </method>
-      <method name="&lt;clinit&gt;()">
-        <cov.data calls="1" hit_lines="3" total_lines="3" />
-      </method>
-      <method name="isHorizontal()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="isLeftToRight()">
-        <cov.data calls="0" hit_lines="0" total_lines="1" />
-      </method>
-      <method name="getOrientation(java.util.ResourceBundle)">
-        <cov.data calls="0" hit_lines="0" total_lines="8" />
-      </method>
-      <method name="getOrientation(java.util.Locale)">
-        <cov.data calls="0" hit_lines="0" total_lines="5" />
-      </method>
-    </class>
-  </package>
-</snapshot>
-
diff --git a/src/etc/testcases/taskdefs/optional/wsdl/StockQuoteService.wsdl b/src/etc/testcases/taskdefs/optional/wsdl/StockQuoteService.wsdl
deleted file mode 100644
index 19f0eba..0000000
--- a/src/etc/testcases/taskdefs/optional/wsdl/StockQuoteService.wsdl
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<wsdl:definitions targetNamespace="http://localhost:8080/axis/StockQuoteService.jws" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:impl="http://localhost:8080/axis/StockQuoteService.jws-impl" xmlns:intf="http://localhost:8080/axis/StockQuoteService.jws" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
-  <wsdl:message name="getQuoteResponse">
-    <wsdl:part name="return" type="xsd:float"/>
-  </wsdl:message>
-  <wsdl:message name="getQuoteRequest">
-    <wsdl:part name="symbol" type="xsd:string"/>
-  </wsdl:message>
-  <wsdl:message name="Exception">
-  </wsdl:message>
-  <wsdl:portType name="StockQuoteService">
-    <wsdl:operation name="getQuote" parameterOrder="symbol">
-      <wsdl:input message="intf:getQuoteRequest"/>
-      <wsdl:output message="intf:getQuoteResponse"/>
-      <wsdl:fault message="intf:Exception" name="Exception"/>
-    </wsdl:operation>
-  </wsdl:portType>
-  <wsdl:binding name="StockQuoteServiceSoapBinding" type="intf:StockQuoteService">
-    <wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
-    <wsdl:operation name="getQuote">
-      <wsdlsoap:operation soapAction=""/>
-      <wsdl:input>
-        <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://localhost:8080/axis/StockQuoteService.jws" use="encoded"/>
-      </wsdl:input>
-      <wsdl:output>
-        <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://localhost:8080/axis/StockQuoteService.jws" use="encoded"/>
-      </wsdl:output>
-    </wsdl:operation>
-  </wsdl:binding>
-  <wsdl:service name="StockQuoteServiceService">
-    <wsdl:port binding="intf:StockQuoteServiceSoapBinding" name="StockQuoteService">
-      <wsdlsoap:address location="http://localhost:8080/axis/StockQuoteService.jws"/>
-    </wsdl:port>
-  </wsdl:service>
-</wsdl:definitions>
\ No newline at end of file
diff --git a/src/etc/testcases/taskdefs/optional/xalan-redirect-in.xsl b/src/etc/testcases/taskdefs/optional/xalan-redirect-in.xsl
deleted file mode 100644
index 2271b81..0000000
--- a/src/etc/testcases/taskdefs/optional/xalan-redirect-in.xsl
+++ /dev/null
@@ -1,20 +0,0 @@
-<xsl:stylesheet	xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
-	xmlns:lxslt="http://xml.apache.org/xslt"
-	xmlns:redirect="org.apache.xalan.xslt.extensions.Redirect"
-	extension-element-prefixes="redirect">
-<!--
-This is a test to ensure that systemid is set correctly
-for a xsl...the behavior might be dependent on Xalan1
-and Xalan2...this will be a problem to erase the files :(
-Can take as a systemid the base for the xsl document or
-the base or the JVM working dir just like: new File("xalan-redirect-out.tmp")
--->	
-<xsl:param name="xalan-version" select="'x'"/>
-
-<xsl:template match="/">
-<redirect:write file="./xalan{$xalan-version}-redirect-out.tmp">
-	<test>This should be written to the file</test>
-</redirect:write>
-</xsl:template>
-
-</xsl:stylesheet>
\ No newline at end of file
diff --git a/src/etc/testcases/taskdefs/optional/xml/about.xml b/src/etc/testcases/taskdefs/optional/xml/about.xml
deleted file mode 100644
index baaa165..0000000
--- a/src/etc/testcases/taskdefs/optional/xml/about.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE doc PUBLIC
-  "-//stevo//DTD doc 1.0//EN"
-  "nap:chemical+brothers"
-  >
-<doc>
-  <section title="About">
-  in the absence of technology, there is only marketing
-  </section>
-</doc>
diff --git a/src/etc/testcases/taskdefs/optional/xml/doc.dtd b/src/etc/testcases/taskdefs/optional/xml/doc.dtd
deleted file mode 100644
index c5ac24f..0000000
--- a/src/etc/testcases/taskdefs/optional/xml/doc.dtd
+++ /dev/null
@@ -1,8 +0,0 @@
-<!ELEMENT doc (section) >
-<!ELEMENT section (#PCDATA)>
-<!ATTLIST section title CDATA #IMPLIED>
-
-
-
-
-
diff --git a/src/etc/testcases/taskdefs/optional/xml/doc.xsl b/src/etc/testcases/taskdefs/optional/xml/doc.xsl
deleted file mode 100644
index ff1d0eb..0000000
--- a/src/etc/testcases/taskdefs/optional/xml/doc.xsl
+++ /dev/null
@@ -1,9 +0,0 @@
-<xsl:stylesheet 
-    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-    xmlns:template="struts template" 
-    version="1.0">
-<xsl:output method="text"/>
-<xsl:template match="/">
-<xsl:value-of select="/doc/section"/>
-</xsl:template> 
-</xsl:stylesheet>
diff --git a/src/etc/testcases/taskdefs/optional/xml/validate.xml b/src/etc/testcases/taskdefs/optional/xml/validate.xml
deleted file mode 100644
index 41c7e6b..0000000
--- a/src/etc/testcases/taskdefs/optional/xml/validate.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<project name="validate" default="testValidate" basedir=".">
-
- <target name="testValidate">
-    <xmlvalidate warn="false">
-      <fileset dir="." includes="about.xml"/>  
-       <dtd publicID="-//stevo//DTD doc 1.0//EN"
-         location="doc.dtd"/>
-    </xmlvalidate>
-  </target>
-  
-</project>
diff --git a/src/etc/testcases/taskdefs/optional/xmlvalidate.xml b/src/etc/testcases/taskdefs/optional/xmlvalidate.xml
deleted file mode 100644
index 1c9125f..0000000
--- a/src/etc/testcases/taskdefs/optional/xmlvalidate.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<project name="validate" default="testValidate" basedir=".">
-
-  <target name="testValidate">
-    <xmlvalidate warn="false">
-      <fileset dir="xml" includes="**/about.xml"/>  
-       <dtd publicID="-//stevo//DTD doc 1.0//EN"
-         location="xml/doc.dtd"/>
-    </xmlvalidate>
-  </target>
-  
-  <target name="testDeepValidate">
-    <ant dir="xml" 
-      antfile="validate.xml"
-      target="testValidate"/>
-  </target>
-
-  <target name="xmlcatalog">
-    <xmlvalidate warn="false">
-      <fileset dir="xml" includes="**/about.xml"/>
-      <xmlcatalog classpath="xml">
-        <dtd publicID="-//stevo//DTD doc 1.0//EN"
-             location="doc.dtd"/>
-      </xmlcatalog>
-    </xmlvalidate>
-  </target>
-  
-</project>
diff --git a/src/etc/testcases/taskdefs/optional/xslt.xml b/src/etc/testcases/taskdefs/optional/xslt.xml
deleted file mode 100644
index b6b0750..0000000
--- a/src/etc/testcases/taskdefs/optional/xslt.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<project name="xslt" default="xslt" basedir=".">
-  <target name="init">
-      <mkdir dir="xml/out"/>
-  </target>
-
-  <target name="teardown">
-      <delete dir="xml/out"/>
-  </target>
-  
-  <target name="testCatchNoDtd" depends="init">
-    <style basedir="xml" destdir="xml/out"
-           includes="about.xml"
-           extension=".txt"
-           style="xml/doc.xsl">
-     </style>
-  </target>
-  
-  <xmlcatalog id="xdocs.catalog">
-   <dtd publicID="-//stevo//DTD doc 1.0//EN"
-     location="xml/doc.dtd"/>
-  </xmlcatalog>  
-  
-  <target name="testCatalog" depends="init">
-    <style destdir="xml/out"
-           includes="about.xml"
-           extension=".txt"
-           style="xml/doc.xsl">
-       <xmlcatalog refid="xdocs.catalog"/>
-     </style>
-  </target>
-
-  
-</project>
diff --git a/src/etc/testcases/taskdefs/optional/xsltliaison-encoding-in.xml b/src/etc/testcases/taskdefs/optional/xsltliaison-encoding-in.xml
deleted file mode 100644
index e95cd64..0000000
--- a/src/etc/testcases/taskdefs/optional/xsltliaison-encoding-in.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<root>
-    <message>éàèïù</message>
-</root>
diff --git a/src/etc/testcases/taskdefs/optional/xsltliaison-encoding-in.xsl b/src/etc/testcases/taskdefs/optional/xsltliaison-encoding-in.xsl
deleted file mode 100644
index 0b4bc36..0000000
--- a/src/etc/testcases/taskdefs/optional/xsltliaison-encoding-in.xsl
+++ /dev/null
@@ -1,10 +0,0 @@
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
-
-<xsl:template match="/">
-    <root>
-    <xsl:for-each select="/root/message">
-        <message><xsl:value-of select="."/></message>
-    </xsl:for-each>
-    </root>
-</xsl:template>
-</xsl:stylesheet>
\ No newline at end of file
diff --git a/src/etc/testcases/taskdefs/optional/xsltliaison-in.xml b/src/etc/testcases/taskdefs/optional/xsltliaison-in.xml
deleted file mode 100644
index fbab456..0000000
--- a/src/etc/testcases/taskdefs/optional/xsltliaison-in.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE project [
-    <!ENTITY include SYSTEM "xsltliaison-include.xml">
-]>
-<project>
-    &include;
-</project>
diff --git a/src/etc/testcases/taskdefs/optional/xsltliaison-in.xsl b/src/etc/testcases/taskdefs/optional/xsltliaison-in.xsl
deleted file mode 100644
index 987de88..0000000
--- a/src/etc/testcases/taskdefs/optional/xsltliaison-in.xsl
+++ /dev/null
@@ -1,3 +0,0 @@
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
-<xsl:include href="xsltliaison-include.xsl"/>
-</xsl:stylesheet>
\ No newline at end of file
diff --git a/src/etc/testcases/taskdefs/optional/xsltliaison-include.xml b/src/etc/testcases/taskdefs/optional/xsltliaison-include.xml
deleted file mode 100644
index b925522..0000000
--- a/src/etc/testcases/taskdefs/optional/xsltliaison-include.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<!-- to be included by xsltliaison-include.xsl -->
-<task/>
diff --git a/src/etc/testcases/taskdefs/optional/xsltliaison-include.xsl b/src/etc/testcases/taskdefs/optional/xsltliaison-include.xsl
deleted file mode 100644
index 1008094..0000000
--- a/src/etc/testcases/taskdefs/optional/xsltliaison-include.xsl
+++ /dev/null
@@ -1,3 +0,0 @@
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
-<!-- to be included by xsltliaison-in.xsl -->
-</xsl:stylesheet>
\ No newline at end of file
diff --git a/src/etc/testcases/taskdefs/parallel.xml b/src/etc/testcases/taskdefs/parallel.xml
deleted file mode 100644
index b66a53e..0000000
--- a/src/etc/testcases/taskdefs/parallel.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0"?>
-
-<project name="parallel-test" basedir="." default="help">
-  <target name="testBasic">
-    <parallel>
-      <sequential>
-        <sleep seconds="1"/>
-        <echo message="${test.delayed}"/>
-      </sequential>
-      <echo message="${test.direct}"/>
-    </parallel>
-  </target>
-
-  <target name="testFail">
-    <parallel>
-      <sequential>
-        <sleep seconds="1"/>
-        <echo message="${test.delayed}"/>
-      </sequential>
-      <fail message="${test.failure}"/>
-    </parallel>
-  </target>
-
-  <target name="testDemux">
-    <parallel>
-      <demuxtest/>
-      <demuxtest/>
-      <demuxtest/>
-      <demuxtest/>
-      <demuxtest/>
-    </parallel>
-  </target>
-  
-  <target name="help">
-    <echo>Test build file for the &lt;parallel&gt; task.</echo> 
-    <echo>Use the various targets to run the tests.</echo>
-  </target>
-</project>
diff --git a/src/etc/testcases/taskdefs/property.xml b/src/etc/testcases/taskdefs/property.xml
deleted file mode 100644
index c46e21c..0000000
--- a/src/etc/testcases/taskdefs/property.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0"?>
-
-<project name="property-test" basedir="." default="test1">
-
-  <target name="test1">
-    <property environment="testenv"/>
-  </target>
-
-  <target name="test2">
-    <property name="testprop1" value="aa"/>
-    <property file="property1.properties"/>
-    <echo message="testprop1=${testprop1}, testprop3=${testprop3}, testprop4=${testprop4}"/>
-  </target>
-
-  <target name="test3">
-    <property file="property2.properties"/>
-  </target>
-
-  <target name="test4">
-    <property name="http.port" value="999" />
-    <property file="property3.properties"/>
-    <echo message="http.url is ${http.url}"/>
-  </target>
-  
-  <target name="prefix.success">
-    <property file="property3.properties" prefix="server1"/>
-  </target>
-
-  <target name="prefix.fail">
-    <property name="someprop" value="value" prefix="prefix"/>
-  </target>
-  
-</project>
diff --git a/src/etc/testcases/taskdefs/property1.properties b/src/etc/testcases/taskdefs/property1.properties
deleted file mode 100644
index ea3ecc4..0000000
--- a/src/etc/testcases/taskdefs/property1.properties
+++ /dev/null
@@ -1,3 +0,0 @@
-testprop2=xx
-testprop3=${testprop2}yy
-testprop4=${testprop1}zz
diff --git a/src/etc/testcases/taskdefs/property2.properties b/src/etc/testcases/taskdefs/property2.properties
deleted file mode 100644
index 257899a..0000000
--- a/src/etc/testcases/taskdefs/property2.properties
+++ /dev/null
@@ -1,3 +0,0 @@
-testprop1=aa${testprop2}bb
-testprop2=cc${testprop1}dd
-
diff --git a/src/etc/testcases/taskdefs/property3.properties b/src/etc/testcases/taskdefs/property3.properties
deleted file mode 100644
index efbf7ce..0000000
--- a/src/etc/testcases/taskdefs/property3.properties
+++ /dev/null
@@ -1,4 +0,0 @@
-http.port = 80
-http.url = http://localhost:${http.port}
-
-
diff --git a/src/etc/testcases/taskdefs/rename.xml b/src/etc/testcases/taskdefs/rename.xml
deleted file mode 100644
index 73db635..0000000
--- a/src/etc/testcases/taskdefs/rename.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0"?>
-
-<project name="xxx-test" basedir="." default="test1">
-
-  <target name="test1">
-    <rename/>
-  </target>
-
-  <target name="test2">
-    <rename src=""/>
-  </target>
-
-  <target name="test3">
-    <rename dest=""/>
-  </target>
-
-  <target name="test4">
-    <rename src="testdir" 
-            dest="testdir"/>
-  </target>
-
-  <target name="test5">
-    <rename src="template.xml" 
-            dest="."/>
-  </target>
-
-  <target name="test6">
-    <rename src="template.xml" 
-            dest="template.tmp"/>
-    <rename src="template.tmp" 
-            dest="template.xml"/>
-  </target>
-
-</project>
diff --git a/src/etc/testcases/taskdefs/replace.xml b/src/etc/testcases/taskdefs/replace.xml
deleted file mode 100644
index e7cf195..0000000
--- a/src/etc/testcases/taskdefs/replace.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0"?>
-
-<project name="xxx-test" basedir="." default="test1">
-
-  <target name="test1">
-    <replace/>
-  </target>
-
-  <target name="test2">
-    <replace file=""/>
-  </target>
-
-  <target name="test3">
-    <replace file="template.xml"/>
-  </target>
-
-  <target name="test4">
-    <replace file="template.xml" token=""/>
-  </target>
-
-  <target name="test5">
-    <replace file="template.xml" 
-             token="dont_want_to_really_replace_something"/>
-  </target>
-
-  <target name="test6">
-    <replace file="template.xml">
-      <replacefilter />
-    </replace>
-  </target>
-
-  <target name="test7">
-    <replace file="template.xml">
-      <replacefilter token="" />
-    </replace>
-  </target>
-
-  <target name="test8">
-    <replace file="template.xml">
-      <replacefilter token="dont_want_to_really_replace_something" />
-    </replace>
-  </target>
-
-</project>
diff --git a/src/etc/testcases/taskdefs/sleep.xml b/src/etc/testcases/taskdefs/sleep.xml
deleted file mode 100644
index 465b398..0000000
--- a/src/etc/testcases/taskdefs/sleep.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<project name="sleeptest" default="all" >
-
-    <target name="test1">
-        <sleep />
-    </target>
-
-    <target name="test2">
-        <sleep milliseconds="10"/>
-    </target>
-
-    <target name="test3">
-        <sleep seconds="2"/>
-    </target>
-
-    <target name="test4">
-        <sleep hours="1" minutes="-59" seconds="-58"/>
-    </target>
-
-    <target name="test5">
-        <sleep minutes="-59" seconds="-58"/>
-    </target>
-
-    <target name="test6">
-        <sleep minutes="-59" seconds="-58" failonerror="no"/>
-    </target>
-
-    <target name="all"
-        depends="test1,test2,test3,test4,test5" />
-
-</project>
diff --git a/src/etc/testcases/taskdefs/tar.xml b/src/etc/testcases/taskdefs/tar.xml
deleted file mode 100644
index 627c86a..0000000
--- a/src/etc/testcases/taskdefs/tar.xml
+++ /dev/null
@@ -1,111 +0,0 @@
-<?xml version="1.0"?>
-
-<project name="tar-test" basedir="." default="test1">
-
-  <target name="test1">
-    <tar/>
-  </target>
-
-  <target name="test2">
-    <tar tarfile=""/>
-  </target>
-
-  <target name="test3">
-    <tar basedir=""/>
-  </target>
-
-  <target name="test4">
-    <touch file="test4.tar"/>
-    <tar destfile="test4.tar"
-         basedir="."/>
-  </target>
-
-  <target name="test5">
-    <mkdir dir="test5dir"/>
-    <tar destfile="test5.tar"
-         basedir="."
-         includes="test5dir"/>
-  </target>
-
-  <target name="test6">
-    <tar destfile="blah" longfile="Foo"/>
-  </target>
-
-  <target name="test7">
-    <mkdir dir="test7dir"/>
-    <tar destfile="test7.tar">
-      <tarfileset dir="." prefix="test7-prefix/">
-        <include name="test7dir"/>
-      </tarfileset>
-      <tarfileset dir="." prefix="">
-        <include name="test7dir"/>
-      </tarfileset>
-    </tar>
-    <untar src="test7.tar" dest="."/>
-  </target>
-
-  <target name="test8">
-    <tar destfile="test8.tar">
-      <tarfileset dir="." fullpath="/test8.xml">
-        <include name="tar.xml"/>
-      </tarfileset>
-    </tar>
-    <untar src="test8.tar" dest="."/>
-  </target>
-
-  <target name="test9">
-    <tar destfile="blah" compression="Foo"/>
-  </target>
-
-  <target name="test10">
-    <tar destfile="test10.tar.gz" compression="gzip">
-      <tarfileset dir="." fullpath="/test10.xml">
-        <include name="tar.xml"/>
-      </tarfileset>
-    </tar>
-    <untar src="test10.tar.gz" dest="." compression="gzip"/>
-  </target>
-
-  <target name="test11">
-    <tar destfile="test11.tar.bz2" compression="bzip2">
-      <tarfileset dir="." fullpath="/test11.xml">
-        <include name="tar.xml"/>
-      </tarfileset>
-    </tar>
-    <untar src="test11.tar.bz2" dest="." compression="bzip2"/>
-  </target>
-
-  <target name="cleanup"> 
-    <delete file="test4.tar"/>
-    <delete file="test5.tar"/>
-    <delete file="asf-logo.gif.tar"/>
-    <delete dir="test5dir"/>
-    <delete dir="test7dir"/>
-    <delete dir="test7-prefix"/>
-    <delete file="test7.tar"/>
-    <delete file="test8.tar"/>
-    <delete file="test8.xml"/>
-    <delete file="test10.tar.gz"/>
-    <delete file="test10.xml"/>
-    <delete file="test11.tar.bz2"/>
-    <delete file="test11.xml"/>
-    <delete file="asf-logo.gif.tar.gz"/>
-    <delete file="asf-logo.gif.tar.bz2"/>
-  </target>
-
-  <target name="feather">
-    <tar destfile="asf-logo.gif.tar"
-         basedir=".."
-         includes="asf-logo.gif" />
-    <tar destfile="asf-logo.gif.tar.gz"
-         basedir=".."
-         includes="asf-logo.gif" 
-         compression="gzip"/>
-    <tar destfile="asf-logo.gif.tar.bz2"
-         basedir=".."
-         includes="asf-logo.gif"
-         compression="bzip2" />
-  </target>
-
-
-</project>
diff --git a/src/etc/testcases/taskdefs/taskdef.xml b/src/etc/testcases/taskdefs/taskdef.xml
deleted file mode 100644
index 96a6a4d..0000000
--- a/src/etc/testcases/taskdefs/taskdef.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?xml version="1.0"?>
-
-<project name="xxx-test" basedir="." default="test1">
-
-  <path id="testclasses">
-    <pathelement location="../../../../build/testcases" />
-    <pathelement path="${java.class.path}" />
-  </path>
-
-  <taskdef name="global"
-           classname="org.example.tasks.TaskdefTestContainerTask">
-    <classpath refid="testclasses" />
-  </taskdef>
-
-  <target name="test1">
-    <taskdef/>
-  </target>
-
-  <target name="test2">
-    <taskdef name=""/>
-  </target>
-
-  <target name="test3">
-    <taskdef classname=""/>
-  </target>
-
-  <target name="test4">
-    <taskdef name="" classname="oops"/>
-  </target>
-
-  <target name="test5">
-    <taskdef name="test" classname="org.apache.tools.ant.Project" />
-  </target>
-
-  <target name="test5a">
-    <taskdef name="test" classname="org.apache.tools.ant.taskdefs.Copy" />
-  </target>
-
-  <target name="test6">
-    <taskdef name="test6"
-             classname="org.example.tasks.TaskdefTestSimpleTask">
-      <classpath refid="testclasses" />
-    </taskdef>
-    <test6>
-      <echo message="worked" />
-    </test6>
-  </target>
-
-  <target name="test7">
-    <taskdef name="test7"
-             classname="org.example.tasks.TaskdefTestContainerTask">
-      <classpath refid="testclasses" />
-    </taskdef>
-    <test7>
-      <echo message="worked" />
-    </test7>
-  </target>
-
-  <target name="testGlobal">
-    <global>
-      <echo message="worked" />
-    </global>
-  </target>
-
-  <target name="testOverride">
-    <taskdef name="copy" classname="org.apache.tools.ant.taskdefs.Echo" />
-    <copy>In target</copy>
-    <sequential>
-      <copy>In TaskContainer</copy>
-    </sequential>
-  </target>
-
-</project>
diff --git a/src/etc/testcases/taskdefs/template.xml b/src/etc/testcases/taskdefs/template.xml
deleted file mode 100644
index e69de29..0000000
--- a/src/etc/testcases/taskdefs/template.xml
+++ /dev/null
diff --git a/src/etc/testcases/taskdefs/typedef.xml b/src/etc/testcases/taskdefs/typedef.xml
deleted file mode 100644
index 165d4df..0000000
--- a/src/etc/testcases/taskdefs/typedef.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version="1.0"?>
-
-<project name="test" basedir="." default="invalid">
-
-  <target name="invalid">
-    <fail>This file should only be run via a testcase</fail>
-  </target>
-
-  <target name="empty">
-    <typedef />
-  </target>
-
-  <target name="noClassname">
-    <typedef name="dummy" />
-  </target>
-
-  <target name="noName">
-    <typedef classname="org.example.types.TypedefTestType">
-      <classpath refid="testclasses" />
-    </typedef>
-  </target>
-
-  <target name="classNotFound">
-    <typedef name="" classname="oops"/>
-  </target>
-
-  <path id="testclasses">
-    <pathelement location="../../../../build/testcases" />
-    <pathelement path="${java.class.path}" />
-  </path>
-
-  <typedef name="global"
-           classname="org.example.types.TypedefTestType">
-    <classpath refid="testclasses" />
-  </typedef>
-
-  <target name="testGlobal">
-    <global id="global" />
-  </target>
-
-  <target name="testLocal">
-    <typedef name="local"
-             classname="org.example.types.TypedefTestType">
-      <classpath refid="testclasses" />
-    </typedef>
-    <local id="local" />
-  </target>
-
-</project>
\ No newline at end of file
diff --git a/src/etc/testcases/taskdefs/untar.xml b/src/etc/testcases/taskdefs/untar.xml
deleted file mode 100644
index 801045c..0000000
--- a/src/etc/testcases/taskdefs/untar.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0"?>
-
-<project basedir="." default="cleanup">
-
-  <target name="cleanup">
-    <delete file="asf-logo.gif" />
-  </target>
-
-  <target name="testTarTask">
-    <ant antfile="tar.xml" target="feather" />
-    <untar src="asf-logo.gif.tar" dest="." />
-    <ant antfile="tar.xml" target="cleanup" />
-  </target>
-
-  <target name="testGzipTarTask">
-    <ant antfile="tar.xml" target="feather" />
-    <untar src="asf-logo.gif.tar.gz" dest="." compression="gzip" />
-    <ant antfile="tar.xml" target="cleanup" />
-  </target>
-
-  <target name="testBzip2TarTask">
-    <ant antfile="tar.xml" target="feather" />
-    <untar src="asf-logo.gif.tar.bz2" dest="." compression="bzip2"/>
-    <ant antfile="tar.xml" target="cleanup" />
-  </target>
-
-  <target name="realTest">
-    <untar src="expected/asf-logo.gif.tar" dest="." />
-  </target>
-
-  <target name="realGzipTest">
-    <untar src="expected/asf-logo.gif.tar.gz" dest="." compression="gzip" />
-  </target>
-
-  <target name="realBzip2Test">
-    <untar src="expected/asf-logo.gif.tar.bz2" dest="." compression="bzip2"/>
-  </target>
-
-
-  <target name="srcDirTest">
-    <untar src="." dest="." />
-  </target>
-
-</project>
diff --git a/src/etc/testcases/taskdefs/unzip.xml b/src/etc/testcases/taskdefs/unzip.xml
deleted file mode 100644
index 61e42c9..0000000
--- a/src/etc/testcases/taskdefs/unzip.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0"?>
-
-<project name="xxx-test" basedir="." default="test1">
-
-  <target name="cleanup">
-    <delete file="asf-logo.gif" />
-  </target>
-
-  <target name="test1">
-    <unzip/>
-  </target>
-
-  <target name="test2">
-    <unzip src=""/>
-  </target>
-
-  <target name="test3">
-    <unzip dest=""/>
-  </target>
-
-  <target name="testZipTask">
-    <ant antfile="zip.xml" target="feather" />
-    <unzip src="asf-logo.gif.zip" dest="." />
-    <ant antfile="zip.xml" target="cleanup" />
-  </target>
-
-  <target name="realTest">
-    <unzip src="expected/asf-logo.gif.zip" dest="." />
-  </target>
-
-</project>
diff --git a/src/etc/testcases/taskdefs/war.xml b/src/etc/testcases/taskdefs/war.xml
deleted file mode 100644
index d83908c..0000000
--- a/src/etc/testcases/taskdefs/war.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0"?>
-
-<project name="war-test" basedir="." default="help">
-  <property name="working.dir" value="working"/>
-
-  <target name="help">
-    <echo message="Test file for the war task"/>
-  </target>
-
-  <target name="setup">
-    <mkdir dir="${working.dir}"/>
-  </target>
-  
-  <target name="testlibrefs" depends="setup">
-    <fileset id="test" dir="." includes="foobar"/>
-    <war webxml="war.xml" destfile="${working.dir}/test.war">
-      <lib refid="test"/>
-    </war>
-  </target>
-  
-  <target name="clean">
-    <delete dir="${working.dir}"/>
-  </target>
-</project>
diff --git a/src/etc/testcases/taskdefs/xmlproperty.xml b/src/etc/testcases/taskdefs/xmlproperty.xml
deleted file mode 100644
index 457cfca..0000000
--- a/src/etc/testcases/taskdefs/xmlproperty.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<project name="test" default="test" basedir=".">
-
-  <target name="test">
-    <xmlproperty file="xmlproperty_data.xml"/>
-  </target>
-
-</project>
diff --git a/src/etc/testcases/taskdefs/xmlproperty_data.xml b/src/etc/testcases/taskdefs/xmlproperty_data.xml
deleted file mode 100644
index d99951e..0000000
--- a/src/etc/testcases/taskdefs/xmlproperty_data.xml
+++ /dev/null
@@ -1,4 +0,0 @@
- <root-tag myattr="true">
-   <inner-tag someattr="val">Text</inner-tag>
-   <a2><a3><a4>false</a4></a3></a2>
- </root-tag>
diff --git a/src/etc/testcases/taskdefs/zip.xml b/src/etc/testcases/taskdefs/zip.xml
deleted file mode 100644
index 6fc7eb7..0000000
--- a/src/etc/testcases/taskdefs/zip.xml
+++ /dev/null
@@ -1,92 +0,0 @@
-<?xml version="1.0"?>
-
-<project name="zip-test" basedir="." default="test1">
-
-  <target name="test1">
-    <zip/>
-  </target>
-
-  <target name="test2">
-    <zip destFile="zip.tmp"/>
-  </target>
-
-  <!-- Test when the zip file includes itself
-  when target file exists before the zip task is run -->
-  <target name="test3">
-    <touch file="test3.zip"/>
-    <zip destFile="test3.zip"
-         basedir="."/>
-  </target>
-
-  <!-- Test when the zip file includes itself
-  when target file does not exist before the zip task is run -->
-  <target name="test4">
-     <zip destFile="test4.zip"
-         basedir="."/>
-  </target>
-
-  <target name="test5">
-    <zip zipfile="test5.zip" basedir="." >
-      <exclude name="test5.zip" />
-    </zip>
-  </target>
-
-  <target name="test6">
-    <zip destFile="test6.zip" basedir=".">
-      <include name="*.xml" />
-      <exclude name="zip.*" />
-    </zip>
-  </target>
-
-  <target name="test7">
-    <zip destFile="inner7.zip" basedir="." >
-      <exclude name="inner7.zip" />
-    </zip>
-    <zip destFile="test7.zip" basedir=".">
-      <exclude name="**/*.*" />
-      <zipfileset src="inner7.zip" />
-    </zip>
-  </target>
-
-  <target name="feather">
-    <zip destFile="asf-logo.gif.zip"
-         basedir=".."
-         includes="asf-logo.gif" />
-  </target>
-
-  <!-- legacy attribute support -->
-  <target name="test8">
-    <zip zipfile="test8.zip" basedir="." >
-      <exclude name="test8.zip" />
-    </zip>
-  </target>
-
-  <target name="testZipgroupfileset">
-
-    <zip zipfile="zipgroupfileset.zip" basedir=".">
-      <zipgroupfileset dir="zip" 
-        includes="zipgroupfileset*.zip" 
-        excludes="zipgroupfileset3.zip" />
-      <include name="zip/zipgroupfileset3.zip" />
-    </zip>
-  </target>
-
-  <target name="testDuplicateFail">
-
-    <zip zipfile="duplicateFail.zip" basedir="." duplicate="fail">
-      <zipgroupfileset dir="duplicate" includes="duplicate*.zip" />
-    </zip>
-  </target>
-
-  <target name="cleanup">
-    <delete file="test3.zip"/>
-    <delete file="test4.zip"/>
-    <delete file="test5.zip"/>
-    <delete file="test6.zip"/>
-    <delete file="inner7.zip"/>
-    <delete file="test7.zip"/>
-    <delete file="test8.zip"/>
-    <delete file="asf-logo.gif.zip"/>
-    <delete file="zipgroupfileset.zip"/>
-  </target>
-</project>
diff --git a/src/etc/testcases/taskdefs/zip/zipgroupfileset1.zip b/src/etc/testcases/taskdefs/zip/zipgroupfileset1.zip
deleted file mode 100644
index f3b96ff..0000000
--- a/src/etc/testcases/taskdefs/zip/zipgroupfileset1.zip
+++ /dev/null
Binary files differ
diff --git a/src/etc/testcases/taskdefs/zip/zipgroupfileset2.zip b/src/etc/testcases/taskdefs/zip/zipgroupfileset2.zip
deleted file mode 100644
index 89e09fd..0000000
--- a/src/etc/testcases/taskdefs/zip/zipgroupfileset2.zip
+++ /dev/null
Binary files differ
diff --git a/src/etc/testcases/taskdefs/zip/zipgroupfileset3.zip b/src/etc/testcases/taskdefs/zip/zipgroupfileset3.zip
deleted file mode 100644
index dead9c1..0000000
--- a/src/etc/testcases/taskdefs/zip/zipgroupfileset3.zip
+++ /dev/null
Binary files differ
diff --git a/src/etc/testcases/types/description1.xml b/src/etc/testcases/types/description1.xml
deleted file mode 100644
index 845d840..0000000
--- a/src/etc/testcases/types/description1.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<project name="test" default="main" basedir=".">
-  <description>Test Project Description</description>
-  <target name="main">
-  </target>
-</project>
diff --git a/src/etc/testcases/types/description2.xml b/src/etc/testcases/types/description2.xml
deleted file mode 100644
index 4935eaa..0000000
--- a/src/etc/testcases/types/description2.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<project name="test" default="main" basedir=".">
-  <description>Multi Line
-Project Description</description>
-  <target name="main">
-  </target>
-</project>
diff --git a/src/etc/testcases/types/description3.xml b/src/etc/testcases/types/description3.xml
deleted file mode 100644
index 6171dd7..0000000
--- a/src/etc/testcases/types/description3.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<project name="test" default="main" basedir=".">
-  <description>Multi Instance </description>
-  <description>Project Description</description>
-  <target name="main">
-  </target>
-</project>
diff --git a/src/etc/testcases/types/description4.xml b/src/etc/testcases/types/description4.xml
deleted file mode 100644
index 4d2197c..0000000
--- a/src/etc/testcases/types/description4.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<project name="test" default="main" basedir=".">
-  <description>Multi Instance </description>
-  <target name="main">
-      <description>Nested Project Description</description>
-  </target>
-</project>
diff --git a/src/etc/testcases/types/filterset.xml b/src/etc/testcases/types/filterset.xml
deleted file mode 100644
index 12b272c..0000000
--- a/src/etc/testcases/types/filterset.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-<project name="test" default="new" basedir=".">
-  <filterset id="testset.one">
-    <filter token="aaaa" value="1111"/>
-    <filter token="bbbb" value="2222"/>
-  </filterset>
-  
-  <filterset id="testset.two" beginToken="%" endToken="^">
-    <filter token="cccc" value="3333"/>
-    <filter token="dddd" value="4444"/>
-  </filterset>
-  
-  <target name="test1">
-    <delete file="dest1.txt"/>
-    <copy file="filterseta.txt" tofile="dest1.txt">
-        <filterset refid="testset.one"/> 
-    </copy>
-  </target>
-
-  <target name="test2">
-    <delete file="dest2.txt"/>
-    <copy file="filtersetb.txt" tofile="dest2.txt">
-        <filterset refid="testset.two"/> 
-    </copy>
-  </target>
-
-  <target name="test3">
-    <delete file="dest3.txt"/>
-    <copy file="filtersetc.txt" tofile="dest3.txt">
-        <filterset refid="testset.one"/> 
-        <filterset refid="testset.two"/> 
-    </copy>
-  </target>
-  
-  <target name="cleanup">
-    <delete file="dest1.txt" quiet="true" />
-    <delete file="dest2.txt" quiet="true" />
-    <delete file="dest3.txt" quiet="true" />
-  </target>
-
-</project>
diff --git a/src/etc/testcases/types/filterseta.txt b/src/etc/testcases/types/filterseta.txt
deleted file mode 100644
index 4404995..0000000
--- a/src/etc/testcases/types/filterseta.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-This is a test file for filters @aaaa@
-It has two lines @bbbb@
diff --git a/src/etc/testcases/types/filtersetb.txt b/src/etc/testcases/types/filtersetb.txt
deleted file mode 100644
index f49640a..0000000
--- a/src/etc/testcases/types/filtersetb.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-This is a test file for filters with non default markers
-@cccc@ - should not change
-%cccc^ - should change
-^dddd% - should not change
-%dddd^ - should change
diff --git a/src/etc/testcases/types/filtersetc.txt b/src/etc/testcases/types/filtersetc.txt
deleted file mode 100644
index 2522d35..0000000
--- a/src/etc/testcases/types/filtersetc.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-Combined filter test
-@aaaa@ - should change
-@bbbb@ - should change
-@cccc@ - should not change
-%cccc^ - should change
-^dddd% - should not change
-%dddd^ - should change
diff --git a/src/etc/testcases/types/flexinteger.xml b/src/etc/testcases/types/flexinteger.xml
deleted file mode 100644
index dd78c02..0000000
--- a/src/etc/testcases/types/flexinteger.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<project name="test" default="test" basedir=".">
-
-  <path id="testclasses">
-    <pathelement location="../../../../build/testcases" />
-    <pathelement path="${java.class.path}" />
-  </path>
-
-  <target name="test">
-    <taskdef name="flexint"
-             classname="org.apache.tools.ant.types.FlexIntegerTest"
-             classpathref="testclasses"
-    />
-            
-    <flexint propname="flexint.value1" value="0xA"/>
-    <flexint propname="flexint.value2" value="010"/>
-  </target>
-
-</project>
diff --git a/src/etc/testcases/types/gold/filterset1.txt b/src/etc/testcases/types/gold/filterset1.txt
deleted file mode 100644
index 975416f..0000000
--- a/src/etc/testcases/types/gold/filterset1.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-This is a test file for filters 1111
-It has two lines 2222
diff --git a/src/etc/testcases/types/gold/filterset2.txt b/src/etc/testcases/types/gold/filterset2.txt
deleted file mode 100644
index eaab021..0000000
--- a/src/etc/testcases/types/gold/filterset2.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-This is a test file for filters with non default markers
-@cccc@ - should not change
-3333 - should change
-^dddd% - should not change
-4444 - should change
diff --git a/src/etc/testcases/types/gold/filterset3.txt b/src/etc/testcases/types/gold/filterset3.txt
deleted file mode 100644
index 3516e62..0000000
--- a/src/etc/testcases/types/gold/filterset3.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-Combined filter test
-1111 - should change
-2222 - should change
-@cccc@ - should not change
-3333 - should change
-^dddd% - should not change
-4444 - should change
diff --git a/src/etc/testcases/types/mapper.xml b/src/etc/testcases/types/mapper.xml
deleted file mode 100644
index c42f9b9..0000000
--- a/src/etc/testcases/types/mapper.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0"?>
-
-<project name="copy-test" basedir="." default="test1">
-
-  <target name="test1">
-    <mkdir dir="copytest" />
-    <copy todir="copytest">
-      <fileset dir="../../../main">
-        <include name="**/taskdefs/*.java" />
-      </fileset>
-      <fileset dir="../../../testcases">
-        <include name="**/taskdefs/*.java" />
-      </fileset>
-      <mapper type="flatten" />
-    </copy>
-  </target>
-
-  <target name="cleanup">
-    <delete dir="copytest" />
-  </target>
-
-</project>
diff --git a/src/etc/yearcheck.sh b/src/etc/yearcheck.sh
deleted file mode 100755
index 0f4981e..0000000
--- a/src/etc/yearcheck.sh
+++ /dev/null
@@ -1,114 +0,0 @@
-#!/bin/sh
-
-# 
-#  The Apache Software License, Version 1.1
-# 
-#  Copyright (c) 2002 The Apache Software Foundation.  All rights
-#  reserved.
-# 
-#  Redistribution and use in source and binary forms, with or without
-#  modification, are permitted provided that the following conditions
-#  are met:
-# 
-#  1. Redistributions of source code must retain the above copyright
-#     notice, this list of conditions and the following disclaimer.
-# 
-#  2. Redistributions in binary form must reproduce the above copyright
-#     notice, this list of conditions and the following disclaimer in
-#     the documentation and/or other materials provided with the
-#     distribution.
-# 
-#  3. The end-user documentation included with the redistribution, if
-#     any, must include the following acknowlegement:
-#        "This product includes software developed by the
-#         Apache Software Foundation (http://www.apache.org/)."
-#     Alternately, this acknowlegement may appear in the software itself,
-#     if and wherever such third-party acknowlegements normally appear.
-# 
-#  4. The names "The Jakarta Project", "Ant", and "Apache Software
-#     Foundation" must not be used to endorse or promote products derived
-#     from this software without prior written permission. For written
-#     permission, please contact apache@apache.org.
-# 
-#  5. Products derived from this software may not be called "Apache"
-#     nor may "Apache" appear in their names without prior written
-#     permission of the Apache Group.
-# 
-#  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
-#  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-#  OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-#  DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
-#  ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-#  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-#  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
-#  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-#  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-#  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
-#  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-#  SUCH DAMAGE.
-#  ====================================================================
-# 
-#  This software consists of voluntary contributions made by many
-#  individuals on behalf of the Apache Software Foundation.  For more
-#  information on the Apache Software Foundation, please see
-#  <http://www.apache.org/>.
-# 
-
-#
-# Simple shell script that checks whether changed files contain a copyright
-# statement for a given year.
-#
-# Rename (or symlink) this script to the year you want to check, i.e. name it
-# 2002 if you want to check for copyright statements that do not contain#
-# the year 2002.
-#
-# Use this script instead of your usual cvs update command.
-#
-# Usage YEAR [all]
-#
-# If the optional all argument has been omitted, the proposal directory will
-# be skipped.
-#
-
-if [ -n "$TMP" ]; then
-  TEMP_FILE="$TMP"/changed-files
-else
-  if [ -n "$TEMP" ]; then
-    TEMP_FILE="$TEMP"/changed-files
-  else
-    TEMP_FILE=/tmp/changed-files
-  fi
-fi
-
-YEAR=`basename $0`
-
-if [ -z "$1" ]; then
-  cvs -z3 update -dP | fgrep -v proposal | cut -f 2 -d ' ' > $TEMP_FILE
-else
-  if [ "all" == "$1" ]; then
-    cvs -z3 update -dP | cut -f 2 -d ' ' > $TEMP_FILE
-  else
-    echo "Usage: $YEAR [all]"
-    exit
-  fi
-fi
-
-echo "Changed:"
-echo "========"
-cat $TEMP_FILE
-echo
-
-xargs fgrep -L Copyright < $TEMP_FILE > /tmp/no-copyright
-
-echo "No Copyright line"
-echo "================="
-cat /tmp/no-copyright
-echo
-
-xargs egrep -L "Copyright.*$YEAR" < $TEMP_FILE | cut -f 1 -d : > /tmp/no-$YEAR
-
-echo "No Copyright line for year $YEAR"
-echo "================================"
-cat /tmp/no-$YEAR
-
-rm $TEMP_FILE
diff --git a/src/main/org/apache/tools/ant/AntClassLoader.java b/src/main/org/apache/tools/ant/AntClassLoader.java
deleted file mode 100644
index 0ccaf32..0000000
--- a/src/main/org/apache/tools/ant/AntClassLoader.java
+++ /dev/null
@@ -1,1177 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant;
-
-import java.lang.reflect.Constructor;
-import java.lang.reflect.Method;
-import java.lang.reflect.InvocationTargetException;
-import java.util.Enumeration;
-import java.util.Vector;
-import java.util.Hashtable;
-import java.util.zip.ZipFile;
-import java.util.zip.ZipEntry;
-import java.io.File;
-import java.io.InputStream;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.ByteArrayOutputStream;
-import java.net.URL;
-import java.net.MalformedURLException;
-import org.apache.tools.ant.types.Path;
-import org.apache.tools.ant.util.LoaderUtils;
-
-/**
- * Used to load classes within ant with a different claspath from
- * that used to start ant. Note that it is possible to force a class
- * into this loader even when that class is on the system classpath by
- * using the forceLoadClass method. Any subsequent classes loaded by that
- * class will then use this loader rather than the system class loader.
- *
- * @author Conor MacNeill
- * @author <a href="mailto:Jesse.Glick@netbeans.com">Jesse Glick</a>
- * @author <a href="mailto:umagesh@apache.org">Magesh Umasankar</a>
- */
-public class AntClassLoader extends ClassLoader implements BuildListener {
-
-    /**
-     * An enumeration of all resources of a given name found within the
-     * classpath of this class loader. This enumeration is used by the
-     * ClassLoader.findResources method, which is in
-     * turn used by the ClassLoader.getResources method.
-     *
-     * @see AntClassLoader#findResources(String)
-     * @see java.lang.ClassLoader#getResources(String)
-     * @author <a href="mailto:hermand@alumni.grinnell.edu">David A. Herman</a>
-     */
-    private class ResourceEnumeration implements Enumeration {
-
-        /**
-         * The name of the resource being searched for.
-         */
-        private String resourceName;
-
-        /**
-         * The index of the next classpath element to search.
-         */
-        private int pathElementsIndex;
-
-        /**
-         * The URL of the next resource to return in the enumeration. If this
-         * field is <code>null</code> then the enumeration has been completed,
-         * i.e., there are no more elements to return.
-         */
-        private URL nextResource;
-
-        /**
-         * Constructs a new enumeration of resources of the given name found
-         * within this class loader's classpath.
-         *
-         * @param name the name of the resource to search for.
-         */
-        ResourceEnumeration(String name) {
-            this.resourceName = name;
-            this.pathElementsIndex = 0;
-            findNextResource();
-        }
-
-        /**
-         * Indicates whether there are more elements in the enumeration to
-         * return.
-         *
-         * @return <code>true</code> if there are more elements in the
-         *         enumeration; <code>false</code> otherwise.
-         */
-        public boolean hasMoreElements() {
-            return (this.nextResource != null);
-        }
-
-        /**
-         * Returns the next resource in the enumeration.
-         *
-         * @return the next resource in the enumeration
-         */
-        public Object nextElement() {
-            URL ret = this.nextResource;
-            findNextResource();
-            return ret;
-        }
-
-        /**
-         * Locates the next resource of the correct name in the classpath and
-         * sets <code>nextResource</code> to the URL of that resource. If no
-         * more resources can be found, <code>nextResource</code> is set to
-         * <code>null</code>.
-         */
-        private void findNextResource() {
-            URL url = null;
-            while ((pathElementsIndex < pathComponents.size()) &&
-                   (url == null)) {
-                try {
-                    File pathComponent
-                        = (File) pathComponents.elementAt(pathElementsIndex);
-                    url = getResourceURL(pathComponent, this.resourceName);
-                    pathElementsIndex++;
-                } catch (BuildException e) {
-                    // ignore path elements which are not valid relative to the
-                    // project
-                }
-            }
-            this.nextResource = url;
-        }
-    }
-
-    /**
-     * The size of buffers to be used in this classloader.
-     */
-    private static final int BUFFER_SIZE = 8192;
-
-    /**
-     * The components of the classpath that the classloader searches
-     * for classes.
-     */
-    private Vector pathComponents  = new Vector();
-
-    /**
-     * The project to which this class loader belongs.
-     */
-    private Project project;
-
-    /**
-     * Indicates whether the parent class loader should be
-     * consulted before trying to load with this class loader.
-     */
-    private boolean parentFirst = true;
-
-    /**
-     * These are the package roots that are to be loaded by the parent class
-     * loader regardless of whether the parent class loader is being searched
-     * first or not.
-     */
-    private Vector systemPackages = new Vector();
-
-    /**
-     * These are the package roots that are to be loaded by this class loader
-     * regardless of whether the parent class loader is being searched first
-     * or not.
-     */
-    private Vector loaderPackages = new Vector();
-
-    /**
-     * Whether or not this classloader will ignore the base
-     * classloader if it can't find a class.
-     *
-     * @see #setIsolated(boolean)
-     */
-    private boolean ignoreBase = false;
-
-    /**
-     * The parent class loader, if one is given or can be determined.
-     */
-    private ClassLoader parent = null;
-
-    /**
-     * A hashtable of zip files opened by the classloader (File to ZipFile).
-     */
-    private Hashtable zipFiles = new Hashtable();
-
-    /**
-     * The context loader saved when setting the thread's current
-     * context loader.
-     */
-    private ClassLoader savedContextLoader = null;
-    /**
-     * Whether or not the context loader is currently saved.
-     */
-    private boolean isContextLoaderSaved = false;
-
-    /**
-     * Reflection method reference for getProtectionDomain;
-     * used to avoid 1.1-compatibility problems.
-     */
-    private static Method getProtectionDomain = null;
-
-    /**
-     * Reflection method reference for defineClassProtectionDomain;
-     * used to avoid 1.1-compatibility problems.
-     */
-    private static Method defineClassProtectionDomain = null;
-
-
-    // Set up the reflection-based Java2 methods if possible
-    static {
-        try {
-            getProtectionDomain
-                = Class.class.getMethod("getProtectionDomain", new Class[0]);
-            Class protectionDomain
-                = Class.forName("java.security.ProtectionDomain");
-            Class[] args = new Class[] {String.class, byte[].class,
-                Integer.TYPE, Integer.TYPE, protectionDomain};
-            defineClassProtectionDomain
-                = ClassLoader.class.getDeclaredMethod("defineClass", args);
-        } catch (Exception e) {
-            // ignore failure to get access to 1.2+ methods
-        }
-    }
-
-
-    /**
-     * Creates a classloader for the given project using the classpath given.
-     *
-     * @param project The project to which this classloader is to belong.
-     *                Must not be <code>null</code>.
-     * @param classpath The classpath to use to load the classes.  This
-     *                is combined with the system classpath in a manner
-     *                determined by the value of ${build.sysclasspath}.
-     *                May be <code>null</code>, in which case no path
-     *                elements are set up to start with.
-     */
-    public AntClassLoader(Project project, Path classpath) {
-        parent = AntClassLoader.class.getClassLoader();
-        this.project = project;
-        project.addBuildListener(this);
-        if (classpath != null) {
-            Path actualClasspath = classpath.concatSystemClasspath("ignore");
-            String[] pathElements = actualClasspath.list();
-            for (int i = 0; i < pathElements.length; ++i) {
-                try {
-                    addPathElement(pathElements[i]);
-                } catch (BuildException e) {
-                    // ignore path elements which are invalid
-                    // relative to the project
-                }
-            }
-        }
-    }
-
-    /**
-     * Creates a classloader for the given project using the classpath given.
-     *
-     * @param parent The parent classloader to which unsatisfied loading
-     *               attempts are delegated. May be <code>null</code>,
-     *               in which case the classloader which loaded this
-     *               class is used as the parent.
-     * @param project The project to which this classloader is to belong.
-     *                Must not be <code>null</code>.
-     * @param classpath the classpath to use to load the classes.
-     *                  May be <code>null</code>, in which case no path
-     *                  elements are set up to start with.
-     * @param parentFirst If <code>true</code>, indicates that the parent
-     *                    classloader should be consulted  before trying to
-     *                    load the a class through this loader.
-     */
-    public AntClassLoader(ClassLoader parent, Project project, Path classpath,
-                          boolean parentFirst) {
-        this(project, classpath);
-        if (parent != null) {
-            this.parent = parent;
-        }
-        this.parentFirst = parentFirst;
-        addSystemPackageRoot("java");
-        addSystemPackageRoot("javax");
-    }
-
-
-    /**
-     * Creates a classloader for the given project using the classpath given.
-     *
-     * @param project The project to which this classloader is to belong.
-     *                Must not be <code>null</code>.
-     * @param classpath The classpath to use to load the classes. May be
-     *                  <code>null</code>, in which case no path
-     *                  elements are set up to start with.
-     * @param parentFirst If <code>true</code>, indicates that the parent
-     *                    classloader should be consulted before trying to
-     *                    load the a class through this loader.
-     */
-    public AntClassLoader(Project project, Path classpath,
-                          boolean parentFirst) {
-        this(null, project, classpath, parentFirst);
-    }
-
-    /**
-     * Creates an empty class loader. The classloader should be configured
-     * with path elements to specify where the loader is to look for
-     * classes.
-     *
-     * @param parent The parent classloader to which unsatisfied loading
-     *               attempts are delegated. May be <code>null</code>,
-     *               in which case the classloader which loaded this
-     *               class is used as the parent.
-     * @param parentFirst If <code>true</code>, indicates that the parent
-     *                    classloader should be consulted before trying to
-     *                    load the a class through this loader.
-     */
-    public AntClassLoader(ClassLoader parent, boolean parentFirst) {
-        if (parent != null) {
-            this.parent = parent;
-        } else {
-            parent = AntClassLoader.class.getClassLoader();
-        }
-        project = null;
-        this.parentFirst = parentFirst;
-    }
-
-    /**
-     * Logs a message through the project object if one has been provided.
-     *
-     * @param message The message to log.
-     *                Should not be <code>null</code>.
-     *
-     * @param priority The logging priority of the message.
-     */
-    protected void log(String message, int priority) {
-        if (project != null) {
-            project.log(message, priority);
-        }
-//         else {
-//             System.out.println(message);
-//         }
-    }
-
-    /**
-     * Sets the current thread's context loader to this classloader, storing
-     * the current loader value for later resetting.
-     */
-    public void setThreadContextLoader() {
-        if (isContextLoaderSaved) {
-            throw new BuildException("Context loader has not been reset");
-        }
-        if (LoaderUtils.isContextLoaderAvailable()) {
-            savedContextLoader = LoaderUtils.getContextClassLoader();
-            ClassLoader loader = this;
-            if ("only".equals(project.getProperty("build.sysclasspath"))) {
-                loader = this.getClass().getClassLoader();
-            }
-            LoaderUtils.setContextClassLoader(loader);
-            isContextLoaderSaved = true;
-        }
-    }
-
-    /**
-     * Resets the current thread's context loader to its original value.
-     */
-    public void resetThreadContextLoader() {
-        if (LoaderUtils.isContextLoaderAvailable()
-            && isContextLoaderSaved) {
-            LoaderUtils.setContextClassLoader(savedContextLoader);
-            savedContextLoader = null;
-            isContextLoaderSaved = false;
-        }
-    }
-
-
-    /**
-     * Adds an element to the classpath to be searched.
-     *
-     * @param pathElement The path element to add. Must not be
-     *                    <code>null</code>.
-     *
-     * @exception BuildException if the given path element cannot be resolved
-     *                           against the project.
-     */
-    public void addPathElement(String pathElement) throws BuildException {
-        File pathComponent
-            = project != null ? project.resolveFile(pathElement)
-                              : new File(pathElement);
-        pathComponents.addElement(pathComponent);
-    }
-
-    /**
-     * Returns the classpath this classloader will consult.
-     *
-     * @return the classpath used for this classloader, with elements
-     *         separated by the path separator for the system.
-     */
-    public String getClasspath(){
-        StringBuffer sb = new StringBuffer();
-        boolean firstPass = true;
-        Enumeration enum = pathComponents.elements();
-        while (enum.hasMoreElements()) {
-            if (!firstPass) {
-                sb.append(System.getProperty("path.separator"));
-            } else {
-                firstPass = false;
-            }
-            sb.append(((File) enum.nextElement()).getAbsolutePath());
-        }
-        return sb.toString();
-    }
-
-    /**
-     * Sets whether this classloader should run in isolated mode. In
-     * isolated mode, classes not found on the given classpath will
-     * not be referred to the parent class loader but will cause a
-     * ClassNotFoundException.
-     *
-     * @param isolated Whether or not this classloader should run in
-     *                 isolated mode.
-     */
-    public void setIsolated(boolean isolated) {
-        ignoreBase = isolated;
-    }
-
-    /**
-     * Forces initialization of a class in a JDK 1.1 compatible, albeit hacky
-     * way.
-     *
-     * @param theClass The class to initialize.
-     *                 Must not be <code>null</code>.
-     */
-    public static void initializeClass(Class theClass) {
-        // ***HACK*** We ask the VM to create an instance
-        // by voluntarily providing illegal arguments to force
-        // the VM to run the class' static initializer, while
-        // at the same time not running a valid constructor.
-
-        final Constructor[] cons = theClass.getDeclaredConstructors();
-        //At least one constructor is guaranteed to be there, but check anyway.
-        if (cons != null) {
-            if (cons.length > 0 && cons[0] != null) {
-                final String[] strs = new String[256];
-                try {
-                    cons[0].newInstance(strs);
-                    // Expecting an exception to be thrown by this call:
-                    // IllegalArgumentException: wrong number of Arguments
-                } catch (Throwable t) {
-                    // Ignore - we are interested only in the side
-                    // effect - that of getting the static initializers
-                    // invoked.  As we do not want to call a valid
-                    // constructor to get this side effect, an
-                    // attempt is made to call a hopefully
-                    // invalid constructor - come on, nobody
-                    // would have a constructor that takes in
-                    // 256 String arguments ;-)
-                    // (In fact, they can't - according to JVM spec
-                    // section 4.10, the number of method parameters is limited
-                    // to 255 by the definition of a method descriptor.
-                    // Constructors count as methods here.)
-                }
-            }
-        }
-    }
-
-    /**
-     * Adds a package root to the list of packages which must be loaded on the
-     * parent loader.
-     *
-     * All subpackages are also included.
-     *
-     * @param packageRoot The root of all packages to be included.
-     *                    Should not be <code>null</code>.
-     */
-    public void addSystemPackageRoot(String packageRoot) {
-        systemPackages.addElement(packageRoot + ".");
-    }
-
-    /**
-     * Adds a package root to the list of packages which must be loaded using
-     * this loader.
-     *
-     * All subpackages are also included.
-     *
-     * @param packageRoot The root of all packages to be included.
-     *                    Should not be <code>null</code>.
-     */
-    public void addLoaderPackageRoot(String packageRoot) {
-        loaderPackages.addElement(packageRoot + ".");
-    }
-
-    /**
-     * Loads a class through this class loader even if that class is available
-     * on the parent classpath.
-     *
-     * This ensures that any classes which are loaded by the returned class
-     * will use this classloader.
-     *
-     * @param classname The name of the class to be loaded.
-     *                  Must not be <code>null</code>.
-     *
-     * @return the required Class object
-     *
-     * @exception ClassNotFoundException if the requested class does not exist
-     *                                   on this loader's classpath.
-     */
-    public Class forceLoadClass(String classname)
-         throws ClassNotFoundException {
-        log("force loading " + classname, Project.MSG_DEBUG);
-
-        Class theClass = findLoadedClass(classname);
-
-        if (theClass == null) {
-            theClass = findClass(classname);
-        }
-
-        return theClass;
-    }
-
-    /**
-     * Loads a class through this class loader but defer to the parent class
-     * loader.
-     *
-     * This ensures that instances of the returned class will be compatible
-     * with instances which which have already been loaded on the parent
-     * loader.
-     *
-     * @param classname The name of the class to be loaded.
-     *                  Must not be <code>null</code>.
-     *
-     * @return the required Class object
-     *
-     * @exception ClassNotFoundException if the requested class does not exist
-     * on this loader's classpath.
-     */
-    public Class forceLoadSystemClass(String classname)
-         throws ClassNotFoundException {
-        log("force system loading " + classname, Project.MSG_DEBUG);
-
-        Class theClass = findLoadedClass(classname);
-
-        if (theClass == null) {
-            theClass = findBaseClass(classname);
-        }
-
-        return theClass;
-    }
-
-    /**
-     * Returns a stream to read the requested resource name.
-     *
-     * @param name The name of the resource for which a stream is required.
-     *             Must not be <code>null</code>.
-     *
-     * @return a stream to the required resource or <code>null</code> if the
-     *         resource cannot be found on the loader's classpath.
-     */
-    public InputStream getResourceAsStream(String name) {
-
-        InputStream resourceStream = null;
-        if (isParentFirst(name)) {
-            resourceStream = loadBaseResource(name);
-            if (resourceStream != null) {
-                log("ResourceStream for " + name
-                    + " loaded from parent loader", Project.MSG_DEBUG);
-
-            } else {
-                resourceStream = loadResource(name);
-                if (resourceStream != null) {
-                    log("ResourceStream for " + name
-                        + " loaded from ant loader", Project.MSG_DEBUG);
-                }
-            }
-        } else {
-            resourceStream = loadResource(name);
-            if (resourceStream != null) {
-                log("ResourceStream for " + name
-                    + " loaded from ant loader", Project.MSG_DEBUG);
-
-            } else {
-                resourceStream = loadBaseResource(name);
-                if (resourceStream != null) {
-                    log("ResourceStream for " + name
-                        + " loaded from parent loader", Project.MSG_DEBUG);
-                }
-            }
-        }
-
-        if (resourceStream == null) {
-            log("Couldn't load ResourceStream for " + name,
-                Project.MSG_DEBUG);
-        }
-
-        return resourceStream;
-    }
-
-    /**
-     * Returns a stream to read the requested resource name from this loader.
-     *
-     * @param name The name of the resource for which a stream is required.
-     *             Must not be <code>null</code>.
-     *
-     * @return a stream to the required resource or <code>null</code> if
-     *         the resource cannot be found on the loader's classpath.
-     */
-    private InputStream loadResource(String name) {
-        // we need to search the components of the path to see if we can
-        // find the class we want.
-        InputStream stream = null;
-
-        Enumeration e = pathComponents.elements();
-        while (e.hasMoreElements() && stream == null) {
-            File pathComponent = (File) e.nextElement();
-            stream = getResourceStream(pathComponent, name);
-        }
-        return stream;
-    }
-
-    /**
-     * Finds a system resource (which should be loaded from the parent
-     * classloader).
-     *
-     * @param name The name of the system resource to load.
-     *             Must not be <code>null</code>.
-     *
-     * @return a stream to the named resource, or <code>null</code> if
-     *         the resource cannot be found.
-     */
-    private InputStream loadBaseResource(String name) {
-        if (parent == null) {
-            return getSystemResourceAsStream(name);
-        } else {
-            return parent.getResourceAsStream(name);
-        }
-    }
-
-    /**
-     * Returns an inputstream to a given resource in the given file which may
-     * either be a directory or a zip file.
-     *
-     * @param file the file (directory or jar) in which to search for the
-     *             resource. Must not be <code>null</code>.
-     * @param resourceName The name of the resource for which a stream is
-     *                     required. Must not be <code>null</code>.
-     *
-     * @return a stream to the required resource or <code>null</code> if
-     *         the resource cannot be found in the given file.
-     */
-    private InputStream getResourceStream(File file, String resourceName) {
-        try {
-            if (!file.exists()) {
-                return null;
-            }
-
-            if (file.isDirectory()) {
-                File resource = new File(file, resourceName);
-
-                if (resource.exists()) {
-                    return new FileInputStream(resource);
-                }
-            } else {
-                // is the zip file in the cache
-                ZipFile zipFile = (ZipFile) zipFiles.get(file);
-                if (zipFile == null) {
-                    zipFile = new ZipFile(file);
-                    zipFiles.put(file, zipFile);
-                }
-                ZipEntry entry = zipFile.getEntry(resourceName);
-                if (entry != null) {
-                    return zipFile.getInputStream(entry);
-                }
-            }
-        } catch (Exception e) {
-            log("Ignoring Exception " + e.getClass().getName()
-                + ": " + e.getMessage() + " reading resource " + resourceName
-                + " from " + file, Project.MSG_VERBOSE);
-        }
-
-        return null;
-    }
-
-    /**
-     * Tests whether or not the parent classloader should be checked for
-     * a resource before this one. If the resource matches both the
-     * "use parent classloader first" and the "use this classloader first"
-     * lists, the latter takes priority.
-     *
-     * @param resourceName The name of the resource to check.
-     *                     Must not be <code>null</code>.
-     *
-     * @return whether or not the parent classloader should be checked for a
-     *         resource before this one is.
-     */
-    private boolean isParentFirst(String resourceName) {
-        // default to the global setting and then see
-        // if this class belongs to a package which has been
-        // designated to use a specific loader first
-        // (this one or the parent one)
-
-        // XXX - shouldn't this always return false in isolated mode?
-
-        boolean useParentFirst = parentFirst;
-
-        for (Enumeration e = systemPackages.elements(); e.hasMoreElements();) {
-            String packageName = (String) e.nextElement();
-            if (resourceName.startsWith(packageName)) {
-                useParentFirst = true;
-                break;
-            }
-        }
-
-        for (Enumeration e = loaderPackages.elements(); e.hasMoreElements();) {
-            String packageName = (String) e.nextElement();
-            if (resourceName.startsWith(packageName)) {
-                useParentFirst = false;
-                break;
-            }
-        }
-
-        return useParentFirst;
-    }
-
-    /**
-     * Finds the resource with the given name. A resource is
-     * some data (images, audio, text, etc) that can be accessed by class
-     * code in a way that is independent of the location of the code.
-     *
-     * @param name The name of the resource for which a stream is required.
-     *             Must not be <code>null</code>.
-     *
-     * @return a URL for reading the resource, or <code>null</code> if the
-     *         resource could not be found or the caller doesn't have
-     *         adequate privileges to get the resource.
-     */
-    public URL getResource(String name) {
-        // we need to search the components of the path to see if
-        // we can find the class we want.
-        URL url = null;
-        if (isParentFirst(name)) {
-            url = (parent == null) ? super.getResource(name)
-                                   : parent.getResource(name);
-        }
-
-        if (url != null) {
-            log("Resource " + name + " loaded from parent loader",
-                Project.MSG_DEBUG);
-
-        } else {
-            // try and load from this loader if the parent either didn't find
-            // it or wasn't consulted.
-            Enumeration e = pathComponents.elements();
-            while (e.hasMoreElements() && url == null) {
-                File pathComponent = (File) e.nextElement();
-                url = getResourceURL(pathComponent, name);
-                if (url != null) {
-                    log("Resource " + name
-                        + " loaded from ant loader",
-                        Project.MSG_DEBUG);
-                }
-            }
-        }
-
-        if (url == null && !isParentFirst(name)) {
-            // this loader was first but it didn't find it - try the parent
-
-            url = (parent == null) ? super.getResource(name)
-                : parent.getResource(name);
-            if (url != null) {
-                log("Resource " + name + " loaded from parent loader",
-                    Project.MSG_DEBUG);
-            }
-        }
-
-        if (url == null) {
-            log("Couldn't load Resource " + name, Project.MSG_DEBUG);
-        }
-
-        return url;
-    }
-
-    /**
-     * Returns an enumeration of URLs representing all the resources with the
-     * given name by searching the class loader's classpath.
-     *
-     * @param name The resource name to search for.
-     *             Must not be <code>null</code>.
-     * @return an enumeration of URLs for the resources
-     * @exception IOException if I/O errors occurs (can't happen)
-     */
-    protected Enumeration findResources(String name) throws IOException {
-        return new ResourceEnumeration(name);
-    }
-
-    /**
-     * Returns an inputstream to a given resource in the given file which may
-     * either be a directory or a zip file.
-     *
-     * @param file The file (directory or jar) in which to search for
-     *             the resource. Must not be <code>null</code>.
-     * @param resourceName The name of the resource for which a stream
-     *                     is required. Must not be <code>null</code>.
-     *
-     * @return a stream to the required resource or <code>null</code> if the
-     *         resource cannot be found in the given file object.
-     */
-    private URL getResourceURL(File file, String resourceName) {
-        try {
-            if (!file.exists()) {
-                return null;
-            }
-
-            if (file.isDirectory()) {
-                File resource = new File(file, resourceName);
-
-                if (resource.exists()) {
-                    try {
-                        return new URL("file:" + resource.toString());
-                    } catch (MalformedURLException ex) {
-                        return null;
-                    }
-                }
-            } else {
-                ZipFile zipFile = (ZipFile) zipFiles.get(file);
-                if (zipFile == null) {
-                    zipFile = new ZipFile(file);
-                    zipFiles.put(file, zipFile);
-                }
-
-                ZipEntry entry = zipFile.getEntry(resourceName);
-                if (entry != null) {
-                    try {
-                        return new URL("jar:file:" + file.toString()
-                            + "!/" + entry);
-                    } catch (MalformedURLException ex) {
-                        return null;
-                    }
-                }
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-
-        return null;
-    }
-
-    /**
-     * Loads a class with this class loader.
-     *
-     * This class attempts to load the class in an order determined by whether
-     * or not the class matches the system/loader package lists, with the
-     * loader package list taking priority. If the classloader is in isolated
-     * mode, failure to load the class in this loader will result in a
-     * ClassNotFoundException.
-     *
-     * @param classname The name of the class to be loaded.
-     *                  Must not be <code>null</code>.
-     * @param resolve <code>true</code> if all classes upon which this class
-     *                depends are to be loaded.
-     *
-     * @return the required Class object
-     *
-     * @exception ClassNotFoundException if the requested class does not exist
-     * on the system classpath (when not in isolated mode) or this loader's
-     * classpath.
-     */
-    protected Class loadClass(String classname, boolean resolve)
-         throws ClassNotFoundException {
-
-        Class theClass = findLoadedClass(classname);
-        if (theClass != null) {
-            return theClass;
-        }
-
-        if (isParentFirst(classname)) {
-            try {
-                theClass = findBaseClass(classname);
-                log("Class " + classname + " loaded from parent loader",
-                    Project.MSG_DEBUG);
-            } catch (ClassNotFoundException cnfe) {
-                theClass = findClass(classname);
-                log("Class " + classname + " loaded from ant loader",
-                    Project.MSG_DEBUG);
-            }
-        } else {
-            try {
-                theClass = findClass(classname);
-                log("Class " + classname + " loaded from ant loader",
-                    Project.MSG_DEBUG);
-            } catch (ClassNotFoundException cnfe) {
-                if (ignoreBase) {
-                    throw cnfe;
-                }
-                theClass = findBaseClass(classname);
-                log("Class " + classname + " loaded from parent loader",
-                    Project.MSG_DEBUG);
-            }
-        }
-
-        if (resolve) {
-            resolveClass(theClass);
-        }
-
-        return theClass;
-    }
-
-    /**
-     * Converts the class dot notation to a filesystem equivalent for
-     * searching purposes.
-     *
-     * @param classname The class name in dot format (eg java.lang.Integer).
-     *                  Must not be <code>null</code>.
-     *
-     * @return the classname in filesystem format (eg java/lang/Integer.class)
-     */
-    private String getClassFilename(String classname) {
-        return classname.replace('.', '/') + ".class";
-    }
-
-    /**
-     * Reads a class definition from a stream.
-     *
-     * @param stream The stream from which the class is to be read.
-     *               Must not be <code>null</code>.
-     * @param classname The name of the class in the stream.
-     *                  Must not be <code>null</code>.
-     *
-     * @return the Class object read from the stream.
-     *
-     * @exception IOException if there is a problem reading the class from the
-     * stream.
-     * @exception SecurityException if there is a security problem while
-     * reading the class from the stream.
-     */
-    private Class getClassFromStream(InputStream stream, String classname)
-                throws IOException, SecurityException {
-        ByteArrayOutputStream baos = new ByteArrayOutputStream();
-        int bytesRead = -1;
-        byte[] buffer = new byte[BUFFER_SIZE];
-
-        while ((bytesRead = stream.read(buffer, 0, BUFFER_SIZE)) != -1) {
-            baos.write(buffer, 0, bytesRead);
-        }
-
-        byte[] classData = baos.toByteArray();
-
-        // Simply put:
-        // defineClass(classname, classData, 0, classData.length,
-        //             Project.class.getProtectionDomain());
-        // Made more elaborate to be 1.1-safe.
-        if (defineClassProtectionDomain != null) {
-            try {
-                Object domain
-                    = getProtectionDomain.invoke(Project.class, new Object[0]);
-                Object[] args
-                    = new Object[] {classname, classData, new Integer(0),
-                                    new Integer(classData.length), domain};
-                return (Class) defineClassProtectionDomain.invoke(this, args);
-            } catch (InvocationTargetException ite) {
-                Throwable t = ite.getTargetException();
-                if (t instanceof ClassFormatError) {
-                    throw (ClassFormatError) t;
-                } else if (t instanceof NoClassDefFoundError) {
-                    throw (NoClassDefFoundError) t;
-                } else if (t instanceof SecurityException) {
-                    throw (SecurityException) t;
-                } else {
-                    throw new IOException(t.toString());
-                }
-            } catch (Exception e) {
-                throw new IOException(e.toString());
-            }
-        } else {
-            return defineClass(classname, classData, 0, classData.length);
-        }
-    }
-
-    /**
-     * Searches for and load a class on the classpath of this class loader.
-     *
-     * @param name The name of the class to be loaded. Must not be
-     *             <code>null</code>.
-     *
-     * @return the required Class object
-     *
-     * @exception ClassNotFoundException if the requested class does not exist
-     *                                   on this loader's classpath.
-     */
-    public Class findClass(String name) throws ClassNotFoundException {
-        log("Finding class " + name, Project.MSG_DEBUG);
-
-        return findClassInComponents(name);
-    }
-
-
-    /**
-     * Finds a class on the given classpath.
-     *
-     * @param name The name of the class to be loaded. Must not be
-     *             <code>null</code>.
-     *
-     * @return the required Class object
-     *
-     * @exception ClassNotFoundException if the requested class does not exist
-     * on this loader's classpath.
-     */
-    private Class findClassInComponents(String name)
-         throws ClassNotFoundException {
-        // we need to search the components of the path to see if
-        // we can find the class we want.
-        InputStream stream = null;
-        String classFilename = getClassFilename(name);
-        try {
-            Enumeration e = pathComponents.elements();
-            while (e.hasMoreElements()) {
-                File pathComponent = (File) e.nextElement();
-                try {
-                    stream = getResourceStream(pathComponent, classFilename);
-                    if (stream != null) {
-                        return getClassFromStream(stream, name);
-                    }
-                } catch (SecurityException se) {
-                    throw se;
-                } catch (IOException ioe) {
-                    // ioe.printStackTrace();
-                    log("Exception reading component " + pathComponent ,
-                        Project.MSG_VERBOSE);
-                }
-            }
-
-            throw new ClassNotFoundException(name);
-        } finally {
-            try {
-                if (stream != null) {
-                    stream.close();
-                }
-            } catch (IOException e) {}
-        }
-    }
-
-    /**
-     * Finds a system class (which should be loaded from the same classloader
-     * as the Ant core).
-     *
-     * For JDK 1.1 compatability, this uses the findSystemClass method if
-     * no parent classloader has been specified.
-     *
-     * @param name The name of the class to be loaded.
-     *             Must not be <code>null</code>.
-     *
-     * @return the required Class object
-     *
-     * @exception ClassNotFoundException if the requested class does not exist
-     * on this loader's classpath.
-     */
-    private Class findBaseClass(String name) throws ClassNotFoundException {
-        if (parent == null) {
-            return findSystemClass(name);
-        } else {
-            return parent.loadClass(name);
-        }
-    }
-
-    /**
-     * Cleans up any resources held by this classloader. Any open archive
-     * files are closed.
-     */
-    public void cleanup() {
-        pathComponents = null;
-        project = null;
-        for (Enumeration e = zipFiles.elements(); e.hasMoreElements();) {
-            ZipFile zipFile = (ZipFile)e.nextElement();
-            try {
-                zipFile.close();
-            } catch (IOException ioe) {
-                // ignore
-            }
-        }
-        zipFiles = new Hashtable();
-    }
-
-    /**
-     * Empty implementation to satisfy the BuildListener interface.
-     *
-     * @param event the buildStarted event
-     */
-    public void buildStarted(BuildEvent event) {
-    }
-
-    /**
-     * Cleans up any resources held by this classloader at the end
-     * of a build.
-     *
-     * @param event the buildFinished event
-     */
-    public void buildFinished(BuildEvent event) {
-        cleanup();
-    }
-
-    /**
-     * Empty implementation to satisfy the BuildListener interface.
-     *
-     * @param event the targetStarted event
-     */
-    public void targetStarted(BuildEvent event) {
-    }
-
-    /**
-     * Empty implementation to satisfy the BuildListener interface.
-     *
-     * @param event the targetFinished event
-     */
-    public void targetFinished(BuildEvent event) {
-    }
-
-    /**
-     * Empty implementation to satisfy the BuildListener interface.
-     *
-     * @param event the taskStarted event
-     */
-    public void taskStarted(BuildEvent event) {
-    }
-
-    /**
-     * Empty implementation to satisfy the BuildListener interface.
-     *
-     * @param event the taskFinished event
-     */
-    public void taskFinished(BuildEvent event) {
-    }
-
-    /**
-     * Empty implementation to satisfy the BuildListener interface.
-     *
-     * @param event the messageLogged event
-     */
-    public void messageLogged(BuildEvent event) {
-    }
-}
diff --git a/src/main/org/apache/tools/ant/BuildEvent.java b/src/main/org/apache/tools/ant/BuildEvent.java
deleted file mode 100644
index 3178414..0000000
--- a/src/main/org/apache/tools/ant/BuildEvent.java
+++ /dev/null
@@ -1,237 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000,2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant;
-
-import java.util.EventObject;
-
-/**
- * Class representing an event occurring during a build. An
- * event is built by specifying either a project, a task or a target.
- * A project level event will only have a project reference;
- * a target level event will have project and target references;
- * a task level event will have project, target and task references.
- *
- * @author Matt Foemmel
- */
-public class BuildEvent extends EventObject {
-    
-    /** Project which emitted the event. */
-    private Project project;
-    /** Target which emitted the event, if specified. */
-    private Target target;
-    /** Task which emitted the event, if specified. */
-    private Task task;
-    /** 
-     * Message associated with the event. This is only used for
-     * "messageLogged" events.
-     */
-    private String message;
-    /**
-     * The priority of the message, for "messageLogged" events.
-     */
-    private int priority = Project.MSG_VERBOSE;
-    /**
-     * The exception associated with this event, if any.
-     * This is only used for "taskFinished", "targetFinished", 
-     * and "buildFinished" events.
-     */
-    private Throwable exception;
-
-    /**
-     * Construct a BuildEvent for a project level event.
-     *
-     * @param project the project that emitted the event.
-     *                Should not be <code>null</code>.
-     */
-    public BuildEvent(Project project) {
-        super(project);
-        this.project = project;
-        this.target = null;
-        this.task = null;
-    }
-    
-    /**
-     * Construct a BuildEvent for a target level event.
-     * The project associated with the event is derived
-     * from the given target.
-     *
-     * @param target the target that emitted the event.
-     *               Must not be <code>null</code>.
-     */
-    public BuildEvent(Target target) {
-        super(target);
-        this.project = target.getProject();
-        this.target = target;
-        this.task = null;
-    }
-    
-    /**
-     * Construct a BuildEvent for a task level event.
-     * The project and target associated with the event 
-     * are derived from the given task.
-     *
-     * @param task the task that emitted the event.
-     *             Must not be <code>null</code>.
-     */
-    public BuildEvent(Task task) {
-        super(task);
-        this.project = task.getProject();
-        this.target = task.getOwningTarget();
-        this.task = task;
-    }
-
-    /**
-     * Sets the message and priority associated with this event.
-     * This is used for "messageLogged" events.
-     * 
-     * @param message the message to be associated with this event.
-     *                Should not be <code>null</code>.
-     * @param priority the priority to be associated with this event,
-     *                 as defined in the {@link Project Project} class.
-     *
-     * @see BuildListener#messageLogged(BuildEvent)
-     */
-    public void setMessage(String message, int priority) {
-        this.message = message;
-        this.priority = priority;
-    }
-    
-    /**
-     * Sets the exception associated with this event. This is used 
-     * for "taskFinished", "targetFinished", and "buildFinished" 
-     * events.
-     * 
-     * @param exception The exception to be associated with this event.
-     *                  May be <code>null</code>.
-     *
-     * @see BuildListener#taskFinished(BuildEvent)
-     * @see BuildListener#targetFinished(BuildEvent)
-     * @see BuildListener#buildFinished(BuildEvent)
-     */
-    public void setException(Throwable exception) {
-        this.exception = exception;
-    }
-
-    /**
-     * Returns the project that fired this event.
-     * 
-     * @return the project that fired this event
-     */
-    public Project getProject() {
-        return project;
-    }
-
-    /**
-     * Returns the target that fired this event.
-     * 
-     * @return the project that fired this event, or <code>null</code>
-     *          if this event is a project level event.
-     */
-    public Target getTarget() {
-        
-        return target;
-    }
-
-    /**
-     * Returns the task that fired this event.
-     * 
-     * @return the task that fired this event, or <code>null</code>
-     *         if this event is a project or target level event.
-     */
-    public Task getTask() {
-        return task;
-    }
-
-    /**
-     * Returns the logging message. This field will only be set
-     * for "messageLogged" events.
-     *
-     * @return the message associated with this event, or <code>null</code>
-     *         if no message has been set.
-     * 
-     * @see BuildListener#messageLogged(BuildEvent)
-     */
-    public String getMessage() {
-        return message;
-    }
-
-    /**
-     * Returns the priority of the logging message. This field will only
-     * be set for "messageLogged" events. The meaning of this priority
-     * is as specified by the constants in the {@link Project Project} class.
-     * 
-     * @return the priority associated with this event.
-     *
-     * @see BuildListener#messageLogged(BuildEvent)
-     */
-    public int getPriority(){
-        return priority;
-    }
-
-    /**
-     * Returns the exception that was thrown, if any. This field will only
-     * be set for "taskFinished", "targetFinished", and "buildFinished"
-     * events.
-     * 
-     * @return the exception associated with this exception, or 
-     *         <code>null</code> if no exception has been set.
-     *
-     * @see BuildListener#taskFinished(BuildEvent)
-     * @see BuildListener#targetFinished(BuildEvent)
-     * @see BuildListener#buildFinished(BuildEvent)
-     */
-    public Throwable getException() {
-        return exception;
-    }
-}
diff --git a/src/main/org/apache/tools/ant/BuildException.java b/src/main/org/apache/tools/ant/BuildException.java
deleted file mode 100644
index 589c525..0000000
--- a/src/main/org/apache/tools/ant/BuildException.java
+++ /dev/null
@@ -1,237 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant;
-
-import java.io.PrintWriter;
-import java.io.PrintStream;
-
-/**
- * Signals an error condition during a build
- *
- * @author James Duncan Davidson
- */
-public class BuildException extends RuntimeException {
-
-    /** Exception that might have caused this one. */
-    private Throwable cause;
-
-    /** Location in the build file where the exception occured */
-    private Location location = Location.UNKNOWN_LOCATION;
-
-    /**
-     * Constructs a build exception with no descriptive information.
-     */
-    public BuildException() {
-        super();
-    }
-
-    /**
-     * Constructs an exception with the given descriptive message.
-     *
-     * @param message A description of or information about the exception.
-     *            Should not be <code>null</code>.
-     */
-    public BuildException(String message) {
-        super(message);
-    }
-
-    /**
-     * Constructs an exception with the given message and exception as
-     * a root cause.
-     *
-     * @param message A description of or information about the exception.
-     *            Should not be <code>null</code> unless a cause is specified.
-     * @param cause The exception that might have caused this one.
-     *              May be <code>null</code>.
-     */
-    public BuildException(String message, Throwable cause) {
-        super(message);
-        this.cause = cause;
-    }
-
-    /**
-     * Constructs an exception with the given message and exception as
-     * a root cause and a location in a file.
-     *
-     * @param msg A description of or information about the exception.
-     *            Should not be <code>null</code> unless a cause is specified.
-     * @param cause The exception that might have caused this one.
-     *              May be <code>null</code>.
-     * @param location The location in the project file where the error
-     *                 occurred. Must not be <code>null</code>.
-     */
-    public BuildException(String msg, Throwable cause, Location location) {
-        this(msg, cause);
-        this.location = location;
-    }
-
-    /**
-     * Constructs an exception with the given exception as a root cause.
-     *
-     * @param cause The exception that might have caused this one.
-     *              Should not be <code>null</code>.
-     */
-    public BuildException(Throwable cause) {
-        super(cause.toString());
-        this.cause = cause;
-    }
-
-    /**
-     * Constructs an exception with the given descriptive message and a
-     * location in a file.
-     *
-     * @param message A description of or information about the exception.
-     *            Should not be <code>null</code>.
-     * @param location The location in the project file where the error
-     *                 occurred. Must not be <code>null</code>.
-     */
-    public BuildException(String message, Location location) {
-        super(message);
-        this.location = location;
-    }
-
-    /**
-     * Constructs an exception with the given exception as
-     * a root cause and a location in a file.
-     *
-     * @param cause The exception that might have caused this one.
-     *              Should not be <code>null</code>.
-     * @param location The location in the project file where the error
-     *                 occurred. Must not be <code>null</code>.
-     */
-    public BuildException(Throwable cause, Location location) {
-        this(cause);
-        this.location = location;
-    }
-
-    /**
-     * Returns the nested exception, if any.
-     *
-     * @return the nested exception, or <code>null</code> if no
-     *         exception is associated with this one
-     */
-    public Throwable getException() {
-        return cause;
-    }
-
-    /**
-     * Returns the location of the error and the error message.
-     *
-     * @return the location of the error and the error message
-     */
-    public String toString() {
-        return location.toString() + getMessage();
-    }
-
-    /**
-     * Sets the file location where the error occurred.
-     *
-     * @param location The file location where the error occurred.
-     *                 Must not be <code>null</code>.
-     */
-    public void setLocation(Location location) {
-        this.location = location;
-    }
-
-    /**
-     * Returns the file location where the error occurred.
-     *
-     * @return the file location where the error occurred.
-     */
-    public Location getLocation() {
-        return location;
-    }
-
-    /**
-     * Prints the stack trace for this exception and any
-     * nested exception to <code>System.err</code>.
-     */
-    public void printStackTrace() {
-        printStackTrace(System.err);
-    }
-
-    /**
-     * Prints the stack trace of this exception and any nested
-     * exception to the specified PrintStream.
-     *
-     * @param ps The PrintStream to print the stack trace to.
-     *           Must not be <code>null</code>.
-     */
-    public void printStackTrace(PrintStream ps) {
-        synchronized (ps) {
-            super.printStackTrace(ps);
-            if (cause != null) {
-                ps.println("--- Nested Exception ---");
-                cause.printStackTrace(ps);
-            }
-        }
-    }
-
-    /**
-     * Prints the stack trace of this exception and any nested
-     * exception to the specified PrintWriter.
-     *
-     * @param pw The PrintWriter to print the stack trace to.
-     *           Must not be <code>null</code>.
-     */
-    public void printStackTrace(PrintWriter pw) {
-        synchronized (pw) {
-            super.printStackTrace(pw);
-            if (cause != null) {
-                pw.println("--- Nested Exception ---");
-                cause.printStackTrace(pw);
-            }
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/BuildListener.java b/src/main/org/apache/tools/ant/BuildListener.java
deleted file mode 100644
index 41dbbc1..0000000
--- a/src/main/org/apache/tools/ant/BuildListener.java
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000,2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant;
-
-import java.util.EventListener;
-
-/**
- * Instances of classes that implement this interface can register 
- * to be notified when things happened during a build.
- *
- * @see BuildEvent
- * @see Project#addBuildListener(BuildListener)
- *
- * @author Matt Foemmel
- */
-public interface BuildListener extends EventListener {
-
-    /**
-     * Signals that a build has started. This event
-     * is fired before any targets have started.
-     * 
-     * @param event An event with any relevant extra information.
-     *              Must not be <code>null</code>.
-     */
-    void buildStarted(BuildEvent event);
-
-    /**
-     * Signals that the last target has finished. This event
-     * will still be fired if an error occurred during the build.
-     * 
-     * @param event An event with any relevant extra information.
-     *              Must not be <code>null</code>.
-     *
-     * @see BuildEvent#getException()
-     */
-    void buildFinished(BuildEvent event);
-
-    /**
-     * Signals that a target is starting.
-     * 
-     * @param event An event with any relevant extra information.
-     *              Must not be <code>null</code>.
-     *
-     * @see BuildEvent#getTarget()
-     */
-    void targetStarted(BuildEvent event);
-
-    /**
-     * Signals that a target has finished. This event will
-     * still be fired if an error occurred during the build.
-     * 
-     * @param event An event with any relevant extra information.
-     *              Must not be <code>null</code>.
-     *
-     * @see BuildEvent#getException()
-     */
-    void targetFinished(BuildEvent event);
-
-    /**
-     * Signals that a task is starting.
-     * 
-     * @param event An event with any relevant extra information.
-     *              Must not be <code>null</code>.
-     *
-     * @see BuildEvent#getTask()
-     */
-    void taskStarted(BuildEvent event);
-
-    /**
-     * Signals that a task has finished. This event will still
-     * be fired if an error occurred during the build.
-     *
-     * @param event An event with any relevant extra information.
-     *              Must not be <code>null</code>.
-     *
-     * @see BuildEvent#getException()
-     */
-    void taskFinished(BuildEvent event);
-
-    /**
-     * Signals a message logging event.
-     * 
-     * @param event An event with any relevant extra information.
-     *              Must not be <code>null</code>.
-     *
-     * @see BuildEvent#getMessage()
-     * @see BuildEvent#getPriority()
-     */
-    void messageLogged(BuildEvent event);
-}
diff --git a/src/main/org/apache/tools/ant/BuildLogger.java b/src/main/org/apache/tools/ant/BuildLogger.java
deleted file mode 100644
index bdbb659..0000000
--- a/src/main/org/apache/tools/ant/BuildLogger.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant;
-
-import java.io.PrintStream;
-
-/**
- * Interface used by Ant to log the build output. 
- *
- * A build logger is a build listener which has the 'right' to send output to 
- * the ant log, which is usually <code>System.out</code> unless redirected by 
- * the <code>-logfile</code> option.
- *
- * @author Conor MacNeill
- */
-public interface BuildLogger extends BuildListener {
-    
-    /**
-     * Sets the highest level of message this logger should respond to.
-     *
-     * Only messages with a message level lower than or equal to the 
-     * given level should be written to the log.
-     * <P>
-     * Constants for the message levels are in the 
-     * {@link Project Project} class. The order of the levels, from least 
-     * to most verbose, is <code>MSG_ERR</code>, <code>MSG_WARN</code>, 
-     * <code>MSG_INFO</code>, <code>MSG_VERBOSE</code>, 
-     * <code>MSG_DEBUG</code>.
-     *
-     * @param level the logging level for the logger.
-     */
-    void setMessageOutputLevel(int level);
-    
-    /**
-     * Sets the output stream to which this logger is to send its output.
-     *
-     * @param output The output stream for the logger.
-     *               Must not be <code>null</code>.
-     */
-    void setOutputPrintStream(PrintStream output);
-    
-    /**
-     * Sets this logger to produce emacs (and other editor) friendly output.
-     *
-     * @param emacsMode <code>true</code> if output is to be unadorned so that
-     *                  emacs and other editors can parse files names, etc.
-     */
-    void setEmacsMode(boolean emacsMode);
-
-    /**
-     * Sets the output stream to which this logger is to send error messages.
-     *
-     * @param err The error stream for the logger.
-     *            Must not be <code>null</code>.
-     */
-    void setErrorPrintStream(PrintStream err);    
-}
diff --git a/src/main/org/apache/tools/ant/DefaultLogger.java b/src/main/org/apache/tools/ant/DefaultLogger.java
deleted file mode 100644
index 7a3d63e..0000000
--- a/src/main/org/apache/tools/ant/DefaultLogger.java
+++ /dev/null
@@ -1,326 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant;
-
-import java.io.PrintStream;
-import java.util.StringTokenizer;
-
-import org.apache.tools.ant.util.StringUtils;
-import org.apache.tools.ant.util.DateUtils;
-
-/**
- * Writes build events to a PrintStream. Currently, it
- * only writes which targets are being executed, and
- * any messages that get logged.
- *
- * @author Matt Foemmel
- */
-public class DefaultLogger implements BuildLogger {
-    /** 
-     * Size of left-hand column for right-justified task name.
-     * @see #messageLogged(BuildEvent)
-     */
-    public static final int LEFT_COLUMN_SIZE = 12;
-
-    /** PrintStream to write non-error messages to */
-    protected PrintStream out;
-    /** PrintStream to write error messages to */
-    protected PrintStream err;
-    /** Lowest level of message to write out */
-    protected int msgOutputLevel = Project.MSG_ERR;
-    /** Time of the start of the build */
-    private long startTime = System.currentTimeMillis();
-
-    /** Line separator */
-    protected static final String lSep = StringUtils.LINE_SEP;
-    
-    /** Whether or not to use emacs-style output */
-    protected boolean emacsMode = false;
-
-    /**
-     * Sole constructor.
-     */
-    public DefaultLogger() {
-    }
-
-    /**
-     * Sets the highest level of message this logger should respond to.
-     *
-     * Only messages with a message level lower than or equal to the 
-     * given level should be written to the log.
-     * <P>
-     * Constants for the message levels are in the 
-     * {@link Project Project} class. The order of the levels, from least 
-     * to most verbose, is <code>MSG_ERR</code>, <code>MSG_WARN</code>, 
-     * <code>MSG_INFO</code>, <code>MSG_VERBOSE</code>, 
-     * <code>MSG_DEBUG</code>.
-     * <P>
-     * The default message level for DefaultLogger is Project.MSG_ERR.
-     * 
-     * @param level the logging level for the logger.
-     */
-    public void setMessageOutputLevel(int level) {
-        this.msgOutputLevel = level;
-    }
-
-    /**
-     * Sets the output stream to which this logger is to send its output.
-     *
-     * @param output The output stream for the logger.
-     *               Must not be <code>null</code>.
-     */
-    public void setOutputPrintStream(PrintStream output) {
-        this.out = new PrintStream(output, true);
-    }
-
-    /**
-     * Sets the output stream to which this logger is to send error messages.
-     *
-     * @param err The error stream for the logger.
-     *            Must not be <code>null</code>.
-     */
-    public void setErrorPrintStream(PrintStream err) {
-        this.err = new PrintStream(err, true);
-    }
-
-    /**
-     * Sets this logger to produce emacs (and other editor) friendly output.
-     *
-     * @param emacsMode <code>true</code> if output is to be unadorned so that
-     *                  emacs and other editors can parse files names, etc.
-     */
-    public void setEmacsMode(boolean emacsMode) {
-        this.emacsMode = emacsMode;
-    }
-
-    /**
-     * Responds to a build being started by just remembering the current time.
-     * 
-     * @param event Ignored.
-     */
-    public void buildStarted(BuildEvent event) {
-        startTime = System.currentTimeMillis();
-    }
-
-    /**
-     * Prints whether the build succeeded or failed,
-     * any errors the occured during the build, and
-     * how long the build took.
-     * 
-     * @param event An event with any relevant extra information.
-     *              Must not be <code>null</code>.
-     */
-    public void buildFinished(BuildEvent event) {
-        Throwable error = event.getException();
-        StringBuffer message = new StringBuffer();
-
-        if (error == null) {
-            message.append(StringUtils.LINE_SEP);
-            message.append("BUILD SUCCESSFUL");
-        } else {
-            message.append(StringUtils.LINE_SEP);
-            message.append("BUILD FAILED");
-            message.append(StringUtils.LINE_SEP);
-
-            if (Project.MSG_VERBOSE <= msgOutputLevel ||
-                !(error instanceof BuildException)) {
-                message.append(StringUtils.getStackTrace(error));
-            } else {
-                if (error instanceof BuildException) {
-                    message.append(error.toString()).append(lSep);
-                } else {
-                    message.append(error.getMessage()).append(lSep);
-                }
-            }
-        }
-        message.append(StringUtils.LINE_SEP);
-        message.append("Total time: ");
-        message.append(formatTime(System.currentTimeMillis() - startTime));
-
-        String msg = message.toString();
-        if (error == null) {
-            printMessage(msg, out, Project.MSG_VERBOSE);
-        } else {
-            printMessage(msg, err, Project.MSG_ERR);
-        }
-        log(msg);
-    }
-
-    /**
-     * Logs a message to say that the target has started if this
-     * logger allows information-level messages.
-     * 
-     * @param event An event with any relevant extra information.
-     *              Must not be <code>null</code>.
-      */
-    public void targetStarted(BuildEvent event) {
-        if (Project.MSG_INFO <= msgOutputLevel) {
-            String msg = StringUtils.LINE_SEP 
-                + event.getTarget().getName() + ":";
-            printMessage(msg, out, event.getPriority());
-            log(msg);
-        }
-    }
-
-    /**
-     * No-op implementation.
-     * 
-     * @param event Ignored.
-     */
-    public void targetFinished(BuildEvent event) {}
-
-    /**
-     * No-op implementation.
-     * 
-     * @param event Ignored.
-     */
-    public void taskStarted(BuildEvent event) {}
-
-    /**
-     * No-op implementation.
-     * 
-     * @param event Ignored.
-     */
-    public void taskFinished(BuildEvent event) {}
-
-    /**
-     * Logs a message, if the priority is suitable.
-     * In non-emacs mode, task level messages are prefixed by the
-     * task name which is right-justified.
-     * 
-     * @param event A BuildEvent containing message information.
-     *              Must not be <code>null</code>.
-     */
-    public void messageLogged(BuildEvent event) {
-        int priority = event.getPriority();
-        // Filter out messages based on priority
-        if (priority <= msgOutputLevel) {
-
-            StringBuffer message = new StringBuffer();
-            if (event.getTask() != null && !emacsMode) {
-                // Print out the name of the task if we're in one
-                String name = event.getTask().getTaskName();
-                String label = "[" + name + "] ";
-                int size = LEFT_COLUMN_SIZE - label.length();
-                StringBuffer tmp = new StringBuffer();
-                for (int i = 0; i < size; i++) {
-                    tmp.append(" ");
-                }
-                tmp.append(label);
-                label = tmp.toString();
-
-                StringTokenizer tok = new StringTokenizer(event.getMessage(),
-                                                          "\r\n", false);
-                boolean first = true;
-                while (tok.hasMoreTokens()) {
-                    if (!first) {
-                        message.append(StringUtils.LINE_SEP);
-                    }
-                    first = false;
-                    message.append(label);
-                    message.append(tok.nextToken());
-                }
-
-            } else {
-                message.append(event.getMessage());
-            }
-
-            String msg = message.toString();
-            if (priority != Project.MSG_ERR) {
-                printMessage(msg, out, priority);
-            } else {
-                printMessage(msg, err, priority);
-            }
-            log(msg);
-        }
-    }
-
-    /**
-     * Convenience method to format a specified length of time.
-     * 
-     * @param millis Length of time to format, in milliseonds.
-     * 
-     * @return the time as a formatted string.
-     *
-     * @see DateUtils#formatElapsedTime(long)
-     */
-    protected static String formatTime(final long millis) {
-        return DateUtils.formatElapsedTime(millis);
-    }
-
-    /**
-     * Prints a message to a PrintStream.
-     * 
-     * @param message  The message to print. 
-     *                 Should not be <code>null</code>.
-     * @param stream   A PrintStream to print the message to. 
-     *                 Must not be <code>null</code>.
-     * @param priority The priority of the message. 
-     *                 (Ignored in this implementation.)
-     */
-    protected void printMessage(final String message,
-                                final PrintStream stream,
-                                final int priority) {
-        stream.println(message);
-    }
-
-    /**
-     * Empty implementation which allows subclasses to receive the
-     * same output that is generated here.
-     * 
-     * @param message Message being logged. Should not be <code>null</code>.
-     */
-    protected void log(String message) {}
-}
diff --git a/src/main/org/apache/tools/ant/DemuxOutputStream.java b/src/main/org/apache/tools/ant/DemuxOutputStream.java
deleted file mode 100644
index 35e9264..0000000
--- a/src/main/org/apache/tools/ant/DemuxOutputStream.java
+++ /dev/null
@@ -1,223 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant;
-
-import java.io.OutputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.util.Hashtable;
-
-/**
- * Logs content written by a thread and forwards the buffers onto the
- * project object which will forward the content to the appropriate
- * task.
- *
- * @since 1.4
- * @author Conor MacNeill
- */
-public class DemuxOutputStream extends OutputStream {
-
-    /**
-     * A data class to store information about a buffer. Such information
-     * is stored on a per-thread basis.
-     */
-    private static class BufferInfo {
-        /**
-         * The per-thread output stream.
-         */
-        private ByteArrayOutputStream buffer;
-        
-        /** 
-         * Whether or not the next line-terminator should be skipped in terms
-         * of processing the buffer. Used to avoid \r\n invoking
-         * processBuffer twice.
-         */
-         private boolean skip = false;
-    }
-    
-    /** Maximum buffer size. */
-    private static final int MAX_SIZE = 1024;
-    
-    /** Mapping from thread to buffer (Thread to BufferInfo). */
-    private Hashtable buffers = new Hashtable();
-
-    /**
-     * The project to send output to.
-     */
-    private Project project;
-
-    /**
-     * Whether or not this stream represents an error stream.
-     */
-    private boolean isErrorStream;
-    
-    /**
-     * Creates a new instance of this class.
-     *
-     * @param project The project instance for which output is being 
-     *                demultiplexed. Must not be <code>null</code>.
-     * @param isErrorStream <code>true</code> if this is the error string, 
-     *                      otherwise a normal output stream. This is 
-     *                      passed to the project so it knows
-     *                      which stream it is receiving.
-     */
-    public DemuxOutputStream(Project project, boolean isErrorStream) {
-        this.project = project;
-        this.isErrorStream = isErrorStream;
-    }
-
-    /**
-     * Returns the buffer associated with the current thread.
-     * 
-     * @return a BufferInfo for the current thread to write data to
-     */
-    private BufferInfo getBufferInfo() {
-        Thread current = Thread.currentThread();
-        BufferInfo bufferInfo = (BufferInfo) buffers.get(current);
-        if (bufferInfo == null) {
-            bufferInfo = new BufferInfo();
-            bufferInfo.buffer = new ByteArrayOutputStream();
-            bufferInfo.skip = false;
-            buffers.put(current, bufferInfo);
-        }
-        return bufferInfo;
-    }
-
-    /**
-     * Resets the buffer for the current thread.
-     */
-    private void resetBufferInfo() {    
-        Thread current = Thread.currentThread();
-        BufferInfo bufferInfo = (BufferInfo) buffers.get(current);
-        try {
-            bufferInfo.buffer.close();
-        } catch (IOException e) {
-            // Shouldn't happen
-        }
-        bufferInfo.buffer = new ByteArrayOutputStream();
-        bufferInfo.skip = false;
-    }
-    
-    /**
-     * Removes the buffer for the current thread.
-     */
-    private void removeBuffer() {    
-        Thread current = Thread.currentThread();
-        buffers.remove (current);
-    }
-
-    /**
-     * Writes the data to the buffer and flushes the buffer if a line
-     * separator is detected or if the buffer has reached its maximum size.
-     *
-     * @param cc data to log (byte).
-     * @exception IOException if the data cannot be written to the stream
-     */
-    public void write(int cc) throws IOException {
-        final byte c = (byte) cc;
-
-        BufferInfo bufferInfo = getBufferInfo();
-        if ((c == '\n') || (c == '\r')) {
-            if (!bufferInfo.skip) {
-                processBuffer(bufferInfo.buffer);
-            }
-        } else {
-            bufferInfo.buffer.write(cc);
-            if (bufferInfo.buffer.size() > MAX_SIZE) {
-                processBuffer(bufferInfo.buffer);
-            }
-        }
-        bufferInfo.skip = (c == '\r');
-    }
-
-    /**
-     * Converts the buffer to a string and sends it to the project.
-     *
-     * @param buffer the ByteArrayOutputStream used to collect the output
-     * until a line separator is seen.
-     * 
-     * @see Project#demuxOutput(String,boolean)
-     */
-    protected void processBuffer(ByteArrayOutputStream buffer) {
-        String output = buffer.toString();
-        project.demuxOutput(output, isErrorStream);
-        resetBufferInfo();
-    }
-
-    /**
-     * Equivalent to flushing the stream.
-     *
-     * @exception IOException if there is a problem closing the stream.
-     * 
-     * @see #flush
-     */
-    public void close() throws IOException {
-        flush();
-        removeBuffer();
-    }
-
-    /**
-     * Writes all remaining data in the buffer associated
-     * with the current thread to the project.
-     *
-     * @exception IOException if there is a problem flushing the stream.
-     */
-    public void flush() throws IOException {
-        BufferInfo bufferInfo = getBufferInfo();
-        if (bufferInfo.buffer.size() > 0) {
-            processBuffer(bufferInfo.buffer);
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/DirectoryScanner.java b/src/main/org/apache/tools/ant/DirectoryScanner.java
deleted file mode 100644
index 12b4656..0000000
--- a/src/main/org/apache/tools/ant/DirectoryScanner.java
+++ /dev/null
@@ -1,919 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant;
-
-import java.io.File;
-import java.util.Vector;
-import java.util.StringTokenizer;
-
-import org.apache.tools.ant.types.selectors.SelectorScanner;
-import org.apache.tools.ant.types.selectors.FileSelector;
-import org.apache.tools.ant.types.selectors.SelectorUtils;
-
-/**
- * Class for scanning a directory for files/directories which match certain
- * criteria.
- * <p>
- * These criteria consist of selectors and patterns which have been specified.
- * With the selectors you can select which files you want to have included.
- * Files which are not selected are excluded. With patterns you can include
- * or exclude files based on their filename.
- * <p>
- * The idea is simple. A given directory is recursively scanned for all files
- * and directories. Each file/directory is matched against a set of selectors,
- * including special support for matching against filenames with include and
- * and exclude patterns. Only files/directories which match at least one
- * pattern of the include pattern list or other file selector, and don't match
- * any pattern of the exclude pattern list or fail to match against a required
- * selector will be placed in the list of files/directories found.
- * <p>
- * When no list of include patterns is supplied, "**" will be used, which
- * means that everything will be matched. When no list of exclude patterns is
- * supplied, an empty list is used, such that nothing will be excluded. When
- * no selectors are supplied, none are applied.
- * <p>
- * The filename pattern matching is done as follows:
- * The name to be matched is split up in path segments. A path segment is the
- * name of a directory or file, which is bounded by
- * <code>File.separator</code> ('/' under UNIX, '\' under Windows).
- * For example, "abc/def/ghi/xyz.java" is split up in the segments "abc",
- * "def","ghi" and "xyz.java".
- * The same is done for the pattern against which should be matched.
- * <p>
- * The segments of the name and the pattern are then matched against each
- * other. When '**' is used for a path segment in the pattern, it matches
- * zero or more path segments of the name.
- * <p>
- * There is a special case regarding the use of <code>File.separator</code>s
- * at the beginning of the pattern and the string to match:<br>
- * When a pattern starts with a <code>File.separator</code>, the string
- * to match must also start with a <code>File.separator</code>.
- * When a pattern does not start with a <code>File.separator</code>, the
- * string to match may not start with a <code>File.separator</code>.
- * When one of these rules is not obeyed, the string will not
- * match.
- * <p>
- * When a name path segment is matched against a pattern path segment, the
- * following special characters can be used:<br>
- * '*' matches zero or more characters<br>
- * '?' matches one character.
- * <p>
- * Examples:
- * <p>
- * "**\*.class" matches all .class files/dirs in a directory tree.
- * <p>
- * "test\a??.java" matches all files/dirs which start with an 'a', then two
- * more characters and then ".java", in a directory called test.
- * <p>
- * "**" matches everything in a directory tree.
- * <p>
- * "**\test\**\XYZ*" matches all files/dirs which start with "XYZ" and where
- * there is a parent directory called test (e.g. "abc\test\def\ghi\XYZ123").
- * <p>
- * Case sensitivity may be turned off if necessary. By default, it is
- * turned on.
- * <p>
- * Example of usage:
- * <pre>
- *   String[] includes = {"**\\*.class"};
- *   String[] excludes = {"modules\\*\\**"};
- *   ds.setIncludes(includes);
- *   ds.setExcludes(excludes);
- *   ds.setBasedir(new File("test"));
- *   ds.setCaseSensitive(true);
- *   ds.scan();
- *
- *   System.out.println("FILES:");
- *   String[] files = ds.getIncludedFiles();
- *   for (int i = 0; i < files.length; i++) {
- *     System.out.println(files[i]);
- *   }
- * </pre>
- * This will scan a directory called test for .class files, but excludes all
- * files in all proper subdirectories of a directory called "modules"
- *
- * @author Arnout J. Kuiper
- * <a href="mailto:ajkuiper@wxs.nl">ajkuiper@wxs.nl</a>
- * @author <a href="mailto:umagesh@rediffmail.com">Magesh Umasankar</a>
- * @author <a href="mailto:bruce@callenish.com">Bruce Atherton</a>
- */
-public class DirectoryScanner implements FileScanner, SelectorScanner {
-
-    /**
-     * Patterns which should be excluded by default.
-     *
-     * @see #addDefaultExcludes()
-     */
-    protected static final String[] DEFAULTEXCLUDES = {
-        "**/*~",
-        "**/#*#",
-        "**/.#*",
-        "**/%*%",
-        "**/._*",
-        "**/CVS",
-        "**/CVS/**",
-        "**/.cvsignore",
-        "**/SCCS",
-        "**/SCCS/**",
-        "**/vssver.scc"
-    };
-
-    /** The base directory to be scanned. */
-    protected File basedir;
-
-    /** The patterns for the files to be included. */
-    protected String[] includes;
-
-    /** The patterns for the files to be excluded. */
-    protected String[] excludes;
-
-    /** Selectors that will filter which files are in our candidate list. */
-    protected FileSelector[] selectors = null;
-
-    /** The files which matched at least one include and no excludes
-     *  and were selected.
-     */
-    protected Vector filesIncluded;
-
-    /** The files which did not match any includes or selectors. */
-    protected Vector filesNotIncluded;
-
-    /**
-     * The files which matched at least one include and at least
-     * one exclude.
-     */
-    protected Vector filesExcluded;
-
-    /** The directories which matched at least one include and no excludes
-     *  and were selected.
-     */
-    protected Vector dirsIncluded;
-
-    /** The directories which were found and did not match any includes. */
-    protected Vector dirsNotIncluded;
-
-    /**
-     * The directories which matched at least one include and at least one
-     * exclude.
-     */
-    protected Vector dirsExcluded;
-
-    /** The files which matched at least one include and no excludes and
-     *  which a selector discarded.
-     */
-    protected Vector filesDeselected;
-
-    /** The directories which matched at least one include and no excludes
-     *  but which a selector discarded.
-     */
-    protected Vector dirsDeselected;
-
-    /** Whether or not our results were built by a slow scan. */
-    protected boolean haveSlowResults = false;
-
-    /**
-     * Whether or not the file system should be treated as a case sensitive
-     * one.
-     */
-    protected boolean isCaseSensitive = true;
-
-    /** Whether or not everything tested so far has been included. */
-    protected boolean everythingIncluded = true;
-
-    /**
-     * Sole constructor.
-     */
-    public DirectoryScanner() {
-    }
-
-    /**
-     * Tests whether or not a given path matches the start of a given
-     * pattern up to the first "**".
-     * <p>
-     * This is not a general purpose test and should only be used if you
-     * can live with false positives. For example, <code>pattern=**\a</code>
-     * and <code>str=b</code> will yield <code>true</code>.
-     *
-     * @param pattern The pattern to match against. Must not be
-     *                <code>null</code>.
-     * @param str     The path to match, as a String. Must not be
-     *                <code>null</code>.
-     *
-     * @return whether or not a given path matches the start of a given
-     * pattern up to the first "**".
-     */
-    protected static boolean matchPatternStart(String pattern, String str) {
-        return SelectorUtils.matchPatternStart(pattern, str);
-    }
-    /**
-     * Tests whether or not a given path matches the start of a given
-     * pattern up to the first "**".
-     * <p>
-     * This is not a general purpose test and should only be used if you
-     * can live with false positives. For example, <code>pattern=**\a</code>
-     * and <code>str=b</code> will yield <code>true</code>.
-     *
-     * @param pattern The pattern to match against. Must not be
-     *                <code>null</code>.
-     * @param str     The path to match, as a String. Must not be
-     *                <code>null</code>.
-     * @param isCaseSensitive Whether or not matching should be performed
-     *                        case sensitively.
-     *
-     * @return whether or not a given path matches the start of a given
-     * pattern up to the first "**".
-     */
-    protected static boolean matchPatternStart(String pattern, String str,
-                                               boolean isCaseSensitive) {
-        return SelectorUtils.matchPatternStart(pattern, str, isCaseSensitive);
-    }
-
-    /**
-     * Tests whether or not a given path matches a given pattern.
-     *
-     * @param pattern The pattern to match against. Must not be
-     *                <code>null</code>.
-     * @param str     The path to match, as a String. Must not be
-     *                <code>null</code>.
-     *
-     * @return <code>true</code> if the pattern matches against the string,
-     *         or <code>false</code> otherwise.
-     */
-    protected static boolean matchPath(String pattern, String str) {
-        return SelectorUtils.matchPath(pattern, str);
-    }
-
-    /**
-     * Tests whether or not a given path matches a given pattern.
-     *
-     * @param pattern The pattern to match against. Must not be
-     *                <code>null</code>.
-     * @param str     The path to match, as a String. Must not be
-     *                <code>null</code>.
-     * @param isCaseSensitive Whether or not matching should be performed
-     *                        case sensitively.
-     *
-     * @return <code>true</code> if the pattern matches against the string,
-     *         or <code>false</code> otherwise.
-     */
-    protected static boolean matchPath(String pattern, String str,
-                                       boolean isCaseSensitive) {
-        return SelectorUtils.matchPath(pattern, str, isCaseSensitive);
-    }
-
-    /**
-     * Tests whether or not a string matches against a pattern.
-     * The pattern may contain two special characters:<br>
-     * '*' means zero or more characters<br>
-     * '?' means one and only one character
-     *
-     * @param pattern The pattern to match against.
-     *                Must not be <code>null</code>.
-     * @param str     The string which must be matched against the pattern.
-     *                Must not be <code>null</code>.
-     *
-     * @return <code>true</code> if the string matches against the pattern,
-     *         or <code>false</code> otherwise.
-     */
-    public static boolean match(String pattern, String str) {
-        return SelectorUtils.match(pattern, str);
-    }
-
-    /**
-     * Tests whether or not a string matches against a pattern.
-     * The pattern may contain two special characters:<br>
-     * '*' means zero or more characters<br>
-     * '?' means one and only one character
-     *
-     * @param pattern The pattern to match against.
-     *                Must not be <code>null</code>.
-     * @param str     The string which must be matched against the pattern.
-     *                Must not be <code>null</code>.
-     * @param isCaseSensitive Whether or not matching should be performed
-     *                        case sensitively.
-     *
-     *
-     * @return <code>true</code> if the string matches against the pattern,
-     *         or <code>false</code> otherwise.
-     */
-    protected static boolean match(String pattern, String str,
-                                   boolean isCaseSensitive) {
-        return SelectorUtils.match(pattern, str, isCaseSensitive);
-    }
-
-    /**
-     * Breaks a path up into a Vector of path elements, tokenizing on
-     * <code>File.separator</code>.
-     *
-     * @param path Path to tokenize. Must not be <code>null</code>.
-     *
-     * @return a Vector of path elements from the tokenized path
-     */
-    private static Vector tokenizePath (String path) {
-        return SelectorUtils.tokenizePath(path);
-    }
-
-    /**
-     * Sets the base directory to be scanned. This is the directory which is
-     * scanned recursively. All '/' and '\' characters are replaced by
-     * <code>File.separatorChar</code>, so the separator used need not match
-     * <code>File.separatorChar</code>.
-     *
-     * @param basedir The base directory to scan.
-     *                Must not be <code>null</code>.
-     */
-    public void setBasedir(String basedir) {
-        setBasedir(new File(basedir.replace('/', File.separatorChar).replace(
-                '\\', File.separatorChar)));
-    }
-
-    /**
-     * Sets the base directory to be scanned. This is the directory which is
-     * scanned recursively.
-     *
-     * @param basedir The base directory for scanning.
-     *                Should not be <code>null</code>.
-     */
-    public void setBasedir(File basedir) {
-        this.basedir = basedir;
-    }
-
-    /**
-     * Returns the base directory to be scanned.
-     * This is the directory which is scanned recursively.
-     *
-     * @return the base directory to be scanned
-     */
-    public File getBasedir() {
-        return basedir;
-    }
-
-    /**
-     * Sets whether or not the file system should be regarded as case sensitive.
-     *
-     * @param isCaseSensitive whether or not the file system should be
-     *                        regarded as a case sensitive one
-     */
-    public void setCaseSensitive(boolean isCaseSensitive) {
-        this.isCaseSensitive = isCaseSensitive;
-    }
-
-    /**
-     * Sets the list of include patterns to use. All '/' and '\' characters
-     * are replaced by <code>File.separatorChar</code>, so the separator used
-     * need not match <code>File.separatorChar</code>.
-     * <p>
-     * When a pattern ends with a '/' or '\', "**" is appended.
-     *
-     * @param includes A list of include patterns.
-     *                 May be <code>null</code>, indicating that all files
-     *                 should be included. If a non-<code>null</code>
-     *                 list is given, all elements must be
-     * non-<code>null</code>.
-     */
-    public void setIncludes(String[] includes) {
-        if (includes == null) {
-            this.includes = null;
-        } else {
-            this.includes = new String[includes.length];
-            for (int i = 0; i < includes.length; i++) {
-                String pattern;
-                pattern = includes[i].replace('/', File.separatorChar).replace(
-                        '\\', File.separatorChar);
-                if (pattern.endsWith(File.separator)) {
-                    pattern += "**";
-                }
-                this.includes[i] = pattern;
-            }
-        }
-    }
-
-
-    /**
-     * Sets the list of exclude patterns to use. All '/' and '\' characters
-     * are replaced by <code>File.separatorChar</code>, so the separator used
-     * need not match <code>File.separatorChar</code>.
-     * <p>
-     * When a pattern ends with a '/' or '\', "**" is appended.
-     *
-     * @param excludes A list of exclude patterns.
-     *                 May be <code>null</code>, indicating that no files
-     *                 should be excluded. If a non-<code>null</code> list is
-     *                 given, all elements must be non-<code>null</code>.
-     */
-    public void setExcludes(String[] excludes) {
-        if (excludes == null) {
-            this.excludes = null;
-        } else {
-            this.excludes = new String[excludes.length];
-            for (int i = 0; i < excludes.length; i++) {
-                String pattern;
-                pattern = excludes[i].replace('/', File.separatorChar).replace(
-                        '\\', File.separatorChar);
-                if (pattern.endsWith(File.separator)) {
-                    pattern += "**";
-                }
-                this.excludes[i] = pattern;
-            }
-        }
-    }
-
-
-    /**
-     * Sets the selectors that will select the filelist.
-     *
-     * @param selectors specifies the selectors to be invoked on a scan
-     */
-    public void setSelectors(FileSelector[] selectors) {
-        this.selectors = selectors;
-    }
-
-
-    /**
-     * Returns whether or not the scanner has included all the files or
-     * directories it has come across so far.
-     *
-     * @return <code>true</code> if all files and directories which have
-     *         been found so far have been included.
-     */
-    public boolean isEverythingIncluded() {
-        return everythingIncluded;
-    }
-
-    /**
-     * Scans the base directory for files which match at least one include
-     * pattern and don't match any exclude patterns. If there are selectors
-     * then the files must pass muster there, as well.
-     *
-     * @exception IllegalStateException if the base directory was set
-     *            incorrectly (i.e. if it is <code>null</code>, doesn't exist,
-     *            or isn't a directory).
-     */
-    public void scan() throws IllegalStateException {
-        if (basedir == null) {
-            throw new IllegalStateException("No basedir set");
-        }
-        if (!basedir.exists()) {
-            throw new IllegalStateException("basedir " + basedir
-                                            + " does not exist");
-        }
-        if (!basedir.isDirectory()) {
-            throw new IllegalStateException("basedir " + basedir
-                                            + " is not a directory");
-        }
-
-        if (includes == null) {
-            // No includes supplied, so set it to 'matches all'
-            includes = new String[1];
-            includes[0] = "**";
-        }
-        if (excludes == null) {
-            excludes = new String[0];
-        }
-
-        filesIncluded    = new Vector();
-        filesNotIncluded = new Vector();
-        filesExcluded    = new Vector();
-        filesDeselected  = new Vector();
-        dirsIncluded     = new Vector();
-        dirsNotIncluded  = new Vector();
-        dirsExcluded     = new Vector();
-        dirsDeselected   = new Vector();
-
-        if (isIncluded("")) {
-            if (!isExcluded("")) {
-                if (isSelected("",basedir)) {
-                    dirsIncluded.addElement("");
-                } else {
-                    dirsDeselected.addElement("");
-                }
-            } else {
-                dirsExcluded.addElement("");
-            }
-        } else {
-            dirsNotIncluded.addElement("");
-        }
-        scandir(basedir, "", true);
-    }
-
-    /**
-     * Top level invocation for a slow scan. A slow scan builds up a full
-     * list of excluded/included files/directories, whereas a fast scan
-     * will only have full results for included files, as it ignores
-     * directories which can't possibly hold any included files/directories.
-     * <p>
-     * Returns immediately if a slow scan has already been completed.
-     */
-    protected void slowScan() {
-        if (haveSlowResults) {
-            return;
-        }
-
-        String[] excl = new String[dirsExcluded.size()];
-        dirsExcluded.copyInto(excl);
-
-        String[] notIncl = new String[dirsNotIncluded.size()];
-        dirsNotIncluded.copyInto(notIncl);
-
-        for (int i = 0; i < excl.length; i++) {
-            if (!couldHoldIncluded(excl[i])) {
-                scandir(new File(basedir, excl[i]),
-                        excl[i] + File.separator, false);
-            }
-        }
-
-        for (int i = 0; i < notIncl.length; i++) {
-            if (!couldHoldIncluded(notIncl[i])) {
-                scandir(new File(basedir, notIncl[i]),
-                        notIncl[i] + File.separator, false);
-            }
-        }
-
-        haveSlowResults  = true;
-    }
-
-    /**
-     * Scans the given directory for files and directories. Found files and
-     * directories are placed in their respective collections, based on the
-     * matching of includes, excludes, and the selectors.  When a directory
-     * is found, it is scanned recursively.
-     *
-     * @param dir   The directory to scan. Must not be <code>null</code>.
-     * @param vpath The path relative to the base directory (needed to
-     *              prevent problems with an absolute path when using
-     *              dir). Must not be <code>null</code>.
-     * @param fast  Whether or not this call is part of a fast scan.
-     *
-     * @see #filesIncluded
-     * @see #filesNotIncluded
-     * @see #filesExcluded
-     * @see #dirsIncluded
-     * @see #dirsNotIncluded
-     * @see #dirsExcluded
-     * @see #slowScan
-     */
-    protected void scandir(File dir, String vpath, boolean fast) {
-        String[] newfiles = dir.list();
-
-        if (newfiles == null) {
-            /*
-             * two reasons are mentioned in the API docs for File.list
-             * (1) dir is not a directory. This is impossible as
-             *     we wouldn't get here in this case.
-             * (2) an IO error occurred (why doesn't it throw an exception
-             *     then???)
-             */
-            throw new BuildException("IO error scanning directory "
-                                     + dir.getAbsolutePath());
-        }
-
-        for (int i = 0; i < newfiles.length; i++) {
-            String name = vpath + newfiles[i];
-            File   file = new File(dir, newfiles[i]);
-            if (file.isDirectory()) {
-                if (isIncluded(name)) {
-                    if (!isExcluded(name)) {
-                        if (isSelected(name,file)) {
-                            dirsIncluded.addElement(name);
-                            if (fast) {
-                                scandir(file, name + File.separator, fast);
-                            }
-                        } else {
-                            everythingIncluded = false;
-                            dirsDeselected.addElement(name);
-                            if (fast && couldHoldIncluded(name)) {
-                                scandir(file, name + File.separator, fast);
-                            }
-                        }
-
-                    } else {
-                        everythingIncluded = false;
-                        dirsExcluded.addElement(name);
-                        if (fast && couldHoldIncluded(name)) {
-                            scandir(file, name + File.separator, fast);
-                        }
-                    }
-                } else {
-                    everythingIncluded = false;
-                    dirsNotIncluded.addElement(name);
-                    if (fast && couldHoldIncluded(name)) {
-                        scandir(file, name + File.separator, fast);
-                    }
-                }
-                if (!fast) {
-                    scandir(file, name + File.separator, fast);
-                }
-            } else if (file.isFile()) {
-                if (isIncluded(name)) {
-                    if (!isExcluded(name)) {
-                        if (isSelected(name,file)) {
-                            filesIncluded.addElement(name);
-                        } else {
-                            everythingIncluded = false;
-                            filesDeselected.addElement(name);
-                        }
-                    } else {
-                        everythingIncluded = false;
-                        filesExcluded.addElement(name);
-                    }
-                } else {
-                    everythingIncluded = false;
-                    filesNotIncluded.addElement(name);
-                }
-            }
-        }
-    }
-
-    /**
-     * Tests whether or not a name matches against at least one include
-     * pattern.
-     *
-     * @param name The name to match. Must not be <code>null</code>.
-     * @return <code>true</code> when the name matches against at least one
-     *         include pattern, or <code>false</code> otherwise.
-     */
-    protected boolean isIncluded(String name) {
-        for (int i = 0; i < includes.length; i++) {
-            if (matchPath(includes[i], name, isCaseSensitive)) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Tests whether or not a name matches the start of at least one include
-     * pattern.
-     *
-     * @param name The name to match. Must not be <code>null</code>.
-     * @return <code>true</code> when the name matches against the start of at
-     *         least one include pattern, or <code>false</code> otherwise.
-     */
-    protected boolean couldHoldIncluded(String name) {
-        for (int i = 0; i < includes.length; i++) {
-            if (matchPatternStart(includes[i], name, isCaseSensitive)) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Tests whether or not a name matches against at least one exclude
-     * pattern.
-     *
-     * @param name The name to match. Must not be <code>null</code>.
-     * @return <code>true</code> when the name matches against at least one
-     *         exclude pattern, or <code>false</code> otherwise.
-     */
-    protected boolean isExcluded(String name) {
-        for (int i = 0; i < excludes.length; i++) {
-            if (matchPath(excludes[i], name, isCaseSensitive)) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Tests whether a name should be selected.
-     *
-     * @param name the filename to check for selecting
-     * @param file the java.io.File object for this filename
-     * @return <code>false</code> when the selectors says that the file
-     *         should not be selected, <code>true</code> otherwise.
-     */
-    protected boolean isSelected(String name, File file) {
-        if (selectors != null) {
-            for (int i = 0; i < selectors.length; i++) {
-                if ((selectors[i].isSelected(basedir, name, file)) == false) {
-                    return false;
-                }
-            }
-        }
-        return true;
-    }
-
-    /**
-     * Returns the names of the files which matched at least one of the
-     * include patterns and none of the exclude patterns.
-     * The names are relative to the base directory.
-     *
-     * @return the names of the files which matched at least one of the
-     *         include patterns and none of the exclude patterns.
-     */
-    public String[] getIncludedFiles() {
-        int count = filesIncluded.size();
-        String[] files = new String[count];
-        for (int i = 0; i < count; i++) {
-            files[i] = (String)filesIncluded.elementAt(i);
-        }
-        return files;
-    }
-
-    /**
-     * Returns the names of the files which matched none of the include
-     * patterns. The names are relative to the base directory. This involves
-     * performing a slow scan if one has not already been completed.
-     *
-     * @return the names of the files which matched none of the include
-     *         patterns.
-     *
-     * @see #slowScan
-     */
-    public String[] getNotIncludedFiles() {
-        slowScan();
-        int count = filesNotIncluded.size();
-        String[] files = new String[count];
-        for (int i = 0; i < count; i++) {
-            files[i] = (String)filesNotIncluded.elementAt(i);
-        }
-        return files;
-    }
-
-    /**
-     * Returns the names of the files which matched at least one of the
-     * include patterns and at least one of the exclude patterns.
-     * The names are relative to the base directory. This involves
-     * performing a slow scan if one has not already been completed.
-     *
-     * @return the names of the files which matched at least one of the
-     *         include patterns and at at least one of the exclude patterns.
-     *
-     * @see #slowScan
-     */
-    public String[] getExcludedFiles() {
-        slowScan();
-        int count = filesExcluded.size();
-        String[] files = new String[count];
-        for (int i = 0; i < count; i++) {
-            files[i] = (String)filesExcluded.elementAt(i);
-        }
-        return files;
-    }
-
-    /**
-     * Returns the names of the files which were selected. The names
-     * are relative to the base directory. This involves performing
-     * a slow scan if one has not already been completed.
-     *
-     * @return the names of the files which were selected.
-     *
-     * @see #slowScan
-     */
-    public String[] getDeselectedFiles() {
-        slowScan();
-        int count = filesDeselected.size();
-        String[] files = new String[count];
-        for (int i = 0; i < count; i++) {
-            files[i] = (String)filesDeselected.elementAt(i);
-        }
-        return files;
-    }
-
-    /**
-     * Returns the names of the directories which matched at least one of the
-     * include patterns and none of the exclude patterns.
-     * The names are relative to the base directory.
-     *
-     * @return the names of the directories which matched at least one of the
-     * include patterns and none of the exclude patterns.
-     */
-    public String[] getIncludedDirectories() {
-        int count = dirsIncluded.size();
-        String[] directories = new String[count];
-        for (int i = 0; i < count; i++) {
-            directories[i] = (String)dirsIncluded.elementAt(i);
-        }
-        return directories;
-    }
-
-    /**
-     * Returns the names of the directories which matched none of the include
-     * patterns. The names are relative to the base directory. This involves
-     * performing a slow scan if one has not already been completed.
-     *
-     * @return the names of the directories which matched none of the include
-     * patterns.
-     *
-     * @see #slowScan
-     */
-    public String[] getNotIncludedDirectories() {
-        slowScan();
-        int count = dirsNotIncluded.size();
-        String[] directories = new String[count];
-        for (int i = 0; i < count; i++) {
-            directories[i] = (String)dirsNotIncluded.elementAt(i);
-        }
-        return directories;
-    }
-
-    /**
-     * Returns the names of the directories which matched at least one of the
-     * include patterns and at least one of the exclude patterns.
-     * The names are relative to the base directory. This involves
-     * performing a slow scan if one has not already been completed.
-     *
-     * @return the names of the directories which matched at least one of the
-     * include patterns and at least one of the exclude patterns.
-     *
-     * @see #slowScan
-     */
-    public String[] getExcludedDirectories() {
-        slowScan();
-        int count = dirsExcluded.size();
-        String[] directories = new String[count];
-        for (int i = 0; i < count; i++) {
-            directories[i] = (String)dirsExcluded.elementAt(i);
-        }
-        return directories;
-    }
-
-    /**
-     * Returns the names of the directories which were selected. The names
-     * are relative to the base directory. This involves performing a
-     * slow scan if one has not already been completed.
-     *
-     * @return the names of the directories which were selected.
-     *
-     * @see #slowScan
-     */
-    public String[] getDeselectedDirectories() {
-        slowScan();
-        int count = dirsDeselected.size();
-        String[] directories = new String[count];
-        for (int i = 0; i < count; i++) {
-            directories[i] = (String)dirsDeselected.elementAt(i);
-        }
-        return directories;
-    }
-
-    /**
-     * Adds default exclusions to the current exclusions set.
-     */
-    public void addDefaultExcludes() {
-        int excludesLength = excludes == null ? 0 : excludes.length;
-        String[] newExcludes;
-        newExcludes = new String[excludesLength + DEFAULTEXCLUDES.length];
-        if (excludesLength > 0) {
-            System.arraycopy(excludes, 0, newExcludes, 0, excludesLength);
-        }
-        for (int i = 0; i < DEFAULTEXCLUDES.length; i++) {
-            newExcludes[i + excludesLength] = DEFAULTEXCLUDES[i].replace('/',
-                    File.separatorChar).replace('\\', File.separatorChar);
-        }
-        excludes = newExcludes;
-    }
-}
diff --git a/src/main/org/apache/tools/ant/DynamicConfigurator.java b/src/main/org/apache/tools/ant/DynamicConfigurator.java
deleted file mode 100644
index d22011b..0000000
--- a/src/main/org/apache/tools/ant/DynamicConfigurator.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant;
-
-/**
- * Enables a task to control unknown attributes and elements.
- *
- * @author Erik Hatcher
- * @since Ant 1.5
- */
-public interface DynamicConfigurator {
-    public void setDynamicAttribute(String name, String value)
-            throws BuildException;
-
-    public Object createDynamicElement(String name) throws BuildException;
-}
diff --git a/src/main/org/apache/tools/ant/ExitException.java b/src/main/org/apache/tools/ant/ExitException.java
deleted file mode 100644
index 053baa6..0000000
--- a/src/main/org/apache/tools/ant/ExitException.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant;
-
-/**
- * Used to report exit status of classes which call System.exit().
- *
- * @see org.apache.tools.ant.util.optional.NoExitSecurityManager
- *
- * @author Conor MacNeill
- */
-public class ExitException extends SecurityException {
-
-    /** Status code */
-    private int status;
-    
-    /**
-     * Constructs an exit exception.
-     * @param status the status code returned via System.exit()
-     */
-    public ExitException(int status) {
-        super("ExitException: status " + status);
-        this.status = status;
-    }
-
-    /**
-     * @return the status code return via System.exit()
-     */
-    public int getStatus() {
-        return status;
-    }
-}
diff --git a/src/main/org/apache/tools/ant/FileScanner.java b/src/main/org/apache/tools/ant/FileScanner.java
deleted file mode 100644
index db4b665..0000000
--- a/src/main/org/apache/tools/ant/FileScanner.java
+++ /dev/null
@@ -1,193 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant;
-
-import java.io.File;
-
-/**
- * An interface used to describe the actions required of any type of 
- * directory scanner.
- */
-public interface FileScanner {
-    /**
-     * Adds default exclusions to the current exclusions set.
-     */
-    void addDefaultExcludes();
-    
-    /**
-     * Returns the base directory to be scanned. 
-     * This is the directory which is scanned recursively.
-     *
-     * @return the base directory to be scanned
-     */
-    File getBasedir();
-    
-    /**
-     * Returns the names of the directories which matched at least one of the 
-     * include patterns and at least one of the exclude patterns.
-     * The names are relative to the base directory.
-     * 
-     * @return the names of the directories which matched at least one of the 
-     * include patterns and at least one of the exclude patterns.
-     */
-    String[] getExcludedDirectories();
-    
-    /**
-     * Returns the names of the files which matched at least one of the 
-     * include patterns and at least one of the exclude patterns.
-     * The names are relative to the base directory.
-     *
-     * @return the names of the files which matched at least one of the 
-     *         include patterns and at at least one of the exclude patterns.
-     * 
-     */    
-    String[] getExcludedFiles();
-    
-    /**
-     * Returns the names of the directories which matched at least one of the 
-     * include patterns and none of the exclude patterns.
-     * The names are relative to the base directory.
-     *
-     * @return the names of the directories which matched at least one of the
-     * include patterns and none of the exclude patterns.
-     */
-    String[] getIncludedDirectories();
-    
-    /**
-     * Returns the names of the files which matched at least one of the 
-     * include patterns and none of the exclude patterns.
-     * The names are relative to the base directory.
-     *
-     * @return the names of the files which matched at least one of the
-     *         include patterns and none of the exclude patterns.
-     */
-    String[] getIncludedFiles();
-    
-    /**
-     * Returns the names of the directories which matched none of the include
-     * patterns. The names are relative to the base directory.
-     *
-     * @return the names of the directories which matched none of the include
-     * patterns.
-     */    
-    String[] getNotIncludedDirectories();
-    
-    /**
-     * Returns the names of the files which matched none of the include 
-     * patterns. The names are relative to the base directory.
-     *
-     * @return the names of the files which matched none of the include 
-     *         patterns.
-     */
-    String[] getNotIncludedFiles();
-    
-    /**
-     * Scans the base directory for files which match at least one include
-     * pattern and don't match any exclude patterns.
-     *
-     * @exception IllegalStateException if the base directory was set 
-     *            incorrectly (i.e. if it is <code>null</code>, doesn't exist,
-     *            or isn't a directory).
-     */
-    void scan() throws IllegalStateException;
-    
-    /**
-     * Sets the base directory to be scanned. This is the directory which is
-     * scanned recursively. All '/' and '\' characters should be replaced by
-     * <code>File.separatorChar</code>, so the separator used need not match
-     * <code>File.separatorChar</code>.
-     *
-     * @param basedir The base directory to scan. 
-     *                Must not be <code>null</code>.
-     */
-    void setBasedir(String basedir);
-    
-    /**
-     * Sets the base directory to be scanned. This is the directory which is 
-     * scanned recursively.
-     *
-     * @param basedir The base directory for scanning. 
-     *                Should not be <code>null</code>.
-     */
-    void setBasedir(File basedir);
-    
-    /**
-     * Sets the list of exclude patterns to use.
-     *
-     * @param excludes A list of exclude patterns. 
-     *                 May be <code>null</code>, indicating that no files 
-     *                 should be excluded. If a non-<code>null</code> list is 
-     *                 given, all elements must be non-<code>null</code>.
-     */    
-    void setExcludes(String[] excludes);
-    
-    /**
-     * Sets the list of include patterns to use.
-     *
-     * @param includes A list of include patterns.
-     *                 May be <code>null</code>, indicating that all files 
-     *                 should be included. If a non-<code>null</code>
-     *                 list is given, all elements must be 
-     * non-<code>null</code>.
-     */
-    void setIncludes(String[] includes);
-
-    /**
-     * Sets whether or not the file system should be regarded as case sensitive.
-     *
-     * @param isCaseSensitive whether or not the file system should be 
-     *                        regarded as a case sensitive one
-     */
-    void setCaseSensitive(boolean isCaseSensitive);
-}
diff --git a/src/main/org/apache/tools/ant/IntrospectionHelper.java b/src/main/org/apache/tools/ant/IntrospectionHelper.java
deleted file mode 100644
index ab0b38b..0000000
--- a/src/main/org/apache/tools/ant/IntrospectionHelper.java
+++ /dev/null
@@ -1,905 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant;
-
-import org.apache.tools.ant.DynamicConfigurator;
-import org.apache.tools.ant.types.Path;
-import org.apache.tools.ant.types.EnumeratedAttribute;
-
-import java.lang.reflect.Method;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Constructor;
-import java.io.File;
-import java.util.Enumeration;
-import java.util.Hashtable;
-import java.util.Locale;
-
-/**
- * Helper class that collects the methods a task or nested element
- * holds to set attributes, create nested elements or hold PCDATA
- * elements.
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- */
-public class IntrospectionHelper implements BuildListener {
-
-    /**
-     * Map from attribute names to attribute types 
-     * (String to Class).
-     */
-    private Hashtable attributeTypes;
-
-    /**
-     * Map from attribute names to attribute setter methods 
-     * (String to AttributeSetter).
-     */
-    private Hashtable attributeSetters;
-
-    /**
-     * Map from attribute names to nested types 
-     * (String to Class).
-     */
-    private Hashtable nestedTypes;
-
-    /**
-     * Map from attribute names to methods to create nested types 
-     * (String to NestedCreator).
-     */
-    private Hashtable nestedCreators;
-
-    /**
-     * Map from attribute names to methods to store configured nested types 
-     * (String to NestedStorer).
-     */
-    private Hashtable nestedStorers;
-
-    /**
-     * The method to invoke to add PCDATA.
-     */
-    private Method addText = null;
-
-    /**
-     * The class introspected by this instance.
-     */
-    private Class bean;
-
-    /**
-     * Helper instances we've already created (Class to IntrospectionHelper).
-     */
-    private static Hashtable helpers = new Hashtable();
-
-    /** 
-     * Map from primitive types to wrapper classes for use in 
-     * createAttributeSetter (Class to Class). Note that char 
-     * and boolean are in here even though they get special treatment
-     * - this way we only need to test for the wrapper class.
-     */
-    private static final Hashtable PRIMITIVE_TYPE_MAP = new Hashtable(8);
-
-    // Set up PRIMITIVE_TYPE_MAP
-    static {
-        Class[] primitives = {Boolean.TYPE, Byte.TYPE, Character.TYPE, 
-                              Short.TYPE, Integer.TYPE, Long.TYPE, 
-                              Float.TYPE, Double.TYPE};
-        Class[] wrappers = {Boolean.class, Byte.class, Character.class, 
-                            Short.class, Integer.class, Long.class, 
-                            Float.class, Double.class};
-        for (int i = 0; i < primitives.length; i++) {
-            PRIMITIVE_TYPE_MAP.put (primitives[i], wrappers[i]);
-        }
-    }
-
-    // XXX: (Jon Skeet) The documentation below doesn't draw a clear 
-    // distinction between addConfigured and add. It's obvious what the
-    // code *here* does (addConfigured sets both a creator method which
-    // calls a no-arg constructor and a storer method which calls the
-    // method we're looking at, whlie add just sets a creator method
-    // which calls the method we're looking at) but it's not at all
-    // obvious what the difference in actual *effect* will be later
-    // on. I can't see any mention of addConfiguredXXX in "Developing
-    // with Ant" (at least in the version on the web site). Someone
-    // who understands should update this documentation 
-    // (and preferably the manual too) at some stage.
-    /**
-     * Sole constructor, which is private to ensure that all 
-     * IntrospectionHelpers are created via {@link #getHelper(Class) getHelper}.
-     * Introspects the given class for bean-like methods.
-     * Each method is examined in turn, and the following rules are applied:
-     * <p>
-     * <ul>
-     * <li>If the method is <code>Task.setLocation(Location)</code>, 
-     * <code>Task.setTaskType(String)</code>
-     * or <code>TaskContainer.addTask(Task)</code>, it is ignored. These 
-     * methods are handled differently elsewhere.
-     * <li><code>void addText(String)</code> is recognised as the method for
-     * adding PCDATA to a bean.
-     * <li><code>void setFoo(Bar)</code> is recognised as a method for 
-     * setting the value of attribute <code>foo</code>, so long as 
-     * <code>Bar</code> is non-void and is not an array type. Non-String 
-     * parameter types always overload String parameter types, but that is
-     * the only guarantee made in terms of priority.
-     * <li><code>Foo createBar()</code> is recognised as a method for
-     * creating a nested element called <code>bar</code> of type 
-     * <code>Foo</code>, so long as <code>Foo</code> is not a primitive or
-     * array type.
-     * <li><code>void addConfiguredFoo(Bar)</code> is recognised as a
-     * method for storing a pre-configured element called 
-     * <code>foo</code> and of type <code>Bar</code>, so long as
-     * <code>Bar</code> is not an array, primitive or String type. 
-     * <code>Bar</code> must have an accessible constructor taking no 
-     * arguments.
-     * <li><code>void addFoo(Bar)</code> is recognised as a
-     * method for storing an element called <code>foobar</code> 
-     * and of type <code>Baz</code>, so long as
-     * <code>Baz</code> is not an array, primitive or String type. 
-     * <code>Baz</code> must have an accessible constructor taking no 
-     * arguments.
-     * </ul>
-     * Note that only one method is retained to create/set/addConfigured/add 
-     * any element or attribute.
-     * 
-     * @param bean The bean type to introspect. 
-     *             Must not be <code>null</code>.
-     * 
-     * @see #getHelper(Class)
-     */
-    private IntrospectionHelper(final Class bean) {
-        attributeTypes = new Hashtable();
-        attributeSetters = new Hashtable();
-        nestedTypes = new Hashtable();
-        nestedCreators = new Hashtable();
-        nestedStorers = new Hashtable();
-
-        this.bean = bean;
-
-        Method[] methods = bean.getMethods();
-        for (int i = 0; i < methods.length; i++) {
-            final Method m = methods[i];
-            final String name = m.getName();
-            Class returnType = m.getReturnType();
-            Class[] args = m.getParameterTypes();
-
-            // not really user settable properties on tasks
-            if (org.apache.tools.ant.Task.class.isAssignableFrom(bean)
-                 && args.length == 1 && isHiddenSetMethod(name, args[0])) {
-                continue;
-            }
-
-            // hide addTask for TaskContainers
-            if (org.apache.tools.ant.TaskContainer.class.isAssignableFrom(bean)
-                && args.length == 1 && "addTask".equals(name)
-                && org.apache.tools.ant.Task.class.equals(args[0])) {
-                continue;
-            }
-
-
-            if ("addText".equals(name)
-                && java.lang.Void.TYPE.equals(returnType)
-                && args.length == 1
-                && java.lang.String.class.equals(args[0])) {
-
-                addText = methods[i];
-
-            } else if (name.startsWith("set")
-                       && java.lang.Void.TYPE.equals(returnType)
-                       && args.length == 1
-                       && !args[0].isArray()) {
-
-                String propName = getPropertyName(name, "set");
-                if (attributeSetters.get(propName) != null) {
-                    if (java.lang.String.class.equals(args[0])) {
-                        /*
-                            Ignore method m, as there is an overloaded
-                            form of this method that takes in a
-                            non-string argument, which gains higher
-                            priority.
-                        */
-                        continue;
-                    }
-                    /*
-                        If the argument is not a String, and if there
-                        is an overloaded form of this method already defined,
-                        we just override that with the new one.
-                        This mechanism does not guarantee any specific order
-                        in which the methods will be selected: so any code
-                        that depends on the order in which "set" methods have
-                        been defined, is not guaranteed to be selected in any
-                        particular order.
-                    */
-                }
-                AttributeSetter as = createAttributeSetter(m, args[0]);
-                if (as != null) {
-                    attributeTypes.put(propName, args[0]);
-                    attributeSetters.put(propName, as);
-                }
-
-            } else if (name.startsWith("create")
-                       && !returnType.isArray()
-                       && !returnType.isPrimitive()
-                       && args.length == 0) {
-
-                String propName = getPropertyName(name, "create");
-                nestedTypes.put(propName, returnType);
-                nestedCreators.put(propName, new NestedCreator() {
-
-                        public Object create(Object parent)
-                            throws InvocationTargetException,
-                            IllegalAccessException {
-
-                            return m.invoke(parent, new Object[] {});
-                        }
-
-                    });
-                nestedStorers.remove(propName);
-
-            } else if (name.startsWith("addConfigured")
-                       && java.lang.Void.TYPE.equals(returnType)
-                       && args.length == 1
-                       && !java.lang.String.class.equals(args[0])
-                       && !args[0].isArray()
-                       && !args[0].isPrimitive()) {
-
-                try {
-                    final Constructor c =
-                        args[0].getConstructor(new Class[] {});
-                    String propName = getPropertyName(name, "addConfigured");
-                    nestedTypes.put(propName, args[0]);
-                    nestedCreators.put(propName, new NestedCreator() {
-
-                            public Object create(Object parent)
-                                throws InvocationTargetException, IllegalAccessException, InstantiationException {
-
-                                Object o = c.newInstance(new Object[] {});
-                                return o;
-                            }
-
-                        });
-                    nestedStorers.put(propName, new NestedStorer() {
-
-                            public void store(Object parent, Object child)
-                                throws InvocationTargetException, IllegalAccessException, InstantiationException {
-
-                                m.invoke(parent, new Object[] {child});
-                            }
-
-                        });
-                } catch (NoSuchMethodException nse) {
-                }
-            } else if (name.startsWith("add")
-                       && java.lang.Void.TYPE.equals(returnType)
-                       && args.length == 1
-                       && !java.lang.String.class.equals(args[0])
-                       && !args[0].isArray()
-                       && !args[0].isPrimitive()) {
-
-                try {
-                    final Constructor c =
-                        args[0].getConstructor(new Class[] {});
-                    String propName = getPropertyName(name, "add");
-                    nestedTypes.put(propName, args[0]);
-                    nestedCreators.put(propName, new NestedCreator() {
-
-                            public Object create(Object parent)
-                                throws InvocationTargetException, IllegalAccessException, InstantiationException {
-
-                                Object o = c.newInstance(new Object[] {});
-                                m.invoke(parent, new Object[] {o});
-                                return o;
-                            }
-
-                        });
-                    nestedStorers.remove(name);
-                } catch (NoSuchMethodException nse) {
-                }
-            }
-        }
-    }
-
-    /** 
-     * Certain set methods are part of the Ant core interface to tasks and 
-     * therefore not to be considered for introspection
-     *
-     * @param name the name of the set method
-     * @param type the type of the set method's parameter 
-     * @return true if the given set method is to be hidden.
-     */
-    private boolean isHiddenSetMethod(String name, Class type) {
-        if ("setLocation".equals(name) 
-             && org.apache.tools.ant.Location.class.equals(type)) {
-            return true;
-        }
-        
-        if  ("setTaskType".equals(name) 
-             && java.lang.String.class.equals(type)) {
-            return true;
-        }
-        
-        return false;
-    }
-    
-    /**
-     * Returns a helper for the given class, either from the cache
-     * or by creating a new instance.
-     * 
-     * @param c The class for which a helper is required.
-     *          Must not be <code>null</code>.
-     * 
-     * @return a helper for the specified class
-     */
-    public static synchronized IntrospectionHelper getHelper(Class c) {
-        IntrospectionHelper ih = (IntrospectionHelper) helpers.get(c);
-        if (ih == null) {
-            ih = new IntrospectionHelper(c);
-            helpers.put(c, ih);
-        }
-        return ih;
-    }
-
-    /**
-     * Sets the named attribute in the given element, which is part of the 
-     * given project.
-     * 
-     * @param p The project containing the element. This is used when files 
-     *          need to be resolved. Must not be <code>null</code>.
-     * @param element The element to set the attribute in. Must not be 
-     *                <code>null</code>.
-     * @param attributeName The name of the attribute to set. Must not be
-     *                      <code>null</code>.
-     * @param value The value to set the attribute to. This may be interpreted
-     *              or converted to the necessary type if the setter method
-     *              doesn't just take a string. Must not be <code>null</code>.
-     * 
-     * @exception BuildException if the introspected class doesn't support 
-     *                           the given attribute, or if the setting 
-     *                           method fails.
-     */
-    public void setAttribute(Project p, Object element, String attributeName,
-                             String value) throws BuildException {
-        AttributeSetter as
-            = (AttributeSetter) attributeSetters.get(attributeName);
-        if (as == null) {
-            if (element instanceof DynamicConfigurator) {
-                DynamicConfigurator dc = (DynamicConfigurator) element;
-                dc.setDynamicAttribute(attributeName, value);
-                return;
-            }
-            else {
-                String msg = getElementName(p, element) +
-                    " doesn't support the \"" + attributeName +
-                    "\" attribute.";
-                throw new BuildException(msg);
-            }
-        }
-        try {
-            as.set(p, element, value);
-        } catch (IllegalAccessException ie) {
-            // impossible as getMethods should only return public methods
-            throw new BuildException(ie);
-        } catch (InvocationTargetException ite) {
-            Throwable t = ite.getTargetException();
-            if (t instanceof BuildException) {
-                throw (BuildException) t;
-            }
-            throw new BuildException(t);
-        }
-    }
-
-    /**
-     * Adds PCDATA to an element, using the element's 
-     * <code>void addText(String)</code> method, if it has one. If no
-     * such method is present, a BuildException is thrown if the 
-     * given text contains non-whitespace.
-     * 
-     * @param project The project which the element is part of. 
-     *                Must not be <code>null</code>.
-     * @param element The element to add the text to. 
-     *                Must not be <code>null</code>.
-     * @param text    The text to add.
-     *                Must not be <code>null</code>.
-     * 
-     * @exception BuildException if non-whitespace text is provided and no
-     *                           method is available to handle it, or if
-     *                           the handling method fails.
-     */
-    public void addText(Project project, Object element, String text) 
-        throws BuildException {
-        if (addText == null) {
-            // Element doesn't handle text content
-            if (text.trim().length() == 0) {
-                // Only whitespace - ignore
-                return;
-            } else {
-                // Not whitespace - fail
-                String msg = project.getElementName(element) +
-                    " doesn't support nested text data.";
-                throw new BuildException(msg);
-            }
-        }
-        try {
-            addText.invoke(element, new String[] {text});
-        } catch (IllegalAccessException ie) {
-            // impossible as getMethods should only return public methods
-            throw new BuildException(ie);
-        } catch (InvocationTargetException ite) {
-            Throwable t = ite.getTargetException();
-            if (t instanceof BuildException) {
-                throw (BuildException) t;
-            }
-            throw new BuildException(t);
-        }
-    }
-
-    /**
-     * Creates a named nested element. Depending on the results of the
-     * initial introspection, either a method in the given parent instance
-     * or a simple no-arg constructor is used to create an instance of the
-     * specified element type.
-     * 
-     * @param project Project to which the parent object belongs.
-     *                Must not be <code>null</code>. If the resulting
-     *                object is an instance of ProjectComponent, its
-     *                Project reference is set to this parameter value.
-     * @param parent  Parent object used to create the instance.
-     *                Must not be <code>null</code>.
-     * @param elementName Name of the element to create an instance of.
-     *                    Must not be <code>null</code>.
-     * 
-     * @return an instance of the specified element type
-     * 
-     * @exception BuildException if no method is available to create the
-     *                           element instance, or if the creating method
-     *                           fails.
-     */
-    public Object createElement(Project project, Object parent, 
-        String elementName) throws BuildException {
-        NestedCreator nc = (NestedCreator) nestedCreators.get(elementName);
-        if (nc == null && parent instanceof DynamicConfigurator) {
-            DynamicConfigurator dc = (DynamicConfigurator) parent;
-            Object nestedElement = dc.createDynamicElement(elementName);
-            if (nestedElement != null) {
-                if (nestedElement instanceof ProjectComponent) {
-                    ((ProjectComponent) nestedElement).setProject(project);
-                }
-                return nestedElement;
-            }
-        }
-        if (nc == null) {
-            String msg = project.getElementName(parent) +
-                " doesn't support the nested \"" + elementName + "\" element.";
-            throw new BuildException(msg);
-        }
-        try {
-            Object nestedElement = nc.create(parent);
-            if (nestedElement instanceof ProjectComponent) {
-                ((ProjectComponent) nestedElement).setProject(project);
-            }
-            return nestedElement;
-        } catch (IllegalAccessException ie) {
-            // impossible as getMethods should only return public methods
-            throw new BuildException(ie);
-        } catch (InstantiationException ine) {
-            // impossible as getMethods should only return public methods
-            throw new BuildException(ine);
-        } catch (InvocationTargetException ite) {
-            Throwable t = ite.getTargetException();
-            if (t instanceof BuildException) {
-                throw (BuildException) t;
-            }
-            throw new BuildException(t);
-        }
-    }
-
-    /**
-     * Stores a named nested element using a storage method determined
-     * by the initial introspection. If no appropriate storage method
-     * is available, this method returns immediately.
-     * 
-     * @param project Ignored in this implementation. 
-     *                May be <code>null</code>.
-     * 
-     * @param parent  Parent instance to store the child in. 
-     *                Must not be <code>null</code>.
-     * 
-     * @param child   Child instance to store in the parent.
-     *                Should not be <code>null</code>.
-     * 
-     * @param elementName  Name of the child element to store. 
-     *                     May be <code>null</code>, in which case
-     *                     this method returns immediately.
-     * 
-     * @exception BuildException if the storage method fails.
-     */
-    public void storeElement(Project project, Object parent, Object child, 
-        String elementName) throws BuildException {
-        if (elementName == null) {
-            return;
-        }
-        NestedStorer ns = (NestedStorer) nestedStorers.get(elementName);
-        if (ns == null) {
-            return;
-        }
-        try {
-            ns.store(parent, child);
-        } catch (IllegalAccessException ie) {
-            // impossible as getMethods should only return public methods
-            throw new BuildException(ie);
-        } catch (InstantiationException ine) {
-            // impossible as getMethods should only return public methods
-            throw new BuildException(ine);
-        } catch (InvocationTargetException ite) {
-            Throwable t = ite.getTargetException();
-            if (t instanceof BuildException) {
-                throw (BuildException) t;
-            }
-            throw new BuildException(t);
-        }
-    }
-
-    /**
-     * Returns the type of a named nested element.
-     * 
-     * @param elementName The name of the element to find the type of.
-     *                    Must not be <code>null</code>.
-     * 
-     * @return the type of the nested element with the specified name.
-     *         This will never be <code>null</code>.
-     * 
-     * @exception BuildException if the introspected class does not
-     *                           support the named nested element.
-     */
-    public Class getElementType(String elementName)
-        throws BuildException {
-        Class nt = (Class) nestedTypes.get(elementName);
-        if (nt == null) {
-            String msg = "Class " + bean.getName() +
-                " doesn't support the nested \"" + elementName + "\" element.";
-            throw new BuildException(msg);
-        }
-        return nt;
-    }
-
-    /**
-     * Returns the type of a named attribute.
-     * 
-     * @param attributeName The name of the attribute to find the type of.
-     *                      Must not be <code>null</code>.
-     * 
-     * @return the type of the attribute with the specified name.
-     *         This will never be <code>null</code>.
-     * 
-     * @exception BuildException if the introspected class does not
-     *                           support the named attribute.
-     */
-    public Class getAttributeType(String attributeName)
-        throws BuildException {
-        Class at = (Class) attributeTypes.get(attributeName);
-        if (at == null) {
-            String msg = "Class " + bean.getName() +
-                " doesn't support the \"" + attributeName + "\" attribute.";
-            throw new BuildException(msg);
-        }
-        return at;
-    }
-
-    /**
-     * Returns whether or not the introspected class supports PCDATA.
-     * 
-     * @return whether or not the introspected class supports PCDATA.
-     */
-    public boolean supportsCharacters() {
-        return addText != null;
-    }
-
-    /**
-     * Returns an enumeration of the names of the attributes supported 
-     * by the introspected class.
-     * 
-     * @return an enumeration of the names of the attributes supported
-     *         by the introspected class.
-     */
-    public Enumeration getAttributes() {
-        return attributeSetters.keys();
-    }
-
-    /**
-     * Returns an enumeration of the names of the nested elements supported 
-     * by the introspected class.
-     * 
-     * @return an enumeration of the names of the nested elements supported
-     *         by the introspected class.
-     */
-    public Enumeration getNestedElements() {
-        return nestedTypes.keys();
-    }
-
-    /**
-     * Creates an implementation of AttributeSetter for the given
-     * attribute type. Conversions (where necessary) are automatically
-     * made for the following types:
-     * <ul>
-     * <li>String (left as it is)
-     * <li>Character/char (first character is used)
-     * <li>Boolean/boolean 
-     * ({@link Project#toBoolean(String) Project.toBoolean(String)} is used)
-     * <li>Class (Class.forName is used)
-     * <li>File (resolved relative to the appropriate project)
-     * <li>Path (resolve relative to the appropriate project)
-     * <li>EnumeratedAttribute (uses its own 
-     * {@link EnumeratedAttribute#setValue(String) setValue} method)
-     * <li>Other primitive types (wrapper classes are used with constructors 
-     * taking String)
-     * </ul>
-     * 
-     * If none of the above covers the given parameters, a constructor for the 
-     * appropriate class taking a String parameter is used if it is available.
-     * 
-     * @param m The method to invoke on the bean when the setter is invoked.
-     *          Must not be <code>null</code>.
-     * @param arg The type of the single argument of the bean's method.
-     *            Must not be <code>null</code>.
-     * 
-     * @return an appropriate AttributeSetter instance, or <code>null</code>
-     *         if no appropriate conversion is available.
-     */
-    private AttributeSetter createAttributeSetter(final Method m,
-                                                  Class arg) {
-        // use wrappers for primitive classes, e.g. int and 
-        // Integer are treated identically
-        final Class reflectedArg = PRIMITIVE_TYPE_MAP.containsKey (arg) 
-            ? (Class) PRIMITIVE_TYPE_MAP.get(arg) : arg;
-
-        // simplest case - setAttribute expects String
-        if (java.lang.String.class.equals(reflectedArg)) {
-            return new AttributeSetter() {
-                    public void set(Project p, Object parent, String value)
-                        throws InvocationTargetException, IllegalAccessException {
-                        m.invoke(parent, new String[] {value});
-                    }
-                };
-
-        // char and Character get special treatment - take the first character
-        } else if (java.lang.Character.class.equals(reflectedArg)) {
-            return new AttributeSetter() {
-                    public void set(Project p, Object parent, String value)
-                        throws InvocationTargetException, IllegalAccessException {
-                        m.invoke(parent, new Character[] {new Character(value.charAt(0))});
-                    }
-
-                };
-        // boolean and Boolean get special treatment because we 
-        // have a nice method in Project
-        } else if (java.lang.Boolean.class.equals(reflectedArg)) {
-            return new AttributeSetter() {
-                    public void set(Project p, Object parent, String value)
-                        throws InvocationTargetException, IllegalAccessException {
-                        m.invoke(parent,
-                                 new Boolean[] {new Boolean(Project.toBoolean(value))});
-                    }
-
-                };
-
-        // Class doesn't have a String constructor but a decent factory method
-        } else if (java.lang.Class.class.equals(reflectedArg)) {
-            return new AttributeSetter() {
-                    public void set(Project p, Object parent, String value)
-                        throws InvocationTargetException, IllegalAccessException, BuildException {
-                        try {
-                            m.invoke(parent, new Class[] {Class.forName(value)});
-                        } catch (ClassNotFoundException ce) {
-                            throw new BuildException(ce);
-                        }
-                    }
-                };
-
-        // resolve relative paths through Project
-        } else if (java.io.File.class.equals(reflectedArg)) {
-            return new AttributeSetter() {
-                    public void set(Project p, Object parent, String value)
-                        throws InvocationTargetException, IllegalAccessException {
-                        m.invoke(parent, new File[] {p.resolveFile(value)});
-                    }
-
-                };
-
-        // resolve relative paths through Project
-        } else if (org.apache.tools.ant.types.Path.class.equals(reflectedArg)) {
-            return new AttributeSetter() {
-                    public void set(Project p, Object parent, String value)
-                        throws InvocationTargetException, IllegalAccessException {
-                        m.invoke(parent, new Path[] {new Path(p, value)});
-                    }
-
-                };
-
-        // EnumeratedAttributes have their own helper class
-        } else if (org.apache.tools.ant.types.EnumeratedAttribute.class.isAssignableFrom(reflectedArg)) {
-            return new AttributeSetter() {
-                    public void set(Project p, Object parent, String value)
-                        throws InvocationTargetException, IllegalAccessException, BuildException {
-                        try {
-                            org.apache.tools.ant.types.EnumeratedAttribute ea = 
-                                (org.apache.tools.ant.types.EnumeratedAttribute) reflectedArg.newInstance();
-                            ea.setValue(value);
-                            m.invoke(parent, new EnumeratedAttribute[] {ea});
-                        } catch (InstantiationException ie) {
-                            throw new BuildException(ie);
-                        }
-                    }
-                };
-
-        // worst case. look for a public String constructor and use it
-        // This is used (deliberately) for all primitives/wrappers other than 
-        // char and boolean
-        } else {
-
-            try {
-                final Constructor c =
-                    reflectedArg.getConstructor(new Class[] {java.lang.String.class});
-
-                return new AttributeSetter() {
-                        public void set(Project p, Object parent,
-                                        String value)
-                            throws InvocationTargetException, IllegalAccessException, BuildException {
-                            try {
-                                Object attribute = c.newInstance(new String[] {value});
-                                if (attribute instanceof ProjectComponent) {
-                                    ((ProjectComponent) attribute).setProject(p);
-                                }
-                                m.invoke(parent, new Object[] {attribute});
-                            } catch (InstantiationException ie) {
-                                throw new BuildException(ie);
-                            }
-                        }
-                    };
-
-            } catch (NoSuchMethodException nme) {
-            }
-        }
-
-        return null;
-    }
-
-    /**
-     * Returns a description of the type of the given element in
-     * relation to a given project. This is used for logging purposes
-     * when the element is asked to cope with some data it has no
-     * way of handling.
-     * 
-     * @param project The project the element is defined in. 
-     *                Must not be <code>null</code>.
-     * 
-     * @param element The element to describe.
-     *                Must not be <code>null</code>.
-     * 
-     * @return a description of the element type
-     */
-    protected String getElementName(Project project, Object element) {
-        return project.getElementName(element);
-    }
-
-    /**
-     * Extracts the name of a property from a method name by subtracting
-     * a given prefix and converting into lower case. It is up to calling
-     * code to make sure the method name does actually begin with the
-     * specified prefix - no checking is done in this method.
-     * 
-     * @param methodName The name of the method in question.
-     *                   Must not be <code>null</code>.
-     * @param prefix     The prefix to remove.
-     *                   Must not be <code>null</code>.
-     * 
-     * @return the lower-cased method name with the prefix removed.
-     */
-    private String getPropertyName(String methodName, String prefix) {
-        int start = prefix.length();
-        return methodName.substring(start).toLowerCase(Locale.US);
-    }
-
-    /**
-     * Internal interface used to create nested elements. Not documented 
-     * in detail for reasons of source code readability.
-     */
-    private interface NestedCreator {
-        Object create(Object parent)
-            throws InvocationTargetException, IllegalAccessException, InstantiationException;
-    }
-
-    /**
-     * Internal interface used to storing nested elements. Not documented 
-     * in detail for reasons of source code readability.
-     */
-    private interface NestedStorer {
-        void store(Object parent, Object child)
-            throws InvocationTargetException, IllegalAccessException, InstantiationException;
-    }
-
-    /**
-     * Internal interface used to setting element attributes. Not documented 
-     * in detail for reasons of source code readability.
-     */
-    private interface AttributeSetter {
-        void set(Project p, Object parent, String value)
-            throws InvocationTargetException, IllegalAccessException,
-                   BuildException;
-    }
-
-    /**
-     * Clears all storage used by this class, including the static cache of 
-     * helpers.
-     * 
-     * @param event Ignored in this implementation.
-     */
-    public void buildFinished(BuildEvent event) {
-        attributeTypes.clear();
-        attributeSetters.clear();
-        nestedTypes.clear();
-        nestedCreators.clear();
-        addText = null;
-        helpers.clear();
-    }
-
-    /** Empty implementation to satisfy the BuildListener interface. */
-    public void buildStarted(BuildEvent event) {}
-    /** Empty implementation to satisfy the BuildListener interface. */
-    public void targetStarted(BuildEvent event) {}
-    /** Empty implementation to satisfy the BuildListener interface. */
-    public void targetFinished(BuildEvent event) {}
-    /** Empty implementation to satisfy the BuildListener interface. */
-    public void taskStarted(BuildEvent event) {}
-    /** Empty implementation to satisfy the BuildListener interface. */
-    public void taskFinished(BuildEvent event) {}
-    /** Empty implementation to satisfy the BuildListener interface. */
-    public void messageLogged(BuildEvent event) {}
-}
diff --git a/src/main/org/apache/tools/ant/Location.java b/src/main/org/apache/tools/ant/Location.java
deleted file mode 100644
index 80d1455..0000000
--- a/src/main/org/apache/tools/ant/Location.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000,2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant;
-
-/**
- * Stores the location of a piece of text within a file (file name,
- * line number and column number). Note that the column number is
- * currently ignored.
- */
-public class Location {
-    
-    /** Name of the file. */
-    private String fileName;
-    /** Line number within the file. */
-    private int lineNumber;
-    /** Column number within the file. */
-    private int columnNumber;
-
-    /** Location to use when one is needed but no information is available */
-    public static final Location UNKNOWN_LOCATION = new Location();
-
-    /**
-     * Creates an "unknown" location.
-     */
-    private Location() {
-        this(null, 0, 0);
-    }
-
-    /**
-     * Creates a location consisting of a file name but no line number or
-     * column number.
-     * 
-     * @param fileName The name of the file. May be <code>null</code>,
-     *                 in which case the location is equivalent to
-     *                 {@link #UNKNOWN_LOCATION UNKNOWN_LOCATION}.
-     */
-    public Location(String fileName) {
-        this(fileName, 0, 0);
-    }
-
-    /**
-     * Creates a location consisting of a file name, line number and
-     * column number.
-     * 
-     * @param fileName The name of the file. May be <code>null</code>,
-     *                 in which case the location is equivalent to
-     *                 {@link #UNKNOWN_LOCATION UNKNOWN_LOCATION}.
-     * 
-     * @param lineNumber Line number within the file. Use 0 for unknown
-     *                   positions within a file.
-     * @param columnNumber Column number within the line.
-     */
-    public Location(String fileName, int lineNumber, int columnNumber) {
-        this.fileName = fileName;
-        this.lineNumber = lineNumber;
-        this.columnNumber = columnNumber;
-    }
-
-    /**
-     * Returns the file name, line number, a colon and a trailing space. 
-     * An error message can be appended easily. For unknown locations, an 
-     * empty string is returned.
-     * 
-     * @return a String of the form <code>"fileName: lineNumber: "</code>
-     *         if both file name and line number are known,
-     *         <code>"fileName: "</code> if only the file name is known,
-     *         and the empty string for unknown locations.
-     */
-    public String toString() {
-        StringBuffer buf = new StringBuffer();
-
-        if (fileName != null) {
-            buf.append(fileName);
-
-            if (lineNumber != 0) {
-                buf.append(":");
-                buf.append(lineNumber);
-            }
-
-            buf.append(": ");
-        }
-
-        return buf.toString();
-    }
-}
diff --git a/src/main/org/apache/tools/ant/Main.java b/src/main/org/apache/tools/ant/Main.java
deleted file mode 100644
index e637c3e..0000000
--- a/src/main/org/apache/tools/ant/Main.java
+++ /dev/null
@@ -1,926 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant;
-
-import org.apache.tools.ant.input.DefaultInputHandler;
-import org.apache.tools.ant.input.InputHandler;
-import org.apache.tools.ant.util.JavaEnvUtils;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.PrintStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Vector;
-import java.util.Properties;
-import java.util.Enumeration;
-
-/**
- * Command line entry point into Ant. This class is entered via the
- * cannonical `public static void main` entry point and reads the
- * command line arguments. It then assembles and executes an Ant
- * project.
- * <p>
- * If you integrating Ant into some other tool, this is not the class
- * to use as an entry point. Please see the source code of this
- * class to see how it manipulates the Ant project classes.
- *
- * @author duncan@x180.com
- */
-public class Main {
-
-    /** The default build file name. */
-    public static final String DEFAULT_BUILD_FILENAME = "build.xml";
-
-    /** Our current message output status. Follows Project.MSG_XXX. */
-    private int msgOutputLevel = Project.MSG_INFO;
-
-    /** File that we are using for configuration. */
-    private File buildFile; /* null */
-
-    /** Stream to use for logging. */
-    private static PrintStream out = System.out;
-
-    /** Stream that we are using for logging error messages. */
-    private static PrintStream err = System.err;
-
-    /** The build targets. */
-    private Vector targets = new Vector(5);
-
-    /** Set of properties that can be used by tasks. */
-    private Properties definedProps = new Properties();
-
-    /** Names of classes to add as listeners to project. */
-    private Vector listeners = new Vector(5);
-
-    /** File names of property files to load on startup. */
-    private Vector propertyFiles = new Vector(5);
-
-    /**
-     * The Ant logger class. There may be only one logger. It will have
-     * the right to use the 'out' PrintStream. The class must implements the
-     * BuildLogger interface.
-     */
-    private String loggerClassname = null;
-    
-    /**
-     * The Ant InputHandler class.  There may be only one input
-     * handler.
-     */
-    private String inputHandlerClassname = null;
-
-    /**
-     * Whether or not output to the log is to be unadorned.
-     */
-    private boolean emacsMode = false;
-
-    /**
-     * Whether or not this instance has successfully been
-     * constructed and is ready to run.
-     */
-    private boolean readyToRun = false;
-
-    /**
-     * Whether or not we should only parse and display the project help
-     * information.
-     */
-    private boolean projectHelp = false;
-
-    /**
-     * Is a logfile being used?  This is used to
-     * check if the output streams must be closed.
-     */
-    private static boolean isLogFileUsed = false;
-
-    /**
-     * Prints the message of the Throwable if it (the message) is not
-     * <code>null</code>.
-     *
-     * @param t Throwable to print the message of.
-     *          Must not be <code>null</code>.
-     */
-    private static void printMessage(Throwable t) {
-        String message = t.getMessage();
-        if (message != null) {
-            System.err.println(message);
-        }
-    }
-
-    /**
-     * Creates a new instance of this class using the
-     * arguments specified, gives it any extra user properties which have been
-     * specified, and then runs the build using the classloader provided.
-     *
-     * @param args Command line arguments. Must not be <code>null</code>.
-     * @param additionalUserProperties Any extra properties to use in this
-     *        build. May be <code>null</code>, which is the equivalent to
-     *        passing in an empty set of properties.
-     * @param coreLoader Classloader used for core classes. May be
-     *        <code>null</code> in which case the system classloader is used.
-     */
-    public static void start(String[] args, Properties additionalUserProperties,
-                             ClassLoader coreLoader) {
-        Main m = null;
-
-        try {
-            m = new Main(args);
-        } catch (Throwable exc) {
-            printMessage(exc);
-            System.exit(1);
-        }
-
-        if (additionalUserProperties != null) {
-            for (Enumeration e = additionalUserProperties.keys();
-                    e.hasMoreElements();) {
-                String key = (String) e.nextElement();
-                String property = additionalUserProperties.getProperty(key);
-                m.definedProps.put(key, property);
-            }
-        }
-
-        try {
-            m.runBuild(coreLoader);
-            System.exit(0);
-        } catch (BuildException be) {
-            if (m.err != System.err) {
-                printMessage(be);
-            }
-            System.exit(1);
-        } catch (Throwable exc) {
-            exc.printStackTrace();
-            printMessage(exc);
-            System.exit(1);
-        } finally {
-            if (isLogFileUsed) {
-                if (out != null) {
-                    try {
-                        out.close();
-                    } catch (final Exception e) {
-                        //ignore
-                    }
-                }
-                if (err != null) {
-                    try {
-                        err.close();
-                    } catch (final Exception e) {
-                        //ignore
-                    }
-                }
-            }
-        }
-    }
-
-    /**
-     * Command line entry point. This method kicks off the building
-     * of a project object and executes a build using either a given
-     * target or the default target.
-     *
-     * @param args Command line arguments. Must not be <code>null</code>.
-     */
-    public static void main(String[] args) {
-        start(args, null, null);
-    }
-
-    // XXX: (Jon Skeet) Error handling appears to be inconsistent here.
-    // Sometimes there's just a return statement, and sometimes a
-    // BuildException is thrown. What's the rationale for when to do
-    // what?
-    /**
-     * Sole constructor, which parses and deals with command line
-     * arguments.
-     *
-     * @param args Command line arguments. Must not be <code>null</code>.
-     *
-     * @exception BuildException if the specified build file doesn't exist
-     *                           or is a directory.
-     */
-    protected Main(String[] args) throws BuildException {
-
-        String searchForThis = null;
-
-        // cycle through given args
-
-        for (int i = 0; i < args.length; i++) {
-            String arg = args[i];
-
-            if (arg.equals("-help")) {
-                printUsage();
-                return;
-            } else if (arg.equals("-version")) {
-                printVersion();
-                return;
-            } else if (arg.equals("-quiet") || arg.equals("-q")) {
-                msgOutputLevel = Project.MSG_WARN;
-            } else if (arg.equals("-verbose") || arg.equals("-v")) {
-                printVersion();
-                msgOutputLevel = Project.MSG_VERBOSE;
-            } else if (arg.equals("-debug")) {
-                printVersion();
-                msgOutputLevel = Project.MSG_DEBUG;
-            } else if (arg.equals("-logfile") || arg.equals("-l")) {
-                try {
-                    File logFile = new File(args[i + 1]);
-                    i++;
-                    out = new PrintStream(new FileOutputStream(logFile));
-                    err = out;
-                    System.setOut(out);
-                    System.setErr(out);
-                    isLogFileUsed = true;
-                } catch (IOException ioe) {
-                    String msg = "Cannot write on the specified log file. "
-                        + "Make sure the path exists and you have write "
-                        + "permissions.";
-                    System.out.println(msg);
-                    return;
-                } catch (ArrayIndexOutOfBoundsException aioobe) {
-                    String msg = "You must specify a log file when " +
-                        "using the -log argument";
-                    System.out.println(msg);
-                    return;
-                }
-            } else if (arg.equals("-buildfile") || arg.equals("-file")
-                       || arg.equals("-f")) {
-                try {
-                    buildFile = new File(args[i + 1]);
-                    i++;
-                } catch (ArrayIndexOutOfBoundsException aioobe) {
-                    String msg = "You must specify a buildfile when " +
-                        "using the -buildfile argument";
-                    System.out.println(msg);
-                    return;
-                }
-            } else if (arg.equals("-listener")) {
-                try {
-                    listeners.addElement(args[i + 1]);
-                    i++;
-                } catch (ArrayIndexOutOfBoundsException aioobe) {
-                    String msg = "You must specify a classname when " +
-                        "using the -listener argument";
-                    System.out.println(msg);
-                    return;
-                }
-            } else if (arg.startsWith("-D")) {
-
-                /* Interestingly enough, we get to here when a user
-                 * uses -Dname=value. However, in some cases, the JDK
-                 * goes ahead and parses this out to args
-                 *   {"-Dname", "value"}
-                 * so instead of parsing on "=", we just make the "-D"
-                 * characters go away and skip one argument forward.
-                 *
-                 * I don't know how to predict when the JDK is going
-                 * to help or not, so we simply look for the equals sign.
-                 */
-
-                String name = arg.substring(2, arg.length());
-                String value = null;
-                int posEq = name.indexOf("=");
-                if (posEq > 0) {
-                    value = name.substring(posEq + 1);
-                    name = name.substring(0, posEq);
-                } else if (i < args.length - 1) {
-                    value = args[++i];
-                       }
-
-                definedProps.put(name, value);
-            } else if (arg.equals("-logger")) {
-                if (loggerClassname != null) {
-                    System.out.println("Only one logger class may "
-                        + " be specified.");
-                    return;
-                }
-                try {
-                    loggerClassname = args[++i];
-                } catch (ArrayIndexOutOfBoundsException aioobe) {
-                    System.out.println("You must specify a classname when " +
-                                       "using the -logger argument");
-                    return;
-                }
-            } else if (arg.equals("-inputhandler")) {
-                if (inputHandlerClassname != null) {
-                    System.out.println("Only one input handler class may " +
-                                       "be specified.");
-                    return;
-                }
-                try {
-                    inputHandlerClassname = args[++i];
-                } catch (ArrayIndexOutOfBoundsException aioobe) {
-                    System.out.println("You must specify a classname when " +
-                                       "using the -inputhandler argument");
-                    return;
-                }
-            } else if (arg.equals("-emacs")) {
-                emacsMode = true;
-            } else if (arg.equals("-projecthelp")) {
-                // set the flag to display the targets and quit
-                projectHelp = true;
-            } else if (arg.equals("-find")) {
-                // eat up next arg if present, default to build.xml
-                if (i < args.length - 1) {
-                    searchForThis = args[++i];
-                } else {
-                    searchForThis = DEFAULT_BUILD_FILENAME;
-                }
-            } else if (arg.startsWith("-propertyfile")) {
-                try {
-                    propertyFiles.addElement(args[i + 1]);
-                    i++;
-                } catch (ArrayIndexOutOfBoundsException aioobe) {
-                    String msg = "You must specify a property filename when " +
-                        "using the -propertyfile argument";
-                    System.out.println(msg);
-                    return;
-                }
-            } else if (arg.startsWith("-")) {
-                // we don't have any more args to recognize!
-                String msg = "Unknown argument: " + arg;
-                System.out.println(msg);
-                printUsage();
-                return;
-            } else {
-                // if it's no other arg, it may be the target
-                targets.addElement(arg);
-            }
-        }
-
-        // if buildFile was not specified on the command line,
-        if (buildFile == null) {
-            // but -find then search for it
-            if (searchForThis != null) {
-                buildFile = findBuildFile(System.getProperty("user.dir"),
-                                          searchForThis);
-            } else {
-                buildFile = new File(DEFAULT_BUILD_FILENAME);
-            }
-        }
-
-        // make sure buildfile exists
-        if (!buildFile.exists()) {
-            System.out.println("Buildfile: " + buildFile + " does not exist!");
-            throw new BuildException("Build failed");
-        }
-
-        // make sure it's not a directory (this falls into the ultra
-        // paranoid lets check everything catagory
-
-        if (buildFile.isDirectory()) {
-            System.out.println("What? Buildfile: " + buildFile + " is a dir!");
-            throw new BuildException("Build failed");
-        }
-
-        // Load the property files specified by -propertyfile
-        for (int propertyFileIndex = 0;
-             propertyFileIndex < propertyFiles.size();
-             propertyFileIndex++) {
-            String filename
-                = (String) propertyFiles.elementAt(propertyFileIndex);
-            Properties props = new Properties();
-            FileInputStream fis = null;
-            try {
-                fis = new FileInputStream(filename);
-                props.load(fis);
-            } catch (IOException e) {
-                System.out.println("Could not load property file "
-                   + filename + ": " + e.getMessage());
-            } finally {
-                if (fis != null){
-                    try {
-                        fis.close();
-                    } catch (IOException e){
-                }
-              }
-            }
-
-            // ensure that -D properties take precedence
-            Enumeration propertyNames = props.propertyNames();
-            while (propertyNames.hasMoreElements()) {
-                String name = (String) propertyNames.nextElement();
-                if (definedProps.getProperty(name) == null) {
-                    definedProps.put(name, props.getProperty(name));
-                }
-            }
-        }
-
-        readyToRun = true;
-    }
-
-    /**
-     * Helper to get the parent file for a given file.
-     * <p>
-     * Added to simulate File.getParentFile() from JDK 1.2.
-     *
-     * @param file   File to find parent of. Must not be <code>null</code>.
-     * @return       Parent file or null if none
-     */
-    private File getParentFile(File file) {
-        String filename = file.getAbsolutePath();
-        file = new File(filename);
-        filename = file.getParent();
-
-        if (filename != null && msgOutputLevel >= Project.MSG_VERBOSE) {
-            System.out.println("Searching in " + filename);
-        }
-
-        return (filename == null) ? null : new File(filename);
-    }
-
-    /**
-     * Search parent directories for the build file.
-     * <p>
-     * Takes the given target as a suffix to append to each
-     * parent directory in seach of a build file.  Once the
-     * root of the file-system has been reached an exception
-     * is thrown.
-     *
-     * @param start  Leaf directory of search.
-     *               Must not be <code>null</code>.
-     * @param suffix  Suffix filename to look for in parents.
-     *                Must not be <code>null</code>.
-     *
-     * @return A handle to the build file if one is found
-     *
-     * @exception BuildException if no build file is found
-     */
-    private File findBuildFile(String start, String suffix)
-         throws BuildException {
-        if (msgOutputLevel >= Project.MSG_INFO) {
-            System.out.println("Searching for " + suffix + " ...");
-        }
-
-        File parent = new File(new File(start).getAbsolutePath());
-        File file = new File(parent, suffix);
-
-        // check if the target file exists in the current directory
-        while (!file.exists()) {
-            // change to parent directory
-            parent = getParentFile(parent);
-
-            // if parent is null, then we are at the root of the fs,
-            // complain that we can't find the build file.
-            if (parent == null) {
-                throw new BuildException("Could not locate a build file!");
-            }
-
-            // refresh our file handle
-            file = new File(parent, suffix);
-        }
-
-        return file;
-    }
-
-    /**
-     * Executes the build. If the constructor for this instance failed
-     * (e.g. returned after issuing a warning), this method returns
-     * immediately.
-     *
-     * @param coreLoader The classloader to use to find core classes.
-     *                   May be <code>null</code>, in which case the
-     *                   system classloader is used.
-     *
-     * @exception BuildException if the build fails
-     */
-    private void runBuild(ClassLoader coreLoader) throws BuildException {
-
-        if (!readyToRun) {
-            return;
-        }
-
-        // track when we started
-
-        if (msgOutputLevel >= Project.MSG_INFO) {
-            System.out.println("Buildfile: " + buildFile);
-        }
-
-        final Project project = new Project();
-        project.setCoreLoader(coreLoader);
-
-        Throwable error = null;
-
-        try {
-            addBuildListeners(project);
-            addInputHandler(project);
-
-            PrintStream err = System.err;
-            PrintStream out = System.out;
-
-            // use a system manager that prevents from System.exit()
-            // only in JDK > 1.1
-            SecurityManager oldsm = null;
-            if (!JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_0) &&
-                !JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_1)){
-                oldsm = System.getSecurityManager();
-
-                //SecurityManager can not be installed here for backwards
-                //compatability reasons (PD). Needs to be loaded prior to
-                //ant class if we are going to implement it.
-                //System.setSecurityManager(new NoExitSecurityManager());
-            }
-            try {
-                System.setOut(new PrintStream(new DemuxOutputStream(project, false)));
-                System.setErr(new PrintStream(new DemuxOutputStream(project, true)));
-
-                if (!projectHelp) {
-                    project.fireBuildStarted();
-                }
-                project.init();
-                project.setUserProperty("ant.version", getAntVersion());
-
-                // set user-define properties
-                Enumeration e = definedProps.keys();
-                while (e.hasMoreElements()) {
-                    String arg = (String) e.nextElement();
-                    String value = (String) definedProps.get(arg);
-                    project.setUserProperty(arg, value);
-                }
-
-                project.setUserProperty("ant.file",
-                    buildFile.getAbsolutePath());
-
-                ProjectHelper.configureProject(project, buildFile);
-
-                if (projectHelp) {
-                    printDescription(project);
-                    printTargets(project, msgOutputLevel > Project.MSG_INFO);
-                    return;
-                }
-
-                // make sure that we have a target to execute
-                if (targets.size() == 0) {
-                    targets.addElement(project.getDefaultTarget());
-                }
-
-                project.executeTargets(targets);
-            } finally {
-                // put back the original security manager
-                //The following will never eval to true. (PD)
-                if (oldsm != null){
-                    System.setSecurityManager(oldsm);
-                }
-
-                System.setOut(out);
-                System.setErr(err);
-            }
-        } catch (RuntimeException exc) {
-            error = exc;
-            throw exc;
-        } catch (Error err) {
-            error = err;
-            throw err;
-        } finally {
-            if (!projectHelp) {
-                project.fireBuildFinished(error);
-            }
-        }
-    }
-
-    /**
-     * Adds the listeners specified in the command line arguments,
-     * along with the default listener, to the specified project.
-     *
-     * @param project The project to add listeners to.
-     *                Must not be <code>null</code>.
-     */
-    protected void addBuildListeners(Project project) {
-
-        // Add the default listener
-        project.addBuildListener(createLogger());
-
-        for (int i = 0; i < listeners.size(); i++) {
-            String className = (String) listeners.elementAt(i);
-            try {
-                BuildListener listener =
-                    (BuildListener) Class.forName(className).newInstance();
-                project.addBuildListener(listener);
-            } catch (Throwable exc) {
-                throw new BuildException("Unable to instantiate listener "
-                    + className, exc);
-            }
-        }
-    }
-
-    /**
-     * Creates the InputHandler and adds it to the project.
-     *
-     * @exception BuildException if a specified InputHandler
-     *                           implementation could not be loaded.
-     */
-    private void addInputHandler(Project project) {
-        InputHandler handler = null;
-        if (inputHandlerClassname == null) {
-            handler = new DefaultInputHandler();
-        } else {
-            try {
-                handler = (InputHandler)
-                    (Class.forName(inputHandlerClassname).newInstance());
-            } catch (ClassCastException e) {
-                String msg = "The specified input handler class " 
-                    + inputHandlerClassname 
-                    + " does not implement the InputHandler interface";
-                throw new BuildException(msg);
-            }
-            catch (Exception e) {
-                String msg = "Unable to instantiate specified input handler "
-                    + "class " + inputHandlerClassname + " : " 
-                    + e.getClass().getName();
-                throw new BuildException(msg);
-            }
-        }
-        project.setInputHandler(handler);
-    }
-
-    // XXX: (Jon Skeet) Any reason for writing a message and then using a bare
-    // RuntimeException rather than just using a BuildException here? Is it
-    // in case the message could end up being written to no loggers (as the
-    // loggers could have failed to be created due to this failure)?
-    /**
-     * Creates the default build logger for sending build events to the ant
-     * log.
-     *
-     * @return the logger instance for this build.
-     */
-    private BuildLogger createLogger() {
-        BuildLogger logger = null;
-        if (loggerClassname != null) {
-            try {
-                logger = (BuildLogger) (Class.forName(loggerClassname).newInstance());
-            } catch (ClassCastException e) {
-                System.err.println("The specified logger class "
-                    + loggerClassname
-                    + " does not implement the BuildLogger interface");
-                throw new RuntimeException();
-            } catch (Exception e) {
-                System.err.println("Unable to instantiate specified logger "
-                    + "class " + loggerClassname + " : " 
-                    + e.getClass().getName());
-                throw new RuntimeException();
-            }
-        } else {
-            logger = new DefaultLogger();
-        }
-
-        logger.setMessageOutputLevel(msgOutputLevel);
-        logger.setOutputPrintStream(out);
-        logger.setErrorPrintStream(err);
-        logger.setEmacsMode(emacsMode);
-
-        return logger;
-    }
-
-    /**
-     * Prints the usage information for this class to <code>System.out</code>.
-     */
-    private static void printUsage() {
-        String lSep = System.getProperty("line.separator");
-        StringBuffer msg = new StringBuffer();
-        msg.append("ant [options] [target [target2 [target3] ...]]" + lSep);
-        msg.append("Options: " + lSep);
-        msg.append("  -help                  print this message" + lSep);
-        msg.append("  -projecthelp           print project help information" + lSep);
-        msg.append("  -version               print the version information and exit" + lSep);
-        msg.append("  -quiet                 be extra quiet" + lSep);
-        msg.append("  -verbose               be extra verbose" + lSep);
-        msg.append("  -debug                 print debugging information" + lSep);
-        msg.append("  -emacs                 produce logging information without adornments" + lSep);
-        msg.append("  -logfile <file>        use given file for log" + lSep);
-        msg.append("  -logger <classname>    the class which is to perform logging" + lSep);
-        msg.append("  -listener <classname>  add an instance of class as a project listener" + lSep);
-        msg.append("  -buildfile <file>      use given buildfile" + lSep);
-        msg.append("  -D<property>=<value>   use value for given property" + lSep);
-        msg.append("  -propertyfile <name>   load all properties from file with -D" + lSep);
-        msg.append("                         properties taking precedence" + lSep);
-        msg.append("  -inputhandler <class>  the class which will handle input requests" + lSep);
-        msg.append("  -find <file>           search for buildfile towards the root of the" + lSep);
-        msg.append("                         filesystem and use it" + lSep);
-        System.out.println(msg.toString());
-    }
-
-    /**
-     * Prints the Ant version information to <code>System.out</code>.
-     *
-     * @exception BuildException if the version information is unavailable
-     */
-    private static void printVersion() throws BuildException {
-        System.out.println(getAntVersion());
-    }
-
-    /**
-     * Cache of the Ant version information when it has been loaded.
-     */
-    private static String antVersion = null;
-
-    /**
-     * Returns the Ant version information, if available. Once the information
-     * has been loaded once, it's cached and returned from the cache on future
-     * calls.
-     *
-     * @return the Ant version information as a String
-     *         (always non-<code>null</code>)
-     *
-     * @exception BuildException if the version information is unavailable
-     */
-    public static synchronized String getAntVersion() throws BuildException {
-        if (antVersion == null) {
-            try {
-                Properties props = new Properties();
-                InputStream in =
-                    Main.class.getResourceAsStream("/org/apache/tools/ant/version.txt");
-                props.load(in);
-                in.close();
-
-                String lSep = System.getProperty("line.separator");
-                StringBuffer msg = new StringBuffer();
-                msg.append("Apache Ant version ");
-                msg.append(props.getProperty("VERSION"));
-                msg.append(" compiled on ");
-                msg.append(props.getProperty("DATE"));
-                antVersion = msg.toString();
-            } catch (IOException ioe) {
-                throw new BuildException("Could not load the version information:"
-                                         + ioe.getMessage());
-            } catch (NullPointerException npe) {
-                throw new BuildException("Could not load the version information.");
-            }
-        }
-        return antVersion;
-    }
-
-     /**
-      * Prints the description of a project (if there is one) to
-      * <code>System.out</code>.
-      *
-      * @param project The project to display a description of.
-      *                Must not be <code>null</code>.
-      */
-    private static void printDescription(Project project) {
-       if (project.getDescription() != null) {
-          System.out.println(project.getDescription());
-       }
-    }
-
-    /**
-     * Prints a list of all targets in the specified project to
-     * <code>System.out</code>, optionally including subtargets.
-     *
-     * @param project The project to display a description of.
-     *                Must not be <code>null</code>.
-     * @param printSubTargets Whether or not subtarget names should also be
-     *                        printed.
-     */
-    private static void printTargets(Project project, boolean printSubTargets) {
-        // find the target with the longest name
-        int maxLength = 0;
-        Enumeration ptargets = project.getTargets().elements();
-        String targetName;
-        String targetDescription;
-        Target currentTarget;
-        // split the targets in top-level and sub-targets depending
-        // on the presence of a description
-        Vector topNames = new Vector();
-        Vector topDescriptions = new Vector();
-        Vector subNames = new Vector();
-
-        while (ptargets.hasMoreElements()) {
-            currentTarget = (Target) ptargets.nextElement();
-            targetName = currentTarget.getName();
-            targetDescription = currentTarget.getDescription();
-            // maintain a sorted list of targets
-            if (targetDescription == null) {
-                int pos = findTargetPosition(subNames, targetName);
-                subNames.insertElementAt(targetName, pos);
-            } else {
-                int pos = findTargetPosition(topNames, targetName);
-                topNames.insertElementAt(targetName, pos);
-                topDescriptions.insertElementAt(targetDescription, pos);
-                if (targetName.length() > maxLength) {
-                    maxLength = targetName.length();
-                }
-            }
-        }
-
-        printTargets(topNames, topDescriptions, "Main targets:", maxLength);
-
-        if (printSubTargets) {
-            printTargets(subNames, null, "Subtargets:", 0);
-        }
-
-        String defaultTarget = project.getDefaultTarget();
-        if (defaultTarget != null && !"".equals(defaultTarget)) {
-            // shouldn't need to check but...
-            System.out.println("Default target: " + defaultTarget);
-        }
-    }
-
-    /**
-     * Searches for the correct place to insert a name into a list so as
-     * to keep the list sorted alphabetically.
-     *
-     * @param names The current list of names. Must not be <code>null</code>.
-     * @param name  The name to find a place for.
-     *              Must not be <code>null</code>.
-     *
-     * @return the correct place in the list for the given name
-     */
-    private static int findTargetPosition(Vector names, String name) {
-        int res = names.size();
-        for (int i = 0; i < names.size() && res == names.size(); i++) {
-            if (name.compareTo((String) names.elementAt(i)) < 0) {
-                res = i;
-            }
-        }
-        return res;
-    }
-
-    /**
-     * Writes a formatted list of target names to <code>System.out</code>
-     * with an optional description.
-     *
-     * @param names The names to be printed.
-     *              Must not be <code>null</code>.
-     * @param descriptions The associated target descriptions.
-     *                     May be <code>null</code>, in which case
-     *                     no descriptions are displayed.
-     *                     If non-<code>null</code>, this should have
-     *                     as many elements as <code>names</code>.
-     * @param heading The heading to display.
-     *                Should not be <code>null</code>.
-     * @param maxlen The maximum length of the names of the targets.
-     *               If descriptions are given, they are padded to this
-     *               position so they line up (so long as the names really
-     *               <i>are</i> shorter than this).
-     */
-    private static void printTargets(Vector names, Vector descriptions,
-                                     String heading, int maxlen) {
-        // now, start printing the targets and their descriptions
-        String lSep = System.getProperty("line.separator");
-        // got a bit annoyed that I couldn't find a pad function
-        String spaces = "    ";
-        while (spaces.length() < maxlen) {
-            spaces += spaces;
-        }
-        StringBuffer msg = new StringBuffer();
-        msg.append(heading + lSep + lSep);
-        for (int i = 0; i < names.size(); i++) {
-            msg.append(" ");
-            msg.append(names.elementAt(i));
-            if (descriptions != null) {
-                msg.append(spaces.substring(0, maxlen - ((String) names.elementAt(i)).length() + 2));
-                msg.append(descriptions.elementAt(i));
-            }
-            msg.append(lSep);
-        }
-        System.out.println(msg.toString());
-    }
-}
diff --git a/src/main/org/apache/tools/ant/NoBannerLogger.java b/src/main/org/apache/tools/ant/NoBannerLogger.java
deleted file mode 100644
index 89437f4..0000000
--- a/src/main/org/apache/tools/ant/NoBannerLogger.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant;
-
-import org.apache.tools.ant.util.StringUtils;
-
-/**
- * Extends DefaultLogger to strip out empty targets.
- *
- * @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
- */
-public class NoBannerLogger extends DefaultLogger {
-
-    /** 
-     * Name of the current target, if it should
-     * be displayed on the next message. This is
-     * set when a target starts building, and reset
-     * to <code>null</code> after the first message for 
-     * the target is logged.
-     */
-    protected String targetName;
-
-    /** Sole constructor. */
-    public NoBannerLogger() {
-    }
-
-    /**
-     * Notes the name of the target so it can be logged
-     * if it generates any messages.
-     * 
-     * @param event A BuildEvent containing target information.
-     *              Must not be <code>null</code>.
-     */
-    public void targetStarted(BuildEvent event) {
-        targetName = event.getTarget().getName();
-    }
-
-    /** 
-     * Resets the current target name to <code>null</code>.
-     * 
-     * @param event Ignored in this implementation.
-     */
-    public void targetFinished(BuildEvent event) {
-        targetName = null;
-    }
-
-    /**
-     * Logs a message for a target if it is of an appropriate
-     * priority, also logging the name of the target if this
-     * is the first message which needs to be logged for the
-     * target.
-     * 
-     * @param event A BuildEvent containing message information.
-     *              Must not be <code>null</code>.
-     */
-    public void messageLogged(BuildEvent event) {
-
-        if (event.getPriority() > msgOutputLevel 
-            || null == event.getMessage() 
-            || "".equals(event.getMessage().trim())) {
-                return;
-        }
-
-        if (null != targetName) {
-            out.println(StringUtils.LINE_SEP + targetName + ":");
-            targetName = null;
-        }
-
-        super.messageLogged(event);
-    }
-}
diff --git a/src/main/org/apache/tools/ant/PathTokenizer.java b/src/main/org/apache/tools/ant/PathTokenizer.java
deleted file mode 100644
index d10f4ee..0000000
--- a/src/main/org/apache/tools/ant/PathTokenizer.java
+++ /dev/null
@@ -1,201 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000,2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant;
-
-import org.apache.tools.ant.taskdefs.condition.Os;
-
-import java.util.NoSuchElementException;
-import java.util.StringTokenizer;
-import java.io.File;
-
-/**
- * A Path tokenizer takes a path and returns the components that make up
- * that path.
- *
- * The path can use path separators of either ':' or ';' and file separators
- * of either '/' or '\'.
- *
- * @author Conor MacNeill
- * @author <a href="mailto:jtulley@novell.com">Jeff Tulley</a> 
- */ 
-public class PathTokenizer {
-    /**
-     * A tokenizer to break the string up based on the ':' or ';' separators.
-     */
-    private StringTokenizer tokenizer;
-    
-    /**
-     * A String which stores any path components which have been read ahead
-     * due to DOS filesystem compensation.
-     */
-    private String lookahead = null;
-
-    /**
-     * A boolean that determines if we are running on Novell NetWare, which
-     * exhibits slightly different path name characteristics (multi-character
-     * volume / drive names)
-     */
-    private boolean onNetWare = Os.isFamily("netware");
-
-    /**
-     * Flag to indicate whether or not we are running on a platform with a
-     * DOS style filesystem
-     */
-    private boolean dosStyleFilesystem;
-
-    /**
-     * Constructs a path tokenizer for the specified path.
-     * 
-     * @param path The path to tokenize. Must not be <code>null</code>.
-     */
-    public PathTokenizer(String path) {
-        if (onNetWare) {
-            // For NetWare, use the boolean=true mode, so we can use delimiter 
-            // information to make a better decision later.
-            tokenizer = new StringTokenizer(path, ":;", true);
-        } else {
-            // on Windows and Unix, we can ignore delimiters and still have
-            // enough information to tokenize correctly.
-            tokenizer = new StringTokenizer(path, ":;", false);
-        }
-        dosStyleFilesystem = File.pathSeparatorChar == ';'; 
-    }
-
-    /**
-     * Tests if there are more path elements available from this tokenizer's
-     * path. If this method returns <code>true</code>, then a subsequent call 
-     * to nextToken will successfully return a token.
-     * 
-     * @return <code>true</code> if and only if there is at least one token 
-     * in the string after the current position; <code>false</code> otherwise.
-     */
-    public boolean hasMoreTokens() {
-        if (lookahead != null) {
-            return true;
-        }
-        
-        return tokenizer.hasMoreTokens();
-    }
-    
-    /**
-     * Returns the next path element from this tokenizer.
-     * 
-     * @return the next path element from this tokenizer.
-     * 
-     * @exception NoSuchElementException if there are no more elements in this 
-     *            tokenizer's path.
-     */
-    public String nextToken() throws NoSuchElementException {
-        String token = null;
-        if (lookahead != null) {
-            token = lookahead;
-            lookahead = null;
-        } else {
-            token = tokenizer.nextToken().trim();
-        }            
-            
-        if (!onNetWare) {
-            if (token.length() == 1 && Character.isLetter(token.charAt(0))
-                                    && dosStyleFilesystem
-                                    && tokenizer.hasMoreTokens()) {
-                // we are on a dos style system so this path could be a drive
-                // spec. We look at the next token
-                String nextToken = tokenizer.nextToken().trim();
-                if (nextToken.startsWith("\\") || nextToken.startsWith("/")) {
-                    // we know we are on a DOS style platform and the next path
-                    // starts with a slash or backslash, so we know this is a 
-                    // drive spec
-                    token += ":" + nextToken;
-                } else {
-                    // store the token just read for next time
-                    lookahead = nextToken;
-                }
-            }
-        } else {
-            // we are on NetWare, tokenizing is handled a little differently,
-            // due to the fact that NetWare has multiple-character volume names.
-            if (token.equals(File.pathSeparator)) {
-                // ignore ";" and get the next token
-                token = tokenizer.nextToken().trim();
-            }
-            
-            if (tokenizer.hasMoreTokens()) {
-                // this path could be a drive spec, so look at the next token
-                String nextToken = tokenizer.nextToken().trim();
-                
-                // make sure we aren't going to get the path separator next
-                if (!nextToken.equals(File.pathSeparator)) {
-                    if (nextToken.equals(":")) {
-                        if (!token.startsWith("/") && !token.startsWith("\\")){ 
-                            // it indeed is a drive spec, get the next bit
-                            String oneMore = tokenizer.nextToken().trim();
-                            if (!oneMore.equals(File.pathSeparator)) {
-                                token += ":" + oneMore;
-                            } else {
-                                token += ":";
-                            }
-                        }
-                        // implicit else: ignore the ':' since we have either a
-                        // UNIX or a relative path
-                    } else {
-                        // store the token just read for next time
-                        lookahead = nextToken;
-                    }
-                }
-            }
-        }
-        return token;
-    }
-}
-          
diff --git a/src/main/org/apache/tools/ant/Project.java b/src/main/org/apache/tools/ant/Project.java
deleted file mode 100644
index 85eb2b1..0000000
--- a/src/main/org/apache/tools/ant/Project.java
+++ /dev/null
@@ -1,1944 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant;
-
-import java.io.File;
-import java.io.InputStream;
-import java.io.IOException;
-import java.util.Hashtable;
-import java.util.Vector;
-import java.util.Properties;
-import java.util.Enumeration;
-import java.util.Stack;
-import java.lang.reflect.Modifier;
-
-import org.apache.tools.ant.types.FilterSet;
-import org.apache.tools.ant.types.FilterSetCollection;
-import org.apache.tools.ant.util.FileUtils;
-import org.apache.tools.ant.util.JavaEnvUtils;
-import org.apache.tools.ant.input.DefaultInputHandler;
-import org.apache.tools.ant.input.InputHandler;
-
-/**
- * Central representation of an Ant project. This class defines an
- * Ant project with all of its targets, tasks and various other
- * properties. It also provides the mechanism to kick off a build using
- * a particular target name.
- * <p>
- * This class also encapsulates methods which allow files to be referred
- * to using abstract path names which are translated to native system
- * file paths at runtime.
- *
- * @author duncan@x180.com
- *
- * @version $Revision$
- */
-
-public class Project {
-
-    /** Message priority of "error". */
-    public static final int MSG_ERR = 0;
-    /** Message priority of "warning". */
-    public static final int MSG_WARN = 1;
-    /** Message priority of "information". */
-    public static final int MSG_INFO = 2;
-    /** Message priority of "verbose". */
-    public static final int MSG_VERBOSE = 3;
-    /** Message priority of "debug". */
-    public static final int MSG_DEBUG = 4;
-
-    /**
-     * Constant for the "visiting" state, used when
-     * traversing a DFS of target dependencies.
-     */
-    private static final String VISITING = "VISITING";
-    /**
-     * Constant for the "visited" state, used when
-     * traversing a DFS of target dependencies.
-     */
-    private static final String VISITED = "VISITED";
-
-    /**
-     * Version constant for Java 1.0
-     *
-     * @deprecated use org.apache.tools.ant.util.JavaEnvUtils instead
-     */
-    public static final String JAVA_1_0 = JavaEnvUtils.JAVA_1_0;
-    /**
-     * Version constant for Java 1.1
-     *
-     * @deprecated use org.apache.tools.ant.util.JavaEnvUtils instead
-     */
-    public static final String JAVA_1_1 = JavaEnvUtils.JAVA_1_1;
-    /**
-     * Version constant for Java 1.2
-     *
-     * @deprecated use org.apache.tools.ant.util.JavaEnvUtils instead
-     */
-    public static final String JAVA_1_2 = JavaEnvUtils.JAVA_1_2;
-    /**
-     * Version constant for Java 1.3
-     *
-     * @deprecated use org.apache.tools.ant.util.JavaEnvUtils instead
-     */
-    public static final String JAVA_1_3 = JavaEnvUtils.JAVA_1_3;
-    /**
-     * Version constant for Java 1.4
-     *
-     * @deprecated use org.apache.tools.ant.util.JavaEnvUtils instead
-     */
-    public static final String JAVA_1_4 = JavaEnvUtils.JAVA_1_4;
-
-    /** Default filter start token. */
-    public static final String TOKEN_START = FilterSet.DEFAULT_TOKEN_START;
-    /** Default filter end token. */
-    public static final String TOKEN_END = FilterSet.DEFAULT_TOKEN_END;
-
-    /** Name of this project. */
-    private String name;
-    /** Description for this project (if any). */
-    private String description;
-
-    /** Project properties map (String to String). */
-    private Hashtable properties = new Hashtable();
-    /**
-     * Map of "user" properties (as created in the Ant task, for example).
-     * Note that these key/value pairs are also always put into the
-     * project properties, so only the project properties need to be queried.
-     * Mapping is String to String.
-     */
-    private Hashtable userProperties = new Hashtable();
-    /** Map of references within the project (paths etc) (String to Object). */
-    private Hashtable references = new Hashtable();
-
-    /** Name of the project's default target. */
-    private String defaultTarget;
-    /** Map from data type names to implementing classes (String to Class). */
-    private Hashtable dataClassDefinitions = new Hashtable();
-    /** Map from task names to implementing classes (String to Class). */
-    private Hashtable taskClassDefinitions = new Hashtable();
-    /**
-     * Map from task names to vectors of created tasks
-     * (String to Vector of Task). This is used to invalidate tasks if
-     * the task definition changes.
-     */
-    private Hashtable createdTasks = new Hashtable();
-    /** Map from target names to targets (String to Target). */
-    private Hashtable targets = new Hashtable();
-    /** Set of global filters. */
-    private FilterSet globalFilterSet = new FilterSet();
-    /**
-     * Wrapper around globalFilterSet. This collection only ever
-     * contains one FilterSet, but the wrapper is needed in order to
-     * make it easier to use the FileUtils interface.
-     */
-    private FilterSetCollection globalFilters
-        = new FilterSetCollection(globalFilterSet);
-
-    /** Project base directory. */
-    private File baseDir;
-
-    /** List of listeners to notify of build events. */
-    private Vector listeners = new Vector();
-
-    /**
-     * The Ant core classloader - may be <code>null</code> if using
-     * parent classloader.
-     */
-    private ClassLoader coreLoader = null;
-
-    /** Records the latest task to be executed on a thread (Thread to Task). */
-    private Hashtable threadTasks = new Hashtable();
-
-    /**
-     * Called to handle any input requests.
-     */
-    private InputHandler inputHandler = null;
-
-    /**
-     * Sets the input handler
-     */
-    public void setInputHandler(InputHandler handler) {
-        inputHandler = handler;
-    }
-
-    /**
-     * Retrieves the current input handler.
-     */
-    public InputHandler getInputHandler() {
-        return inputHandler;
-    }
-
-    /** Instance of a utility class to use for file operations. */
-    private FileUtils fileUtils;
-
-    /**
-     * Creates a new Ant project.
-     */
-    public Project() {
-        fileUtils = FileUtils.newFileUtils();
-        inputHandler = new DefaultInputHandler();
-    }
-
-    /**
-     * Initialises the project.
-     *
-     * This involves setting the default task definitions and loading the
-     * system properties.
-     *
-     * @exception BuildException if the default task list cannot be loaded
-     */
-    public void init() throws BuildException {
-        setJavaVersionProperty();
-
-        String defs = "/org/apache/tools/ant/taskdefs/defaults.properties";
-
-        try {
-            Properties props = new Properties();
-            InputStream in = this.getClass().getResourceAsStream(defs);
-            if (in == null) {
-                throw new BuildException("Can't load default task list");
-            }
-            props.load(in);
-            in.close();
-
-            Enumeration enum = props.propertyNames();
-            while (enum.hasMoreElements()) {
-                String key = (String) enum.nextElement();
-                String value = props.getProperty(key);
-                try {
-                    Class taskClass = Class.forName(value);
-                    addTaskDefinition(key, taskClass);
-                } catch (NoClassDefFoundError ncdfe) {
-                    log("Could not load a dependent class ("
-                        + ncdfe.getMessage() + ") for task " + key, MSG_DEBUG);
-                } catch (ClassNotFoundException cnfe) {
-                    log("Could not load class (" + value
-                        + ") for task " + key, MSG_DEBUG);
-                }
-            }
-        } catch (IOException ioe) {
-            throw new BuildException("Can't load default task list");
-        }
-
-        String dataDefs = "/org/apache/tools/ant/types/defaults.properties";
-
-        try {
-            Properties props = new Properties();
-            InputStream in = this.getClass().getResourceAsStream(dataDefs);
-            if (in == null) {
-                throw new BuildException("Can't load default datatype list");
-            }
-            props.load(in);
-            in.close();
-
-            Enumeration enum = props.propertyNames();
-            while (enum.hasMoreElements()) {
-                String key = (String) enum.nextElement();
-                String value = props.getProperty(key);
-                try {
-                    Class dataClass = Class.forName(value);
-                    addDataTypeDefinition(key, dataClass);
-                } catch (NoClassDefFoundError ncdfe) {
-                    // ignore...
-                } catch (ClassNotFoundException cnfe) {
-                    // ignore...
-                }
-            }
-        } catch (IOException ioe) {
-            throw new BuildException("Can't load default datatype list");
-        }
-
-        setSystemProperties();
-    }
-
-    /**
-     * Sets the core classloader for the project. If a <code>null</code>
-     * classloader is specified, the parent classloader should be used.
-     *
-     * @param coreLoader The classloader to use for the project.
-     *                   May be <code>null</code>.
-     */
-    public void setCoreLoader(ClassLoader coreLoader) {
-        this.coreLoader = coreLoader;
-    }
-
-    /**
-     * Returns the core classloader to use for this project.
-     * This may be <code>null</code>, indicating that
-     * the parent classloader should be used.
-     *
-     * @return the core classloader to use for this project.
-     *
-     */
-    public ClassLoader getCoreLoader() {
-        return coreLoader;
-    }
-
-    /**
-     * Adds a build listener to the list. This listener will
-     * be notified of build events for this project.
-     *
-     * @param listener The listener to add to the list.
-     *                 Must not be <code>null</code>.
-     */
-    public void addBuildListener(BuildListener listener) {
-        listeners.addElement(listener);
-    }
-
-    /**
-     * Removes a build listener from the list. This listener
-     * will no longer be notified of build events for this project.
-     *
-     * @param listener The listener to remove from the list.
-     *                 Should not be <code>null</code>.
-     */
-    public void removeBuildListener(BuildListener listener) {
-        listeners.removeElement(listener);
-    }
-
-    /**
-     * Returns a list of build listeners for the project. The returned
-     * vector is "live" and so should not be modified.
-     *
-     * @return a list of build listeners for the project
-     */
-    public Vector getBuildListeners() {
-        return listeners;
-    }
-
-    /**
-     * Writes a message to the log with the default log level
-     * of MSG_INFO
-     * @param message The text to log. Should not be <code>null</code>.
-     */
-
-    public void log(String message) {
-        log(message, MSG_INFO);
-    }
-
-    /**
-     * Writes a project level message to the log with the given log level.
-     * @param message The text to log. Should not be <code>null</code>.
-     * @param msgLevel The priority level to log at.
-     */
-    public void log(String message, int msgLevel) {
-        fireMessageLogged(this, message, msgLevel);
-    }
-
-    /**
-     * Writes a task level message to the log with the given log level.
-     * @param task The task to use in the log. Must not be <code>null</code>.
-     * @param message The text to log. Should not be <code>null</code>.
-     * @param msgLevel The priority level to log at.
-     */
-    public void log(Task task, String message, int msgLevel) {
-        fireMessageLogged(task, message, msgLevel);
-    }
-
-    /**
-     * Writes a target level message to the log with the given log level.
-     * @param target The target to use in the log.
-     *               Must not be <code>null</code>.
-     * @param message The text to log. Should not be <code>null</code>.
-     * @param msgLevel The priority level to log at.
-     */
-    public void log(Target target, String message, int msgLevel) {
-        fireMessageLogged(target, message, msgLevel);
-    }
-
-    /**
-     * Returns the set of global filters.
-     *
-     * @return the set of global filters
-     */
-    public FilterSet getGlobalFilterSet() {
-        return globalFilterSet;
-    }
-
-    /**
-     * Sets a property. Any existing property of the same name
-     * is overwritten, unless it is a user property.
-     * @param name The name of property to set.
-     *             Must not be <code>null</code>.
-     * @param value The new value of the property.
-     *              Must not be <code>null</code>.
-     */
-    public void setProperty(String name, String value) {
-        // command line properties take precedence
-        if (null != userProperties.get(name)) {
-            log("Override ignored for user property " + name, MSG_VERBOSE);
-            return;
-        }
-
-        if (null != properties.get(name)) {
-            log("Overriding previous definition of property " + name,
-                MSG_VERBOSE);
-        }
-
-        log("Setting project property: " + name + " -> " +
-             value, MSG_DEBUG);
-        properties.put(name, value);
-    }
-
-    /**
-     * Sets a property if no value currently exists. If the property
-     * exists already, a message is logged and the method returns with
-     * no other effect.
-     *
-     * @param name The name of property to set.
-     *             Must not be <code>null</code>.
-     * @param value The new value of the property.
-     *              Must not be <code>null</code>.
-     * @since 1.5
-     */
-    public void setNewProperty(String name, String value) {
-        if (null != properties.get(name)) {
-            log("Override ignored for property " + name, MSG_VERBOSE);
-            return;
-        }
-        log("Setting project property: " + name + " -> " +
-            value, MSG_DEBUG);
-        properties.put(name, value);
-    }
-
-    /**
-     * Sets a user property, which cannot be overwritten by
-     * set/unset property calls. Any previous value is overwritten.
-     * @param name The name of property to set.
-     *             Must not be <code>null</code>.
-     * @param value The new value of the property.
-     *              Must not be <code>null</code>.
-     * @see #setProperty(String,String)
-     */
-    public void setUserProperty(String name, String value) {
-        log("Setting ro project property: " + name + " -> " +
-            value, MSG_DEBUG);
-        userProperties.put(name, value);
-        properties.put(name, value);
-    }
-
-    /**
-     * Sets a property unless it is already defined as a user property
-     * (in which case the method returns silently).
-     *
-     * @param name The name of the property.
-     *             Must not be <code>null</code>.
-     * @param value The property value. Must not be <code>null</code>.
-     */
-    private void setPropertyInternal(String name, String value) {
-        if (null != userProperties.get(name)) {
-            return;
-        }
-        properties.put(name, value);
-    }
-
-    /**
-     * Returns the value of a property, if it is set.
-     *
-     * @param name The name of the property.
-     *             May be <code>null</code>, in which case
-     *             the return value is also <code>null</code>.
-     * @return the property value, or <code>null</code> for no match
-     *         or if a <code>null</code> name is provided.
-     */
-    public String getProperty(String name) {
-        if (name == null) {
-          return null;
-        }
-        String property = (String) properties.get(name);
-        return property;
-    }
-
-    /**
-     * Replaces ${} style constructions in the given value with the
-     * string value of the corresponding data types.
-     *
-     * @param value The string to be scanned for property references.
-     *              May be <code>null</code>.
-     *
-     * @return the given string with embedded property names replaced
-     *         by values, or <code>null</code> if the given string is
-     *         <code>null</code>.
-     *
-     * @exception BuildException if the given value has an unclosed
-     *                           property name, e.g. <code>${xxx</code>
-     */
-    public String replaceProperties(String value)
-        throws BuildException {
-        return ProjectHelper.replaceProperties(this, value, properties);
-    }
-
-    /**
-     * Returns the value of a user property, if it is set.
-     *
-     * @param name The name of the property.
-     *             May be <code>null</code>, in which case
-     *             the return value is also <code>null</code>.
-     * @return the property value, or <code>null</code> for no match
-     *         or if a <code>null</code> name is provided.
-     */
-     public String getUserProperty(String name) {
-        if (name == null) {
-          return null;
-        }
-        String property = (String) userProperties.get(name);
-        return property;
-    }
-
-    /**
-     * Returns a copy of the properties table.
-     * @return a hashtable containing all properties
-     *         (including user properties).
-     */
-    public Hashtable getProperties() {
-        Hashtable propertiesCopy = new Hashtable();
-
-        Enumeration e = properties.keys();
-        while (e.hasMoreElements()) {
-            Object name = e.nextElement();
-            Object value = properties.get(name);
-            propertiesCopy.put(name, value);
-        }
-
-        return propertiesCopy;
-    }
-
-    /**
-     * Returns a copy of the user property hashtable
-     * @return a hashtable containing just the user properties
-     */
-    public Hashtable getUserProperties() {
-        Hashtable propertiesCopy = new Hashtable();
-
-        Enumeration e = userProperties.keys();
-        while (e.hasMoreElements()) {
-            Object name = e.nextElement();
-            Object value = properties.get(name);
-            propertiesCopy.put(name, value);
-        }
-
-        return propertiesCopy;
-    }
-
-    /**
-     * Sets the default target of the project.
-     *
-     * @param defaultTarget The name of the default target for this project.
-     *                      May be <code>null</code>, indicating that there is
-     *                      no default target.
-     *
-     * @deprecated use setDefault
-     * @see #setDefault(String)
-     */
-    public void setDefaultTarget(String defaultTarget) {
-        this.defaultTarget = defaultTarget;
-    }
-
-    /**
-     * Returns the name of the default target of the project.
-     * @return name of the default target or
-     *         <code>null</code> if no default has been set.
-     */
-    public String getDefaultTarget() {
-        return defaultTarget;
-    }
-
-    /**
-     * Sets the default target of the project.
-     *
-     * @param defaultTarget The name of the default target for this project.
-     *                      May be <code>null</code>, indicating that there is
-     *                      no default target.
-     */
-    public void setDefault(String defaultTarget) {
-        this.defaultTarget = defaultTarget;
-    }
-
-    /**
-     * Sets the name of the project, also setting the user
-     * property <code>ant.project.name</code>.
-     *
-     * @param name The name of the project.
-     *             Must not be <code>null</code>.
-     */
-    public void setName(String name) {
-        setUserProperty("ant.project.name",  name);
-        this.name = name;
-    }
-
-    /**
-     * Returns the project name, if one has been set.
-     *
-     * @return the project name, or <code>null</code> if it hasn't been set.
-     */
-    public String getName() {
-        return name;
-    }
-
-    /**
-     * Sets the project description.
-     *
-     * @param description The description of the project.
-     *                    May be <code>null</code>.
-     */
-    public void setDescription(String description) {
-        this.description = description;
-    }
-
-    /**
-     * Returns the project description, if one has been set.
-     *
-     * @return the project description, or <code>null</code> if it hasn't
-     *         been set.
-     */
-    public String getDescription() {
-        return description;
-    }
-
-    /**
-     * Adds a filter to the set of global filters.
-     *
-     * @param token The token to filter.
-     *              Must not be <code>null</code>.
-     * @param value The replacement value.
-     *              Must not be <code>null</code>.
-     * @deprecated Use getGlobalFilterSet().addFilter(token,value)
-     *
-     * @see #getGlobalFilterSet()
-     * @see FilterSet#addFilter(String,String)
-     */
-    public void addFilter(String token, String value) {
-        if (token == null) {
-            return;
-        }
-
-        globalFilterSet.addFilter(new FilterSet.Filter(token, value));
-    }
-
-    /**
-     * Returns a hashtable of global filters, mapping tokens to values.
-     *
-     * @return a hashtable of global filters, mapping tokens to values
-     *         (String to String).
-     *
-     * @deprecated Use getGlobalFilterSet().getFilterHash()
-     *
-     * @see #getGlobalFilterSet()
-     * @see FilterSet#getFilterHash()
-     */
-    public Hashtable getFilters() {
-        // we need to build the hashtable dynamically
-        return globalFilterSet.getFilterHash();
-    }
-
-    /**
-     * Sets the base directory for the project, checking that
-     * the given filename exists and is a directory.
-     *
-     * @param baseD The project base directory.
-     *              Must not be <code>null</code>.
-     *
-     * @exception BuildException if the directory if invalid
-     */
-    public void setBasedir(String baseD) throws BuildException {
-        setBaseDir(new File(baseD));
-    }
-
-    /**
-     * Sets the base directory for the project, checking that
-     * the given file exists and is a directory.
-     *
-     * @param baseDir The project base directory.
-     *                Must not be <code>null</code>.
-     * @exception BuildException if the specified file doesn't exist or
-     *                           isn't a directory
-     */
-    public void setBaseDir(File baseDir) throws BuildException {
-        baseDir = fileUtils.normalize(baseDir.getAbsolutePath());
-        if (!baseDir.exists()) {
-            throw new BuildException("Basedir " + baseDir.getAbsolutePath()
-                + " does not exist");
-        }
-        if (!baseDir.isDirectory()) {
-            throw new BuildException("Basedir " + baseDir.getAbsolutePath()
-                + " is not a directory");
-        }
-        this.baseDir = baseDir;
-        setPropertyInternal("basedir", this.baseDir.getPath());
-        String msg = "Project base dir set to: " + this.baseDir;
-        log(msg, MSG_VERBOSE);
-    }
-
-    /**
-     * Returns the base directory of the project as a file object.
-     *
-     * @return the project base directory, or <code>null</code> if the
-     *         base directory has not been successfully set to a valid value.
-     */
-    public File getBaseDir() {
-        if (baseDir == null) {
-            try {
-                setBasedir(".");
-            } catch (BuildException ex) {
-                ex.printStackTrace();
-            }
-        }
-        return baseDir;
-    }
-
-    /**
-     * Returns the version of Java this class is running under.
-     * @return the version of Java as a String, e.g. "1.1"
-     * @see org.apache.tools.ant.util.JavaEnvUtils#getJavaVersion
-     * @deprecated use org.apache.tools.ant.util.JavaEnvUtils instead
-     */
-    public static String getJavaVersion() {
-        return JavaEnvUtils.getJavaVersion();
-    }
-
-    /**
-     * Sets the <code>ant.java.version</code> property and tests for
-     * unsupported JVM versions. If the version is supported,
-     * verbose log messages are generated to record the Java version
-     * and operating system name.
-     *
-     * @exception BuildException if this Java version is not supported
-     *
-     * @see org.apache.tools.ant.util.JavaEnvUtils#getJavaVersion
-     */
-    public void setJavaVersionProperty() throws BuildException {
-        String javaVersion = JavaEnvUtils.getJavaVersion();
-        setPropertyInternal("ant.java.version", javaVersion);
-
-        // sanity check
-        if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_0)) {
-            throw new BuildException("Ant cannot work on Java 1.0");
-        }
-
-        log("Detected Java version: " + javaVersion + " in: "
-            + System.getProperty("java.home"), MSG_VERBOSE);
-
-        log("Detected OS: " + System.getProperty("os.name"), MSG_VERBOSE);
-    }
-
-    /**
-     * Adds all system properties which aren't already defined as
-     * user properties to the project properties.
-     */
-    public void setSystemProperties() {
-        Properties systemP = System.getProperties();
-        Enumeration e = systemP.keys();
-        while (e.hasMoreElements()) {
-            Object name = e.nextElement();
-            String value = systemP.get(name).toString();
-            this.setPropertyInternal(name.toString(), value);
-        }
-    }
-
-    /**
-     * Adds a new task definition to the project.
-     * Attempting to override an existing definition with an
-     * equivalent one (i.e. with the same classname) results in
-     * a verbose log message. Attempting to override an existing definition
-     * with a different one results in a warning log message and
-     * invalidates any tasks which have already been created with the
-     * old definition.
-     *
-     * @param taskName The name of the task to add.
-     *                 Must not be <code>null</code>.
-     * @param taskClass The full name of the class implementing the task.
-     *                  Must not be <code>null</code>.
-     *
-     * @exception BuildException if the class is unsuitable for being an Ant
-     *                           task. An error level message is logged before
-     *                           this exception is thrown.
-     *
-     * @see #checkTaskClass(Class)
-     */
-    public void addTaskDefinition(String taskName, Class taskClass)
-         throws BuildException {
-        Class old = (Class) taskClassDefinitions.get(taskName);
-        if (null != old) {
-            if (old.equals(taskClass)) {
-                log("Ignoring override for task " + taskName
-                    + ", it is already defined by the same class.",
-                    MSG_VERBOSE);
-                return;
-            } else {
-                log("Trying to override old definition of task " + taskName,
-                    MSG_WARN);
-                invalidateCreatedTasks(taskName);
-            }
-        }
-
-        String msg = " +User task: " + taskName + "     " + taskClass.getName();
-        log(msg, MSG_DEBUG);
-        checkTaskClass(taskClass);
-        taskClassDefinitions.put(taskName, taskClass);
-    }
-
-    /**
-     * Checks whether or not a class is suitable for serving as Ant task.
-     * Ant task implementation classes must be public, concrete, and have
-     * a no-arg constructor.
-     *
-     * @param taskClass The class to be checked.
-     *                  Must not be <code>null</code>.
-     *
-     * @exception BuildException if the class is unsuitable for being an Ant
-     *                           task. An error level message is logged before
-     *                           this exception is thrown.
-     */
-    public void checkTaskClass(final Class taskClass) throws BuildException {
-        if (!Modifier.isPublic(taskClass.getModifiers())) {
-            final String message = taskClass + " is not public";
-            log(message, Project.MSG_ERR);
-            throw new BuildException(message);
-        }
-        if (Modifier.isAbstract(taskClass.getModifiers())) {
-            final String message = taskClass + " is abstract";
-            log(message, Project.MSG_ERR);
-            throw new BuildException(message);
-        }
-        try {
-            taskClass.getConstructor(null);
-            // don't have to check for public, since
-            // getConstructor finds public constructors only.
-        } catch (NoSuchMethodException e) {
-            final String message = "No public no-arg constructor in "
-                + taskClass;
-            log(message, Project.MSG_ERR);
-            throw new BuildException(message);
-        }
-        if (!Task.class.isAssignableFrom(taskClass)) {
-            TaskAdapter.checkTaskClass(taskClass, this);
-        }
-    }
-
-    /**
-     * Returns the current task definition hashtable. The returned hashtable is
-     * "live" and so should not be modified.
-     *
-     * @return a map of from task name to implementing class
-     *         (String to Class).
-     */
-    public Hashtable getTaskDefinitions() {
-        return taskClassDefinitions;
-    }
-
-    /**
-     * Adds a new datatype definition.
-     * Attempting to override an existing definition with an
-     * equivalent one (i.e. with the same classname) results in
-     * a verbose log message. Attempting to override an existing definition
-     * with a different one results in a warning log message, but the
-     * definition is changed.
-     *
-     * @param typeName The name of the datatype.
-     *                 Must not be <code>null</code>.
-     * @param typeClass The full name of the class implementing the datatype.
-     *                  Must not be <code>null</code>.
-     */
-    public void addDataTypeDefinition(String typeName, Class typeClass) {
-        Class old = (Class) dataClassDefinitions.get(typeName);
-        if (null != old) {
-            if (old.equals(typeClass)) {
-                log("Ignoring override for datatype " + typeName
-                    + ", it is already defined by the same class.",
-                    MSG_VERBOSE);
-                return;
-            } else {
-                log("Trying to override old definition of datatype "
-                    + typeName, MSG_WARN);
-            }
-        }
-
-        String msg = " +User datatype: " + typeName + "     "
-            + typeClass.getName();
-        log(msg, MSG_DEBUG);
-        dataClassDefinitions.put(typeName, typeClass);
-    }
-
-    /**
-     * Returns the current datatype definition hashtable. The returned
-     * hashtable is "live" and so should not be modified.
-     *
-     * @return a map of from datatype name to implementing class
-     *         (String to Class).
-     */
-    public Hashtable getDataTypeDefinitions() {
-        return dataClassDefinitions;
-    }
-
-    /**
-     * Adds a <em>new</em> target to the project.
-     *
-     * @param target The target to be added to the project.
-     *               Must not be <code>null</code>.
-     *
-     * @exception BuildException if the target already exists in the project
-     *
-     * @see Project#addOrReplaceTarget
-     */
-    public void addTarget(Target target) throws BuildException {
-        String name = target.getName();
-        if (targets.get(name) != null) {
-            throw new BuildException("Duplicate target: `" + name + "'");
-        }
-        addOrReplaceTarget(name, target);
-    }
-
-    /**
-     * Adds a <em>new</em> target to the project.
-     *
-     * @param targetName The name to use for the target.
-     *             Must not be <code>null</code>.
-     * @param target The target to be added to the project.
-     *               Must not be <code>null</code>.
-     *
-     * @exception BuildException if the target already exists in the project
-     *
-     * @see Project#addOrReplaceTarget
-     */
-     public void addTarget(String targetName, Target target)
-         throws BuildException {
-         if (targets.get(targetName) != null) {
-             throw new BuildException("Duplicate target: `" + targetName + "'");
-         }
-         addOrReplaceTarget(targetName, target);
-     }
-
-    /**
-     * Adds a target to the project, or replaces one with the same
-     * name.
-     *
-     * @param target The target to be added or replaced in the project.
-     *               Must not be <code>null</code>.
-     */
-    public void addOrReplaceTarget(Target target) {
-        addOrReplaceTarget(target.getName(), target);
-    }
-
-    /**
-     * Adds a target to the project, or replaces one with the same
-     * name.
-     *
-     * @param targetName The name to use for the target.
-     *                   Must not be <code>null</code>.
-     * @param target The target to be added or replaced in the project.
-     *               Must not be <code>null</code>.
-     */
-    public void addOrReplaceTarget(String targetName, Target target) {
-        String msg = " +Target: " + targetName;
-        log(msg, MSG_DEBUG);
-        target.setProject(this);
-        targets.put(targetName, target);
-    }
-
-    /**
-     * Returns the hashtable of targets. The returned hashtable
-     * is "live" and so should not be modified.
-     * @return a map from name to target (String to Target).
-     */
-    public Hashtable getTargets() {
-        return targets;
-    }
-
-    /**
-     * Creates a new instance of a task.
-     *
-     * @param taskType The name of the task to create an instance of.
-     *                 Must not be <code>null</code>.
-     *
-     * @return an instance of the specified task, or <code>null</code> if
-     *         the task name is not recognised.
-     *
-     * @exception BuildException if the task name is recognised but task
-     *                           creation fails.
-     */
-    public Task createTask(String taskType) throws BuildException {
-        Class c = (Class) taskClassDefinitions.get(taskType);
-
-        if (c == null) {
-            return null;
-        }
-
-        try {
-            Object o = c.newInstance();
-            Task task = null;
-            if (o instanceof Task) {
-               task = (Task) o;
-            } else {
-                // "Generic" Bean - use the setter pattern
-                // and an Adapter
-                TaskAdapter taskA = new TaskAdapter();
-                taskA.setProxy(o);
-                task = taskA;
-            }
-            task.setProject(this);
-            task.setTaskType(taskType);
-
-            // set default value, can be changed by the user
-            task.setTaskName(taskType);
-
-            String msg = "   +Task: " + taskType;
-            log (msg, MSG_DEBUG);
-            addCreatedTask(taskType, task);
-            return task;
-        } catch (Throwable t) {
-            String msg = "Could not create task of type: "
-                 + taskType + " due to " + t;
-            throw new BuildException(msg, t);
-        }
-    }
-
-    /**
-     * Keeps a record of all tasks that have been created so that they
-     * can be invalidated if a new task definition overrides the current one.
-     *
-     * @param type The name of the type of task which has been created.
-     *             Must not be <code>null</code>.
-     *
-     * @param task The freshly created task instance.
-     *             Must not be <code>null</code>.
-     */
-    private void addCreatedTask(String type, Task task) {
-        synchronized (createdTasks) {
-            Vector v = (Vector) createdTasks.get(type);
-            if (v == null) {
-                v = new Vector();
-                createdTasks.put(type, v);
-            }
-            v.addElement(task);
-        }
-    }
-
-    /**
-     * Mark tasks as invalid which no longer are of the correct type
-     * for a given taskname.
-     *
-     * @param type The name of the type of task to invalidate.
-     *             Must not be <code>null</code>.
-     */
-    private void invalidateCreatedTasks(String type) {
-        synchronized (createdTasks) {
-            Vector v = (Vector) createdTasks.get(type);
-            if (v != null) {
-                Enumeration enum = v.elements();
-                while (enum.hasMoreElements()) {
-                    Task t = (Task) enum.nextElement();
-                    t.markInvalid();
-                }
-                v.removeAllElements();
-                createdTasks.remove(type);
-            }
-        }
-    }
-
-    /**
-     * Creates a new instance of a data type.
-     *
-     * @param typeName The name of the data type to create an instance of.
-     *                 Must not be <code>null</code>.
-     *
-     * @return an instance of the specified data type, or <code>null</code> if
-     *         the data type name is not recognised.
-     *
-     * @exception BuildException if the data type name is recognised but
-     *                           instance creation fails.
-     */
-    public Object createDataType(String typeName) throws BuildException {
-        Class c = (Class) dataClassDefinitions.get(typeName);
-
-        if (c == null) {
-            return null;
-        }
-
-        try {
-            java.lang.reflect.Constructor ctor = null;
-            boolean noArg = false;
-            // DataType can have a "no arg" constructor or take a single
-            // Project argument.
-            try {
-                ctor = c.getConstructor(new Class[0]);
-                noArg = true;
-            } catch (NoSuchMethodException nse) {
-                ctor = c.getConstructor(new Class[] {Project.class});
-                noArg = false;
-            }
-
-            Object o = null;
-            if (noArg) {
-                 o = ctor.newInstance(new Object[0]);
-            } else {
-                 o = ctor.newInstance(new Object[] {this});
-            }
-            if (o instanceof ProjectComponent) {
-                ((ProjectComponent) o).setProject(this);
-            }
-            String msg = "   +DataType: " + typeName;
-            log (msg, MSG_DEBUG);
-            return o;
-        } catch (java.lang.reflect.InvocationTargetException ite) {
-            Throwable t = ite.getTargetException();
-            String msg = "Could not create datatype of type: "
-                 + typeName + " due to " + t;
-            throw new BuildException(msg, t);
-        } catch (Throwable t) {
-            String msg = "Could not create datatype of type: "
-                 + typeName + " due to " + t;
-            throw new BuildException(msg, t);
-        }
-    }
-
-    /**
-     * Execute the specified sequence of targets, and the targets
-     * they depend on.
-     *
-     * @param targetNames A vector of target name strings to execute.
-     *                    Must not be <code>null</code>.
-     *
-     * @exception BuildException if the build failed
-     */
-    public void executeTargets(Vector targetNames) throws BuildException {
-        Throwable error = null;
-
-        for (int i = 0; i < targetNames.size(); i++) {
-            executeTarget((String) targetNames.elementAt(i));
-        }
-    }
-
-    /**
-     * Demultiplexes output so that each task receives the appropriate
-     * messages. If the current thread is not currently executing a task,
-     * the message is logged directly.
-     *
-     * @param line Message to handle. Should not be <code>null</code>.
-     * @param isError Whether the text represents an error (<code>true</code>)
-     *        or information (<code>false</code>).
-     */
-    public void demuxOutput(String line, boolean isError) {
-        Task task = (Task) threadTasks.get(Thread.currentThread());
-        if (task == null) {
-            fireMessageLogged(this, line, isError ? MSG_ERR : MSG_INFO);
-        } else {
-            if (isError) {
-                task.handleErrorOutput(line);
-            } else {
-                task.handleOutput(line);
-            }
-        }
-    }
-
-    /**
-     * Executes the specified target and any targets it depends on.
-     *
-     * @param targetName The name of the target to execute.
-     *                   Must not be <code>null</code>.
-     *
-     * @exception BuildException if the build failed
-     */
-    public void executeTarget(String targetName) throws BuildException {
-
-        // sanity check ourselves, if we've been asked to build nothing
-        // then we should complain
-
-        if (targetName == null) {
-            String msg = "No target specified";
-            throw new BuildException(msg);
-        }
-
-        // Sort the dependency tree, and run everything from the
-        // beginning until we hit our targetName.
-        // Sorting checks if all the targets (and dependencies)
-        // exist, and if there is any cycle in the dependency
-        // graph.
-        Vector sortedTargets = topoSort(targetName, targets);
-
-        int curidx = 0;
-        Target curtarget;
-
-        do {
-            curtarget = (Target) sortedTargets.elementAt(curidx++);
-            curtarget.performTasks();
-        } while (!curtarget.getName().equals(targetName));
-    }
-
-    /**
-     * Returns the canonical form of a filename.
-     * <p>
-     * If the specified file name is relative it is resolved
-     * with respect to the given root directory.
-     *
-     * @param fileName The name of the file to resolve.
-     *                 Must not be <code>null</code>.
-     *
-     * @param rootDir  The directory to resolve relative file names with
-     *                 respect to. May be <code>null</code>, in which case
-     *                 the current directory is used.
-     *
-     * @return the resolved File.
-     *
-     * @deprecated
-     */
-    public File resolveFile(String fileName, File rootDir) {
-        return fileUtils.resolveFile(rootDir, fileName);
-    }
-
-    /**
-     * Returns the canonical form of a filename.
-     * <p>
-     * If the specified file name is relative it is resolved
-     * with respect to the project's base directory.
-     *
-     * @param fileName The name of the file to resolve.
-     *                 Must not be <code>null</code>.
-     *
-     * @return the resolved File.
-     *
-     */
-    public File resolveFile(String fileName) {
-        return fileUtils.resolveFile(baseDir, fileName);
-    }
-
-    /**
-     * Translates a path into its native (platform specific) format.
-     * <p>
-     * This method uses PathTokenizer to separate the input path
-     * into its components. This handles DOS style paths in a relatively
-     * sensible way. The file separators are then converted to their platform
-     * specific versions.
-     *
-     * @param toProcess The path to be translated.
-     *                  May be <code>null</code>.
-     *
-     * @return the native version of the specified path or
-     *         an empty string if the path is <code>null</code> or empty.
-     *
-     * @see PathTokenizer
-     */
-    public static String translatePath(String toProcess) {
-        if (toProcess == null || toProcess.length() == 0) {
-            return "";
-        }
-
-        StringBuffer path = new StringBuffer(toProcess.length() + 50);
-        PathTokenizer tokenizer = new PathTokenizer(toProcess);
-        while (tokenizer.hasMoreTokens()) {
-            String pathComponent = tokenizer.nextToken();
-            pathComponent = pathComponent.replace('/', File.separatorChar);
-            pathComponent = pathComponent.replace('\\', File.separatorChar);
-            if (path.length() != 0) {
-                path.append(File.pathSeparatorChar);
-            }
-            path.append(pathComponent);
-        }
-
-        return path.toString();
-    }
-
-    /**
-     * Convenience method to copy a file from a source to a destination.
-     * No filtering is performed.
-     *
-     * @param sourceFile Name of file to copy from.
-     *                   Must not be <code>null</code>.
-     * @param destFile Name of file to copy to.
-     *                 Must not be <code>null</code>.
-     *
-     * @exception IOException if the copying fails
-     *
-     * @deprecated
-     */
-    public void copyFile(String sourceFile, String destFile)
-          throws IOException {
-        fileUtils.copyFile(sourceFile, destFile);
-    }
-
-    /**
-     * Convenience method to copy a file from a source to a destination
-     * specifying if token filtering should be used.
-     *
-     * @param sourceFile Name of file to copy from.
-     *                   Must not be <code>null</code>.
-     * @param destFile Name of file to copy to.
-     *                 Must not be <code>null</code>.
-     * @param filtering Whether or not token filtering should be used during
-     *                  the copy.
-     *
-     * @exception IOException if the copying fails
-     *
-     * @deprecated
-     */
-    public void copyFile(String sourceFile, String destFile, boolean filtering)
-        throws IOException {
-        fileUtils.copyFile(sourceFile, destFile,
-            filtering ? globalFilters : null);
-    }
-
-    /**
-     * Convenience method to copy a file from a source to a
-     * destination specifying if token filtering should be used and if
-     * source files may overwrite newer destination files.
-     *
-     * @param sourceFile Name of file to copy from.
-     *                   Must not be <code>null</code>.
-     * @param destFile Name of file to copy to.
-     *                 Must not be <code>null</code>.
-     * @param filtering Whether or not token filtering should be used during
-     *                  the copy.
-     * @param overwrite Whether or not the destination file should be
-     *                  overwritten if it already exists.
-     *
-     * @exception IOException if the copying fails
-     *
-     * @deprecated
-     */
-    public void copyFile(String sourceFile, String destFile, boolean filtering,
-                         boolean overwrite) throws IOException {
-        fileUtils.copyFile(sourceFile, destFile,
-            filtering ? globalFilters : null, overwrite);
-    }
-
-    /**
-     * Convenience method to copy a file from a source to a
-     * destination specifying if token filtering should be used, if
-     * source files may overwrite newer destination files, and if the
-     * last modified time of the resulting file should be set to
-     * that of the source file.
-     *
-     * @param sourceFile Name of file to copy from.
-     *                   Must not be <code>null</code>.
-     * @param destFile Name of file to copy to.
-     *                 Must not be <code>null</code>.
-     * @param filtering Whether or not token filtering should be used during
-     *                  the copy.
-     * @param overwrite Whether or not the destination file should be
-     *                  overwritten if it already exists.
-     * @param preserveLastModified Whether or not the last modified time of
-     *                             the resulting file should be set to that
-     *                             of the source file.
-     *
-     * @exception IOException if the copying fails
-     *
-     * @deprecated
-     */
-    public void copyFile(String sourceFile, String destFile, boolean filtering,
-                         boolean overwrite, boolean preserveLastModified)
-        throws IOException {
-        fileUtils.copyFile(sourceFile, destFile,
-            filtering ? globalFilters : null, overwrite, preserveLastModified);
-    }
-
-    /**
-     * Convenience method to copy a file from a source to a destination.
-     * No filtering is performed.
-     *
-     * @param sourceFile File to copy from.
-     *                   Must not be <code>null</code>.
-     * @param destFile File to copy to.
-     *                 Must not be <code>null</code>.
-     *
-     * @exception IOException if the copying fails
-     *
-     * @deprecated
-     */
-    public void copyFile(File sourceFile, File destFile) throws IOException {
-        fileUtils.copyFile(sourceFile, destFile);
-    }
-
-    /**
-     * Convenience method to copy a file from a source to a destination
-     * specifying if token filtering should be used.
-     *
-     * @param sourceFile File to copy from.
-     *                   Must not be <code>null</code>.
-     * @param destFile File to copy to.
-     *                 Must not be <code>null</code>.
-     * @param filtering Whether or not token filtering should be used during
-     *                  the copy.
-     *
-     * @exception IOException if the copying fails
-     *
-     * @deprecated
-     */
-    public void copyFile(File sourceFile, File destFile, boolean filtering)
-        throws IOException {
-        fileUtils.copyFile(sourceFile, destFile,
-            filtering ? globalFilters : null);
-    }
-
-    /**
-     * Convenience method to copy a file from a source to a
-     * destination specifying if token filtering should be used and if
-     * source files may overwrite newer destination files.
-     *
-     * @param sourceFile File to copy from.
-     *                   Must not be <code>null</code>.
-     * @param destFile File to copy to.
-     *                 Must not be <code>null</code>.
-     * @param filtering Whether or not token filtering should be used during
-     *                  the copy.
-     * @param overwrite Whether or not the destination file should be
-     *                  overwritten if it already exists.
-     *
-     * @exception IOException if the file cannot be copied.
-     *
-     * @deprecated
-     */
-    public void copyFile(File sourceFile, File destFile, boolean filtering,
-                         boolean overwrite) throws IOException {
-        fileUtils.copyFile(sourceFile, destFile,
-            filtering ? globalFilters : null, overwrite);
-    }
-
-    /**
-     * Convenience method to copy a file from a source to a
-     * destination specifying if token filtering should be used, if
-     * source files may overwrite newer destination files, and if the
-     * last modified time of the resulting file should be set to
-     * that of the source file.
-     *
-     * @param sourceFile File to copy from.
-     *                   Must not be <code>null</code>.
-     * @param destFile File to copy to.
-     *                 Must not be <code>null</code>.
-     * @param filtering Whether or not token filtering should be used during
-     *                  the copy.
-     * @param overwrite Whether or not the destination file should be
-     *                  overwritten if it already exists.
-     * @param preserveLastModified Whether or not the last modified time of
-     *                             the resulting file should be set to that
-     *                             of the source file.
-     *
-     * @exception IOException if the file cannot be copied.
-     *
-     * @deprecated
-     */
-    public void copyFile(File sourceFile, File destFile, boolean filtering,
-                         boolean overwrite, boolean preserveLastModified)
-        throws IOException {
-        fileUtils.copyFile(sourceFile, destFile,
-            filtering ? globalFilters : null, overwrite, preserveLastModified);
-    }
-
-    /**
-     * Calls File.setLastModified(long time) on Java above 1.1, and logs
-     * a warning on Java 1.1.
-     *
-     * @param file The file to set the last modified time on.
-     *             Must not be <code>null</code>.
-     *
-     * @param time the required modification time.
-     *
-     * @deprecated
-     *
-     * @exception BuildException if the last modified time cannot be set
-     *                           despite running on a platform with a version
-     *                           above 1.1.
-     */
-    public void setFileLastModified(File file, long time)
-         throws BuildException {
-        if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_1)) {
-            log("Cannot change the modification time of " + file
-                + " in JDK 1.1", Project.MSG_WARN);
-            return;
-        }
-        fileUtils.setFileLastModified(file, time);
-        log("Setting modification time for " + file, MSG_VERBOSE);
-    }
-
-    /**
-     * Returns the boolean equivalent of a string, which is considered
-     * <code>true</code> if either <code>"on"</code>, <code>"true"</code>,
-     * or <code>"yes"</code> is found, ignoring case.
-     *
-     * @param s The string to convert to a boolean value.
-     *          Must not be <code>null</code>.
-     *
-     * @return <code>true</code> if the given string is <code>"on"</code>,
-     *         <code>"true"</code> or <code>"yes"</code>, or
-     *         <code>false</code> otherwise.
-     */
-    public static boolean toBoolean(String s) {
-        return (s.equalsIgnoreCase("on") ||
-                s.equalsIgnoreCase("true") ||
-                s.equalsIgnoreCase("yes"));
-    }
-
-    /**
-     * Topologically sorts a set of targets.
-     *
-     * @param root The name of the root target. The sort is created in such
-     *             a way that the sequence of Targets up to the root
-     *             target is the minimum possible such sequence.
-     *             Must not be <code>null</code>.
-     * @param targets A map of names to targets (String to Target).
-     *                Must not be <code>null</code>.
-     * @return a vector of strings with the names of the targets in
-     *         sorted order.
-     * @exception BuildException if there is a cyclic dependency among the
-     *                           targets, or if a named target does not exist.
-     */
-    public final Vector topoSort(String root, Hashtable targets)
-        throws BuildException {
-        Vector ret = new Vector();
-        Hashtable state = new Hashtable();
-        Stack visiting = new Stack();
-
-        // We first run a DFS based sort using the root as the starting node.
-        // This creates the minimum sequence of Targets to the root node.
-        // We then do a sort on any remaining unVISITED targets.
-        // This is unnecessary for doing our build, but it catches
-        // circular dependencies or missing Targets on the entire
-        // dependency tree, not just on the Targets that depend on the
-        // build Target.
-
-        tsort(root, targets, state, visiting, ret);
-        log("Build sequence for target `" + root + "' is " + ret, MSG_VERBOSE);
-        for (Enumeration en = targets.keys(); en.hasMoreElements();) {
-            String curTarget = (String) en.nextElement();
-            String st = (String) state.get(curTarget);
-            if (st == null) {
-                tsort(curTarget, targets, state, visiting, ret);
-            } else if (st == VISITING) {
-                throw new RuntimeException("Unexpected node in visiting state: "
-                    + curTarget);
-            }
-        }
-        log("Complete build sequence is " + ret, MSG_VERBOSE);
-        return ret;
-    }
-
-    /**
-     * Performs a single step in a recursive depth-first-search traversal of
-     * the target dependency tree.
-     * <p>
-     * The current target is first set to the "visiting" state, and pushed
-     * onto the "visiting" stack.
-     * <p>
-     * An exception is then thrown if any child of the current node is in the
-     * visiting state, as that implies a circular dependency. The exception
-     * contains details of the cycle, using elements of the "visiting" stack.
-     * <p>
-     * If any child has not already been "visited", this method is called
-     * recursively on it.
-     * <p>
-     * The current target is then added to the ordered list of targets. Note
-     * that this is performed after the children have been visited in order
-     * to get the correct order. The current target is set to the "visited"
-     * state.
-     * <p>
-     * By the time this method returns, the ordered list contains the sequence
-     * of targets up to and including the current target.
-     *
-     * @param root The current target to inspect.
-     *             Must not be <code>null</code>.
-     * @param targets A mapping from names to targets (String to Target).
-     *                Must not be <code>null</code>.
-     * @param state   A mapping from target names to states
-     *                (String to String).
-     *                The states in question are "VISITING" and "VISITED".
-     *                Must not be <code>null</code>.
-     * @param visiting A stack of targets which are currently being visited.
-     *                 Must not be <code>null</code>.
-     * @param ret     The list to add target names to. This will end up
-     *                containing the complete list of depenencies in
-     *                dependency order.
-     *                Must not be <code>null</code>.
-     *
-     * @exception BuildException if a non-existent target is specified or if
-     *                           a circular dependency is detected.
-     */
-    private final void tsort(String root, Hashtable targets,
-                             Hashtable state, Stack visiting,
-                             Vector ret)
-        throws BuildException {
-        state.put(root, VISITING);
-        visiting.push(root);
-
-        Target target = (Target) targets.get(root);
-
-        // Make sure we exist
-        if (target == null) {
-            StringBuffer sb = new StringBuffer("Target `");
-            sb.append(root);
-            sb.append("' does not exist in this project. ");
-            visiting.pop();
-            if (!visiting.empty()) {
-                String parent = (String) visiting.peek();
-                sb.append("It is used from target `");
-                sb.append(parent);
-                sb.append("'.");
-            }
-
-            throw new BuildException(new String(sb));
-        }
-
-        for (Enumeration en = target.getDependencies(); en.hasMoreElements();) {
-            String cur = (String) en.nextElement();
-            String m = (String) state.get(cur);
-            if (m == null) {
-                // Not been visited
-                tsort(cur, targets, state, visiting, ret);
-            } else if (m == VISITING) {
-                // Currently visiting this node, so have a cycle
-                throw makeCircularException(cur, visiting);
-            }
-        }
-
-        String p = (String) visiting.pop();
-        if (root != p) {
-            throw new RuntimeException("Unexpected internal error: expected to "
-                + "pop " + root + " but got " + p);
-        }
-        state.put(root, VISITED);
-        ret.addElement(target);
-    }
-
-    /**
-     * Builds an appropriate exception detailing a specified circular
-     * dependency.
-     *
-     * @param end The dependency to stop at. Must not be <code>null</code>.
-     * @param stk A stack of dependencies. Must not be <code>null</code>.
-     *
-     * @return a BuildException detailing the specified circular dependency.
-     */
-    private static BuildException makeCircularException(String end, Stack stk) {
-        StringBuffer sb = new StringBuffer("Circular dependency: ");
-        sb.append(end);
-        String c;
-        do {
-            c = (String) stk.pop();
-            sb.append(" <- ");
-            sb.append(c);
-        } while (!c.equals(end));
-        return new BuildException(new String(sb));
-    }
-
-    /**
-     * Adds a reference to the project.
-     *
-     * @param name The name of the reference. Must not be <code>null</code>.
-     * @param value The value of the reference. Must not be <code>null</code>.
-     */
-    public void addReference(String name, Object value) {
-        Object old = references.get(name);
-        if (old == value) {
-            // no warning, this is not changing anything
-            return;
-        }
-        if (old != null) {
-            log("Overriding previous definition of reference to " + name,
-                MSG_WARN);
-        }
-        log("Adding reference: " + name + " -> " + value, MSG_DEBUG);
-        references.put(name, value);
-    }
-
-    /**
-     * Returns a map of the references in the project (String to Object).
-     * The returned hashtable is "live" and so should not be modified.
-     *
-     * @return a map of the references in the project (String to Object).
-     */
-    public Hashtable getReferences() {
-        return references;
-    }
-
-    /**
-     * Looks up a reference by its key (ID).
-     *
-     * @param key The key for the desired reference.
-     *            Must not be <code>null</code>.
-     *
-     * @return the reference with the specified ID, or <code>null</code> if
-     *         there is no such reference in the project.
-     */
-    public Object getReference(String key) {
-        return references.get(key);
-    }
-
-    /**
-     * Returns a description of the type of the given element, with
-     * special handling for instances of tasks and data types.
-     * <p>
-     * This is useful for logging purposes.
-     *
-     * @param element The element to describe.
-     *                Must not be <code>null</code>.
-     *
-     * @return a description of the element type
-     *
-     * @since 1.95, Ant 1.5
-     */
-    public String getElementName(Object element) {
-        Hashtable elements = taskClassDefinitions;
-        Class elementClass = element.getClass();
-        String typeName = "task";
-        if (!elements.contains(elementClass)) {
-            elements = dataClassDefinitions;
-            typeName = "data type";
-            if (!elements.contains(elementClass)) {
-                elements = null;
-            }
-        }
-
-        if (elements != null) {
-            Enumeration e = elements.keys();
-            while (e.hasMoreElements()) {
-                String name = (String) e.nextElement();
-                Class clazz = (Class) elements.get(name);
-                if (elementClass.equals(clazz)) {
-                    return "The <" + name + "> " + typeName;
-                }
-            }
-        }
-
-        return "Class " + elementClass.getName();
-    }
-
-    /**
-     * Sends a "build started" event to the build listeners for this project.
-     */
-    protected void fireBuildStarted() {
-        BuildEvent event = new BuildEvent(this);
-        for (int i = 0; i < listeners.size(); i++) {
-            BuildListener listener = (BuildListener) listeners.elementAt(i);
-            listener.buildStarted(event);
-        }
-    }
-
-    /**
-     * Sends a "build finished" event to the build listeners for this project.
-     * @param exception an exception indicating a reason for a build
-     *                  failure. May be <code>null</code>, indicating
-     *                  a successful build.
-     */
-    protected void fireBuildFinished(Throwable exception) {
-        BuildEvent event = new BuildEvent(this);
-        event.setException(exception);
-        for (int i = 0; i < listeners.size(); i++) {
-            BuildListener listener = (BuildListener) listeners.elementAt(i);
-            listener.buildFinished(event);
-        }
-    }
-
-
-    /**
-     * Sends a "target started" event to the build listeners for this project.
-     *
-     * @param target The target which is starting to build.
-     *               Must not be <code>null</code>.
-     */
-    protected void fireTargetStarted(Target target) {
-        BuildEvent event = new BuildEvent(target);
-        for (int i = 0; i < listeners.size(); i++) {
-            BuildListener listener = (BuildListener) listeners.elementAt(i);
-            listener.targetStarted(event);
-        }
-    }
-
-    /**
-     * Sends a "target finished" event to the build listeners for this
-     * project.
-     *
-     * @param target    The target which has finished building.
-     *                  Must not be <code>null</code>.
-     * @param exception an exception indicating a reason for a build
-     *                  failure. May be <code>null</code>, indicating
-     *                  a successful build.
-     */
-    protected void fireTargetFinished(Target target, Throwable exception) {
-        BuildEvent event = new BuildEvent(target);
-        event.setException(exception);
-        for (int i = 0; i < listeners.size(); i++) {
-            BuildListener listener = (BuildListener) listeners.elementAt(i);
-            listener.targetFinished(event);
-        }
-    }
-
-    /**
-     * Sends a "task started" event to the build listeners for this project.
-     *
-     * @param task The target which is starting to execute.
-     *               Must not be <code>null</code>.
-     */
-    protected void fireTaskStarted(Task task) {
-        // register this as the current task on the current thread.
-        registerThreadTask(Thread.currentThread(), task);
-        BuildEvent event = new BuildEvent(task);
-        for (int i = 0; i < listeners.size(); i++) {
-            BuildListener listener = (BuildListener) listeners.elementAt(i);
-            listener.taskStarted(event);
-        }
-    }
-
-    /**
-     * Sends a "task finished" event to the build listeners for this
-     * project.
-     *
-     * @param task      The task which has finished executing.
-     *                  Must not be <code>null</code>.
-     * @param exception an exception indicating a reason for a build
-     *                  failure. May be <code>null</code>, indicating
-     *                  a successful build.
-     */
-    protected void fireTaskFinished(Task task, Throwable exception) {
-        registerThreadTask(Thread.currentThread(), null);
-        System.out.flush();
-        System.err.flush();
-        BuildEvent event = new BuildEvent(task);
-        event.setException(exception);
-        for (int i = 0; i < listeners.size(); i++) {
-            BuildListener listener = (BuildListener) listeners.elementAt(i);
-            listener.taskFinished(event);
-        }
-    }
-
-    /**
-     * Sends a "message logged" event to the build listeners for this project.
-     *
-     * @param event    The event to send. This should be built up with the
-     *                 appropriate task/target/project by the caller, so that
-     *                 this method can set the message and priority, then send
-     *                 the event. Must not be <code>null</code>.
-     * @param message  The message to send. Should not be <code>null</code>.
-     * @param priority The priority of the message.
-     */
-    private void fireMessageLoggedEvent(BuildEvent event, String message,
-                                        int priority) {
-        event.setMessage(message, priority);
-        for (int i = 0; i < listeners.size(); i++) {
-            BuildListener listener = (BuildListener) listeners.elementAt(i);
-            listener.messageLogged(event);
-        }
-    }
-
-    /**
-     * Sends a "message logged" project level event to the build listeners for
-     * this project.
-     *
-     * @param project  The project generating the event.
-     *                 Should not be <code>null</code>.
-     * @param message  The message to send. Should not be <code>null</code>.
-     * @param priority The priority of the message.
-     */
-    protected void fireMessageLogged(Project project, String message,
-                                     int priority) {
-        BuildEvent event = new BuildEvent(project);
-        fireMessageLoggedEvent(event, message, priority);
-    }
-
-    /**
-     * Sends a "message logged" target level event to the build listeners for
-     * this project.
-     *
-     * @param target   The target generating the event.
-     *                 Must not be <code>null</code>.
-     * @param message  The message to send. Should not be <code>null</code>.
-     * @param priority The priority of the message.
-     */
-    protected void fireMessageLogged(Target target, String message,
-                                     int priority) {
-        BuildEvent event = new BuildEvent(target);
-        fireMessageLoggedEvent(event, message, priority);
-    }
-
-    /**
-     * Sends a "message logged" task level event to the build listeners for
-     * this project.
-     *
-     * @param task     The task generating the event.
-     *                 Must not be <code>null</code>.
-     * @param message  The message to send. Should not be <code>null</code>.
-     * @param priority The priority of the message.
-     */
-    protected void fireMessageLogged(Task task, String message, int priority) {
-        BuildEvent event = new BuildEvent(task);
-        fireMessageLoggedEvent(event, message, priority);
-    }
-
-    /**
-     * Register a task as the current task for a thread.
-     * If the task is null, the thread's entry is removed.
-     *
-     * @param thread the thread on which the task is registered.
-     * @param task the task to be registered.
-     * @since 1.102, Ant 1.5
-     */
-    public void registerThreadTask(Thread thread, Task task) {
-        if (task != null) {
-            threadTasks.put(thread, task);
-        } else {
-            threadTasks.remove(thread);
-        }
-    }
-
-    /**
-     * Get the current task assopciated with a thread, if any
-     *
-     * @param thread the thread for which the task is required.
-     * @return the task which is currently registered for the given thread or
-     *         null if no task is registered.
-     */
-    public Task getThreadTask(Thread thread) {
-        return (Task) threadTasks.get(thread);
-    }
-
-
-}
diff --git a/src/main/org/apache/tools/ant/ProjectComponent.java b/src/main/org/apache/tools/ant/ProjectComponent.java
deleted file mode 100644
index 8736d71..0000000
--- a/src/main/org/apache/tools/ant/ProjectComponent.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001,2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant;
-
-/**
- * Base class for components of a project, including tasks and data types.
- * Provides common facilities.
- *
- * @author Conor MacNeill
- */
-
-public abstract class ProjectComponent {
-
-    /** Project object of this component. */
-    protected Project project = null;
-
-    /** Sole constructor. */
-    public ProjectComponent() {
-    }
-
-    /**
-     * Sets the project object of this component. This method is used by
-     * Project when a component is added to it so that the component has
-     * access to the functions of the project. It should not be used
-     * for any other purpose.
-     *
-     * @param project Project in whose scope this component belongs.
-     *                Must not be <code>null</code>.
-     */
-    public void setProject(Project project) {
-        this.project = project;
-    }
-
-    /**
-     * Returns the project to which this component belongs.
-     *
-     * @return the components's project.
-     */
-    public Project getProject() {
-        return project;
-    }
-    
-    /**
-     * Logs a message with the default (INFO) priority.
-     *
-     * @param msg The message to be logged. Should not be <code>null</code>.
-     */
-    public void log(String msg) {
-        log(msg, Project.MSG_INFO);
-    }
-
-    /**
-     * Logs a mesage with the given priority.
-     *
-     * @param msg The message to be logged. Should not be <code>null</code>.
-     * @param msgLevel the message priority at which this message is 
-     *                 to be logged.
-     */
-    public void log(String msg, int msgLevel) {
-        if (project != null) {
-            project.log(msg, msgLevel);
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/ProjectHelper.java b/src/main/org/apache/tools/ant/ProjectHelper.java
deleted file mode 100644
index 6fae219..0000000
--- a/src/main/org/apache/tools/ant/ProjectHelper.java
+++ /dev/null
@@ -1,531 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant;
-
-import java.io.File;
-import java.io.InputStream;
-import java.io.BufferedReader;
-import java.io.InputStreamReader;
-import java.util.Hashtable;
-import java.util.Vector;
-import java.util.Enumeration;
-import java.util.Locale;
-
-import org.xml.sax.AttributeList;
-import org.apache.tools.ant.helper.ProjectHelperImpl;
-import org.apache.tools.ant.util.LoaderUtils;
-
-/**
- * Configures a Project (complete with Targets and Tasks) based on
- * a XML build file. It'll rely on a plugin to do the actual processing
- * of the xml file.
- *
- * This class also provide static wrappers for common introspection.
- *
- * All helper plugins must provide backward compatiblity with the
- * original ant patterns, unless a different behavior is explicitely
- * specified. For example, if namespace is used on the <project> tag
- * the helper can expect the entire build file to be namespace-enabled.
- * Namespaces or helper-specific tags can provide meta-information to
- * the helper, allowing it to use new ( or different policies ).
- *
- * However, if no namespace is used the behavior should be exactly
- * identical with the default helper.
- *
- * @author duncan@x180.com
- */
-public class ProjectHelper {
-    /** 
-     * Name of JVM system property which provides the name of the 
-     * ProjectHelper class to use.
-     */
-    public static final String HELPER_PROPERTY =
-        "org.apache.tools.ant.ProjectHelper";
-    
-    /**
-     * The service identifier in jars which provide Project Helper 
-     * implementations.
-     */
-    public static final String SERVICE_ID =
-        "/META-INF/services/org.apache.tools.ant.ProjectHelper";
-
-    /**
-     * Configures the project with the contents of the specified XML file.
-     * 
-     * @param project The project to configure. Must not be <code>null</code>.
-     * @param buildFile An XML file giving the project's configuration.
-     *                  Must not be <code>null</code>.
-     * 
-     * @exception BuildException if the configuration is invalid or cannot 
-     *                           be read
-     */
-    public static void configureProject(Project project, File buildFile) 
-        throws BuildException {
-        ProjectHelper helper = ProjectHelper.getProjectHelper();
-        helper.parse(project, buildFile);
-    }
-
-    /** Default constructor */
-    public ProjectHelper() {
-    }
-
-    /**
-     * Parses the project file, configuring the project as it goes.
-     *
-     * @param project The project for the resulting ProjectHelper to configure. 
-     *                Must not be <code>null</code>.
-     * @param source The source for XML configuration. A helper must support
-     *               at least File, for backward compatibility. Helpers may
-     *               support URL, InputStream, etc or specialized types.
-     *
-     * @since Ant1.5
-     * @exception BuildException if the configuration is invalid or cannot 
-     *                           be read
-     */
-    public void parse(Project project, Object source) throws BuildException {
-        throw new BuildException("ProjectHelper.parse() must be implemented "
-            + "in a helper plugin " + this.getClass().getName());
-    }
-
-
-    /** 
-     * Discovers a project helper instance. Uses the same patterns
-     * as JAXP, commons-logging, etc: a system property, a JDK1.3
-     * service discovery, default.
-     * 
-     * @return a ProjectHelper, either a custom implementation
-     * if one is available and configured, or the default implementation
-     * otherwise.
-     * 
-     * @exception BuildException if a specified helper class cannot
-     * be loaded/instantiated.
-     */
-    public static ProjectHelper getProjectHelper() 
-        throws BuildException {
-        // Identify the class loader we will be using. Ant may be
-        // in a webapp or embeded in a different app
-        ProjectHelper helper = null;
-        
-        // First, try the system property
-        String helperClass = System.getProperty(HELPER_PROPERTY);
-        try {
-            if (helperClass != null) {
-                helper = newHelper(helperClass);
-            }
-        } catch (SecurityException e) {
-            System.out.println("Unable to load ProjectHelper class \"" 
-                + helperClass + " specified in system property " 
-                + HELPER_PROPERTY);
-        }
-
-        // A JDK1.3 'service' ( like in JAXP ). That will plug a helper
-        // automatically if in CLASSPATH, with the right META-INF/services.
-        if (helper == null) {
-            try {
-                ClassLoader classLoader = getContextClassLoader();
-                InputStream is = null;
-                if (classLoader != null) {
-                    is = classLoader.getResourceAsStream(SERVICE_ID);
-                }
-                if (is == null) {
-                    is = ClassLoader.getSystemResourceAsStream(SERVICE_ID);
-                }
-                
-                if (is != null) {
-                    // This code is needed by EBCDIC and other strange systems.
-                    // It's a fix for bugs reported in xerces
-                    InputStreamReader isr;
-                    try {
-                        isr = new InputStreamReader(is, "UTF-8");
-                    } catch (java.io.UnsupportedEncodingException e) {
-                        isr = new InputStreamReader(is);
-                    }
-                    BufferedReader rd = new BufferedReader(isr);
-                    
-                    String helperClassName = rd.readLine();
-                    rd.close();
-                    
-                    if (helperClassName != null &&
-                        !"".equals(helperClassName)) {
-                        
-                        helper = newHelper(helperClassName);
-                    }
-                }
-            } catch (Exception ex) {
-                System.out.println("Unable to load ProjectHelper " 
-                    + "from service \"" + SERVICE_ID); 
-            }
-        }
-
-        if (helper != null) {
-            return helper;
-        } else {
-            try {
-                // Default
-                return new ProjectHelperImpl();
-            } catch (Throwable e) {
-                String message = "Unable to load default ProjectHelper due to "
-                    + e.getClass().getName() + ": " + e.getMessage();
-                throw new BuildException(message, e);
-            }
-        }
-    }
-
-    /** 
-     * Creates a new helper instance from the name of the class. 
-     * It'll first try the thread class loader, then Class.forName() 
-     * will load from the same loader that loaded this class.
-     * 
-     * @param helperClass The name of the class to create an instance
-     *                    of. Must not be <code>null</code>.
-     * 
-     * @return a new instance of the specified class.
-     * 
-     * @exception BuildException if the class cannot be found or
-     * cannot be appropriate instantiated.
-     */
-    private static ProjectHelper newHelper(String helperClass)
-        throws BuildException {
-        ClassLoader classLoader = getContextClassLoader();
-        try {
-            Class clazz = null;
-            if (classLoader != null) {
-                try {
-                    clazz = classLoader.loadClass(helperClass);
-                } catch (ClassNotFoundException ex) {
-                    // try next method
-                }
-            }
-            if (clazz == null) {
-                clazz = Class.forName(helperClass);
-            }
-            return ((ProjectHelper) clazz.newInstance());
-        } catch (Exception e) {
-            throw new BuildException(e);
-        }
-    }
-
-    /**
-     * JDK1.1 compatible access to the context class loader.
-     * Cut&paste from JAXP.
-     * 
-     * @return the current context class loader, or <code>null</code>
-     * if the context class loader is unavailable.
-     */
-    public static ClassLoader getContextClassLoader() {
-        if (!LoaderUtils.isContextLoaderAvailable()) {
-            return null;
-        }
-        
-        return LoaderUtils.getContextClassLoader();
-    }
-
-    // -------------------- Static utils, used by most helpers ---------------- 
-
-    /**
-     * Configures an object using an introspection handler.
-     * 
-     * @param target The target object to be configured.
-     *               Must not be <code>null</code>.
-     * @param attrs  A list of attributes to configure within the target.
-     *               Must not be <code>null</code>.
-     * @param project The project containing the target. 
-     *                Must not be <code>null</code>.
-     * 
-     * @exception BuildException if any of the attributes can't be handled by
-     *                           the target
-     */
-    public static void configure(Object target, AttributeList attrs, 
-                                 Project project) throws BuildException {
-        if (target instanceof TaskAdapter) {
-            target = ((TaskAdapter) target).getProxy();
-        }
-
-        IntrospectionHelper ih = 
-            IntrospectionHelper.getHelper(target.getClass());
-
-        project.addBuildListener(ih);
-
-        for (int i = 0; i < attrs.getLength(); i++) {
-            // reflect these into the target
-            String value = replaceProperties(project, attrs.getValue(i), 
-                                           project.getProperties());
-            try {
-                ih.setAttribute(project, target, 
-                                attrs.getName(i).toLowerCase(Locale.US), value);
-
-            } catch (BuildException be) {
-                // id attribute must be set externally
-                if (!attrs.getName(i).equals("id")) {
-                    throw be;
-                }
-            }
-        }
-    }
-
-    /**
-     * Adds the content of #PCDATA sections to an element.
-     * 
-     * @param project The project containing the target. 
-     *                Must not be <code>null</code>.
-     * @param target  The target object to be configured.
-     *                Must not be <code>null</code>.
-     * @param buf A character array of the text within the element.
-     *            Will not be <code>null</code>.
-     * @param start The start element in the array.
-     * @param count The number of characters to read from the array.
-     * 
-     * @exception BuildException if the target object doesn't accept text
-     */
-    public static void addText(Project project, Object target, char[] buf, 
-        int start, int count) throws BuildException {
-        addText(project, target, new String(buf, start, count));
-    }
-
-    /**
-     * Adds the content of #PCDATA sections to an element.
-     * 
-     * @param project The project containing the target. 
-     *                Must not be <code>null</code>.
-     * @param target  The target object to be configured.
-     *                Must not be <code>null</code>.
-     * @param text    Text to add to the target.
-     *                May be <code>null</code>, in which case this
-     *                method call is a no-op.
-     * 
-     * @exception BuildException if the target object doesn't accept text
-     */
-    public static void addText(Project project, Object target, String text)
-        throws BuildException {
-
-        if (text == null) {
-            return;
-        }
-
-        if (target instanceof TaskAdapter) {
-            target = ((TaskAdapter) target).getProxy();
-        }
-
-        IntrospectionHelper.getHelper(target.getClass()).addText(project, 
-            target, text);
-    }
-
-    /**
-     * Stores a configured child element within its parent object.
-     * 
-     * @param project Project containing the objects.
-     *                May be <code>null</code>.
-     * @param parent  Parent object to add child to.
-     *                Must not be <code>null</code>.
-     * @param child   Child object to store in parent.
-     *                Should not be <code>null</code>.
-     * @param tag     Name of element which generated the child.
-     *                May be <code>null</code>, in which case
-     *                the child is not stored.
-     */
-    public static void storeChild(Project project, Object parent, 
-         Object child, String tag) {
-        IntrospectionHelper ih 
-            = IntrospectionHelper.getHelper(parent.getClass());
-        ih.storeElement(project, parent, child, tag);
-    }
-
-    /**
-     * Replaces <code>${xxx}</code> style constructions in the given value with 
-     * the string value of the corresponding properties.
-     *
-     * @param project The project containing the properties to replace.
-     *                Must not be <code>null</code>.
-     * 
-     * @param value The string to be scanned for property references.
-     *              May be <code>null</code>.
-     *
-     * @exception BuildException if the string contains an opening 
-     *                           <code>${</code> without a closing 
-     *                           <code>}</code>
-     * @return the original string with the properties replaced, or
-     *         <code>null</code> if the original string is <code>null</code>.
-     * 
-     * @since 1.5
-     */
-     public static String replaceProperties(Project project, String value)
-            throws BuildException {
-         return project.replaceProperties(value);
-     }
-
-    /**
-     * Replaces <code>${xxx}</code> style constructions in the given value 
-     * with the string value of the corresponding data types.
-     *
-     * @param project The container project. This is used solely for
-     *                logging purposes. Must not be <code>null</code>.
-     * @param value The string to be scanned for property references.
-     *              May be <code>null</code>, in which case this
-     *              method returns immediately with no effect.
-     * @param keys  Mapping (String to String) of property names to their 
-     *              values. Must not be <code>null</code>.
-     * 
-     * @exception BuildException if the string contains an opening 
-     *                           <code>${</code> without a closing 
-     *                           <code>}</code>
-     * @return the original string with the properties replaced, or
-     *         <code>null</code> if the original string is <code>null</code>.
-     */
-     public static String replaceProperties(Project project, String value, 
-         Hashtable keys) throws BuildException {
-        if (value == null) {
-            return null;
-        }
-
-        Vector fragments = new Vector();
-        Vector propertyRefs = new Vector();
-        parsePropertyString(value, fragments, propertyRefs);
-
-        StringBuffer sb = new StringBuffer();
-        Enumeration i = fragments.elements();
-        Enumeration j = propertyRefs.elements();
-        while (i.hasMoreElements()) {
-            String fragment = (String) i.nextElement();
-            if (fragment == null) {
-                String propertyName = (String) j.nextElement();
-                if (!keys.containsKey(propertyName)) {
-                    project.log("Property ${" + propertyName 
-                        + "} has not been set", Project.MSG_VERBOSE);
-                }
-                fragment = (keys.containsKey(propertyName)) 
-                    ? (String) keys.get(propertyName) 
-                    : "${" + propertyName + "}"; 
-            }
-            sb.append(fragment);
-        }                        
-        
-        return sb.toString();
-    }
-
-    /**
-     * Parses a string containing <code>${xxx}</code> style property
-     * references into two lists. The first list is a collection
-     * of text fragments, while the other is a set of string property names.
-     * <code>null</code> entries in the first list indicate a property 
-     * reference from the second list.
-     * 
-     * @param value     Text to parse. Must not be <code>null</code>.
-     * @param fragments List to add text fragments to. 
-     *                  Must not be <code>null</code>.
-     * @param propertyRefs List to add property names to.
-     *                     Must not be <code>null</code>.
-     * 
-     * @exception BuildException if the string contains an opening 
-     *                           <code>${</code> without a closing 
-     *                           <code>}</code>
-     */
-    public static void parsePropertyString(String value, Vector fragments, 
-                                           Vector propertyRefs)
-        throws BuildException {
-        int prev = 0;
-        int pos;
-        //search for the next instance of $ from the 'prev' position
-        while ((pos = value.indexOf("$", prev)) >= 0) {
-
-            //if there was any text before this, add it as a fragment
-            //TODO, this check could be modified to go if pos>prev;
-            //seems like this current version could stick empty strings
-            //into the list
-            if (pos > 0) {
-                fragments.addElement(value.substring(prev, pos));
-            }
-            //if we are at the end of the string, we tack on a $
-            //then move past it
-            if (pos == (value.length() - 1)) {
-                fragments.addElement("$");
-                prev = pos + 1;
-            } else if (value.charAt(pos + 1) != '{') {
-                //peek ahead to see if the next char is a property or not
-                //not a property: insert the char as a literal
-                /*
-                fragments.addElement(value.substring(pos + 1, pos + 2));
-                prev = pos + 2;
-                */
-                if (value.charAt(pos + 1) == '$') {
-                    //backwards compatibility two $ map to one mode
-                    fragments.addElement("$");
-                    prev = pos + 2;
-                } else {
-                    //new behaviour: $X maps to $X for all values of X!='$'
-                    fragments.addElement(value.substring(pos, pos + 2));
-                    prev = pos + 2;
-                }
-                
-            } else {
-                //property found, extract its name or bail on a typo
-                int endName = value.indexOf('}', pos);
-                if (endName < 0) {
-                    throw new BuildException("Syntax error in property: "
-                                                 + value);
-                }
-                String propertyName = value.substring(pos + 2, endName);
-                fragments.addElement(null);
-                propertyRefs.addElement(propertyName);
-                prev = endName + 1;
-            }
-        }
-        //no more $ signs found
-        //if there is any tail to the file, append it
-        if (prev < value.length()) {
-            fragments.addElement(value.substring(prev));
-        }
-    }
-//end class
-}
diff --git a/src/main/org/apache/tools/ant/RuntimeConfigurable.java b/src/main/org/apache/tools/ant/RuntimeConfigurable.java
deleted file mode 100644
index 5895716..0000000
--- a/src/main/org/apache/tools/ant/RuntimeConfigurable.java
+++ /dev/null
@@ -1,229 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant;
-
-import java.util.Enumeration;
-import java.util.Locale;
-import java.util.Vector;
-import org.xml.sax.AttributeList;
-import org.xml.sax.helpers.AttributeListImpl;
-
-/**
- * Wrapper class that holds the attributes of an element, its children, and 
- * any text within it. It then takes care of configuring that element at 
- * runtime.
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- */
-public class RuntimeConfigurable {
-
-    /** Name of the element to configure. */
-    private String elementTag = null;
-    /** List of child element wrappers. */
-    private Vector children = new Vector();
-    /** The element to configure. */
-    private Object wrappedObject = null;
-    /** XML attributes for the element. */
-    private AttributeList attributes;
-    /** Text appearing within the element. */
-    private StringBuffer characters = new StringBuffer();
-
-    /**
-     * Sole constructor creating a wrapper for the specified object.
-     * 
-     * @param proxy The element to configure. Must not be <code>null</code>.
-     * @param elementTag The tag name generating this element.
-     *                   Should not be <code>null</code>.
-     */
-    public RuntimeConfigurable(Object proxy, String elementTag) {
-        wrappedObject = proxy;
-        this.elementTag = elementTag;
-    }
-
-    /**
-     * Sets the element to configure. This is used when the real type of 
-     * an element isn't known at the time of wrapper creation.
-     * 
-     * @param proxy The element to configure. Must not be <code>null</code>.
-     */
-    void setProxy(Object proxy) {
-        wrappedObject = proxy;
-    }
-
-    /**
-     * Sets the attributes for the wrapped element.
-     * 
-     * @param attributes List of attributes defined in the XML for this
-     *                   element. May be <code>null</code>.
-     */
-    public void setAttributes(AttributeList attributes) {
-        this.attributes = new AttributeListImpl(attributes);
-    }
-
-    /**
-     * Returns the list of attributes for the wrapped element.
-     * 
-     * @return An AttributeList representing the attributes defined in the
-     *         XML for this element. May be <code>null</code>.
-     */
-    public AttributeList getAttributes() {
-        return attributes;
-    }
-
-    /**
-     * Adds a child element to the wrapped element.
-     * 
-     * @param child The child element wrapper to add to this one.
-     *              Must not be <code>null</code>.
-     */
-    public void addChild(RuntimeConfigurable child) {
-        children.addElement(child);
-    }
-
-    /**
-     * Returns the child wrapper at the specified position within the list.
-     * 
-     * @param index The index of the child to return.
-     * 
-     * @return The child wrapper at position <code>index</code> within the
-     *         list.
-     */
-    RuntimeConfigurable getChild(int index) {
-        return (RuntimeConfigurable) children.elementAt(index);
-    }
-
-    /**
-     * Adds characters from #PCDATA areas to the wrapped element.
-     * 
-     * @param data Text to add to the wrapped element. 
-     *        Should not be <code>null</code>.
-     */
-    public void addText(String data) {
-        characters.append(data);
-    }
-
-    /**
-     * Adds characters from #PCDATA areas to the wrapped element.
-     * 
-     * @param buf A character array of the text within the element.
-     *            Must not be <code>null</code>.
-     * @param start The start element in the array.
-     * @param count The number of characters to read from the array.
-     * 
-     */
-    public void addText(char[] buf, int start, int count) {
-        addText(new String(buf, start, count));
-    }
-
-    /**
-     * Returns the tag name of the wrapped element.
-     * 
-     * @return The tag name of the wrapped element. This is unlikely
-     *         to be <code>null</code>, but may be.
-     */
-    public String getElementTag() {
-        return elementTag;
-    }
-
-    /**
-     * Configures the wrapped element and all its children.
-     * The attributes and text for the wrapped element are configured,
-     * and then each child is configured and added. Each time the
-     * wrapper is configured, the attributes and text for it are
-     * reset.
-     * 
-     * If the element has an <code>id</code> attribute, a reference
-     * is added to the project as well.
-     * 
-     * @param p The project containing the wrapped element. 
-     *          Must not be <code>null</code>.
-     * 
-     * @exception BuildException if the configuration fails, for instance due
-     *            to invalid attributes or children, or text being added to
-     *            an element which doesn't accept it.
-     */
-    public void maybeConfigure(Project p) throws BuildException {
-        String id = null;
-
-        if (attributes != null) {
-            ProjectHelper.configure(wrappedObject, attributes, p);
-            id = attributes.getValue("id");
-            attributes = null;
-        }
-        if (characters.length() != 0) {
-            ProjectHelper.addText(p, wrappedObject, characters.toString());
-            characters.setLength(0);
-        }
-        Enumeration enum = children.elements();
-        while (enum.hasMoreElements()) {
-            RuntimeConfigurable child 
-                = (RuntimeConfigurable) enum.nextElement();
-            if (child.wrappedObject instanceof Task) {
-                Task childTask = (Task) child.wrappedObject;
-                childTask.setRuntimeConfigurableWrapper(child);
-                childTask.maybeConfigure();
-            } else {
-                child.maybeConfigure(p);
-            }
-            ProjectHelper.storeChild(p, wrappedObject, child.wrappedObject, 
-                child.getElementTag().toLowerCase(Locale.US));
-        }
-
-        if (id != null) {
-            p.addReference(id, wrappedObject);
-        }
-    }
-
-}
diff --git a/src/main/org/apache/tools/ant/Target.java b/src/main/org/apache/tools/ant/Target.java
deleted file mode 100644
index 7a64935..0000000
--- a/src/main/org/apache/tools/ant/Target.java
+++ /dev/null
@@ -1,406 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant;
-
-import java.util.Enumeration;
-import java.util.Vector;
-import java.util.StringTokenizer;
-
-/**
- * Class to implement a target object with required parameters.
- *
- * @author James Davidson <a href="mailto:duncan@x180.com">duncan@x180.com</a>
- */
-public class Target implements TaskContainer {
-
-    /** Name of this target. */
-    private String name;
-    /** The "if" condition to test on execution. */
-    private String ifCondition = "";
-    /** The "unless" condition to test on execution. */
-    private String unlessCondition = "";
-    /** List of targets this target is dependent on. */
-    private Vector dependencies = new Vector(2);
-    /** Children of this target (tasks and data types). */
-    private Vector children = new Vector(5);
-    /** Project this target belongs to. */
-    private Project project;
-    /** Description of this target, if any. */
-    private String description = null;
-
-    /** Sole constructor. */
-    public Target() {
-    }
-    
-    /** 
-     * Sets the project this target belongs to. 
-     * 
-     * @param project The project this target belongs to. 
-     *                Must not be <code>null</code>.
-     */
-    public void setProject(Project project) {
-        this.project = project;
-    }
-
-    /**
-     * Returns the project this target belongs to.
-     * 
-     * @return The project this target belongs to, or <code>null</code> if 
-     *         the project has not been set yet.
-     */
-    public Project getProject() {
-        return project;
-    }
-
-    /**
-     * Sets the list of targets this target is dependent on.
-     * The targets themselves are not resolved at this time.
-     * 
-     * @param depS A comma-separated list of targets this target
-     *             depends on. Must not be <code>null</code>.
-     */
-    public void setDepends(String depS) {
-        if (depS.length() > 0) {
-            StringTokenizer tok =
-                new StringTokenizer(depS, ",", true);
-            while (tok.hasMoreTokens()) {
-                String token = tok.nextToken().trim();
-
-                // Make sure the dependency is not empty string
-                if (token.equals("") || token.equals(",")) {
-                    throw new BuildException("Syntax Error: Depend "
-                        + "attribute for target \"" + getName() 
-                        + "\" has an empty string for dependency.");
-                }
-
-                addDependency(token);
-                
-                // Make sure that depends attribute does not
-                // end in a ,
-                if (tok.hasMoreTokens()) {
-                    token = tok.nextToken();
-                    if (!tok.hasMoreTokens() || !token.equals(",")) {
-                        throw new BuildException("Syntax Error: Depend " 
-                            + "attribute for target \"" + getName() 
-                            + "\" ends with a , character");
-                    }
-                }
-            }
-        }
-    }
-
-    /**
-     * Sets the name of this target.
-     * 
-     * @param name The name of this target. Should not be <code>null</code>.
-     */
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    /**
-     * Returns the name of this target.
-     * 
-     * @return the name of this target, or <code>null</code> if the
-     *         name has not been set yet.
-     */
-    public String getName() {
-        return name;
-    }
-
-    /**
-     * Adds a task to this target.
-     * 
-     * @param task The task to be added. Must not be <code>null</code>.
-     */
-    public void addTask(Task task) {
-        children.addElement(task);
-    }
-
-    /**
-     * Adds the wrapper for a data type element to this target.
-     * 
-     * @param r The wrapper for the data type element to be added. 
-     *          Must not be <code>null</code>.
-     */
-    public void addDataType(RuntimeConfigurable r) {
-        children.addElement(r);
-    }
-
-    /** 
-     * Returns the current set of tasks to be executed by this target.
-     * 
-     * @return an array of the tasks currently within this target
-     */
-    public Task[] getTasks() {
-        Vector tasks = new Vector(children.size());
-        Enumeration enum = children.elements();
-        while (enum.hasMoreElements()) {
-            Object o = enum.nextElement();
-            if (o instanceof Task) {
-                tasks.addElement(o);
-            }
-        }
-        
-        Task[] retval = new Task[tasks.size()];
-        tasks.copyInto(retval);
-        return retval;
-    }
-
-    /**
-     * Adds a dependency to this target.
-     * 
-     * @param dependency The name of a target this target is dependent on.
-     *                   Must not be <code>null</code>.
-     */
-    public void addDependency(String dependency) {
-        dependencies.addElement(dependency);
-    }
-
-    /**
-     * Returns an enumeration of the dependencies of this target.
-     * 
-     * @return an enumeration of the dependencies of this target
-     */
-    public Enumeration getDependencies() {
-        return dependencies.elements();
-    }
-
-    /**
-     * Sets the "if" condition to test on execution. This is the
-     * name of a property to test for existence - if the property
-     * is not set, the task will not execute. The property goes
-     * through property substitution once before testing, so if
-     * property <code>foo</code> has value <code>bar</code>, setting
-     * the "if" condition to <code>${foo}_x</code> will mean that the
-     * task will only execute if property <code>bar_x</code> is set.
-     * 
-     * @param property The property condition to test on execution.
-     *                 May be <code>null</code>, in which case
-     *                 no "if" test is performed.
-     */
-    public void setIf(String property) {
-        this.ifCondition = (property == null) ? "" : property;
-    }
- 
-    /**
-     * Sets the "unless" condition to test on execution. This is the
-     * name of a property to test for existence - if the property
-     * is set, the task will not execute. The property goes
-     * through property substitution once before testing, so if
-     * property <code>foo</code> has value <code>bar</code>, setting
-     * the "unless" condition to <code>${foo}_x</code> will mean that the
-     * task will only execute if property <code>bar_x</code> isn't set.
-     * 
-     * @param property The property condition to test on execution.
-     *                 May be <code>null</code>, in which case
-     *                 no "unless" test is performed.
-     */
-    public void setUnless(String property) {
-        this.unlessCondition = (property == null) ? "" : property;
-    }
-
-    /**
-     * Sets the description of this target.
-     * 
-     * @param description The description for this target. 
-     *                    May be <code>null</code>, indicating that no 
-     *                    description is available.
-     */
-    public void setDescription(String description) {
-        this.description = description;
-    }
-
-    /**
-     * Returns the description of this target.
-     * 
-     * @return the description of this target, or <code>null</code> if no
-     *         description is available.
-     */
-    public String getDescription() {
-        return description;
-    }
-
-    /**
-     * Returns the name of this target.
-     * 
-     * @return the name of this target, or <code>null</code> if the
-     *         name has not been set yet.
-     */
-    public String toString() {
-        return name;
-    }
-
-    /**
-     * Executes the target if the "if" and "unless" conditions are
-     * satisfied. Dependency checking should be done before calling this
-     * method, as it does no checking of its own. If either the "if"
-     * or "unless" test prevents this target from being executed, a verbose
-     * message is logged giving the reason. It is recommended that clients
-     * of this class call performTasks rather than this method so that 
-     * appropriate build events are fired.
-     * 
-     * @exception BuildException if any of the tasks fail or if a data type
-     *                           configuration fails.
-     * 
-     * @see #performTasks()
-     * @see #setIf(String)
-     * @see #setUnless(String)
-     */
-    public void execute() throws BuildException {
-        if (testIfCondition() && testUnlessCondition()) {
-            Enumeration enum = children.elements();
-            while (enum.hasMoreElements()) {
-                Object o = enum.nextElement();
-                if (o instanceof Task) {
-                    Task task = (Task) o;
-                    task.perform();
-                } else {
-                    RuntimeConfigurable r = (RuntimeConfigurable) o;
-                    r.maybeConfigure(project);
-                }
-            }
-        } else if (!testIfCondition()) {
-            project.log(this, "Skipped because property '" + this.ifCondition 
-                + "' not set.", Project.MSG_VERBOSE);
-        } else {
-            project.log(this, "Skipped because property '" 
-                + this.unlessCondition + "' set.", Project.MSG_VERBOSE);
-        }
-    }
-
-    /**
-     * Performs the tasks within this target (if the conditions are met),
-     * firing target started/target finished messages around a call to 
-     * execute.
-     * 
-     * @see #execute()
-     */
-    public final void performTasks() {
-        try {
-            project.fireTargetStarted(this);
-            execute();
-            project.fireTargetFinished(this, null);
-        } catch (RuntimeException exc) {
-            project.fireTargetFinished(this, exc);
-            throw exc;
-        }
-    }
-    
-    /**
-     * Replaces all occurrences of the given task in the list
-     * of children with the replacement data type wrapper.
-     * 
-     * @param el The task to replace.
-     *           Must not be <code>null</code>.
-     * @param o  The data type wrapper to replace <code>el</code> with.
-     */
-    void replaceChild(Task el, RuntimeConfigurable o) {
-        int index;
-        while ((index = children.indexOf(el)) >= 0) {
-            children.setElementAt(o, index);
-        }
-    }
-
-    /**
-     * Replaces all occurrences of the given task in the list
-     * of children with the replacement task.
-     * 
-     * @param el The task to replace.
-     *           Must not be <code>null</code>.
-     * @param o  The task to replace <code>el</code> with.
-     */
-    void replaceChild(Task el, Task o) {
-        int index;
-        while ((index = children.indexOf(el)) >= 0) {
-            children.setElementAt(o, index);
-        }
-    }
-
-    /**
-     * Tests whether or not the "if" condition is satisfied.
-     * 
-     * @return whether or not the "if" condition is satisfied. If no
-     *         condition (or an empty condition) has been set,
-     *         <code>true</code> is returned.
-     *
-     * @see #setIf(String)
-     */
-    private boolean testIfCondition() {
-        if ("".equals(ifCondition)) {
-            return true;
-        }
-        
-        String test = project.replaceProperties(ifCondition);
-        return project.getProperty(test) != null;
-    }
-
-    /**
-     * Tests whether or not the "unless" condition is satisfied.
-     * 
-     * @return whether or not the "unless" condition is satisfied. If no
-     *         condition (or an empty condition) has been set,
-     *         <code>true</code> is returned.
-     *
-     * @see #setUnless(String)
-     */
-    private boolean testUnlessCondition() {
-        if ("".equals(unlessCondition)) {
-            return true;
-        }
-        String test = project.replaceProperties(unlessCondition);
-        return project.getProperty(test) == null;
-    }
-}
diff --git a/src/main/org/apache/tools/ant/Task.java b/src/main/org/apache/tools/ant/Task.java
deleted file mode 100644
index 3bb8024..0000000
--- a/src/main/org/apache/tools/ant/Task.java
+++ /dev/null
@@ -1,367 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant;
-
-/**
- * Base class for all tasks.
- *
- * Use Project.createTask to create a new task instance rather than
- * using this class directly for construction.
- * 
- * @see Project#createTask
- */
-public abstract class Task extends ProjectComponent {
-    /** Target this task belongs to, if any. */
-    protected Target target = null;
-    /** Description of this task, if any. */
-    protected String description = null;
-    /** Location within the build file of this task definition. */
-    protected Location location = Location.UNKNOWN_LOCATION;
-    /** 
-     * Name of this task to be used for logging purposes. 
-     * This defaults to the same as the type, but may be
-     * overridden by the user. For instance, the name "java"
-     * isn't terribly descriptive for a task used within
-     * another task - the outer task code can probably
-     * provide a better one.
-     */
-    protected String taskName = null;
-    /** Type of this task. */
-    protected String taskType = null;
-    /** Wrapper for this object, used to configure it at runtime. */
-    protected RuntimeConfigurable wrapper;
-    /** 
-     * Whether or not this task is invalid. A task becomes invalid
-     * if a conflicting class is specified as the implementation for
-     * its type.
-     */
-    private boolean invalid = false;
-
-    /** Sole constructor. */
-    public Task() {
-    }
-
-    /**
-     * Sets the target container of this task.
-     *
-     * @param target Target in whose scope this task belongs.
-     *               May be <code>null</code>, indicating a top-level task.
-     */
-    public void setOwningTarget(Target target) {
-        this.target = target;
-    }
-
-    /**
-     * Returns the container target of this task.
-     *
-     * @return The target containing this task, or <code>null</code> if
-     *         this task is a top-level task.
-     */
-    public Target getOwningTarget() {
-        return target;
-    }
-    
-    /**
-     * Sets the name to use in logging messages.
-     *
-     * @param name The name to use in logging messages.
-     *             Should not be <code>null</code>.
-     */
-    public void setTaskName(String name) {
-        this.taskName = name;
-    }
-
-    /**
-     * Returns the name to use in logging messages.
-     *
-     * @return the name to use in logging messages. 
-     */
-    public String getTaskName() {
-        return taskName;
-    }
-
-    /**
-     * Sets the name with which the task has been invoked.
-     *
-     * @param type The name the task has been invoked as.
-     *             Should not be <code>null</code>.
-     */
-    void setTaskType(String type) {
-        this.taskType = type;
-    }
-
-    /** 
-     * Sets a description of the current action. This may be used for logging
-     * purposes.
-     * 
-     * @param desc Description of the current action. 
-     *             May be <code>null</code>, indicating that no description is
-     *             available.
-     *             
-     */
-    public void setDescription(String desc) {
-        description = desc;
-    }
-
-    /**
-     * Returns the description of the current action.
-     * 
-     * @return the description of the current action, or <code>null</code> if
-     *         no description is available.
-     */
-    public String getDescription() {
-        return description;
-    }
-
-    /**
-     * Called by the project to let the task initialize properly.
-     * The default implementation is a no-op.
-     *
-     * @exception BuildException if someting goes wrong with the build
-     */
-    public void init() throws BuildException {}
-
-    /**
-     * Called by the project to let the task do its work. This method may be 
-     * called more than once, if the task is invoked more than once. 
-     * For example, 
-     * if target1 and target2 both depend on target3, then running 
-     * "ant target1 target2" will run all tasks in target3 twice.
-     *
-     * @exception BuildException if something goes wrong with the build
-     */
-    public void execute() throws BuildException {}
-
-    /**
-     * Returns the file/location where this task was defined.
-     * 
-     * @return the file/location where this task was defined. 
-     *         Should not return <code>null</code>. Location.UNKNOWN_LOCATION
-     *         is used for unknown locations.
-     * 
-     * @see Location#UNKNOWN_LOCATION
-     */
-    public Location getLocation() {
-        return location;
-    }
-
-    /**
-     * Sets the file/location where this task was defined.
-     * 
-     * @param location The file/location where this task was defined.
-     *                 Should not be <code>null</code> - use
-     *                 Location.UNKNOWN_LOCATION if the location isn't known.
-     * 
-     * @see Location#UNKNOWN_LOCATION
-     */
-    public void setLocation(Location location) {
-        this.location = location;
-    }
-
-    /**
-     * Returns the wrapper used for runtime configuration.
-     * 
-     * @return the wrapper used for runtime configuration. This
-     *         method will generate a new wrapper (and cache it)
-     *         if one isn't set already.
-     */
-    public RuntimeConfigurable getRuntimeConfigurableWrapper() {
-        if (wrapper == null) {
-            wrapper = new RuntimeConfigurable(this, getTaskName());
-        }
-        return wrapper;
-    }
-
-    /**
-     * Sets the wrapper to be used for runtime configuration.
-     * 
-     * @param wrapper The wrapper to be used for runtime configuration.
-     *                May be <code>null</code>, in which case the next call
-     *                to getRuntimeConfigurableWrapper will generate a new
-     *                wrapper.
-     */
-    protected void setRuntimeConfigurableWrapper(RuntimeConfigurable wrapper) {
-        this.wrapper = wrapper;
-    }
-
-    // XXX: (Jon Skeet) The comment "if it hasn't been done already" may
-    // not be strictly true. wrapper.maybeConfigure() won't configure the same
-    // attributes/text more than once, but it may well add the children again,
-    // unless I've missed something.
-    /**
-     * Configures this task - if it hasn't been done already.
-     * If the task has been invalidated, it is replaced with an 
-     * UnknownElement task which uses the new definition in the project.
-     *
-     * @exception BuildException if the task cannot be configured.
-     */
-    public void maybeConfigure() throws BuildException {
-        if (!invalid) {
-            if (wrapper != null) {
-                wrapper.maybeConfigure(project);
-            }
-        } else {
-            getReplacement();
-        }
-    }
-
-    /** 
-     * Handles a line of output by logging it with the INFO priority.
-     * 
-     * @param line The line of output to log. Should not be <code>null</code>.
-     */
-    protected void handleOutput(String line) {
-        log(line, Project.MSG_INFO);
-    }
-    
-    /** 
-     * Handles an error line by logging it with the INFO priority.
-     * 
-     * @param line The error line to log. Should not be <code>null</code>.
-     */
-    protected void handleErrorOutput(String line) {
-        log(line, Project.MSG_ERR);
-    }
-        
-    /**   
-     * Logs a message with the default (INFO) priority.   
-     *   
-     * @param msg The message to be logged. Should not be <code>null</code>.
-     */   
-    public void log(String msg) {   
-        log(msg, Project.MSG_INFO);   
-    }   
-    
-    /**   
-     * Logs a mesage with the given priority. This delegates
-     * the actual logging to the project.
-     *   
-     * @param msg The message to be logged. Should not be <code>null</code>.
-     * @param msgLevel The message priority at which this message is to 
-     *                 be logged.
-     */   
-    public void log(String msg, int msgLevel) {   
-        project.log(this, msg, msgLevel);   
-    }   
-    
-    /**
-     * Performs this task if it's still valid, or gets a replacement
-     * version and performs that otherwise.
-     * 
-     * Performing a task consists of firing a task started event,
-     * configuring the task, executing it, and then firing task finished
-     * event. If a runtime exception is thrown, the task finished event
-     * is still fired, but with the exception as the cause.
-     */
-    public final void perform() {
-        if (!invalid) {
-            try {
-                project.fireTaskStarted(this);
-                maybeConfigure();
-                execute();
-                project.fireTaskFinished(this, null);
-            } catch (RuntimeException exc) {
-                if (exc instanceof BuildException) {
-                    BuildException be = (BuildException) exc;
-                    if (be.getLocation() == Location.UNKNOWN_LOCATION) {
-                        be.setLocation(getLocation());
-                    }
-                }
-                project.fireTaskFinished(this, exc);
-                throw exc;
-            }
-        } else {
-            UnknownElement ue = getReplacement();
-            Task task = ue.getTask();
-            task.perform();
-        }
-    }
-
-    /**
-     * Marks this task as invalid. Any further use of this task
-     * will go through a replacement with the updated definition.
-     */
-    final void markInvalid() {
-        invalid = true;
-    }
-
-    /**
-     * Replacement element used if this task is invalidated.
-     */
-    private UnknownElement replacement;
-
-    /**
-     * Creates an UnknownElement that can be used to replace this task.
-     * Once this has been created once, it is cached and returned by
-     * future calls.
-     *
-     * @return the UnknownElement instance for the new definition of this task.
-     */
-    private UnknownElement getReplacement() {
-        if (replacement == null) {
-            replacement = new UnknownElement(taskType);
-            replacement.setProject(project);
-            replacement.setTaskType(taskType);
-            replacement.setTaskName(taskName);
-            replacement.setLocation(location);
-            replacement.setOwningTarget(target);
-            replacement.setRuntimeConfigurableWrapper(wrapper);
-            wrapper.setProxy(replacement);
-            target.replaceChild(this, replacement);
-            replacement.maybeConfigure();
-        }
-        return replacement;
-    }
-}
diff --git a/src/main/org/apache/tools/ant/TaskAdapter.java b/src/main/org/apache/tools/ant/TaskAdapter.java
deleted file mode 100644
index 712e2d6..0000000
--- a/src/main/org/apache/tools/ant/TaskAdapter.java
+++ /dev/null
@@ -1,182 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights 
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant;
-
-import java.lang.reflect.Method;
-
-/**
- * Uses introspection to "adapt" an arbitrary Bean which doesn't
- * itself extend Task, but still contains an execute method and optionally 
- * a setProject method.
- *
- * @author costin@dnt.ro
- */
-public class TaskAdapter extends Task {
-
-    /** Object to act as a proxy for. */
-    private Object proxy;
-    
-    /**
-     * Checks whether or not a class is suitable to be adapted by TaskAdapter.
-     *
-     * This only checks conditions which are additionally required for 
-     * tasks adapted by TaskAdapter. Thus, this method should be called by
-     * Project.checkTaskClass.
-     *
-     * Throws a BuildException and logs as Project.MSG_ERR for
-     * conditions that will cause the task execution to fail.
-     * Logs other suspicious conditions with Project.MSG_WARN.
-     * 
-     * @param taskClass Class to test for suitability. 
-     *                  Must not be <code>null</code>.
-     * @param project   Project to log warnings/errors to. 
-     *                  Must not be <code>null</code>.
-     * 
-     * @see Project#checkTaskClass(Class)
-     */
-    public static void checkTaskClass(final Class taskClass, 
-                                      final Project project) {
-        // don't have to check for interface, since then
-        // taskClass would be abstract too.
-        try {
-            final Method executeM = taskClass.getMethod("execute", null);
-            // don't have to check for public, since
-            // getMethod finds public method only.
-            // don't have to check for abstract, since then
-            // taskClass would be abstract too.
-            if (!Void.TYPE.equals(executeM.getReturnType())) {
-                final String message = "return type of execute() should be " 
-                    + "void but was \"" + executeM.getReturnType() + "\" in " 
-                    + taskClass;
-                project.log(message, Project.MSG_WARN);
-            }
-        } catch (NoSuchMethodException e) {
-            final String message = "No public execute() in " + taskClass;
-            project.log(message, Project.MSG_ERR);
-            throw new BuildException(message);
-        }
-    }
-    
-    /**
-     * Executes the proxied task.
-     * 
-     * @exception BuildException if the project could not be set
-     * or the method could not be executed.
-     */
-    public void execute() throws BuildException {
-        Method setProjectM = null;
-        try {
-            Class c = proxy.getClass();
-            setProjectM = 
-                c.getMethod("setProject", new Class[] {Project.class});
-            if (setProjectM != null) {
-                setProjectM.invoke(proxy, new Object[] {project});
-            }
-        } catch (NoSuchMethodException e) {
-            // ignore this if the class being used as a task does not have
-            // a set project method.
-        } catch (Exception ex) {
-            log("Error setting project in " + proxy.getClass(), 
-                Project.MSG_ERR);
-            throw new BuildException(ex);
-        }
-
-
-        Method executeM = null;
-        try {
-            Class c = proxy.getClass();
-            executeM = c.getMethod("execute", new Class[0]);
-            if (executeM == null) {
-                log("No public execute() in " + proxy.getClass(), 
-                    Project.MSG_ERR);
-                throw new BuildException("No public execute() in " 
-                    + proxy.getClass());
-            }
-            executeM.invoke(proxy, null);
-            return; 
-        } catch (java.lang.reflect.InvocationTargetException ie) {
-            log("Error in " + proxy.getClass(), Project.MSG_ERR);
-            Throwable t = ie.getTargetException();
-            if (t instanceof BuildException) {
-                throw ((BuildException) t);
-            } else {
-                throw new BuildException(t);
-            }
-        } catch (Exception ex) {
-            log("Error in " + proxy.getClass(), Project.MSG_ERR);
-            throw new BuildException(ex);
-        }
-
-    }
-    
-    /**
-     * Sets the target object to proxy for.
-     * 
-     * @param o The target object. Must not be <code>null</code>.
-     */
-    public void setProxy(Object o) {
-        this.proxy = o;
-    }
-
-    /**
-     * Returns the target object being proxied.
-     * 
-     * @return the target proxy object
-     */
-    public Object getProxy() {
-        return this.proxy ;
-    }
-
-}
diff --git a/src/main/org/apache/tools/ant/TaskContainer.java b/src/main/org/apache/tools/ant/TaskContainer.java
deleted file mode 100644
index 9a791f8..0000000
--- a/src/main/org/apache/tools/ant/TaskContainer.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant;
-
-/**
- * Interface for objects which can contain tasks.
- * <p>
- * It is recommended that implementations call perform rather than
- * execute for the tasks they contain, as this method ensures that the
- * appropriate BuildEvents will be generated.
- *
- * @see Task#perform
- * @see Task#execute
- * @see BuildEvent
- * 
- * @author Conor MacNeill
- */
-public interface TaskContainer {
-    /**
-     * Adds a task to this task container
-     *
-     * @param task The task to be added to this container.
-     *             Must not be <code>null</code>.
-     */
-    void addTask(Task task);
-}
-
diff --git a/src/main/org/apache/tools/ant/UnknownElement.java b/src/main/org/apache/tools/ant/UnknownElement.java
deleted file mode 100644
index 53535c1..0000000
--- a/src/main/org/apache/tools/ant/UnknownElement.java
+++ /dev/null
@@ -1,359 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant;
-
-import java.util.Vector;
-
-/**
- * Wrapper class that holds all the information necessary to create a task
- * or data type that did not exist when Ant started, or one which
- * has had its definition updated to use a different implementation class.
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- */
-public class UnknownElement extends Task {
-
-    /**
-     * Holds the name of the task/type or nested child element of a
-     * task/type that hasn't been defined at parser time or has
-     * been redefined since original creation.
-     */
-    private String elementName;
-
-    /**
-     * The real object after it has been loaded.
-     */
-    private Object realThing;
-
-    /**
-     * List of child elements (UnknownElements).
-     */
-    private Vector children = new Vector();
-
-    /**
-     * Creates an UnknownElement for the given element name.
-     *
-     * @param elementName The name of the unknown element.
-     *                    Must not be <code>null</code>.
-     */
-    public UnknownElement (String elementName) {
-        this.elementName = elementName;
-    }
-
-    /**
-     * Returns the name of the XML element which generated this unknown
-     * element.
-     * 
-     * @return the name of the XML element which generated this unknown
-     *         element.
-     */
-    public String getTag() {
-        return elementName;
-    }
-
-    /**
-     * Creates the real object instance and child elements, then configures
-     * the attributes and text of the real object. This unknown element 
-     * is then replaced with the real object in the containing target's list
-     * of children.
-     *
-     * @exception BuildException if the configuration fails
-     */
-    public void maybeConfigure() throws BuildException {
-        realThing = makeObject(this, wrapper);
-
-        wrapper.setProxy(realThing);
-        if (realThing instanceof Task) {
-            ((Task) realThing).setRuntimeConfigurableWrapper(wrapper);
-        }
-
-        handleChildren(realThing, wrapper);
-
-        wrapper.maybeConfigure(project);
-        if (realThing instanceof Task) {
-            target.replaceChild(this, (Task) realThing);
-        } else {
-            target.replaceChild(this, wrapper);
-        }
-    }
-
-    /**
-     * Handles output sent to System.out by this task or its real task.
-     *
-     * @param line The line of output to log. Should not be <code>null</code>.
-     */
-    protected void handleOutput(String line) {
-        if (realThing instanceof Task) {
-            ((Task) realThing).handleOutput(line);
-        } else {
-            super.handleOutput(line);
-        }
-    }
-    
-    /**
-     * Handles error output sent to System.err by this task or its real task.
-     *
-     * @param line The error line to log. Should not be <code>null</code>.
-     */
-    protected void handleErrorOutput(String line) {
-        if (realThing instanceof Task) {
-            ((Task) realThing).handleErrorOutput(line);
-        } else {
-            super.handleErrorOutput(line);
-        }
-    }
-    
-    /**
-     * Executes the real object if it's a task. If it's not a task
-     * (e.g. a data type) then this method does nothing.
-     */
-    public void execute() {
-        if (realThing == null) {
-            // plain impossible to get here, maybeConfigure should
-            // have thrown an exception.
-            throw new BuildException("Could not create task of type: "
-                                     + elementName, location);
-        }
-
-        if (realThing instanceof Task) {
-            ((Task) realThing).execute();
-        }
-    }
-
-    /**
-     * Adds a child element to this element.
-     *
-     * @param child The child element to add. Must not be <code>null</code>.
-     */
-    public void addChild(UnknownElement child) {
-        children.addElement(child);
-    }
-
-    /**
-     * Creates child elements, creates children of the children
-     * (recursively), and sets attributes of the child elements.
-     *
-     * @param parent The configured object for the parent. 
-     *               Must not be <code>null</code>.
-     * 
-     * @param parentWrapper The wrapper containing child wrappers
-     *                      to be configured. Must not be <code>null</code>
-     *                      if there are any children.
-     * 
-     * @exception BuildException if the children cannot be configured.
-     */
-    protected void handleChildren(Object parent,
-                                  RuntimeConfigurable parentWrapper)
-        throws BuildException {
-
-        if (parent instanceof TaskAdapter) {
-            parent = ((TaskAdapter) parent).getProxy();
-        }
-
-        Class parentClass = parent.getClass();
-        IntrospectionHelper ih = IntrospectionHelper.getHelper(parentClass);
-
-        for (int i = 0;  i < children.size(); i++) {
-            RuntimeConfigurable childWrapper = parentWrapper.getChild(i);
-            UnknownElement child = (UnknownElement) children.elementAt(i);
-            Object realChild = null;
-
-            if (parent instanceof TaskContainer) {
-                realChild = makeTask(child, childWrapper, false);
-                ((TaskContainer) parent).addTask((Task) realChild);
-            } else {
-                realChild = ih.createElement(project, parent, child.getTag());
-            }
-
-            childWrapper.setProxy(realChild);
-            if (parent instanceof TaskContainer) {
-                ((Task) realChild).setRuntimeConfigurableWrapper(childWrapper);
-            }
-
-            child.handleChildren(realChild, childWrapper);
-
-            if (parent instanceof TaskContainer) {
-                ((Task) realChild).maybeConfigure();
-            }
-        }
-    }
-
-    /**
-     * Creates a named task or data type. If the real object is a task, 
-     * it is configured up to the init() stage.
-     * 
-     * @param ue The unknown element to create the real object for.
-     *           Must not be <code>null</code>.
-     * @param w  Ignored in this implementation.
-     * 
-     * @return the task or data type represented by the given unknown element.
-     */
-    protected Object makeObject(UnknownElement ue, RuntimeConfigurable w) {
-        Object o = makeTask(ue, w, true);
-        if (o == null) {
-            o = project.createDataType(ue.getTag());
-        }
-        if (o == null) {
-            throw getNotFoundException("task or type", ue.getTag());
-        }
-        return o;
-    }
-
-    /**
-     * Creates a named task and configures it up to the init() stage.
-     * 
-     * @param ue The UnknownElement to create the real task for.
-     *           Must not be <code>null</code>.
-     * @param w  Ignored.
-     * @param onTopLevel Whether or not this is definitely trying to create
-     *                   a task. If this is <code>true</code> and the
-     *                   task name is not recognised, a BuildException
-     *                   is thrown.
-     * 
-     * @return the task specified by the given unknown element, or 
-     *         <code>null</code> if the task name is not recognised and
-     *         onTopLevel is <code>false</code>.
-     */
-    protected Task makeTask(UnknownElement ue, RuntimeConfigurable w,
-                            boolean onTopLevel) {
-        Task task = project.createTask(ue.getTag());
-        if (task == null && !onTopLevel) {
-            throw getNotFoundException("task", ue.getTag());
-        }
-
-        if (task != null) {
-            task.setLocation(getLocation());
-            // UnknownElement always has an associated target
-            task.setOwningTarget(target);
-            task.init();
-        }
-        return task;
-    }
-
-    /**
-     * Returns a very verbose exception for when a task/data type cannot
-     * be found.
-     * 
-     * @param what The kind of thing being created. For example, when
-     *             a task name could not be found, this would be
-     *             <code>"task"</code>. Should not be <code>null</code>.
-     * @param elementName The name of the element which could not be found.
-     *                    Should not be <code>null</code>.
-     * 
-     * @return a detailed description of what might have caused the problem.
-     */
-    protected BuildException getNotFoundException(String what,
-                                                  String elementName) {
-        String lSep = System.getProperty("line.separator");
-        String msg = "Could not create " + what + " of type: " + elementName
-            + "." + lSep + lSep
-            + "Ant could not find the task or a class this "
-            + "task relies upon." + lSep + lSep
-            + "This is common and has a number of causes; the usual " + lSep
-            + "solutions are to read the manual pages then download and" + lSep
-            + "install needed JAR files, or fix the build file: " + lSep
-            + " - You have misspelt '" + elementName + "'." + lSep
-            + "   Fix: check your spelling." + lSep
-            + " - The task needs an external JAR file to execute" + lSep
-            + "   and this is not found at the right place in the classpath." + lSep
-            + "   Fix: check the documentation for dependencies." + lSep
-            + "   Fix: declare the task." + lSep
-            + " - The task is an Ant optional task and optional.jar is absent" + lSep
-            + "   Fix: look for optional.jar in ANT_HOME/lib, download if needed" + lSep
-            + " - The task was not built into optional.jar as dependent"  + lSep
-            + "   libraries were not found at build time." + lSep
-            + "   Fix: look in the JAR to verify, then rebuild with the needed" + lSep
-            + "   libraries, or download a release version from apache.org" + lSep
-            + " - The build file was written for a later version of Ant" + lSep
-            + "   Fix: upgrade to at least the latest release version of Ant" + lSep
-            + " - The task is not an Ant core or optional task " + lSep
-            + "   and needs to be declared using <taskdef>." + lSep
-            + lSep 
-            + "Remember that for JAR files to be visible to Ant tasks implemented" + lSep
-            + "in ANT_HOME/lib, the files must be in the same directory or on the" + lSep
-            + "classpath" + lSep
-            + lSep
-            + "Please neither file bug reports on this problem, nor email the" + lSep
-            + "Ant mailing lists, until all of these causes have been explored," + lSep
-            + "as this is not an Ant bug.";
-
-
-        return new BuildException(msg, location);
-    }
-
-    /**
-     * Returns the name to use in logging messages.
-     *
-     * @return the name to use in logging messages.
-     */
-    public String getTaskName() {
-        return realThing == null || !(realThing instanceof Task) ?
-            super.getTaskName() : ((Task) realThing).getTaskName();
-    }
-
-    /**
-     * Returns the task instance after it has been created and if it is a task.
-     *
-     * @return a task instance or <code>null</code> if the real object is not 
-     *         a task.
-     */
-    public Task getTask() {
-        if (realThing instanceof Task) {
-            return (Task) realThing;
-        }
-        return null;
-    }
-
-}// UnknownElement
diff --git a/src/main/org/apache/tools/ant/XmlLogger.java b/src/main/org/apache/tools/ant/XmlLogger.java
deleted file mode 100644
index cf0cccb..0000000
--- a/src/main/org/apache/tools/ant/XmlLogger.java
+++ /dev/null
@@ -1,465 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant;
-
-import org.apache.tools.ant.util.DOMElementWriter;
-import org.apache.tools.ant.util.StringUtils;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.Text;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.OutputStreamWriter;
-import java.io.PrintStream;
-import java.io.Writer;
-import java.util.Hashtable;
-import java.util.Stack;
-
-/**
- * Generates a file in the current directory with
- * an XML description of what happened during a build.
- * The default filename is "log.xml", but this can be overridden
- * with the property <code>XmlLogger.file</code>.
- *
- * This implementation assumes in its sanity checking that only one
- * thread runs a particular target/task at a time. This is enforced
- * by the way that parallel builds and antcalls are done - and
- * indeed all but the simplest of tasks could run into problems
- * if executed in parallel.
- *
- * @see Project#addBuildListener(BuildListener)
- */
-public class XmlLogger implements BuildLogger {
-
-    private int msgOutputLevel = Project.MSG_DEBUG;
-    private PrintStream outStream;
-
-    /** DocumentBuilder to use when creating the document to start with. */
-    private static final DocumentBuilder builder = getDocumentBuilder();
-
-    /**
-     * Returns a default DocumentBuilder instance or throws an
-     * ExceptionInInitializerError if it can't be created.
-     *
-     * @return a default DocumentBuilder instance.
-     */
-    private static DocumentBuilder getDocumentBuilder() {
-        try {
-            return DocumentBuilderFactory.newInstance().newDocumentBuilder();
-        } catch (Exception exc) {
-            throw new ExceptionInInitializerError(exc);
-        }
-    }
-
-    /** XML element name for a build. */
-    private static final String BUILD_TAG = "build";
-    /** XML element name for a target. */
-    private static final String TARGET_TAG = "target";
-    /** XML element name for a task. */
-    private static final String TASK_TAG = "task";
-    /** XML element name for a message. */
-    private static final String MESSAGE_TAG = "message";
-    /** XML attribute name for a name. */
-    private static final String NAME_ATTR = "name";
-    /** XML attribute name for a time. */
-    private static final String TIME_ATTR = "time";
-    /** XML attribute name for a message priority. */
-    private static final String PRIORITY_ATTR = "priority";
-    /** XML attribute name for a file location. */
-    private static final String LOCATION_ATTR = "location";
-    /** XML attribute name for an error description. */
-    private static final String ERROR_ATTR = "error";
-    /** XML element name for a stack trace. */
-    private static final String STACKTRACE_TAG = "stacktrace";
-
-    /** The complete log document for this build. */
-    private Document doc = builder.newDocument();
-    /** Mapping for when tasks started (Task to TimedElement). */
-    private Hashtable tasks = new Hashtable();
-    /** Mapping for when targets started (Task to TimedElement). */
-    private Hashtable targets = new Hashtable();
-    /**
-     * Mapping of threads to stacks of elements
-     * (Thread to Stack of TimedElement).
-     */
-    private Hashtable threadStacks = new Hashtable();
-    /**
-     * When the build started.
-     */
-    private TimedElement buildElement = null;
-
-    /** Utility class representing the time an element started. */
-    private static class TimedElement {
-        /**
-         * Start time in milliseconds
-         * (as returned by <code>System.currentTimeMillis()</code>).
-         */
-        private long startTime;
-        /** Element created at the start time. */
-        private Element element;
-    }
-
-    /**
-     *  Constructs a new BuildListener that logs build events to an XML file.
-     */
-    public XmlLogger() {
-    }
-
-    /**
-     * Fired when the build starts, this builds the top-level element for the
-     * document and remembers the time of the start of the build.
-     *
-     * @param event Ignored.
-     */
-    public void buildStarted(BuildEvent event) {
-        buildElement = new TimedElement();
-        buildElement.startTime = System.currentTimeMillis();
-        buildElement.element = doc.createElement(BUILD_TAG);
-    }
-
-    /**
-     * Fired when the build finishes, this adds the time taken and any
-     * error stacktrace to the build element and writes the document to disk.
-     *
-     * @param event An event with any relevant extra information.
-     *              Will not be <code>null</code>.
-     */
-    public void buildFinished(BuildEvent event) {
-        long totalTime = System.currentTimeMillis() - buildElement.startTime;
-        buildElement.element.setAttribute(TIME_ATTR,
-                DefaultLogger.formatTime(totalTime));
-
-        if (event.getException() != null) {
-            buildElement.element.setAttribute(ERROR_ATTR,
-                    event.getException().toString());
-            // print the stacktrace in the build file it is always useful...
-            // better have too much info than not enough.
-            Throwable t = event.getException();
-            Text errText = doc.createCDATASection(StringUtils.getStackTrace(t));
-            Element stacktrace = doc.createElement(STACKTRACE_TAG);
-            stacktrace.appendChild(errText);
-            buildElement.element.appendChild(stacktrace);
-        }
-
-        String outFilename = event.getProject().getProperty("XmlLogger.file");
-        if (outFilename == null) {
-            outFilename = "log.xml";
-        }
-        String xslUri
-                = event.getProject().getProperty("ant.XmlLogger.stylesheet.uri");
-        if (xslUri == null) {
-            xslUri = "log.xsl";
-        }
-        Writer out = null;
-        try {
-            // specify output in UTF8 otherwise accented characters will blow
-            // up everything
-            OutputStream stream = outStream;
-            if (stream == null) {
-                stream = new FileOutputStream(outFilename);
-            }
-            out = new OutputStreamWriter(stream, "UTF8");
-            out.write("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n");
-            if (xslUri.length() > 0) {
-                out.write("<?xml-stylesheet type=\"text/xsl\" href=\""
-                        + xslUri + "\"?>\n\n");
-            }
-            (new DOMElementWriter()).write(buildElement.element, out, 0, "\t");
-            out.flush();
-        } catch (IOException exc) {
-            throw new BuildException("Unable to write log file", exc);
-        } finally {
-            if (out != null) {
-                try {
-                    out.close();
-                } catch (IOException e) {
-                }
-            }
-        }
-        buildElement = null;
-    }
-
-    /**
-     * Returns the stack of timed elements for the current thread.
-     * @return the stack of timed elements for the current thread
-     */
-    private Stack getStack() {
-        Stack threadStack = (Stack) threadStacks.get(Thread.currentThread());
-        if (threadStack == null) {
-            threadStack = new Stack();
-            threadStacks.put(Thread.currentThread(), threadStack);
-        }
-        return threadStack;
-    }
-
-    /**
-     * Fired when a target starts building, this pushes a timed element
-     * for the target onto the stack of elements for the current thread,
-     * rememebering the current time and the name of the target.
-     *
-     * @param event An event with any relevant extra information.
-     *              Will not be <code>null</code>.
-     */
-    public void targetStarted(BuildEvent event) {
-        Target target = event.getTarget();
-        TimedElement targetElement = new TimedElement();
-        targetElement.startTime = System.currentTimeMillis();
-        targetElement.element = doc.createElement(TARGET_TAG);
-        targetElement.element.setAttribute(NAME_ATTR, target.getName());
-        targets.put(target, targetElement);
-        getStack().push(targetElement);
-    }
-
-    /**
-     * Fired when a target finishes building, this adds the time taken
-     * and any error stacktrace to the appropriate target element in the log.
-     *
-     * @param event An event with any relevant extra information.
-     *              Will not be <code>null</code>.
-     */
-    public void targetFinished(BuildEvent event) {
-        Target target = event.getTarget();
-        TimedElement targetElement = (TimedElement) targets.get(target);
-        if (targetElement != null) {
-            long totalTime
-                    = System.currentTimeMillis() - targetElement.startTime;
-            targetElement.element.setAttribute(TIME_ATTR,
-                    DefaultLogger.formatTime(totalTime));
-
-            TimedElement parentElement = null;
-            Stack threadStack = getStack();
-            if (!threadStack.empty()) {
-                TimedElement poppedStack = (TimedElement) threadStack.pop();
-                if (poppedStack != targetElement) {
-                    throw new RuntimeException("Mismatch - popped element = "
-                            + poppedStack.element + " finished target element = "
-                            + targetElement.element);
-                }
-                if (!threadStack.empty()) {
-                    parentElement = (TimedElement) threadStack.peek();
-                }
-            }
-            if (parentElement == null) {
-                buildElement.element.appendChild(targetElement.element);
-            } else {
-                parentElement.element.appendChild(targetElement.element);
-            }
-        }
-    }
-
-    /**
-     * Fired when a task starts building, this pushes a timed element
-     * for the task onto the stack of elements for the current thread,
-     * rememebering the current time and the name of the task.
-     *
-     * @param event An event with any relevant extra information.
-     *              Will not be <code>null</code>.
-     */
-    public void taskStarted(BuildEvent event) {
-        Task task = event.getTask();
-        TimedElement taskElement = new TimedElement();
-        taskElement.startTime = System.currentTimeMillis();
-        taskElement.element = doc.createElement(TASK_TAG);
-
-        String name = event.getTask().getTaskName();
-        taskElement.element.setAttribute(NAME_ATTR, name);
-        taskElement.element.setAttribute(LOCATION_ATTR,
-                event.getTask().getLocation().toString());
-        tasks.put(task, taskElement);
-        getStack().push(taskElement);
-    }
-
-    /**
-     * Fired when a task finishes building, this adds the time taken
-     * and any error stacktrace to the appropriate task element in the log.
-     *
-     * @param event An event with any relevant extra information.
-     *              Will not be <code>null</code>.
-     */
-    public void taskFinished(BuildEvent event) {
-        Task task = event.getTask();
-        TimedElement taskElement = (TimedElement) tasks.get(task);
-        if (taskElement != null) {
-            long totalTime = System.currentTimeMillis() - taskElement.startTime;
-            taskElement.element.setAttribute(TIME_ATTR,
-                    DefaultLogger.formatTime(totalTime));
-            Target target = task.getOwningTarget();
-            TimedElement targetElement = null;
-            if (target != null) {
-                targetElement = (TimedElement) targets.get(target);
-            }
-            if (targetElement == null) {
-                buildElement.element.appendChild(taskElement.element);
-            } else {
-                targetElement.element.appendChild(taskElement.element);
-            }
-            Stack threadStack = getStack();
-            if (!threadStack.empty()) {
-                TimedElement poppedStack = (TimedElement) threadStack.pop();
-                if (poppedStack != taskElement) {
-                    throw new RuntimeException("Mismatch - popped element = "
-                            + poppedStack.element + " finished task element = "
-                            + taskElement.element);
-                }
-            }
-        }
-    }
-
-    /**
-     * Fired when a message is logged, this adds a message element to the
-     * most appropriate parent element (task, target or build) and records
-     * the priority and text of the message.
-     *
-     * @param event An event with any relevant extra information.
-     *              Will not be <code>null</code>.
-     */
-    public void messageLogged(BuildEvent event) {
-        int priority = event.getPriority();
-        if (priority > msgOutputLevel) {
-            return;
-        }
-        Element messageElement = doc.createElement(MESSAGE_TAG);
-
-        String name = "debug";
-        switch (event.getPriority()) {
-            case Project.MSG_ERR:
-                name = "error";
-                break;
-            case Project.MSG_WARN:
-                name = "warn";
-                break;
-            case Project.MSG_INFO:
-                name = "info";
-                break;
-            default:
-                name = "debug";
-                break;
-        }
-        messageElement.setAttribute(PRIORITY_ATTR, name);
-
-        Text messageText = doc.createCDATASection(event.getMessage());
-        messageElement.appendChild(messageText);
-
-        TimedElement parentElement = null;
-
-        Task task = event.getTask();
-
-        Target target = event.getTarget();
-        if (task != null) {
-            parentElement = (TimedElement) tasks.get(task);
-        }
-        if (parentElement == null && target != null) {
-            parentElement = (TimedElement) targets.get(target);
-        }
-
-        if (parentElement == null) {
-            Stack threadStack
-                    = (Stack) threadStacks.get(Thread.currentThread());
-            if (threadStack != null) {
-                if (!threadStack.empty()) {
-                    parentElement = (TimedElement) threadStack.peek();
-                }
-            }
-        }
-
-        if (parentElement != null) {
-            parentElement.element.appendChild(messageElement);
-        } else {
-            buildElement.element.appendChild(messageElement);
-        }
-    }
-
-    // -------------------------------------------------- BuildLogger interface
-
-    /**
-     * Set the logging level when using this as a Logger
-     *
-     * @param level the logging level - 
-     *        see {@link org.apache.tools.ant.Project#MSG_ERR Project} 
-     *        class for level definitions
-     */
-    public void setMessageOutputLevel(int level) {
-        msgOutputLevel = level;
-    }
-
-    /**
-     * Set the output stream to which logging output is sent when operating 
-     * as a logger.
-     *
-     * @param output the output PrintStream.
-     */
-    public void setOutputPrintStream(PrintStream output) {
-        this.outStream = new PrintStream(output, true);
-    }
-
-    /**
-     * Ignore emacs mode, as it has no meaning in XML format
-     */
-    public void setEmacsMode(boolean emacsMode) {
-    }
-
-    /**
-     * Ignore error print stream. All output will be written to
-     * either the XML log file or the PrintStream provided to
-     * setOutputPrintStream
-     */
-    public void setErrorPrintStream(PrintStream err) {
-    }
-
-}
diff --git a/src/main/org/apache/tools/ant/defaultManifest.mf b/src/main/org/apache/tools/ant/defaultManifest.mf
deleted file mode 100644
index 1dc733d..0000000
--- a/src/main/org/apache/tools/ant/defaultManifest.mf
+++ /dev/null
@@ -1,3 +0,0 @@
-Manifest-Version: 1.0
-Created-By: Apache Ant @VERSION@
-
diff --git a/src/main/org/apache/tools/ant/filters/BaseFilterReader.java b/src/main/org/apache/tools/ant/filters/BaseFilterReader.java
deleted file mode 100644
index a5438b2..0000000
--- a/src/main/org/apache/tools/ant/filters/BaseFilterReader.java
+++ /dev/null
@@ -1,237 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.filters;
-
-import java.io.FilterReader;
-import java.io.IOException;
-import java.io.Reader;
-import java.io.StringReader;
-
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.util.FileUtils;
-
-/**
- * Base class for core filter readers.
- *
- * @author <a href="mailto:umagesh@apache.org">Magesh Umasankar</a>
- */
-public abstract class BaseFilterReader
-    extends FilterReader {
-    /** Have the parameters passed been interpreted? */
-    private boolean initialized = false;
-
-    /** The Ant project this filter is part of. */
-    private Project project = null;
-
-    /**
-     * Constructor used by Ant's introspection mechanism.
-     * The original filter reader is only used for chaining
-     * purposes, never for filtering purposes (and indeed
-     * it would be useless for filtering purposes, as it has
-     * no real data to filter). ChainedReaderHelper uses
-     * this placeholder instance to create a chain of real filters.
-     */
-    public BaseFilterReader() {
-        super(new StringReader(new String()));
-        try {
-            close();
-        } catch (IOException  ioe) {
-            // Ignore
-        }
-    }
-
-    /**
-     * Creates a new filtered reader.
-     *
-     * @param in A Reader object providing the underlying stream.
-     *           Must not be <code>null</code>.
-     *           
-     */
-    public BaseFilterReader(final Reader in) {
-        super(in);
-    }
-
-    /**
-     * Reads characters into a portion of an array.  This method will block
-     * until some input is available, an I/O error occurs, or the end of the
-     * stream is reached.
-     *
-     * @param      cbuf  Destination buffer to write characters to. 
-     *                   Must not be <code>null</code>.
-     * @param      off   Offset at which to start storing characters.
-     * @param      len   Maximum number of characters to read.
-     *
-     * @return     the number of characters read, or -1 if the end of the
-     *             stream has been reached
-     *
-     * @exception  IOException  If an I/O error occurs
-     */
-    public final int read(final char cbuf[], final int off,
-                          final int len) throws IOException {
-        for (int i = 0; i < len; i++) {
-            final int ch = read();
-            if (ch == -1) {
-                if (i == 0) {
-                    return -1;
-                } else {
-                    return i;
-                }
-            }
-            cbuf[off + i] = (char) ch;
-        }
-        return len;
-    }
-
-    /**
-     * Skips characters.  This method will block until some characters are
-     * available, an I/O error occurs, or the end of the stream is reached.
-     *
-     * @param  n  The number of characters to skip
-     *
-     * @return    the number of characters actually skipped
-     *
-     * @exception  IllegalArgumentException  If <code>n</code> is negative.
-     * @exception  IOException  If an I/O error occurs
-     */
-    public final long skip(final long n) throws IOException {
-        if (n < 0L) {
-            throw new IllegalArgumentException("skip value is negative");
-        }
-
-        for (long i = 0; i < n; i++) {
-            if (read() == -1) {
-                return i;
-            }
-        }
-        return n;
-    }
-
-    /**
-     * Sets the initialized status.
-     * 
-     * @param initialized Whether or not the filter is initialized.
-     */
-    protected final void setInitialized(final boolean initialized) {
-        this.initialized = initialized;
-    }
-
-    /**
-     * Returns the initialized status.
-     * 
-     * @return whether or not the filter is initialized
-     */
-    protected final boolean getInitialized() {
-        return initialized;
-    }
-
-    /**
-     * Sets the project to work with.
-     * 
-     * @param project The project this filter is part of. 
-     *                Should not be <code>null</code>.
-     */
-    public final void setProject(final Project project) {
-        this.project = project;
-    }
-
-    /**
-     * Returns the project this filter is part of.
-     * 
-     * @return the project this filter is part of
-     */
-    protected final Project getProject() {
-        return project;
-    }
-
-    /**
-     * Reads a line of text ending with '\n' (or until the end of the stream).
-     * The returned String retains the '\n'.
-     * 
-     * @return the line read, or <code>null</code> if the end of the stream
-     * has already been reached
-     * 
-     * @exception IOException if the underlying reader throws one during 
-     *                        reading
-     */
-    protected final String readLine() throws IOException {
-        int ch = in.read();
-        
-        if (ch == -1) {
-            return null;
-        }
-            
-        StringBuffer line = new StringBuffer();
-                
-        while (ch != -1) {
-            line.append ((char) ch);
-            if (ch == '\n') {
-                break;
-            }
-            ch = in.read();
-        }
-        return line.toString();
-    }
-
-    /**
-     * Reads to the end of the stream, returning the contents as a String.
-     * 
-     * @return the remaining contents of the reader, as a String
-     * 
-     * @exception IOException if the underlying reader throws one during 
-     *            reading
-     */
-    protected final String readFully() throws IOException {
-        return FileUtils.readFully(in, 8192);
-    }
-}
diff --git a/src/main/org/apache/tools/ant/filters/BaseParamFilterReader.java b/src/main/org/apache/tools/ant/filters/BaseParamFilterReader.java
deleted file mode 100644
index 833fe05..0000000
--- a/src/main/org/apache/tools/ant/filters/BaseParamFilterReader.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.filters;
-
-import java.io.Reader;
-
-import org.apache.tools.ant.types.Parameter;
-import org.apache.tools.ant.types.Parameterizable;
-
-/**
- * Parameterized base class for core filter readers.
- *
- * @author <a href="mailto:umagesh@apache.org">Magesh Umasankar</a>
- */
-public abstract class BaseParamFilterReader
-    extends BaseFilterReader
-    implements Parameterizable {
-    /** The passed in parameter array. */
-    private Parameter[] parameters;
-
-    /**
-     * Constructor for "dummy" instances.
-     * 
-     * @see BaseFilterReader#BaseFilterReader()
-     */
-    public BaseParamFilterReader() {
-        super();
-    }
-
-    /**
-     * Creates a new filtered reader.
-     *
-     * @param in A Reader object providing the underlying stream.
-     *           Must not be <code>null</code>.
-     */
-    public BaseParamFilterReader(final Reader in) {
-        super(in);
-    }
-
-    /**
-     * Sets the parameters used by this filter, and sets
-     * the filter to an uninitialized status.
-     * 
-     * @param parameters The parameters to be used by this filter.
-     *                   Should not be <code>null</code>.
-     */
-    public final void setParameters(final Parameter[] parameters) {
-        this.parameters = parameters;
-        setInitialized(false);
-    }
-
-    /**
-     * Returns the parameters to be used by this filter.
-     * 
-     * @return the parameters to be used by this filter
-     */
-    protected final Parameter[] getParameters() {
-        return parameters;
-    }
-}
diff --git a/src/main/org/apache/tools/ant/filters/ChainableReader.java b/src/main/org/apache/tools/ant/filters/ChainableReader.java
deleted file mode 100644
index 5b5dcda..0000000
--- a/src/main/org/apache/tools/ant/filters/ChainableReader.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.filters;
-
-import java.io.Reader;
-
-/**
- * Interface indicating that a reader may be chained to another one.
- *
- * @author <a href="mailto:umagesh@apache.org">Magesh Umasankar</a>
- */
-public interface ChainableReader {
-    /**
-     * Returns a reader with the same configuration as this one,
-     * but filtering input from the specified reader.
-     * 
-     * @param rdr the reader which the returned reader should be filtering
-     * 
-     * @return a reader with the same configuration as this one, but
-     *         filtering input from the specified reader
-     */
-    public Reader chain(Reader rdr);
-}
diff --git a/src/main/org/apache/tools/ant/filters/ClassConstants.java b/src/main/org/apache/tools/ant/filters/ClassConstants.java
deleted file mode 100644
index f42b25d..0000000
--- a/src/main/org/apache/tools/ant/filters/ClassConstants.java
+++ /dev/null
@@ -1,194 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.filters;
-
-import java.io.IOException;
-import java.io.Reader;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-
-
-/**
- * Assembles the constants declared in a Java class in
- * <code>key1=value1(line separator)key2=value2</code>
- * format.
- *<p>
- * Notes:
- * <ol>
- * <li>This filter uses the BCEL external toolkit.
- * <li>This assembles only those constants that are not created
- * using the syntax <code>new whatever()</code>
- * <li>This assembles constants declared using the basic datatypes
- * and String only.</li>
- * <li>The access modifiers of the declared constants do not matter.</li>
- *</ol>
- * Example:<br>
- * <pre>&lt;classconstants/&gt;</pre>
- * Or:
- * <pre>&lt;filterreader classname=&quot;org.apache.tools.ant.filters.ClassConstants&quot;/&gt;</pre>
- * @author <a href="mailto:umagesh@apache.org">Magesh Umasankar</a>
- */
-public final class ClassConstants
-    extends BaseFilterReader
-    implements ChainableReader {
-    /** Data that must be read from, if not null. */
-    private String queuedData = null;
-
-    /** Helper Class to be invoked via reflection. */
-    private static final String JAVA_CLASS_HELPER =
-        "org.apache.tools.ant.filters.util.JavaClassHelper";
-
-    /**
-     * Constructor for "dummy" instances.
-     * 
-     * @see BaseFilterReader#BaseFilterReader()
-     */
-    public ClassConstants() {
-        super();
-    }
-
-    /**
-     * Creates a new filtered reader. The contents of the passed-in reader
-     * are expected to be the name of the class from which to produce a 
-     * list of constants.
-     *
-     * @param in A Reader object providing the underlying stream.
-     *           Must not be <code>null</code>.
-     */
-    public ClassConstants(final Reader in) {
-        super(in);
-    }
-
-    /**
-     * Reads and assembles the constants declared in a class file.
-     * 
-     * @return the next character in the list of constants, or -1
-     * if the end of the resulting stream has been reached
-     * 
-     * @exception IOException if the underlying stream throws an IOException
-     * during reading, or if the constants for the specified class cannot
-     * be read (for example due to the class not being found).
-     */
-    public final int read() throws IOException {
-
-        int ch = -1;
-
-        if (queuedData != null && queuedData.length() == 0) {
-            queuedData = null;
-        }
-
-        if (queuedData != null) {
-            ch = queuedData.charAt(0);
-            queuedData = queuedData.substring(1);
-            if (queuedData.length() == 0) {
-                queuedData = null;
-            }
-        } else {
-            final String clazz = readFully();
-            if (clazz == null) {
-                ch = -1;
-            } else {
-                final byte[] bytes = clazz.getBytes();
-                try {
-                    final Class javaClassHelper =
-                        Class.forName(JAVA_CLASS_HELPER);
-                    if (javaClassHelper != null) {
-                        final Class params[] = {
-                            byte[].class
-                        };
-                        final Method getConstants =
-                            javaClassHelper.getMethod("getConstants", params);
-                        final Object[] args = {
-                            bytes
-                        };
-                        // getConstants is a static method, no need to
-                        // pass in the object
-                        final StringBuffer sb = (StringBuffer)
-                                getConstants.invoke(null, args);
-                        if (sb.length() > 0) {
-                            queuedData = sb.toString();
-                            return read();
-                        }
-                    }
-                } catch (ClassNotFoundException cnfe) {
-                    throw new IOException(cnfe.getMessage());
-                } catch (NoSuchMethodException nsme) {
-                    throw new IOException(nsme.getMessage());
-                } catch (IllegalAccessException iae) {
-                    throw new IOException(iae.getMessage());
-                } catch (IllegalArgumentException iarge) {
-                    throw new IOException(iarge.getMessage());
-                } catch (InvocationTargetException ite) {
-                    throw new IOException(ite.getMessage());
-                }
-            }
-        }
-        return ch;
-    }
-
-    /**
-     * Creates a new ClassConstants using the passed in
-     * Reader for instantiation.
-     * 
-     * @param rdr A Reader object providing the underlying stream.
-     *            Must not be <code>null</code>.
-     * 
-     * @return a new filter based on this configuration, but filtering
-     *         the specified reader
-     */
-    public final Reader chain(final Reader rdr) {
-        ClassConstants newFilter = new ClassConstants(rdr);
-        return newFilter;
-    }
-}
diff --git a/src/main/org/apache/tools/ant/filters/ExpandProperties.java b/src/main/org/apache/tools/ant/filters/ExpandProperties.java
deleted file mode 100644
index 8f0a786..0000000
--- a/src/main/org/apache/tools/ant/filters/ExpandProperties.java
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.filters;
-
-import java.io.IOException;
-import java.io.Reader;
-
-import org.apache.tools.ant.Project;
-
-/**
- * Expands Ant properties, if any, in the data.
- * <p>
- * Example:<br>
- * <pre>&lt;expandproperties/&gt;</pre>
- * Or:
- * <pre>&lt;filterreader classname=&quot;org.apache.tools.ant.filters.ExpandProperties&quot;/&gt;</pre>
- * 
- * @author <a href="mailto:umagesh@apache.org">Magesh Umasankar</a>
- */
-public final class ExpandProperties
-    extends BaseFilterReader
-    implements ChainableReader {
-    /** Data that must be read from, if not null. */
-    private String queuedData = null;
-
-    /**
-     * Constructor for "dummy" instances.
-     * 
-     * @see BaseFilterReader#BaseFilterReader()
-     */
-    public ExpandProperties() {
-        super();
-    }
-
-    /**
-     * Creates a new filtered reader.
-     *
-     * @param in A Reader object providing the underlying stream.
-     *           Must not be <code>null</code>.
-     */
-    public ExpandProperties(final Reader in) {
-        super(in);
-    }
-
-    /**
-     * Returns the next character in the filtered stream. The original
-     * stream is first read in fully, and the Ant properties are expanded.
-     * The results of this expansion are then queued so they can be read
-     * character-by-character.
-     * 
-     * @return the next character in the resulting stream, or -1
-     * if the end of the resulting stream has been reached
-     * 
-     * @exception IOException if the underlying stream throws an IOException
-     * during reading     
-     */
-    public final int read() throws IOException {
-
-        int ch = -1;
-
-        if (queuedData != null && queuedData.length() == 0) {
-            queuedData = null;
-        }
-
-        if (queuedData != null) {
-            ch = queuedData.charAt(0);
-            queuedData = queuedData.substring(1);
-            if (queuedData.length() == 0) {
-                queuedData = null;
-            }
-        } else {
-            queuedData = readFully();
-            if (queuedData == null) {
-                ch = -1;
-            } else {
-                Project project = getProject();
-                queuedData = project.replaceProperties(queuedData);
-                return read();
-            }
-        }
-        return ch;
-    }
-
-    /**
-     * Creates a new ExpandProperties filter using the passed in
-     * Reader for instantiation.
-     * 
-     * @param rdr A Reader object providing the underlying stream.
-     *            Must not be <code>null</code>.
-     * 
-     * @return a new filter based on this configuration, but filtering
-     *         the specified reader
-     */
-    public final Reader chain(final Reader rdr) {
-        ExpandProperties newFilter = new ExpandProperties(rdr);
-        newFilter.setProject(getProject());
-        return newFilter;
-    }
-}
diff --git a/src/main/org/apache/tools/ant/filters/HeadFilter.java b/src/main/org/apache/tools/ant/filters/HeadFilter.java
deleted file mode 100644
index 25e9044..0000000
--- a/src/main/org/apache/tools/ant/filters/HeadFilter.java
+++ /dev/null
@@ -1,187 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.filters;
-
-import java.io.IOException;
-import java.io.Reader;
-
-import org.apache.tools.ant.types.Parameter;
-
-/**
- * Reads the first <code>n</code> lines of a stream.
- * (Default is first 10 lines.)
- * <p>
- * Example:
- * <pre>&lt;headfilter lines=&quot;3&quot;/&gt;</pre>
- * Or:
- * <pre>&lt;filterreader classname=&quot;org.apache.tools.ant.filters.HeadFilter&quot;&gt;
- *    &lt;param name=&quot;lines&quot; value=&quot;3&quot;/&gt;
- * &lt;/filterreader&gt;</pre>
- *
- * @author <a href="mailto:umagesh@apache.org">Magesh Umasankar</a>
- */
-public final class HeadFilter
-    extends BaseParamFilterReader
-    implements ChainableReader {
-    /** Parameter name for the number of lines to be returned. */
-    private static final String LINES_KEY = "lines";
-
-    /** Number of lines currently read in. */
-    private long linesRead = 0;
-
-    /** Number of lines to be returned in the filtered stream. */
-    private long lines = 10;
-
-    /**
-     * Constructor for "dummy" instances.
-     * 
-     * @see BaseFilterReader#BaseFilterReader()
-     */
-    public HeadFilter() {
-        super();
-    }
-
-    /**
-     * Creates a new filtered reader.
-     *
-     * @param in A Reader object providing the underlying stream.
-     *           Must not be <code>null</code>.
-     */
-    public HeadFilter(final Reader in) {
-        super(in);
-    }
-
-    /**
-     * Returns the next character in the filtered stream. If the desired
-     * number of lines have already been read, the resulting stream is
-     * effectively at an end. Otherwise, the next character from the 
-     * underlying stream is read and returned.
-     * 
-     * @return the next character in the resulting stream, or -1
-     * if the end of the resulting stream has been reached
-     * 
-     * @exception IOException if the underlying stream throws an IOException
-     * during reading     
-     */
-    public final int read() throws IOException {
-        if (!getInitialized()) {
-            initialize();
-            setInitialized(true);
-        }
-
-        int ch = -1;
-
-        if (linesRead < lines) {
-
-            ch = in.read();
-
-            if (ch == '\n') {
-                linesRead++;
-            }
-        }
-
-        return ch;
-    }
-
-    /**
-     * Sets the number of lines to be returned in the filtered stream.
-     * 
-     * @param lines the number of lines to be returned in the filtered stream
-     */
-    public final void setLines(final long lines) {
-        this.lines = lines;
-    }
-
-    /**
-     * Returns the number of lines to be returned in the filtered stream.
-     * 
-     * @return the number of lines to be returned in the filtered stream
-     */
-    private final long getLines() {
-        return lines;
-    }
-
-    /**
-     * Creates a new HeadFilter using the passed in
-     * Reader for instantiation.
-     * 
-     * @param rdr A Reader object providing the underlying stream.
-     *            Must not be <code>null</code>.
-     * 
-     * @return a new filter based on this configuration, but filtering
-     *         the specified reader
-     */
-    public final Reader chain(final Reader rdr) {
-        HeadFilter newFilter = new HeadFilter(rdr);
-        newFilter.setLines(getLines());
-        newFilter.setInitialized(true);
-        return newFilter;
-    }
-
-    /**
-     * Scans the parameters list for the "lines" parameter and uses
-     * it to set the number of lines to be returned in the filtered stream.
-     */
-    private final void initialize() {
-        Parameter[] params = getParameters();
-        if (params != null) {
-            for (int i = 0; i < params.length; i++) {
-                if (LINES_KEY.equals(params[i].getName())) {
-                    lines = new Long(params[i].getValue()).longValue();
-                    break;
-                }
-            }
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/filters/LineContains.java b/src/main/org/apache/tools/ant/filters/LineContains.java
deleted file mode 100644
index f4246ca..0000000
--- a/src/main/org/apache/tools/ant/filters/LineContains.java
+++ /dev/null
@@ -1,258 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.filters;
-
-import java.io.IOException;
-import java.io.Reader;
-import java.util.Vector;
-
-import org.apache.tools.ant.types.Parameter;
-
-/**
- * Filter which includes only those lines that contain all the user-specified
- * strings.
- *
- * Example:
- *
- * <pre>&lt;linecontains&gt;
- *   &lt;contains value=&quot;foo&quot;&gt;
- *   &lt;contains value=&quot;bar&quot;&gt;
- * &lt;/linecontains&gt;</pre>
- *
- * Or:
- *
- * <pre>&lt;filterreader classname="org.apache.tools.ant.filters.LineContains"&gt;
- *    &lt;param type="contains" value="foo"/&gt;
- *    &lt;param type="contains" value="bar"/&gt;
- * &lt;/filterreader&gt;</pre>
- *
- * This will include only those lines that contain <code>foo</code> and 
- * <code>bar</code>.
- *
- * @author <a href="mailto:umagesh@apache.org">Magesh Umasankar</a>
- */
-public final class LineContains
-    extends BaseParamFilterReader
-    implements ChainableReader {
-    /** Parameter name for the words to filter on. */
-    private static final String CONTAINS_KEY = "contains";
-
-    /** Vector that holds the strings that input lines must contain. */
-    private Vector contains = new Vector();
-
-    /** 
-     * Remaining line to be read from this filter, or <code>null</code> if
-     * the next call to <code>read()</code> should read the original stream
-     * to find the next matching line.
-     */
-    private String line = null;
-
-    /**
-     * Constructor for "dummy" instances.
-     * 
-     * @see BaseFilterReader#BaseFilterReader()
-     */
-    public LineContains() {
-        super();
-    }
-
-    /**
-     * Creates a new filtered reader.
-     *
-     * @param in A Reader object providing the underlying stream.
-     *           Must not be <code>null</code>.
-     */
-    public LineContains(final Reader in) {
-        super(in);
-    }
-
-    /**
-     * Returns the next character in the filtered stream, only including
-     * lines from the original stream which contain all of the specified words.
-     * 
-     * @return the next character in the resulting stream, or -1
-     * if the end of the resulting stream has been reached
-     * 
-     * @exception IOException if the underlying stream throws an IOException
-     * during reading     
-     */
-    public final int read() throws IOException {
-        if (!getInitialized()) {
-            initialize();
-            setInitialized(true);
-        }
-
-        int ch = -1;
-
-        if (line != null) {
-            ch = line.charAt(0);
-            if (line.length() == 1) {
-                line = null;
-            } else {
-                line = line.substring(1);
-            }
-        } else {
-            line = readLine();
-            if (line == null) {
-                ch = -1;
-            } else {
-                int containsSize = contains.size();
-                for (int i = 0; i < containsSize; i++) {
-                    String containsStr = (String) contains.elementAt(i);
-                    if (line.indexOf(containsStr) == -1) {
-                        line = null;
-                        break;
-                    }
-                }
-
-                return read();
-            }
-        }
-
-        return ch;
-    }
-
-    /**
-     * Adds a <code>contains</code> element.
-     * 
-     * @param contains The <code>contains</code> element to add. 
-     *                 Must not be <code>null</code>.
-     */
-    public final void addConfiguredContains(final Contains contains) {
-        this.contains.addElement(contains.getValue());
-    }
-
-    /**
-     * Sets the vector of words which must be contained within a line read
-     * from the original stream in order for it to match this filter.
-     * 
-     * @param contains A vector of words which must be contained within a line
-     * in order for it to match in this filter. Must not be <code>null</code>.
-     */
-    private void setContains(final Vector contains) {
-        this.contains = contains;
-    }
-
-    /**
-     * Returns the vector of words which must be contained within a line read
-     * from the original stream in order for it to match this filter.
-     * 
-     * @return the vector of words which must be contained within a line read
-     * from the original stream in order for it to match this filter. The
-     * returned object is "live" - in other words, changes made to the
-     * returned object are mirrored in the filter.
-     */
-    private final Vector getContains() {
-        return contains;
-    }
-
-    /**
-     * Creates a new LineContains using the passed in
-     * Reader for instantiation.
-     * 
-     * @param rdr A Reader object providing the underlying stream.
-     *            Must not be <code>null</code>.
-     * 
-     * @return a new filter based on this configuration, but filtering
-     *         the specified reader
-     */
-    public final Reader chain(final Reader rdr) {
-        LineContains newFilter = new LineContains(rdr);
-        newFilter.setContains(getContains());
-        newFilter.setInitialized(true);
-        return newFilter;
-    }
-
-    /**
-     * Parses the parameters to add user-defined contains strings.
-     */
-    private final void initialize() {
-        Parameter[] params = getParameters();
-        if (params != null) {
-            for (int i = 0; i < params.length; i++) {
-                if (CONTAINS_KEY.equals(params[i].getType())) {
-                    contains.addElement(params[i].getValue());
-                }
-            }
-        }
-    }
-
-    /**
-     * Holds a contains element
-     */
-    public static class Contains {
-
-        /** User defined contains string */
-        private String value;
-
-        /**
-         * Sets the contains string
-         * 
-         * @param contains The contains string to set. 
-         *                 Must not be <code>null</code>.
-         */
-        public final void setValue(String contains) {
-            value = contains;
-        }
-
-        /**
-         * Returns the contains string.
-         * 
-         * @return the contains string for this element
-         */
-        public final String getValue() {
-            return value;
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/filters/LineContainsRegExp.java b/src/main/org/apache/tools/ant/filters/LineContainsRegExp.java
deleted file mode 100644
index 222beca..0000000
--- a/src/main/org/apache/tools/ant/filters/LineContainsRegExp.java
+++ /dev/null
@@ -1,238 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.filters;
-
-import java.io.IOException;
-import java.io.Reader;
-import java.util.Vector;
-
-import org.apache.tools.ant.types.Parameter;
-import org.apache.tools.ant.types.RegularExpression;
-import org.apache.tools.ant.util.regexp.Regexp;
-
-/**
- * Filter which includes only those lines that contain the user-specified
- * regular expression matching strings.
- *
- * Example:
- * <pre>&lt;linecontainsregexp&gt;
- *   &lt;regexp pattern=&quot;foo*&quot;&gt;
- * &lt;/linecontainsregexp&gt;</pre>
- *
- * Or:
- *
- * <pre>&lt;filterreader classname=&quot;org.apache.tools.ant.filters.LineContainsRegExp&quot;&gt;
- *    &lt;param type=&quot;regexp&quot; value=&quot;foo*&quot;/&gt;
- * &lt;/filterreader&gt;</pre>
- *
- * This will fetch all those lines that contain the pattern <code>foo</code>
- *
- * @author <a href="mailto:umagesh@apache.org">Magesh Umasankar</a>
- */
-public final class LineContainsRegExp
-    extends BaseParamFilterReader
-    implements ChainableReader {
-    /** Parameter name for the regular expression to filter on. */
-    private static final String REGEXP_KEY = "regexp";
-
-    /** Vector that holds the expressions that input lines must contain. */
-    private Vector regexps = new Vector();
-
-    /** 
-     * Remaining line to be read from this filter, or <code>null</code> if
-     * the next call to <code>read()</code> should read the original stream
-     * to find the next matching line.
-     */
-    private String line = null;
-
-    /**
-     * Constructor for "dummy" instances.
-     * 
-     * @see BaseFilterReader#BaseFilterReader()
-     */
-    public LineContainsRegExp() {
-        super();
-    }
-
-    /**
-     * Creates a new filtered reader.
-     *
-     * @param in A Reader object providing the underlying stream.
-     *           Must not be <code>null</code>.
-     */
-    public LineContainsRegExp(final Reader in) {
-        super(in);
-    }
-
-    /**
-     * Returns the next character in the filtered stream, only including
-     * lines from the original stream which match all of the specified
-     * regular expressions.
-     * 
-     * @return the next character in the resulting stream, or -1
-     * if the end of the resulting stream has been reached
-     * 
-     * @exception IOException if the underlying stream throws an IOException
-     * during reading     
-     */
-    public final int read() throws IOException {
-        if (!getInitialized()) {
-            initialize();
-            setInitialized(true);
-        }
-
-        int ch = -1;
-
-        if (line != null) {
-            ch = line.charAt(0);
-            if (line.length() == 1) {
-                line = null;
-            } else {
-                line = line.substring(1);
-            }
-        } else {
-            line = readLine();
-            if (line == null) {
-                ch = -1;
-            } else {
-                final int regexpsSize = regexps.size();
-                for (int i = 0; i < regexpsSize; i++) {
-                    RegularExpression regexp = (RegularExpression)
-                                                        regexps.elementAt(i);
-                    Regexp re = regexp.getRegexp(getProject());
-                    boolean matches = re.matches(line);
-                    if (!matches) {
-                        line = null;
-                        break;
-                    }
-                }
-
-                return read();
-            }
-        }
-
-        return ch;
-    }
-
-    /**
-     * Adds a <code>regexp</code> element.
-     * 
-     * @param regExp The <code>regexp</code> element to add. 
-     *               Must not be <code>null</code>.
-     */
-    public final void addConfiguredRegexp(final RegularExpression regExp) {
-        this.regexps.addElement(regExp);
-    }
-
-    /**
-     * Sets the vector of regular expressions which must be contained within 
-     * a line read from the original stream in order for it to match this 
-     * filter.
-     * 
-     * @param regexps A vector of regular expressions which must be contained 
-     * within a line in order for it to match in this filter. Must not be 
-     * <code>null</code>.
-     */
-    private void setRegexps(final Vector regexps) {
-        this.regexps = regexps;
-    }
-
-    /**
-     * Returns the vector of regular expressions which must be contained within 
-     * a line read from the original stream in order for it to match this 
-     * filter.
-     * 
-     * @return the vector of regular expressions which must be contained within 
-     * a line read from the original stream in order for it to match this 
-     * filter. The returned object is "live" - in other words, changes made to 
-     * the returned object are mirrored in the filter.
-     */
-    private final Vector getRegexps() {
-        return regexps;
-    }
-
-    /**
-     * Creates a new LineContainsRegExp using the passed in
-     * Reader for instantiation.
-     * 
-     * @param rdr A Reader object providing the underlying stream.
-     *            Must not be <code>null</code>.
-     * 
-     * @return a new filter based on this configuration, but filtering
-     *         the specified reader
-     */
-    public final Reader chain(final Reader rdr) {
-        LineContainsRegExp newFilter = new LineContainsRegExp(rdr);
-        newFilter.setRegexps(getRegexps());
-        newFilter.setInitialized(true);
-        return newFilter;
-    }
-
-    /**
-     * Parses parameters to add user defined regular expressions.
-     */
-    private final void initialize() {
-        Parameter[] params = getParameters();
-        if (params != null) {
-            for (int i = 0; i < params.length; i++) {
-                if (REGEXP_KEY.equals(params[i].getType())) {
-                    String pattern = params[i].getValue();
-                    RegularExpression regexp = new RegularExpression();
-                    regexp.setPattern(pattern);
-                    regexps.addElement(regexp);
-                }
-            }
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/filters/PrefixLines.java b/src/main/org/apache/tools/ant/filters/PrefixLines.java
deleted file mode 100644
index 1886f5a..0000000
--- a/src/main/org/apache/tools/ant/filters/PrefixLines.java
+++ /dev/null
@@ -1,201 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.filters;
-
-import java.io.IOException;
-import java.io.Reader;
-
-import org.apache.tools.ant.types.Parameter;
-
-/**
- * Attaches a prefix to every line.
- *
- * Example:
- * <pre>&lt;prefixlines prefix=&quot;Foo&quot;/&gt;</pre>
- *
- * Or:
- *
- * <pre>&lt;filterreader classname=&quot;org.apache.tools.ant.filters.PrefixLines&quot;&gt;
- *  &lt;param name=&quot;prefix&quot; value=&quot;Foo&quot;/&gt;
- * &lt;/filterreader&gt;</pre>
- *
- * @author <a href="mailto:umagesh@apache.org">Magesh Umasankar</a>
- */
-public final class PrefixLines
-    extends BaseParamFilterReader
-    implements ChainableReader {
-    /** Parameter name for the prefix. */
-    private static final String PREFIX_KEY = "prefix";
-
-    /** The prefix to be used. */
-    private String prefix = null;
-
-    /** Data that must be read from, if not null. */
-    private String queuedData = null;
-
-    /**
-     * Constructor for "dummy" instances.
-     * 
-     * @see BaseFilterReader#BaseFilterReader()
-     */
-    public PrefixLines() {
-        super();
-    }
-
-    /**
-     * Creates a new filtered reader.
-     *
-     * @param in A Reader object providing the underlying stream.
-     *           Must not be <code>null</code>.
-     */
-    public PrefixLines(final Reader in) {
-        super(in);
-    }
-
-    /**
-     * Returns the next character in the filtered stream. One line is read
-     * from the original input, and the prefix added. The resulting
-     * line is then used until it ends, at which point the next original line
-     * is read, etc.
-     * 
-     * @return the next character in the resulting stream, or -1
-     * if the end of the resulting stream has been reached
-     * 
-     * @exception IOException if the underlying stream throws an IOException
-     * during reading     
-     */
-    public final int read() throws IOException {
-        if (!getInitialized()) {
-            initialize();
-            setInitialized(true);
-        }
-
-        int ch = -1;
-
-        if (queuedData != null && queuedData.length() == 0) {
-            queuedData = null;
-        }
-
-        if (queuedData != null) {
-            ch = queuedData.charAt(0);
-            queuedData = queuedData.substring(1);
-            if (queuedData.length() == 0) {
-                queuedData = null;
-            }
-        } else {
-            queuedData = readLine();
-            if (queuedData == null) {
-                ch = -1;
-            } else {
-                if (prefix != null) {
-                    queuedData = prefix + queuedData;
-                }
-                return read();
-            }
-        }
-        return ch;
-    }
-
-    /**
-     * Sets the prefix to add at the start of each input line.
-     * 
-     * @param prefix The prefix to add at the start of each input line.
-     *               May be <code>null</code>, in which case no prefix
-     *               is added.
-     */
-    public final void setPrefix(final String prefix) {
-        this.prefix = prefix;
-    }
-
-    /**
-     * Returns the prefix which will be added at the start of each input line.
-     * 
-     * @return the prefix which will be added at the start of each input line
-     */
-    private final String getPrefix() {
-        return prefix;
-    }
-
-    /**
-     * Creates a new PrefixLines filter using the passed in
-     * Reader for instantiation.
-     * 
-     * @param rdr A Reader object providing the underlying stream.
-     *            Must not be <code>null</code>.
-     * 
-     * @return a new filter based on this configuration, but filtering
-     *         the specified reader
-     */
-    public final Reader chain(final Reader rdr) {
-        PrefixLines newFilter = new PrefixLines(rdr);
-        newFilter.setPrefix(getPrefix());
-        newFilter.setInitialized(true);
-        return newFilter;
-    }
-
-    /**
-     * Initializes the prefix if it is available from the parameters.
-     */
-    private final void initialize() {
-        Parameter[] params = getParameters();
-        if (params != null) {
-            for (int i = 0; i < params.length; i++) {
-                if (PREFIX_KEY.equals(params[i].getName())) {
-                    prefix = params[i].getValue();
-                    break;
-                }
-            }
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/filters/ReplaceTokens.java b/src/main/org/apache/tools/ant/filters/ReplaceTokens.java
deleted file mode 100644
index 19aa14d..0000000
--- a/src/main/org/apache/tools/ant/filters/ReplaceTokens.java
+++ /dev/null
@@ -1,335 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.filters;
-
-import java.io.IOException;
-import java.io.Reader;
-import java.util.Hashtable;
-
-import org.apache.tools.ant.types.Parameter;
-
-/**
- * Replaces tokens in the original input with user-supplied values
- *
- * Example:
- *
- * <pre>&lt;replacetokens begintoken=&quot;#&quot; endtoken=&quot;#&quot;&gt;
- *   &lt;token key=&quot;DATE&quot; value=&quot;${TODAY}&quot;/&gt;
- * &lt;/replacetokens&gt;</pre>
- *
- * Or:
- *
- * <pre>&lt;filterreader classname="org.apache.tools.ant.filters.ReplaceTokens"&gt;
- *   &lt;param type="tokenchar" name="begintoken" value="#"/&gt;
- *   &lt;param type="tokenchar" name="endtoken" value="#"/&gt;
- *   &lt;param type="token" name="DATE" value="${TODAY}"/&gt;
- * &lt;/filterreader&gt;</pre>
- *
- * @author <a href="mailto:umagesh@apache.org">Magesh Umasankar</a>
- */
-public final class ReplaceTokens
-    extends BaseParamFilterReader
-    implements ChainableReader {
-    /** Default "begin token" character. */
-    private static final char DEFAULT_BEGIN_TOKEN = '@';
-
-    /** Default "end token" character. */
-    private static final char DEFAULT_END_TOKEN = '@';
-
-    /** Data that must be read from, if not null. */
-    private String queuedData = null;
-
-    /** Hashtable to hold the replacee-replacer pairs (String to String). */
-    private Hashtable hash = new Hashtable();
-
-    /** Character marking the beginning of a token. */
-    private char beginToken = DEFAULT_BEGIN_TOKEN;
-
-    /** Character marking the end of a token. */
-    private char endToken = DEFAULT_END_TOKEN;
-
-    /**
-     * Constructor for "dummy" instances.
-     * 
-     * @see BaseFilterReader#BaseFilterReader()
-     */
-    public ReplaceTokens() {
-        super();
-    }
-
-    /**
-     * Creates a new filtered reader.
-     *
-     * @param in A Reader object providing the underlying stream.
-     *           Must not be <code>null</code>.
-     */
-    public ReplaceTokens(final Reader in) {
-        super(in);
-    }
-
-    /**
-     * Returns the next character in the filtered stream, replacing tokens
-     * from the original stream.
-     * 
-     * @return the next character in the resulting stream, or -1
-     * if the end of the resulting stream has been reached
-     * 
-     * @exception IOException if the underlying stream throws an IOException
-     * during reading     
-     */
-    public final int read() throws IOException {
-        if (!getInitialized()) {
-            initialize();
-            setInitialized(true);
-        }
-
-        if (queuedData != null && queuedData.length() > 0) {
-            final int ch = queuedData.charAt(0);
-            if (queuedData.length() > 1) {
-                queuedData = queuedData.substring(1);
-            } else {
-                queuedData = null;
-            }
-            return ch;
-        }
-
-        int ch = in.read();
-        if (ch == beginToken) {
-            final StringBuffer key = new StringBuffer("");
-            do  {
-                ch = in.read();
-                if (ch != -1) {
-                    key.append((char) ch);
-                } else {
-                    break;
-                }
-            } while (ch != endToken);
-
-            if (ch == -1) {
-                queuedData = beginToken + key.toString();
-                return read();
-            } else {
-                key.setLength(key.length() - 1);
-                final String replaceWith = (String) hash.get(key.toString());
-                if (replaceWith != null) {
-                    queuedData = replaceWith;
-                    return read();
-                } else {
-                    queuedData = beginToken + key.toString() + endToken;
-                    return read();
-                }
-            }
-        }
-        return ch;
-    }
-
-    /**
-     * Sets the "begin token" character.
-     * 
-     * @param beginToken the character used to denote the beginning of a token
-     */
-    public final void setBeginToken(final char beginToken) {
-        this.beginToken = beginToken;
-    }
-
-    /**
-     * Returns the "begin token" character.
-     * 
-     * @return the character used to denote the beginning of a token
-     */
-    private final char getBeginToken() {
-        return beginToken;
-    }
-
-    /**
-     * Sets the "end token" character.
-     * 
-     * @param endToken the character used to denote the end of a token
-     */
-    public final void setEndToken(final char endToken) {
-        this.endToken = endToken;
-    }
-
-    /**
-     * Returns the "end token" character.
-     * 
-     * @return the character used to denote the end of a token
-     */
-    private final char getEndToken() {
-        return endToken;
-    }
-
-    /**
-     * Adds a token element to the map of tokens to replace.
-     * 
-     * @param token The token to add to the map of replacements.
-     *              Must not be <code>null</code>.
-     */
-    public final void addConfiguredToken(final Token token) {
-        hash.put(token.getKey(), token.getValue());
-    }
-
-    /**
-     * Sets the map of tokens to replace.
-     * 
-     * @param hash A map (String->String) of token keys to replacement
-     * values. Must not be <code>null</code>.
-     */
-    private void setTokens(final Hashtable hash) {
-        this.hash = hash;
-    }
-
-    /**
-     * Returns the map of tokens which will be replaced.
-     * 
-     * @return a map (String->String) of token keys to replacement
-     * values
-     */
-    private final Hashtable getTokens() {
-        return hash;
-    }
-
-    /**
-     * Creates a new ReplaceTokens using the passed in
-     * Reader for instantiation.
-     * 
-     * @param rdr A Reader object providing the underlying stream.
-     *            Must not be <code>null</code>.
-     * 
-     * @return a new filter based on this configuration, but filtering
-     *         the specified reader
-     */
-    public final Reader chain(final Reader rdr) {
-        ReplaceTokens newFilter = new ReplaceTokens(rdr);
-        newFilter.setBeginToken(getBeginToken());
-        newFilter.setEndToken(getEndToken());
-        newFilter.setTokens(getTokens());
-        newFilter.setInitialized(true);
-        return newFilter;
-    }
-
-    /**
-     * Initializes tokens and loads the replacee-replacer hashtable.
-     */
-    private final void initialize() {
-        Parameter[] params = getParameters();
-        if (params != null) {
-            for (int i = 0; i < params.length; i++) {
-                if (params[i] != null) {
-                    final String type = params[i].getType();
-                    if ("tokenchar".equals(type)) {
-                        final String name = params[i].getName();
-                        if ("begintoken".equals(name)) {
-                            beginToken = params[i].getValue().charAt(0);
-                        } else if ("endtoken".equals(name)) {
-                            endToken = params[i].getValue().charAt(0);
-                        }
-                    } else if ("token".equals(type)) {
-                        final String name = params[i].getName();
-                        final String value = params[i].getValue();
-                        hash.put(name, value);
-                    }
-                }
-            }
-        }
-    }
-
-    /**
-     * Holds a token
-     */
-    public static class Token {
-
-        /** Token key */
-        private String key;
-
-        /** Token value */
-        private String value;
-
-        /**
-         * Sets the token key
-         * 
-         * @param key The key for this token. Must not be <code>null</code>.
-         */
-        public final void setKey(String key) {
-            this.key = key;
-        }
-
-        /**
-         * Sets the token value
-         * 
-         * @param value The value for this token. Must not be <code>null</code>.
-         */
-        public final void setValue(String value) {
-            this.value = value;
-        }
-
-        /**
-         * Returns the key for this token.
-         * 
-         * @return the key for this token
-         */
-        public final String getKey() {
-            return key;
-        }
-
-        /**
-         * Returns the value for this token.
-         * 
-         * @return the value for this token
-         */
-        public final String getValue() {
-            return value;
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/filters/StringInputStream.java b/src/main/org/apache/tools/ant/filters/StringInputStream.java
deleted file mode 100644
index 5eb3e4e..0000000
--- a/src/main/org/apache/tools/ant/filters/StringInputStream.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.filters;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.StringReader;
-
-/**
- * Wraps a String as an InputStream. Note that data will be lost for
- * characters not in ISO Latin 1, as a simple char->byte mapping is assumed.
- *
- * @author <a href="mailto:umagesh@apache.org">Magesh Umasankar</a>
- */
-public class StringInputStream
-    extends InputStream {
-    /** Source string, stored as a StringReader */
-    private StringReader in;
-
-    /**
-     * Composes a stream from a String
-     * 
-     * @param source The string to read from. Must not be <code>null</code>.
-     */
-    public StringInputStream(String source) {
-        in = new StringReader(source);
-    }
-
-    /**
-     * Reads from the Stringreader, returning the same value. Note that
-     * data will be lost for characters not in ISO Latin 1. Clients
-     * assuming a return value in the range -1 to 255 may even fail on
-     * such input.
-     * 
-     * @return the value of the next character in the StringReader
-     * 
-     * @exception IOException if the original StringReader fails to be read
-     */
-    public int read() throws IOException {
-        return in.read();
-    }
-
-    /**
-     * Closes the Stringreader.
-     * 
-     * @exception IOException if the original StringReader fails to be closed
-     */
-    public void close() throws IOException {
-        in.close();
-    }
-
-    /**
-     * Marks the read limit of the StringReader.
-     * 
-     * @param limit the maximum limit of bytes that can be read before the 
-     *              mark position becomes invalid
-     */
-    public synchronized void mark(final int limit) {
-        try {
-            in.mark(limit);
-        } catch (IOException ioe) {
-            throw new RuntimeException(ioe.getMessage());
-        }
-    }
-
-    /**
-     * Resets the StringReader.
-     * 
-     * @exception IOException if the StringReader fails to be reset
-     */
-    public synchronized void reset() throws IOException {
-        in.reset();
-    }
-
-    /**
-     * @see InputStream#markSupported
-     */
-    public boolean markSupported() {
-        return in.markSupported();
-    }
-}
-
diff --git a/src/main/org/apache/tools/ant/filters/StripJavaComments.java b/src/main/org/apache/tools/ant/filters/StripJavaComments.java
deleted file mode 100644
index 3dbe46e..0000000
--- a/src/main/org/apache/tools/ant/filters/StripJavaComments.java
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.filters;
-
-import java.io.IOException;
-import java.io.Reader;
-
-/**
- * This is a Java comment and string stripper reader that filters
- * those lexical tokens out for purposes of simple Java parsing.
- * (if you have more complex Java parsing needs, use a real lexer).
- * Since this class heavily relies on the single char read function,
- * you are reccomended to make it work on top of a buffered reader.
- */
-public final class StripJavaComments
-    extends BaseFilterReader
-    implements ChainableReader {
-        
-    /** 
-     * The read-ahead character, used for effectively pushing a single
-     * character back. -1 indicates that no character is in the buffer.
-     */
-    private int readAheadCh = -1;
-
-    /** 
-     * Whether or not the parser is currently in the middle of a string
-     * literal.
-     */
-    private boolean inString = false;
-
-    /**
-     * Constructor for "dummy" instances.
-     * 
-     * @see BaseFilterReader#BaseFilterReader()
-     */
-    public StripJavaComments() {
-        super();
-    }
-
-    /**
-     * Creates a new filtered reader.
-     *
-     * @param in A Reader object providing the underlying stream.
-     *           Must not be <code>null</code>.
-     */
-    public StripJavaComments(final Reader in) {
-        super(in);
-    }
-
-    /**
-     * Returns the next character in the filtered stream, not including
-     * Java comments.
-     * 
-     * @return the next character in the resulting stream, or -1
-     * if the end of the resulting stream has been reached
-     * 
-     * @exception IOException if the underlying stream throws an IOException
-     * during reading     
-     */
-    public final int read() throws IOException {
-        int ch = -1;
-        if (readAheadCh != -1) {
-            ch = readAheadCh;
-            readAheadCh = -1;
-        } else {
-            ch = in.read();
-            if (ch == '"') {
-                inString = !inString;
-            } else {
-                if (!inString) {
-                    if (ch == '/') {
-                        ch = in.read();
-                        if (ch == '/') {
-                            while (ch != '\n' && ch != -1) {
-                                ch = in.read();
-                            }
-                        } else if (ch == '*') {
-                            while (ch != -1) {
-                                ch = in.read();
-                                if (ch == '*') {
-                                    ch = in.read();
-                                    while (ch == '*' && ch != -1) {
-                                        ch = in.read();
-                                    }
-
-                                    if (ch == '/') {
-                                        ch = read();
-                                        break;
-                                    }
-                                }
-                            }
-                        } else {
-                            readAheadCh = ch;
-                            ch = '/';
-                        }
-                    }
-                }
-            }
-        }
-
-        return ch;
-    }
-
-    /**
-     * Creates a new StripJavaComments using the passed in
-     * Reader for instantiation.
-     * 
-     * @param rdr A Reader object providing the underlying stream.
-     *            Must not be <code>null</code>.
-     * 
-     * @return a new filter based on this configuration, but filtering
-     *         the specified reader
-     */
-
-    public final Reader chain(final Reader rdr) {
-        StripJavaComments newFilter = new StripJavaComments(rdr);
-        return newFilter;
-    }
-}
diff --git a/src/main/org/apache/tools/ant/filters/StripLineBreaks.java b/src/main/org/apache/tools/ant/filters/StripLineBreaks.java
deleted file mode 100644
index 0b1be71..0000000
--- a/src/main/org/apache/tools/ant/filters/StripLineBreaks.java
+++ /dev/null
@@ -1,191 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.filters;
-
-import java.io.IOException;
-import java.io.Reader;
-
-import org.apache.tools.ant.types.Parameter;
-
-/**
- * Filter to flatten the stream to a single line.
- * 
- * Example:
- *
- * <pre>&lt;striplinebreaks/&gt;</pre>
- *
- * Or:
- *
- * <pre>&lt;filterreader classname=&quot;org.apache.tools.ant.filters.StripLineBreaks&quot;/&gt;</pre>
- *
- * @author Steve Loughran
- * @author <a href="mailto:umagesh@apache.org">Magesh Umasankar</a>
- */
-public final class StripLineBreaks
-    extends BaseParamFilterReader
-    implements ChainableReader {
-    /**
-     * Line-breaking characters.
-     * What should we do on funny IBM mainframes with odd line endings?
-     */
-    private static final String DEFAULT_LINE_BREAKS = "\r\n";
-
-    /** Parameter name for the line-breaking characters parameter. */
-    private static final String LINE_BREAKS_KEY = "linebreaks";
-
-    /** The characters that are recognized as line breaks. */
-    private String lineBreaks = DEFAULT_LINE_BREAKS;
-
-    /**
-     * Constructor for "dummy" instances.
-     * 
-     * @see BaseFilterReader#BaseFilterReader()
-     */
-    public StripLineBreaks() {
-        super();
-    }
-
-    /**
-     * Creates a new filtered reader.
-     *
-     * @param in A Reader object providing the underlying stream.
-     *           Must not be <code>null</code>.
-     */
-    public StripLineBreaks(final Reader in) {
-        super(in);
-    }
-
-    /**
-     * Returns the next character in the filtered stream, only including
-     * characters not in the set of line-breaking characters.
-     * 
-     * @return the next character in the resulting stream, or -1
-     * if the end of the resulting stream has been reached
-     * 
-     * @exception IOException if the underlying stream throws an IOException
-     * during reading     
-     */
-    public final int read() throws IOException {
-        if (!getInitialized()) {
-            initialize();
-            setInitialized(true);
-        }
-
-        int ch = in.read();
-        while (ch != -1) {
-            if (lineBreaks.indexOf(ch) == -1) {
-                break;
-            } else {
-                ch = in.read();
-            }
-        }
-        return ch;
-    }
-
-    /**
-     * Sets the line-breaking characters.
-     * 
-     * @param lineBreaks A String containing all the characters to be
-     *                   considered as line-breaking.
-     */
-    public final void setLineBreaks(final String lineBreaks) {
-        this.lineBreaks = lineBreaks;
-    }
-
-    /**
-     * Returns the line-breaking characters as a String.
-     * 
-     * @return a String containing all the characters considered as 
-     *         line-breaking
-     */
-    private final String getLineBreaks() {
-        return lineBreaks;
-    }
-
-    /**
-     * Creates a new StripLineBreaks using the passed in
-     * Reader for instantiation.
-     * 
-     * @param rdr A Reader object providing the underlying stream.
-     *            Must not be <code>null</code>.
-     * 
-     * @return a new filter based on this configuration, but filtering
-     *         the specified reader
-     */
-    public final Reader chain(final Reader rdr) {
-        StripLineBreaks newFilter = new StripLineBreaks(rdr);
-        newFilter.setLineBreaks(getLineBreaks());
-        newFilter.setInitialized(true);
-        return newFilter;
-    }
-
-    /**
-     * Parses the parameters to set the line-breaking characters.
-     */
-    private final void initialize() {
-        String userDefinedLineBreaks = null;
-        Parameter[] params = getParameters();
-        if (params != null) {
-            for (int i = 0; i < params.length; i++) {
-                if (LINE_BREAKS_KEY.equals(params[i].getName())) {
-                    userDefinedLineBreaks = params[i].getValue();
-                    break;
-                }
-            }
-        }
-        if (userDefinedLineBreaks != null) {
-            lineBreaks = userDefinedLineBreaks;
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/filters/StripLineComments.java b/src/main/org/apache/tools/ant/filters/StripLineComments.java
deleted file mode 100644
index 7a48a89..0000000
--- a/src/main/org/apache/tools/ant/filters/StripLineComments.java
+++ /dev/null
@@ -1,251 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.filters;
-
-import java.io.IOException;
-import java.io.Reader;
-import java.util.Vector;
-
-import org.apache.tools.ant.types.Parameter;
-
-/**
- * This filter strips line comments.
- *
- * Example:
- *
- * <pre>&lt;striplinecomments&gt;
- *   &lt;comment value=&quot;#&quot;/&gt;
- *   &lt;comment value=&quot;--&quot;/&gt;
- *   &lt;comment value=&quot;REM &quot;/&gt;
- *   &lt;comment value=&quot;rem &quot;/&gt;
- *   &lt;comment value=&quot;//&quot;/&gt;
- * &lt;/striplinecomments&gt;</pre>
- *
- * Or:
- *
- * <pre>&lt;filterreader classname=&quot;org.apache.tools.ant.filters.StripLineComments&quot;&gt;
- *   &lt;param type=&quot;comment&quot; value="#&quot;/&gt;
- *   &lt;param type=&quot;comment&quot; value=&quot;--&quot;/&gt;
- *   &lt;param type=&quot;comment&quot; value=&quot;REM &quot;/&gt;
- *   &lt;param type=&quot;comment&quot; value=&quot;rem &quot;/&gt;
- *   &lt;param type=&quot;comment&quot; value=&quot;//&quot;/&gt;
- * &lt;/filterreader&gt;</pre>
- *
- * @author <a href="mailto:umagesh@apache.org">Magesh Umasankar</a>
- */
-public final class StripLineComments
-    extends BaseParamFilterReader
-    implements ChainableReader {
-    /** Parameter name for the comment prefix. */
-    private static final String COMMENTS_KEY = "comment";
-
-    /** Vector that holds the comment prefixes. */
-    private Vector comments = new Vector();
-
-    /** The line that has been read ahead. */
-    private String line = null;
-
-    /**
-     * Constructor for "dummy" instances.
-     * 
-     * @see BaseFilterReader#BaseFilterReader()
-     */
-    public StripLineComments() {
-        super();
-    }
-
-    /**
-     * Creates a new filtered reader.
-     *
-     * @param in A Reader object providing the underlying stream.
-     *           Must not be <code>null</code>.
-     */
-    public StripLineComments(final Reader in) {
-        super(in);
-    }
-
-    /**
-     * Returns the next character in the filtered stream, only including
-     * lines from the original stream which don't start with any of the 
-     * specified comment prefixes.
-     * 
-     * @return the next character in the resulting stream, or -1
-     * if the end of the resulting stream has been reached
-     * 
-     * @exception IOException if the underlying stream throws an IOException
-     * during reading     
-     */
-    public final int read() throws IOException {
-        if (!getInitialized()) {
-            initialize();
-            setInitialized(true);
-        }
-
-        int ch = -1;
-
-        if (line != null) {
-            ch = line.charAt(0);
-            if (line.length() == 1) {
-                line = null;
-            } else {
-                line = line.substring(1);
-            }
-        } else {
-            line = readLine();
-            if (line == null) {
-                ch = -1;
-            } else {
-                int commentsSize = comments.size();
-                for (int i = 0; i < commentsSize; i++) {
-                    String comment = (String) comments.elementAt(i);
-                    if (line.startsWith(comment)) {
-                        line = null;
-                        break;
-                    }
-                }
-                return read();
-            }
-        }
-
-        return ch;
-    }
-
-    /**
-     * Adds a <code>comment</code> element to the list of prefixes.
-     * 
-     * @param comment The <code>comment</code> element to add to the
-     * list of comment prefixes to strip. Must not be <code>null</code>.
-     */
-    public final void addConfiguredComment(final Comment comment) {
-        comments.addElement(comment.getValue());
-    }
-
-    /**
-     * Sets the list of comment prefixes to strip.
-     * 
-     * @param comments A list of strings, each of which is a prefix
-     * for a comment line. Must not be <code>null</code>.
-     */
-    private void setComments(final Vector comments) {
-        this.comments = comments;
-    }
-
-    /**
-     * Returns the list of comment prefixes to strip.
-     * 
-     * @return the list of comment prefixes to strip.
-     */
-    private final Vector getComments() {
-        return comments;
-    }
-
-    /**
-     * Creates a new StripLineComments using the passed in
-     * Reader for instantiation.
-     * 
-     * @param rdr A Reader object providing the underlying stream.
-     *            Must not be <code>null</code>.
-     * 
-     * @return a new filter based on this configuration, but filtering
-     *         the specified reader
-     */
-    public final Reader chain(final Reader rdr) {
-        StripLineComments newFilter = new StripLineComments(rdr);
-        newFilter.setComments(getComments());
-        newFilter.setInitialized(true);
-        return newFilter;
-    }
-
-    /**
-     * Parses the parameters to set the comment prefixes.
-     */
-    private final void initialize() {
-        Parameter[] params = getParameters();
-        if (params != null) {
-            for (int i = 0; i < params.length; i++) {
-                if (COMMENTS_KEY.equals(params[i].getType())) {
-                    comments.addElement(params[i].getValue());
-                }
-            }
-        }
-    }
-
-    /**
-     * The class that holds a comment representation.
-     */
-    public static class Comment {
-
-        /** The prefix for a line comment. */
-        private String value;
-
-        /**
-         * Sets the prefix for this type of line comment.
-         * 
-         * @param comment The prefix for a line comment of this type.
-         * Must not be <code>null</code>.
-         */
-        public final void setValue(String comment) {
-            value = comment;
-        }
-
-        /**
-         * Returns the prefix for this type of line comment.
-         * 
-         * @return the prefix for this type of line comment.
-         */
-        public final String getValue() {
-            return value;
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/filters/TabsToSpaces.java b/src/main/org/apache/tools/ant/filters/TabsToSpaces.java
deleted file mode 100644
index efcfc1e..0000000
--- a/src/main/org/apache/tools/ant/filters/TabsToSpaces.java
+++ /dev/null
@@ -1,193 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.filters;
-
-import java.io.IOException;
-import java.io.Reader;
-
-import org.apache.tools.ant.types.Parameter;
-
-/**
- * Converts tabs to spaces.
- *
- * Example:
- *
- * <pre>&lt;tabtospaces tablength=&quot;8&quot;/&gt;</pre>
- *
- * Or:
- *
- * <pre>&lt;filterreader classname=&quot;org.apache.tools.ant.filters.TabsToSpaces&quot;&gt;
- *   &lt;param name=&quot;tablength&quot; value=&quot;8&quot;/&gt;
- * &lt;/filterreader&gt;</pre>
- *
- * @author <a href="mailto:umagesh@apache.org">Magesh Umasankar</a>
- */
-public final class TabsToSpaces
-    extends BaseParamFilterReader
-    implements ChainableReader {
-    /** The default tab length. */
-    private static final int DEFAULT_TAB_LENGTH = 8;
-
-    /** Parameter name for the length of a tab. */
-    private static final String TAB_LENGTH_KEY = "tablength";
-
-    /** Tab length in this filter. */
-    private int tabLength = DEFAULT_TAB_LENGTH;
-
-    /** The number of spaces still to be read to represent the last-read tab. */
-    private int spacesRemaining = 0;
-
-    /**
-     * Constructor for "dummy" instances.
-     * 
-     * @see BaseFilterReader#BaseFilterReader()
-     */
-    public TabsToSpaces() {
-        super();
-    }
-
-    /**
-     * Creates a new filtered reader.
-     *
-     * @param in A Reader object providing the underlying stream.
-     *           Must not be <code>null</code>.
-     */
-    public TabsToSpaces(final Reader in) {
-        super(in);
-    }
-
-    /**
-     * Returns the next character in the filtered stream, converting tabs
-     * to the specified number of spaces.
-     * 
-     * @return the next character in the resulting stream, or -1
-     * if the end of the resulting stream has been reached
-     * 
-     * @exception IOException if the underlying stream throws an IOException
-     * during reading     
-     */
-    public final int read() throws IOException {
-        if (!getInitialized()) {
-            initialize();
-            setInitialized(true);
-        }
-
-        int ch = -1;
-
-        if (spacesRemaining > 0) {
-            spacesRemaining--;
-            ch = ' ';
-        } else {
-            ch = in.read();
-            if (ch == '\t') {
-                spacesRemaining = tabLength - 1;
-                ch = ' ';
-            }
-        }
-        return ch;
-    }
-
-    /**
-     * Sets the tab length.
-     * 
-     * @param tabLength the number of spaces to be used when converting a tab.
-     */
-    public final void setTablength(final int tabLength) {
-        this.tabLength = tabLength;
-    }
-
-    /**
-     * Returns the tab length.
-     * 
-     * @return the number of spaces used when converting a tab
-     */
-    private final int getTablength() {
-        return tabLength;
-    }
-
-    /**
-     * Creates a new TabsToSpaces using the passed in
-     * Reader for instantiation.
-     * 
-     * @param rdr A Reader object providing the underlying stream.
-     *            Must not be <code>null</code>.
-     * 
-     * @return a new filter based on this configuration, but filtering
-     *         the specified reader
-     */
-    public final Reader chain(final Reader rdr) {
-        TabsToSpaces newFilter = new TabsToSpaces(rdr);
-        newFilter.setTablength(getTablength());
-        newFilter.setInitialized(true);
-        return newFilter;
-    }
-
-    /**
-     * Parses the parameters to set the tab length.
-     */
-    private final void initialize() {
-        Parameter[] params = getParameters();
-        if (params != null) {
-            for (int i = 0; i < params.length; i++) {
-                if (params[i] != null) {
-                    if (TAB_LENGTH_KEY.equals(params[i].getName())) {
-                        tabLength =
-                            new Integer(params[i].getValue()).intValue();
-                        break;
-                    }
-                }
-            }
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/filters/TailFilter.java b/src/main/org/apache/tools/ant/filters/TailFilter.java
deleted file mode 100644
index cabef1c..0000000
--- a/src/main/org/apache/tools/ant/filters/TailFilter.java
+++ /dev/null
@@ -1,236 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.filters;
-
-import java.io.IOException;
-import java.io.Reader;
-
-import org.apache.tools.ant.types.Parameter;
-
-/**
- * Reads the last <code>n</code> lines of a stream. (Default is last10 lines.)
- *
- * Example:
- *
- * <pre>&lt;tailfilter lines=&quot;3&quot;/&gt;</pre>
- *
- * Or:
- *
- * <pre>&lt;filterreader classname=&quot;org.apache.tools.ant.filters.TailFilter&quot;&gt;
- *   &lt;param name=&quot;lines&quot; value=&quot;3&quot;/&gt;
- * &lt;/filterreader&gt;</pre>
- *
- * @author <a href="mailto:umagesh@apache.org">Magesh Umasankar</a>
- */
-public final class TailFilter
-    extends BaseParamFilterReader
-    implements ChainableReader {
-    /** Parameter name for the number of lines to be returned. */
-    private static final String LINES_KEY = "lines";
-
-    /** Number of lines currently read in. */
-    private long linesRead = 0;
-
-    /** Number of lines to be returned in the filtered stream. */
-    private long lines = 10;
-
-    /** Buffer to hold in characters read ahead. */
-    private char[] buffer = new char[4096];
-
-    /** The character position that has been returned from the buffer. */
-    private int returnedCharPos = -1;
-
-    /** Whether or not read-ahead been completed. */
-    private boolean completedReadAhead = false;
-
-    /** Current index position on the buffer. */
-    private int bufferPos = 0;
-
-    /**
-     * Constructor for "dummy" instances.
-     * 
-     * @see BaseFilterReader#BaseFilterReader()
-     */
-    public TailFilter() {
-        super();
-    }
-
-    /**
-     * Creates a new filtered reader.
-     *
-     * @param in A Reader object providing the underlying stream.
-     *           Must not be <code>null</code>.
-     */
-    public TailFilter(final Reader in) {
-        super(in);
-    }
-
-    /**
-     * Returns the next character in the filtered stream. If the read-ahead
-     * has been completed, the next character in the buffer is returned.
-     * Otherwise, the stream is read to the end and buffered (with the buffer
-     * growing as necessary), then the appropriate position in the buffer is
-     * set to read from.
-     * 
-     * @return the next character in the resulting stream, or -1
-     * if the end of the resulting stream has been reached
-     * 
-     * @exception IOException if the underlying stream throws an IOException
-     * during reading     
-     */
-    public final int read() throws IOException {
-        if (!getInitialized()) {
-            initialize();
-            setInitialized(true);
-        }
-
-        if (!completedReadAhead) {
-            int ch = -1;
-            while ((ch = in.read()) != -1) {
-                if (buffer.length == bufferPos) {
-                    if (returnedCharPos != -1) {
-                        final char[] tmpBuffer = new char[buffer.length];
-                        System.arraycopy(buffer, returnedCharPos + 1, tmpBuffer,
-                                         0, buffer.length - (returnedCharPos + 1));
-                        buffer = tmpBuffer;
-                        bufferPos = bufferPos - (returnedCharPos + 1);
-                        returnedCharPos = -1;
-                    } else {
-                        final char[] tmpBuffer = new char[buffer.length * 2];
-                        System.arraycopy(buffer, 0, tmpBuffer, 0, bufferPos);
-                        buffer = tmpBuffer;
-                    }
-                }
-
-                if (ch == '\n' || ch == -1) {
-                    ++linesRead;
-
-                    if (linesRead == lines) {
-                        int i = 0;
-                        for (i = returnedCharPos + 1;
-                            buffer[i] != 0 && buffer[i] != '\n'; i++) {
-                        }
-                        returnedCharPos = i;
-                        --linesRead;
-                    }
-                }
-                if (ch == -1) {
-                    break;
-                }
-
-                buffer[bufferPos] = (char) ch;
-                bufferPos++;
-            }
-            completedReadAhead = true;
-        }
-
-        ++returnedCharPos;
-        if (returnedCharPos >= bufferPos) {
-            return -1;
-        } else {
-            return buffer[returnedCharPos];
-        }
-    }
-
-    /**
-     * Sets the number of lines to be returned in the filtered stream.
-     * 
-     * @param lines the number of lines to be returned in the filtered stream
-     */
-    public final void setLines(final long lines) {
-        this.lines = lines;
-    }
-
-    /**
-     * Returns the number of lines to be returned in the filtered stream.
-     * 
-     * @return the number of lines to be returned in the filtered stream
-     */
-    private final long getLines() {
-        return lines;
-    }
-
-    /**
-     * Creates a new TailFilter using the passed in
-     * Reader for instantiation.
-     * 
-     * @param rdr A Reader object providing the underlying stream.
-     *            Must not be <code>null</code>.
-     * 
-     * @return a new filter based on this configuration, but filtering
-     *         the specified reader
-     */
-    public final Reader chain(final Reader rdr) {
-        TailFilter newFilter = new TailFilter(rdr);
-        newFilter.setLines(getLines());
-        newFilter.setInitialized(true);
-        return newFilter;
-    }
-
-    /**
-     * Scans the parameters list for the "lines" parameter and uses
-     * it to set the number of lines to be returned in the filtered stream.
-     */
-    private final void initialize() {
-        Parameter[] params = getParameters();
-        if (params != null) {
-            for (int i = 0; i < params.length; i++) {
-                if (LINES_KEY.equals(params[i].getName())) {
-                    setLines(new Long(params[i].getValue()).longValue());
-                    break;
-                }
-            }
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/filters/util/ChainReaderHelper.java b/src/main/org/apache/tools/ant/filters/util/ChainReaderHelper.java
deleted file mode 100644
index 99ac8a8..0000000
--- a/src/main/org/apache/tools/ant/filters/util/ChainReaderHelper.java
+++ /dev/null
@@ -1,235 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.filters.util;
-
-import org.apache.tools.ant.AntClassLoader;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.filters.BaseFilterReader;
-import org.apache.tools.ant.filters.ChainableReader;
-import org.apache.tools.ant.types.AntFilterReader;
-import org.apache.tools.ant.types.FilterChain;
-import org.apache.tools.ant.types.Path;
-import org.apache.tools.ant.types.Parameter;
-import org.apache.tools.ant.types.Parameterizable;
-import org.apache.tools.ant.util.FileUtils;
-
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
-import java.io.FilterReader;
-import java.io.Reader;
-import java.io.IOException;
-import java.util.Vector;
-
-/**
- * Process a FilterReader chain.
- *
- * @author <a href="mailto:umagesh@apache.org">Magesh Umasankar</a>
- */
-public final class ChainReaderHelper {
-
-    /**
-     * The primary reader to which the reader chain is to be attached.
-     */
-    public Reader primaryReader;
-
-    /**
-     * The size of the buffer to be used.
-     */
-    public int bufferSize = 8192;
-
-    /**
-     * Chain of filters
-     */
-    public Vector filterChains = new Vector();
-
-    /** The Ant project */
-    private Project project = null;
-
-    /**
-     * Sets the primary reader
-     */
-    public final void setPrimaryReader(Reader rdr) {
-        primaryReader = rdr;
-    }
-
-    /**
-     * Set the project to work with
-     */
-    public final void setProject(final Project project) {
-        this.project = project;
-    }
-
-    /**
-     * Get the project
-     */
-    public final Project getProject() {
-        return project;
-    }
-
-    /**
-     * Sets the buffer size to be used.  Defaults to 4096,
-     * if this method is not invoked.
-     */
-    public final void setBufferSize(int size) {
-        bufferSize = size;
-    }
-
-    /**
-     * Sets the collection of filter reader sets
-     */
-    public final void setFilterChains(Vector fchain) {
-        filterChains = fchain;
-    }
-
-    /**
-     * Assemble the reader
-     */
-    public final Reader getAssembledReader() throws BuildException {
-        if (primaryReader == null) {
-            throw new BuildException("primaryReader must not be null.");
-        }
-
-        Reader instream = primaryReader;
-        final int filterReadersCount = filterChains.size();
-        final Vector finalFilters = new Vector();
-
-        for (int i = 0; i < filterReadersCount; i++) {
-            final FilterChain filterchain =
-                (FilterChain) filterChains.elementAt(i);
-            final Vector filterReaders = filterchain.getFilterReaders();
-            final int readerCount = filterReaders.size();
-            for (int j = 0; j < readerCount; j++) {
-                finalFilters.addElement(filterReaders.elementAt(j));
-            }
-        }
-
-        final int filtersCount = finalFilters.size();
-
-        if (filtersCount > 0) {
-            for (int i = 0; i < filtersCount; i++) {
-                Object o = finalFilters.elementAt(i);
-
-                if (o instanceof AntFilterReader) {
-                    final AntFilterReader filter = (AntFilterReader) finalFilters.elementAt(i);
-                    final String className = filter.getClassName();
-                    final Path classpath = filter.getClasspath();
-                    final Project project = filter.getProject();
-                    if (className != null) {
-                        try {
-                            Class clazz = null;
-                            if (classpath == null) {
-                                clazz = Class.forName(className);
-                            } else {
-                                AntClassLoader al = new AntClassLoader(project,
-                                                                       classpath);
-                                clazz = al.loadClass(className);
-                                AntClassLoader.initializeClass(clazz);
-                            }
-                            if (clazz != null) {
-                                if (!FilterReader.class.isAssignableFrom(clazz)) {
-                                    throw new BuildException(className +
-                                        " does not extend java.io.FilterReader");
-                                }
-                                final Constructor[] constructors =
-                                    clazz.getConstructors();
-                                int j = 0;
-                                for (; j < constructors.length; j++) {
-                                    Class[] types = constructors[j]
-                                                      .getParameterTypes();
-                                    if (types.length == 1 &&
-                                        types[0].isAssignableFrom(Reader.class)) {
-                                        break;
-                                    }
-                                }
-                                final Reader[] rdr = {instream};
-                                instream =
-                                    (Reader) constructors[j].newInstance(rdr);
-                                if (Parameterizable.class.isAssignableFrom(clazz)) {
-                                    final Parameter[] params = filter.getParams();
-                                    ((Parameterizable)
-                                        instream).setParameters(params);
-                                }
-                            }
-                        } catch (final ClassNotFoundException cnfe) {
-                            throw new BuildException(cnfe);
-                        } catch (final InstantiationException ie) {
-                            throw new BuildException(ie);
-                        } catch (final IllegalAccessException iae) {
-                            throw new BuildException(iae);
-                        } catch (final InvocationTargetException ite) {
-                            throw new BuildException(ite);
-                        }
-                    }
-                } else if (o instanceof ChainableReader &&
-                           o instanceof Reader) {
-                    if (project != null && o instanceof BaseFilterReader) {
-                        ((BaseFilterReader) o).setProject(project);
-                    }
-                    instream = ((ChainableReader) o).chain(instream);
-                }
-            }
-        }
-        return instream;
-    }
-
-    /**
-     * Read data from the reader and return the
-     * contents as a string.
-     */
-    public final String readFully(Reader rdr)
-        throws IOException {
-        return FileUtils.readFully(rdr, bufferSize);
-    }
-}
diff --git a/src/main/org/apache/tools/ant/filters/util/JavaClassHelper.java b/src/main/org/apache/tools/ant/filters/util/JavaClassHelper.java
deleted file mode 100644
index 9b17f37..0000000
--- a/src/main/org/apache/tools/ant/filters/util/JavaClassHelper.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.filters.util;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-
-import org.apache.bcel.classfile.ClassParser;
-import org.apache.bcel.classfile.ConstantValue;
-import org.apache.bcel.classfile.Field;
-import org.apache.bcel.classfile.JavaClass;
-
-/**
- * Helper class that filters constants from a Java Class
- *
- * @author <a href="mailto:umagesh@apache.org">Magesh Umasankar</a>
- */
-public final class JavaClassHelper {
-
-    /** System specific line separator. */
-    private static final String LS = System.getProperty("line.separator");
-
-    /**
-     * Get the constants declared in a file as name=value
-     */
-    public static final StringBuffer getConstants(byte[] bytes)
-        throws IOException {
-        final StringBuffer sb = new StringBuffer();
-        final ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
-        final ClassParser parser = new ClassParser(bis, "");
-        final JavaClass javaClass = parser.parse();
-        final Field[] fields = javaClass.getFields();
-        for (int i = 0; i < fields.length; i++) {
-            final Field field = fields[i];
-            if (field != null) {
-                final ConstantValue cv = field.getConstantValue();
-                if (cv != null) {
-                    String cvs = cv.toString();
-                    //Remove start and end quotes if field is a String
-                    if (cvs.startsWith("\"") && cvs.endsWith("\"")) {
-                        cvs = cvs.substring(1, cvs.length() - 1);
-                    }
-                    sb.append(field.getName());
-                    sb.append('=');
-                    sb.append(cvs);
-                    sb.append(LS);
-                }
-            }
-        }
-        return sb;
-    }
-}
diff --git a/src/main/org/apache/tools/ant/helper/ProjectHelperImpl.java b/src/main/org/apache/tools/ant/helper/ProjectHelperImpl.java
deleted file mode 100644
index a611374..0000000
--- a/src/main/org/apache/tools/ant/helper/ProjectHelperImpl.java
+++ /dev/null
@@ -1,1155 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.helper;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.util.Locale;
-import org.xml.sax.Locator;
-import org.xml.sax.InputSource;
-import org.xml.sax.HandlerBase;
-import org.xml.sax.SAXException;
-import org.xml.sax.SAXParseException;
-import org.xml.sax.DocumentHandler;
-import org.xml.sax.AttributeList;
-import org.xml.sax.helpers.XMLReaderAdapter;
-import org.apache.tools.ant.ProjectHelper;
-import org.apache.tools.ant.UnknownElement;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Target;
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.RuntimeConfigurable;
-import org.apache.tools.ant.IntrospectionHelper;
-import org.apache.tools.ant.TaskContainer;
-import org.apache.tools.ant.Location;
-import org.apache.tools.ant.TaskAdapter;
-import org.apache.tools.ant.util.JAXPUtils;
-
-/**
- * Original helper.
- *
- * @author duncan@x180.com
- */
-public class ProjectHelperImpl extends ProjectHelper {
-
-    /**
-     * SAX 1 style parser used to parse the given file. This may
-     * in fact be a SAX 2 XMLReader wrapped in an XMLReaderAdapter.
-     */
-    private org.xml.sax.Parser parser;
-
-    /** The project to configure. */
-    private Project project;
-    /** The configuration file to parse. */
-    private File buildFile;
-    /**
-     * Parent directory of the build file. Used for resolving entities
-     * and setting the project's base directory.
-     */
-    private File buildFileParent;
-    /**
-     * Locator for the configuration file parser.
-     * Used for giving locations of errors etc.
-     */
-    private Locator locator;
-
-    /**
-     * Parses the project file, configuring the project as it goes.
-     *
-     * @param project project instance to be configured.
-     * @param source the source from which the project is read.
-     * @exception BuildException if the configuration is invalid or cannot
-     *                           be read.
-     */
-    public void parse(Project project, Object source) throws BuildException {
-        if (!(source instanceof File)) {
-            throw new BuildException("Only File source supported by default plugin");
-        }
-        File buildFile = (File) source;
-        FileInputStream inputStream = null;
-        InputSource inputSource = null;
-
-        this.project = project;
-        this.buildFile = new File(buildFile.getAbsolutePath());
-        buildFileParent = new File(this.buildFile.getParent());
-
-        try {
-            try {
-                parser = JAXPUtils.getParser();
-            } catch (BuildException e) {
-                parser = new XMLReaderAdapter(JAXPUtils.getXMLReader());
-            }
-
-
-            String uri = "file:" + buildFile.getAbsolutePath().replace('\\', '/');
-            for (int index = uri.indexOf('#'); index != -1; index = uri.indexOf('#')) {
-                uri = uri.substring(0, index) + "%23" + uri.substring(index + 1);
-            }
-
-            inputStream = new FileInputStream(buildFile);
-            inputSource = new InputSource(inputStream);
-            inputSource.setSystemId(uri);
-            project.log("parsing buildfile " + buildFile + " with URI = "
-                + uri, Project.MSG_VERBOSE);
-            HandlerBase hb = new RootHandler(this);
-            parser.setDocumentHandler(hb);
-            parser.setEntityResolver(hb);
-            parser.setErrorHandler(hb);
-            parser.setDTDHandler(hb);
-            parser.parse(inputSource);
-        } catch (SAXParseException exc) {
-            Location location =
-                new Location(buildFile.toString(), exc.getLineNumber(),
-                    exc.getColumnNumber());
-
-            Throwable t = exc.getException();
-            if (t instanceof BuildException) {
-                BuildException be = (BuildException) t;
-                if (be.getLocation() == Location.UNKNOWN_LOCATION) {
-                    be.setLocation(location);
-                }
-                throw be;
-            }
-
-            throw new BuildException(exc.getMessage(), t, location);
-        } catch (SAXException exc) {
-            Throwable t = exc.getException();
-            if (t instanceof BuildException) {
-                throw (BuildException) t;
-            }
-            throw new BuildException(exc.getMessage(), t);
-        } catch (FileNotFoundException exc) {
-            throw new BuildException(exc);
-        } catch (UnsupportedEncodingException exc) {
-            throw new BuildException("Encoding of project file is invalid.",
-                                     exc);
-        } catch (IOException exc) {
-            throw new BuildException("Error reading project file: "
-                                     + exc.getMessage(), exc);
-        } finally {
-            if (inputStream != null) {
-                try {
-                    inputStream.close();
-                } catch (IOException ioe) {
-                    // ignore this
-                }
-            }
-        }
-    }
-
-    /**
-     * The common superclass for all SAX event handlers used to parse
-     * the configuration file. Each method just throws an exception,
-     * so subclasses should override what they can handle.
-     *
-     * Each type of XML element (task, target, etc.) in Ant has
-     * a specific subclass.
-     *
-     * In the constructor, this class takes over the handling of SAX
-     * events from the parent handler and returns
-     * control back to the parent in the endElement method.
-     */
-    static class AbstractHandler extends HandlerBase {
-
-        /**
-         * Previous handler for the document.
-         * When the next element is finished, control returns
-         * to this handler.
-         */
-        protected DocumentHandler parentHandler;
-
-        /** Helper impl. With non-static internal classes, the compiler will generate
-            this automatically - but this will fail with some compilers ( reporting
-            "Expecting to find object/array on stack" ). If we pass it
-            explicitely it'll work with more compilers.
-        */
-        ProjectHelperImpl helperImpl;
-
-        /**
-         * Creates a handler and sets the parser to use it
-         * for the current element.
-         *
-         * @param helperImpl the ProjectHelperImpl instance associated
-         *                   with this handler.
-         *
-         * @param parentHandler The handler which should be restored to the
-         *                      parser at the end of the element.
-         *                      Must not be <code>null</code>.
-         */
-        public AbstractHandler(ProjectHelperImpl helperImpl, DocumentHandler parentHandler) {
-            this.parentHandler = parentHandler;
-            this.helperImpl = helperImpl;
-
-            // Start handling SAX events
-            helperImpl.parser.setDocumentHandler(this);
-        }
-
-        /**
-         * Handles the start of an element. This base implementation just
-         * throws an exception.
-         *
-         * @param tag The name of the element being started.
-         *            Will not be <code>null</code>.
-         * @param attrs Attributes of the element being started.
-         *              Will not be <code>null</code>.
-         *
-         * @exception SAXParseException if this method is not overridden, or in
-         *                              case of error in an overridden version
-         */
-        public void startElement(String tag, AttributeList attrs) throws SAXParseException {
-            throw new SAXParseException("Unexpected element \"" + tag + "\"", helperImpl.locator);
-        }
-
-        /**
-         * Handles text within an element. This base implementation just
-         * throws an exception.
-         *
-         * @param buf A character array of the text within the element.
-         *            Will not be <code>null</code>.
-         * @param start The start element in the array.
-         * @param count The number of characters to read from the array.
-         *
-         * @exception SAXParseException if this method is not overridden, or in
-         *                              case of error in an overridden version
-         */
-        public void characters(char[] buf, int start, int count) throws SAXParseException {
-            String s = new String(buf, start, count).trim();
-
-            if (s.length() > 0) {
-                throw new SAXParseException("Unexpected text \"" + s + "\"", helperImpl.locator);
-            }
-        }
-
-        /**
-         * Called when this element and all elements nested into it have been
-         * handled.
-         */
-        protected void finished() {}
-
-        /**
-         * Handles the end of an element. Any required clean-up is performed
-         * by the finished() method and then the original handler is restored to
-         * the parser.
-         *
-         * @param name The name of the element which is ending.
-         *             Will not be <code>null</code>.
-         *
-         * @exception SAXException in case of error (not thrown in
-         *                         this implementation)
-         *
-         * @see #finished()
-         */
-        public void endElement(String name) throws SAXException {
-
-            finished();
-            // Let parent resume handling SAX events
-            helperImpl.parser.setDocumentHandler(parentHandler);
-        }
-    }
-
-    /**
-     * Handler for the root element. Its only child must be the "project" element.
-     */
-    static class RootHandler extends HandlerBase {
-        ProjectHelperImpl helperImpl;
-
-        public RootHandler(ProjectHelperImpl helperImpl) {
-            this.helperImpl = helperImpl;
-        }
-
-        /**
-         * Resolves file: URIs relative to the build file.
-         *
-         * @param publicId The public identifer, or <code>null</code>
-         *                 if none is available. Ignored in this
-         *                 implementation.
-         * @param systemId The system identifier provided in the XML
-         *                 document. Will not be <code>null</code>.
-         */
-        public InputSource resolveEntity(String publicId,
-                                         String systemId) {
-
-            helperImpl.project.log("resolving systemId: " + systemId, Project.MSG_VERBOSE);
-
-            if (systemId.startsWith("file:")) {
-                String path = systemId.substring(5);
-                int index = path.indexOf("file:");
-
-                // we only have to handle these for backward compatibility
-                // since they are in the FAQ.
-                while (index != -1) {
-                    path = path.substring(0, index) + path.substring(index + 5);
-                    index = path.indexOf("file:");
-                }
-
-                String entitySystemId = path;
-                index = path.indexOf("%23");
-                // convert these to #
-                while (index != -1) {
-                    path = path.substring(0, index) + "#" + path.substring(index + 3);
-                    index = path.indexOf("%23");
-                }
-
-                File file = new File(path);
-                if (!file.isAbsolute()) {
-                    file = new File(helperImpl.buildFileParent, path);
-                }
-
-                try {
-                    InputSource inputSource = new InputSource(new FileInputStream(file));
-                    inputSource.setSystemId("file:" + entitySystemId);
-                    return inputSource;
-                } catch (FileNotFoundException fne) {
-                    helperImpl.project.log(file.getAbsolutePath() + " could not be found",
-                                Project.MSG_WARN);
-                }
-            }
-            // use default if not file or file not found
-            return null;
-        }
-
-        /**
-         * Handles the start of a project element. A project handler is created
-         * and initialised with the element name and attributes.
-         *
-         * @param tag The name of the element being started.
-         *            Will not be <code>null</code>.
-         * @param attrs Attributes of the element being started.
-         *              Will not be <code>null</code>.
-         *
-         * @exception SAXParseException if the tag given is not
-         *                              <code>"project"</code>
-         */
-        public void startElement(String tag, AttributeList attrs) throws SAXParseException {
-            if (tag.equals("project")) {
-                new ProjectHandler(helperImpl, this).init(tag, attrs);
-            } else {
-                throw new SAXParseException("Config file is not of expected XML type", helperImpl.locator);
-            }
-        }
-
-        /**
-         * Sets the locator in the project helper for future reference.
-         *
-         * @param locator The locator used by the parser.
-         *                Will not be <code>null</code>.
-         */
-        public void setDocumentLocator(Locator locator) {
-            helperImpl.locator = locator;
-        }
-    }
-
-    /**
-     * Handler for the top level "project" element.
-     */
-    static class ProjectHandler extends AbstractHandler {
-
-        /**
-         * Constructor which just delegates to the superconstructor.
-         *
-         * @param parentHandler The handler which should be restored to the
-         *                      parser at the end of the element.
-         *                      Must not be <code>null</code>.
-         */
-        public ProjectHandler(ProjectHelperImpl helperImpl, DocumentHandler parentHandler) {
-            super(helperImpl, parentHandler);
-        }
-
-        /**
-         * Initialisation routine called after handler creation
-         * with the element name and attributes. The attributes which
-         * this handler can deal with are: <code>"default"</code>,
-         * <code>"name"</code>, <code>"id"</code> and <code>"basedir"</code>.
-         *
-         * @param tag Name of the element which caused this handler
-         *            to be created. Should not be <code>null</code>.
-         *            Ignored in this implementation.
-         * @param attrs Attributes of the element which caused this
-         *              handler to be created. Must not be <code>null</code>.
-         *
-         * @exception SAXParseException if an unexpected attribute is
-         *            encountered or if the <code>"default"</code> attribute
-         *            is missing.
-         */
-        public void init(String tag, AttributeList attrs) throws SAXParseException {
-            String def = null;
-            String name = null;
-            String id = null;
-            String baseDir = null;
-
-            for (int i = 0; i < attrs.getLength(); i++) {
-                String key = attrs.getName(i);
-                String value = attrs.getValue(i);
-
-                if (key.equals("default")) {
-                    def = value;
-                } else if (key.equals("name")) {
-                    name = value;
-                } else if (key.equals("id")) {
-                    id = value;
-                } else if (key.equals("basedir")) {
-                    baseDir = value;
-                } else {
-                    throw new SAXParseException("Unexpected attribute \"" + attrs.getName(i) + "\"",
-                                                helperImpl.locator);
-                }
-            }
-
-            if (def == null) {
-                helperImpl.project.setDefaultTarget("main");
-            } else {
-                helperImpl.project.setDefaultTarget(def);
-            }
-
-            if (name != null) {
-                helperImpl.project.setName(name);
-                helperImpl.project.addReference(name, helperImpl.project);
-            }
-
-            if (id != null) {
-              helperImpl.project.addReference(id, helperImpl.project);
-            }
-
-            if (helperImpl.project.getProperty("basedir") != null) {
-                helperImpl.project.setBasedir(helperImpl.project.getProperty("basedir"));
-            } else {
-                if (baseDir == null) {
-                    helperImpl.project.setBasedir(helperImpl.buildFileParent.getAbsolutePath());
-                } else {
-                    // check whether the user has specified an absolute path
-                    if ((new File(baseDir)).isAbsolute()) {
-                        helperImpl.project.setBasedir(baseDir);
-                    } else {
-                        helperImpl.project.setBaseDir(helperImpl.project.resolveFile(baseDir,
-                                                                                     helperImpl.buildFileParent));
-                    }
-                }
-            }
-
-        }
-
-        /**
-         * Handles the start of a top-level element within the project. An
-         * appropriate handler is created and initialised with the details
-         * of the element.
-         *
-         * @param name The name of the element being started.
-         *            Will not be <code>null</code>.
-         * @param attrs Attributes of the element being started.
-         *              Will not be <code>null</code>.
-         *
-         * @exception SAXParseException if the tag given is not
-         *            <code>"taskdef"</code>, <code>"typedef"</code>,
-         *            <code>"property"</code>, <code>"target"</code>
-         *            or a data type definition
-         */
-        public void startElement(String name, AttributeList attrs) throws SAXParseException {
-            if (name.equals("taskdef")) {
-                handleTaskdef(name, attrs);
-            } else if (name.equals("typedef")) {
-                handleTypedef(name, attrs);
-            } else if (name.equals("property")) {
-                handleProperty(name, attrs);
-            } else if (name.equals("target")) {
-                handleTarget(name, attrs);
-            } else if (helperImpl.project.getDataTypeDefinitions().get(name) != null) {
-                handleDataType(name, attrs);
-            } else {
-                throw new SAXParseException("Unexpected element \"" + name + "\"", helperImpl.locator);
-            }
-        }
-
-        /**
-         * Handles a task defintion element by creating a task handler
-         * and initialising is with the details of the element.
-         *
-         * @param name The name of the element to be handled.
-         *            Will not be <code>null</code>.
-         * @param attrs Attributes of the element to be handled.
-         *              Will not be <code>null</code>.
-         *
-         * @exception SAXParseException if an error occurs when initialising
-         *                              the task handler
-         *
-         */
-        private void handleTaskdef(String name, AttributeList attrs) throws SAXParseException {
-            (new TaskHandler(helperImpl, this, null, null, null)).init(name, attrs);
-        }
-
-        /**
-         * Handles a type defintion element by creating a task handler
-         * and initialising is with the details of the element.
-         *
-         * @param name The name of the element to be handled.
-         *            Will not be <code>null</code>.
-         * @param attrs Attributes of the element to be handled.
-         *              Will not be <code>null</code>.
-         *
-         * @exception SAXParseException if an error occurs initialising the
-         *                              handler
-         */
-        private void handleTypedef(String name, AttributeList attrs) throws SAXParseException {
-            (new TaskHandler(helperImpl, this, null, null, null)).init(name, attrs);
-        }
-
-        /**
-         * Handles a property defintion element by creating a task handler
-         * and initialising is with the details of the element.
-         *
-         * @param name The name of the element to be handled.
-         *            Will not be <code>null</code>.
-         * @param attrs Attributes of the element to be handled.
-         *              Will not be <code>null</code>.
-         *
-         * @exception SAXParseException if an error occurs initialising
-         *                              the handler
-         */
-        private void handleProperty(String name, AttributeList attrs) throws SAXParseException {
-            (new TaskHandler(helperImpl, this, null, null, null)).init(name, attrs);
-        }
-
-        /**
-         * Handles a target defintion element by creating a target handler
-         * and initialising is with the details of the element.
-         *
-         * @param tag The name of the element to be handled.
-         *            Will not be <code>null</code>.
-         * @param attrs Attributes of the element to be handled.
-         *              Will not be <code>null</code>.
-         *
-         * @exception SAXParseException if an error occurs initialising
-         *                              the handler
-         */
-        private void handleTarget(String tag, AttributeList attrs) throws SAXParseException {
-            new TargetHandler(helperImpl, this).init(tag, attrs);
-        }
-        /**
-         * Handles a data type defintion element by creating a data type
-         * handler and initialising is with the details of the element.
-         *
-         * @param name The name of the element to be handled.
-         *            Will not be <code>null</code>.
-         * @param attrs Attributes of the element to be handled.
-         *              Will not be <code>null</code>.
-         *
-         * @exception SAXParseException if an error occurs initialising
-         *                              the handler
-         */
-        private void handleDataType(String name, AttributeList attrs) throws SAXParseException {
-            new DataTypeHandler(helperImpl, this).init(name, attrs);
-        }
-
-    }
-
-    /**
-     * Handler for "target" elements.
-     */
-    static class TargetHandler extends AbstractHandler {
-        private Target target;
-
-        /**
-         * Constructor which just delegates to the superconstructor.
-         *
-         * @param parentHandler The handler which should be restored to the
-         *                      parser at the end of the element.
-         *                      Must not be <code>null</code>.
-         */
-        public TargetHandler(ProjectHelperImpl helperImpl, DocumentHandler parentHandler) {
-            super(helperImpl, parentHandler);
-        }
-
-        /**
-         * Initialisation routine called after handler creation
-         * with the element name and attributes. The attributes which
-         * this handler can deal with are: <code>"name"</code>,
-         * <code>"depends"</code>, <code>"if"</code>,
-         * <code>"unless"</code>, <code>"id"</code> and
-         * <code>"description"</code>.
-         *
-         * @param tag Name of the element which caused this handler
-         *            to be created. Should not be <code>null</code>.
-         *            Ignored in this implementation.
-         * @param attrs Attributes of the element which caused this
-         *              handler to be created. Must not be <code>null</code>.
-         *
-         * @exception SAXParseException if an unexpected attribute is encountered
-         *            or if the <code>"name"</code> attribute is missing.
-         */
-        public void init(String tag, AttributeList attrs) throws SAXParseException {
-            String name = null;
-            String depends = "";
-            String ifCond = null;
-            String unlessCond = null;
-            String id = null;
-            String description = null;
-
-            for (int i = 0; i < attrs.getLength(); i++) {
-                String key = attrs.getName(i);
-                String value = attrs.getValue(i);
-
-                if (key.equals("name")) {
-                    name = value;
-                } else if (key.equals("depends")) {
-                    depends = value;
-                } else if (key.equals("if")) {
-                    ifCond = value;
-                } else if (key.equals("unless")) {
-                    unlessCond = value;
-                } else if (key.equals("id")) {
-                    id = value;
-                } else if (key.equals("description")) {
-                    description = value;
-                } else {
-                    throw new SAXParseException("Unexpected attribute \"" + key + "\"", helperImpl.locator);
-                }
-            }
-
-            if (name == null) {
-                throw new SAXParseException("target element appears without a name attribute",
-                                            helperImpl.locator);
-            }
-
-            target = new Target();
-            target.setName(name);
-            target.setIf(ifCond);
-            target.setUnless(unlessCond);
-            target.setDescription(description);
-            helperImpl.project.addTarget(name, target);
-
-            if (id != null && !id.equals("")) {
-                helperImpl.project.addReference(id, target);
-            }
-
-            // take care of dependencies
-
-            if (depends.length() > 0) {
-                target.setDepends(depends);
-            }
-        }
-
-        /**
-         * Handles the start of an element within a target.
-         *
-         * @param name The name of the element being started.
-         *            Will not be <code>null</code>.
-         * @param attrs Attributes of the element being started.
-         *              Will not be <code>null</code>.
-         *
-         * @exception SAXParseException if an error occurs when initialising
-         *                              the appropriate child handler
-         */
-        public void startElement(String name, AttributeList attrs) throws SAXParseException {
-            if (helperImpl.project.getDataTypeDefinitions().get(name) != null) {
-                new DataTypeHandler(helperImpl, this, target).init(name, attrs);
-            } else {
-                new TaskHandler(helperImpl, this, target, null, target).init(name, attrs);
-            }
-        }
-    }
-
-    /**
-     * Handler for all task elements.
-     */
-    static class TaskHandler extends AbstractHandler {
-        /** Containing target, if any. */
-        private Target target;
-        /**
-         * Container for the task, if any. If target is
-         * non-<code>null</code>, this must be too.
-         */
-        private TaskContainer container;
-        /**
-         * Task created by this handler.
-         */
-        private Task task;
-        /**
-         * Wrapper for the parent element, if any. The wrapper for this
-         * element will be added to this wrapper as a child.
-         */
-        private RuntimeConfigurable parentWrapper;
-        /**
-         * Wrapper for this element which takes care of actually configuring
-         * the element, if this element is contained within a target.
-         * Otherwise the configuration is performed with the configure method.
-         * @see ProjectHelper#configure(Object,AttributeList,Project)
-         */
-        private RuntimeConfigurable wrapper = null;
-
-        /**
-         * Constructor.
-         *
-         * @param parentHandler The handler which should be restored to the
-         *                      parser at the end of the element.
-         *                      Must not be <code>null</code>.
-         *
-         * @param container     Container for the element.
-         *                      May be <code>null</code> if the target is
-         *                      <code>null</code> as well. If the
-         *                      target is <code>null</code>, this parameter
-         *                      is effectively ignored.
-         *
-         * @param parentWrapper Wrapper for the parent element, if any.
-         *                      May be <code>null</code>. If the
-         *                      target is <code>null</code>, this parameter
-         *                      is effectively ignored.
-         *
-         * @param target        Target this element is part of.
-         *                      May be <code>null</code>.
-         */
-        public TaskHandler(ProjectHelperImpl helperImpl, DocumentHandler parentHandler,
-                           TaskContainer container, RuntimeConfigurable parentWrapper, Target target) {
-            super(helperImpl, parentHandler);
-            this.container = container;
-            this.parentWrapper = parentWrapper;
-            this.target = target;
-        }
-
-        /**
-         * Initialisation routine called after handler creation
-         * with the element name and attributes. This configures
-         * the element with its attributes and sets it up with
-         * its parent container (if any). Nested elements are then
-         * added later as the parser encounters them.
-         *
-         * @param tag Name of the element which caused this handler
-         *            to be created. Must not be <code>null</code>.
-         *
-         * @param attrs Attributes of the element which caused this
-         *              handler to be created. Must not be <code>null</code>.
-         *
-         * @exception SAXParseException in case of error (not thrown in
-         *                              this implementation)
-         */
-        public void init(String tag, AttributeList attrs) throws SAXParseException {
-            try {
-                task = helperImpl.project.createTask(tag);
-            } catch (BuildException e) {
-                // swallow here, will be thrown again in
-                // UnknownElement.maybeConfigure if the problem persists.
-            }
-
-            if (task == null) {
-                task = new UnknownElement(tag);
-                task.setProject(helperImpl.project);
-                //XXX task.setTaskType(tag);
-                task.setTaskName(tag);
-            }
-
-            task.setLocation(new Location(helperImpl.buildFile.toString(), helperImpl.locator.getLineNumber(),
-                                          helperImpl.locator.getColumnNumber()));
-            helperImpl.configureId(task, attrs);
-
-            // Top level tasks don't have associated targets
-            if (target != null) {
-                task.setOwningTarget(target);
-                container.addTask(task);
-                task.init();
-                wrapper = task.getRuntimeConfigurableWrapper();
-                wrapper.setAttributes(attrs);
-                if (parentWrapper != null) {
-                    parentWrapper.addChild(wrapper);
-                }
-            } else {
-                task.init();
-                configure(task, attrs, helperImpl.project);
-            }
-        }
-
-        /**
-         * Executes the task if it is a top-level one.
-         */
-        protected void finished() {
-            if (task != null && target == null) {
-                task.execute();
-            }
-        }
-
-        /**
-         * Adds text to the task, using the wrapper if one is
-         * available (in other words if the task is within a target)
-         * or using addText otherwise.
-         *
-         * @param buf A character array of the text within the element.
-         *            Will not be <code>null</code>.
-         * @param start The start element in the array.
-         * @param count The number of characters to read from the array.
-         *
-         * @exception SAXParseException if the element doesn't support text
-         *
-         * @see ProjectHelper#addText(Project,Object,char[],int,int)
-         */
-        public void characters(char[] buf, int start, int count) throws SAXParseException {
-            if (wrapper == null) {
-                try {
-                    ProjectHelper.addText(helperImpl.project, task, buf, start, count);
-                } catch (BuildException exc) {
-                    throw new SAXParseException(exc.getMessage(), helperImpl.locator, exc);
-                }
-            } else {
-                wrapper.addText(buf, start, count);
-            }
-        }
-
-        /**
-         * Handles the start of an element within a target. Task containers
-         * will always use another task handler, and all other tasks
-         * will always use a nested element handler.
-         *
-         * @param name The name of the element being started.
-         *            Will not be <code>null</code>.
-         * @param attrs Attributes of the element being started.
-         *              Will not be <code>null</code>.
-         *
-         * @exception SAXParseException if an error occurs when initialising
-         *                              the appropriate child handler
-         */
-        public void startElement(String name, AttributeList attrs) throws SAXParseException {
-            if (task instanceof TaskContainer) {
-                // task can contain other tasks - no other nested elements possible
-                new TaskHandler(helperImpl, this, (TaskContainer) task,
-                    wrapper, target).init(name, attrs);
-            } else {
-                new NestedElementHandler(helperImpl, this, task,
-                    wrapper, target).init(name, attrs);
-            }
-        }
-    }
-
-    /**
-     * Handler for all nested properties.
-     */
-    static class NestedElementHandler extends AbstractHandler {
-        /** Parent object (task/data type/etc). */
-        private Object parent;
-        /** The nested element itself. */
-        private Object child;
-        /**
-         * Wrapper for the parent element, if any. The wrapper for this
-         * element will be added to this wrapper as a child.
-         */
-        private RuntimeConfigurable parentWrapper;
-        /**
-         * Wrapper for this element which takes care of actually configuring
-         * the element, if a parent wrapper is provided.
-         * Otherwise the configuration is performed with the configure method.
-         * @see ProjectHelper#configure(Object,AttributeList,Project)
-         */
-        private RuntimeConfigurable childWrapper = null;
-        /** Target this element is part of, if any. */
-        private Target target;
-
-        /**
-         * Constructor.
-         *
-         * @param parentHandler The handler which should be restored to the
-         *                      parser at the end of the element.
-         *                      Must not be <code>null</code>.
-         *
-         * @param parent        Parent of this element (task/data type/etc).
-         *                      Must not be <code>null</code>.
-         *
-         * @param parentWrapper Wrapper for the parent element, if any.
-         *                      May be <code>null</code>.
-         *
-         * @param target        Target this element is part of.
-         *                      May be <code>null</code>.
-         */
-        public NestedElementHandler(ProjectHelperImpl helperImpl,
-                                    DocumentHandler parentHandler,
-                                    Object parent,
-                                    RuntimeConfigurable parentWrapper,
-                                    Target target) {
-            super(helperImpl, parentHandler);
-
-            if (parent instanceof TaskAdapter) {
-                this.parent = ((TaskAdapter) parent).getProxy();
-            } else {
-                this.parent = parent;
-            }
-            this.parentWrapper = parentWrapper;
-            this.target = target;
-        }
-
-        /**
-         * Initialisation routine called after handler creation
-         * with the element name and attributes. This configures
-         * the element with its attributes and sets it up with
-         * its parent container (if any). Nested elements are then
-         * added later as the parser encounters them.
-         *
-         * @param propType Name of the element which caused this handler
-         *            to be created. Must not be <code>null</code>.
-         *
-         * @param attrs Attributes of the element which caused this
-         *              handler to be created. Must not be <code>null</code>.
-         *
-         * @exception SAXParseException in case of error, such as a
-         *            BuildException being thrown during configuration.
-         */
-        public void init(String propType, AttributeList attrs) throws SAXParseException {
-            Class parentClass = parent.getClass();
-            IntrospectionHelper ih =
-                IntrospectionHelper.getHelper(parentClass);
-
-            try {
-                String elementName = propType.toLowerCase(Locale.US);
-                if (parent instanceof UnknownElement) {
-                    UnknownElement uc = new UnknownElement(elementName);
-                    uc.setProject(helperImpl.project);
-                    ((UnknownElement) parent).addChild(uc);
-                    child = uc;
-                } else {
-                    child = ih.createElement(helperImpl.project, parent, elementName);
-                }
-
-                helperImpl.configureId(child, attrs);
-
-                if (parentWrapper != null) {
-                    childWrapper = new RuntimeConfigurable(child, propType);
-                    childWrapper.setAttributes(attrs);
-                    parentWrapper.addChild(childWrapper);
-                } else {
-                    configure(child, attrs, helperImpl.project);
-                    ih.storeElement(helperImpl.project, parent, child, elementName);
-                }
-            } catch (BuildException exc) {
-                throw new SAXParseException(exc.getMessage(), helperImpl.locator, exc);
-            }
-        }
-
-        /**
-         * Adds text to the element, using the wrapper if one is
-         * available or using addText otherwise.
-         *
-         * @param buf A character array of the text within the element.
-         *            Will not be <code>null</code>.
-         * @param start The start element in the array.
-         * @param count The number of characters to read from the array.
-         *
-         * @exception SAXParseException if the element doesn't support text
-         *
-         * @see ProjectHelper#addText(Project,Object,char[],int,int)
-         */
-        public void characters(char[] buf, int start, int count) throws SAXParseException {
-            if (parentWrapper == null) {
-                try {
-                    ProjectHelper.addText(helperImpl.project, child, buf, start, count);
-                } catch (BuildException exc) {
-                    throw new SAXParseException(exc.getMessage(), helperImpl.locator, exc);
-                }
-            } else {
-                childWrapper.addText(buf, start, count);
-            }
-        }
-
-        /**
-         * Handles the start of an element within this one. Task containers
-         * will always use a task handler, and all other elements
-         * will always use another nested element handler.
-         *
-         * @param name The name of the element being started.
-         *            Will not be <code>null</code>.
-         * @param attrs Attributes of the element being started.
-         *              Will not be <code>null</code>.
-         *
-         * @exception SAXParseException if an error occurs when initialising
-         *                              the appropriate child handler
-         */
-        public void startElement(String name, AttributeList attrs) throws SAXParseException {
-            if (child instanceof TaskContainer) {
-                // taskcontainer nested element can contain other tasks - no other
-                // nested elements possible
-                new TaskHandler(helperImpl, this, (TaskContainer) child,
-                    childWrapper, target).init(name, attrs);
-            } else {
-                new NestedElementHandler(helperImpl, this, child,
-                    childWrapper, target).init(name, attrs);
-            }
-        }
-    }
-
-    /**
-     * Handler for all data types directly subordinate to project or target.
-     */
-    static class DataTypeHandler extends AbstractHandler {
-        /** Parent target, if any. */
-        private Target target;
-        /** The element being configured. */
-        private Object element;
-        /** Wrapper for this element, if it's part of a target. */
-        private RuntimeConfigurable wrapper = null;
-
-        /**
-         * Constructor with no target specified.
-         *
-         * @param parentHandler The handler which should be restored to the
-         *                      parser at the end of the element.
-         *                      Must not be <code>null</code>.
-         */
-        public DataTypeHandler(ProjectHelperImpl helperImpl, DocumentHandler parentHandler) {
-            this(helperImpl, parentHandler, null);
-        }
-
-        /**
-         * Constructor with a target specified.
-         *
-         * @param parentHandler The handler which should be restored to the
-         *                      parser at the end of the element.
-         *                      Must not be <code>null</code>.
-         *
-         * @param target The parent target of this element.
-         *               May be <code>null</code>.
-         */
-        public DataTypeHandler(ProjectHelperImpl helperImpl, DocumentHandler parentHandler, Target target) {
-            super(helperImpl, parentHandler);
-            this.target = target;
-        }
-
-        /**
-         * Initialisation routine called after handler creation
-         * with the element name and attributes. This configures
-         * the element with its attributes and sets it up with
-         * its parent container (if any). Nested elements are then
-         * added later as the parser encounters them.
-         *
-         * @param propType Name of the element which caused this handler
-         *            to be created. Must not be <code>null</code>.
-         *
-         * @param attrs Attributes of the element which caused this
-         *              handler to be created. Must not be <code>null</code>.
-         *
-         * @exception SAXParseException in case of error, such as a
-         *            BuildException being thrown during configuration.
-         */
-        public void init(String propType, AttributeList attrs) throws SAXParseException {
-            try {
-                element = helperImpl.project.createDataType(propType);
-                if (element == null) {
-                    throw new BuildException("Unknown data type " + propType);
-                }
-
-                if (target != null) {
-                    wrapper = new RuntimeConfigurable(element, propType);
-                    wrapper.setAttributes(attrs);
-                    target.addDataType(wrapper);
-                } else {
-                    configure(element, attrs, helperImpl.project);
-                    helperImpl.configureId(element, attrs);
-                }
-            } catch (BuildException exc) {
-                throw new SAXParseException(exc.getMessage(), helperImpl.locator, exc);
-            }
-        }
-
-        // XXX: (Jon Skeet) Any reason why this doesn't use the wrapper
-        // if one is available, whereas NestedElementHandler.characters does?
-        /**
-         * Adds text to the element.
-         *
-         * @param buf A character array of the text within the element.
-         *            Will not be <code>null</code>.
-         * @param start The start element in the array.
-         * @param count The number of characters to read from the array.
-         *
-         * @exception SAXParseException if the element doesn't support text
-         *
-         * @see ProjectHelper#addText(Project,Object,char[],int,int)
-         */
-        public void characters(char[] buf, int start, int count) throws SAXParseException {
-            try {
-                ProjectHelper.addText(helperImpl.project, element, buf, start, count);
-            } catch (BuildException exc) {
-                throw new SAXParseException(exc.getMessage(), helperImpl.locator, exc);
-            }
-        }
-
-        /**
-         * Handles the start of an element within this one.
-         * This will always use a nested element handler.
-         *
-         * @param name The name of the element being started.
-         *            Will not be <code>null</code>.
-         * @param attrs Attributes of the element being started.
-         *              Will not be <code>null</code>.
-         *
-         * @exception SAXParseException if an error occurs when initialising
-         *                              the child handler
-         */
-        public void startElement(String name, AttributeList attrs) throws SAXParseException {
-            new NestedElementHandler(helperImpl, this, element, wrapper, target).init(name, attrs);
-        }
-    }
-
-    /**
-     * Scans an attribute list for the <code>id</code> attribute and
-     * stores a reference to the target object in the project if an
-     * id is found.
-     * <p>
-     * This method was moved out of the configure method to allow
-     * it to be executed at parse time.
-     *
-     * @see #configure(Object,AttributeList,Project)
-     */
-    private void configureId(Object target, AttributeList attr) {
-        String id = attr.getValue("id");
-        if (id != null) {
-            project.addReference(id, target);
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/input/DefaultInputHandler.java b/src/main/org/apache/tools/ant/input/DefaultInputHandler.java
deleted file mode 100644
index 679e357..0000000
--- a/src/main/org/apache/tools/ant/input/DefaultInputHandler.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.input;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.util.Enumeration;
-
-import org.apache.tools.ant.BuildException;
-
-/**
- * Prompts on System.out, reads input from System.in
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- * @version $Revision$
- * @since Ant 1.5
- */
-public class DefaultInputHandler implements InputHandler {
-    
-    /**
-     * Empty no-arg constructor
-     */
-    public DefaultInputHandler() {
-    }
-
-    /**
-     * Prompts and requests input.  May loop until a valid input has
-     * been entered.
-     */
-    public void handleInput(InputRequest request) throws BuildException {
-        String prompt = getPrompt(request);
-        BufferedReader in = 
-            new BufferedReader(new InputStreamReader(getInputStream()));
-        do {
-            System.out.println(prompt);
-            try {
-                String input = in.readLine();
-                request.setInput(input);
-            } catch (IOException e) {
-                throw new BuildException("Failed to read input from Console.",
-                                         e);
-            }
-        } while (!request.isInputValid());
-    }
-
-    /**
-     * Constructs user prompt from a request.
-     *
-     * <p>This implementation adds (choice1,choice2,choice3,...) to the
-     * prompt for <code>MultipleChoiceInputRequest</code>s.</p>
-     *
-     * @param request the request to construct the prompt for.
-     *                Must not be <code>null</code>.
-     */
-    protected String getPrompt(InputRequest request) {
-        String prompt = request.getPrompt();
-        if (request instanceof MultipleChoiceInputRequest) {
-            StringBuffer sb = new StringBuffer(prompt);
-            sb.append("(");
-            Enumeration enum = 
-                ((MultipleChoiceInputRequest) request).getChoices().elements();
-            boolean first = true;
-            while (enum.hasMoreElements()) {
-                if (!first) {
-                    sb.append(",");
-                }
-                sb.append(enum.nextElement());
-                first = false;
-            }
-            sb.append(")");
-            prompt = sb.toString();
-        }
-        return prompt;
-    }
-
-    /**
-     * Returns the input stream from which the user input should be read.
-     */
-    protected InputStream getInputStream() {
-        return System.in;
-    }
-
-}
diff --git a/src/main/org/apache/tools/ant/input/InputHandler.java b/src/main/org/apache/tools/ant/input/InputHandler.java
deleted file mode 100644
index da8a148..0000000
--- a/src/main/org/apache/tools/ant/input/InputHandler.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.input;
-
-/**
- * Plugin to Ant to handle requests for user input.
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- * @version $Revision$
- * @since Ant 1.5
- */
-public interface InputHandler {
-
-    /**
-     * Handle the request encapsulated in the argument.
-     *
-     * <p>Precondition: the request.getPrompt will return a non-null
-     * value.</p>
-     *
-     * <p>Postcondition: request.getInput will return a non-null
-     * value, request.isInputValid will return true.</p>
-     */
-    void handleInput(InputRequest request) 
-        throws org.apache.tools.ant.BuildException;
-}
diff --git a/src/main/org/apache/tools/ant/input/InputRequest.java b/src/main/org/apache/tools/ant/input/InputRequest.java
deleted file mode 100644
index 3e4c232..0000000
--- a/src/main/org/apache/tools/ant/input/InputRequest.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.input;
-
-/**
- * Encapsulates an input request.
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- * @version $Revision$
- * @since Ant 1.5
- */
-public class InputRequest {
-    private String prompt;
-    private String input;
-
-    /**
-     * @param prompt The prompt to show to the user.  Must not be null.
-     */
-    public InputRequest(String prompt) {
-        if (prompt == null) {
-            throw new IllegalArgumentException("prompt must not be null");
-        }
-        
-        this.prompt = prompt;
-    }
-
-    /**
-     * Retrieves the prompt text.
-     */
-    public String getPrompt() {
-        return prompt;
-    }
-
-    /**
-     * Sets the user provided input.
-     */
-    public void setInput(String input) {
-        this.input = input;
-    }
-    
-    /**
-     * Is the user input valid?
-     */
-    public boolean isInputValid() {
-        return true;
-    }
-
-    /**
-     * Retrieves the user input.
-     */
-    public String getInput() {
-        return input;
-    }
-
-}
diff --git a/src/main/org/apache/tools/ant/input/MultipleChoiceInputRequest.java b/src/main/org/apache/tools/ant/input/MultipleChoiceInputRequest.java
deleted file mode 100644
index 783accd..0000000
--- a/src/main/org/apache/tools/ant/input/MultipleChoiceInputRequest.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.input;
-
-import java.util.Vector;
-
-/**
- * Encapsulates an input request.
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- * @version $Revision$
- * @since Ant 1.5
- */
-public class MultipleChoiceInputRequest extends InputRequest {
-    private Vector choices = new Vector();
-
-    /**
-     * @param prompt The prompt to show to the user.  Must not be null.
-     * @param choices holds all input values that are allowed.
-     *                Must not be null.
-     */
-    public MultipleChoiceInputRequest(String prompt, Vector choices) {
-        super(prompt);
-        if (choices == null) {
-            throw new IllegalArgumentException("choices must not be null");
-        }
-        this.choices = choices;
-    }
-
-    /**
-     * @return The possible values.
-     */
-    public Vector getChoices() {
-        return choices;
-    }
-
-    /**
-     * @return true if the input is one of the allowed values.
-     */
-    public boolean isInputValid() {
-        return choices.contains(getInput());
-    }
-}
diff --git a/src/main/org/apache/tools/ant/input/PropertyFileInputHandler.java b/src/main/org/apache/tools/ant/input/PropertyFileInputHandler.java
deleted file mode 100644
index b58c456..0000000
--- a/src/main/org/apache/tools/ant/input/PropertyFileInputHandler.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.input;
-
-import org.apache.tools.ant.BuildException;
-
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.util.Properties;
-
-/**
- * Reads input from a property file, the file name is read from the
- * system property ant.input.properties, the prompt is the key for input.
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- * @version $Revision$
- * @since Ant 1.5
- */
-public class PropertyFileInputHandler implements InputHandler {
-    private Properties props = null;
-
-    /**
-     * Name of the system property we expect to hold the file name.
-     */
-    public static final String FILE_NAME_KEY = "ant.input.properties";
-
-    /**
-     * Empty no-arg constructor.
-     */
-    public PropertyFileInputHandler() {
-    }
-
-    /**
-     * Picks up the input from a property, using the prompt as the
-     * name of the property.
-     *
-     * @exception BuildException if no property of that name can be found.
-     */
-    public void handleInput(InputRequest request) throws BuildException {
-        readProps();
-        
-        Object o = props.get(request.getPrompt());
-        if (o == null) {
-            throw new BuildException("Unable to find input for \'"
-                                     + request.getPrompt()+"\'");
-        }
-        request.setInput(o.toString());
-        if (!request.isInputValid()) {
-            throw new BuildException("Found invalid input " + o
-                                     + " for \'" + request.getPrompt() + "\'");
-        }
-    }
-
-    /**
-     * Reads the properties file if it hasn't already been read.
-     */
-    private synchronized void readProps() throws BuildException {
-        if (props == null) {
-            String propsFile = System.getProperty(FILE_NAME_KEY);
-            if (propsFile == null) {
-                throw new BuildException("System property "
-                                         + FILE_NAME_KEY
-                                         + " for PropertyFileInputHandler not"
-                                         + " set");
-            }
-            
-            props = new Properties();
-            
-            try {
-                props.load(new FileInputStream(propsFile));
-            } catch (IOException e) {
-                throw new BuildException("Couldn't load " + propsFile, e);
-            }
-        }
-    }
-
-}
diff --git a/src/main/org/apache/tools/ant/listener/AnsiColorLogger.java b/src/main/org/apache/tools/ant/listener/AnsiColorLogger.java
deleted file mode 100644
index 3ce0276..0000000
--- a/src/main/org/apache/tools/ant/listener/AnsiColorLogger.java
+++ /dev/null
@@ -1,278 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.listener;
-
-import java.io.FileInputStream;
-import java.io.InputStream;
-import java.io.IOException;
-import java.io.PrintStream;
-import java.util.Properties;
-
-import org.apache.tools.ant.DefaultLogger;
-import org.apache.tools.ant.Project;
-
-/**
- * Uses ANSI Color Code Sequences to colorize messages
- * sent to the console.
- *
- * If used with the -logfile option, the output file
- * will contain all the necessary escape codes to
- * display the text in colorized mode when displayed
- * in the console using applications like cat, more,
- * etc.
- *
- * This is designed to work on terminals that support ANSI
- * color codes.  It works on XTerm, ETerm, Mindterm, etc.
- * It also works on Win9x (with ANSI.SYS loaded.)
- *
- * NOTE:
- * It doesn't work on WinNT's COMMAND.COM even with
- * ANSI.SYS loaded.
- *
- * The default colors used for differentiating
- * the message levels can be changed by editing the
- * /org/apache/tools/ant/listener/defaults.properties
- * file.
- * This file contains 5 key/value pairs:
- * AnsiColorLogger.ERROR_COLOR=2;31
- * AnsiColorLogger.WARNING_COLOR=2;35
- * AnsiColorLogger.INFO_COLOR=2;36
- * AnsiColorLogger.VERBOSE_COLOR=2;32
- * AnsiColorLogger.DEBUG_COLOR=2;34
- *
- * Another option is to pass a system variable named
- * ant.logger.defaults, with value set to the path of
- * the file that contains user defined Ansi Color
- * Codes, to the <B>java</B> command using -D option.
- *
- * To change these colors use the following chart:
- *
- *      <B>ANSI COLOR LOGGER CONFIGURATION</B>
- *
- * Format for AnsiColorLogger.*=
- *  Attribute;Foreground;Background
- *
- *  Attribute is one of the following:
- *  0 -> Reset All Attributes (return to normal mode)
- *  1 -> Bright (Usually turns on BOLD)
- *  2 -> Dim
- *  3 -> Underline
- *  5 -> link
- *  7 -> Reverse
- *  8 -> Hidden
- *
- *  Foreground is one of the following:
- *  30 -> Black
- *  31 -> Red
- *  32 -> Green
- *  33 -> Yellow
- *  34 -> Blue
- *  35 -> Magenta
- *  36 -> Cyan
- *  37 -> White
- *
- *  Background is one of the following:
- *  40 -> Black
- *  41 -> Red
- *  42 -> Green
- *  43 -> Yellow
- *  44 -> Blue
- *  45 -> Magenta
- *  46 -> Cyan
- *  47 -> White
- *
- * @author <a href="mailto:umagesh@apache.org">Magesh Umasankar</a>
- */
-public final class AnsiColorLogger extends DefaultLogger {
-    private static final int ATTR_NORMAL = 0;
-    private static final int ATTR_BRIGHT = 1;
-    private static final int ATTR_DIM = 2;
-    private static final int ATTR_UNDERLINE = 3;
-    private static final int ATTR_BLINK = 5;
-    private static final int ATTR_REVERSE = 7;
-    private static final int ATTR_HIDDEN = 8;
-
-    private static final int FG_BLACK = 30;
-    private static final int FG_RED = 31;
-    private static final int FG_GREEN = 32;
-    private static final int FG_YELLOW = 33;
-    private static final int FG_BLUE = 34;
-    private static final int FG_MAGENTA = 35;
-    private static final int FG_CYAN = 36;
-    private static final int FG_WHITE = 37;
-
-    private static final int BG_BLACK = 40;
-    private static final int BG_RED = 41;
-    private static final int BG_GREEN = 42;
-    private static final int BG_YELLOW = 44;
-    private static final int BG_BLUE = 44;
-    private static final int BG_MAGENTA = 45;
-    private static final int BG_CYAN = 46;
-    private static final int BG_WHITE = 47;
-
-    private static final String PREFIX = "\u001b[";
-    private static final String SUFFIX = "m";
-    private static final char SEPARATOR = ';';
-    private static final String END_COLOR = PREFIX + SUFFIX;
-
-    private String errColor 
-        = PREFIX + ATTR_DIM + SEPARATOR + FG_RED + SUFFIX;
-    private String warnColor 
-        = PREFIX + ATTR_DIM + SEPARATOR + FG_MAGENTA + SUFFIX;
-    private String infoColor 
-        = PREFIX + ATTR_DIM + SEPARATOR + FG_CYAN + SUFFIX;
-    private String verboseColor 
-        = PREFIX + ATTR_DIM + SEPARATOR + FG_GREEN + SUFFIX;
-    private String debugColor 
-        = PREFIX + ATTR_DIM + SEPARATOR + FG_BLUE + SUFFIX;
-
-    private boolean colorsSet = false;
-
-    /**
-     * Set the colors to use from a property file specified by the
-     * special ant property ant.logger.defaults
-     */
-    private final void setColors() {
-        String userColorFile = System.getProperty("ant.logger.defaults");
-        String systemColorFile =
-            "/org/apache/tools/ant/listener/defaults.properties";
-
-        InputStream in = null;
-
-        try {
-            Properties prop = new Properties();
-
-            if (userColorFile != null) {
-                in = new FileInputStream(userColorFile);
-            } else {
-                in = getClass().getResourceAsStream(systemColorFile);
-            }
-
-            if (in != null) {
-                prop.load(in);
-            }
-
-            String err = prop.getProperty("AnsiColorLogger.ERROR_COLOR");
-            String warn = prop.getProperty("AnsiColorLogger.WARNING_COLOR");
-            String info = prop.getProperty("AnsiColorLogger.INFO_COLOR");
-            String verbose = prop.getProperty("AnsiColorLogger.VERBOSE_COLOR");
-            String debug = prop.getProperty("AnsiColorLogger.DEBUG_COLOR");
-            if (err != null) {
-                errColor = PREFIX + err + SUFFIX;
-            }
-            if (warn != null) {
-                warnColor = PREFIX + warn + SUFFIX;
-            }
-            if (info != null) {
-                infoColor = PREFIX + info + SUFFIX;
-            }
-            if (verbose != null) {
-                verboseColor = PREFIX + verbose + SUFFIX;
-            }
-            if (debug != null) {
-                debugColor = PREFIX + debug + SUFFIX;
-            }
-        } catch (IOException ioe) {
-            //Ignore - we will use the defaults.
-        } finally {
-            if (in != null) {
-                try {
-                    in.close();
-                } catch (IOException e) {
-                    //Ignore - We do not want this to stop the build.
-                }
-            }
-        }
-    }
-
-    /**
-     * @see DefaultLogger#printMessage
-     */
-    protected final void printMessage(final String message,
-                                      final PrintStream stream,
-                                      final int priority) {
-        if (message != null && stream != null) {
-            if (!colorsSet) {
-                setColors();
-                colorsSet = true;
-            }
-
-            final StringBuffer msg = new StringBuffer(message);
-            switch (priority) {
-                case Project.MSG_ERR:
-                    msg.insert(0, errColor);
-                    msg.append(END_COLOR);
-                    break;
-                case Project.MSG_WARN:
-                    msg.insert(0, warnColor);
-                    msg.append(END_COLOR);
-                    break;
-                case Project.MSG_INFO:
-                    msg.insert(0, infoColor);
-                    msg.append(END_COLOR);
-                    break;
-                case Project.MSG_VERBOSE:
-                    msg.insert(0, verboseColor);
-                    msg.append(END_COLOR);
-                    break;
-                case Project.MSG_DEBUG:
-                    msg.insert(0, debugColor);
-                    msg.append(END_COLOR);
-                    break;
-            }
-            final String strmessage = msg.toString();
-            stream.println(strmessage);
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/listener/CommonsLoggingListener.java b/src/main/org/apache/tools/ant/listener/CommonsLoggingListener.java
deleted file mode 100644
index eb2a22b..0000000
--- a/src/main/org/apache/tools/ant/listener/CommonsLoggingListener.java
+++ /dev/null
@@ -1,210 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.listener;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogConfigurationException;
-import org.apache.commons.logging.LogFactory;
-import org.apache.tools.ant.BuildEvent;
-import org.apache.tools.ant.BuildListener;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.Target;
-import org.apache.tools.ant.Task;
-
-/**
- * Jakarta Commons Logging listener.
- * Note: do not use the SimpleLog as your logger implementation as it
- * causes an infinite loop since it writes to System.err, which Ant traps
- * and reroutes to the logger/listener layer.
- *
- * @author Erik Hatcher
- * @since Ant 1.5
- */
-public class CommonsLoggingListener implements BuildListener {
-
-    /** Indicates if the listener was initialized. */
-    private boolean initialized = false;
-
-    private LogFactory logFactory;
-
-    /**
-     * Construct the listener and make sure that a LogFactory
-     * can be obtained.
-     */
-    public CommonsLoggingListener() {
-        try {
-            logFactory = LogFactory.getFactory();
-        } catch (LogConfigurationException e) {
-            e.printStackTrace(System.err);
-            return;
-        }
-
-        initialized = true;
-    }
-
-    /**
-     * @see BuildListener#buildStarted
-     */
-    public void buildStarted(BuildEvent event) {
-        if (initialized) {
-            Log log = logFactory.getInstance(Project.class);
-            log.info("Build started.");
-        }
-    }
-
-    /**
-     * @see BuildListener#buildFinished
-     */
-    public void buildFinished(BuildEvent event) {
-        if (initialized) {
-            Log log = logFactory.getInstance(Project.class);
-            if (event.getException() == null) {
-                log.info("Build finished.");
-            } else {
-                log.error("Build finished with error.", event.getException());
-            }
-        }
-    }
-
-    /**
-     * @see BuildListener#targetStarted
-     */
-    public void targetStarted(BuildEvent event) {
-        if (initialized) {
-            Log log = logFactory.getInstance(Target.class);
-            log.info("Target \"" + event.getTarget().getName() + "\" started.");
-        }
-    }
-
-    /**
-     * @see BuildListener#targetFinished
-     */
-    public void targetFinished(BuildEvent event) {
-        if (initialized) {
-            String targetName = event.getTarget().getName();
-            Log log = logFactory.getInstance(Target.class);
-            if (event.getException() == null) {
-                log.info("Target \"" + targetName + "\" finished.");
-            } else {
-                log.error("Target \"" + targetName
-                        + "\" finished with error.", event.getException());
-            }
-        }
-    }
-
-    /**
-     * @see BuildListener#taskStarted
-     */
-    public void taskStarted(BuildEvent event) {
-        if (initialized) {
-            Task task = event.getTask();
-            Log log = logFactory.getInstance(task.getClass().getName());
-            log.info("Task \"" + task.getTaskName() + "\" started.");
-        }
-    }
-
-    /**
-     * @see BuildListener#taskFinished
-     */
-    public void taskFinished(BuildEvent event) {
-        if (initialized) {
-            Task task = event.getTask();
-            Log log = logFactory.getInstance(task.getClass().getName());
-            if (event.getException() == null) {
-                log.info("Task \"" + task.getTaskName() + "\" finished.");
-            } else {
-                log.error("Task \"" + task.getTaskName()
-                        + "\" finished with error.", event.getException());
-            }
-        }
-    }
-
-    /**
-     * @see BuildListener#messageLogged
-     */
-    public void messageLogged(BuildEvent event) {
-        if (initialized) {
-            Object categoryObject = event.getTask();
-            if (categoryObject == null) {
-                categoryObject = event.getTarget();
-                if (categoryObject == null) {
-                    categoryObject = event.getProject();
-                }
-            }
-
-            Log log = logFactory.getInstance(categoryObject.getClass().getName());
-            switch (event.getPriority()) {
-                case Project.MSG_ERR:
-                    log.error(event.getMessage());
-                    break;
-                case Project.MSG_WARN:
-                    log.warn(event.getMessage());
-                    break;
-                case Project.MSG_INFO:
-                    log.info(event.getMessage());
-                    break;
-                case Project.MSG_VERBOSE:
-                    log.debug(event.getMessage());
-                    break;
-                case Project.MSG_DEBUG:
-                    log.debug(event.getMessage());
-                    break;
-                default:
-                    log.error(event.getMessage());
-                    break;
-            }
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/listener/Log4jListener.java b/src/main/org/apache/tools/ant/listener/Log4jListener.java
deleted file mode 100644
index 5631531..0000000
--- a/src/main/org/apache/tools/ant/listener/Log4jListener.java
+++ /dev/null
@@ -1,206 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.listener;
-
-import org.apache.log4j.Category;
-import org.apache.log4j.helpers.NullEnumeration;
-import org.apache.tools.ant.BuildEvent;
-import org.apache.tools.ant.BuildListener;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.Target;
-import org.apache.tools.ant.Task;
-
-
-/**
- *  Listener which sends events to Log4j logging system
- *
- * @author Conor MacNeill
- */
-public class Log4jListener implements BuildListener {
-    /** Log4j Configuration file */
-    private static final String LOG4J_CONFIG_PROPERTY = "log4j.configuration";
-
-    /** Indicates if the listener was initialized. */
-    private boolean initialized = false;
-
-    /** 
-     * Construct the listener and make sure there is a valid appender.
-     */
-    public Log4jListener() {
-        initialized = false;
-        Category cat = Category.getInstance("org.apache.tools.ant");
-        Category rootCat = Category.getRoot();
-        if (!(rootCat.getAllAppenders() instanceof NullEnumeration)) {
-            initialized = true;
-        } else {
-            cat.error("No log4j.properties in build area");
-        }
-    }
-
-    /**
-     * @see BuildListener#buildStarted
-     */
-    public void buildStarted(BuildEvent event) {
-        if (initialized) {
-            Category cat = Category.getInstance(Project.class.getName());
-            cat.info("Build started.");
-        }
-    }
-
-    /**
-     * @see BuildListener#buildFinished
-     */
-    public void buildFinished(BuildEvent event) {
-        if (initialized) {
-            Category cat = Category.getInstance(Project.class.getName());
-            if (event.getException() == null) {
-                cat.info("Build finished.");
-            } else {
-                cat.error("Build finished with error.", event.getException());
-            }
-        }
-    }
-
-    /**
-     * @see BuildListener#targetStarted
-     */
-    public void targetStarted(BuildEvent event) {
-        if (initialized) {
-            Category cat = Category.getInstance(Target.class.getName());
-            cat.info("Target \"" + event.getTarget().getName() + "\" started.");
-        }
-    }
-
-    /**
-     * @see BuildListener#targetFinished
-     */
-    public void targetFinished(BuildEvent event) {
-        if (initialized) {
-            String targetName = event.getTarget().getName();
-            Category cat = Category.getInstance(Target.class.getName());
-            if (event.getException() == null) {
-                cat.info("Target \"" + targetName + "\" finished.");
-            } else {
-                cat.error("Target \"" + targetName 
-                    + "\" finished with error.", event.getException());
-            }
-        }
-    }
-
-    /**
-     * @see BuildListener#taskStarted
-     */
-    public void taskStarted(BuildEvent event) {
-        if (initialized) {
-            Task task = event.getTask();
-            Category cat = Category.getInstance(task.getClass().getName());
-            cat.info("Task \"" + task.getTaskName() + "\" started.");
-        }
-    }
-
-    /**
-     * @see BuildListener#taskFinished
-     */
-    public void taskFinished(BuildEvent event) {
-        if (initialized) {
-            Task task = event.getTask();
-            Category cat = Category.getInstance(task.getClass().getName());
-            if (event.getException() == null) {
-                cat.info("Task \"" + task.getTaskName() + "\" finished.");
-            } else {
-                cat.error("Task \"" + task.getTaskName() 
-                    + "\" finished with error.", event.getException());
-            }
-        }
-    }
-
-    /**
-     * @see BuildListener#messageLogged
-     */
-    public void messageLogged(BuildEvent event) {
-        if (initialized) {
-            Object categoryObject = event.getTask();
-            if (categoryObject == null) {
-                categoryObject = event.getTarget();
-                if (categoryObject == null) {
-                    categoryObject = event.getProject();
-                }
-            }
-
-            Category cat 
-                = Category.getInstance(categoryObject.getClass().getName());
-            switch (event.getPriority()) {
-                case Project.MSG_ERR:
-                    cat.error(event.getMessage());
-                    break;
-                case Project.MSG_WARN:
-                    cat.warn(event.getMessage());
-                    break;
-                case Project.MSG_INFO:
-                    cat.info(event.getMessage());
-                    break;
-                case Project.MSG_VERBOSE:
-                    cat.debug(event.getMessage());
-                    break;
-                case Project.MSG_DEBUG:
-                    cat.debug(event.getMessage());
-                    break;
-                default:
-                    cat.error(event.getMessage());
-                    break;
-            }
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/listener/MailLogger.java b/src/main/org/apache/tools/ant/listener/MailLogger.java
deleted file mode 100644
index b6f8eec..0000000
--- a/src/main/org/apache/tools/ant/listener/MailLogger.java
+++ /dev/null
@@ -1,237 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.listener;
-
-import org.apache.tools.ant.BuildEvent;
-import org.apache.tools.ant.DefaultLogger;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.util.StringUtils;
-import org.apache.tools.mail.MailMessage;
-
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.PrintStream;
-import java.util.Enumeration;
-import java.util.Hashtable;
-import java.util.Properties;
-import java.util.StringTokenizer;
-
-/**
- *  Buffers log messages from DefaultLogger, and sends an e-mail with the
- *  results. The following Project properties are used to send the mail.
- *  <ul>
- *    <li> MailLogger.mailhost [default: localhost] - Mail server to use</li>
- *
- *    <li> MailLogger.from [required] - Mail "from" address</li>
- *    <li> MailLogger.failure.notify [default: true] - Send build failure
- *    e-mails?</li>
- *    <li> MailLogger.success.notify [default: true] - Send build success
- *    e-mails?</li>
- *    <li> MailLogger.failure.to [required if failure mail to be sent] - Address
- *    to send failure messages to</li>
- *    <li> MailLogger.success.to [required if success mail to be sent] - Address
- *    to send success messages to</li>
- *    <li> MailLogger.failure.subject [default: "Build Failure"] - Subject of
- *    failed build</li>
- *    <li> MailLogger.success.subject [default: "Build Success"] - Subject of
- *    successful build</li>
- *  </ul>
- *  These properties are set using standard Ant property setting mechanisms
- *  (&lt;property&gt;, command-line -D, etc). Ant properties can be overridden
- *  by specifying the filename of a properties file in the <i>
- *  MailLogger.properties.file property</i> . Any properties defined in that
- *  file will override Ant properties.
- *
- * @author Erik Hatcher
- *         <a href="mailto:ehatcher@apache.org">ehatcher@apache.org</a>
- */
-public class MailLogger extends DefaultLogger {
-    /** Buffer in which the message is constructed prior to sending */
-    private StringBuffer buffer = new StringBuffer();
-
-    /**
-     *  Sends an e-mail with the log results.
-     *
-     * @param event the build finished event
-     */
-    public void buildFinished(BuildEvent event) {
-        super.buildFinished(event);
-
-        Project project = event.getProject();
-        Hashtable properties = project.getProperties();
-
-        // overlay specified properties file (if any), which overrides project
-        // settings
-        Properties fileProperties = new Properties();
-        String filename = (String) properties.get("MailLogger.properties.file");
-        if (filename != null) {
-            InputStream is = null;
-            try {
-                is = new FileInputStream(filename);
-                fileProperties.load(is);
-            } catch (IOException ioe) {
-                // ignore because properties file is not required
-            } finally {
-                if (is != null) {
-                    try {
-                        is.close();
-                    } catch (IOException e) {
-                    }
-                }
-            }
-        }
-
-        for (Enumeration e = fileProperties.keys(); e.hasMoreElements();) {
-            String key = (String) e.nextElement();
-            String value = fileProperties.getProperty(key);
-            properties.put(key, project.replaceProperties(value));
-        }
-
-        boolean success = (event.getException() == null);
-        String prefix = success ? "success" : "failure";
-
-        try {
-            boolean notify = Project.toBoolean(getValue(properties,
-                    prefix + ".notify", "on"));
-
-            if (!notify) {
-                return;
-            }
-
-            String mailhost = getValue(properties, "mailhost", "localhost");
-            String from = getValue(properties, "from", null);
-
-            String toList = getValue(properties, prefix + ".to", null);
-            String subject = getValue(properties, prefix + ".subject",
-                    (success) ? "Build Success" : "Build Failure");
-
-            sendMail(mailhost, from, toList, subject, buffer.toString());
-        } catch (Exception e) {
-            System.out.println("MailLogger failed to send e-mail!");
-            e.printStackTrace(System.err);
-        }
-    }
-
-
-    /**
-     *  Receives and buffers log messages.
-     *
-     * @param message the message being logger
-     */
-    protected void log(String message) {
-        buffer.append(message).append(StringUtils.LINE_SEP);
-    }
-
-
-    /**
-     *  Gets the value of a property.
-     *
-     * @param  properties     Properties to obtain value from
-     * @param  name           suffix of property name. "MailLogger." will be
-     *      prepended internally.
-     * @param  defaultValue   value returned if not present in the properties.
-     *      Set to null to make required.
-     * @return                The value of the property, or default value.
-     * @exception  Exception  thrown if no default value is specified and the
-     *      property is not present in properties.
-     */
-    private String getValue(Hashtable properties, String name,
-                            String defaultValue) throws Exception {
-        String propertyName = "MailLogger." + name;
-        String value = (String) properties.get(propertyName);
-
-        if (value == null) {
-            value = defaultValue;
-        }
-
-        if (value == null) {
-            throw new Exception("Missing required parameter: " + propertyName);
-        }
-
-        return value;
-    }
-
-
-    /**
-     *  Send the mail
-     *
-     * @param  mailhost         mail server
-     * @param  from             from address
-     * @param  toList           comma-separated recipient list
-     * @param  subject          mail subject
-     * @param  message          mail body
-     * @exception  IOException  thrown if sending message fails
-     */
-    private void sendMail(String mailhost, String from, String toList,
-                          String subject, String message) throws IOException {
-        MailMessage mailMessage = new MailMessage(mailhost);
-
-        mailMessage.from(from);
-
-        StringTokenizer t = new StringTokenizer(toList, ", ", false);
-        while (t.hasMoreTokens()) {
-            mailMessage.to(t.nextToken());
-        }
-
-        mailMessage.setSubject(subject);
-
-        PrintStream ps = mailMessage.getPrintStream();
-        ps.println(message);
-
-        mailMessage.sendAndClose();
-    }
-}
-
-
diff --git a/src/main/org/apache/tools/ant/listener/defaults.properties b/src/main/org/apache/tools/ant/listener/defaults.properties
deleted file mode 100644
index f60a3fd..0000000
--- a/src/main/org/apache/tools/ant/listener/defaults.properties
+++ /dev/null
@@ -1,43 +0,0 @@
-####################################################
-#
-#           ANSI COLOR LOGGER CONFIGURATION
-#
-# Format for AnsiColorLogger.*=
-#  Attribute;Foreground;Background
-#
-#  Attribute is one of the following:
-#  0 -> Reset All Attributes (return to normal mode)
-#  1 -> Bright (Usually turns on BOLD)
-#  2 -> Dim
-#  3 -> Underline
-#  5 -> link
-#  7 -> Reverse
-#  8 -> Hidden
-#  
-#  Foreground is one of the following:
-#  30 -> Black
-#  31 -> Red
-#  32 -> Green
-#  33 -> Yellow
-#  34 -> Blue
-#  35 -> Magenta
-#  36 -> Cyan
-#  37 -> White
-#
-#  Background is one of the following:
-#  40 -> Black
-#  41 -> Red
-#  42 -> Green
-#  43 -> Yellow
-#  44 -> Blue
-#  45 -> Magenta
-#  46 -> Cyan
-#  47 -> White
-#
-####################################################
-
-AnsiColorLogger.ERROR_COLOR=2;31
-AnsiColorLogger.WARNING_COLOR=2;35
-AnsiColorLogger.INFO_COLOR=2;36
-AnsiColorLogger.VERBOSE_COLOR=2;32
-AnsiColorLogger.DEBUG_COLOR=2;34
diff --git a/src/main/org/apache/tools/ant/taskdefs/AbstractCvsTask.java b/src/main/org/apache/tools/ant/taskdefs/AbstractCvsTask.java
deleted file mode 100644
index 73915ca..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/AbstractCvsTask.java
+++ /dev/null
@@ -1,619 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import java.io.BufferedOutputStream;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.PrintStream;
-import java.util.Vector;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.types.Commandline;
-import org.apache.tools.ant.types.Environment;
-import org.apache.tools.ant.util.StringUtils;
-
-/**
- * original Cvs.java 1.20
- *
- *  NOTE: This implementation has been moved here from Cvs.java with
- *  the addition of some accessors for extensibility.  Another task
- *  can extend this with some customized output processing.
- *
- * @author costin@dnt.ro
- * @author stefano@apache.org
- * @author Wolfgang Werner 
- *         <a href="mailto:wwerner@picturesafe.de">wwerner@picturesafe.de</a>
- * @author Kevin Ross 
- *         <a href="mailto:kevin.ross@bredex.com">kevin.ross@bredex.com</a>
- *
- * @since Ant 1.5
- */
-public abstract class AbstractCvsTask extends Task {
-    /** 
-     * Default compression level to use, if compression is enabled via
-     * setCompression( true ). 
-     */
-    public static final int DEFAULT_COMPRESSION_LEVEL = 3;
-
-    private Commandline cmd = new Commandline();
-
-    /** list of Commandline children */
-    private Vector vecCommandlines = new Vector();
-
-    /**
-     * the CVSROOT variable.
-     */
-    private String cvsRoot;
-
-    /**
-     * the CVS_RSH variable.
-     */
-    private String cvsRsh;
-
-    /**
-     * the package/module to check out.
-     */
-    private String cvsPackage;
-
-    /**
-     * the default command.
-     */
-    private static final String default_command = "checkout";
-    /**
-     * the CVS command to execute.
-     */
-    private String command = null;
-
-    /**
-     * suppress information messages.
-     */
-    private boolean quiet = false;
-
-    /**
-     * compression level to use.
-     */
-    private int compression = 0;
-
-    /**
-     * report only, don't change any files.
-     */
-    private boolean noexec = false;
-
-    /**
-     * CVS port
-     */
-    private int port = 0;
-
-    /**
-     * CVS password file
-     */
-    private File passFile = null;
-
-    /**
-     * the directory where the checked out files should be placed.
-     */
-    private File dest;
-
-    /** whether or not to append stdout/stderr to existing files */
-    private boolean append = false;
-
-    /**
-     * the file to direct standard output from the command.
-     */
-    private File output;
-
-    /**
-     * the file to direct standard error from the command.
-     */
-    private File error;
-
-    /**
-     * If true it will stop the build if cvs exits with error.
-     * Default is false. (Iulian)
-     */
-    private boolean failOnError = false;
-
-    /**
-     * Create accessors for the following, to allow different handling of
-     * the output.
-     */
-    private ExecuteStreamHandler executeStreamHandler;
-    private OutputStream outputStream;
-    private OutputStream errorStream;
-
-    /** empty no-arg constructor*/
-    public AbstractCvsTask() {
-        super();
-    }
-
-    public void setExecuteStreamHandler(ExecuteStreamHandler handler) {
-        this.executeStreamHandler = handler;
-    }
-
-    protected ExecuteStreamHandler getExecuteStreamHandler() {
-
-        if (this.executeStreamHandler == null) {
-            setExecuteStreamHandler(new PumpStreamHandler(getOutputStream(), 
-                                                          getErrorStream()));
-        }
-
-        return this.executeStreamHandler;
-    }
-
-
-    protected void setOutputStream(OutputStream outputStream) {
-
-        this.outputStream = outputStream;
-    }
-
-    protected OutputStream getOutputStream() {
-
-        if (this.outputStream == null) {
-
-            if (output != null) {
-                try {
-                    setOutputStream(new PrintStream(
-                                        new BufferedOutputStream(
-                                            new FileOutputStream(output
-                                                                 .getPath(), 
-                                                                 append))));
-                } catch (IOException e) {
-                    throw new BuildException(e, location);
-                }
-            } else {
-                setOutputStream(new LogOutputStream(this, Project.MSG_INFO));
-            }
-        }
-
-        return this.outputStream;
-    }
-
-    protected void setErrorStream(OutputStream errorStream) {
-
-        this.errorStream = errorStream;
-    }
-
-    protected OutputStream getErrorStream() {
-
-        if (this.errorStream == null) {
-
-            if (error != null) {
-
-                try {
-                    setErrorStream(new PrintStream(
-                                       new BufferedOutputStream(
-                                           new FileOutputStream(error.getPath(),
-                                                                append))));
-                } catch (IOException e) {
-                    throw new BuildException(e, location);
-                }
-            } else {
-                setErrorStream(new LogOutputStream(this, Project.MSG_WARN));
-            }
-        }
-
-        return this.errorStream;
-    }
-
-    /**
-     * Sets up the environment for toExecute and then runs it.
-     * @throws BuildException
-     */
-    protected void runCommand(Commandline toExecute) throws BuildException {
-        // XXX: we should use JCVS (www.ice.com/JCVS) instead of
-        // command line execution so that we don't rely on having
-        // native CVS stuff around (SM)
-
-        // We can't do it ourselves as jCVS is GPLed, a third party task
-        // outside of jakarta repositories would be possible though (SB).
-
-        Environment env = new Environment();
-
-        if (port > 0) {
-            Environment.Variable var = new Environment.Variable();
-            var.setKey("CVS_CLIENT_PORT");
-            var.setValue(String.valueOf(port));
-            env.addVariable(var);
-        }
-
-        /**
-         * Need a better cross platform integration with <cvspass>, so
-         * use the same filename.
-         */
-        /* But currently we cannot because 'cvs log' is not working
-         * with a pass file.
-        if(passFile == null){
-
-            File defaultPassFile = new File(System.getProperty("user.home") 
-                + File.separatorChar + ".cvspass");
-
-            if(defaultPassFile.exists())
-                this.setPassfile(defaultPassFile);
-        }
-         */
-
-        if (passFile != null) {
-            Environment.Variable var = new Environment.Variable();
-            var.setKey("CVS_PASSFILE");
-            var.setValue(String.valueOf(passFile));
-            env.addVariable(var);
-            log("Using cvs passfile: " + String.valueOf(passFile), 
-                Project.MSG_INFO);
-        }
-
-        if (cvsRsh != null) {
-            Environment.Variable var = new Environment.Variable();
-            var.setKey("CVS_RSH");
-            var.setValue(String.valueOf(cvsRsh));
-            env.addVariable(var);
-        }
-
-        //
-        // Just call the getExecuteStreamHandler() and let it handle
-        //     the semantics of instantiation or retrieval.
-        //
-        Execute exe = new Execute(getExecuteStreamHandler(), null);
-
-        exe.setAntRun(project);
-        if (dest == null) {
-            dest = project.getBaseDir();
-        }
-
-        exe.setWorkingDirectory(dest);
-        exe.setCommandline(toExecute.getCommandline());
-        exe.setEnvironment(env.getVariables());
-
-        try {
-            String actualCommandLine = executeToString(exe);
-            log(actualCommandLine, Project.MSG_VERBOSE);
-            int retCode = exe.execute();
-            log("retCode=" + retCode, Project.MSG_DEBUG);
-            /*Throw an exception if cvs exited with error. (Iulian)*/
-            if (failOnError && retCode != 0) {
-                throw new BuildException("cvs exited with error code "
-                                         + retCode 
-                                         + StringUtils.LINE_SEP
-                                         + "Command line was ["
-                                         + actualCommandLine + "]", location);
-            }
-        } catch (IOException e) {
-            if (failOnError) {
-                throw new BuildException(e, location);
-            } else {
-                log("Caught exception: " + e.getMessage(), Project.MSG_WARN);
-            }
-        } catch (BuildException e) {
-            if (failOnError) {
-                throw(e);
-            } else {
-                Throwable t = e.getException();
-                if (t == null) {
-                    t = e;
-                }
-                log("Caught exception: " + t.getMessage(), Project.MSG_WARN);
-            }
-        } catch (Exception e) {
-            if (failOnError) {
-                throw new BuildException(e, location);
-            } else {
-                log("Caught exception: " + e.getMessage(), Project.MSG_WARN);
-            }
-        } finally {
-            if (outputStream != null) {
-                try {
-                    outputStream.close();
-                } catch (IOException e) {}
-            }
-            if (errorStream != null) {
-                try {
-                    errorStream.close();
-                } catch (IOException e) {}
-            }
-        }
-    }
-
-    public void execute() throws BuildException {
-
-        String savedCommand = getCommand();
-
-        if (this.getCommand() == null && vecCommandlines.size() == 0) {
-            // re-implement legacy behaviour:
-            this.setCommand(AbstractCvsTask.default_command);
-        }
-
-        String c = this.getCommand();
-        Commandline cloned = null;
-        if (c != null) {
-            cloned = (Commandline) cmd.clone();
-            cloned.createArgument(true).setLine(c);
-            this.addConfiguredCommandline(cloned, true);
-        }
-
-        try {
-            for (int i = 0; i < vecCommandlines.size(); i++) {
-                this.runCommand((Commandline) vecCommandlines.elementAt(i));
-            }
-        } finally {
-            if (cloned != null) {
-                removeCommandline(cloned);
-            }
-            setCommand(savedCommand);
-        }
-    }
-
-    private String executeToString(Execute execute){
-
-        StringBuffer stringBuffer = 
-            new StringBuffer(Commandline.describeCommand(execute
-                                                         .getCommandline()));
-
-        String newLine = StringUtils.LINE_SEP;
-        String[] variableArray = execute.getEnvironment();
-
-        if (variableArray != null) {
-            stringBuffer.append(newLine);
-            stringBuffer.append(newLine);
-            stringBuffer.append("environment:");
-            stringBuffer.append(newLine);
-            for (int z = 0; z < variableArray.length; z++){
-                stringBuffer.append(newLine);
-                stringBuffer.append("\t");
-                stringBuffer.append(variableArray[z]);
-            }
-        }
-
-        return stringBuffer.toString();
-    }
-
-    public void setCvsRoot(String root) {
-
-        // Check if not real cvsroot => set it to null
-        if (root != null) {
-            if (root.trim().equals("")) {
-                root = null;
-            }
-        }
-
-        this.cvsRoot = root;
-    }
-
-    public String getCvsRoot(){
-
-        return this.cvsRoot;
-    }
-
-    public void setCvsRsh(String rsh) {
-        // Check if not real cvsrsh => set it to null
-        if (rsh != null) {
-            if (rsh.trim().equals("")) {
-                rsh = null;
-            }
-        }
-
-        this.cvsRsh = rsh;
-    }
-
-    public String getCvsRsh(){
-
-        return this.cvsRsh;
-    }
-
-    public void setPort(int port){
-        this.port = port;
-    }
-
-    public int getPort(){
-
-        return this.port;
-    }
-
-    public void setPassfile(File passFile){
-        this.passFile = passFile;
-    }
-
-    public File getPassFile(){
-
-        return this.passFile;
-    }
-
-    public void setDest(File dest) {
-        this.dest = dest;
-    }
-
-    public File getDest(){
-
-        return this.dest;
-    }
-
-    public void setPackage(String p) {
-        this.cvsPackage = p;
-    }
-
-    public String getPackage(){
-
-        return this.cvsPackage;
-    }
-
-    public void setTag(String p) {
-        // Check if not real tag => set it to null
-        if (p != null && p.trim().length() > 0) {
-            addCommandArgument("-r");
-            addCommandArgument(p);
-        }
-    }
-
-    /**
-     * This needs to be public to allow configuration
-     *      of commands externally.
-     */
-    public void addCommandArgument(String arg){
-        this.addCommandArgument(cmd, arg);
-    }
-
-    public void addCommandArgument(Commandline c, String arg){
-        c.createArgument().setValue(arg);
-    }
-
-
-    public void setDate(String p) {
-        if (p != null && p.trim().length() > 0) {
-            addCommandArgument("-D");
-            addCommandArgument(p);
-        }
-    }
-
-    public void setCommand(String c) {
-        this.command = c;
-    }
-    public String getCommand() {
-        return this.command;
-    }
-
-    public void setQuiet(boolean q) {
-        quiet = q;
-    }
-
-    public void setNoexec(boolean ne) {
-        noexec = ne;
-    }
-
-    public void setOutput(File output) {
-        this.output = output;
-    }
-
-    public void setError(File error) {
-        this.error = error;
-    }
-
-    public void setAppend(boolean value){
-        this.append = value;
-    }
-
-    public void setFailOnError(boolean failOnError) {
-        this.failOnError = failOnError;
-    }
-
-    /**
-     * Configure a commandline element for things like cvsRoot, quiet, etc.
-     */
-    protected void configureCommandline(Commandline c) {
-        if (c == null) {
-            return;
-        }
-        c.setExecutable("cvs");
-        if (cvsPackage != null) {
-            c.createArgument().setLine(cvsPackage);
-        }
-        if (this.compression > 0 && this.compression < 10) {
-            c.createArgument(true).setValue("-z" + this.compression);
-        }
-        if (quiet) {
-            c.createArgument(true).setValue("-q");
-        }
-        if (noexec) {
-            c.createArgument(true).setValue("-n");
-        }
-        if (cvsRoot != null) {
-            c.createArgument(true).setLine("-d" + cvsRoot);
-        }
-    }
-
-    protected void removeCommandline(Commandline c) {
-        vecCommandlines.removeElement(c);
-    }
-
-    public void addConfiguredCommandline(Commandline c) {
-        this.addConfiguredCommandline(c, false);
-    }
-
-    /**
-    * Configures and adds the given Commandline.
-    * @param insertAtStart If true, c is
-    */
-    public void addConfiguredCommandline(Commandline c, 
-                                         boolean insertAtStart) {
-        if (c == null) {
-            return; 
-        }
-        this.configureCommandline(c);
-        if (insertAtStart) {
-            vecCommandlines.insertElementAt(c, 0);
-        } else {
-            vecCommandlines.addElement(c);
-        }
-    }
-
-    /**
-    * If set to a value 1-9 it adds -zN to the cvs command line, else
-    * it disables compression.
-    */
-    public void setCompressionLevel(int level) {
-        this.compression = level;
-    }
-
-    /**
-     * @param usecomp If true, turns on compression using default
-     * level, AbstractCvsTask.DEFAULT_COMPRESSION_LEVEL.
-     */
-    public void setCompression(boolean usecomp) {
-        setCompressionLevel(usecomp ? 
-                            AbstractCvsTask.DEFAULT_COMPRESSION_LEVEL : 0);
-    }
-
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/Ant.java b/src/main/org/apache/tools/ant/taskdefs/Ant.java
deleted file mode 100644
index 5cc2e07..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Ant.java
+++ /dev/null
@@ -1,567 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.ProjectComponent;
-import org.apache.tools.ant.BuildListener;
-import org.apache.tools.ant.DefaultLogger;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.ProjectHelper;
-import org.apache.tools.ant.util.FileUtils;
-import java.io.File;
-import java.io.PrintStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.lang.reflect.Method;
-import java.util.Vector;
-import java.util.Hashtable;
-import java.util.Enumeration;
-
-/**
- * Call Ant in a sub-project.
- *
- *  <pre>
- *  &lt;target name=&quot;foo&quot; depends=&quot;init&quot;&gt;
- *    &lt;ant antfile=&quot;build.xml&quot; target=&quot;bar&quot; &gt;
- *      &lt;property name=&quot;property1&quot; value=&quot;aaaaa&quot; /&gt;
- *      &lt;property name=&quot;foo&quot; value=&quot;baz&quot; /&gt;
- *    &lt;/ant&gt;</SPAN>
- *  &lt;/target&gt;</SPAN>
- *
- *  &lt;target name=&quot;bar&quot; depends=&quot;init&quot;&gt;
- *    &lt;echo message=&quot;prop is ${property1} ${foo}&quot; /&gt;
- *  &lt;/target&gt;
- * </pre>
- *
- *
- * @author costin@dnt.ro
- *
- * @since Ant 1.1
- *
- * @ant.task category="control"
- */
-public class Ant extends Task {
-
-    /** the basedir where is executed the build file */
-    private File dir = null;
-
-    /** 
-     * the build.xml file (can be absolute) in this case dir will be
-     * ignored 
-     */
-    private String antFile = null;
-
-    /** the target to call if any */
-    private String target = null;
-
-    /** the output */
-    private String output  = null;
-
-    /** should we inherit properties from the parent ? */
-    private boolean inheritAll = true;
-
-    /** should we inherit references from the parent ? */
-    private boolean inheritRefs = false;
-
-    /** the properties to pass to the new project */
-    private Vector properties = new Vector();
-
-    /** the references to pass to the new project */
-    private Vector references = new Vector();
-
-    /** the temporary project created to run the build file */
-    private Project newProject;
-
-    /** The stream to which output is to be written. */
-    private PrintStream out = null;
-
-    /**
-     * If true, inherit all properties from parent Project
-     * If false, inherit only userProperties and those defined
-     * inside the ant call itself
-     */
-    public void setInheritAll(boolean value) {
-        inheritAll = value;
-    }
-
-    /**
-     * If true, inherit all references from parent Project
-     * If false, inherit only those defined
-     * inside the ant call itself
-     */
-    public void setInheritRefs(boolean value) {
-        inheritRefs = value;
-    }
-
-    /**
-     * Creates a Project instance for the project to call.
-     */
-    public void init() {
-        newProject = new Project();
-        newProject.setJavaVersionProperty();
-        newProject.addTaskDefinition("property",
-                                     (Class) project.getTaskDefinitions()
-                                             .get("property"));
-    }
-
-    /**
-     * Called in execute or createProperty if newProject is null.
-     *
-     * <p>This can happen if the same instance of this task is run
-     * twice as newProject is set to null at the end of execute (to
-     * save memory and help the GC).</p>
-     *
-     * <p>Sets all properties that have been defined as nested
-     * property elements.</p>
-     */
-    private void reinit() {
-        init();
-        final int count = properties.size();
-        for (int i = 0; i < count; i++) {
-            Property p = (Property) properties.elementAt(i);
-            Property newP = (Property) newProject.createTask("property");
-            newP.setName(p.getName());
-            if (p.getValue() != null) {
-                newP.setValue(p.getValue());
-            }
-            if (p.getFile() != null) {
-                newP.setFile(p.getFile());
-            }
-            if (p.getResource() != null) {
-                newP.setResource(p.getResource());
-            }
-            properties.setElementAt(newP, i);
-        }
-    }
-
-    /**
-     * Attaches the build listeners of the current project to the new
-     * project, configures a possible logfile, transfers task and
-     * data-type definitions, transfers properties (either all or just
-     * the ones specified as user properties to the current project,
-     * depending on inheritall), transfers the input handler.
-     */
-    private void initializeProject() {
-        newProject.setInputHandler(getProject().getInputHandler());
-
-        Vector listeners = project.getBuildListeners();
-        final int count = listeners.size();
-        for (int i = 0; i < count; i++) {
-            newProject.addBuildListener((BuildListener) listeners.elementAt(i));
-        }
-
-        if (output != null) {
-            File outfile = null;
-            if (dir != null) {
-                outfile = FileUtils.newFileUtils().resolveFile(dir, output);
-            } else {
-                outfile = getProject().resolveFile(output);
-            }
-            try {
-                out = new PrintStream(new FileOutputStream(outfile));
-                DefaultLogger logger = new DefaultLogger();
-                logger.setMessageOutputLevel(Project.MSG_INFO);
-                logger.setOutputPrintStream(out);
-                logger.setErrorPrintStream(out);
-                newProject.addBuildListener(logger);
-            } catch (IOException ex) {
-                log("Ant: Can't set output to " + output);
-            }
-        }
-
-        Hashtable taskdefs = project.getTaskDefinitions();
-        Enumeration et = taskdefs.keys();
-        while (et.hasMoreElements()) {
-            String taskName = (String) et.nextElement();
-            if (taskName.equals("property")) {
-                // we have already added this taskdef in #init
-                continue;
-            }
-            Class taskClass = (Class) taskdefs.get(taskName);
-            newProject.addTaskDefinition(taskName, taskClass);
-        }
-
-        Hashtable typedefs = project.getDataTypeDefinitions();
-        Enumeration e = typedefs.keys();
-        while (e.hasMoreElements()) {
-            String typeName = (String) e.nextElement();
-            Class typeClass = (Class) typedefs.get(typeName);
-            newProject.addDataTypeDefinition(typeName, typeClass);
-        }
-
-        // set user-defined or all properties from calling project
-        Hashtable prop1;
-        if (inheritAll) {
-           prop1 = project.getProperties();
-        } else {
-           prop1 = project.getUserProperties();
-
-           // set Java built-in properties separately,
-           // b/c we won't inherit them.
-           newProject.setSystemProperties();
-        }
-
-        e = prop1.keys();
-        while (e.hasMoreElements()) {
-            String arg = (String) e.nextElement();
-            if ("basedir".equals(arg) || "ant.file".equals(arg)) {
-                // basedir and ant.file get special treatment in execute()
-                continue;
-            }
-
-            String value = (String) prop1.get(arg);
-            if (inheritAll){
-               newProject.setProperty(arg, value);
-            } else {
-               newProject.setUserProperty(arg, value);
-            }
-        }
-    }
-
-    /**
-     * Pass output sent to System.out to the new project.
-     *
-     * @since Ant 1.5
-     */
-    protected void handleOutput(String line) {
-        if (newProject != null) {
-            newProject.demuxOutput(line, false);
-        } else {
-            super.handleOutput(line);
-        }
-    }
-
-    /**
-     * Pass output sent to System.err to the new project.
-     *
-     * @since Ant 1.5
-     */
-    protected void handleErrorOutput(String line) {
-        if (newProject != null) {
-            newProject.demuxOutput(line, true);
-        } else {
-            super.handleErrorOutput(line);
-        }
-    }
-
-    /**
-     * Do the execution.
-     */
-    public void execute() throws BuildException {
-        File savedDir = dir;
-        String savedAntFile = antFile;
-        String savedTarget = target;
-        try {
-            if (newProject == null) {
-                reinit();
-            }
-
-            if ((dir == null) && (inheritAll)) {
-                dir = project.getBaseDir();
-            }
-
-            initializeProject();
-
-            if (dir != null) {
-                newProject.setBaseDir(dir);
-                newProject.setUserProperty("basedir" , dir.getAbsolutePath());
-            } else {
-                dir = project.getBaseDir();
-            }
-
-            overrideProperties();
-
-            if (antFile == null) {
-                antFile = "build.xml";
-            }
-
-            File file = FileUtils.newFileUtils().resolveFile(dir, antFile);
-            antFile = file.getAbsolutePath();
-
-            log("calling target " + (target != null ? target : "[default]")
-                    + " in build file " +  antFile.toString(),
-                    Project.MSG_VERBOSE);
-            newProject.setUserProperty("ant.file" , antFile);
-            ProjectHelper.configureProject(newProject, new File(antFile));
-
-            if (target == null) {
-                target = newProject.getDefaultTarget();
-            }
-
-            addReferences();
-
-            // Are we trying to call the target in which we are defined?
-            if (newProject.getBaseDir().equals(project.getBaseDir()) &&
-                newProject.getProperty("ant.file").equals(project.getProperty("ant.file")) &&
-                getOwningTarget() != null &&
-                target.equals(this.getOwningTarget().getName())) {
-
-                throw new BuildException("ant task calling its own parent " 
-                    + "target");
-            }
-
-            newProject.executeTarget(target);
-        } finally {
-            // help the gc
-            newProject = null;
-            if (output != null && out != null) {
-                try {
-                    out.close();
-                } catch (final Exception e) {
-                    //ignore
-                }
-            }
-            dir = savedDir;
-            antFile = savedAntFile;
-            target = savedTarget;
-        }
-    }
-
-    /**
-     * Override the properties in the new project with the one
-     * explicitly defined as nested elements here.
-     */
-    private void overrideProperties() throws BuildException {
-        Enumeration e = properties.elements();
-        while (e.hasMoreElements()) {
-            Property p = (Property) e.nextElement();
-            p.setProject(newProject);
-            p.execute();
-        }
-    }
-
-    /**
-     * Add the references explicitly defined as nested elements to the
-     * new project.  Also copy over all references that don't override
-     * existing references in the new project if inheritrefs has been
-     * requested.
-     */
-    private void addReferences() throws BuildException {
-        Hashtable thisReferences = (Hashtable) project.getReferences().clone();
-        Hashtable newReferences = newProject.getReferences();
-        Enumeration e;
-        if (references.size() > 0) {
-            for (e = references.elements(); e.hasMoreElements();) {
-                Reference ref = (Reference) e.nextElement();
-                String refid = ref.getRefId();
-                if (refid == null) {
-                    throw new BuildException("the refid attribute is required"
-                                             + " for reference elements");
-                }
-                if (!thisReferences.containsKey(refid)) {
-                    log("Parent project doesn't contain any reference '"
-                        + refid + "'",
-                        Project.MSG_WARN);
-                    continue;
-                }
-
-                thisReferences.remove(refid);
-                String toRefid = ref.getToRefid();
-                if (toRefid == null) {
-                    toRefid = refid;
-                }
-                copyReference(refid, toRefid);
-            }
-        }
-
-        // Now add all references that are not defined in the
-        // subproject, if inheritRefs is true
-        if (inheritRefs) {
-            for (e = thisReferences.keys(); e.hasMoreElements();) {
-                String key = (String) e.nextElement();
-                if (newReferences.containsKey(key)) {
-                    continue;
-                }
-                copyReference(key, key);
-            }
-        }
-    }
-
-    /**
-     * Try to clone and reconfigure the object referenced by oldkey in
-     * the parent project and add it to the new project with the key
-     * newkey.
-     *
-     * <p>If we cannot clone it, copy the referenced object itself and
-     * keep our fingers crossed.</p>
-     */
-    private void copyReference(String oldKey, String newKey) {
-        Object orig = project.getReference(oldKey);
-        Class c = orig.getClass();
-        Object copy = orig;
-        try {
-            Method cloneM = c.getMethod("clone", new Class[0]);
-            if (cloneM != null) {
-                copy = cloneM.invoke(orig, new Object[0]);
-            }
-        } catch (Exception e) {
-            // not Clonable
-        }
-
-
-        if (copy instanceof ProjectComponent) {
-            ((ProjectComponent) copy).setProject(newProject);
-        } else {
-            try {
-                Method setProjectM =
-                    c.getMethod("setProject", new Class[] {Project.class});
-                if (setProjectM != null) {
-                    setProjectM.invoke(copy, new Object[] {newProject});
-                }
-            } catch (NoSuchMethodException e) {
-                // ignore this if the class being referenced does not have
-                // a set project method.
-            } catch (Exception e2) {
-                String msg = "Error setting new project instance for "
-                    + "reference with id " + oldKey;
-                throw new BuildException(msg, e2, location);
-            }
-        }
-        newProject.addReference(newKey, copy);
-    }
-
-    /**
-     * Set the dir attribute.
-     */
-    public void setDir(File d) {
-        this.dir = d;
-    }
-
-    /**
-     * set the build file, it can be either absolute or relative.
-     * If it is absolute, <tt>dir</tt> will be ignored, if it is
-     * relative it will be resolved relative to <tt>dir</tt>.
-     */
-    public void setAntfile(String s) {
-        // @note: it is a string and not a file to handle relative/absolute
-        // otherwise a relative file will be resolved based on the current
-        // basedir.
-        this.antFile = s;
-    }
-
-    /**
-     * set the target to execute. If none is defined it will
-     * execute the default target of the build file
-     */
-    public void setTarget(String s) {
-        this.target = s;
-    }
-
-    /**
-     * Set the name of a log file.  This will be resolved relative to
-     * the dir attribute if specified, relative to the current
-     * project's basedir otherwise.
-     */
-    public void setOutput(String s) {
-        this.output = s;
-    }
-
-    /** create a property to pass to the new project as a 'user property' */
-    public Property createProperty() {
-        if (newProject == null) {
-            reinit();
-        }
-        Property p = new Property(true);
-        p.setProject(newProject);
-        p.setTaskName("property");
-        properties.addElement(p);
-        return p;
-    }
-
-    /**
-     * create a reference element that identifies a data type that
-     * should be carried over to the new project.
-     */
-    public void addReference(Reference r) {
-        references.addElement(r);
-    }
-
-    /**
-     * Helper class that implements the nested &lt;reference&gt;
-     * element of &lt;ant&gt; and &lt;antcall&gt;.
-     */
-    public static class Reference
-        extends org.apache.tools.ant.types.Reference {
-
-        /** Creates a reference to be configured by Ant */
-        public Reference() {
-            super();
-        }
-
-        private String targetid = null;
-
-        /**
-         * Set the id that this reference to be stored under in the
-         * new project.
-         *
-         * @param targetid the id under which this reference will be passed to 
-         *        the new project */ 
-        public void setToRefid(String targetid) {
-            this.targetid = targetid; 
-        }
-
-        /**
-         * Get the id under which this reference will be stored in the new
-         * project
-         *
-         * @return the id of the reference in the new project.
-         */
-        public String getToRefid() { 
-            return targetid; 
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/AntStructure.java b/src/main/org/apache/tools/ant/taskdefs/AntStructure.java
deleted file mode 100644
index 589876b..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/AntStructure.java
+++ /dev/null
@@ -1,395 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.IntrospectionHelper;
-
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.TaskContainer;
-import org.apache.tools.ant.types.EnumeratedAttribute;
-
-import java.util.Enumeration;
-import java.util.Hashtable;
-import java.util.Vector;
-import java.io.File;
-import java.io.PrintWriter;
-import java.io.OutputStreamWriter;
-import java.io.FileOutputStream;
-import java.io.UnsupportedEncodingException;
-import java.io.FileWriter;
-import java.io.IOException;
-
-/**
- * Creates a partial DTD for Ant from the currently known tasks.
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- *
- * @version $Revision$
- *
- * @since Ant 1.1
- *
- * @ant.task category="xml"
- */
-public class AntStructure extends Task {
-
-    private final String lSep = System.getProperty("line.separator");
-
-    private final String BOOLEAN = "%boolean;";
-    private final String TASKS = "%tasks;";
-    private final String TYPES = "%types;";
-
-    private Hashtable visited = new Hashtable();
-
-    private File output;
-
-    /**
-     * The output file.
-     */
-    public void setOutput(File output) {
-        this.output = output;
-    }
-
-    /**
-     * Build the antstructure DTD.
-     *
-     * @exception BuildException if the DTD cannot be written.
-     */
-    public void execute() throws BuildException {
-
-        if (output == null) {
-            throw new BuildException("output attribute is required", location);
-        }
-
-        PrintWriter out = null;
-        try {
-            try {
-                out = new PrintWriter(new OutputStreamWriter(new FileOutputStream(output), "UTF8"));
-            } catch (UnsupportedEncodingException ue) {
-                /*
-                 * Plain impossible with UTF8, see
-                 * http://java.sun.com/products/jdk/1.2/docs/guide/internat/encoding.doc.html
-                 *
-                 * fallback to platform specific anyway.
-                 */
-                out = new PrintWriter(new FileWriter(output));
-            }
-
-            printHead(out, project.getTaskDefinitions().keys(),
-                      project.getDataTypeDefinitions().keys());
-
-            printTargetDecl(out);
-
-            Enumeration dataTypes = project.getDataTypeDefinitions().keys();
-            while (dataTypes.hasMoreElements()) {
-                String typeName = (String) dataTypes.nextElement();
-                printElementDecl(out, typeName,
-                                 (Class) project.getDataTypeDefinitions().get(typeName));
-            }
-
-            Enumeration tasks = project.getTaskDefinitions().keys();
-            while (tasks.hasMoreElements()) {
-                String taskName = (String) tasks.nextElement();
-                printElementDecl(out, taskName,
-                                 (Class) project.getTaskDefinitions().get(taskName));
-            }
-
-            printTail(out);
-
-        } catch (IOException ioe) {
-            throw new BuildException("Error writing " 
-                + output.getAbsolutePath(), ioe, location);
-        } finally {
-            if (out != null) {
-                out.close();
-            }
-            visited.clear();
-        }
-    }
-
-    /**
-     * Prints the header of the generated output.
-     *
-     * <p>Basically this prints the XML declaration, defines some
-     * entities and the project element.</p>
-     */
-    private void printHead(PrintWriter out, Enumeration tasks,
-                           Enumeration types) {
-        out.println("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>");
-        out.println("<!ENTITY % boolean \"(true|false|on|off|yes|no)\">");
-        out.print("<!ENTITY % tasks \"");
-        boolean first = true;
-        while (tasks.hasMoreElements()) {
-            String taskName = (String) tasks.nextElement();
-            if (!first) {
-                out.print(" | ");
-            } else {
-                first = false;
-            }
-            out.print(taskName);
-        }
-        out.println("\">");
-        out.print("<!ENTITY % types \"");
-        first = true;
-        while (types.hasMoreElements()) {
-            String typeName = (String) types.nextElement();
-            if (!first) {
-                out.print(" | ");
-            } else {
-                first = false;
-            }
-            out.print(typeName);
-        }
-        out.println("\">");
-
-        out.println("");
-
-        out.print("<!ELEMENT project (target | property | taskdef");
-        out.print(" | typedef | ");
-        out.print(TYPES);
-        out.println(")*>");
-        out.println("<!ATTLIST project");
-        out.println("          name    CDATA #IMPLIED");
-        out.println("          default CDATA #REQUIRED");
-        out.println("          basedir CDATA #IMPLIED>");
-        out.println("");
-    }
-
-    /**
-     * Prints the definition for the target element.
-     */
-    private void printTargetDecl(PrintWriter out) {
-        out.print("<!ELEMENT target (");
-        out.print(TASKS);
-        out.print(" | ");
-        out.print(TYPES);
-        out.println(")*>");
-        out.println("");
-
-        out.println("<!ATTLIST target");
-        out.println("          id          ID    #IMPLIED");
-        out.println("          name        CDATA #REQUIRED");
-        out.println("          if          CDATA #IMPLIED");
-        out.println("          unless      CDATA #IMPLIED");
-        out.println("          depends     CDATA #IMPLIED");
-        out.println("          description CDATA #IMPLIED>");
-        out.println("");
-    }
-
-    /**
-     * Print the definition for a given element.
-     */
-    private void printElementDecl(PrintWriter out, String name, Class element)
-        throws BuildException {
-
-        if (visited.containsKey(name)) {
-            return;
-        }
-        visited.put(name, "");
-
-        IntrospectionHelper ih = null;
-        try {
-            ih = IntrospectionHelper.getHelper(element);
-        } catch (Throwable t) {
-            /*
-             * XXX - failed to load the class properly.
-             *
-             * should we print a warning here?
-             */
-            return;
-        }
-
-        StringBuffer sb = new StringBuffer("<!ELEMENT ");
-        sb.append(name).append(" ");
-
-        if (org.apache.tools.ant.types.Reference.class.equals(element)) {
-            sb.append("EMPTY>").append(lSep);
-            sb.append("<!ATTLIST ").append(name);
-            sb.append(lSep).append("          id ID #IMPLIED");
-            sb.append(lSep).append("          refid IDREF #IMPLIED");
-            sb.append(">").append(lSep);
-            out.println(sb);
-            return;
-        }
-
-        Vector v = new Vector();
-        if (ih.supportsCharacters()) {
-            v.addElement("#PCDATA");
-        }
-
-        if (TaskContainer.class.isAssignableFrom(element)) {
-            v.addElement(TASKS);
-        }
-
-        Enumeration enum = ih.getNestedElements();
-        while (enum.hasMoreElements()) {
-            v.addElement(enum.nextElement());
-        }
-
-        if (v.isEmpty()) {
-            sb.append("EMPTY");
-        } else {
-            sb.append("(");
-            final int count = v.size();
-            for (int i = 0; i < count; i++) {
-                if (i != 0) {
-                    sb.append(" | ");
-                }
-                sb.append(v.elementAt(i));
-            }
-            sb.append(")");
-            if (count > 1 || !v.elementAt(0).equals("#PCDATA")) {
-                sb.append("*");
-            }
-        }
-        sb.append(">");
-        out.println(sb);
-
-        sb.setLength(0);
-        sb.append("<!ATTLIST ").append(name);
-        sb.append(lSep).append("          id ID #IMPLIED");
-
-        enum = ih.getAttributes();
-        while (enum.hasMoreElements()) {
-            String attrName = (String) enum.nextElement();
-            if ("id".equals(attrName)) {
-              continue;
-            }
-
-            sb.append(lSep).append("          ").append(attrName).append(" ");
-            Class type = ih.getAttributeType(attrName);
-            if (type.equals(java.lang.Boolean.class) ||
-                type.equals(java.lang.Boolean.TYPE)) {
-                sb.append(BOOLEAN).append(" ");
-            } else if (org.apache.tools.ant.types.Reference.class.isAssignableFrom(type)) {
-                sb.append("IDREF ");
-            } else if (org.apache.tools.ant.types.EnumeratedAttribute.class.isAssignableFrom(type)) {
-                try {
-                    EnumeratedAttribute ea =
-                        (EnumeratedAttribute) type.newInstance();
-                    String[] values = ea.getValues();
-                    if (values == null
-                        || values.length == 0
-                        || !areNmtokens(values)) {
-                        sb.append("CDATA ");
-                    } else {
-                        sb.append("(");
-                        for (int i = 0; i < values.length; i++) {
-                            if (i != 0) {
-                                sb.append(" | ");
-                            }
-                            sb.append(values[i]);
-                        }
-                        sb.append(") ");
-                    }
-                } catch (InstantiationException ie) {
-                    sb.append("CDATA ");
-                } catch (IllegalAccessException ie) {
-                    sb.append("CDATA ");
-                }
-            } else {
-                sb.append("CDATA ");
-            }
-            sb.append("#IMPLIED");
-        }
-        sb.append(">").append(lSep);
-        out.println(sb);
-
-        final int count = v.size();
-        for (int i = 0; i < count; i++) {
-            String nestedName = (String) v.elementAt(i);
-            if (!"#PCDATA".equals(nestedName) 
-                 && !TASKS.equals(nestedName) 
-                 && !TYPES.equals(nestedName)) {
-                printElementDecl(out, nestedName, ih.getElementType(nestedName));
-            }
-        }
-    }
-
-    private void printTail(PrintWriter out) {}
-
-    /**
-     * Does this String match the XML-NMTOKEN production?
-     */
-    protected boolean isNmtoken(String s) {
-        final int length = s.length();
-        for (int i = 0; i < length; i++) {
-            char c = s.charAt(i);
-            // XXX - we are ommitting CombiningChar and Extender here
-            if (!Character.isLetterOrDigit(c) &&
-                c != '.' && c != '-' &&
-                c != '_' && c != ':') {
-                return false;
-            }
-        }
-        return true;
-    }
-
-    /**
-     * Do the Strings all match the XML-NMTOKEN production?
-     *
-     * <p>Otherwise they are not suitable as an enumerated attribute,
-     * for example.</p>
-     */
-    protected boolean areNmtokens(String[] s) {
-        for (int i = 0; i < s.length; i++) {
-            if (!isNmtoken(s[i])) {
-                return false;
-            }
-        }
-        return true;
-    }
-
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/Available.java b/src/main/org/apache/tools/ant/taskdefs/Available.java
deleted file mode 100644
index f2ad266..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Available.java
+++ /dev/null
@@ -1,540 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import java.io.File;
-
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.AntClassLoader;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.taskdefs.condition.Condition;
-import org.apache.tools.ant.types.EnumeratedAttribute;
-import org.apache.tools.ant.types.Path;
-import org.apache.tools.ant.types.Reference;
-import org.apache.tools.ant.util.FileUtils;
-import org.apache.tools.ant.util.StringUtils;
-
-/**
- * Will set the given property if the requested resource is available at 
- * runtime. This task may also be used as a condition by the condition task.
- *
- * @author Stefano Mazzocchi 
- *         <a href="mailto:stefano@apache.org">stefano@apache.org</a>
- * @author <a href="mailto:umagesh@apache.org">Magesh Umasankar</a>
- *
- * @since Ant 1.1
- *
- * @ant.task category="control"
- */
-public class Available extends Task implements Condition {
-
-    private String property;
-    private String classname;
-    private String file;
-    private Path filepath;
-    private String resource;
-    private FileDir type;
-    private Path classpath;
-    private AntClassLoader loader;
-    private String value = "true";
-    private boolean isTask = false;
-    private boolean ignoreSystemclasses = false;
-
-    /**
-     * Set the classpath to be used when searching for classes and resources
-     * 
-     * @param classpath an Ant Path object containing the search path.
-     */
-    public void setClasspath(Path classpath) {
-        createClasspath().append(classpath);
-    }
-
-    /**
-     * Create a classpath object to be configured by Ant. The resulting
-     * path will be used when searching for classes or resources
-     *
-     * @return an empty Path instance to be configured by Ant.
-     */
-    public Path createClasspath() {
-        if (this.classpath == null) {
-            this.classpath = new Path(project);
-        }
-        return this.classpath.createPath();
-    }
-
-    /**
-     * Set the classpath by reference.
-     *
-     * @param r a Reference to a Path instance to be used as the classpath 
-     *          value.
-     */
-    public void setClasspathRef(Reference r) {
-        createClasspath().setRefid(r);
-    }
-
-    /**
-     * Set the path to use when looking for a file
-     *
-     * @param filepath a Path instance containing the search path for files.
-     */
-    public void setFilepath(Path filepath) {
-        createFilepath().append(filepath);
-    }
-
-    /**
-     * Create a filepath to be configured by Ant.
-     *
-     * @return a new Path instance which Ant will configure with a file search
-     *         path.
-     */
-    public Path createFilepath() {
-        if (this.filepath == null) {
-            this.filepath = new Path(project);
-        }
-        return this.filepath.createPath();
-    }
-
-    /**
-     * Set the name of the property which will be set if the particular resource
-     * is available.
-     *
-     * @param property the name of the property to set.
-     */
-    public void setProperty(String property) {
-        this.property = property;
-    }
-
-    /**
-     * Set the value to be given to the property of the desired resource is
-     * available.
-     *
-     * @param value the value to be given.
-     */
-    public void setValue(String value) {
-        this.value = value;
-    }
-
-    /**
-     * Set a classname of a class which must be available to set the given 
-     * property.
-     *
-     * @param classname the name of the class required.
-     */
-    public void setClassname(String classname) {
-        if (!"".equals(classname)) {
-            this.classname = classname;
-        }
-    }
-
-    /**
-     * Set the file which must be present in the file system to set the given
-     * property.
-     *
-     * @param file the name of the file which is required.
-     */
-    public void setFile(String file) {
-        this.file = file;
-    }
-
-    /**
-     * Set the name of a Java resouirce which is required to set the property.
-     *
-     * @param resource the name of a resource which is required to be available.
-     */
-    public void setResource(String resource) {
-        this.resource = resource;
-    }
-
-    /**
-     * @deprecated setType(String) is deprecated and is replaced with
-     *             setType(Available.FileDir) to make Ant's Introspection
-     *             mechanism do the work and also to encapsulate operations on
-     *             the type in its own class.
-     */
-    public void setType(String type) {
-        log("DEPRECATED - The setType(String) method has been deprecated."
-            + " Use setType(Available.FileDir) instead.");
-        this.type = new FileDir();
-        this.type.setValue(type);
-    }
-
-    /**
-     * Set what type of file is required - either a directory or a file.
-     *
-     * @param type an instance of the FileDir enumeratedAttribute indicating
-     *             whether the file required is to be a directory or a plain 
-     *             file.
-     */
-    public void setType(FileDir type) {
-        this.type = type;
-    }
-
-    /**
-     * Set whether the search for classes should ignore the runtime classes and
-     * just use the given classpath.
-     *
-     * @param ignore true if system classes are to be ignored.
-     */
-    public void setIgnoresystemclasses(boolean ignore) {
-        this.ignoreSystemclasses = ignore;
-    }
-
-    /**
-     * Entry point when operating as a task.
-     *
-     * @exception BuildException if the task is not configured correctly.
-     */
-    public void execute() throws BuildException {
-        if (property == null) {
-            throw new BuildException("property attribute is required", 
-                                     location);
-        }
-
-        isTask = true;
-        try {
-            if (eval()) {
-                if (null != getProject().getProperty(property)) {
-                    log("DEPRECATED - <available> used to override an existing"
-                        + " property."
-                        + StringUtils.LINE_SEP
-                        + "  Build file should not reuse the same property"
-                        + " name for different values.");
-                }
-                getProject().setProperty(property, value);
-            }
-        } finally {
-            isTask = false;
-        }
-    }
-
-    /**
-     * Evaluate the availability of a resource.
-     *
-     * @return boolean is the resource is available.
-     * @exception if the condition is not configured correctly
-     */
-    public boolean eval() throws BuildException {
-        if (classname == null && file == null && resource == null) {
-            throw new BuildException("At least one of (classname|file|"
-                                     + "resource) is required", location);
-        }
-
-        if (type != null) {
-            if (file == null) {
-                throw new BuildException("The type attribute is only valid "
-                                         + "when specifying the file "
-                                         + "attribute.", location);
-            }
-        }
-
-        if (classpath != null) {
-            classpath.setProject(project);
-            this.loader = new AntClassLoader(project, classpath);
-        }
-
-        String appendix = "";
-        if (isTask) {
-            appendix = " to set property " + property;
-        } else {
-            setTaskName("available");
-        }
-
-        if ((classname != null) && !checkClass(classname)) {
-            log("Unable to load class " + classname + appendix, 
-                Project.MSG_VERBOSE);
-            return false;
-        }
-
-        if ((file != null) && !checkFile()) {
-            if (type != null) {
-                log("Unable to find " + type + " " + file + appendix, 
-                    Project.MSG_VERBOSE);
-            } else {
-                log("Unable to find " + file + appendix, Project.MSG_VERBOSE);
-            }
-            return false;
-        }
-
-        if ((resource != null) && !checkResource(resource)) {
-            log("Unable to load resource " + resource + appendix, 
-                Project.MSG_VERBOSE);
-            return false;
-        }
-
-        if (loader != null) {
-            loader.cleanup();
-            loader = null;
-        }
-
-        if (!isTask) {
-            setTaskName(null);
-        }
-
-        return true;
-    }
-
-    /**
-     * Search for file/directory either either relative to project's
-     * basedir or in the path given as filepath.
-     *
-     * <p>filepath can be a list of directory and/or file names (gen'd
-     * via <fileset>)</p>
-     *
-     * <p>look for:</p><ul>
-     *   <li>full-pathname specified == path in list</li>
-     *   <li>full-pathname specified == parent dir of path in list</li>
-     *   <li>simple name specified   == path in list</li>
-     *   <li>simple name specified   == path in list + name</li>
-     *   <li>simple name specified   == parent dir + name</li>
-     *   <li>simple name specified   == parent of parent dir + name</li>
-     * </ul>
-     */
-    private boolean checkFile() {
-        if (filepath == null) {
-            return checkFile(project.resolveFile(file), file);
-        } else {
-            String[] paths = filepath.list();
-            for (int i = 0; i < paths.length; ++i) {
-                log("Searching " + paths[i], Project.MSG_DEBUG);
-                File path = new File(paths[i]);
-
-                // **   full-pathname specified == path in list
-                // **   simple name specified   == path in list
-                if (path.exists() && file.equals(paths[i])) {
-                    if (type == null) {
-                        log("Found: " + path, Project.MSG_VERBOSE);
-                        return true;
-                    } else if (type.isDir()
-                               && path.isDirectory()) {
-                        log("Found directory: " + path, Project.MSG_VERBOSE);
-                        return true;
-                    } else if (type.isFile()
-                               && path.isFile()) {
-                        log("Found file: " + path, Project.MSG_VERBOSE);
-                        return true;
-                    }
-                    // not the requested type
-                    return false;
-                }
-
-                FileUtils fileUtils = FileUtils.newFileUtils();
-                File parent = fileUtils.getParentFile(path);
-                // **   full-pathname specified == parent dir of path in list
-                if (parent != null && parent.exists()
-                    && file.equals(parent.getAbsolutePath())) {
-                    if (type == null) {
-                        log("Found: " + parent, Project.MSG_VERBOSE);
-                        return true;
-                    } else if (type.isDir()) {
-                        log("Found directory: " + parent, Project.MSG_VERBOSE);
-                        return true;
-                    }
-                    // not the requested type
-                    return false;
-                }
-
-                // **   simple name specified   == path in list + name
-                if (path.exists() && path.isDirectory()) {
-                    if (checkFile(new File(path, file),
-                                  file + " in " + path)) {
-                        return true;
-                    }
-                }
-
-                // **   simple name specified   == parent dir + name
-                if (parent != null && parent.exists()) {
-                    if (checkFile(new File(parent, file),
-                                  file + " in " + parent)) {
-                        return true;
-                    }
-                }
-
-                // **   simple name specified   == parent of parent dir + name
-                if (parent != null) {
-                    File grandParent = fileUtils.getParentFile(parent);
-                    if (grandParent != null && grandParent.exists()) {
-                        if (checkFile(new File(grandParent, file),
-                                      file + " in " + grandParent)) {
-                            return true;
-                        }
-                    }
-                }
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Check if a given file exists and matches the required type.
-     */
-    private boolean checkFile(File f, String text) {
-        if (type != null) {
-            if (type.isDir()) {
-                if (f.isDirectory()) {
-                    log("Found directory: " + text, Project.MSG_VERBOSE);
-                }
-                return f.isDirectory();
-            } else if (type.isFile()) {
-                if (f.isFile()) {
-                    log("Found file: " + text, Project.MSG_VERBOSE);
-                }
-                return f.isFile();
-            }
-        }
-        if (f.exists()) {
-            log("Found: " + text, Project.MSG_VERBOSE);
-        }
-        return f.exists();
-    }
-
-    /**
-     * Check if a given resource can be loaded.
-     */
-    private boolean checkResource(String resource) {
-        if (loader != null) {
-            return (loader.getResourceAsStream(resource) != null);
-        } else {
-            ClassLoader cL = this.getClass().getClassLoader();
-            if (cL != null) {
-                return (cL.getResourceAsStream(resource) != null);
-            } else {
-                return
-                    (ClassLoader.getSystemResourceAsStream(resource) != null);
-            }
-        }
-    }
-
-    /**
-     * Check if a given class can be loaded.
-     */
-    private boolean checkClass(String classname) {
-        try {
-            Class requiredClass = null;
-            if (ignoreSystemclasses) {
-                loader = new AntClassLoader(null, getProject(), 
-                    classpath, false);
-                if (loader != null) {
-                    try {
-                        loader.findClass(classname);
-                    } catch (SecurityException se) {
-                        // class found but restricted name; this is actually
-                        // the case we're looking for, so catch the exception
-                        // and return
-                        return true;
-                    }
-                }
-                return false;
-            } else if (loader != null) {
-                requiredClass = loader.loadClass(classname);
-            } else {
-                ClassLoader l = this.getClass().getClassLoader();
-                // Can return null to represent the bootstrap class loader.
-                // see API docs of Class.getClassLoader.
-                if (l != null) {
-                    requiredClass = l.loadClass(classname);
-                } else {
-                    requiredClass = Class.forName(classname);
-                }
-            }
-            AntClassLoader.initializeClass(requiredClass);
-            return true;
-        } catch (ClassNotFoundException e) {
-            log("class \"" + classname + "\" was not found",
-                Project.MSG_DEBUG);
-            return false;
-        } catch (NoClassDefFoundError e) {
-            log("Could not load dependent class \"" + e.getMessage()
-                + "\" for class \"" + classname + "\"",
-                Project.MSG_DEBUG);
-            return false;
-        }
-    }
-
-    /**
-     * EnumeratedAttribute covering the file types to be checked for, either
-     * file or dir.
-     */
-    public static class FileDir extends EnumeratedAttribute {
-
-        private static final String[] values = {"file", "dir"};
-
-        /**
-         * @see EnumeratedAttribute#getValues
-         */
-        public String[] getValues() {
-            return values;
-        }
-
-        /**
-         * Indicate if the value specifies a directory.
-         *
-         * @return true if the value specifies a directory.
-         */
-        public boolean isDir() {
-            return "dir".equalsIgnoreCase(getValue());
-        }
-
-        /**
-         * Indicate if the value specifies a file.
-         *
-         * @return true if the value specifies a file.
-         */
-        public boolean isFile() {
-            return "file".equalsIgnoreCase(getValue());
-        }
-
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/BUnzip2.java b/src/main/org/apache/tools/ant/taskdefs/BUnzip2.java
deleted file mode 100644
index 4707484..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/BUnzip2.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-
-import java.io.BufferedInputStream;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.bzip2.CBZip2InputStream;
-
-/**
- * Expands a file that has been compressed with the BZIP2
- * algorithm. Normally used to compress non-compressed archives such
- * as TAR files.
- *
- * @author <a href="mailto:umagesh@rediffmail.com">Magesh Umasankar</a>
- *
- * @since Ant 1.5
- *
- * @ant.task category="packaging"
- */
-
-public class BUnzip2 extends Unpack {
-
-    private static final String DEFAULT_EXTENSION = ".bz2";
-
-    protected String getDefaultExtension() {
-        return DEFAULT_EXTENSION;
-    }
-
-    protected void extract() {
-        if (source.lastModified() > dest.lastModified()) {
-            log("Expanding " + source.getAbsolutePath() + " to "
-                + dest.getAbsolutePath());
-
-            FileOutputStream out = null;
-            CBZip2InputStream zIn = null;
-            FileInputStream fis = null;
-            BufferedInputStream bis = null;
-            try {
-                out = new FileOutputStream(dest);
-                fis = new FileInputStream(source);
-                bis = new BufferedInputStream(fis);
-                int b = bis.read();
-                if (b != 'B') {
-                    throw new BuildException("Invalid bz2 file.", location);
-                }
-                b = bis.read();
-                if (b != 'Z') {
-                    throw new BuildException("Invalid bz2 file.", location);
-                }
-                zIn = new CBZip2InputStream(bis);
-                byte[] buffer = new byte[8 * 1024];
-                int count = 0;
-                do {
-                    out.write(buffer, 0, count);
-                    count = zIn.read(buffer, 0, buffer.length);
-                } while (count != -1);
-            } catch (IOException ioe) {
-                String msg = "Problem expanding bzip2 " + ioe.getMessage();
-                throw new BuildException(msg, ioe, location);
-            } finally {
-                if (bis != null) {
-                    try {
-                        bis.close();
-                    } catch (IOException ioex) {}
-                }
-                if (fis != null) {
-                    try {
-                        fis.close();
-                    } catch (IOException ioex) {}
-                }
-                if (out != null) {
-                    try {
-                        out.close();
-                    } catch (IOException ioex) {}
-                }
-                if (zIn != null) {
-                    try {
-                        zIn.close();
-                    } catch (IOException ioex) {}
-                }
-            }
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/BZip2.java b/src/main/org/apache/tools/ant/taskdefs/BZip2.java
deleted file mode 100644
index b248b4c..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/BZip2.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-
-import java.io.BufferedOutputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.bzip2.CBZip2OutputStream;
-
-/**
- * Compresses a file with the BZip2 algorithm. Normally used to compress
- * non-compressed archives such as TAR files.
- *
- * @author <a href="mailto:umagesh@rediffmail.com">Magesh Umasankar</a>
- *
- * @since Ant 1.5
- *
- * @ant.task category="packaging"
- */
-
-public class BZip2 extends Pack {
-    protected void pack() {
-        CBZip2OutputStream zOut = null;
-        try {
-            BufferedOutputStream bos =
-                new BufferedOutputStream(new FileOutputStream(zipFile));
-            bos.write('B');
-            bos.write('Z');
-            zOut = new CBZip2OutputStream(bos);
-            zipFile(source, zOut);
-        } catch (IOException ioe) {
-            String msg = "Problem creating bzip2 " + ioe.getMessage();
-            throw new BuildException(msg, ioe, location);
-        } finally {
-            if (zOut != null) {
-                try {
-                    // close up
-                    zOut.close();
-                } catch (IOException e) {}
-            }
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/Basename.java b/src/main/org/apache/tools/ant/taskdefs/Basename.java
deleted file mode 100644
index 50907e7..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Basename.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import java.io.File;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Task;
-
-/**
- * Task to determine the basename of a specified file, optionally minus a
- * specified suffix.
- *
- * This task can accept the following attributes:
- * <ul>
- * <li>file
- * <li>property
- * <li>suffix
- * </ul>
- * The <b>file</b> and <b>property</b> attributes are required. The
- * <b>suffix</b> attribute can be specified either with or without
- * the &quot;.&quot;, and the result will be the same (ie., the
- * returned file name will be minus the .suffix).
- * <p>
- * When this task executes, it will set the specified property to the
- * value of the last element in the specified file. If file is a
- * directory, the basename will be the last directory element. If file
- * is a full-path filename, the basename will be the simple file name.
- * If a suffix is specified, and the specified file ends in that suffix,
- * the basename will be the simple file name without the suffix.
- *
- * @author Diane Holt <a href="mailto:holtdl@apache.org">holtdl@apache.org</a>
- *
- * @version $Revision$
- *
- * @since Ant 1.5
- *
- * @ant.task category="property"
- */
-
-public class Basename extends Task {
-  private File file;
-  private String property;
-  private String suffix;
-
-  // The setter for the `file' attribute
-  public void setFile(File file) {
-    this.file = file;
-  }
-
-  // The setter for the `property' attribute
-  public void setProperty(String property) {
-    this.property  = property ;
-  }
-
-  // The setter for the `suffix' attribute
-  public void setSuffix(String suffix) {
-    this.suffix = suffix;
-  }
-
-
-  // The method executing the task
-  public void execute() throws BuildException {
-      String value;
-      if (property == null) {
-          throw new BuildException("property attribute required", location);
-      }
-      if (file == null) {
-          throw new BuildException("file attribute required", location);
-      } else {
-        value = file.getName();
-        if (suffix != null && value.endsWith(suffix)) {
-            int pos = value.indexOf('.');
-            value = value.substring(0, pos);
-        }
-        getProject().setNewProperty(property, value);
-      }
-  }
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/BuildNumber.java b/src/main/org/apache/tools/ant/taskdefs/BuildNumber.java
deleted file mode 100644
index e05fc4d..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/BuildNumber.java
+++ /dev/null
@@ -1,236 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.util.Properties;
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.util.FileUtils;
-
-/**
- * This is a basic task that can be used to track build numbers. It will first
- * attempt to read a build number from a file, then set the property
- * "build.number" to the value that was read in (or 0 if no such value). Then
- * it will increment the build number by one and write it back out into the
- * file.
- *
- * @author <a href="mailto:peter@apache.org">Peter Donald</a>
- * @version $Revision$ $Date$
- * @since Ant 1.5
- * @ant.task name="buildnumber"
- */
-public class BuildNumber
-     extends Task {
-    /**
-     * The name of the property in which the build number is stored.
-     */
-    private static final String DEFAULT_PROPERTY_NAME = "build.number";
-
-    /** The default filename to use if no file specified.  */
-    private static final String DEFAULT_FILENAME = DEFAULT_PROPERTY_NAME;
-
-    /** The File in which the build number is stored.  */
-    private File m_file;
-
-
-    /**
-     * Specify the file in which the build numberis stored. Defaults to
-     * "build.number" if not specified.
-     *
-     * @param file the file in which build number is stored.
-     */
-    public void setFile(final File file) {
-        m_file = file;
-    }
-
-
-    /**
-     * Run task.
-     *
-     * @exception BuildException if an error occurs
-     */
-    public void execute()
-         throws BuildException {
-        File savedFile = m_file;// may be altered in validate
-
-        validate();
-
-        final Properties properties = loadProperties();
-        final int buildNumber = getBuildNumber(properties);
-
-        properties.put(DEFAULT_PROPERTY_NAME,
-            String.valueOf(buildNumber + 1));
-
-        // Write the properties file back out
-        FileOutputStream output = null;
-
-        try {
-            output = new FileOutputStream(m_file);
-
-            final String header = "Build Number for ANT. Do not edit!";
-
-            properties.save(output, header);
-        } catch (final IOException ioe) {
-            final String message = "Error while writing " + m_file;
-
-            throw new BuildException(message, ioe);
-        } finally {
-            if (null != output) {
-                try {
-                    output.close();
-                } catch (final IOException ioe) {
-                }
-            }
-            m_file = savedFile;
-        }
-
-        //Finally set the property
-        getProject().setNewProperty(DEFAULT_PROPERTY_NAME,
-            String.valueOf(buildNumber));
-    }
-
-
-    /**
-     * Utility method to retrieve build number from properties object.
-     *
-     * @param properties the properties to retrieve build number from
-     * @return the build number or if no number in properties object
-     * @throws BuildException if build.number property is not an integer
-     */
-    private int getBuildNumber(final Properties properties)
-         throws BuildException {
-        final String buildNumber =
-            properties.getProperty(DEFAULT_PROPERTY_NAME, "0").trim();
-
-        // Try parsing the line into an integer.
-        try {
-            return Integer.parseInt(buildNumber);
-        } catch (final NumberFormatException nfe) {
-            final String message =
-                m_file + " contains a non integer build number: " + buildNumber;
-
-            throw new BuildException(message, nfe);
-        }
-    }
-
-
-    /**
-     * Utility method to load properties from file.
-     *
-     * @return the loaded properties
-     * @throws BuildException
-     */
-    private Properties loadProperties()
-         throws BuildException {
-        FileInputStream input = null;
-
-        try {
-            final Properties properties = new Properties();
-
-            input = new FileInputStream(m_file);
-            properties.load(input);
-            return properties;
-        } catch (final IOException ioe) {
-            throw new BuildException(ioe);
-        } finally {
-            if (null != input) {
-                try {
-                    input.close();
-                } catch (final IOException ioe) {
-                }
-            }
-        }
-    }
-
-
-    /**
-     * Validate that the task parameters are valid.
-     *
-     * @throws BuildException if parameters are invalid
-     */
-    private void validate()
-         throws BuildException {
-        if (null == m_file) {
-            m_file = getProject().resolveFile(DEFAULT_FILENAME);
-        }
-
-        if (!m_file.exists()) {
-            try {
-                FileUtils.newFileUtils().createNewFile(m_file);
-            } catch (final IOException ioe) {
-                final String message =
-                    m_file + " doesn't exist and new file can't be created.";
-
-                throw new BuildException(message, ioe);
-            }
-        }
-
-        if (!m_file.canRead()) {
-            final String message = "Unable to read from " + m_file + ".";
-
-            throw new BuildException(message);
-        }
-
-        if (!m_file.canWrite()) {
-            final String message = "Unable to write to " + m_file + ".";
-
-            throw new BuildException(message);
-        }
-    }
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/CVSPass.java b/src/main/org/apache/tools/ant/taskdefs/CVSPass.java
deleted file mode 100644
index 11ea5c6..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/CVSPass.java
+++ /dev/null
@@ -1,201 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights 
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.util.StringUtils;
-
-import java.io.File;
-import java.io.BufferedReader;
-import java.io.FileReader;
-import java.io.PrintWriter;
-import java.io.FileWriter;
-import java.io.IOException;
-
-/**
- * CVSLogin
- *
- * Adds an new entry to a CVS password file
- *
- * @author <a href="jeff@custommonkey.org">Jeff Martin</a>
- * @version $Revision$
- *
- * @since Ant 1.4
- *
- * @ant.task category="scm"
- */
-public class CVSPass extends Task {
-    /** CVS Root */
-    private String cvsRoot = null; 
-    /** Password file to add password to */
-    private File passFile = null;
-    /** Password to add to file */
-    private String password = null;
-
-    /** Array contain char conversion data */
-    private final char[] shifts = {
-          0,   1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,  13,  14,  15,
-         16,  17,  18,  19,  20,  21,  22,  23,  24,  25,  26,  27,  28,  29,  30,  31,
-        114, 120,  53,  79,  96, 109,  72, 108,  70,  64,  76,  67, 116,  74,  68,  87,
-        111,  52,  75, 119,  49,  34,  82,  81,  95,  65, 112,  86, 118, 110, 122, 105,
-         41,  57,  83,  43,  46, 102,  40,  89,  38, 103,  45,  50,  42, 123,  91,  35,
-        125,  55,  54,  66, 124, 126,  59,  47,  92,  71, 115,  78,  88, 107, 106,  56,
-         36, 121, 117, 104, 101, 100,  69,  73,  99,  63,  94,  93,  39,  37,  61,  48,
-         58, 113,  32,  90,  44,  98,  60,  51,  33,  97,  62,  77,  84,  80,  85, 223,
-        225, 216, 187, 166, 229, 189, 222, 188, 141, 249, 148, 200, 184, 136, 248, 190,
-        199, 170, 181, 204, 138, 232, 218, 183, 255, 234, 220, 247, 213, 203, 226, 193,
-        174, 172, 228, 252, 217, 201, 131, 230, 197, 211, 145, 238, 161, 179, 160, 212,
-        207, 221, 254, 173, 202, 146, 224, 151, 140, 196, 205, 130, 135, 133, 143, 246,
-        192, 159, 244, 239, 185, 168, 215, 144, 139, 165, 180, 157, 147, 186, 214, 176,
-        227, 231, 219, 169, 175, 156, 206, 198, 129, 164, 150, 210, 154, 177, 134, 127,
-        182, 128, 158, 208, 162, 132, 167, 209, 149, 241, 153, 251, 237, 236, 171, 195,
-        243, 233, 253, 240, 194, 250, 191, 155, 142, 137, 245, 235, 163, 242, 178, 152 
-    };
-
-    /**
-     * Create a CVS task using the default cvspass file location.
-     */
-    public CVSPass(){
-        passFile = new File(System.getProperty("user.home") + "/.cvspass");
-    }
-
-    /**
-     * Does the work.
-     *
-     * @exception BuildException if someting goes wrong with the build
-     */
-    public final void execute() throws BuildException {
-        if (cvsRoot == null) {
-            throw new BuildException("cvsroot is required");
-        }
-        if (password == null) {
-            throw new BuildException("password is required");
-        }
-
-        log("cvsRoot: " + cvsRoot, Project.MSG_DEBUG);
-        log("password: " + password, Project.MSG_DEBUG);
-        log("passFile: " + passFile, Project.MSG_DEBUG);
-
-        BufferedReader reader = null;
-        PrintWriter writer = null;
-        try {
-            StringBuffer buf = new StringBuffer();
-
-            if (passFile.exists()) {
-                reader = new BufferedReader(new FileReader(passFile));
-
-                String line = null;
-
-                while ((line = reader.readLine()) != null) {
-                    if (!line.startsWith(cvsRoot)) {
-                        buf.append(line).append(StringUtils.LINE_SEP);
-                    }
-                }
-            }
-
-            String pwdfile = buf.toString() + cvsRoot + " A" 
-                + mangle(password);
-
-            log("Writing -> " + pwdfile , Project.MSG_DEBUG);
-
-            writer = new PrintWriter(new FileWriter(passFile));
-
-            writer.println(pwdfile);
-        } catch (IOException e) {
-            throw new BuildException(e);
-        } finally {
-            if (reader != null) {
-                try {
-                    reader.close();
-                } catch (IOException e) {}
-            }
-            if (writer != null) {
-                writer.close();
-            }
-        }
-    }
-
-    private final String mangle(String password){
-        StringBuffer buf = new StringBuffer();
-        for (int i = 0; i < password.length(); i++) {
-            buf.append(shifts[password.charAt(i)]);
-        }
-        return buf.toString();
-    }
-
-    /**
-     * Sets cvs root to be added to the password file
-     */
-    public void setCvsroot(String cvsRoot) {
-        this.cvsRoot = cvsRoot;
-    }
-
-    /**
-     * Sets the password file attribute.
-     */
-    public void setPassfile(File passFile) {
-        this.passFile = passFile;
-    }
-
-    /**
-     * Sets the password attribute.
-     */
-    public void setPassword(String password) {
-        this.password = password;
-    }
-
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/CallTarget.java b/src/main/org/apache/tools/ant/taskdefs/CallTarget.java
deleted file mode 100644
index e0d2151..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/CallTarget.java
+++ /dev/null
@@ -1,203 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.BuildException;
-
-/**
- * Call another target in the same project.
- *
- *  <pre>
- *    &lt;target name="foo"&gt;
- *      &lt;antcall target="bar"&gt;
- *        &lt;param name="property1" value="aaaaa" /&gt;
- *        &lt;param name="foo" value="baz" /&gt;
- *       &lt;/antcall&gt;
- *    &lt;/target&gt;
- *
- *    &lt;target name="bar" depends="init"&gt;
- *      &lt;echo message="prop is ${property1} ${foo}" /&gt;
- *    &lt;/target&gt;
- * </pre>
- *
- * <p>This only works as expected if neither property1 nor foo are
- * defined in the project itself.
- *
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> 
- *
- * @since Ant 1.2
- *
- * @ant.task name="antcall" category="control"
- */
-public class CallTarget extends Task {
-
-    private Ant callee;
-    private String subTarget;
-    // must match the default value of Ant#inheritAll
-    private boolean inheritAll = true;
-    // must match the default value of Ant#inheritRefs
-    private boolean inheritRefs = false;
-
-    /**
-     * If true, inherit all properties from parent Project
-     * If false, inherit only userProperties and those defined
-     * inside the antcall call itself
-     **/
-    public void setInheritAll(boolean inherit) {
-       inheritAll = inherit;
-    }
-
-    /**
-     * set the inherit refs flag
-     * @param inheritRefs new value
-     */
-    public void setInheritRefs(boolean inheritRefs) {
-        this.inheritRefs = inheritRefs;
-    }
-
-    /**
-     * init this task by creating new instance of the ant task and
-     * configuring it's by calling its own init method.
-     */
-    public void init() {
-        callee = (Ant) getProject().createTask("ant");
-        callee.setOwningTarget(getOwningTarget());
-        callee.setTaskName(getTaskName());
-        callee.setLocation(getLocation());
-        callee.init();
-    }
-
-    /**
-     * hand off the work to the ant task of ours, after setting it up
-     * @throws BuildException on validation failure or if the target didn't
-     * execute
-     */
-    public void execute() throws BuildException {
-        if (callee == null) {
-            init();
-        }
-        
-        if (subTarget == null) {
-            throw new BuildException("Attribute target is required.", 
-                                     location);
-        }
-        
-        callee.setDir(getProject().getBaseDir());
-        callee.setAntfile(getProject().getProperty("ant.file"));
-        callee.setTarget(subTarget);
-        callee.setInheritAll(inheritAll);
-        callee.setInheritRefs(inheritRefs);
-        callee.execute();
-    }
-
-    /**
-     * Create a nested param element.
-     */
-    public Property createParam() {
-        if (callee == null) {
-            init();
-        }
-        return callee.createProperty();
-    }
-
-    /** 
-     * create a reference element that identifies a data type that
-     * should be carried over to the new project.
-     *
-     * @since Ant 1.5
-     */
-    public void addReference(Ant.Reference r) {
-        if (callee == null) {
-            init();
-        }
-        callee.addReference(r);
-    }
-
-    /**
-     * Sets the target attribute, required.
-     */
-    public void setTarget(String target) {
-        subTarget = target;
-    }
-
-    /**
-     * Pass output sent to System.out to the new project.
-     *
-     * @since Ant 1.5
-     */
-    protected void handleOutput(String line) {
-        if (callee != null) {
-            callee.handleOutput(line);
-        } else {
-            super.handleOutput(line);
-        }
-    }
-    
-    /**
-     * Pass output sent to System.err to the new project.
-     *
-     * @since Ant 1.5
-     */
-    protected void handleErrorOutput(String line) {
-        if (callee != null) {
-            callee.handleErrorOutput(line);
-        } else {
-            super.handleErrorOutput(line);
-        }
-    }
-    
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/Checksum.java b/src/main/org/apache/tools/ant/taskdefs/Checksum.java
deleted file mode 100644
index c34924e..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Checksum.java
+++ /dev/null
@@ -1,436 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.InputStreamReader;
-import java.io.IOException;
-import java.security.DigestInputStream;
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
-import java.security.NoSuchProviderException;
-import java.util.Enumeration;
-import java.util.Hashtable;
-import java.util.Vector;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.DirectoryScanner;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.taskdefs.condition.Condition;
-import org.apache.tools.ant.types.FileSet;
-
-/**
- * This task can be used to create checksums for files.
- * It can also be used to verify checksums.
- *
- * @author <a href="mailto:umagesh@apache.org">Magesh Umasankar</a>
- *
- * @since Ant 1.5
- *
- * @ant.task category="control"
- */
-public class Checksum extends MatchingTask implements Condition {
-    /**
-     * File for which checksum is to be calculated.
-     */
-    private File file = null;
-    /**
-     * MessageDigest algorithm to be used.
-     */
-    private String algorithm = "MD5";
-    /**
-     * MessageDigest Algorithm provider
-     */
-    private String provider = null;
-    /**
-     * File Extension that is be to used to create or identify
-     * destination file
-     */
-    private String fileext;
-    /**
-     * Holds generated checksum and gets set as a Project Property.
-     */
-    private String property;
-    /**
-     * Whether or not to create a new file.
-     * Defaults to <code>false</code>.
-     */
-    private boolean forceOverwrite;
-    /**
-     * Contains the result of a checksum verification. ("true" or "false")
-     */
-    private String verifyProperty;
-    /**
-     * Vector to hold source file sets.
-     */
-    private Vector filesets = new Vector();
-    /**
-     * Stores SourceFile, DestFile pairs and SourceFile, Property String pairs.
-     */
-    private Hashtable includeFileMap = new Hashtable();
-    /**
-     * Message Digest instance
-     */
-    private MessageDigest messageDigest;
-    /**
-     * is this task being used as a nested condition element?
-     */
-    private boolean isCondition;
-
-    /**
-     * Sets the file for which the checksum is to be calculated.
-     */
-    public void setFile(File file) {
-        this.file = file;
-    }
-
-    /**
-     * Sets the MessageDigest algorithm to be used
-     * to calculate the checksum.
-     */
-    public void setAlgorithm(String algorithm) {
-        this.algorithm = algorithm;
-    }
-
-    /**
-     * Sets the MessageDigest algorithm provider to be used
-     * to calculate the checksum.
-     */
-    public void setProvider(String provider) {
-        this.provider = provider;
-    }
-
-    /**
-     * Sets the File Extension that is be to used to
-     * create or identify destination file
-     */
-    public void setFileext(String fileext) {
-        this.fileext = fileext;
-    }
-
-    /**
-     * Sets the property to hold the generated checksum
-     */
-    public void setProperty(String property) {
-        this.property = property;
-    }
-
-    /**
-     * Sets verify property.  This project property holds
-     * the result of a checksum verification - "true" or "false"
-     */
-    public void setVerifyproperty(String verifyProperty) {
-        this.verifyProperty = verifyProperty;
-    }
-
-    /**
-     * Whether or not to overwrite existing file irrespective of 
-     * whether it is newer than
-     * the source file.  Defaults to false.
-     */
-    public void setForceOverwrite(boolean forceOverwrite) {
-        this.forceOverwrite = forceOverwrite;
-    }
-
-    /**
-     * Adds a set of files (nested fileset attribute).
-     */
-    public void addFileset(FileSet set) {
-        filesets.addElement(set);
-    }
-
-    /**
-     * Calculate the checksum(s).
-     */
-    public void execute() throws BuildException {
-        isCondition = false;
-        boolean value = validateAndExecute();
-        if (verifyProperty != null) {
-            project.setNewProperty(verifyProperty,
-                                new Boolean(value).toString());
-        }
-    }
-
-    /**
-     * Calculate the checksum(s)
-     *
-     * @return Returns true if the checksum verification test passed,
-     * false otherwise.
-     */
-    public boolean eval() throws BuildException {
-        isCondition = true;
-        return validateAndExecute();
-    }
-
-    /**
-     * Validate attributes and get down to business.
-     */
-    private boolean validateAndExecute() throws BuildException {
-        String savedFileExt = fileext;
-
-        if (file == null && filesets.size() == 0) {
-            throw new BuildException(
-                "Specify at least one source - a file or a fileset.");
-        }
-
-        if (file != null && file.exists() && file.isDirectory()) {
-            throw new BuildException(
-                "Checksum cannot be generated for directories");
-        }
-
-        if (property != null && fileext != null) {
-            throw new BuildException(
-                "Property and FileExt cannot co-exist.");
-        }
-
-        if (property != null) {
-            if (forceOverwrite) {
-                throw new BuildException(
-                    "ForceOverwrite cannot be used when Property is specified");
-            }
-
-            if (file != null) {
-                if (filesets.size() > 0) {
-                    throw new BuildException("Multiple files cannot be used " 
-                        + "when Property is specified");
-                }
-            } else {
-                if (filesets.size() > 1) {
-                    throw new BuildException("Multiple files cannot be used " 
-                        + "when Property is specified");
-                }
-            }
-        }
-
-        if (verifyProperty != null) {
-            isCondition = true;
-        }
-
-        if (verifyProperty != null && forceOverwrite) {
-            throw new BuildException(
-                "VerifyProperty and ForceOverwrite cannot co-exist.");
-        }
-
-        if (isCondition && forceOverwrite) {
-            throw new BuildException("ForceOverwrite cannot be used when " 
-                + "conditions are being used.");
-        }
-
-        messageDigest = null;
-        if (provider != null) {
-            try {
-                messageDigest = MessageDigest.getInstance(algorithm, provider);
-            } catch (NoSuchAlgorithmException noalgo) {
-                throw new BuildException(noalgo, location);
-            } catch (NoSuchProviderException noprovider) {
-                throw new BuildException(noprovider, location);
-            }
-        } else {
-            try {
-                messageDigest = MessageDigest.getInstance(algorithm);
-            } catch (NoSuchAlgorithmException noalgo) {
-                throw new BuildException(noalgo, location);
-            }
-        }
-
-        if (messageDigest == null) {
-            throw new BuildException("Unable to create Message Digest",
-                location);
-        }
-
-        if (fileext == null) {
-            fileext = "." + algorithm;
-        } else if (fileext.trim().length() == 0) {
-            throw new BuildException(
-                "File extension when specified must not be an empty string");
-        }
-
-        try {
-            addToIncludeFileMap(file);
-            
-            int sizeofFileSet = filesets.size();
-            for (int i = 0; i < sizeofFileSet; i++) {
-                FileSet fs = (FileSet) filesets.elementAt(i);
-                DirectoryScanner ds = fs.getDirectoryScanner(project);
-                String[] srcFiles = ds.getIncludedFiles();
-                for (int j = 0; j < srcFiles.length; j++) {
-                    File src = new File(fs.getDir(project), srcFiles[j]);
-                    addToIncludeFileMap(src);
-                }
-            }
-
-            return generateChecksums();
-        } finally {
-            fileext = savedFileExt;
-            includeFileMap.clear();
-        }
-    }
-
-    /**
-     * Add key-value pair to the hashtable upon which
-     * to later operate upon.
-     */
-    private void addToIncludeFileMap(File file) throws BuildException {
-        if (file != null) {
-            if (file.exists()) {
-                if (property == null) {
-                    File dest 
-                        = new File(file.getParent(), file.getName() + fileext);
-                    if (forceOverwrite || isCondition ||
-                        (file.lastModified() > dest.lastModified())) {
-                        includeFileMap.put(file, dest);
-                    } else {
-                        log(file + " omitted as " + dest + " is up to date.",
-                            Project.MSG_VERBOSE);
-                    }
-                } else {
-                    includeFileMap.put(file, property);
-                }
-            } else {
-                String message = "Could not find file "
-                                 + file.getAbsolutePath()
-                                 + " to generate checksum for.";
-                log(message);
-                throw new BuildException(message, location);
-            }
-        }
-    }
-
-    /**
-     * Generate checksum(s) using the message digest created earlier.
-     */
-    private boolean generateChecksums() throws BuildException {
-        boolean checksumMatches = true;
-        FileInputStream fis = null;
-        FileOutputStream fos = null;
-        try {
-            for (Enumeration e = includeFileMap.keys(); e.hasMoreElements();) {
-                messageDigest.reset();
-                File src = (File) e.nextElement();
-                if (!isCondition) {
-                    log("Calculating " + algorithm + " checksum for " + src);
-                }
-                fis = new FileInputStream(src);
-                DigestInputStream dis = new DigestInputStream(fis,
-                                                              messageDigest);
-                while (dis.read() != -1) {
-                 ;
-                }
-                dis.close();
-                fis.close();
-                fis = null;
-                byte[] fileDigest = messageDigest.digest ();
-                StringBuffer checksumSb = new StringBuffer();
-                for (int i = 0; i < fileDigest.length; i++) {
-                    String hexStr = Integer.toHexString(0x00ff & fileDigest[i]);
-                    if (hexStr.length() < 2) {
-                        checksumSb.append("0");
-                    }
-                    checksumSb.append(hexStr);
-                }
-                String checksum = checksumSb.toString();
-                //can either be a property name string or a file
-                Object destination = includeFileMap.get(src);
-                if (destination instanceof java.lang.String) {
-                    String prop = (String) destination;
-                    if (isCondition) {
-                        checksumMatches = checksum.equals(property);
-                    } else {
-                        project.setNewProperty(prop, checksum);
-                    }
-                } else if (destination instanceof java.io.File) {
-                    if (isCondition) {
-                        File existingFile = (File) destination;
-                        if (existingFile.exists()) {
-                            fis = new FileInputStream(existingFile);
-                            InputStreamReader isr = new InputStreamReader(fis);
-                            BufferedReader br = new BufferedReader(isr);
-                            String suppliedChecksum = br.readLine();
-                            fis.close();
-                            fis = null;
-                            br.close();
-                            isr.close();
-                            checksumMatches =
-                                checksum.equals(suppliedChecksum);
-                        } else {
-                            checksumMatches = false;
-                        }
-                    } else {
-                        File dest = (File) destination;
-                        fos = new FileOutputStream(dest);
-                        fos.write(checksum.getBytes());
-                        fos.close();
-                        fos = null;
-                    }
-                }
-            }
-        } catch (Exception e) {
-            throw new BuildException(e, location);
-        } finally {
-            if (fis != null) {
-                try {
-                    fis.close();
-                } catch (IOException e) {}
-            }
-            if (fos != null) {
-                try {
-                    fos.close();
-                } catch (IOException e) {}
-            }
-        }
-        return checksumMatches;
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/Chmod.java b/src/main/org/apache/tools/ant/taskdefs/Chmod.java
deleted file mode 100644
index 6a75599..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Chmod.java
+++ /dev/null
@@ -1,240 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import java.io.File;
-import java.io.IOException;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.taskdefs.condition.Os;
-import org.apache.tools.ant.types.Commandline;
-import org.apache.tools.ant.types.FileSet;
-import org.apache.tools.ant.types.PatternSet;
-
-/**
- * Chmod equivalent for unix-like environments.
- *
- * @author costin@eng.sun.com
- * @author Mariusz Nowostawski (Marni) 
- *         <a href="mailto:mnowostawski@infoscience.otago.ac.nz">mnowostawski@infoscience.otago.ac.nz</a>
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- *
- * @since Ant 1.1
- *
- * @ant.task category="filesystem"
- */
-public class Chmod extends ExecuteOn {
-
-    private FileSet defaultSet = new FileSet();
-    private boolean defaultSetDefined = false;
-    private boolean havePerm = false;
-
-    /**
-     * Chmod task for setting file and directory permissions.
-     */
-    public Chmod() {
-        super.setExecutable("chmod");
-        super.setParallel(true);
-        super.setSkipEmptyFilesets(true);
-    }
-
-    /**
-     * @see org.apache.tools.ant.ProjectComponent#setProject
-     */
-    public void setProject(Project project) {
-        super.setProject(project);
-        defaultSet.setProject(project);
-    }
-
-    public void setFile(File src) {
-        FileSet fs = new FileSet();
-        fs.setDir(new File(src.getParent()));
-        fs.createInclude().setName(src.getName());
-        addFileset(fs);
-    }
-
-    public void setDir(File src) {
-        defaultSet.setDir(src);
-    }
-
-    public void setPerm(String perm) {
-        createArg().setValue(perm);
-        havePerm = true;
-    }
-
-    /**
-     * add a name entry on the include list
-     */
-    public PatternSet.NameEntry createInclude() {
-        defaultSetDefined = true;
-        return defaultSet.createInclude();
-    }
-
-    /**
-     * add a name entry on the exclude list
-     */
-    public PatternSet.NameEntry createExclude() {
-        defaultSetDefined = true;
-        return defaultSet.createExclude();
-    }
-
-    /**
-     * add a set of patterns
-     */
-    public PatternSet createPatternSet() {
-        defaultSetDefined = true;
-        return defaultSet.createPatternSet();
-    }
-
-    /**
-     * Sets the set of include patterns. Patterns may be separated by a comma
-     * or a space.
-     *
-     * @param includes the string containing the include patterns
-     */
-    public void setIncludes(String includes) {
-        defaultSetDefined = true;
-        defaultSet.setIncludes(includes);
-    }
-
-    /**
-     * Sets the set of exclude patterns. Patterns may be separated by a comma
-     * or a space.
-     *
-     * @param excludes the string containing the exclude patterns
-     */
-    public void setExcludes(String excludes) {
-        defaultSetDefined = true;
-        defaultSet.setExcludes(excludes);
-    }
-
-    /**
-     * Sets whether default exclusions should be used or not.
-     *
-     * @param useDefaultExcludes "true"|"on"|"yes" when default exclusions
-     *                           should be used, "false"|"off"|"no" when they
-     *                           shouldn't be used.
-     */
-    public void setDefaultexcludes(boolean useDefaultExcludes) {
-        defaultSetDefined = true;
-        defaultSet.setDefaultexcludes(useDefaultExcludes);
-    }
-
-    protected void checkConfiguration() {
-        if (!havePerm) {
-            throw new BuildException("Required attribute perm not set in chmod",
-                    location);
-        }
-
-        if (defaultSetDefined && defaultSet.getDir(project) != null) {
-            addFileset(defaultSet);
-        }
-        super.checkConfiguration();
-    }
-
-    public void execute() throws BuildException {
-        /*
-         * In Ant 1.1, <chmod dir="foo" /> means, change the permissions
-         * of directory foo, not anything inside of it.  This is the case the
-         * second branch of the if statement below catches for backwards
-         * compatibility.
-         */
-        if (defaultSetDefined || defaultSet.getDir(project) == null) {
-            try {
-                super.execute();
-            } finally {
-                if (defaultSetDefined && defaultSet.getDir(project) != null) {
-                    filesets.removeElement(defaultSet);
-                }
-            }
-        } else if (isValidOs()) {
-            // we are chmodding the given directory
-            Execute execute = prepareExec();
-            Commandline cloned = (Commandline) cmdl.clone();
-            cloned.createArgument().setValue(defaultSet.getDir(project)
-                                             .getPath());
-            try {
-                execute.setCommandline(cloned.getCommandline());
-                runExecute(execute);
-            } catch (IOException e) {
-                throw new BuildException("Execute failed: " + e, e, location);
-            } finally {
-                // close the output file if required
-                logFlush();
-            }
-        }
-    }
-
-
-    public void setExecutable(String e) {
-        throw new BuildException(taskType 
-            + " doesn\'t support the executable attribute", location);
-    }
-
-    public void setCommand(Commandline cmdl) {
-        throw new BuildException(taskType 
-            + " doesn\'t support the command attribute", location);
-    }
-
-    public void setSkipEmptyFilesets(boolean skip) {
-        throw new BuildException(taskType 
-            + " doesn\'t support the skipemptyfileset attribute", location);
-    }
-
-    protected boolean isValidOs() {
-        return Os.isFamily("unix") && super.isValidOs();
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/Concat.java b/src/main/org/apache/tools/ant/taskdefs/Concat.java
deleted file mode 100644
index 0ace41e..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Concat.java
+++ /dev/null
@@ -1,524 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.ProjectHelper;
-import org.apache.tools.ant.DirectoryScanner;
-import org.apache.tools.ant.BuildException;
-
-import org.apache.tools.ant.types.FileSet;
-import org.apache.tools.ant.types.FileList;
-
-import org.apache.tools.ant.util.StringUtils;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.OutputStream;
-import java.io.OutputStreamWriter;
-import java.io.PrintWriter;
-import java.io.StringReader;
-
-import java.util.Vector; // 1.1
-import java.util.Enumeration; // 1.1
-
-/**
- * This class contains the 'concat' task, used to concatenate a series
- * of files into a single stream. The destination of this stream may
- * be the system console, or a file. The following is a sample
- * invocation:
- *
- * <pre>
- * &lt;concat destfile=&quot;${build.dir}/index.xml&quot;
- *   append=&quot;false&quot;&gt;
- *
- *   &lt;fileset dir=&quot;${xml.root.dir}&quot;
- *     includes=&quot;*.xml&quot; /&gt;
- *
- * &lt;/concat&gt;
- * </pre>
- *
- * @author <a href="mailto:derek@activate.net">Derek Slager</a>
- */
-public class Concat extends Task {
-
-    // Attributes.
-
-    /**
-     * The destination of the stream. If <code>null</code>, the system
-     * console is used.
-     */
-    private File destinationFile = null;
-
-    /**
-     * If the destination file exists, should the stream be appended? 
-     * Defaults to <code>false</code>.
-     */
-    private boolean append = false;
-
-    /**
-     * Stores the input file encoding.
-     */
-    private String encoding = null;
-
-    // Child elements.
-
-    /**
-     * This buffer stores the text within the 'concat' element.
-     */
-    private StringBuffer textBuffer;
-
-    /**
-     * Stores a collection of file sets and/or file lists, used to
-     * select multiple files for concatenation.
-     */
-    private Vector fileSets = new Vector(); // 1.1
-
-    // Constructors.
-
-    /**
-     * Public, no-argument constructor. Required by Ant.
-     */
-    public Concat() {}
-
-    // Attribute setters.
-
-    /**
-     * Sets the destination file for the stream.
-     */
-    public void setDestfile(File destinationFile) {
-        this.destinationFile = destinationFile;
-    }
-
-    /**
-     * Sets the behavior when the destination file exists, if set to
-     * <code>true</code> the stream data will be appended to the
-     * existing file, otherwise the existing file will be
-     * overwritten. Defaults to <code>false</code>.
-     */
-    public void setAppend(boolean append) {
-        this.append = append;
-    }
-
-    /**
-     * Sets the encoding for the input files, used when displaying the
-     * data via the console.
-     */
-    public void setEncoding(String encoding) {
-        this.encoding = encoding;
-    }
-
-    // Nested element creators.
-
-    /**
-     * Adds a set of files (nested fileset element).
-     */
-    public void addFileset(FileSet set) {
-        fileSets.addElement(set);
-    }
-
-    /**
-     * Adds a list of files (nested filelist element).
-     */
-    public void addFilelist(FileList list) {
-        fileSets.addElement(list);
-    }
-
-    /**
-     * This method adds text which appears in the 'concat' element.
-     */
-    public void addText(String text) {
-        if (textBuffer == null) {
-            // Initialize to the size of the first text fragment, with
-            // the hopes that it's the only one.
-            textBuffer = new StringBuffer(text.length());
-        }
-
-        // Append the fragment -- we defer property replacement until
-        // later just in case we get a partial property in a fragment.
-        textBuffer.append(text);
-    }
-
-    /**
-     * This method performs the concatenation.
-     */
-    public void execute() 
-        throws BuildException {
-
-        // treat empty nested text as no text
-        sanitizeText();
-
-        // Sanity check our inputs.
-        if (fileSets.size() == 0 && textBuffer == null) {
-            // Nothing to concatenate!
-            throw new BuildException("At least one file " + 
-                                     "must be provided, or " + 
-                                     "some text.");
-        }
-
-        // If using filesets, disallow inline text. This is similar to
-        // using GNU 'cat' with file arguments -- stdin is simply
-        // ignored.
-        if (fileSets.size() > 0 && textBuffer != null) {
-            throw new BuildException("Cannot include inline text " + 
-                                     "when using filesets.");
-        }
-
-        boolean savedAppend = append;
-        try {
-            // Iterate the FileSet collection, concatenating each file as
-            // it is encountered.
-            for (Enumeration e = fileSets.elements(); e.hasMoreElements();) {
-                
-                // Root directory for files.
-                File fileSetBase = null;
-                
-                // List of files.
-                String[] srcFiles = null;
-                
-                // Get the next file set, which could be a FileSet or a
-                // FileList instance.
-                Object next = e.nextElement();
-                
-                if (next instanceof FileSet) {
-                    
-                    FileSet fileSet = (FileSet) next;
-                    
-                    // Get a directory scanner from the file set, which will
-                    // determine the files from the set which need to be
-                    // concatenated.
-                    DirectoryScanner scanner = 
-                        fileSet.getDirectoryScanner(project);
-                    
-                    // Determine the root path.
-                    fileSetBase = fileSet.getDir(project);
-                    
-                    // Get the list of files.
-                    srcFiles = scanner.getIncludedFiles();
-                    
-                } else if (next instanceof FileList) {
-                    
-                    FileList fileList = (FileList) next;
-                    
-                    // Determine the root path.
-                    fileSetBase = fileList.getDir(project);
-                    
-                    // Get the list of files.
-                    srcFiles = fileList.getFiles(project);
-                    
-                }
-
-                // Concatenate the files.
-                if (srcFiles != null) {
-                    catFiles(fileSetBase, srcFiles);
-                }
-            }
-        } finally {
-            append = savedAppend;
-        }
-        
-        // Now, cat the inline text, if applicable.
-        catText();
-    }
-
-    /**
-     * Reset state to default.
-     */
-    public void reset() {
-        append = false;
-        destinationFile = null;
-        encoding = null;
-        fileSets = new Vector();
-    }
-
-    /**
-     * This method concatenates a series of files to a single
-     * destination.
-     *
-     * @param base the base directory for the list of file names.
-     *
-     * @param files the names of the files to be concatenated,
-     * relative to the <code>base</code>.
-     */
-    private void catFiles(File base, String[] files) {
-
-        // First, create a list of absolute paths for the input files.
-        final int len = files.length;
-        String[] input = new String[len];
-        for (int i = 0; i < len; i++) {
-
-            File current = new File(base, files[i]);
-
-            // Make sure the file exists. This will rarely fail when
-            // using file sets, but it could be rather common when
-            // using file lists.
-            if (!current.exists()) {
-                // File does not exist, log an error and continue.
-                log("File " + current + " does not exist.", 
-                    Project.MSG_ERR);
-                continue;
-            }
-
-            input[i] = current.getAbsolutePath();
-        }
-
-        // Next, perform the concatenation.
-        if (encoding == null) {
-            OutputStream os = null;
-            InputStream is = null;
-
-            try {
-
-                if (destinationFile == null) {
-                    // Log using WARN so it displays in 'quiet' mode.
-                    os = new LogOutputStream(this, Project.MSG_WARN);
-                } else {
-                    os = 
-                        new FileOutputStream(destinationFile.getAbsolutePath(),
-                                             append);
-                    
-                    // This flag should only be recognized for the first
-                    // file. In the context of a single 'cat', we always
-                    // want to append.
-                    append = true;
-                }
-            
-                for (int i = 0; i < len; i++) {
-
-                    // Make sure input != output.
-                    if (destinationFile != null &&
-                        destinationFile.getAbsolutePath().equals(input[i])) {
-                        log(destinationFile.getName() + ": input file is " + 
-                            "output file.", Project.MSG_WARN);
-                    }
-
-                    is = new FileInputStream(input[i]);
-                    byte[] buffer = new byte[8096];
-                    while (true) {
-                        int bytesRead = is.read(buffer);
-                        if (bytesRead == -1) { // EOF
-                            break;
-                        }
-                        
-                        // Write the read data.
-                        os.write(buffer, 0, bytesRead);
-                    }
-                    os.flush();
-                    is.close();
-                    is = null;
-                }
-            } catch (IOException ioex) {
-                throw new BuildException("Error while concatenating: "
-                                         + ioex.getMessage(), ioex);
-            } finally {
-                if (is != null) {
-                    try {
-                        is.close();
-                    } catch (Exception ignore) {}
-                }
-                if (os != null) {
-                    try {
-                        os.close();
-                    } catch (Exception ignore) {}
-                }
-            }
-
-        } else { // user specified encoding, assume line oriented input
-
-            PrintWriter out = null;
-            BufferedReader in = null;
-
-            try {
-                if (destinationFile == null) {
-                    // Log using WARN so it displays in 'quiet' mode.
-                    out = new PrintWriter(
-                              new OutputStreamWriter(
-                                  new LogOutputStream(this, Project.MSG_WARN)));
-                } else {
-                    out = new PrintWriter(
-                              new OutputStreamWriter(
-                                  new FileOutputStream(destinationFile
-                                                       .getAbsolutePath(),
-                                                       append),
-                                  encoding));
-                    
-                    // This flag should only be recognized for the first
-                    // file. In the context of a single 'cat', we always
-                    // want to append.
-                    append = true;
-                }
-
-                for (int i = 0; i < len; i++) {
-                    in = new BufferedReader(
-                            new InputStreamReader(new FileInputStream(input[i]), 
-                                encoding));
-
-                    String line;
-                    while ((line = in.readLine()) != null) {
-                        // Log the line, using WARN so it displays in
-                        // 'quiet' mode.
-                        out.println(line);
-                    }
-                    in.close();
-                    in = null;
-                }
-            } catch (IOException ioe) {
-                throw new BuildException("Error while concatenating: " 
-                                         + ioe.getMessage(), ioe);
-            } finally {
-                // Close resources.
-                if (in != null) {
-                    try {
-                        in.close();
-                    } catch (Exception ignore) {}
-                }
-                if (out != null) {
-                    try {
-                        out.close();
-                    } catch (Exception ignore) {}
-                }
-            }
-        }
-    }
-
-    /**
-     * This method concatenates the text which was added inside the
-     * 'concat' tags. If the text between the tags consists only of
-     * whitespace characters, it is ignored.
-     */
-    private void catText() {
-
-        // Check the buffer.
-        if (textBuffer == null) {
-            // No text to write.
-            return;
-        }
-
-        String text = textBuffer.toString();
-
-        // Replace ${property} strings.
-        text = ProjectHelper.replaceProperties(project, text, 
-                                               project.getProperties());
-
-        // Set up a writer if necessary.
-        FileWriter writer = null;
-        if (destinationFile != null) {
-            try {
-                writer = new FileWriter(destinationFile.getAbsolutePath(), 
-                                        append);
-            } catch (IOException ioe) {
-                throw new BuildException("Error creating destination " + 
-                                         "file.", ioe);
-            }
-        }
-
-        // Reads the text, line by line.
-        BufferedReader reader = null;
-        try {
-            reader = new BufferedReader(new StringReader(text));
-
-            String line;
-            while ((line = reader.readLine()) != null) {
-                if (destinationFile == null) {
-                    // Log the line, using WARN so it displays in
-                    // 'quiet' mode.
-                    log(line, Project.MSG_WARN);
-                } else {
-                    writer.write(line);
-                    writer.write(StringUtils.LINE_SEP);
-                    writer.flush();
-                }
-            }
-
-        } catch (IOException ioe) {
-            throw new BuildException("Error while concatenating " + 
-                                     "text.", ioe);
-        } finally {
-            // Close resources.
-            if (reader != null) {
-                try {
-                    reader.close();
-                } catch (Exception ignore) {}
-            }
-
-            if (writer != null) {
-                try {
-                    writer.close();
-                } catch (Exception ignore) {}
-            }
-        }
-    }
-
-    /**
-     * Treat empty nested text as no text.
-     *
-     * <p>Depending on the XML parser, addText may have been called
-     * for &quot;ignorable whitespace&quot; as well.</p>
-     */
-    private void sanitizeText() {
-        if (textBuffer != null) {
-            if (textBuffer.toString().trim().length() == 0) {
-                textBuffer = null;
-            }
-        }
-    }
-
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/ConditionTask.java b/src/main/org/apache/tools/ant/taskdefs/ConditionTask.java
deleted file mode 100644
index 8cc4050..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/ConditionTask.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.taskdefs.condition.Condition;
-import org.apache.tools.ant.taskdefs.condition.ConditionBase;
-
-/**
- * &lt;condition&gt; task as a generalization of &lt;available&gt; and
- * &lt;uptodate&gt;.
- *
- * <p>This task supports boolean logic as well as pluggable conditions
- * to decide, whether a property should be set.</p>
- *
- * <p>This task does not extend Task to take advantage of
- * ConditionBase.</p>
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- * @version $Revision$
- *
- * @since Ant 1.4
- *
- * @ant.task category="control"
- */
-public class ConditionTask extends ConditionBase {
-
-    private String property = null;
-    private String value = "true";
-
-    /**
-     * The name of the property to set. Required.
-     *
-     * @since Ant 1.4
-     */
-    public void setProperty(String p) {property = p;}
-
-    /**
-     * The value for the property to set. Defaults to "true".
-     *
-     * @since Ant 1.4
-     */
-    public void setValue(String v) {value = v;}
-
-    /**
-     * See whether our nested condition holds and set the property.
-     *
-     * @since Ant 1.4
-     */
-    public void execute() throws BuildException {
-        if (countConditions() > 1) {
-            throw new BuildException("You must not nest more than one " 
-                + "condition into <condition>");
-        }
-        if (countConditions() < 1) {
-            throw new BuildException("You must nest a condition into " 
-                + "<condition>");
-        }
-        if (property == null) {
-            throw new BuildException("The property attribute is required.");
-        }
-        
-        Condition c = (Condition) getConditions().nextElement();
-        if (c.eval()) {
-            getProject().setNewProperty(property, value);
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/Copy.java b/src/main/org/apache/tools/ant/taskdefs/Copy.java
deleted file mode 100644
index 773546a..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Copy.java
+++ /dev/null
@@ -1,563 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.DirectoryScanner;
-import org.apache.tools.ant.types.FileSet;
-import org.apache.tools.ant.types.Mapper;
-import org.apache.tools.ant.types.FilterChain;
-import org.apache.tools.ant.types.FilterSet;
-import org.apache.tools.ant.types.FilterSetCollection;
-import org.apache.tools.ant.util.FileUtils;
-import org.apache.tools.ant.util.FileNameMapper;
-import org.apache.tools.ant.util.FlatFileNameMapper;
-import org.apache.tools.ant.util.IdentityMapper;
-import org.apache.tools.ant.util.SourceFileScanner;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.Vector;
-import java.util.Hashtable;
-import java.util.Enumeration;
-
-/**
- * A consolidated copy task.  Copies a file or directory to a new file
- * or directory.  Files are only copied if the source file is newer
- * than the destination file, or when the destination file does not
- * exist.  It is possible to explicitly overwrite existing files.</p>
- *
- * <p>This implementation is based on Arnout Kuiper's initial design
- * document, the following mailing list discussions, and the
- * copyfile/copydir tasks.</p>
- *
- * @author Glenn McAllister 
- *         <a href="mailto:glennm@ca.ibm.com">glennm@ca.ibm.com</a>
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- * @author <A href="gholam@xtra.co.nz">Michael McCallum</A>
- * @author <a href="mailto:umagesh@rediffmail.com">Magesh Umasankar</a>
- *
- * @version $Revision$
- *
- * @since Ant 1.2
- *
- * @ant.task category="filesystem"
- */
-public class Copy extends Task {
-    protected File file = null;     // the source file
-    protected File destFile = null; // the destination file
-    protected File destDir = null;  // the destination directory
-    protected Vector filesets = new Vector();
-
-    protected boolean filtering = false;
-    protected boolean preserveLastModified = false;
-    protected boolean forceOverwrite = false;
-    protected boolean flatten = false;
-    protected int verbosity = Project.MSG_VERBOSE;
-    protected boolean includeEmpty = true;
-    private boolean failonerror = true;
-
-    protected Hashtable fileCopyMap = new Hashtable();
-    protected Hashtable dirCopyMap = new Hashtable();
-    protected Hashtable completeDirMap = new Hashtable();
-
-    protected Mapper mapperElement = null;
-    private Vector filterChains = new Vector();
-    private Vector filterSets = new Vector();
-    private FileUtils fileUtils;
-    private String encoding = null;
-
-    /**
-     * Copy task constructor. 
-     */
-    public Copy() {
-        fileUtils = FileUtils.newFileUtils();
-    }
-
-    protected FileUtils getFileUtils() {
-        return fileUtils;
-    }
-
-    /**
-     * Sets a single source file to copy.
-     */
-    public void setFile(File file) {
-        this.file = file;
-    }
-
-    /**
-     * Sets the destination file.
-     */
-    public void setTofile(File destFile) {
-        this.destFile = destFile;
-    }
-
-    /**
-     * Sets the destination directory.
-     */
-    public void setTodir(File destDir) {
-        this.destDir = destDir;
-    }
-
-    /**
-     * Create a nested filterchain
-     */
-    public FilterChain createFilterChain() {
-        FilterChain filterChain = new FilterChain();
-        filterChains.addElement(filterChain);
-        return filterChain;
-    }
-
-    /**
-     * Create a nested filterset
-     */
-    public FilterSet createFilterSet() {
-        FilterSet filterSet = new FilterSet();
-        filterSets.addElement(filterSet);
-        return filterSet;
-    }
-
-    /**
-     * Give the copied files the same last modified time as the original files.
-     * @deprecated setPreserveLastModified(String) has been deprecated and
-     *             replaced with setPreserveLastModified(boolean) to
-     *             consistently let the Introspection mechanism work.
-     */
-    public void setPreserveLastModified(String preserve) {
-        setPreserveLastModified(Project.toBoolean(preserve));
-    }
-
-    /**
-     * Give the copied files the same last modified time as the original files.
-     */
-    public void setPreserveLastModified(boolean preserve) {
-        preserveLastModified = preserve;
-    }
-
-    /**
-     * Whether to give the copied files the same last modified time as
-     * the original files.
-     *
-     * @since 1.32, Ant 1.5
-     */
-    public boolean getPreserveLastModified() {
-        return preserveLastModified;
-    }
-
-    /**
-     * Get the filtersets being applied to this operation.
-     *
-     * @return a vector of FilterSet objects
-     */
-    protected Vector getFilterSets() {
-        return filterSets;
-    }
-
-    /**
-     * Get the filterchains being applied to this operation.
-     *
-     * @return a vector of FilterChain objects
-     */
-    protected Vector getFilterChains() {
-        return filterChains;
-    }
-
-    /**
-     * Sets filtering.
-     */
-    public void setFiltering(boolean filtering) {
-        this.filtering = filtering;
-    }
-
-    /**
-     * Overwrite any existing destination file(s).
-     */
-    public void setOverwrite(boolean overwrite) {
-        this.forceOverwrite = overwrite;
-    }
-
-    /**
-     * When copying directory trees, the files can be "flattened"
-     * into a single directory.  If there are multiple files with
-     * the same name in the source directory tree, only the first
-     * file will be copied into the "flattened" directory, unless
-     * the forceoverwrite attribute is true.
-     */
-    public void setFlatten(boolean flatten) {
-        this.flatten = flatten;
-    }
-
-    /**
-     * Used to force listing of all names of copied files.
-     */
-    public void setVerbose(boolean verbose) {
-        if (verbose) {
-            this.verbosity = Project.MSG_INFO;
-        } else {
-            this.verbosity = Project.MSG_VERBOSE;
-        }
-    }
-
-    /**
-     * Used to copy empty directories.
-     */
-    public void setIncludeEmptyDirs(boolean includeEmpty) {
-        this.includeEmpty = includeEmpty;
-    }
-
-    /**
-     * Note errors to the output, but keep going
-     * @param failonerror true or false
-     */
-     public void setFailOnError(boolean failonerror) {
-         this.failonerror = failonerror;
-     }
-
-    /**
-     * Adds a set of files (nested fileset attribute).
-     */
-    public void addFileset(FileSet set) {
-        filesets.addElement(set);
-    }
-
-    /**
-     * Defines the FileNameMapper to use (nested mapper element).
-     */
-    public Mapper createMapper() throws BuildException {
-        if (mapperElement != null) {
-            throw new BuildException("Cannot define more than one mapper",
-                                     location);
-        }
-        mapperElement = new Mapper(project);
-        return mapperElement;
-    }
-
-    /**
-     * Sets the character encoding
-     *
-     * @since 1.32, Ant 1.5
-     */
-    public void setEncoding (String encoding) {
-        this.encoding = encoding;
-    }
-
-    /**
-     * @return the character encoding, <code>null</code> if not set.
-     *
-     * @since 1.32, Ant 1.5
-     */
-    public String getEncoding() {
-        return encoding;
-    }
-
-    /**
-     * Performs the copy operation.
-     */
-    public void execute() throws BuildException {
-        File savedFile = file; // may be altered in validateAttributes
-        File savedDestFile = destFile;
-        File savedDestDir = destDir;
-        FileSet savedFileSet = null;
-        if (file == null && destFile != null && filesets.size() == 1) {
-            // will be removed in validateAttributes
-            savedFileSet = (FileSet) filesets.elementAt(0);
-        }
-        
-        // make sure we don't have an illegal set of options
-        validateAttributes();
-
-        try {
-            
-            // deal with the single file
-            if (file != null) {
-                if (file.exists()) {
-                    if (destFile == null) {
-                        destFile = new File(destDir, file.getName());
-                    }
-
-                    if (forceOverwrite ||
-                        (file.lastModified() > destFile.lastModified())) {
-                        fileCopyMap.put(file.getAbsolutePath(), 
-                                        destFile.getAbsolutePath());
-                    } else {
-                        log(file + " omitted as " + destFile 
-                            + " is up to date.", Project.MSG_VERBOSE);
-                    }
-                } else {
-                    String message = "Warning: Could not find file "
-                        + file.getAbsolutePath() + " to copy.";
-                    if (!failonerror) {
-                        log(message);
-                    } else {
-                        throw new BuildException(message);
-                    }
-                }
-            }
-
-            // deal with the filesets
-            for (int i = 0; i < filesets.size(); i++) {
-                FileSet fs = (FileSet) filesets.elementAt(i);
-                DirectoryScanner ds = fs.getDirectoryScanner(project);
-                File fromDir = fs.getDir(project);
-                
-                String[] srcFiles = ds.getIncludedFiles();
-                String[] srcDirs = ds.getIncludedDirectories();
-                boolean isEverythingIncluded = ds.isEverythingIncluded();
-                if (isEverythingIncluded
-                    && !flatten && mapperElement == null) {
-                    completeDirMap.put(fromDir, destDir);
-                }
-                scan(fromDir, destDir, srcFiles, srcDirs);
-            }
-            
-            // do all the copy operations now...
-            doFileOperations();
-        } finally {
-            // clean up again, so this instance can be used a second
-            // time
-            file = savedFile;
-            destFile = savedDestFile;
-            destDir = savedDestDir;
-            if (savedFileSet != null) {
-                filesets.insertElementAt(savedFileSet, 0);
-            }
-
-            fileCopyMap.clear();
-            dirCopyMap.clear();
-            completeDirMap.clear();
-        }
-    }
-
-//************************************************************************
-//  protected and private methods
-//************************************************************************
-
-    /**
-     * Ensure we have a consistent and legal set of attributes, and set
-     * any internal flags necessary based on different combinations
-     * of attributes.
-     */
-    protected void validateAttributes() throws BuildException {
-        if (file == null && filesets.size() == 0) {
-            throw new BuildException("Specify at least one source "
-                                     + "- a file or a fileset.");
-        }
-
-        if (destFile != null && destDir != null) {
-            throw new BuildException("Only one of tofile and todir "
-                                     + "may be set.");
-        }
-
-        if (destFile == null && destDir == null) {
-            throw new BuildException("One of tofile or todir must be set.");
-        }
-
-        if (file != null && file.exists() && file.isDirectory()) {
-            throw new BuildException("Use a fileset to copy directories.");
-        }
-
-        if (destFile != null && filesets.size() > 0) {
-            if (filesets.size() > 1) {
-                throw new BuildException(
-                    "Cannot concatenate multiple files into a single file.");
-            } else {
-                FileSet fs = (FileSet) filesets.elementAt(0);
-                DirectoryScanner ds = fs.getDirectoryScanner(project);
-                String[] srcFiles = ds.getIncludedFiles();
-
-                if (srcFiles.length == 0) {
-                    throw new BuildException(
-                        "Cannot perform operation from directory to file.");
-                } else if (srcFiles.length == 1) {
-                    if (file == null) {
-                        file = new File(ds.getBasedir(), srcFiles[0]);
-                        filesets.removeElementAt(0);
-                    } else {
-                        throw new BuildException("Cannot concatenate multiple "
-                                                 + "files into a single file.");
-                    }
-                } else {
-                    throw new BuildException("Cannot concatenate multiple "
-                                             + "files into a single file.");
-                }
-            }
-        }
-
-        if (destFile != null) {
-            destDir = fileUtils.getParentFile(destFile);
-        }
-
-    }
-
-    /**
-     * Compares source files to destination files to see if they should be
-     * copied.
-     */
-    protected void scan(File fromDir, File toDir, String[] files, 
-                        String[] dirs) {
-        FileNameMapper mapper = null;
-        if (mapperElement != null) {
-            mapper = mapperElement.getImplementation();
-        } else if (flatten) {
-            mapper = new FlatFileNameMapper();
-        } else {
-            mapper = new IdentityMapper();
-        }
-
-        buildMap(fromDir, toDir, files, mapper, fileCopyMap);
-
-        if (includeEmpty) {
-            buildMap(fromDir, toDir, dirs, mapper, dirCopyMap);
-        }
-    }
-
-    protected void buildMap(File fromDir, File toDir, String[] names,
-                            FileNameMapper mapper, Hashtable map) {
-
-        String[] toCopy = null;
-        if (forceOverwrite) {
-            Vector v = new Vector();
-            for (int i = 0; i < names.length; i++) {
-                if (mapper.mapFileName(names[i]) != null) {
-                    v.addElement(names[i]);
-                }
-            }
-            toCopy = new String[v.size()];
-            v.copyInto(toCopy);
-        } else {
-            SourceFileScanner ds = new SourceFileScanner(this);
-            toCopy = ds.restrict(names, fromDir, toDir, mapper);
-        }
-
-        for (int i = 0; i < toCopy.length; i++) {
-            File src = new File(fromDir, toCopy[i]);
-            File dest = new File(toDir, mapper.mapFileName(toCopy[i])[0]);
-            map.put(src.getAbsolutePath(), dest.getAbsolutePath());
-        }
-    }
-
-    /**
-     * Actually does the file (and possibly empty directory) copies.
-     * This is a good method for subclasses to override.
-     */
-    protected void doFileOperations() {
-        if (fileCopyMap.size() > 0) {
-            log("Copying " + fileCopyMap.size() 
-                + " file" + (fileCopyMap.size() == 1 ? "" : "s") 
-                + " to " + destDir.getAbsolutePath());
-
-            Enumeration e = fileCopyMap.keys();
-            while (e.hasMoreElements()) {
-                String fromFile = (String) e.nextElement();
-                String toFile = (String) fileCopyMap.get(fromFile);
-
-                if (fromFile.equals(toFile)) {
-                    log("Skipping self-copy of " + fromFile, verbosity);
-                    continue;
-                }
-
-                try {
-                    log("Copying " + fromFile + " to " + toFile, verbosity);
-
-                    FilterSetCollection executionFilters = 
-                        new FilterSetCollection();
-                    if (filtering) {
-                        executionFilters
-                            .addFilterSet(project.getGlobalFilterSet());
-                    }
-                    for (Enumeration filterEnum = filterSets.elements(); 
-                         filterEnum.hasMoreElements();) {
-                        executionFilters
-                            .addFilterSet((FilterSet) filterEnum.nextElement());
-                    }
-                    fileUtils.copyFile(fromFile, toFile, executionFilters, 
-                                       filterChains, forceOverwrite, 
-                                       preserveLastModified, encoding, 
-                                       project);
-                } catch (IOException ioe) {
-                    String msg = "Failed to copy " + fromFile + " to " + toFile
-                        + " due to " + ioe.getMessage();
-                    throw new BuildException(msg, ioe, location);
-                }
-            }
-        }
-
-        if (includeEmpty) {
-            Enumeration e = dirCopyMap.elements();
-            int count = 0;
-            while (e.hasMoreElements()) {
-                File d = new File((String) e.nextElement());
-                if (!d.exists()) {
-                    if (!d.mkdirs()) {
-                        log("Unable to create directory " 
-                            + d.getAbsolutePath(), Project.MSG_ERR);
-                    } else {
-                        count++;
-                    }
-                }
-            }
-
-            if (count > 0) {
-                log("Copied " + count +
-                    " empty director" +
-                    (count == 1 ? "y" : "ies") +
-                    " to " + destDir.getAbsolutePath());
-            }
-        }
-    }
-
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/Copydir.java b/src/main/org/apache/tools/ant/taskdefs/Copydir.java
deleted file mode 100644
index bd1ec43..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Copydir.java
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000,2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.Hashtable;
-import java.util.Enumeration;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.DirectoryScanner;
-import org.apache.tools.ant.Project;
-
-/**
- * Copies a directory.
- *
- * @author James Davidson <a href="mailto:duncan@x180.com">duncan@x180.com</a>
- *
- * @since Ant 1.1
- *
- * @deprecated The copydir task is deprecated since Ant 1.2.  Use copy instead.
- */
-
-public class Copydir extends MatchingTask {
-
-    private File srcDir;
-    private File destDir;
-    private boolean filtering = false;
-    private boolean flatten = false;
-    private boolean forceOverwrite = false;
-    private Hashtable filecopyList = new Hashtable();
-
-    public void setSrc(File src) {
-        srcDir = src;
-    }
-
-    public void setDest(File dest) {
-        destDir = dest;
-    }
-
-    public void setFiltering(boolean filter) {
-        filtering = filter;
-    }
-
-    public void setFlatten(boolean flatten) {
-        this.flatten = flatten;
-    }
-
-    public void setForceoverwrite(boolean force) {
-        forceOverwrite = force;
-    }
-
-    public void execute() throws BuildException {
-        log("DEPRECATED - The copydir task is deprecated.  Use copy instead.");
-
-        if (srcDir == null) {
-            throw new BuildException("src attribute must be set!", 
-                                     location);
-        }
-
-        if (!srcDir.exists()) {
-            throw new BuildException("srcdir " + srcDir.toString()
-                                     + " does not exist!", location);
-        }
-
-        if (destDir == null) {
-            throw new BuildException("The dest attribute must be set.", 
-                                     location);
-        }
-
-        if (srcDir.equals(destDir)) {
-            log("Warning: src == dest", Project.MSG_WARN);
-        }
-
-        DirectoryScanner ds = super.getDirectoryScanner(srcDir);
-
-        try {
-            String[] files = ds.getIncludedFiles();
-            scanDir(srcDir, destDir, files);
-            if (filecopyList.size() > 0) {
-                log("Copying " + filecopyList.size() + " file"
-                    + (filecopyList.size() == 1 ? "" : "s")
-                    + " to " + destDir.getAbsolutePath());
-                Enumeration enum = filecopyList.keys();
-                while (enum.hasMoreElements()) {
-                    String fromFile = (String) enum.nextElement();
-                    String toFile = (String) filecopyList.get(fromFile);
-                    try {
-                        project.copyFile(fromFile, toFile, filtering, 
-                                         forceOverwrite);
-                    } catch (IOException ioe) {
-                        String msg = "Failed to copy " + fromFile + " to " 
-                            + toFile + " due to " + ioe.getMessage();
-                        throw new BuildException(msg, ioe, location);
-                    }
-                }
-            }
-        } finally {
-            filecopyList.clear();
-        }
-    }
-
-    private void scanDir(File from, File to, String[] files) {
-        for (int i = 0; i < files.length; i++) {
-            String filename = files[i];
-            File srcFile = new File(from, filename);
-            File destFile;
-            if (flatten) {
-                destFile = new File(to, new File(filename).getName());
-            } else {
-                destFile = new File(to, filename);
-            }
-            if (forceOverwrite ||
-                (srcFile.lastModified() > destFile.lastModified())) {
-                filecopyList.put(srcFile.getAbsolutePath(),
-                                 destFile.getAbsolutePath());
-            }
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/Copyfile.java b/src/main/org/apache/tools/ant/taskdefs/Copyfile.java
deleted file mode 100644
index a797c47..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Copyfile.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000,2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import java.io.File;
-import java.io.IOException;
-
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.BuildException;
-
-/**
- * Copies a file.
- *
- * @author duncan@x180.com
- *
- * @since Ant 1.1
- *
- * @deprecated The copyfile task is deprecated since Ant 1.2.  Use
- * copy instead.
- */
-
-public class Copyfile extends Task {
-
-    private File srcFile;
-    private File destFile;
-    private boolean filtering = false;
-    private boolean forceOverwrite = false;
- 
-    public void setSrc(File src) {
-        srcFile = src;
-    }
-
-    public void setForceoverwrite(boolean force) {
-        forceOverwrite = force;
-    }
-
-    public void setDest(File dest) {
-        destFile = dest;
-    }
-
-    public void setFiltering(String filter) {
-        filtering = Project.toBoolean(filter);
-    }
-
-    public void execute() throws BuildException {
-        log("DEPRECATED - The copyfile task is deprecated.  Use copy instead.");
-
-        if (srcFile == null) {
-            throw new BuildException("The src attribute must be present.", 
-                                     location);
-        }
-        
-        if (!srcFile.exists()) {
-            throw new BuildException("src " + srcFile.toString()
-                                     + " does not exist.", location);
-        }
-
-        if (destFile == null) {
-            throw new BuildException("The dest attribute must be present.", 
-                                     location);
-        }
-
-        if (srcFile.equals(destFile)) {
-            log("Warning: src == dest", Project.MSG_WARN);
-        }
-
-        if (forceOverwrite 
-            || srcFile.lastModified() > destFile.lastModified()) {
-            try {
-                project.copyFile(srcFile, destFile, filtering, forceOverwrite);
-            } catch (IOException ioe) {
-                String msg = "Error copying file: " + srcFile.getAbsolutePath()
-                    + " due to " + ioe.getMessage();
-                throw new BuildException(msg);
-            }
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/Cvs.java b/src/main/org/apache/tools/ant/taskdefs/Cvs.java
deleted file mode 100644
index a92703d..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Cvs.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-/**
- * original 1.20
- *
- *  NOTE: This implementation has been moved to AbstractCvsTask with
- *  the addition of some accessors for extensibility.
- *
- *
- * @author costin@dnt.ro
- * @author stefano@apache.org
- * @author Wolfgang Werner 
- *         <a href="mailto:wwerner@picturesafe.de">wwerner@picturesafe.de</a>
- * @author Kevin Ross 
- *         <a href="mailto:kevin.ross@bredex.com">kevin.ross@bredex.com</a>
- *
- * @since Ant 1.1
- * 
- * @ant.task category="scm"
- */
-public class Cvs extends AbstractCvsTask {
-
-    /**
-     * CVS Task - now implemented by the Abstract CVS Task base class
-     */
-    public Cvs() {
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/Definer.java b/src/main/org/apache/tools/ant/taskdefs/Definer.java
deleted file mode 100644
index a4d312b..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Definer.java
+++ /dev/null
@@ -1,245 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights 
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.AntClassLoader;
-import org.apache.tools.ant.types.Path;
-import org.apache.tools.ant.types.Reference;
-
-import java.util.Properties;
-import java.util.Enumeration;
-import java.io.File;
-import java.io.InputStream;
-import java.io.FileInputStream;
-import java.io.IOException;
-
-/**
- * Base class for Taskdef and Typedef - does all the classpath
- * handling and and class loading.
- *
- * @author Costin Manolache
- * @author <a href="stefan.bodewig@epost.de">Stefan Bodewig</a>
- *
- * @since Ant 1.4
- */
-public abstract class Definer extends Task {
-    private String name;
-    private String value;
-    private Path classpath;
-    private File file;
-    private String resource;
-    private boolean reverseLoader = false;
-
-    public void setReverseLoader(boolean reverseLoader) {
-        this.reverseLoader = reverseLoader;
-        log("The reverseloader attribute is DEPRECATED. It will be removed", 
-            Project.MSG_WARN);
-    }
-    
-    /**
-     * Set the classpath to be used when searching for component being defined
-     * 
-     * @param classpath an Ant Path object containing the classpath.
-     */
-    public void setClasspath(Path classpath) {
-        if (this.classpath == null) {
-            this.classpath = classpath;
-        } else {
-            this.classpath.append(classpath);
-        }
-    }
-
-    public Path createClasspath() {
-        if (this.classpath == null) {
-            this.classpath = new Path(project);
-        }
-        return this.classpath.createPath();
-    }
-
-    public void setClasspathRef(Reference r) {
-        createClasspath().setRefid(r);
-    }
-
-    public void execute() throws BuildException {
-        AntClassLoader al = createLoader();
-
-        if (file == null && resource == null) {
-
-            // simple case - one definition
-            if (name == null || value == null) {
-                String msg = "name or classname attributes of "
-                    + getTaskName() + " element "
-                    + "are undefined";
-                throw new BuildException(msg);
-            }
-            addDefinition(al, name, value);
-
-        } else {
-
-            InputStream is = null;
-            try {
-                if (name != null || value != null) {
-                    String msg = "You must not specify name or value "
-                        + "together with file or resource.";
-                    throw new BuildException(msg, location);
-                }
-            
-                if (file != null && resource != null) {
-                    String msg = "You must not specify both, file and "
-                        + "resource.";
-                    throw new BuildException(msg, location);
-                }
-            
-
-                Properties props = new Properties();
-                if (file != null) {
-                    log("Loading definitions from file " + file, 
-                        Project.MSG_VERBOSE);
-                    is = new FileInputStream(file);
-                    if (is == null) {
-                        log("Could not load definitions from file " + file
-                            + ". It doesn\'t exist.", Project.MSG_WARN);
-                    }
-                }    
-                if (resource != null) {
-                    log("Loading definitions from resource " + resource, 
-                        Project.MSG_VERBOSE);
-                    is = al.getResourceAsStream(resource);
-                    if (is == null) {
-                        log("Could not load definitions from resource " 
-                            + resource + ". It could not be found.", 
-                            Project.MSG_WARN);
-                    }
-                }
-
-                if (is != null) {
-                    props.load(is);
-                    Enumeration keys = props.keys();
-                    while (keys.hasMoreElements()) {
-                        String n = (String) keys.nextElement();
-                        String v = props.getProperty(n);
-                        addDefinition(al, n, v);
-                    }
-                }
-            } catch (IOException ex) {
-                throw new BuildException(ex, location);
-            } finally {
-                if (is != null) {
-                    try {
-                        is.close();
-                    } catch (IOException e) {}
-                }
-            }
-        }
-    }
-    
-    private void addDefinition(ClassLoader al, String name, String value)
-        throws BuildException {
-        try {
-            Class c = al.loadClass(value);
-            AntClassLoader.initializeClass(c);
-            addDefinition(name, c);
-        } catch (ClassNotFoundException cnfe) {
-            String msg = getTaskName() + " class " + value 
-                + " cannot be found";
-            throw new BuildException(msg, cnfe, location);
-        } catch (NoClassDefFoundError ncdfe) {
-            String msg = getTaskName() + " class " + value 
-                + " cannot be found";
-            throw new BuildException(msg, ncdfe, location);
-        }
-    }
-
-
-    private AntClassLoader createLoader() {
-        AntClassLoader al = null;
-        if (classpath != null) {
-            al = new AntClassLoader(project, classpath, !reverseLoader);
-        } else {
-            al = new AntClassLoader(project, Path.systemClasspath, 
-                                    !reverseLoader);
-        }
-        // need to load Task via system classloader or the new
-        // task we want to define will never be a Task but always
-        // be wrapped into a TaskAdapter.
-        al.addSystemPackageRoot("org.apache.tools.ant");
-        return al;
-    }
-
-    public void setFile(File file) {
-        this.file = file;
-    }
-
-    public void setResource(String res) {
-        this.resource = res;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getClassname() {
-        return value;
-    }
-
-    public void setClassname(String v) {
-        value = v;
-    }
-
-    protected abstract void addDefinition(String name, Class c);
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/Delete.java b/src/main/org/apache/tools/ant/taskdefs/Delete.java
deleted file mode 100644
index 6e250d1..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Delete.java
+++ /dev/null
@@ -1,465 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights 
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.DirectoryScanner;
-import org.apache.tools.ant.types.FileSet;
-import org.apache.tools.ant.types.PatternSet;
-import java.io.File;
-import java.util.Vector;
-
-/**
- * Deletes a file or directory, or set of files defined by a fileset.
- * The original delete task would delete a file, or a set of files 
- * using the include/exclude syntax.  The deltree task would delete a 
- * directory tree.  This task combines the functionality of these two
- * originally distinct tasks.
- * <p>Currently Delete extends MatchingTask.  This is intend <i>only</i>
- * to provide backwards compatibility for a release.  The future position
- * is to use nested filesets exclusively.</p>
- * 
- * @author Stefano Mazzocchi 
- *         <a href="mailto:stefano@apache.org">stefano@apache.org</a>
- * @author Tom Dimock <a href="mailto:tad1@cornell.edu">tad1@cornell.edu</a>
- * @author Glenn McAllister 
- *         <a href="mailto:glennm@ca.ibm.com">glennm@ca.ibm.com</a>
- * @author Jon S. Stevens <a href="mailto:jon@latchkey.com">jon@latchkey.com</a>
- *
- * @since Ant 1.2
- *
- * @ant.task category="filesystem"
- */
-public class Delete extends MatchingTask {
-    protected File file = null;
-    protected File dir = null;
-    protected Vector filesets = new Vector();
-    protected boolean usedMatchingTask = false;
-    // by default, remove matching empty dirs
-    protected boolean includeEmpty = false;
-
-    private int verbosity = Project.MSG_VERBOSE;
-    private boolean quiet = false;
-    private boolean failonerror = true;
-
-    /**
-     * Set the name of a single file to be removed.
-     *
-     * @param file the file to be deleted
-     */
-    public void setFile(File file) {
-        this.file = file;
-    }
-
-    /**
-     * Set the directory from which files are to be deleted
-     *
-     * @param dir the directory path.
-     */
-    public void setDir(File dir) {
-        this.dir = dir;
-    }
-
-    /**
-     * Used to force listing of all names of deleted files.
-     *
-     * @param verbose "true" or "on"
-     */
-    public void setVerbose(boolean verbose) {
-        if (verbose) {
-            this.verbosity = Project.MSG_INFO;
-        } else {
-            this.verbosity = Project.MSG_VERBOSE;
-        }
-    }
-
-    /**
-     * If the file does not exist, do not display a diagnostic
-     * message or modify the exit status to reflect an error.
-     * This means that if a file or directory cannot be deleted,
-     * then no error is reported. This setting emulates the
-     * -f option to the Unix &quot;rm&quot; command.
-     * Default is false meaning things are &quot;noisy&quot;
-     * @param quiet "true" or "on"
-     */
-    public void setQuiet(boolean quiet) {
-        this.quiet = quiet;
-        if (quiet) {
-            this.failonerror = false;
-        }
-    }
-
-    /**
-     * this flag means 'note errors to the output, but keep going'
-     * @param failonerror true or false
-     */
-     public void setFailOnError(boolean failonerror) {
-         this.failonerror = failonerror;
-     }
-
-
-    /**
-     * Used to delete empty directories.
-     */
-    public void setIncludeEmptyDirs(boolean includeEmpty) {
-        this.includeEmpty = includeEmpty;
-    }
-
-   /**
-     * Adds a set of files (nested fileset attribute).
-     */
-    public void addFileset(FileSet set) {
-        filesets.addElement(set);
-    }
-
-    /**
-     * add a name entry on the include list
-     */
-    public PatternSet.NameEntry createInclude() {
-        usedMatchingTask = true;
-        return super.createInclude();
-    }
-
-    /**
-     * add a name entry on the include files list
-     */
-    public PatternSet.NameEntry createIncludesFile() {
-        usedMatchingTask = true;
-        return super.createIncludesFile();
-    }
-    
-    /**
-     * add a name entry on the exclude list
-     */
-    public PatternSet.NameEntry createExclude() {
-        usedMatchingTask = true;
-        return super.createExclude();
-    }
-
-    /**
-     * add a name entry on the include files list
-     */
-    public PatternSet.NameEntry createExcludesFile() {
-        usedMatchingTask = true;
-        return super.createExcludesFile();
-    }
-    
-    /**
-     * add a set of patterns
-     */
-    public PatternSet createPatternSet() {
-        usedMatchingTask = true;
-        return super.createPatternSet();
-    }
-
-    /**
-     * Sets the set of include patterns. Patterns may be separated by a comma
-     * or a space.
-     *
-     * @param includes the string containing the include patterns
-     */
-    public void setIncludes(String includes) {
-        usedMatchingTask = true;
-        super.setIncludes(includes);
-    }
-
-    /**
-     * Sets the set of exclude patterns. Patterns may be separated by a comma
-     * or a space.
-     *
-     * @param excludes the string containing the exclude patterns
-     */
-    public void setExcludes(String excludes) {
-        usedMatchingTask = true;
-        super.setExcludes(excludes);
-    }
-
-    /**
-     * Sets whether default exclusions should be used or not.
-     *
-     * @param useDefaultExcludes "true"|"on"|"yes" when default exclusions
-     *                           should be used, "false"|"off"|"no" when they
-     *                           shouldn't be used.
-     */
-    public void setDefaultexcludes(boolean useDefaultExcludes) {
-        usedMatchingTask = true;
-        super.setDefaultexcludes(useDefaultExcludes);
-    }
-
-    /**
-     * Sets the name of the file containing the includes patterns.
-     *
-     * @param includesfile A string containing the filename to fetch
-     * the include patterns from.
-     */
-    public void setIncludesfile(File includesfile) {
-        usedMatchingTask = true;
-        super.setIncludesfile(includesfile);
-    }
-
-    /**
-     * Sets the name of the file containing the includes patterns.
-     *
-     * @param excludesfile A string containing the filename to fetch
-     * the include patterns from.
-     */
-    public void setExcludesfile(File excludesfile) {
-        usedMatchingTask = true;
-        super.setExcludesfile(excludesfile);
-    }
-
-    /**
-     * Delete the file(s).
-     */
-    public void execute() throws BuildException {
-        if (usedMatchingTask) {
-            log("DEPRECATED - Use of the implicit FileSet is deprecated.  "
-                + "Use a nested fileset element instead.");
-        }
-
-        if (file == null && dir == null && filesets.size() == 0) {
-            throw new BuildException("At least one of the file or dir "
-                                     + "attributes, or a fileset element, "
-                                     + "must be set.");
-        }
-
-        if (quiet && failonerror) {
-            throw new BuildException("quiet and failonerror cannot both be "
-                                     + "set to true", location);
-        }
-        
-
-        // delete the single file
-        if (file != null) {
-            if (file.exists()) {
-                if (file.isDirectory()) {
-                    log("Directory " + file.getAbsolutePath() 
-                        + " cannot be removed using the file attribute.  "
-                        + "Use dir instead.");
-                } else {
-                    log("Deleting: " + file.getAbsolutePath());
-
-                    if (!file.delete()) {
-                        String message = "Unable to delete file " 
-                            + file.getAbsolutePath();
-                        if (failonerror) {
-                            throw new BuildException(message);
-                        } else { 
-                            log(message, quiet ? Project.MSG_VERBOSE 
-                                               : Project.MSG_WARN);
-                        }
-                    }
-                }
-            } else {
-                log("Could not find file " + file.getAbsolutePath() 
-                    + " to delete.", 
-                    Project.MSG_VERBOSE);
-            }
-        }
-
-        // delete the directory
-        if (dir != null && dir.exists() && dir.isDirectory() && 
-            !usedMatchingTask) {
-            /*
-               If verbosity is MSG_VERBOSE, that mean we are doing
-               regular logging (backwards as that sounds).  In that
-               case, we want to print one message about deleting the
-               top of the directory tree.  Otherwise, the removeDir
-               method will handle messages for _all_ directories.
-             */
-            if (verbosity == Project.MSG_VERBOSE) {
-                log("Deleting directory " + dir.getAbsolutePath());
-            }
-            removeDir(dir);
-        }
-
-        // delete the files in the filesets
-        for (int i = 0; i < filesets.size(); i++) {
-            FileSet fs = (FileSet) filesets.elementAt(i);
-            try {
-                DirectoryScanner ds = fs.getDirectoryScanner(project);
-                String[] files = ds.getIncludedFiles();
-                String[] dirs = ds.getIncludedDirectories();
-                removeFiles(fs.getDir(project), files, dirs);
-            } catch (BuildException be) {
-                // directory doesn't exist or is not readable
-                if (failonerror) {
-                    throw be;
-                } else {
-                    log(be.getMessage(), 
-                        quiet ? Project.MSG_VERBOSE : Project.MSG_WARN);
-                }
-            }
-        }
-
-        // delete the files from the default fileset
-        if (usedMatchingTask && dir != null) {
-            try {
-                DirectoryScanner ds = super.getDirectoryScanner(dir);
-                String[] files = ds.getIncludedFiles();
-                String[] dirs = ds.getIncludedDirectories();
-                removeFiles(dir, files, dirs);
-            } catch (BuildException be) {
-                // directory doesn't exist or is not readable
-                if (failonerror) {
-                    throw be;
-                } else {
-                    log(be.getMessage(), 
-                        quiet ? Project.MSG_VERBOSE : Project.MSG_WARN);
-                }
-            }
-        }
-    }
-
-//************************************************************************
-//  protected and private methods
-//************************************************************************
-
-    protected void removeDir(File d) {
-        String[] list = d.list();
-        if (list == null) {
-            list = new String[0];
-        }
-        for (int i = 0; i < list.length; i++) {
-            String s = list[i];
-            File f = new File(d, s);
-            if (f.isDirectory()) {
-                removeDir(f);
-            } else {
-                log("Deleting " + f.getAbsolutePath(), verbosity);
-                if (!f.delete()) {
-                    String message = "Unable to delete file " 
-                        + f.getAbsolutePath();
-                    if (failonerror) {
-                        throw new BuildException(message);
-                    } else {
-                        log(message,
-                            quiet ? Project.MSG_VERBOSE : Project.MSG_WARN);
-                    }
-                }
-            }
-        }
-        log("Deleting directory " + d.getAbsolutePath(), verbosity);
-        if (!d.delete()) {
-            String message = "Unable to delete directory " 
-                + dir.getAbsolutePath();
-            if (failonerror) {
-                throw new BuildException(message);
-            } else {
-                log(message,
-                    quiet ? Project.MSG_VERBOSE : Project.MSG_WARN);
-            }
-        }
-    }
-
-    /**
-     * remove an array of files in a directory, and a list of subdirectories
-     * which will only be deleted if 'includeEmpty' is true
-     * @param d directory to work from
-     * @param files array of files to delete; can be of zero length
-     * @param dirs array of directories to delete; can of zero length
-     */
-    protected void removeFiles(File d, String[] files, String[] dirs) {
-        if (files.length > 0) {
-            log("Deleting " + files.length + " files from " 
-                + d.getAbsolutePath());
-            for (int j = 0; j < files.length; j++) {
-                File f = new File(d, files[j]);
-                log("Deleting " + f.getAbsolutePath(), verbosity);
-                if (!f.delete()) {
-                    String message = "Unable to delete file " 
-                        + f.getAbsolutePath();
-                    if (failonerror) {
-                        throw new BuildException(message);
-                    } else {
-                        log(message,
-                            quiet ? Project.MSG_VERBOSE : Project.MSG_WARN);
-                    }
-                }
-            }
-        }
-
-        if (dirs.length > 0 && includeEmpty) {
-            int dirCount = 0;
-            for (int j = dirs.length - 1; j >= 0; j--) {
-                File dir = new File(d, dirs[j]);
-                String[] dirFiles = dir.list();
-                if (dirFiles == null || dirFiles.length == 0) {
-                    log("Deleting " + dir.getAbsolutePath(), verbosity);
-                    if (!dir.delete()) {
-                        String message = "Unable to delete directory "
-                                + dir.getAbsolutePath();
-                        if (failonerror) {
-                            throw new BuildException(message);
-                        } else {
-                            log(message,
-                                quiet ? Project.MSG_VERBOSE : Project.MSG_WARN);
-                        }
-                    } else {
-                        dirCount++;
-                    }
-                }
-            }
-
-            if (dirCount > 0) {
-                log("Deleted " + dirCount + " director" +
-                    (dirCount == 1 ? "y" : "ies") +
-                    " from " + d.getAbsolutePath());
-            }
-        }
-    }
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/Deltree.java b/src/main/org/apache/tools/ant/taskdefs/Deltree.java
deleted file mode 100644
index 34f5035..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Deltree.java
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000,2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.BuildException;
-import java.io.File;
-import java.io.IOException;
-
-/**
- *
- *
- * @author duncan@x180.com
- *
- * @since Ant 1.1
- *
- * @deprecated The deltree task is deprecated since Ant 1.2.  Use
- * delete instead.
- */
-
-public class Deltree extends Task {
-
-    private File dir;
-
-    /**
-     * Set the directory to be deleted
-     *
-     * @param dir the root of the tree to be removed.
-     */
-    public void setDir(File dir) {
-        this.dir = dir;
-    }
-
-    /**
-     * Do the work.
-     *
-     * @exception BuildException if the task is not configured correctly or
-     * the tree cannot be removed.
-     */
-    public void execute() throws BuildException {
-        log("DEPRECATED - The deltree task is deprecated.  "
-            + "Use delete instead.");
-
-        if (dir == null) {
-            throw new BuildException("dir attribute must be set!", location);
-        }
-
-        if (dir.exists()) {
-            if (!dir.isDirectory()) {
-                if (!dir.delete()) {
-                    throw new BuildException("Unable to delete directory "
-                                             + dir.getAbsolutePath(),
-                                             location);
-                }
-                return;
-            }
-
-            log("Deleting: " + dir.getAbsolutePath());
-
-            try {
-                removeDir(dir);
-            } catch (IOException ioe) {
-                String msg = "Unable to delete " + dir.getAbsolutePath();
-                throw new BuildException(msg, location);
-            }
-        }
-    }
-
-    private void removeDir(File dir) throws IOException {
-
-        // check to make sure that the given dir isn't a symlink
-        // the comparison of absolute path and canonical path
-        // catches this
-
-        //        if (dir.getCanonicalPath().equals(dir.getAbsolutePath())) {
-        // (costin) It will not work if /home/costin is symlink to
-        // /da0/home/costin ( taz for example )
-        String[] list = dir.list();
-        for (int i = 0; i < list.length; i++) {
-            String s = list[i];
-            File f = new File(dir, s);
-            if (f.isDirectory()) {
-                removeDir(f);
-            } else {
-                if (!f.delete()) {
-                    throw new BuildException("Unable to delete file " 
-                                             + f.getAbsolutePath());
-                }
-            }
-        }
-        if (!dir.delete()) {
-            throw new BuildException("Unable to delete directory " 
-                                     + dir.getAbsolutePath());
-        }
-    }
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/DependSet.java b/src/main/org/apache/tools/ant/taskdefs/DependSet.java
deleted file mode 100644
index 873c6db..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/DependSet.java
+++ /dev/null
@@ -1,328 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import java.io.File;
-import java.util.Enumeration;
-import java.util.Vector;
-import java.util.Date;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.DirectoryScanner;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.taskdefs.condition.Os;
-import org.apache.tools.ant.types.FileSet;
-import org.apache.tools.ant.types.FileList;
-
-/**
- * A Task to record explicit dependencies.  If any of the target files
- * are out of date with respect to any of the source files, all target
- * files are removed.  This is useful where dependencies cannot be
- * computed (for example, dynamically interpreted parameters or files
- * that need to stay in synch but are not directly linked) or where
- * the ant task in question could compute them but does not (for
- * example, the linked DTD for an XML file using the style task).
- *
- * nested arguments:
- * <ul>
- * <li>srcfileset     (fileset describing the source files to examine)
- * <li>srcfilelist    (filelist describing the source files to examine)
- * <li>targetfileset  (fileset describing the target files to examine)
- * <li>targetfilelist (filelist describing the target files to examine)
- * </ul>
- * At least one instance of either a fileset or filelist for both source and 
- * target are required.
- * <p>
- * This task will examine each of the source files against each of the target 
- * files. If any target files are out of date with respect to any of the source 
- * files, all targets are removed. If any files named in a (src or target) 
- * filelist do not exist, all targets are removed.
- * Hint: If missing files should be ignored, specify them as include patterns 
- * in filesets, rather than using filelists.
- * </p><p>
- * This task attempts to optimize speed of dependency checking.  It will stop 
- * after the first out of date file is found and remove all targets, rather 
- * than exhaustively checking every source vs target combination unnecessarily.
- * </p><p>
- * Example uses: 
- * <ul><li>
- * Record the fact that an XML file must be up to date
- * with respect to its XSD (Schema file), even though the XML file
- * itself includes no reference to its XSD.
- * </li><li>
- * Record the fact that an XSL stylesheet includes other
- * sub-stylesheets
- * </li><li>
- * Record the fact that java files must be recompiled if the ant build
- * file changes
- * </li></ul>
- * 
- * @author <a href="mailto:cstrong@arielpartners.com">Craeg Strong</a>
- * @ant.task category="filesystem"
- * @version $Revision$ $Date$
- * @since Ant 1.4
- */
-public class DependSet extends MatchingTask {
-
-    private Vector sourceFileSets  = new Vector();
-    private Vector sourceFileLists = new Vector();
-    private Vector targetFileSets  = new Vector();
-    private Vector targetFileLists = new Vector();
-
-    /**
-     * Creates a new DependSet Task.
-     **/
-    public DependSet() {
-    } //-- DependSet
-
-    /**
-     * Nested &lt;srcfileset&gt; element.
-     */
-    public void addSrcfileset(FileSet fs) {
-        sourceFileSets.addElement(fs);
-    }
-
-    /**
-     * Nested &lt;srcfilelist&gt; element.
-     */
-    public void addSrcfilelist(FileList fl) {
-        sourceFileLists.addElement(fl);
-    }
-
-    /**
-     * Nested &lt;targetfileset&gt; element.
-     */
-    public void addTargetfileset(FileSet fs) {
-        targetFileSets.addElement(fs);
-    }
-
-    /**
-     * Nested &lt;targetfilelist&gt; element.
-     */
-    public void addTargetfilelist(FileList fl) {
-        targetFileLists.addElement(fl);
-    }
-
-    /**
-     * Executes the task.
-     */
-
-    public void execute() throws BuildException {
-
-        if ((sourceFileSets.size() == 0) && (sourceFileLists.size() == 0)) { 
-          throw new BuildException("At least one <srcfileset> or <srcfilelist>"
-                                   + " element must be set");
-        }
-
-        if ((targetFileSets.size() == 0) && (targetFileLists.size() == 0)) {
-          throw new BuildException("At least one <targetfileset> or"
-                                   + " <targetfilelist> element must be set");
-        }
-
-        long now = (new Date()).getTime();
-        /*
-          If we're on Windows, we have to munge the time up to 2 secs to
-          be able to check file modification times.
-          (Windows has a max resolution of two secs for modification times)
-        */
-        if (Os.isFamily("windows")) {
-            now += 2000;
-        }
-
-        //
-        // Grab all the target files specified via filesets
-        //
-        Vector  allTargets         = new Vector();
-        long oldestTargetTime = 0;
-        File oldestTarget = null;
-        Enumeration enumTargetSets = targetFileSets.elements();
-        while (enumTargetSets.hasMoreElements()) {
-                 
-           FileSet targetFS          = (FileSet) enumTargetSets.nextElement();
-           DirectoryScanner targetDS = targetFS.getDirectoryScanner(project);
-           String[] targetFiles      = targetDS.getIncludedFiles();
-                 
-           for (int i = 0; i < targetFiles.length; i++) {
-                    
-              File dest = new File(targetFS.getDir(project), targetFiles[i]);
-              allTargets.addElement(dest);
-
-              if (dest.lastModified() > now) {
-                 log("Warning: " + targetFiles[i] + " modified in the future.", 
-                     Project.MSG_WARN);
-              }
-
-              if (oldestTarget == null ||
-                  dest.lastModified() < oldestTargetTime) {
-                  oldestTargetTime = dest.lastModified();
-                  oldestTarget = dest;
-              }
-           }
-        }
-
-        //
-        // Grab all the target files specified via filelists
-        //
-        boolean upToDate            = true;
-        Enumeration enumTargetLists = targetFileLists.elements();
-        while (enumTargetLists.hasMoreElements()) {
-                 
-           FileList targetFL    = (FileList) enumTargetLists.nextElement();
-           String[] targetFiles = targetFL.getFiles(project);
-                 
-           for (int i = 0; i < targetFiles.length; i++) {
-                    
-              File dest = new File(targetFL.getDir(project), targetFiles[i]);
-              if (!dest.exists()) {
-                 log(targetFiles[i] + " does not exist.", Project.MSG_VERBOSE);
-                 upToDate = false;
-                 continue;
-              } else {
-                 allTargets.addElement(dest);
-              }
-              if (dest.lastModified() > now) {
-                 log("Warning: " + targetFiles[i] + " modified in the future.", 
-                     Project.MSG_WARN);
-              }
-
-              if (oldestTarget == null ||
-                  dest.lastModified() < oldestTargetTime) {
-                  oldestTargetTime = dest.lastModified();
-                  oldestTarget = dest;
-              }
-           }
-        }
-        if (oldestTarget != null) {
-            log(oldestTarget + " is oldest target file", Project.MSG_VERBOSE);
-        } else { 
-            // no target files, then we cannot remove any target files and
-            // skip the following tests right away
-            upToDate = false;
-        }
-
-        //
-        // Check targets vs source files specified via filelists
-        //
-        if (upToDate) {
-           Enumeration enumSourceLists = sourceFileLists.elements();
-           while (upToDate && enumSourceLists.hasMoreElements()) {
-          
-              FileList sourceFL    = (FileList) enumSourceLists.nextElement();
-              String[] sourceFiles = sourceFL.getFiles(project);
-
-              for (int i = 0; upToDate && i < sourceFiles.length; i++) {
-                 File src = new File(sourceFL.getDir(project), sourceFiles[i]);
-
-                 if (src.lastModified() > now) {
-                    log("Warning: " + sourceFiles[i] 
-                        + " modified in the future.", Project.MSG_WARN);
-                 }
-
-                 if (!src.exists()) {
-                    log(sourceFiles[i] + " does not exist.", 
-                        Project.MSG_VERBOSE);
-                    upToDate = false;
-                    break;
-                 }
-
-                 if (src.lastModified() > oldestTargetTime) {
-                    upToDate = false;
-                    log(oldestTarget + " is out of date with respect to " +
-                        sourceFiles[i], Project.MSG_VERBOSE);
-                 }
-              }
-           }
-        }
-
-        //
-        // Check targets vs source files specified via filesets
-        //
-        if (upToDate) {
-           Enumeration enumSourceSets = sourceFileSets.elements();
-           while (upToDate && enumSourceSets.hasMoreElements()) {
-          
-              FileSet sourceFS         = (FileSet) enumSourceSets.nextElement();
-              DirectoryScanner sourceDS = sourceFS.getDirectoryScanner(project);
-              String[] sourceFiles      = sourceDS.getIncludedFiles();
-
-              for (int i = 0; upToDate && i < sourceFiles.length; i++) {
-                 File src = new File(sourceFS.getDir(project), sourceFiles[i]);
-
-                 if (src.lastModified() > now) {
-                    log("Warning: " + sourceFiles[i]
-                        + " modified in the future.", Project.MSG_WARN);
-                 }
-
-                 if (src.lastModified() > oldestTargetTime) {
-                    upToDate = false;
-                    log(oldestTarget + " is out of date with respect to " +
-                        sourceFiles[i], Project.MSG_VERBOSE);
-                 }
-              }
-           }
-        }
-
-        if (!upToDate) {
-           log("Deleting all target files. ", Project.MSG_VERBOSE);
-           for (Enumeration e = allTargets.elements(); e.hasMoreElements();) {
-              File fileToRemove = (File) e.nextElement();
-              log("Deleting file " + fileToRemove.getAbsolutePath(), 
-                  Project.MSG_VERBOSE);
-              fileToRemove.delete();
-           }
-        }
-
-    } //-- execute
-   
-} //-- DependSet.java
diff --git a/src/main/org/apache/tools/ant/taskdefs/Dirname.java b/src/main/org/apache/tools/ant/taskdefs/Dirname.java
deleted file mode 100644
index d269031..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Dirname.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import java.io.File;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Task;
-
-/**
- * Task to determine the directory name of the specified file.
- *
- * This task can accept the following attributes:
- * <ul>
- * <li>file
- * <li>property
- * </ul>
- * Both <b>file</b> and <b>property</b> are required.
- * <p>
- * When this task executes, it will set the specified property to the
- * value of the specified file up to, but not including, the last path
- * element. If file is a file, the directory will be the current
- * directory.
- *
- * @author Diane Holt <a href="mailto:holtdl@apache.org">holtdl@apache.org</a>
- *
- * @version $Revision$
- *
- * @since Ant 1.5
- *
- * @ant.task category="property"
- */
-
-public class Dirname extends Task {
-  private File file;
-  private String property;
-
-  // The setter for the `file' attribute
-  public void setFile(File file) {
-    this.file = file;
-  }
-
-  // The setter for the `property' attribute
-  public void setProperty(String property) {
-    this.property  = property ;
-  }
-
-
-  // The method executing the task
-  public void execute() throws BuildException {
-      if (property == null) {
-          throw new BuildException("property attribute required", location);
-      }
-      if (file == null) {
-          throw new BuildException("file attribute required", location);
-      } else {
-        String value = file.getParent();
-        getProject().setNewProperty(property, value);
-      }
-  }
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/Ear.java b/src/main/org/apache/tools/ant/taskdefs/Ear.java
deleted file mode 100644
index c7e61a6..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Ear.java
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.types.ZipFileSet;
-import org.apache.tools.zip.ZipOutputStream;
-
-import java.io.File;
-import java.io.IOException;
-
-/**
- * Creates a EAR archive. Based on WAR task
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- * @author <a href="mailto:leslie.hughes@rubus.com">Les Hughes</a>
- *
- * @since Ant 1.4
- *
- * @ant.task category="packaging"
- */
-public class Ear extends Jar {
-
-    private File deploymentDescriptor;
-    private boolean descriptorAdded;
-
-    /**
-     * Create an Ear task.
-     */
-    public Ear() {
-        super();
-        archiveType = "ear";
-        emptyBehavior = "create";
-    }
-
-    /**
-     * @deprecated Use setDestFile(destfile) instead
-     */
-    public void setEarfile(File earFile) {
-        setDestFile(earFile);
-    }
-
-    /**
-     * set the application XML file
-     */
-    public void setAppxml(File descr) {
-        deploymentDescriptor = descr;
-        if (!deploymentDescriptor.exists()) {
-            throw new BuildException("Deployment descriptor: " 
-                                     + deploymentDescriptor 
-                                     + " does not exist.");
-        }
-
-        // Create a ZipFileSet for this file, and pass it up.
-        ZipFileSet fs = new ZipFileSet();
-        fs.setDir(new File(deploymentDescriptor.getParent()));
-        fs.setIncludes(deploymentDescriptor.getName());
-        fs.setFullpath("META-INF/application.xml");
-        super.addFileset(fs);
-    }
-
-
-    public void addArchives(ZipFileSet fs) {
-        // We just set the prefix for this fileset, and pass it up.
-        // Do we need to do this? LH
-        fs.setPrefix("/");
-        super.addFileset(fs);
-    }
-
-
-    protected void initZipOutputStream(ZipOutputStream zOut)
-        throws IOException, BuildException {
-        // If no webxml file is specified, it's an error.
-        if (deploymentDescriptor == null && !isInUpdateMode()) {
-            throw new BuildException("appxml attribute is required", location);
-        }
-
-        super.initZipOutputStream(zOut);
-    }
-
-    protected void zipFile(File file, ZipOutputStream zOut, String vPath)
-        throws IOException {
-        // If the file being added is META-INF/application.xml, we
-        // warn if it's not the one specified in the "appxml"
-        // attribute - or if it's being added twice, meaning the same
-        // file is specified by the "appxml" attribute and in a
-        // <fileset> element.
-        if (vPath.equalsIgnoreCase("META-INF/application.xml"))  {
-            if (deploymentDescriptor == null 
-                || !deploymentDescriptor.equals(file) 
-                || descriptorAdded) {
-                log("Warning: selected " + archiveType
-                    + " files include a META-INF/application.xml which will"
-                    + " be ignored (please use appxml attribute to "
-                    + archiveType + " task)", Project.MSG_WARN);
-            } else {
-                super.zipFile(file, zOut, vPath);
-                descriptorAdded = true;
-            }
-        } else {
-            super.zipFile(file, zOut, vPath);
-        }
-    }
-
-    /**
-     * Make sure we don't think we already have a application.xml next
-     * time this task gets executed.
-     */
-    protected void cleanUp() {
-        descriptorAdded = false;
-        super.cleanUp();
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/Echo.java b/src/main/org/apache/tools/ant/taskdefs/Echo.java
deleted file mode 100644
index d041103..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Echo.java
+++ /dev/null
@@ -1,174 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights 
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.BuildException;
-
-import org.apache.tools.ant.types.EnumeratedAttribute;
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
-/**
- * Echo
- *
- * @author costin@dnt.ro
- *
- * @since Ant 1.1
- *
- * @ant.task category="utility"
- */
-public class Echo extends Task {
-    protected String message = ""; // required
-    protected File file = null;
-    protected boolean append = false;
-    
-    // by default, messages are always displayed
-    protected int logLevel = Project.MSG_WARN;   
-    
-    /**
-     * Does the work.
-     *
-     * @exception BuildException if someting goes wrong with the build
-     */
-    public void execute() throws BuildException {
-        if (file == null) {
-            log(message, logLevel);
-        } else {
-            FileWriter out = null;
-            try {
-                out = new FileWriter(file.getAbsolutePath(), append);
-                out.write(message, 0, message.length());
-            } catch (IOException ioe) {
-                throw new BuildException(ioe, location);
-            } finally {
-                if (out != null) {
-                    try {
-                        out.close();
-                    } catch (IOException ioex) {}
-                }
-            }
-        }
-    }
-
-    /**
-     * Sets the message variable.
-     *
-     * @param msg Sets the value for the message variable.
-     */
-    public void setMessage(String msg) {
-        this.message = msg;
-    }
-
-    /**
-     * Sets the file attribute.
-     */
-    public void setFile(File file) {
-        this.file = file;
-    }
-
-    /**
-     * Shall we append to an existing file?
-     */
-    public void setAppend(boolean append) {
-        this.append = append;
-    }
-
-    /**
-     * Set a multiline message.
-     */
-    public void addText(String msg) {
-        message += project.replaceProperties(msg);
-    }
-
-    /**
-     * Set the logging level. Level should be one of
-     * <ul>
-     *  <li>error</li>
-     *  <li>warning</li>
-     *  <li>info</li>
-     *  <li>verbose</li>
-     *  <li>debug</li>
-     * </ul>
-     * <p>The default is &quot;warning&quot; to ensure that messages are
-     * displayed by default when using the -quiet command line option.</p>
-     */
-    public void setLevel(EchoLevel echoLevel) {
-        String option = echoLevel.getValue();
-        if (option.equals("error")) {
-            logLevel = Project.MSG_ERR;
-        } else if (option.equals("warning")) {
-            logLevel = Project.MSG_WARN;
-        } else if (option.equals("info")) {
-            logLevel = Project.MSG_INFO;
-        } else if (option.equals("verbose")) {
-            logLevel = Project.MSG_VERBOSE;
-        } else {
-            // must be "debug"
-            logLevel = Project.MSG_DEBUG;
-        }
-    }
-
-    public static class EchoLevel extends EnumeratedAttribute {
-        /**
-         * @see EnumeratedAttribute#getValues
-         */
-        public String[] getValues() {
-            return new String[] {"error", "warning", "info", 
-                                 "verbose", "debug"};
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/Exec.java b/src/main/org/apache/tools/ant/taskdefs/Exec.java
deleted file mode 100644
index 1e264da..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Exec.java
+++ /dev/null
@@ -1,269 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000,2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import java.io.File;
-import java.io.PrintWriter;
-import java.io.FileWriter;
-import java.io.InputStream;
-import java.io.IOException;
-import java.io.BufferedReader;
-import java.io.InputStreamReader;
-
-/**
- * Executes a given command if the os platform is appropriate.
- *
- * <p><strong>As of Ant 1.2, this class is no longer the
- * implementation of Ant's &lt;exec&gt; task - it is considered to be
- * dead code by the Ant developers and is unmaintained.  Don't use
- * it.</strong></p>
-
- * @author duncan@x180.com
- * @author rubys@us.ibm.com
- *
- * @deprecated delegate to {@link org.apache.tools.ant.taskdefs.Execute Execute} 
- *             instead.
- */
-public class Exec extends Task {
-    private String os;
-    private String out;
-    private File dir;
-    private String command;
-    protected PrintWriter fos = null;
-    private boolean failOnError = false;
-
-    private static final int BUFFER_SIZE = 512;
-
-    public Exec() {
-        System.err.println("As of Ant 1.2 released in October 2000, " 
-            + "the Exec class");
-        System.err.println("is considered to be dead code by the Ant " 
-            + "developers and is unmaintained.");
-        System.err.println("Don\'t use it!");
-    }
-
-    public void execute() throws BuildException {
-        run(command);
-    }
-
-    protected int run(String command) throws BuildException {
-
-        int err = -1; // assume the worst
-
-        // test if os match
-        String myos = System.getProperty("os.name");
-        log("Myos = " + myos, Project.MSG_VERBOSE);
-        if ((os != null) && (os.indexOf(myos) < 0)){
-            // this command will be executed only on the specified OS
-            log("Not found in " + os, Project.MSG_VERBOSE);
-            return 0;
-        }
-
-        // default directory to the project's base directory
-        if (dir == null) {
-          dir = project.getBaseDir();
-        }
-
-        if (myos.toLowerCase().indexOf("windows") >= 0) {
-            if (!dir.equals(project.resolveFile("."))) {
-                if (myos.toLowerCase().indexOf("nt") >= 0) {
-                    command = "cmd /c cd " + dir + " && " + command;
-                } else {
-                    String ant = project.getProperty("ant.home");
-                    if (ant == null) {
-                        throw new BuildException("Property 'ant.home' not " 
-                            + "found", location);
-                    }
-                
-                    String antRun = project.resolveFile(ant + "/bin/antRun.bat").toString();
-                    command = antRun + " " + dir + " " + command;
-                }
-            }
-        } else {
-            String ant = project.getProperty("ant.home");
-            if (ant == null) {
-              throw new BuildException("Property 'ant.home' not found", 
-                location);
-            }
-            String antRun = project.resolveFile(ant + "/bin/antRun").toString();
-
-            command = antRun + " " + dir + " " + command;
-        }
-
-        try {
-            // show the command
-            log(command, Project.MSG_VERBOSE);
-
-            // exec command on system runtime
-            Process proc = Runtime.getRuntime().exec(command);
-
-            if (out != null)  {
-                fos = new PrintWriter(new FileWriter(out));
-                log("Output redirected to " + out, Project.MSG_VERBOSE);
-            }
-
-            // copy input and error to the output stream
-            StreamPumper inputPumper =
-                new StreamPumper(proc.getInputStream(), Project.MSG_INFO, this);
-            StreamPumper errorPumper =
-                new StreamPumper(proc.getErrorStream(), Project.MSG_WARN, this);
-
-            // starts pumping away the generated output/error
-            inputPumper.start();
-            errorPumper.start();
-
-            // Wait for everything to finish
-            proc.waitFor();
-            inputPumper.join();
-            errorPumper.join();
-            proc.destroy();
-
-            // close the output file if required
-            logFlush();
-
-            // check its exit value
-            err = proc.exitValue();
-            if (err != 0) {
-                if (failOnError) {
-                    throw new BuildException("Exec returned: " + err, location);
-                } else {
-                    log("Result: " + err, Project.MSG_ERR);
-                }
-            }
-        } catch (IOException ioe) {
-            throw new BuildException("Error exec: " + command, ioe, location);
-        } catch (InterruptedException ex) {}
-
-        return err;
-    }
-
-    public void setDir(String d) {
-        this.dir = project.resolveFile(d);
-    }
-
-    public void setOs(String os) {
-        this.os = os;
-    }
-
-    public void setCommand(String command) {
-        this.command = command;
-    }
-
-    public void setOutput(String out) {
-        this.out = out;
-    }
-
-    public void setFailonerror(boolean fail) {
-        failOnError = fail;
-    }
-
-    protected void outputLog(String line, int messageLevel) {
-        if (fos == null) {
-            log(line, messageLevel); 
-        } else {
-            fos.println(line);
-        }
-    }
-
-    protected void logFlush() {
-        if (fos != null) {
-          fos.close();
-        }
-    }
-
-    // Inner class for continually pumping the input stream during
-    // Process's runtime.
-    class StreamPumper extends Thread {
-        private BufferedReader din;
-        private int messageLevel;
-        private boolean endOfStream = false;
-        private int SLEEP_TIME = 5;
-        private Exec parent;
-
-        public StreamPumper(InputStream is, int messageLevel, Exec parent) {
-            this.din = new BufferedReader(new InputStreamReader(is));
-            this.messageLevel = messageLevel;
-            this.parent = parent;
-        }
-
-        public void pumpStream() throws IOException {
-            byte[] buf = new byte[BUFFER_SIZE];
-            if (!endOfStream) {
-                String line = din.readLine();
-
-                if (line != null) {
-                    outputLog(line, messageLevel);
-                } else {
-                    endOfStream = true;
-                }
-            }
-        }
-
-        public void run() {
-            try {
-                try {
-                    while (!endOfStream) {
-                        pumpStream();
-                        sleep(SLEEP_TIME);
-                    }
-                } catch (InterruptedException ie) {}
-                din.close();
-            } catch (IOException ioe) {}
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/ExecTask.java b/src/main/org/apache/tools/ant/taskdefs/ExecTask.java
deleted file mode 100644
index fb0170b..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/ExecTask.java
+++ /dev/null
@@ -1,432 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.types.Commandline;
-import org.apache.tools.ant.types.Environment;
-import org.apache.tools.ant.util.StringUtils;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.BufferedReader;
-import java.io.StringReader;
-import java.io.FileNotFoundException;
-
-/**
- * Executes a given command if the os platform is appropriate.
- *
- * @author duncan@x180.com
- * @author rubys@us.ibm.com
- * @author thomas.haas@softwired-inc.com
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- * @author <a href="mailto:mariusz@rakiura.org">Mariusz Nowostawski</a>
- *
- * @since Ant 1.2
- *
- * @ant.task category="control"
- */
-public class ExecTask extends Task {
-
-    private String os;
-    private File out;
-    private File dir;
-    protected boolean failOnError = false;
-    protected boolean newEnvironment = false;
-    private Long timeout = null;
-    private Environment env = new Environment();
-    protected Commandline cmdl = new Commandline();
-    private FileOutputStream fos = null;
-    private ByteArrayOutputStream baos = null;
-    private String outputprop;
-    private String resultProperty;
-    private boolean failIfExecFails = true;
-    private boolean append = false;
-
-    /** 
-     * Controls whether the VM (1.3 and above) is used to execute the
-     * command 
-     */
-    private boolean vmLauncher = true;
-
-    /**
-     * Timeout in milliseconds after which the process will be killed.
-     *
-     * @since Ant 1.5
-     */
-    public void setTimeout(Long value) {
-        timeout = value;
-    }
-
-    /**
-     * Timeout in milliseconds after which the process will be killed.
-     */
-    public void setTimeout(Integer value) {
-        if (value == null) {
-            timeout = null;
-        } else {
-            setTimeout(new Long(value.intValue()));
-        }
-    }
-
-    /**
-     * The command to execute.
-     */
-    public void setExecutable(String value) {
-        cmdl.setExecutable(value);
-    }
-
-    /**
-     * The working directory of the process
-     */
-    public void setDir(File d) {
-        this.dir = d;
-    }
-
-    /**
-     * Only execute the process if <code>os.name</code> is included in
-     * this string.
-     */
-    public void setOs(String os) {
-        this.os = os;
-    }
-
-    /**
-     * The full commandline to execute, executable + arguments.
-     */
-    public void setCommand(Commandline cmdl) {
-        log("The command attribute is deprecated. " +
-            "Please use the executable attribute and nested arg elements.",
-            Project.MSG_WARN);
-        this.cmdl = cmdl;
-    }
-
-    /**
-     * File the output of the process is redirected to.
-     */
-    public void setOutput(File out) {
-        this.out = out;
-    }
-
-    /**
-     * Property name whose value should be set to the output of
-     * the process
-     */
-    public void setOutputproperty(String outputprop) {
-        this.outputprop = outputprop;
-    }
-
-    /**
-     * Throw a BuildException if process returns non 0.
-     */
-    public void setFailonerror(boolean fail) {
-        failOnError = fail;
-    }
-
-    /**
-     * Use a completely new environment
-     */
-    public void setNewenvironment(boolean newenv) {
-        newEnvironment = newenv;
-    }
-
-    /**
-     * Add a nested env element - an environment variable.
-     */
-    public void addEnv(Environment.Variable var) {
-        env.addVariable(var);
-    }
-
-    /**
-     * Add a nested arg element - a command line argument.
-     */
-    public Commandline.Argument createArg() {
-        return cmdl.createArgument();
-    }
-
-    /**
-     * fill a property in with a result. 
-     * when no property is defined: failure to execute
-     *
-     * @since Ant 1.5
-     */
-    public void setResultProperty(String resultProperty) {
-        this.resultProperty = resultProperty;
-    }
-    
-    /**
-     * helper method to set result property to the 
-     * passed in value if appropriate
-     */
-    protected void maybeSetResultPropertyValue(int result) {
-        String res = Integer.toString(result);
-        if (resultProperty != null) {
-            project.setNewProperty(resultProperty, res);
-        }
-    }
-    
-    /**
-     * fail if execution is wrong
-     * @since Ant 1.5     
-     */
-    public void setFailIfExecutionFails(boolean flag) {
-        failIfExecFails = flag;
-    }
-    
-    /**
-     * Shall we append to an existing file?
-     *
-     * @since 1.30, Ant 1.5
-     */
-    public void setAppend(boolean append) {
-        this.append = append;
-    }
-
-    /**
-     * Do the work.
-     */
-    public void execute() throws BuildException {
-        File savedDir = dir; // possibly altered in prepareExec
-        checkConfiguration();
-        if (isValidOs()) {
-            try {
-                runExec(prepareExec());
-            } finally {
-                dir = savedDir;
-            }
-        }
-    }
-
-    /**
-     * Has the user set all necessary attributes?
-     */
-    protected void checkConfiguration() throws BuildException {
-        if (cmdl.getExecutable() == null) {
-            throw new BuildException("no executable specified", location);
-        }
-        if (dir != null && !dir.exists()) {
-            throw new BuildException("The directory you specified does not "
-                                     + "exist");
-        }
-        if (dir != null && !dir.isDirectory()) {
-            throw new BuildException("The directory you specified is not a "
-                                     + "directory");
-        }
-    }
-
-    /**
-     * Is this the OS the user wanted?
-     */
-    protected boolean isValidOs() {
-        // test if os match
-        String myos = System.getProperty("os.name");
-        log("Current OS is " + myos, Project.MSG_VERBOSE);
-        if ((os != null) && (os.indexOf(myos) < 0)){
-            // this command will be executed only on the specified OS
-            log("This OS, " + myos 
-                + " was not found in the specified list of valid OSes: " + os,
-                Project.MSG_VERBOSE);
-            return false;
-        }
-        return true;
-    }
-
-    /**
-     * Control whether the VM is used to launch the new process or
-     * whether the OS's shell is used.
-     */
-    public void setVMLauncher(boolean vmLauncher) {
-        this.vmLauncher = vmLauncher;
-    }
-
-    /**
-     * Create an Execute instance with the correct working directory set.
-     */
-    protected Execute prepareExec() throws BuildException {
-        // default directory to the project's base directory
-        if (dir == null) {
-            dir = project.getBaseDir();
-        }
-        Execute exe = new Execute(createHandler(), createWatchdog());
-        exe.setAntRun(getProject());
-        exe.setWorkingDirectory(dir);
-        exe.setVMLauncher(vmLauncher);
-        String[] environment = env.getVariables();
-        if (environment != null) {
-            for (int i = 0; i < environment.length; i++) {
-                log("Setting environment variable: " + environment[i],
-                    Project.MSG_VERBOSE);
-            }
-        }
-        exe.setNewenvironment(newEnvironment);
-        exe.setEnvironment(environment);
-        return exe;
-    }
-
-    /**
-     * A Utility method for this classes and subclasses to run an
-     * Execute instance (an external command).
-     */
-    protected final void runExecute(Execute exe) throws IOException {
-        int err = -1; // assume the worst
-
-        err = exe.execute();
-        //test for and handle a forced process death
-        if (exe.killedProcess()) {
-            log("Timeout: killed the sub-process", Project.MSG_WARN); 
-        }
-        maybeSetResultPropertyValue(err);
-        if (err != 0) {
-            if (failOnError) {
-                throw new BuildException(taskType + " returned: " + err,
-                                         location);
-            } else {
-                log("Result: " + err, Project.MSG_ERR);
-            }
-        }
-        if (baos != null) {
-            BufferedReader in =
-                new BufferedReader(new StringReader(baos.toString()));
-            String line = null;
-            StringBuffer val = new StringBuffer();
-            while ((line = in.readLine()) != null) {
-                if (val.length() != 0) {
-                    val.append(StringUtils.LINE_SEP);
-                }
-                val.append(line);
-            }
-            project.setNewProperty(outputprop, val.toString());
-        }
-    }
-
-    /**
-     * Run the command using the given Execute instance. This may be
-     * overidden by subclasses
-     */
-    protected void runExec(Execute exe) throws BuildException {
-        // show the command
-        log(cmdl.describeCommand(), Project.MSG_VERBOSE);
-
-        exe.setCommandline(cmdl.getCommandline());
-        try {
-            runExecute(exe);
-        } catch (IOException e) {
-            if (failIfExecFails) {
-                throw new BuildException("Execute failed: " + e.toString(), e,
-                                         location);
-            } else {
-                log("Execute failed: " + e.toString(), Project.MSG_ERR);
-            }
-        } finally {
-            // close the output file if required
-            logFlush();
-        }
-    }
-
-    /**
-     * Create the StreamHandler to use with our Execute instance.
-     */
-    protected ExecuteStreamHandler createHandler() throws BuildException {
-        if (out != null)  {
-            try {
-                fos = new FileOutputStream(out.getAbsolutePath(), append);
-                log("Output redirected to " + out, Project.MSG_VERBOSE);
-                return new PumpStreamHandler(fos);
-            } catch (FileNotFoundException fne) {
-                throw new BuildException("Cannot write to " + out, fne, 
-                                         location);
-            } catch (IOException ioe) {
-                throw new BuildException("Cannot write to " + out, ioe, 
-                                         location);
-            }
-        } else if (outputprop != null) {
-            baos = new ByteArrayOutputStream();
-            log("Output redirected to ByteArray", Project.MSG_VERBOSE);
-            return new PumpStreamHandler(baos);
-        } else {
-            return new LogStreamHandler(this,
-                                        Project.MSG_INFO, Project.MSG_WARN);
-        }
-    }
-
-    /**
-     * Create the Watchdog to kill a runaway process.
-     */
-    protected ExecuteWatchdog createWatchdog() throws BuildException {
-        if (timeout == null) {
-            return null;
-        }
-        return new ExecuteWatchdog(timeout.longValue());
-    }
-
-    /**
-     * Flush the output stream - if there is one.
-     */
-    protected void logFlush() {
-        try {
-            if (fos != null) {
-                fos.close();
-            }
-            if (baos != null) {
-                baos.close();
-            }
-        } catch (IOException io) {}
-    }
-
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/Execute.java b/src/main/org/apache/tools/ant/taskdefs/Execute.java
deleted file mode 100644
index 847d6bd..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Execute.java
+++ /dev/null
@@ -1,835 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.types.Commandline;
-import org.apache.tools.ant.taskdefs.condition.Os;
-
-import java.io.File;
-import java.io.IOException;
-
-import java.io.BufferedReader;
-import java.io.StringReader;
-import java.io.ByteArrayOutputStream;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.util.Vector;
-
-/**
- * Runs an external program.
- *
- * @author thomas.haas@softwired-inc.com
- * @author <a href="mailto:jtulley@novell.com">Jeff Tulley</a> 
- *
- * @since Ant 1.2
- *
- * @version $Revision$
- */
-public class Execute {
-
-    /** Invalid exit code. **/
-    public static final int INVALID = Integer.MAX_VALUE;
-
-    private String[] cmdl = null;
-    private String[] env = null;
-    private int exitValue = INVALID;
-    private ExecuteStreamHandler streamHandler;
-    private ExecuteWatchdog watchdog;
-    private File workingDirectory = null;
-    private Project project = null;
-    private boolean newEnvironment = false;
-
-    /** Controls whether the VM is used to launch commands, where possible */
-    private boolean useVMLauncher = true;
-
-    private static String antWorkingDirectory = System.getProperty("user.dir");
-    private static CommandLauncher vmLauncher = null;
-    private static CommandLauncher shellLauncher = null;
-    private static Vector procEnvironment = null;
-
-    /** Used to destroy processes when the VM exits. */
-    private static ProcessDestroyer processDestroyer = new ProcessDestroyer();
-
-    /**
-     * Builds a command launcher for the OS and JVM we are running under
-     */
-    static {
-        // Try using a JDK 1.3 launcher
-        try {
-            vmLauncher = new Java13CommandLauncher();
-        } catch (NoSuchMethodException exc) {
-            // Ignore and keep trying
-        }
-
-        if (Os.isFamily("mac")) {
-            // Mac
-            shellLauncher = new MacCommandLauncher(new CommandLauncher());
-        } else if (Os.isFamily("os/2")) {
-            // OS/2 - use same mechanism as Windows 2000
-            shellLauncher = new WinNTCommandLauncher(new CommandLauncher());
-        } else if (Os.isFamily("windows")) {
-            // Windows.  Need to determine which JDK we're running in
-
-            CommandLauncher baseLauncher;
-            if (System.getProperty("java.version").startsWith("1.1")) {
-                // JDK 1.1
-                baseLauncher = new Java11CommandLauncher();
-            } else {
-                // JDK 1.2
-                baseLauncher = new CommandLauncher();
-            }
-
-            if (!Os.isFamily("win9x")) {
-                // Windows XP/2000/NT
-                shellLauncher = new WinNTCommandLauncher(baseLauncher);
-            } else {
-                // Windows 98/95 - need to use an auxiliary script
-                shellLauncher 
-                    = new ScriptCommandLauncher("bin/antRun.bat", baseLauncher);
-            }
-        } else if (Os.isFamily("netware")) {
-            // NetWare.  Need to determine which JDK we're running in
-            CommandLauncher baseLauncher;
-            if (System.getProperty("java.version").startsWith("1.1")) {
-                // JDK 1.1
-                baseLauncher = new Java11CommandLauncher();
-            } else {
-                // JDK 1.2
-                baseLauncher = new CommandLauncher();
-            }
-
-            shellLauncher 
-                = new PerlScriptCommandLauncher("bin/antRun.pl", baseLauncher);
-        } else {
-            // Generic
-            shellLauncher = new ScriptCommandLauncher("bin/antRun", 
-                new CommandLauncher());
-        }
-    }
-
-    /**
-     * Find the list of environment variables for this process.
-     */
-    public static synchronized Vector getProcEnvironment() {
-        if (procEnvironment != null) {
-            return procEnvironment;
-        }
-
-        procEnvironment = new Vector();
-        try {
-            ByteArrayOutputStream out = new ByteArrayOutputStream();
-            Execute exe = new Execute(new PumpStreamHandler(out));
-            exe.setCommandline(getProcEnvCommand());
-            // Make sure we do not recurse forever
-            exe.setNewenvironment(true);
-            int retval = exe.execute();
-            if (retval != 0) {
-                // Just try to use what we got
-            }
-
-            BufferedReader in =
-                new BufferedReader(new StringReader(out.toString()));
-            String var = null;
-            String line, lineSep = System.getProperty("line.separator");
-            while ((line = in.readLine()) != null) {
-                if (line.indexOf('=') == -1) {
-                    // Chunk part of previous env var (UNIX env vars can
-                    // contain embedded new lines).
-                    if (var == null) {
-                        var = lineSep + line;
-                    } else {
-                        var += lineSep + line;
-                    }
-                } else {
-                    // New env var...append the previous one if we have it.
-                    if (var != null) {
-                        procEnvironment.addElement(var);
-                    }
-                    var = line;
-                }
-            }
-            // Since we "look ahead" before adding, there's one last env var.
-            if (var != null) {
-                procEnvironment.addElement(var);
-            }
-        } catch (java.io.IOException exc) {
-            exc.printStackTrace();
-            // Just try to see how much we got
-        }
-        return procEnvironment;
-    }
-
-    private static String[] getProcEnvCommand() {
-        if (Os.isFamily("os/2")) {
-            // OS/2 - use same mechanism as Windows 2000
-            // Not sure
-            String[] cmd = {"cmd", "/c", "set" };
-            return cmd;
-        } else if (Os.isFamily("windows")) {
-            // Determine if we're running under XP/2000/NT or 98/95
-            if (!Os.isFamily("win9x")) {
-                // Windows XP/2000/NT
-                String[] cmd = {"cmd", "/c", "set" };
-                return cmd;
-            } else {
-                // Windows 98/95
-                String[] cmd = {"command.com", "/c", "set" };
-                return cmd;
-            }
-        } else if (Os.isFamily("unix")) {
-            // Generic UNIX
-            // Alternatively one could use: /bin/sh -c env
-            String[] cmd = {"/usr/bin/env"};
-            return cmd;
-        } else if (Os.isFamily("netware")) {
-            String[] cmd = {"env"};
-            return cmd;
-        } else {
-            // MAC OS 9 and previous
-            // TODO: I have no idea how to get it, someone must fix it
-            String[] cmd = null;
-            return cmd;
-        }
-    }
-
-    /**
-     * Creates a new execute object using <code>PumpStreamHandler</code> for
-     * stream handling.
-     */
-    public Execute() {
-        this(new PumpStreamHandler(), null);
-    }
-
-
-    /**
-     * Creates a new execute object.
-     *
-     * @param streamHandler the stream handler used to handle the input and
-     *        output streams of the subprocess.
-     */
-    public Execute(ExecuteStreamHandler streamHandler) {
-        this(streamHandler, null);
-    }
-
-    /**
-     * Creates a new execute object.
-     *
-     * @param streamHandler the stream handler used to handle the input and
-     *        output streams of the subprocess.
-     * @param watchdog a watchdog for the subprocess or <code>null</code> to
-     *        to disable a timeout for the subprocess.
-     */
-    public Execute(ExecuteStreamHandler streamHandler, 
-                   ExecuteWatchdog watchdog) {
-        this.streamHandler = streamHandler;
-        this.watchdog = watchdog;
-    }
-
-
-    /**
-     * Returns the commandline used to create a subprocess.
-     *
-     * @return the commandline used to create a subprocess
-     */
-    public String[] getCommandline() {
-        return cmdl;
-    }
-
-
-    /**
-     * Sets the commandline of the subprocess to launch.
-     *
-     * @param commandline the commandline of the subprocess to launch
-     */
-    public void setCommandline(String[] commandline) {
-        cmdl = commandline;
-    }
-
-    /**
-     * Set whether to propagate the default environment or not.
-     *
-     * @param newenv whether to propagate the process environment.
-     */
-    public void setNewenvironment(boolean newenv) {
-        newEnvironment = newenv;
-    }
-
-    /**
-     * Returns the environment used to create a subprocess.
-     *
-     * @return the environment used to create a subprocess
-     */
-    public String[] getEnvironment() {
-        if (env == null || newEnvironment) {
-            return env;
-        }
-        return patchEnvironment();
-    }
-
-
-    /**
-     * Sets the environment variables for the subprocess to launch.
-     *
-     * @param commandline array of Strings, each element of which has
-     * an environment variable settings in format <em>key=value</em>
-     */
-    public void setEnvironment(String[] env) {
-        this.env = env;
-    }
-
-    /**
-     * Sets the working directory of the process to execute.
-     *
-     * <p>This is emulated using the antRun scripts unless the OS is
-     * Windows NT in which case a cmd.exe is spawned,
-     * or MRJ and setting user.dir works, or JDK 1.3 and there is
-     * official support in java.lang.Runtime.
-     *
-     * @param wd the working directory of the process.
-     */
-    public void setWorkingDirectory(File wd) {
-        if (wd == null || wd.getAbsolutePath().equals(antWorkingDirectory)) {
-            workingDirectory = null;
-        } else {
-            workingDirectory = wd;
-        }
-    }
-
-    /**
-     * Set the name of the antRun script using the project's value.
-     *
-     * @param project the current project.
-     */
-    public void setAntRun(Project project) throws BuildException {
-        this.project = project;
-    }
-
-    /**
-     * Launch this execution through the VM, where possible, rather than through
-     * the OS's shell. In some cases and operating systems using the shell will
-     * allow the shell to perform additional processing such as associating an
-     * executable with a script, etc
-     *
-     * @param vmLauncher true if exec should launch through thge VM,
-     *                   false if the shell should be used to launch the 
-     *                   command.
-     */
-    public void setVMLauncher(boolean useVMLauncher) {
-        this.useVMLauncher = useVMLauncher;
-    }
-
-    /**
-     * Creates a process that runs a command.
-     *
-     * @param project the Project, only used for logging purposes, may be null.
-     * @param command the command to run
-     * @param env the environment for the command
-     * @param the working directory for the command
-     * @param useVM use the built-in exec command for JDK 1.3 if available.
-     *
-     * @since Ant 1.5
-     */
-    public static Process launch(Project project, String[] command, 
-                                 String[] env, File dir, boolean useVM)
-        throws IOException {
-        CommandLauncher launcher 
-            = vmLauncher != null ? vmLauncher : shellLauncher;
-        if (!useVM) {
-            launcher = shellLauncher;
-        }
-
-        return launcher.exec(project, command, env, dir);
-    }
-
-    /**
-     * Runs a process defined by the command line and returns its exit status.
-     *
-     * @return the exit status of the subprocess or <code>INVALID</code>
-     * @exception java.io.IOExcpetion The exception is thrown, if launching
-     *            of the subprocess failed
-     */
-    public int execute() throws IOException {
-        final Process process = launch(project, getCommandline(), 
-                                       getEnvironment(), workingDirectory, 
-                                       useVMLauncher);
-
-        try {
-            streamHandler.setProcessInputStream(process.getOutputStream());
-            streamHandler.setProcessOutputStream(process.getInputStream());
-            streamHandler.setProcessErrorStream(process.getErrorStream());
-        } catch (IOException e) {
-            process.destroy();
-            throw e;
-        }
-        streamHandler.start();
-
-        // add the process to the list of those to destroy if the VM exits
-        //
-        processDestroyer.add(process);
-
-        if (watchdog != null) {
-            watchdog.start(process);
-        }
-        waitFor(process);
-
-        // remove the process to the list of those to destroy if the VM exits
-        //
-        processDestroyer.remove(process);
-
-        if (watchdog != null) {
-            watchdog.stop();
-        }
-        streamHandler.stop();
-        if (watchdog != null) {
-            watchdog.checkException();
-        }
-        return getExitValue();
-    }
-
-    protected void waitFor(Process process) {
-        try {
-            process.waitFor();
-            setExitValue(process.exitValue());
-        } catch (InterruptedException e) {}
-    }
-
-    protected void setExitValue(int value) {
-        exitValue = value;
-    }
-
-    /**
-     * query the exit value of the process.
-     * @return the exit value, 1 if the process was killed,
-     * or Project.INVALID if no exit value has been received
-     */
-    public int getExitValue() {
-        return exitValue;
-    }
-
-    /**
-     * test for an untimely death of the process
-     * @return true iff a watchdog had to kill the process
-     * @since Ant 1.5
-     */
-    public boolean killedProcess() {
-        return watchdog != null && watchdog.killedProcess();
-    }
-
-    /**
-     * Patch the current environment with the new values from the user.
-     * @return the patched environment
-     */
-    private String[] patchEnvironment() {
-        Vector osEnv = (Vector) getProcEnvironment().clone();
-        for (int i = 0; i < env.length; i++) {
-            int pos = env[i].indexOf('=');
-            // Get key including "="
-            String key = env[i].substring(0, pos + 1);
-            int size = osEnv.size();
-            for (int j = 0; j < size; j++) {
-                if (((String) osEnv.elementAt(j)).startsWith(key)) {
-                    osEnv.removeElementAt(j);
-                    break;
-                }
-            }
-            osEnv.addElement(env[i]);
-        }
-        String[] result = new String[osEnv.size()];
-        osEnv.copyInto(result);
-        return result;
-    }
-
-    /**
-     * A utility method that runs an external command.  Writes the output and
-     * error streams of the command to the project log.
-     *
-     * @param task      The task that the command is part of.  Used for logging
-     * @param cmdline   The command to execute.
-     *
-     * @throws BuildException if the command does not return 0.
-     */
-    public static void runCommand(Task task, String[] cmdline) 
-        throws BuildException {
-        try {
-            task.log(Commandline.describeCommand(cmdline), 
-                     Project.MSG_VERBOSE);
-            Execute exe = new Execute(new LogStreamHandler(task,
-                                                           Project.MSG_INFO,
-                                                           Project.MSG_ERR));
-            exe.setAntRun(task.getProject());
-            exe.setCommandline(cmdline);
-            int retval = exe.execute();
-            if (retval != 0) {
-                throw new BuildException(cmdline[0] 
-                    + " failed with return code " + retval, task.getLocation());
-            }
-        } catch (java.io.IOException exc) {
-            throw new BuildException("Could not launch " + cmdline[0] + ": " 
-                + exc, task.getLocation());
-        }
-    }
-
-    /**
-     * A command launcher for a particular JVM/OS platform.  This class is
-     * a general purpose command launcher which can only launch commands in
-     * the current working directory.
-     */
-    private static class CommandLauncher {
-        /**
-         * Launches the given command in a new process.
-         *
-         * @param project       The project that the command is part of
-         * @param cmd           The command to execute
-         * @param env           The environment for the new process.  If null,
-         *                      the environment of the current proccess is used.
-         */
-        public Process exec(Project project, String[] cmd, String[] env) 
-             throws IOException {
-            if (project != null) {
-                project.log("Execute:CommandLauncher: " +
-                            Commandline.describeCommand(cmd), 
-                            Project.MSG_DEBUG);
-            }
-            return Runtime.getRuntime().exec(cmd, env);
-        }
-
-        /**
-         * Launches the given command in a new process, in the given working
-         * directory.
-         *
-         * @param project       The project that the command is part of
-         * @param cmd           The command to execute
-         * @param env           The environment for the new process.  If null,
-         *                      the environment of the current proccess is used.
-         * @param workingDir    The directory to start the command in.  If null,
-         *                      the current directory is used
-         */
-        public Process exec(Project project, String[] cmd, String[] env, 
-                            File workingDir) throws IOException {
-            if (workingDir == null) {
-                return exec(project, cmd, env);
-            }
-            throw new IOException("Cannot execute a process in different " 
-                + "directory under this JVM");
-        }
-    }
-
-    /**
-     * A command launcher for JDK/JRE 1.1 under Windows.  Fixes quoting problems
-     * in Runtime.exec().  Can only launch commands in the current working
-     * directory
-     */
-    private static class Java11CommandLauncher extends CommandLauncher {
-        /**
-         * Launches the given command in a new process.  Needs to quote
-         * arguments
-         */
-        public Process exec(Project project, String[] cmd, String[] env) 
-             throws IOException {
-            // Need to quote arguments with spaces, and to escape 
-            // quote characters
-            String[] newcmd = new String[cmd.length];
-            for (int i = 0; i < cmd.length; i++) {
-                newcmd[i] = Commandline.quoteArgument(cmd[i]);
-            }
-            if (project != null) {
-                project.log("Execute:Java11CommandLauncher: " +
-                            Commandline.describeCommand(newcmd),
-                            Project.MSG_DEBUG);
-            }
-            return Runtime.getRuntime().exec(newcmd, env);
-        }
-    }
-
-    /**
-     * A command launcher for JDK/JRE 1.3 (and higher).  Uses the built-in
-     * Runtime.exec() command
-     */
-    private static class Java13CommandLauncher extends CommandLauncher {
-        public Java13CommandLauncher() throws NoSuchMethodException {
-            // Locate method Runtime.exec(String[] cmdarray, 
-            //                            String[] envp, File dir)
-            _execWithCWD = Runtime.class.getMethod("exec", 
-                new Class[] {String[].class, String[].class, File.class});
-        }
-
-        /**
-         * Launches the given command in a new process, in the given working
-         * directory
-         */
-        public Process exec(Project project, String[] cmd, String[] env, 
-                            File workingDir) throws IOException {
-            try {
-                if (project != null) {
-                    project.log("Execute:Java13CommandLauncher: " +
-                                Commandline.describeCommand(cmd),
-                                Project.MSG_DEBUG);
-                }
-                Object[] arguments = { cmd, env, workingDir };
-                return (Process) _execWithCWD.invoke(Runtime.getRuntime(), 
-                                                     arguments);
-            } catch (InvocationTargetException exc) {
-                Throwable realexc = exc.getTargetException();
-                if (realexc instanceof ThreadDeath) {
-                    throw (ThreadDeath) realexc;
-                } else if (realexc instanceof IOException) {
-                    throw (IOException) realexc;
-                } else {
-                    throw new BuildException("Unable to execute command", 
-                                             realexc);
-                }
-            } catch (Exception exc) {
-                // IllegalAccess, IllegalArgument, ClassCast
-                throw new BuildException("Unable to execute command", exc);
-            }
-        }
-
-        private Method _execWithCWD;
-    }
-
-    /**
-     * A command launcher that proxies another command launcher.
-     *
-     * Sub-classes override exec(args, env, workdir)
-     */
-    private static class CommandLauncherProxy extends CommandLauncher {
-        CommandLauncherProxy(CommandLauncher launcher) {
-            _launcher = launcher;
-        }
-
-        /**
-         * Launches the given command in a new process.  Delegates this
-         * method to the proxied launcher
-         */
-        public Process exec(Project project, String[] cmd, String[] env) 
-            throws IOException {
-            return _launcher.exec(project, cmd, env);
-        }
-
-        private CommandLauncher _launcher;
-    }
-
-    /**
-     * A command launcher for Windows XP/2000/NT that uses 'cmd.exe' when
-     * launching commands in directories other than the current working
-     * directory.
-     */
-    private static class WinNTCommandLauncher extends CommandLauncherProxy {
-        WinNTCommandLauncher(CommandLauncher launcher) {
-            super(launcher);
-        }
-
-        /**
-         * Launches the given command in a new process, in the given working
-         * directory.
-         */
-        public Process exec(Project project, String[] cmd, String[] env, 
-                            File workingDir) throws IOException {
-            File commandDir = workingDir;
-            if (workingDir == null) {
-                if (project != null) {
-                    commandDir = project.getBaseDir();
-                } else {
-                    return exec(project, cmd, env);
-                }
-            }
-
-            // Use cmd.exe to change to the specified directory before running
-            // the command
-            final int preCmdLength = 6;
-            String[] newcmd = new String[cmd.length + preCmdLength];
-            newcmd[0] = "cmd";
-            newcmd[1] = "/c";
-            newcmd[2] = "cd";
-            newcmd[3] = "/d";
-            newcmd[4] = commandDir.getAbsolutePath();
-            newcmd[5] = "&&";
-            System.arraycopy(cmd, 0, newcmd, preCmdLength, cmd.length);
-
-            return exec(project, newcmd, env);
-        }
-    }
-
-    /**
-     * A command launcher for Mac that uses a dodgy mechanism to change
-     * working directory before launching commands.
-     */
-    private static class MacCommandLauncher extends CommandLauncherProxy {
-        MacCommandLauncher(CommandLauncher launcher) {
-            super(launcher);
-        }
-
-        /**
-         * Launches the given command in a new process, in the given working
-         * directory
-         */
-        public Process exec(Project project, String[] cmd, String[] env, 
-                            File workingDir) throws IOException {
-            if (workingDir == null) {
-                return exec(project, cmd, env);
-            }
-
-            System.getProperties().put("user.dir", workingDir.getAbsolutePath());
-            try {
-                return exec(project, cmd, env);
-            } finally {
-                System.getProperties().put("user.dir", antWorkingDirectory);
-            }
-        }
-    }
-
-    /**
-     * A command launcher that uses an auxiliary script to launch commands
-     * in directories other than the current working directory.
-     */
-    private static class ScriptCommandLauncher extends CommandLauncherProxy {
-        ScriptCommandLauncher(String script, CommandLauncher launcher) {
-            super(launcher);
-            _script = script;
-        }
-
-        /**
-         * Launches the given command in a new process, in the given working
-         * directory
-         */
-        public Process exec(Project project, String[] cmd, String[] env, 
-                            File workingDir) throws IOException {
-            if (project == null) {
-                if (workingDir == null) {
-                    return exec(project, cmd, env);
-                }
-                throw new IOException("Cannot locate antRun script: " 
-                    + "No project provided");
-            }
-
-            // Locate the auxiliary script
-            String antHome = project.getProperty("ant.home");
-            if (antHome == null) {
-                throw new IOException("Cannot locate antRun script: " 
-                    + "Property 'ant.home' not found");
-            }
-            String antRun = project.resolveFile(antHome + File.separator + _script).toString();
-
-            // Build the command
-            File commandDir = workingDir;
-            if (workingDir == null && project != null) {
-                commandDir = project.getBaseDir();
-            }
-
-            String[] newcmd = new String[cmd.length + 2];
-            newcmd[0] = antRun;
-            newcmd[1] = commandDir.getAbsolutePath();
-            System.arraycopy(cmd, 0, newcmd, 2, cmd.length);
-
-            return exec(project, newcmd, env);
-        }
-
-        private String _script;
-    }
-
-    /**
-     * A command launcher that uses an auxiliary perl script to launch commands
-     * in directories other than the current working directory.
-     */
-    private static class PerlScriptCommandLauncher 
-        extends CommandLauncherProxy {
-        PerlScriptCommandLauncher(String script, CommandLauncher launcher) {
-            super(launcher);
-            _script = script;
-        }
-
-        /**
-         * Launches the given command in a new process, in the given working
-         * directory
-         */
-        public Process exec(Project project, String[] cmd, String[] env, 
-                            File workingDir) throws IOException {
-            if (project == null) {
-                if (workingDir == null) {
-                    return exec(project, cmd, env);
-                }
-                throw new IOException("Cannot locate antRun script: " 
-                    + "No project provided");
-            }
-
-            // Locate the auxiliary script
-            String antHome = project.getProperty("ant.home");
-            if (antHome == null) {
-                throw new IOException("Cannot locate antRun script: " 
-                    + "Property 'ant.home' not found");
-            }
-            String antRun = project.resolveFile(antHome + File.separator + _script).toString();
-
-            // Build the command
-            File commandDir = workingDir;
-            if (workingDir == null && project != null) {
-                commandDir = project.getBaseDir();
-            }
-
-            String[] newcmd = new String[cmd.length + 3];
-            newcmd[0] = "perl";
-            newcmd[1] = antRun;
-            newcmd[2] = commandDir.getAbsolutePath();
-            System.arraycopy(cmd, 0, newcmd, 3, cmd.length);
-
-            return exec(project, newcmd, env);
-        }
-
-        private String _script;
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/ExecuteJava.java b/src/main/org/apache/tools/ant/taskdefs/ExecuteJava.java
deleted file mode 100644
index 6be3ba0..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/ExecuteJava.java
+++ /dev/null
@@ -1,240 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.AntClassLoader;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.types.Commandline;
-import org.apache.tools.ant.types.CommandlineJava;
-import org.apache.tools.ant.types.Path;
-import org.apache.tools.ant.util.TimeoutObserver;
-import org.apache.tools.ant.util.Watchdog;
-
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.io.PrintStream;
-
-/**
- *
- * @author thomas.haas@softwired-inc.com
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- * @since Ant 1.2
- */
-public class ExecuteJava implements Runnable, TimeoutObserver {
-
-    private Commandline javaCommand = null;
-    private Path classpath = null;
-    private CommandlineJava.SysProperties sysProperties = null;
-    private Method main = null;
-    private Long timeout = null;
-    private Throwable caught = null;
-    private boolean timedOut = false;
-    private Thread thread = null;
-
-    public void setJavaCommand(Commandline javaCommand) {
-        this.javaCommand = javaCommand;
-    }
-
-    /**
-     * Set the classpath to be used when running the Java class
-     * 
-     * @param p an Ant Path object containing the classpath.
-     */
-    public void setClasspath(Path p) {
-        classpath = p;
-    }
-
-    public void setSystemProperties(CommandlineJava.SysProperties s) {
-        sysProperties = s;
-    }
-
-    /**
-     * All output (System.out as well as System.err) will be written
-     * to this Stream.
-     *
-     * @deprecated manage output at the task level
-     */
-    public void setOutput(PrintStream out) {
-    }
-
-    /**
-     * @since 1.19, Ant 1.5
-     */
-    public void setTimeout(Long timeout) {
-        this.timeout = timeout;
-    }
-
-    public void execute(Project project) throws BuildException{
-        final String classname = javaCommand.getExecutable();
-
-        AntClassLoader loader = null; 
-        try {
-            if (sysProperties != null) {
-                sysProperties.setSystem();
-            }
-
-            final Class[] param = { Class.forName("[Ljava.lang.String;") };
-            Class target = null;
-            if (classpath == null) {
-                target = Class.forName(classname);
-            } else {
-                loader = new AntClassLoader(project.getCoreLoader(), project, 
-                                            classpath, false);
-                loader.setIsolated(true);
-                loader.setThreadContextLoader();
-                target = loader.forceLoadClass(classname);
-                AntClassLoader.initializeClass(target);
-            }
-            main = target.getMethod("main", param);
-            if (main == null) {
-                throw new BuildException("Could not find main() method in " 
-                                         + classname);
-            }
-
-            if (timeout == null) {
-                run();
-            } else {
-                thread = new Thread(this, "ExecuteJava");
-                Task currentThreadTask 
-                    = project.getThreadTask(Thread.currentThread());
-                project.registerThreadTask(thread, currentThreadTask);
-                // if we run into a timout, the run-away thread shall not
-                // make the VM run forever - if no timeout occurs, Ant's
-                // main thread will still be there to let the new thread
-                // finish
-                thread.setDaemon(true);
-                Watchdog w = new Watchdog(timeout.longValue());
-                w.addTimeoutObserver(this);
-                synchronized (this) {
-                    thread.start();
-                    w.start();
-                    try {
-                        wait();
-                    } catch (InterruptedException e) {}
-                    if (timedOut) {
-                        project.log("Timeout: sub-process interrupted",
-                                    Project.MSG_WARN); 
-                    } else {
-                        thread = null;
-                        w.stop();
-                    }
-                }
-            }
-
-            if (caught != null) {
-                throw caught;
-            }
-
-        } catch (ClassNotFoundException e) {
-            throw new BuildException("Could not find " + classname + "."
-                                     + " Make sure you have it in your"
-                                     + " classpath");
-        } catch (SecurityException e) {
-            throw e;
-        } catch (Throwable e) {
-            throw new BuildException(e);
-        } finally {
-            if (loader != null) {
-                loader.resetThreadContextLoader();
-                loader.cleanup();
-            }
-            if (sysProperties != null) {
-                sysProperties.restoreSystem();
-            }
-        }
-    }
-
-    /**
-     * @since 1.19, Ant 1.5
-     */
-    public void run() {
-        final Object[] argument = { javaCommand.getArguments() };
-        try {
-            main.invoke(null, argument);
-        } catch (InvocationTargetException e) {
-            Throwable t = e.getTargetException();
-            if (!(t instanceof InterruptedException)) {
-                caught = t;
-            } /* else { swallow, probably due to timeout } */
-        } catch (Throwable t) {
-            caught = t;
-        } finally {
-            synchronized (this) {
-                notifyAll();
-            }
-        }
-    }
-
-    /**
-     * @since 1.19, Ant 1.5
-     */
-    public synchronized void timeoutOccured(Watchdog w) {
-        if (thread != null) {
-            timedOut = true;
-            thread.interrupt();
-        }
-        notifyAll();
-    }
-
-    /**
-     * @since 1.19, Ant 1.5
-     */
-    public boolean killedProcess() {
-        return timedOut;
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/ExecuteOn.java b/src/main/org/apache/tools/ant/taskdefs/ExecuteOn.java
deleted file mode 100644
index 98dfea1..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/ExecuteOn.java
+++ /dev/null
@@ -1,429 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights 
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.DirectoryScanner;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.types.FileSet;
-import org.apache.tools.ant.types.Commandline;
-import org.apache.tools.ant.types.Mapper;
-import org.apache.tools.ant.types.EnumeratedAttribute;
-import org.apache.tools.ant.util.FileNameMapper;
-import org.apache.tools.ant.util.SourceFileScanner;
-
-import java.util.Hashtable;
-import java.util.Vector;
-import java.io.File;
-import java.io.IOException;
-
-/**
- * Executes a given command, supplying a set of files as arguments. 
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> 
- * @author <a href="mailto:mariusz@rakiura.org">Mariusz Nowostawski</a>
- *
- * @since Ant 1.2
- *
- * @ant.task category="control" name="execon" name="apply"
- */
-public class ExecuteOn extends ExecTask {
-
-    protected Vector filesets = new Vector();
-    private boolean relative = false;
-    private boolean parallel = false;
-    protected String type = "file";
-    protected Commandline.Marker srcFilePos = null;
-    private boolean skipEmpty = false;
-    protected Commandline.Marker targetFilePos = null;
-    protected Mapper mapperElement = null;
-    protected FileNameMapper mapper = null;
-    protected File destDir = null;
-
-    /**
-     * Has &lt;srcfile&gt; been specified before &lt;targetfile&gt;
-     */
-    protected boolean srcIsFirst = true;
-
-    /**
-     * Adds a set of files (nested fileset attribute).
-     */
-    public void addFileset(FileSet set) {
-        filesets.addElement(set);
-    }
-
-    /**
-     * Should filenames be returned as relative path names?
-     */
-    public void setRelative(boolean relative) {
-        this.relative = relative;
-    }
-
-
-    /**
-     * Shall the command work on all specified files in parallel?
-     */
-    public void setParallel(boolean parallel) {
-        this.parallel = parallel;
-    }
-
-    /**
-     * Shall the command work only on files, directories or both?
-     */
-    public void setType(FileDirBoth type) {
-        this.type = type.getValue();
-    }
-
-    /**
-     * Should empty filesets be ignored?
-     */
-    public void setSkipEmptyFilesets(boolean skip) {
-        skipEmpty = skip;
-    }
-
-    /**
-     * Set the destination directory.
-     */
-    public void setDest(File destDir) {
-        this.destDir = destDir;
-    }
-
-    /**
-     * Marker that indicates where the name of the source file should
-     * be put on the command line.
-     */
-    public Commandline.Marker createSrcfile() {
-        if (srcFilePos != null) {
-            throw new BuildException(taskType + " doesn\'t support multiple "
-                                     + "srcfile elements.", location);
-        }
-        srcFilePos = cmdl.createMarker();
-        return srcFilePos;
-    }
-
-    /**
-     * Marker that indicates where the name of the target file should
-     * be put on the command line.
-     */
-    public Commandline.Marker createTargetfile() {
-        if (targetFilePos != null) {
-            throw new BuildException(taskType + " doesn\'t support multiple "
-                                     + "targetfile elements.", location);
-        }
-        targetFilePos = cmdl.createMarker();
-        srcIsFirst = (srcFilePos != null);
-        return targetFilePos;
-    }
-
-    /**
-     * Defines the FileNameMapper to use (nested mapper element).
-     */
-    public Mapper createMapper() throws BuildException {
-        if (mapperElement != null) {
-            throw new BuildException("Cannot define more than one mapper",
-                                     location);
-        }
-        mapperElement = new Mapper(project);
-        return mapperElement;
-    }
-
-    protected void checkConfiguration() {
-        if ("execon".equals(taskName)) {
-            log("!! execon is deprecated. Use apply instead. !!");
-        }
-        
-        super.checkConfiguration();
-        if (filesets.size() == 0) {
-            throw new BuildException("no filesets specified", location);
-        }
-
-        if (targetFilePos != null || mapperElement != null 
-            || destDir != null) {
-
-            if (mapperElement == null) {
-                throw new BuildException("no mapper specified", location);
-            }
-            if (destDir == null) {
-                throw new BuildException("no dest attribute specified", 
-                                         location);
-            }
-            mapper = mapperElement.getImplementation();
-        }
-    }
-
-    protected void runExec(Execute exe) throws BuildException {
-        try {
-
-            Vector fileNames = new Vector();
-            Vector baseDirs = new Vector();
-            for (int i = 0; i < filesets.size(); i++) {
-                FileSet fs = (FileSet) filesets.elementAt(i);
-                File base = fs.getDir(project);
-                DirectoryScanner ds = fs.getDirectoryScanner(project);
-
-                if (!"dir".equals(type)) {
-                    String[] s = getFiles(base, ds);
-                    for (int j = 0; j < s.length; j++) {
-                        fileNames.addElement(s[j]);
-                        baseDirs.addElement(base);
-                    }
-                }
-
-                if (!"file".equals(type)) {
-                    String[] s = getDirs(base, ds);;
-                    for (int j = 0; j < s.length; j++) {
-                        fileNames.addElement(s[j]);
-                        baseDirs.addElement(base);
-                    }
-                }
-
-                if (fileNames.size() == 0 && skipEmpty) {
-                    log("Skipping fileset for directory "
-                        + base + ". It is empty.", Project.MSG_INFO);
-                    continue;
-                }
-
-                if (!parallel) {
-                    String[] s = new String[fileNames.size()];
-                    fileNames.copyInto(s);
-                    for (int j = 0; j < s.length; j++) {
-                        String[] command = getCommandline(s[j], base);
-                        log(Commandline.describeCommand(command), 
-                            Project.MSG_VERBOSE);
-                        exe.setCommandline(command);
-                        runExecute(exe);
-                    }
-                    fileNames.removeAllElements();
-                    baseDirs.removeAllElements();
-                }
-            }
-
-            if (parallel && (fileNames.size() > 0 || !skipEmpty)) {
-                String[] s = new String[fileNames.size()];
-                fileNames.copyInto(s);
-                File[] b = new File[baseDirs.size()];
-                baseDirs.copyInto(b);
-                String[] command = getCommandline(s, b);
-                log(Commandline.describeCommand(command), Project.MSG_VERBOSE);
-                exe.setCommandline(command);
-                runExecute(exe);
-            }
-
-        } catch (IOException e) {
-            throw new BuildException("Execute failed: " + e, e, location);
-        } finally {
-            // close the output file if required
-            logFlush();
-        }
-    }
-
-    /**
-     * Construct the command line for parallel execution.
-     *
-     * @param srcFiles The filenames to add to the commandline
-     * @param baseDir filenames are relative to this dir
-     */
-    protected String[] getCommandline(String[] srcFiles, File[] baseDirs) {
-        Vector targets = new Vector();
-        if (targetFilePos != null) {
-            Hashtable addedFiles = new Hashtable();
-            for (int i = 0; i < srcFiles.length; i++) {
-                String[] subTargets = mapper.mapFileName(srcFiles[i]);
-                if (subTargets != null) {
-                    for (int j = 0; j < subTargets.length; j++) {
-                        String name = null;
-                        if (!relative) {
-                            name = (new File(destDir, subTargets[j])).getAbsolutePath();
-                        } else {
-                            name = subTargets[j];
-                        }
-                        if (!addedFiles.contains(name)) {
-                            targets.addElement(name);
-                            addedFiles.put(name, name);
-                        }
-                    }
-                }
-            }
-        }
-        String[] targetFiles = new String[targets.size()];
-        targets.copyInto(targetFiles);
-        
-        String[] orig = cmdl.getCommandline();
-        String[] result 
-            = new String[orig.length + srcFiles.length + targetFiles.length];
-
-        int srcIndex = orig.length;
-        if (srcFilePos != null) {
-            srcIndex = srcFilePos.getPosition();
-        }
-
-        if (targetFilePos != null) {
-            int targetIndex = targetFilePos.getPosition();
-
-            if (srcIndex < targetIndex 
-                || (srcIndex == targetIndex && srcIsFirst)) {
-
-                // 0 --> srcIndex
-                System.arraycopy(orig, 0, result, 0, srcIndex);
-                
-                // srcIndex --> targetIndex
-                System.arraycopy(orig, srcIndex, result, 
-                                 srcIndex + srcFiles.length,
-                                 targetIndex - srcIndex);
-                
-                // targets are already absolute file names
-                System.arraycopy(targetFiles, 0, result, 
-                                 targetIndex + srcFiles.length, 
-                                 targetFiles.length);
-                
-                // targetIndex --> end
-                System.arraycopy(orig, targetIndex, result, 
-                    targetIndex + srcFiles.length + targetFiles.length,
-                    orig.length - targetIndex);
-            } else {
-                // 0 --> targetIndex
-                System.arraycopy(orig, 0, result, 0, targetIndex);
-                
-                // targets are already absolute file names
-                System.arraycopy(targetFiles, 0, result, 
-                                 targetIndex,
-                                 targetFiles.length);
-                
-                // targetIndex --> srcIndex
-                System.arraycopy(orig, targetIndex, result, 
-                                 targetIndex + targetFiles.length,
-                                 srcIndex - targetIndex);
-                
-                // srcIndex --> end
-                System.arraycopy(orig, srcIndex, result, 
-                    srcIndex + srcFiles.length + targetFiles.length,
-                    orig.length - srcIndex);
-                srcIndex += targetFiles.length;
-            }
-
-        } else { // no targetFilePos
-
-            // 0 --> srcIndex
-            System.arraycopy(orig, 0, result, 0, srcIndex);
-            // srcIndex --> end
-            System.arraycopy(orig, srcIndex, result, 
-                             srcIndex + srcFiles.length,
-                             orig.length - srcIndex);
-
-        }
-
-        // fill in source file names
-        for (int i = 0; i < srcFiles.length; i++) {
-            if (!relative) {
-                result[srcIndex + i] = 
-                    (new File(baseDirs[i], srcFiles[i])).getAbsolutePath();
-            } else {
-                result[srcIndex + i] = srcFiles[i];
-            }
-        }
-        return result;
-    }
-
-    /**
-     * Construct the command line for serial execution.
-     *
-     * @param srcFile The filename to add to the commandline
-     * @param baseDir filename is relative to this dir
-     */
-    protected String[] getCommandline(String srcFile, File baseDir) {
-        return getCommandline(new String[] {srcFile}, new File[] {baseDir});
-    }
-
-    /**
-     * Return the list of files from this DirectoryScanner that should
-     * be included on the command line.
-     */
-    protected String[] getFiles(File baseDir, DirectoryScanner ds) {
-        if (mapper != null) {
-            SourceFileScanner sfs = new SourceFileScanner(this);
-            return sfs.restrict(ds.getIncludedFiles(), baseDir, destDir, 
-                                mapper);
-        } else {
-            return ds.getIncludedFiles();
-        }
-    }
-
-    /**
-     * Return the list of Directories from this DirectoryScanner that
-     * should be included on the command line.
-     */
-    protected String[] getDirs(File baseDir, DirectoryScanner ds) {
-        if (mapper != null) {
-            SourceFileScanner sfs = new SourceFileScanner(this);
-            return sfs.restrict(ds.getIncludedDirectories(), baseDir, destDir, 
-                                mapper);
-        } else {
-            return ds.getIncludedDirectories();
-        }
-    }
-
-    /**
-     * Enumerated attribute with the values "file", "dir" and "both"
-     * for the type attribute.  
-     */
-    public static class FileDirBoth extends EnumeratedAttribute {
-        /**
-         * @see EnumeratedAttribute#getValues
-         */
-        public String[] getValues() {
-            return new String[] {"file", "dir", "both"};
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/ExecuteStreamHandler.java b/src/main/org/apache/tools/ant/taskdefs/ExecuteStreamHandler.java
deleted file mode 100644
index 55af623..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/ExecuteStreamHandler.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000,2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import java.io.InputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-
-/**
- * Used by <code>Execute</code> to handle input and output stream of
- * subprocesses.
- *
- * @author thomas.haas@softwired-inc.com
- * @since Ant 1.2
- */
-public interface ExecuteStreamHandler {
-
-    /**
-     * Install a handler for the input stream of the subprocess.
-     *
-     * @param os output stream to write to the standard input stream of the
-     *           subprocess
-     */
-    void setProcessInputStream(OutputStream os) throws IOException;
-
-    /**
-     * Install a handler for the error stream of the subprocess.
-     *
-     * @param is input stream to read from the error stream from the subprocess
-     */
-    void setProcessErrorStream(InputStream is) throws IOException;
-
-    /**
-     * Install a handler for the output stream of the subprocess.
-     *
-     * @param is input stream to read from the error stream from the subprocess
-     */
-    void setProcessOutputStream(InputStream is) throws IOException;
-
-    /**
-     * Start handling of the streams.
-     */
-    void start() throws IOException;
-
-    /**
-     * Stop handling of the streams - will not be restarted.
-     */
-    void stop();
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/ExecuteWatchdog.java b/src/main/org/apache/tools/ant/taskdefs/ExecuteWatchdog.java
deleted file mode 100644
index f6c81db..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/ExecuteWatchdog.java
+++ /dev/null
@@ -1,203 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.util.TimeoutObserver;
-import org.apache.tools.ant.util.Watchdog;
-
-/**
- * Destroys a process running for too long.
- * For example:
- * <pre>
- * ExecuteWatchdog watchdog = new ExecuteWatchdog(30000);
- * Execute exec = new Execute(myloghandler, watchdog);
- * exec.setCommandLine(mycmdline);
- * int exitvalue = exec.execute();
- * if (exitvalue != SUCCESS && watchdog.killedProcess()){
- *              // it was killed on purpose by the watchdog
- * }
- * </pre>
- 
- * @author thomas.haas@softwired-inc.com
- * @author <a href="mailto:sbailliez@imediation.com">Stephane Bailliez</a>
- * @see Execute
- * @see org.apache.tools.ant.util.Watchdog
- * @since Ant 1.2
- */
-public class ExecuteWatchdog implements TimeoutObserver {
-        
-    /** the process to execute and watch for duration */
-    private Process process;
-
-    /** say whether or not the watchog is currently monitoring a process */
-    private boolean watch = false;
-        
-    /** exception that might be thrown during the process execution */
-    private Exception caught = null;
-
-    /** say whether or not the process was killed due to running overtime */
-    private boolean     killedProcess = false;
-
-    /** will tell us whether timeout has occured */
-    private Watchdog watchdog;
-
-    /**
-     * Creates a new watchdog with a given timeout.
-     *
-     * @param timeout the timeout for the process in milliseconds. 
-     * It must be greather than 0.
-     */
-    public ExecuteWatchdog(long timeout) {
-        watchdog = new Watchdog(timeout);
-        watchdog.addTimeoutObserver(this);
-    }
-
-    /**
-     * Watches the given process and terminates it, if it runs for too long.
-     * All information from the previous run are reset.
-     * @param process the process to monitor. It cannot be <tt>null</tt>
-     * @throws IllegalStateException if a process is still being monitored.
-     */
-    public synchronized void start(Process process) {
-        if (process == null) {
-            throw new NullPointerException("process is null.");
-        }
-        if (this.process != null) {
-            throw new IllegalStateException("Already running.");
-        }
-        this.caught = null;
-        this.killedProcess = false;
-        this.watch = true;
-        this.process = process;
-        watchdog.start();
-    }
-
-    /**
-     * Stops the watcher. It will notify all threads possibly waiting 
-     * on this object.
-     */
-    public synchronized void stop() {
-        watchdog.stop();
-        watch = false;
-        process = null;
-    }
-
-    /**
-     * Called after watchdog has finished.
-     */
-    public void timeoutOccured(Watchdog w) {
-        try {
-            try {
-                // We must check if the process was not stopped
-                // before being here
-                process.exitValue();
-            } catch (IllegalThreadStateException itse){
-                // the process is not terminated, if this is really
-                // a timeout and not a manual stop then kill it.
-                if (watch){
-                    killedProcess = true;
-                    process.destroy();
-                }
-            }
-        } catch (Exception e) {
-            caught = e;
-        } finally {
-            cleanUp();
-        }
-    }
-
-    /**
-     * reset the monitor flag and the process.
-     */
-    protected void cleanUp() {
-        watch = false;
-        process = null;
-    }
-
-    /**
-     * This method will rethrow the exception that was possibly caught during 
-     * the run of the process. It will only remains valid once the process has 
-     * been terminated either by 'error', timeout or manual intervention. 
-     * Information will be discarded once a new process is ran.
-     * @throws  BuildException  a wrapped exception over the one that was 
-     * silently swallowed and stored during the process run.
-     */
-    public void checkException() throws BuildException {
-        if (caught != null) {
-            throw new BuildException("Exception in ExecuteWatchdog.run: "
-                                     + caught.getMessage(), caught);
-        }
-    }
-
-    /**
-     * Indicates whether or not the watchdog is still monitoring the process.
-     * @return  <tt>true</tt> if the process is still running, otherwise 
-     *          <tt>false</tt>.
-     */
-    public boolean isWatching(){
-        return watch;
-    }
-
-    /**
-     * Indicates whether the last process run was killed on timeout or not.
-     * @return  <tt>true</tt> if the process was killed otherwise 
-     *          <tt>false</tt>.
-     */
-    public boolean killedProcess(){
-        return killedProcess;
-    }
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/Exit.java b/src/main/org/apache/tools/ant/taskdefs/Exit.java
deleted file mode 100644
index dfaab43..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Exit.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights 
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.BuildException;
-
-
-/**
- * Just exit the active build, giving an additional message 
- * if available.
- *
- * @author <a href="mailto:nico@seessle.de">Nico Seessle</a>
- *
- * @since Ant 1.2
- *
- * @ant.task name="fail" category="control"
- */
-public class Exit extends Task { 
-    private String message;
-    private String ifCondition, unlessCondition;
-    
-    public void setMessage(String value) { 
-        this.message = value;
-    }
-    
-    public void setIf(String c) {
-        ifCondition = c;
-    }
-
-    public void setUnless(String c) {
-        unlessCondition = c;
-    }
-
-    public void execute() throws BuildException {
-        if (testIfCondition() && testUnlessCondition()) {
-            if (message != null && message.length() > 0) { 
-                throw new BuildException(message);
-            } else {
-                throw new BuildException("No message");
-            }
-        }
-    }
-
-    /**
-     * Set a multiline message.
-     */
-    public void addText(String msg) {
-        if (message == null) {
-            message = "";
-        }
-        message += project.replaceProperties(msg);
-    }
-
-    private boolean testIfCondition() {
-        if (ifCondition == null || "".equals(ifCondition)) {
-            return true;
-        }
-        
-        return project.getProperty(ifCondition) != null;
-    }
-
-    private boolean testUnlessCondition() {
-        if (unlessCondition == null || "".equals(unlessCondition)) {
-            return true;
-        }
-        return project.getProperty(unlessCondition) == null;
-    }
-
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/Expand.java b/src/main/org/apache/tools/ant/taskdefs/Expand.java
deleted file mode 100644
index a4b8405..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Expand.java
+++ /dev/null
@@ -1,301 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.DirectoryScanner;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.types.FileSet;
-import org.apache.tools.ant.types.PatternSet;
-import org.apache.tools.ant.util.FileUtils;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.FileNotFoundException;
-import java.io.InputStream;
-import java.io.IOException;
-import java.util.Date;
-import java.util.Vector;
-import java.util.zip.ZipInputStream;
-import java.util.zip.ZipEntry;
-
-/**
- * Unzip a file.
- *
- * @author costin@dnt.ro
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- * @author <a href="mailto:umagesh@apache.org">Magesh Umasankar</a>
- *
- * @since Ant 1.1
- *
- * @ant.task category="packaging"
- *           name="unzip"
- *           name="unjar"
- *           name="unwar"
- */
-public class Expand extends MatchingTask {
-    private File dest; //req
-    private File source; // req
-    private boolean overwrite = true;
-    private Vector patternsets = new Vector();
-    private Vector filesets = new Vector();
-
-    /**
-     * Do the work.
-     *
-     * @exception BuildException Thrown in unrecoverable error.
-     */
-    public void execute() throws BuildException {
-        if ("expand".equals(taskType)) {
-            log("!! expand is deprecated. Use unzip instead. !!");
-        }
-
-        if (source == null && filesets.size() == 0) {
-            throw new BuildException("src attribute and/or filesets must be "
-                                     + "specified");
-        }
-
-        if (dest == null) {
-            throw new BuildException(
-                "Dest attribute must be specified");
-        }
-
-        if (dest.exists() && !dest.isDirectory()) {
-            throw new BuildException("Dest must be a directory.", location);
-        }
-
-        FileUtils fileUtils = FileUtils.newFileUtils();
-
-        if (source != null) {
-            if (source.isDirectory()) {
-                throw new BuildException("Src must not be a directory." +
-                    " Use nested filesets instead.", location);
-            } else {
-                expandFile(fileUtils, source, dest);
-            }
-        }
-        if (filesets.size() > 0) {
-            for (int j = 0; j < filesets.size(); j++) {
-                FileSet fs = (FileSet) filesets.elementAt(j);
-                DirectoryScanner ds = fs.getDirectoryScanner(project);
-                File fromDir = fs.getDir(project);
-
-                String[] files = ds.getIncludedFiles();
-                for (int i = 0; i < files.length; ++i) {
-                    File file = new File(fromDir, files[i]);
-                    expandFile(fileUtils, file, dest);
-                }
-            }
-        }
-    }
-
-    /*
-     * This method is to be overridden by extending unarchival tasks.
-     */
-    protected void expandFile(FileUtils fileUtils, File srcF, File dir) {
-        log("Expanding: " + srcF + " into " + dir, Project.MSG_INFO);        
-        ZipInputStream zis = null;
-        try {
-            // code from WarExpand
-            zis = new ZipInputStream(new FileInputStream(srcF));
-            ZipEntry ze = null;
-
-            while ((ze = zis.getNextEntry()) != null) {
-                extractFile(fileUtils, srcF, dir, zis,
-                            ze.getName(), new Date(ze.getTime()),
-                            ze.isDirectory());
-            }
-
-            log("expand complete", Project.MSG_VERBOSE);
-        } catch (IOException ioe) {
-            throw new BuildException("Error while expanding " + srcF.getPath(),
-                                     ioe);
-        } finally {
-            if (zis != null) {
-                try {
-                    zis.close();
-                } catch (IOException e) {}
-            }
-        }
-    }
-
-    protected void extractFile(FileUtils fileUtils, File srcF, File dir,
-                               InputStream compressedInputStream,
-                               String entryName,
-                               Date entryDate, boolean isDirectory)
-                               throws IOException {
-
-        if (patternsets != null && patternsets.size() > 0) {
-            String name = entryName;
-            boolean included = false;
-            for (int v = 0; v < patternsets.size(); v++) {
-                PatternSet p = (PatternSet) patternsets.elementAt(v);
-                String[] incls = p.getIncludePatterns(project);
-                if (incls != null) {
-                    for (int w = 0; w < incls.length; w++) {
-                        boolean isIncl = 
-                            DirectoryScanner.match(incls[w], name);
-                        if (isIncl) {
-                            included = true;
-                            break;
-                        }
-                    }
-                }
-                String[] excls = p.getExcludePatterns(project);
-                if (excls != null) {
-                    for (int w = 0; w < excls.length; w++) {
-                        boolean isExcl = 
-                            DirectoryScanner.match(excls[w], name);
-                        if (isExcl) {
-                            included = false;
-                            break;
-                        }
-                    }
-                }
-            }
-            if (!included) {
-                //Do not process this file
-                return;
-            }
-        }
-
-        File f = fileUtils.resolveFile(dir, entryName);
-        try {
-            if (!overwrite && f.exists()
-                && f.lastModified() >= entryDate.getTime()) {
-                log("Skipping " + f + " as it is up-to-date",
-                    Project.MSG_DEBUG);
-                return;
-            }
-
-            log("expanding " + entryName + " to " + f,
-                Project.MSG_VERBOSE);
-            // create intermediary directories - sometimes zip don't add them
-            File dirF = fileUtils.getParentFile(f);
-            dirF.mkdirs();
-
-            if (isDirectory) {
-                f.mkdirs();
-            } else {
-                byte[] buffer = new byte[1024];
-                int length = 0;
-                FileOutputStream fos = null;
-                try {
-                    fos = new FileOutputStream(f);
-
-                    while ((length =
-                            compressedInputStream.read(buffer)) >= 0) {
-                        fos.write(buffer, 0, length);
-                    }
-
-                    fos.close();
-                    fos = null;
-                } finally {
-                    if (fos != null) {
-                        try {
-                            fos.close();
-                        } catch (IOException e) {}
-                    }
-                }
-            }
-
-            fileUtils.setFileLastModified(f, entryDate.getTime());
-        } catch (FileNotFoundException ex) {
-            log("Unable to expand to file " + f.getPath(), Project.MSG_WARN);
-        }
-
-    }
-
-    /**
-     * Set the destination directory. File will be unzipped into the
-     * destination directory.
-     *
-     * @param d Path to the directory.
-     */
-    public void setDest(File d) {
-        this.dest = d;
-    }
-
-    /**
-     * Set the path to zip-file.
-     *
-     * @param s Path to zip-file.
-     */
-    public void setSrc(File s) {
-        this.source = s;
-    }
-
-    /**
-     * Should we overwrite files in dest, even if they are newer than
-     * the corresponding entries in the archive?
-     */
-    public void setOverwrite(boolean b) {
-        overwrite = b;
-    }
-
-    /**
-     * Add a patternset
-     */
-    public void addPatternset(PatternSet set) {
-        patternsets.addElement(set);
-    }
-
-    /**
-     * Add a fileset
-     */
-    public void addFileset(FileSet set) {
-        filesets.addElement(set);
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/Filter.java b/src/main/org/apache/tools/ant/taskdefs/Filter.java
deleted file mode 100644
index 38556c8..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Filter.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import java.io.File;
-
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-
-/**
- * This task sets a token filter that is used by the file copy methods
- * of the project to do token substitution, or sets mutiple tokens by
- * reading these from a file.
- *
- * @author Stefano Mazzocchi 
- *         <a href="mailto:stefano@apache.org">stefano@apache.org</a>
- * @author Gero Vermaas <a href="mailto:gero@xs4all.nl">gero@xs4all.nl</a>
- * @author <A href="gholam@xtra.co.nz">Michael McCallum</A>
- *
- * @since Ant 1.1
- *
- * @ant.task category="filesystem"
- */
-public class Filter extends Task {
-
-    private String token;
-    private String value;
-    private File filtersFile;
-    
-    public void setToken(String token) {
-        this.token = token;
-    }
-
-    public void setValue(String value) {
-        this.value = value;
-    }
-
-    public void setFiltersfile(File filtersFile) {
-        this.filtersFile = filtersFile;
-    }
-
-    public void execute() throws BuildException {
-        boolean isFiltersFromFile = 
-            filtersFile != null && token == null && value == null;
-        boolean isSingleFilter = 
-            filtersFile == null && token != null && value != null;
-        
-        if (!isFiltersFromFile && !isSingleFilter) {
-            throw new BuildException("both token and value parameters, or "
-                                     + "only a filtersFile parameter is "
-                                     + "required", location);
-        }
-        
-        if (isSingleFilter) {
-            project.getGlobalFilterSet().addFilter(token, value);
-        }
-        
-        if (isFiltersFromFile) {
-            readFilters();
-        }
-    }
-    
-    protected void readFilters() throws BuildException {
-        log("Reading filters from " + filtersFile, Project.MSG_VERBOSE);
-        project.getGlobalFilterSet().readFiltersFromFile(filtersFile);
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/FixCRLF.java b/src/main/org/apache/tools/ant/taskdefs/FixCRLF.java
deleted file mode 100644
index ea32c89..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/FixCRLF.java
+++ /dev/null
@@ -1,1047 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.DirectoryScanner;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.taskdefs.condition.Os;
-import org.apache.tools.ant.types.EnumeratedAttribute;
-import org.apache.tools.ant.util.FileUtils;
-
-import java.io.BufferedReader;
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.FileReader;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.OutputStreamWriter;
-import java.io.Reader;
-import java.io.Writer;
-import java.util.Enumeration;
-import java.util.NoSuchElementException;
-
-/**
- * Task to convert text source files to local OS formatting conventions, as
- * well as repair text files damaged by misconfigured or misguided editors or
- * file transfer programs.
- * <p>
- * This task can take the following arguments:
- * <ul>
- * <li>srcdir
- * <li>destdir
- * <li>include
- * <li>exclude
- * <li>cr
- * <li>eol
- * <li>tab
- * <li>eof
- * <li>encoding
- * </ul>
- * Of these arguments, only <b>sourcedir</b> is required.
- * <p>
- * When this task executes, it will scan the srcdir based on the include
- * and exclude properties.
- * <p>
- * This version generalises the handling of EOL characters, and allows
- * for CR-only line endings (which I suspect is the standard on Macs.)
- * Tab handling has also been generalised to accommodate any tabwidth
- * from 2 to 80, inclusive.  Importantly, it will leave untouched any
- * literal TAB characters embedded within string or character constants.
- * <p>
- * <em>Warning:</em> do not run on binary files.
- * <em>Caution:</em> run with care on carefully formatted files.
- * This may sound obvious, but if you don't specify asis, presume that
- * your files are going to be modified.  If "tabs" is "add" or "remove",
- * whitespace characters may be added or removed as necessary.  Similarly,
- * for CR's - in fact "eol"="crlf" or cr="add" can result in cr
- * characters being removed in one special case accommodated, i.e.,
- * CRCRLF is regarded as a single EOL to handle cases where other
- * programs have converted CRLF into CRCRLF.
- *
- * @author Sam Ruby <a href="mailto:rubys@us.ibm.com">rubys@us.ibm.com</a>
- * @author <a href="mailto:pbwest@powerup.com.au">Peter B. West</a>
- * @version $Revision$ $Name$
- * @since Ant 1.1
- *
- * @ant.task category="filesystem"
- */
-
-public class FixCRLF extends MatchingTask {
-
-    private static final int UNDEF = -1;
-    private static final int NOTJAVA = 0;
-    private static final int LOOKING = 1;
-    private static final int IN_CHAR_CONST = 2;
-    private static final int IN_STR_CONST = 3;
-    private static final int IN_SINGLE_COMMENT = 4;
-    private static final int IN_MULTI_COMMENT = 5;
-
-    private static final int ASIS = 0;
-    private static final int CR = 1;
-    private static final int LF = 2;
-    private static final int CRLF = 3;
-    private static final int ADD = 1;
-    private static final int REMOVE = -1;
-    private static final int SPACES = -1;
-    private static final int TABS = 1;
-
-    private static final int INBUFLEN = 8192;
-    private static final int LINEBUFLEN = 200;
-
-    private static final char CTRLZ = '\u001A';
-
-    private int tablength = 8;
-    private String spaces = "        ";
-    private StringBuffer linebuf = new StringBuffer(1024);
-    private StringBuffer linebuf2 = new StringBuffer(1024);
-    private int eol;
-    private String eolstr;
-    private int ctrlz;
-    private int tabs;
-    private boolean javafiles = false;
-
-    private File srcDir;
-    private File destDir = null;
-
-    private FileUtils fileUtils = FileUtils.newFileUtils();
-
-    /**
-     * Encoding to assume for the files
-     */
-    private String encoding = null;
-
-    /**
-     * Defaults the properties based on the system type.
-     * <ul><li>Unix: eol="LF" tab="asis" eof="remove"
-     *     <li>Mac: eol="CR" tab="asis" eof="remove"
-     *     <li>DOS: eol="CRLF" tab="asis" eof="asis"</ul>
-     */
-    public FixCRLF () {
-        tabs = ASIS;
-        if (Os.isFamily("mac")) {
-            ctrlz = REMOVE;
-            eol = CR;
-            eolstr = "\r";
-        } else if (Os.isFamily("dos")) {
-            ctrlz = ASIS;
-            eol = CRLF;
-            eolstr = "\r\n";
-        } else {
-            ctrlz = REMOVE;
-            eol = LF;
-            eolstr = "\n";
-        }
-    }
-
-    /**
-     * Set the source dir to find the source text files.
-     */
-    public void setSrcdir(File srcDir) {
-        this.srcDir = srcDir;
-    }
-
-    /**
-     * Set the destination where the fixed files should be placed.
-     * Default is to replace the original file.
-     */
-    public void setDestdir(File destDir) {
-        this.destDir = destDir;
-    }
-
-    /**
-     * Fixing Java source files?
-     */
-    public void setJavafiles(boolean javafiles) {
-        this.javafiles = javafiles;
-    }
-
-
-    /**
-     * Specify how EndOfLine characters are to be handled
-     *
-     * @param option valid values:
-     * <ul>
-     * <li>asis: leave line endings alone
-     * <li>cr: convert line endings to CR
-     * <li>lf: convert line endings to LF
-     * <li>crlf: convert line endings to CRLF
-     * </ul>
-     */
-    public void setEol(CrLf attr) {
-        String option = attr.getValue();
-        if (option.equals("asis")) {
-            eol = ASIS;
-        } else if (option.equals("cr")) {
-            eol = CR;
-            eolstr = "\r";
-        } else if (option.equals("lf")) {
-            eol = LF;
-            eolstr = "\n";
-        } else {
-            // Must be "crlf"
-            eol = CRLF;
-            eolstr = "\r\n";
-        }
-    }
-
-    /**
-     * Specify how carriage return (CR) characters are to be handled
-     *
-     * @param option valid values:
-     * <ul>
-     * <li>add: ensure that there is a CR before every LF
-     * <li>asis: leave CR characters alone
-     * <li>remove: remove all CR characters
-     * </ul>
-     *
-     * @deprecated use {@link #setEol setEol} instead.
-     */
-    public void setCr(AddAsisRemove attr) {
-        log("DEPRECATED: The cr attribute has been deprecated,",
-            Project.MSG_WARN);
-        log("Please use the eol attribute instead", Project.MSG_WARN);
-        String option = attr.getValue();
-        CrLf c = new CrLf();
-        if (option.equals("remove")) {
-            c.setValue("lf");
-        } else if (option.equals("asis")) {
-            c.setValue("asis");
-        } else {
-            // must be "add"
-            c.setValue("crlf");
-        }
-        setEol(c);
-    }
-
-    /**
-     * Specify how tab characters are to be handled
-     *
-     * @param option valid values:
-     * <ul>
-     * <li>add: convert sequences of spaces which span a tab stop to tabs
-     * <li>asis: leave tab and space characters alone
-     * <li>remove: convert tabs to spaces
-     * </ul>
-     */
-    public void setTab(AddAsisRemove attr) {
-        String option = attr.getValue();
-        if (option.equals("remove")) {
-            tabs = SPACES;
-        } else if (option.equals("asis")) {
-            tabs = ASIS;
-        } else {
-            // must be "add"
-            tabs = TABS;
-        }
-    }
-
-    /**
-     * Specify tab length in characters
-     *
-     * @param tlength specify the length of tab in spaces,
-     */
-    public void setTablength(int tlength) throws BuildException {
-        if (tlength < 2 || tlength > 80) {
-            throw new BuildException("tablength must be between 2 and 80",
-                                     location);
-        }
-        tablength = tlength;
-        StringBuffer sp = new StringBuffer();
-        for (int i = 0; i < tablength; i++) {
-            sp.append(' ');
-        }
-        spaces = sp.toString();
-    }
-
-    /**
-     * Specify how DOS EOF (control-z) characters are to be handled
-     *
-     * @param option valid values:
-     * <ul>
-     * <li>add: ensure that there is an eof at the end of the file
-     * <li>asis: leave eof characters alone
-     * <li>remove: remove any eof character found at the end
-     * </ul>
-     */
-    public void setEof(AddAsisRemove attr) {
-        String option = attr.getValue();
-        if (option.equals("remove")) {
-            ctrlz = REMOVE;
-        } else if (option.equals("asis")) {
-            ctrlz = ASIS;
-        } else {
-            // must be "add"
-            ctrlz = ADD;
-        }
-    }
-
-    /**
-     * Specifies the encoding Ant expects the files to be in -
-     * defaults to the platforms default encoding.
-     */
-    public void setEncoding(String encoding) {
-        this.encoding = encoding;
-    }
-
-    /**
-     * Executes the task.
-     */
-    public void execute() throws BuildException {
-        // first off, make sure that we've got a srcdir and destdir
-
-        if (srcDir == null) {
-            throw new BuildException("srcdir attribute must be set!");
-        }
-        if (!srcDir.exists()) {
-            throw new BuildException("srcdir does not exist!");
-        }
-        if (!srcDir.isDirectory()) {
-            throw new BuildException("srcdir is not a directory!");
-        }
-        if (destDir != null) {
-            if (!destDir.exists()) {
-                throw new BuildException("destdir does not exist!");
-            }
-            if (!destDir.isDirectory()) {
-                throw new BuildException("destdir is not a directory!");
-            }
-        }
-
-        // log options used
-        log("options:" +
-            " eol=" +
-            (eol == ASIS ? "asis" : eol == CR ? "cr" : eol == LF ? "lf" : "crlf") +
-            " tab=" + (tabs == TABS ? "add" : tabs == ASIS ? "asis" : "remove") +
-            " eof=" + (ctrlz == ADD ? "add" : ctrlz == ASIS ? "asis" : "remove") +
-            " tablength=" + tablength +
-            " encoding=" + (encoding == null ? "default" : encoding),
-            Project.MSG_VERBOSE);
-
-        DirectoryScanner ds = super.getDirectoryScanner(srcDir);
-        String[] files = ds.getIncludedFiles();
-
-        for (int i = 0; i < files.length; i++) {
-            processFile(files[i]);
-        }
-    }
-
-    /**
-     * Creates a Reader reading from a given file an taking the user
-     * defined encoding into account.
-     */
-    private Reader getReader(File f) throws IOException {
-        return (encoding == null) ? new FileReader(f)
-            : new InputStreamReader(new FileInputStream(f), encoding);
-    }
-
-
-    private void processFile(String file) throws BuildException {
-        File srcFile = new File(srcDir, file);
-        File destD = destDir == null ? srcDir : destDir;
-        File tmpFile = null;
-        BufferedWriter outWriter;
-        OneLiner.BufferLine line;
-
-        // read the contents of the file
-        OneLiner lines = new OneLiner(srcFile);
-
-        try {
-            // Set up the output Writer
-            try {
-                tmpFile = fileUtils.createTempFile("fixcrlf", "", destD);
-                Writer writer = (encoding == null) ? new FileWriter(tmpFile)
-                    : new OutputStreamWriter(new FileOutputStream(tmpFile),
-                                             encoding);
-                outWriter = new BufferedWriter(writer);
-            } catch (IOException e) {
-                throw new BuildException(e);
-            }
-
-            while (lines.hasMoreElements()) {
-                // In-line states
-                int endComment;
-
-                try {
-                    line = (OneLiner.BufferLine) lines.nextElement();
-                } catch (NoSuchElementException e) {
-                    throw new BuildException(e);
-                }
-
-                String lineString = line.getLineString();
-                int linelen = line.length();
-
-                // Note - all of the following processing NOT done for
-                // tabs ASIS
-
-                if (tabs == ASIS) {
-                    // Just copy the body of the line across
-                    try {
-                        outWriter.write(lineString);
-                    } catch (IOException e) {
-                        throw new BuildException(e);
-                    } // end of try-catch
-
-                } else { // (tabs != ASIS)
-                    int ptr;
-
-                    while ((ptr = line.getNext()) < linelen) {
-
-                        switch (lines.getState()) {
-
-                        case NOTJAVA:
-                            notInConstant(line, line.length(), outWriter);
-                            break;
-
-                        case IN_MULTI_COMMENT:
-                            endComment 
-                                = lineString.indexOf("*/", line.getNext());
-                            if (endComment >= 0) {
-                                // End of multiLineComment on this line
-                                endComment += 2;  // Include the end token
-                                lines.setState(LOOKING);
-                            } else {
-                                endComment = linelen;
-                            }
-
-                            notInConstant(line, endComment, outWriter);
-                            break;
-
-                        case IN_SINGLE_COMMENT:
-                            notInConstant(line, line.length(), outWriter);
-                            lines.setState(LOOKING);
-                            break;
-
-                        case IN_CHAR_CONST:
-                        case IN_STR_CONST:
-                            // Got here from LOOKING by finding an
-                            // opening "\'" next points to that quote
-                            // character.
-                            // Find the end of the constant.  Watch
-                            // out for backslashes.  Literal tabs are
-                            // left unchanged, and the column is
-                            // adjusted accordingly.
-
-                            int begin = line.getNext();
-                            char terminator = (lines.getState() == IN_STR_CONST
-                                               ? '\"'
-                                               : '\'');
-                            endOfCharConst(line, terminator);
-                            while (line.getNext() < line.getLookahead()) {
-                                if (line.getNextCharInc() == '\t') {
-                                    line.setColumn(line.getColumn() +
-                                                   tablength -
-                                                   (line.getColumn() 
-                                                    % tablength));
-                                } else {
-                                    line.incColumn();
-                                }
-                            }
-
-                            // Now output the substring
-                            try {
-                                outWriter.write(line.substring(begin, 
-                                                               line.getNext()));
-                            } catch (IOException e) {
-                                throw new BuildException(e);
-                            }
-
-                            lines.setState(LOOKING);
-
-                            break;
-
-
-                        case LOOKING:
-                            nextStateChange(line);
-                            notInConstant(line, line.getLookahead(), outWriter);
-                            break;
-
-                        } // end of switch (state)
-
-                    } // end of while (line.getNext() < linelen)
-
-                } // end of else (tabs != ASIS)
-
-                try {
-                    outWriter.write(eolstr);
-                } catch (IOException e) {
-                    throw new BuildException(e);
-                } // end of try-catch
-
-            } // end of while (lines.hasNext())
-
-            try {
-                // Handle CTRLZ
-                if (ctrlz == ASIS) {
-                    outWriter.write(lines.getEofStr());
-                } else if (ctrlz == ADD){
-                    outWriter.write(CTRLZ);
-                }
-            } catch (IOException e) {
-                throw new BuildException(e);
-            } finally {
-                try {
-                    outWriter.close();
-                } catch (IOException e) {
-                    throw new BuildException(e);
-                }
-            }
-
-
-            try {
-                lines.close();
-                lines = null;
-            } catch (IOException e) {
-                throw new BuildException("Unable to close source file " 
-                                         + srcFile);
-            }
-
-            File destFile = new File(destD, file);
-
-            if (destFile.exists()) {
-                // Compare the destination with the temp file
-                log("destFile exists", Project.MSG_DEBUG);
-                if (!fileUtils.contentEquals(destFile, tmpFile)) {
-                    log(destFile + " is being written", Project.MSG_DEBUG);
-                    if (!destFile.delete()) {
-                        throw new BuildException("Unable to delete "
-                                                 + destFile);
-                    }
-                    if (!tmpFile.renameTo(destFile)) {
-                        throw new BuildException(
-                                "Failed to transform " + srcFile
-                                + " to " + destFile
-                                + ". Couldn't rename temporary file: "
-                                + tmpFile);
-                    }
-
-                } else { // destination is equal to temp file
-                    log(destFile +
-                        " is not written, as the contents are identical",
-                        Project.MSG_DEBUG);
-                    if (!tmpFile.delete()) {
-                        throw new BuildException("Unable to delete "
-                                                 + tmpFile);
-                    }
-                }
-            } else { // destFile does not exist - write the temp file
-                log("destFile does not exist", Project.MSG_DEBUG);
-                if (!tmpFile.renameTo(destFile)) {
-                    throw new BuildException(
-                            "Failed to transform " + srcFile
-                            + " to " + destFile
-                            + ". Couldn't rename temporary file: "
-                            + tmpFile);
-                }
-            }
-
-            tmpFile = null;
-
-        } catch (IOException e) {
-            throw new BuildException(e);
-        } finally {
-            try {
-                if (lines != null) {
-                    lines.close();
-                }
-            } catch (IOException io) {
-                log("Error closing " + srcFile, Project.MSG_ERR);
-            } // end of catch
-
-            if (tmpFile != null) {
-                tmpFile.delete();
-            }
-        } // end of finally
-    }
-
-    /**
-     * Scan a BufferLine for the next state changing token: the beginning
-     * of a single or multi-line comment, a character or a string constant.
-     *
-     * As a side-effect, sets the buffer state to the next state, and sets
-     * field lookahead to the first character of the state-changing token, or
-     * to the next eol character.
-     *
-     * @param BufferLine bufline       BufferLine containing the string
-     *                                 to be processed
-     * @exception org.apache.tools.ant.BuildException
-     *                                 Thrown when end of line is reached
-     *                                 before the terminator is found.
-     */
-    private void nextStateChange(OneLiner.BufferLine bufline)
-        throws BuildException {
-        int eol = bufline.length();
-        int ptr = bufline.getNext();
-
-
-        //  Look for next single or double quote, double slash or slash star
-        while (ptr < eol) {
-            switch (bufline.getChar(ptr++)) {
-            case '\'':
-                bufline.setState(IN_CHAR_CONST);
-                bufline.setLookahead(--ptr);
-                return;
-            case '\"':
-                bufline.setState(IN_STR_CONST);
-                bufline.setLookahead(--ptr);
-                return;
-            case '/':
-                if (ptr < eol) {
-                    if (bufline.getChar(ptr) == '*') {
-                        bufline.setState(IN_MULTI_COMMENT);
-                        bufline.setLookahead(--ptr);
-                        return;
-                    } else if (bufline.getChar(ptr) == '/') {
-                        bufline.setState(IN_SINGLE_COMMENT);
-                        bufline.setLookahead(--ptr);
-                        return;
-                    }
-                }
-                break;
-            } // end of switch (bufline.getChar(ptr++))
-
-        } // end of while (ptr < eol)
-        // Eol is the next token
-        bufline.setLookahead(ptr);
-    }
-
-
-    /**
-     * Scan a BufferLine forward from the 'next' pointer
-     * for the end of a character constant.  Set 'lookahead' pointer to the
-     * character following the terminating quote.
-     *
-     * @param BufferLine bufline       BufferLine containing the string
-     *                                 to be processed
-     * @param char terminator          The constant terminator
-     *
-     * @exception org.apache.tools.ant.BuildException
-     *                                 Thrown when end of line is reached
-     *                                 before the terminator is found.
-     */
-    private void endOfCharConst(OneLiner.BufferLine bufline, char terminator)
-        throws BuildException {
-        int ptr = bufline.getNext();
-        int eol = bufline.length();
-        char c;
-        ptr++;          // skip past initial quote
-        while (ptr < eol) {
-            if ((c = bufline.getChar(ptr++)) == '\\') {
-                ptr++;
-            } else {
-                if (c == terminator) {
-                    bufline.setLookahead(ptr);
-                    return;
-                }
-            }
-        } // end of while (ptr < eol)
-        // Must have fallen through to the end of the line
-        throw new BuildException("endOfCharConst: unterminated char constant");
-    }
-
-
-    /**
-     * Process a BufferLine string which is not part of of a string constant.
-     * The start position of the string is given by the 'next' field.
-     * Sets the 'next' and 'column' fields in the BufferLine.
-     *
-     * @param BufferLine bufline       BufferLine containing the string
-     *                                 to be processed
-     * @param int end                  Index just past the end of the
-     *                                 string
-     * @param BufferedWriter outWriter Sink for the processed string
-     */
-    private void notInConstant(OneLiner.BufferLine bufline, int end,
-                                BufferedWriter outWriter) {
-        // N.B. both column and string index are zero-based
-        // Process a string not part of a constant;
-        // i.e. convert tabs<->spaces as required
-        // This is NOT called for ASIS tab handling
-        int nextTab;
-        int nextStop;
-        int tabspaces;
-        String line = bufline.substring(bufline.getNext(), end);
-        int place = 0;          // Zero-based
-        int col = bufline.getColumn();  // Zero-based
-
-        // process sequences of white space
-        // first convert all tabs to spaces
-        linebuf.setLength(0);
-        while ((nextTab = line.indexOf((int) '\t', place)) >= 0) {
-            linebuf.append(line.substring(place, nextTab)); // copy to the TAB
-            col += nextTab - place;
-            tabspaces = tablength - (col % tablength);
-            linebuf.append(spaces.substring(0, tabspaces));
-            col += tabspaces;
-            place = nextTab + 1;
-        } // end of while
-        linebuf.append(line.substring(place, line.length()));
-        // if converting to spaces, all finished
-        String linestring = new String(linebuf.toString());
-        if (tabs == REMOVE) {
-            try {
-                outWriter.write(linestring);
-            } catch (IOException e) {
-                throw new BuildException(e);
-            } // end of try-catch
-        } else { // tabs == ADD
-            int tabCol;
-            linebuf2.setLength(0);
-            place = 0;
-            col = bufline.getColumn();
-            int placediff = col - 0;
-            // for the length of the string, cycle through the tab stop
-            // positions, checking for a space preceded by at least one
-            // other space at the tab stop.  if so replace the longest possible
-            // preceding sequence of spaces with a tab.
-            nextStop = col + (tablength - col % tablength);
-            if (nextStop - col < 2) {
-                linebuf2.append(linestring.substring(
-                                        place, nextStop - placediff));
-                place = nextStop - placediff;
-                nextStop += tablength;
-            }
-
-            for (; nextStop - placediff <= linestring.length()
-                          ; nextStop += tablength) {
-                for (tabCol = nextStop;
-                             --tabCol - placediff >= place
-                             && linestring.charAt(tabCol - placediff) == ' '
-                             ;) {
-                    ; // Loop for the side-effects
-                }
-                // tabCol is column index of the last non-space character
-                // before the next tab stop
-                if (nextStop - tabCol > 2) {
-                    linebuf2.append(linestring.substring(
-                                    place, ++tabCol - placediff));
-                    linebuf2.append('\t');
-                } else {
-                    linebuf2.append(linestring.substring(
-                                    place, nextStop - placediff));
-                } // end of else
-
-                place = nextStop - placediff;
-            } // end of for (nextStop ... )
-
-            // pick up that last bit, if any
-            linebuf2.append(linestring.substring(place, linestring.length()));
-
-            try {
-                outWriter.write(linebuf2.toString());
-            } catch (IOException e) {
-                throw new BuildException(e);
-            } // end of try-catch
-
-        } // end of else tabs == ADD
-
-        // Set column position as modified by this method
-        bufline.setColumn(bufline.getColumn() + linestring.length());
-        bufline.setNext(end);
-
-    }
-
-
-    class OneLiner implements Enumeration {
-
-        private int state = javafiles ? LOOKING : NOTJAVA;
-
-        private StringBuffer eolStr = new StringBuffer(LINEBUFLEN);
-        private StringBuffer eofStr = new StringBuffer();
-
-        private BufferedReader reader;
-        private StringBuffer line = new StringBuffer();
-        private boolean reachedEof = false;
-
-        public OneLiner(File srcFile)
-            throws BuildException {
-            try {
-                reader = new BufferedReader
-                        (getReader(srcFile), INBUFLEN);
-                nextLine();
-            } catch (IOException e) {
-                throw new BuildException(e);
-            }
-        }
-
-        protected void nextLine()
-            throws BuildException {
-            int ch = -1;
-            int eolcount = 0;
-
-            eolStr.setLength(0);
-            line.setLength(0);
-
-            try {
-                ch = reader.read();
-                while (ch != -1 && ch != '\r' && ch != '\n') {
-                    line.append((char) ch);
-                    ch = reader.read();
-                }
-
-                if (ch == -1 && line.length() == 0) {
-                    // Eof has been reached
-                    reachedEof = true;
-                    return;
-                }
-
-                switch ((char) ch) {
-                case '\r':
-                    // Check for \r, \r\n and \r\r\n
-                    // Regard \r\r not followed by \n as two lines
-                    ++eolcount;
-                    eolStr.append('\r');
-                    reader.mark(2);
-                    switch ((ch = reader.read())) {
-                    case '\r':
-                        if ((char) (ch = reader.read()) == '\n') {
-                            eolcount += 2;
-                            eolStr.append("\r\n");
-                        }
-                        break;
-                    case '\n':
-                        ++eolcount;
-                        eolStr.append('\n');
-                        break;
-                    case -1:
-                        // don't reposition when we've reached the end
-                        // of the stream
-                        break;
-                    default:
-                        reader.reset();
-                        break;
-                    } // end of switch ((char)(ch = reader.read()))
-                    break;
-
-                case '\n':
-                    ++eolcount;
-                    eolStr.append('\n');
-                    break;
-
-                } // end of switch ((char) ch)
-
-                // if at eolcount == 0 and trailing characters of string
-                // are CTRL-Zs, set eofStr
-                if (eolcount == 0) {
-                    int i = line.length();
-                    while (--i >= 0 && line.charAt(i) == CTRLZ) {
-                        // keep searching for the first ^Z
-                    }
-                    if (i < line.length() - 1) {
-                        // Trailing characters are ^Zs
-                        // Construct new line and eofStr
-                        eofStr.append(line.toString().substring(i + 1));
-                        if (i < 0) {
-                            line.setLength(0);
-                            reachedEof = true;
-                        } else {
-                            line.setLength(i + 1);
-                        }
-                    }
-
-                } // end of if (eolcount == 0)
-
-            } catch (IOException e) {
-                throw new BuildException(e);
-            }
-        }
-
-        public String getEofStr() {
-            return eofStr.toString();
-        }
-
-        public int getState() {
-            return state;
-        }
-
-        public void setState(int state) {
-            this.state = state;
-        }
-
-        public boolean hasMoreElements() {
-            return !reachedEof;
-        }
-
-        public Object nextElement()
-            throws NoSuchElementException {
-            if (!hasMoreElements()) {
-                throw new NoSuchElementException("OneLiner");
-            }
-            BufferLine tmpLine =
-                    new BufferLine(line.toString(), eolStr.toString());
-            nextLine();
-            return tmpLine;
-        }
-
-        public void close() throws IOException {
-            if (reader != null) {
-                reader.close();
-            }
-        }
-
-        class BufferLine {
-            private int next = 0;
-            private int column = 0;
-            private int lookahead = UNDEF;
-            private String line;
-            private String eolStr;
-
-            public BufferLine(String line, String eolStr)
-                throws BuildException {
-                next = 0;
-                column = 0;
-                this.line = line;
-                this.eolStr = eolStr;
-            }
-
-            public int getNext() {
-                return next;
-            }
-
-            public void setNext(int next) {
-                this.next = next;
-            }
-
-            public int getLookahead() {
-                return lookahead;
-            }
-
-            public void setLookahead(int lookahead) {
-                this.lookahead = lookahead;
-            }
-
-            public char getChar(int i) {
-                return line.charAt(i);
-            }
-
-            public char getNextChar() {
-                return getChar(next);
-            }
-
-            public char getNextCharInc() {
-                return getChar(next++);
-            }
-
-            public int getColumn() {
-                return column;
-            }
-
-            public void setColumn(int col) {
-                column = col;
-            }
-
-            public int incColumn() {
-                return column++;
-            }
-
-            public int length() {
-                return line.length();
-            }
-
-            public int getEolLength() {
-                return eolStr.length();
-            }
-
-            public String getLineString() {
-                return line;
-            }
-
-            public String getEol() {
-                return eolStr;
-            }
-
-            public String substring(int begin) {
-                return line.substring(begin);
-            }
-
-            public String substring(int begin, int end) {
-                return line.substring(begin, end);
-            }
-
-            public void setState(int state) {
-                OneLiner.this.setState(state);
-            }
-
-            public int getState() {
-                return OneLiner.this.getState();
-            }
-        }
-    }
-
-    /**
-     * Enumerated attribute with the values "asis", "add" and "remove".
-     */
-    public static class AddAsisRemove extends EnumeratedAttribute {
-        public String[] getValues() {
-            return new String[] {"add", "asis", "remove"};
-        }
-    }
-
-    /**
-     * Enumerated attribute with the values "asis", "cr", "lf" and "crlf".
-     */
-    public static class CrLf extends EnumeratedAttribute {
-        /**
-         * @see EnumeratedAttribute#getValues
-         */
-        public String[] getValues() {
-            return new String[] {"asis", "cr", "lf", "crlf"};
-        }
-    }
-
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/GUnzip.java b/src/main/org/apache/tools/ant/taskdefs/GUnzip.java
deleted file mode 100644
index 1725a07..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/GUnzip.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.BuildException;
-
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.util.zip.GZIPInputStream;
-
-/**
- * Expands a file that has been compressed with the GZIP
- * algorithm. Normally used to compress non-compressed archives such
- * as TAR files.
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- * @author <a href="mailto:umagesh@rediffmail.com">Magesh Umasankar</a>
- *
- * @since Ant 1.1
- *
- * @ant.task category="packaging"
- */
-
-public class GUnzip extends Unpack {
-
-    private static final String DEFAULT_EXTENSION = ".gz";
-
-    protected String getDefaultExtension() {
-        return DEFAULT_EXTENSION;
-    }
-
-    protected void extract() {
-        if (source.lastModified() > dest.lastModified()) {
-            log("Expanding " + source.getAbsolutePath() + " to "
-                        + dest.getAbsolutePath());
-
-            FileOutputStream out = null;
-            GZIPInputStream zIn = null;
-            FileInputStream fis = null;
-            try {
-                out = new FileOutputStream(dest);
-                fis = new FileInputStream(source);
-                zIn = new GZIPInputStream(fis);
-                byte[] buffer = new byte[8 * 1024];
-                int count = 0;
-                do {
-                    out.write(buffer, 0, count);
-                    count = zIn.read(buffer, 0, buffer.length);
-                } while (count != -1);
-            } catch (IOException ioe) {
-                String msg = "Problem expanding gzip " + ioe.getMessage();
-                throw new BuildException(msg, ioe, location);
-            } finally {
-                if (fis != null) {
-                    try {
-                        fis.close();
-                    } catch (IOException ioex) {}
-                }
-                if (out != null) {
-                    try {
-                        out.close();
-                    } catch (IOException ioex) {}
-                }
-                if (zIn != null) {
-                    try {
-                        zIn.close();
-                    } catch (IOException ioex) {}
-                }
-            }
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/GZip.java b/src/main/org/apache/tools/ant/taskdefs/GZip.java
deleted file mode 100644
index ebadbb4..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/GZip.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.BuildException;
-
-import java.io.IOException;
-import java.io.FileOutputStream;
-import java.util.zip.GZIPOutputStream;
-
-/**
- * Compresses a file with the GZIP algorithm. Normally used to compress
- * non-compressed archives such as TAR files.
- *
- * @author James Davidson <a href="mailto:duncan@x180.com">duncan@x180.com</a>
- * @author Jon S. Stevens <a href="mailto:jon@clearink.com">jon@clearink.com</a>
- * @author <a href="mailto:umagesh@rediffmail.com">Magesh Umasankar</a>
- *
- * @since Ant 1.1
- *
- * @ant.task category="packaging"
- */
-
-public class GZip extends Pack {
-    protected void pack() {
-        GZIPOutputStream zOut = null;
-        try {
-            zOut = new GZIPOutputStream(new FileOutputStream(zipFile));
-            zipFile(source, zOut);
-        } catch (IOException ioe) {
-            String msg = "Problem creating gzip " + ioe.getMessage();
-            throw new BuildException(msg, ioe, location);
-        } finally {
-            if (zOut != null) {
-                try {
-                    // close up
-                    zOut.close();
-                } catch (IOException e) {
-                    // do nothing
-                }
-            }
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/GenerateKey.java b/src/main/org/apache/tools/ant/taskdefs/GenerateKey.java
deleted file mode 100644
index 06a809c..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/GenerateKey.java
+++ /dev/null
@@ -1,349 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000,2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs;
-
-import java.util.Enumeration;
-import java.util.Vector;
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.util.JavaEnvUtils;
-import org.apache.tools.ant.types.Commandline;
-
-/**
- * Generates a key.
- * 
- * @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
- *
- * @since Ant 1.2
- *
- * @ant.task name="genkey" category="java"
- */
-public class GenerateKey extends Task {
-
-    public static class DnameParam {
-        private String name;
-        private String value;
-        
-        public void setName(String name) {
-            this.name = name;
-        }
-        
-        public String getName() {
-            return name;
-        }
-        
-        public void setValue(String value) {
-            this.value = value;
-        }
-
-        public String getValue() {
-            return value;
-        }
-    }
-
-    public static class DistinguishedName {
-        private Vector params = new Vector();
-        
-        public Object createParam() {
-            DnameParam param = new DnameParam();
-            params.addElement(param);
-            
-            return param;
-        }
-        
-        public Enumeration getParams() {
-            return params.elements();
-        }
-
-        public String toString() {
-            final int size = params.size();
-            final StringBuffer sb = new StringBuffer();
-            boolean firstPass = true;
-
-            for (int i = 0; i < size; i++) {
-                if (!firstPass) {
-                    sb.append(" ,");
-                }
-                firstPass = false;
-
-                final DnameParam param = (DnameParam) params.elementAt(i);
-                sb.append(encode(param.getName()));
-                sb.append('=');
-                sb.append(encode(param.getValue()));
-            }
-                        
-            return sb.toString();
-        }
-
-        public String encode(final String string) {
-            int end = string.indexOf(',');
-
-            if (-1 == end) {
-              return string;
-            }
-                
-            final StringBuffer sb = new StringBuffer();
-                
-            int start = 0;
-
-            while (-1 != end) {
-                sb.append(string.substring(start, end));
-                sb.append("\\,");
-                start = end + 1;
-                end = string.indexOf(',', start);
-            }
-
-            sb.append(string.substring(start));
-                
-            return sb.toString();                
-        }
-    }
-
-    /**
-     * The alias of signer.
-     */
-    protected String alias;
-
-    /**
-     * The name of keystore file.
-     */
-    protected String keystore;
-    protected String storepass;
-    protected String storetype;
-    protected String keypass;
-
-    protected String sigalg;
-    protected String keyalg;
-    protected String dname;
-    protected DistinguishedName expandedDname;
-    protected int keysize;
-    protected int validity;
-    protected boolean verbose;
-
-    public DistinguishedName createDname() throws BuildException {
-        if (null != expandedDname) {
-            throw new BuildException("DName sub-element can only be "
-                                     + "specified once.");
-        }
-        if (null != dname) {
-            throw new BuildException("It is not possible to specify dname " +
-                                     " both " +
-                                     "as attribute and element.");
-        }
-        expandedDname = new DistinguishedName();
-        return expandedDname;
-    }
-  
-    public void setDname(final String dname) {
-        if (null != expandedDname) {
-            throw new BuildException("It is not possible to specify dname " +
-                                     " both " +
-                                     "as attribute and element.");
-        }
-        this.dname = dname;
-    }
-
-    public void setAlias(final String alias) {
-        this.alias = alias;
-    } 
-
-    public void setKeystore(final String keystore) {
-        this.keystore = keystore;
-    } 
-
-    public void setStorepass(final String storepass) {
-        this.storepass = storepass;
-    } 
-
-    public void setStoretype(final String storetype) {
-        this.storetype = storetype;
-    } 
-
-    public void setKeypass(final String keypass) {
-        this.keypass = keypass;
-    } 
-
-    public void setSigalg(final String sigalg) {
-        this.sigalg = sigalg;
-    } 
-
-    public void setKeyalg(final String keyalg) {
-        this.keyalg = keyalg;
-    } 
-
-    public void setKeysize(final String keysize) throws BuildException {
-        try { 
-            this.keysize = Integer.parseInt(keysize); 
-        } catch (final NumberFormatException nfe) {
-            throw new BuildException("KeySize attribute should be a integer");
-        }
-    } 
-
-    public void setValidity(final String validity) throws BuildException {
-        try { 
-            this.validity = Integer.parseInt(validity); 
-        } catch (final NumberFormatException nfe) {
-            throw new BuildException("Validity attribute should be a integer");
-        }
-    } 
-
-    public void setVerbose(final boolean verbose) {
-        this.verbose = verbose;
-    } 
-
-    public void execute() throws BuildException {
-        if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_1)) {
-            throw new BuildException("The genkey task is only available on JDK"
-                                     + " versions 1.2 or greater");
-        }
-
-        if (null == alias) {
-            throw new BuildException("alias attribute must be set");
-        } 
-
-        if (null == storepass) {
-            throw new BuildException("storepass attribute must be set");
-        } 
-
-        if (null == dname && null == expandedDname) {
-            throw new BuildException("dname must be set");
-        } 
-
-        final StringBuffer sb = new StringBuffer();
-
-        sb.append("-genkey ");
-
-        if (verbose) {
-            sb.append("-v ");
-        } 
-
-        sb.append("-alias \"");
-        sb.append(alias);
-        sb.append("\" ");
-
-        if (null != dname) {
-            sb.append("-dname \"");
-            sb.append(dname);
-            sb.append("\" ");
-        } 
-
-        if (null != expandedDname) {
-            sb.append("-dname \"");
-            sb.append(expandedDname);
-            sb.append("\" ");
-        } 
-
-        if (null != keystore) {
-            sb.append("-keystore \"");
-            sb.append(keystore);
-            sb.append("\" ");
-        }
-
-        if (null != storepass) {
-            sb.append("-storepass \"");
-            sb.append(storepass);
-            sb.append("\" ");
-        } 
-
-        if (null != storetype) {
-            sb.append("-storetype \"");
-            sb.append(storetype);
-            sb.append("\" ");
-        } 
-
-        sb.append("-keypass \"");
-        if (null != keypass) {
-            sb.append(keypass);
-        } else {
-            sb.append(storepass);
-        }
-        sb.append("\" ");
-
-        if (null != sigalg) {
-            sb.append("-sigalg \"");
-            sb.append(sigalg);
-            sb.append("\" ");
-        } 
-
-        if (null != keyalg) {
-            sb.append("-keyalg \"");
-            sb.append(keyalg);
-            sb.append("\" ");
-        } 
-
-
-        if (0 < keysize) {
-            sb.append("-keysize \"");
-            sb.append(keysize);
-            sb.append("\" ");
-        } 
-
-        if (0 < validity) {
-            sb.append("-validity \"");
-            sb.append(validity);
-            sb.append("\" ");
-        } 
-
-        log("Generating Key for " + alias);
-        final ExecTask cmd = (ExecTask) project.createTask("exec");
-        cmd.setExecutable("keytool");
-        Commandline.Argument arg = cmd.createArg();
-        arg.setLine(sb.toString());
-        cmd.setFailonerror(true);
-        cmd.setTaskName(getTaskName());
-        cmd.execute();
-    } 
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/Get.java b/src/main/org/apache/tools/ant/taskdefs/Get.java
deleted file mode 100644
index 586cb32..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Get.java
+++ /dev/null
@@ -1,424 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.InputStream;
-import java.io.IOException;
-import java.net.URL;
-import java.net.URLConnection;
-import java.net.HttpURLConnection;
-import java.util.Date;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.util.FileUtils;
-import org.apache.tools.ant.util.JavaEnvUtils;
-
-/**
- * Get a particular file from a URL source.
- * Options include verbose reporting, timestamp based fetches and controlling
- * actions on failures. NB: access through a firewall only works if the whole
- * Java runtime is correctly configured.
- *
- * @author costin@dnt.ro
- * @author gg@grtmail.com (Added Java 1.1 style HTTP basic auth)
- *
- * @since Ant 1.1
- *
- * @ant.task category="network"
- */
-public class Get extends Task {
-    private URL source; // required
-    private File dest; // required
-    private boolean verbose = false;
-    private boolean useTimestamp = false; //off by default
-    private boolean ignoreErrors = false;
-    private String uname = null;
-    private String pword = null;
-
-
-    /**
-     * Does the work.
-     *
-     * @exception BuildException Thrown in unrecoverable error.
-     */
-    public void execute() throws BuildException {
-        if (source == null) {
-            throw new BuildException("src attribute is required", location);
-        }
-
-        if (dest == null) {
-            throw new BuildException("dest attribute is required", location);
-        }
-
-        if (dest.exists() && dest.isDirectory()) {
-            throw new BuildException("The specified destination is a directory",
-                                     location);
-        }
-
-        if (dest.exists() && !dest.canWrite()) {
-            throw new BuildException("Can't write to " + dest.getAbsolutePath(),
-                                     location);
-        }
-
-        try {
-
-            log("Getting: " + source);
-
-            //set the timestamp to the file date.
-            long timestamp = 0;
-
-            boolean hasTimestamp = false;
-            if (useTimestamp && dest.exists()) {
-                timestamp = dest.lastModified();
-                if (verbose) {
-                    Date t = new Date(timestamp);
-                    log("local file date : " + t.toString());
-                }
-
-                hasTimestamp = true;
-            }
-
-            //set up the URL connection
-            URLConnection connection = source.openConnection();
-            //modify the headers
-            //NB: things like user authentication could go in here too.
-            if (useTimestamp && hasTimestamp) {
-                connection.setIfModifiedSince(timestamp);
-            }
-            // prepare Java 1.1 style credentials
-            if (uname != null || pword != null) {
-                String up = uname + ":" + pword;
-                String encoding;
-                // check to see if sun's Base64 encoder is available.
-                try {
-                    sun.misc.BASE64Encoder encoder =
-                        (sun.misc.BASE64Encoder)
-                        Class.forName("sun.misc.BASE64Encoder").newInstance();
-                    encoding = encoder.encode (up.getBytes());
-
-                } catch (Exception ex) { // sun's base64 encoder isn't available
-                    Base64Converter encoder = new Base64Converter();
-                    encoding = encoder.encode(up.getBytes());
-                }
-                connection.setRequestProperty ("Authorization",
-                                               "Basic " + encoding);
-            }
-
-            //connect to the remote site (may take some time)
-            connection.connect();
-            //next test for a 304 result (HTTP only)
-            if (connection instanceof HttpURLConnection) {
-                HttpURLConnection httpConnection
-                    = (HttpURLConnection) connection;
-                if (httpConnection.getResponseCode()
-                    == HttpURLConnection.HTTP_NOT_MODIFIED)  {
-                    //not modified so no file download. just return
-                    //instead and trace out something so the user
-                    //doesn't think that the download happened when it
-                    //didnt
-                    log("Not modified - so not downloaded");
-                    return;
-                }
-                // test for 401 result (HTTP only)
-                if (httpConnection.getResponseCode()
-                    == HttpURLConnection.HTTP_UNAUTHORIZED)  {
-                    log("Not authorized - check " + dest + " for details");
-                    return;
-                }
-
-            }
-
-            //REVISIT: at this point even non HTTP connections may
-            //support the if-modified-since behaviour -we just check
-            //the date of the content and skip the write if it is not
-            //newer. Some protocols (FTP) dont include dates, of
-            //course.
-
-            InputStream is = null;
-            for (int i = 0; i < 3 ; i++) {
-                try {
-                    is = connection.getInputStream();
-                    break;
-                } catch (IOException ex) {
-                    log("Error opening connection " + ex);
-                }
-            }
-            if (is == null) {
-                log("Can't get " + source + " to " + dest);
-                if (ignoreErrors) {
-                    return;
-                }
-                throw new BuildException("Can't get " + source + " to " + dest,
-                                          location);
-            }
-
-            FileOutputStream fos = new FileOutputStream(dest);
-            boolean finished = false;
-            try {
-                byte[] buffer = new byte[100 * 1024];
-                int length;
-
-                while ((length = is.read(buffer)) >= 0) {
-                    fos.write(buffer, 0, length);
-                    if (verbose) {
-                        System.out.print(".");
-                    }
-                }
-                if (verbose) {
-                    System.out.println();
-                }
-                finished = true;
-            } finally {
-                if (fos != null) {
-                    fos.close();
-                }
-                is.close();
-                // we have started to (over)write dest, but failed.
-                // Try to delete the garbage we'd otherwise leave
-                // behind.
-                if (!finished) {
-                    dest.delete();
-                }
-            }
-
-            //if (and only if) the use file time option is set, then
-            //the saved file now has its timestamp set to that of the
-            //downloaded file
-            if (useTimestamp)  {
-                long remoteTimestamp = connection.getLastModified();
-                if (verbose)  {
-                    Date t = new Date(remoteTimestamp);
-                    log("last modified = " + t.toString()
-                        + ((remoteTimestamp == 0)
-                          ? " - using current time instead"
-                          : ""));
-                }
-                if (remoteTimestamp != 0) {
-                    FileUtils.newFileUtils()
-                        .setFileLastModified(dest, remoteTimestamp);
-                }
-            }
-        } catch (IOException ioe) {
-            log("Error getting " + source + " to " + dest);
-            if (ignoreErrors) {
-                return;
-            }
-            throw new BuildException(ioe, location);
-        }
-    }
-
-    /**
-     * Set the URL.
-     *
-     * @param u URL for the file.
-     */
-    public void setSrc(URL u) {
-        this.source = u;
-    }
-
-    /**
-     * Where to copy the source file.
-     *
-     * @param dest Path to file.
-     */
-    public void setDest(File dest) {
-        this.dest = dest;
-    }
-
-    /**
-     * Be verbose, if set to "<CODE>true</CODE>".
-     *
-     * @param v if "true" then be verbose
-     */
-    public void setVerbose(boolean v) {
-        verbose = v;
-    }
-
-    /**
-     * Don't stop if get fails if set to "<CODE>true</CODE>".
-     *
-     * @param v if "true" then don't report download errors up to ant
-     */
-    public void setIgnoreErrors(boolean v) {
-        ignoreErrors = v;
-    }
-
-    /**
-     * Use timestamps, if set to "<CODE>true</CODE>".
-     *
-     * <p>In this situation, the if-modified-since header is set so
-     * that the file is only fetched if it is newer than the local
-     * file (or there is no local file) This flag is only valid on
-     * HTTP connections, it is ignored in other cases.  When the flag
-     * is set, the local copy of the downloaded file will also have
-     * its timestamp set to the remote file time.</p>
-     *
-     * <p>Note that remote files of date 1/1/1970 (GMT) are treated as
-     * 'no timestamp', and web servers often serve files with a
-     * timestamp in the future by replacing their timestamp with that
-     * of the current time. Also, inter-computer clock differences can
-     * cause no end of grief.</p>
-     * @param v "true" to enable file time fetching
-     */
-    public void setUseTimestamp(boolean v) {
-        if (!JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_1)) {
-            useTimestamp = v;
-        }
-    }
-
-
-    /**
-     * Username for basic auth.
-     *
-     * @param u username for authentication
-     */
-    public void setUsername(String u) {
-        this.uname = u;
-    }
-
-    /**
-     * password for the basic auth.
-     *
-     * @param p password for authentication
-     */
-    public void setPassword(String p) {
-        this.pword = p;
-    }
-
-    /*********************************************************************
-    * BASE 64 encoding of a String or an array of bytes.
-    *
-    * Based on RFC 1421.
-    *
-    * @author
-    *    Unknown
-    * @author
-    *    <a HREF="gg@grtmail.com">Gautam Guliani</a>
-    *********************************************************************/
-
-    class  Base64Converter {
-
-        public final char [ ]  alphabet = {
-            'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',   //  0 to  7
-            'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',   //  8 to 15
-            'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',   // 16 to 23
-            'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f',   // 24 to 31
-            'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',   // 32 to 39
-            'o', 'p', 'q', 'r', 's', 't', 'u', 'v',   // 40 to 47
-            'w', 'x', 'y', 'z', '0', '1', '2', '3',   // 48 to 55
-            '4', '5', '6', '7', '8', '9', '+', '/' }; // 56 to 63
-
-
-        public String  encode(String  s) {
-            return encode (s.getBytes());
-        }
-
-        public String  encode(byte[ ] octetString) {
-            int  bits24;
-            int  bits6;
-
-            char [ ]  out
-              = new char[((octetString.length - 1) / 3 + 1) * 4];
-
-            int outIndex = 0;
-            int i = 0;
-
-            while ((i + 3) <= octetString.length) {
-                // store the octets
-                bits24 = (octetString[i++] & 0xFF) << 16;
-                bits24 |= (octetString[i++] & 0xFF) << 8;
-
-                bits6 = (bits24 & 0x00FC0000) >> 18;
-                out[outIndex++] = alphabet[bits6];
-                bits6 = (bits24 & 0x0003F000) >> 12;
-                out[outIndex++] = alphabet[bits6];
-                bits6  = (bits24 & 0x00000FC0) >> 6;
-                out[outIndex++] = alphabet[bits6];
-                bits6 = (bits24 & 0x0000003F);
-                out[outIndex++] = alphabet[bits6];
-            }
-
-            if (octetString.length - i == 2) {
-                // store the octets
-                bits24 = (octetString[i] & 0xFF) << 16;
-                bits24 |= (octetString[i + 1] & 0xFF) << 8;
-                bits6 = (bits24 & 0x00FC0000) >> 18;
-                out[outIndex++] = alphabet[bits6];
-                bits6 = (bits24 & 0x0003F000) >> 12;
-                out[outIndex++] = alphabet[bits6];
-                bits6 = (bits24 & 0x00000FC0) >> 6;
-                out[outIndex++] = alphabet[bits6];
-
-                // padding
-                out[outIndex++] = '=';
-            } else if (octetString.length - i == 1) {
-                // store the octets
-                bits24 = (octetString[i] & 0xFF) << 16;
-                bits6 = (bits24 & 0x00FC0000) >> 18;
-                out[outIndex++] = alphabet[bits6];
-                bits6 = (bits24 & 0x0003F000) >> 12;
-                out[outIndex++] = alphabet[ bits6 ];
-
-                // padding
-                out[outIndex++] = '=';
-                out[outIndex++] = '=';
-            }
-
-            return new String(out);
-        }
-     }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/Input.java b/src/main/org/apache/tools/ant/taskdefs/Input.java
deleted file mode 100644
index 265c6a8..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Input.java
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import  java.util.Vector;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.input.InputRequest;
-import org.apache.tools.ant.input.MultipleChoiceInputRequest;
-import org.apache.tools.ant.util.StringUtils;
-
-/**
- * Ant task to read input line from console.
- *
- * @author <a href="mailto:usch@usch.net">Ulrich Schmidt</a>
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- *
- * @since Ant 1.5
- *
- * @ant.task category="control"
- */
-public class Input extends Task {
-    private String validargs = null;
-    private String message = "";
-    private String addproperty = null;
-
-    /**
-     * Defines valid input parameters as comma separated String. If set, input
-     * task will reject any input not defined as accepted and requires the user
-     * to reenter it. Validargs are case sensitive. If you want 'a' and 'A' to
-     * be accepted you need to define both values as accepted arguments.
-     *
-     * @param validargs A comma separated String defining valid input args.
-     */
-    public void setValidargs (String validargs) {
-        this.validargs = validargs;
-    }
-
-    /**
-     * Defines the name of a property to be created from input. Behaviour is
-     * according to property task which means that existing properties
-     * cannot be overriden.
-     *
-     * @param addproperty Name for the property to be created from input
-     */
-    public void setAddproperty (String addproperty) {
-        this.addproperty = addproperty;
-    }
-
-    /**
-     * Sets the Message which gets displayed to the user during the build run.
-     * @param message The message to be displayed.
-     */
-    public void setMessage (String message) {
-        this.message = message;
-    }
-
-    /**
-     * Set a multiline message.
-     */
-    public void addText(String msg) {
-        message += getProject().replaceProperties(msg);
-    }
-
-    /**
-     * No arg constructor.
-     */
-    public Input () {
-    }
-
-    /**
-     * Actual test method executed by jakarta-ant.
-     * @exception BuildException
-     */
-    public void execute () throws BuildException {
-        InputRequest request = null;
-        if (validargs != null) {
-            Vector accept = StringUtils.split(validargs, ',');
-            request = new MultipleChoiceInputRequest(message, accept);
-        } else {
-            request = new InputRequest(message);
-        }
-
-        getProject().getInputHandler().handleInput(request);
-
-        if (addproperty != null) {
-            project.setNewProperty(addproperty, request.getInput());
-        }
-    }
-
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/JDBCTask.java b/src/main/org/apache/tools/ant/taskdefs/JDBCTask.java
deleted file mode 100644
index 55534ea..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/JDBCTask.java
+++ /dev/null
@@ -1,490 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.AntClassLoader;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.types.Path;
-import org.apache.tools.ant.types.Reference;
-
-import java.sql.Connection;
-import java.sql.DatabaseMetaData;
-import java.sql.Driver;
-import java.sql.SQLException;
-import java.util.Hashtable;
-import java.util.Properties;
-
-/**
- * Handles JDBC configuration needed by SQL type tasks.
- * <p>
- * The following example class prints the contents of the first column of each row in TableName.
- *</p>
- *<code><pre>
-package examples;
-import java.sql.Connection;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Statement;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.taskdefs.JDBCTask;
-
-public class SQLExampleTask extends JDBCTask {	
-
-    private String tableName;
-
-    public void execute() throws BuildException {
-        Connection conn = getConnection();
-        Statement stmt=null;
-        try {
-            if (tableName == null ) {
-                throw new BuildException("TableName must be specified",location);
-            }             
-            String sql = "SELECT * FROM "+tableName;
-            stmt= conn.createStatement();
-            ResultSet rs = stmt.executeQuery(sql);
-            while (rs.next()) {
-                log(rs.getObject(1).toString());
-            }
-        } catch (SQLException e) {
-        
-        } finally {
-            if (stmt != null) {
-                try {stmt.close();}catch (SQLException ingore){}
-            }
-            if (conn != null) {
-                try {conn.close();}catch (SQLException ingore){}
-            }
-        }
-    }
-    public void setTableName(String tableName) {
-        this.tableName = tableName;
-    }
-
-}
-
- 
-</pre></code>
-
-
- * @author <a href="mailto:nick@chalko.com">Nick Chalko</a>
- * @author <a href="mailto:jeff@custommonkey.org">Jeff Martin</a>
- * @author <A href="mailto:gholam@xtra.co.nz">Michael McCallum</A>
- * @author <A href="mailto:tim.stephenson@sybase.com">Tim Stephenson</A>
- *
- * @since Ant 1.5
- *
- */
-
-public abstract class JDBCTask extends Task {
-
-
-    /**
-     * Used for caching loaders / driver. This is to avoid
-     * getting an OutOfMemoryError when calling this task
-     * multiple times in a row.
-     */
-    private static Hashtable loaderMap = new Hashtable(3);
-
-    private boolean caching = true;
-
-    private Path classpath;
-
-    private AntClassLoader loader;
-
-    /**
-     * Autocommit flag. Default value is false
-     */
-    private boolean autocommit = false;
-
-    /**
-     * DB driver.
-     */
-    private String driver = null;
-
-    /**
-     * DB url.
-     */
-    private String url = null;
-
-    /**
-     * User name.
-     */
-    private String userId = null;
-
-    /**
-     * Password
-     */
-    private String password = null;
-
-    /**
-     * RDBMS Product needed for this SQL.
-     **/
-    private String rdbms = null;
-
-    /**
-     * RDBMS Version needed for this SQL.
-     **/
-    private String version = null;
-
-    /**
-     * Sets the classpath.
-     * @param classpath The classpath to set
-     */
-    public void setClasspath(Path classpath) {
-        this.classpath = classpath;
-    }
-
-    /**
-     * Caching loaders / driver. This is to avoid
-     * getting an OutOfMemoryError when calling this task
-     * multiple times in a row.
-     * @param enable
-     */
-    public void setCaching(boolean enable) {
-        caching = enable;
-    }
-
-    /**
-     * Create the classpath for loading the driver.
-     */
-    public Path createClasspath() {
-        if (this.classpath == null) {
-            this.classpath = new Path(project);
-        }
-        return this.classpath.createPath();
-    }
-
-    /**
-     * Set the classpath for loading the driver using the classpath reference.
-     */
-    public void setClasspathRef(Reference r) {
-        createClasspath().setRefid(r);
-    }
-
-    /**
-     * Sets the driver.
-     * @param driver The driver to set
-     */
-    public void setDriver(String driver) {
-        this.driver = driver;
-    }
-
-    /**
-     * Sets the url.
-     * @param url The url to set
-     */
-    public void setUrl(String url) {
-        this.url = url;
-    }
-
-    /**
-     * Set the user name for the DB connection.
-     */
-    public void setUserid(String userId) {
-        this.userId = userId;
-    }
-
-    /**
-     * Sets the password.
-     * @param password The password to set
-     */
-    public void setPassword(String password) {
-        this.password = password;
-    }
-
-    /**
-     * Sets the autocommit.
-     * @param autocommit The autocommit to set
-     */
-    public void setAutocommit(boolean autocommit) {
-        this.autocommit = autocommit;
-    }
-
-    /**
-     * Sets the rdbms.
-     * @param rdbms The rdbms to set
-     */
-    public void setRdbms(String rdbms) {
-        this.rdbms = rdbms;
-    }
-
-    /**
-     * Sets the version.
-     * @param version The version to set
-     */
-    public void setVersion(String version) {
-        this.version = version;
-    }
-
-    /**
-     * Verify if connected to the correct RDBMS
-     **/
-    protected boolean isValidRdbms(Connection conn) {
-        if (rdbms == null && version == null) {
-            return true;
-        }
-
-        try {
-            DatabaseMetaData dmd = conn.getMetaData();
-
-            if (rdbms != null) {
-                String theVendor = dmd.getDatabaseProductName().toLowerCase();
-
-                log("RDBMS = " + theVendor, Project.MSG_VERBOSE);
-                if (theVendor == null || theVendor.indexOf(rdbms) < 0) {
-                    log("Not the required RDBMS: " + rdbms, Project.MSG_VERBOSE);
-                    return false;
-                }
-            }
-
-            if (version != null) {
-                // XXX maybe better toLowerCase(Locale.US)
-                String theVersion = dmd.getDatabaseProductVersion().toLowerCase();
-
-                log("Version = " + theVersion, Project.MSG_VERBOSE);
-                if (theVersion == null
-                        || !(theVersion.startsWith(version) || theVersion.indexOf(" " + version) >= 0)) {
-                    log("Not the required version: \"" + version + "\"", Project.MSG_VERBOSE);
-                    return false;
-                }
-            }
-        } catch (SQLException e) {
-            // Could not get the required information
-            log("Failed to obtain required RDBMS information", Project.MSG_ERR);
-            return false;
-        }
-
-        return true;
-    }
-
-    protected static Hashtable getLoaderMap() {
-        return loaderMap;
-    }
-
-    protected AntClassLoader getLoader() {
-        return loader;
-    }
-
-    /**
-     * Creates a new Connection as using the driver, url, userid and password specified.
-     * The calling method is responsible for closing the connection.
-     * @return Connection the newly created connection.
-     * @throws BuildException if the UserId/Password/Url is not set or there is no suitable driver or the driver fails to load.
-     */
-    protected Connection getConnection() throws BuildException {
-        if (userId == null) {
-            throw new BuildException("User Id attribute must be set!", location);
-        }
-        if (password == null) {
-            throw new BuildException("Password attribute must be set!", location);
-        }
-        if (url == null) {
-            throw new BuildException("Url attribute must be set!", location);
-        }
-        try {
-
-            log("connecting to " + getUrl(), Project.MSG_VERBOSE);
-            Properties info = new Properties();
-            info.put("user", getUserId());
-            info.put("password", getPassword());
-            Connection conn = getDriver().connect(getUrl(), info);
-
-            if (conn == null) {
-                // Driver doesn't understand the URL
-                throw new SQLException("No suitable Driver for " + url);
-            }
-
-            conn.setAutoCommit(autocommit);
-            return conn;
-        } catch (SQLException e) {
-            throw new BuildException(e, location);
-        }
-
-    }
-
-    /**
-     * Gets an instance of the required driver.
-     * Uses the ant class loader and the optionally the provided classpath.
-     * @return Driver
-     * @throws BuildException
-     */
-    private Driver getDriver() throws BuildException {
-        if (driver == null) {
-            throw new BuildException("Driver attribute must be set!", location);
-        }
-
-        Driver driverInstance = null;
-        try {
-            Class dc;
-            if (classpath != null) {
-                // check first that it is not already loaded otherwise
-                // consecutive runs seems to end into an OutOfMemoryError
-                // or it fails when there is a native library to load
-                // several times.
-                // this is far from being perfect but should work
-                // in most cases.
-                synchronized (loaderMap) {
-                    if (caching) {
-                        loader = (AntClassLoader) loaderMap.get(driver);
-                    }
-                    if (loader == null) {
-                        log(
-                                "Loading " + driver + " using AntClassLoader with classpath " + classpath,
-                                Project.MSG_VERBOSE);
-                        loader = new AntClassLoader(project, classpath);
-                        if (caching) {
-                            loaderMap.put(driver, loader);
-                        }
-                    } else {
-                        log(
-                                "Loading " + driver + " using a cached AntClassLoader.",
-                                Project.MSG_VERBOSE);
-                    }
-                }
-                dc = loader.loadClass(driver);
-            } else {
-                log("Loading " + driver + " using system loader.", Project.MSG_VERBOSE);
-                dc = Class.forName(driver);
-            }
-            driverInstance = (Driver) dc.newInstance();
-        } catch (ClassNotFoundException e) {
-            throw new BuildException(
-                    "Class Not Found: JDBC driver " + driver + " could not be loaded",
-                    location);
-        } catch (IllegalAccessException e) {
-            throw new BuildException(
-                    "Illegal Access: JDBC driver " + driver + " could not be loaded",
-                    location);
-        } catch (InstantiationException e) {
-            throw new BuildException(
-                    "Instantiation Exception: JDBC driver " + driver + " could not be loaded",
-                    location);
-        }
-        return driverInstance;
-    }
-
-
-    public void isCaching(boolean value) {
-        caching = value;
-    }
-
-    /**
-     * Gets the classpath.
-     * @return Returns a Path
-     */
-    public Path getClasspath() {
-        return classpath;
-    }
-
-    /**
-     * Gets the autocommit.
-     * @return Returns a boolean
-     */
-    public boolean isAutocommit() {
-        return autocommit;
-    }
-
-    /**
-     * Gets the url.
-     * @return Returns a String
-     */
-    public String getUrl() {
-        return url;
-    }
-
-    /**
-     * Gets the userId.
-     * @return Returns a String
-     */
-    public String getUserId() {
-        return userId;
-    }
-
-    /**
-     * Sets the userId.
-     * @param userId The userId to set
-     */
-    public void setUserId(String userId) {
-        this.userId = userId;
-    }
-
-    /**
-     * Gets the password.
-     * @return Returns a String
-     */
-    public String getPassword() {
-        return password;
-    }
-
-    /**
-     * Gets the rdbms.
-     * @return Returns a String
-     */
-    public String getRdbms() {
-        return rdbms;
-    }
-
-    /**
-     * Gets the version.
-     * @return Returns a String
-     */
-    public String getVersion() {
-        return version;
-    }
-
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/Jar.java b/src/main/org/apache/tools/ant/taskdefs/Jar.java
deleted file mode 100644
index b887eb7..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Jar.java
+++ /dev/null
@@ -1,501 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.FileScanner;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.types.ZipFileSet;
-import org.apache.tools.ant.types.EnumeratedAttribute;
-import org.apache.tools.zip.ZipOutputStream;
-
-import java.io.IOException;
-import java.io.File;
-import java.io.InputStream;
-import java.io.Reader;
-import java.io.FileReader;
-import java.io.ByteArrayOutputStream;
-import java.io.PrintWriter;
-import java.io.ByteArrayInputStream;
-import java.io.OutputStreamWriter;
-import java.io.InputStreamReader;
-import java.util.Enumeration;
-
-
-/**
- * Creates a JAR archive.
- *
- * @author James Davidson <a href="mailto:duncan@x180.com">duncan@x180.com</a>
- * @author Brian Deitte 
- *         <a href="mailto:bdeitte@macromedia.com">bdeitte@macromedia.com</a>
- *
- * @since Ant 1.1
- *
- * @ant.task category="packaging"
- */
-public class Jar extends Zip {
-    /** The index file name. */
-    private static final String INDEX_NAME = "META-INF/INDEX.LIST";
-
-    /** merged manifests added through addConfiguredManifest */
-    private Manifest configuredManifest;
-    /** shadow of the above if upToDate check alters the value */
-    private Manifest savedConfiguredManifest;
-
-    /**  merged manifests added through filesets */
-    private Manifest filesetManifest;
-
-    /**
-     *  whether to merge fileset manifests;
-     *  value is true if filesetmanifest is 'merge' or 'mergewithoutmain'
-     */
-    private boolean mergeManifests = false;
-
-    /**
-     * whether to merge the main section of fileset manifests;
-     * value is true if filesetmanifest is 'merge'
-     */
-    private boolean mergeManifestsMain = false;
-
-    /** the manifest specified by the 'manifest' attribute **/
-    private Manifest manifest;
-
-    /**
-     * The file found from the 'manifest' attribute.  This can be
-     * either the location of a manifest, or the name of a jar added
-     * through a fileset.  If its the name of an added jar, the
-     * manifest is looked for in META-INF/MANIFEST.MF
-     */
-    private File manifestFile;
-
-    /** jar index is JDK 1.3+ only */
-    private boolean index = false;
-
-    /** constructor */
-    public Jar() {
-        super();
-        archiveType = "jar";
-        emptyBehavior = "create";
-        setEncoding("UTF8");
-    }
-
-    public void setWhenempty(WhenEmpty we) {
-        log("JARs are never empty, they contain at least a manifest file",
-            Project.MSG_WARN);
-    }
-
-    /**
-     * @deprecated Use setDestFile(File) instead
-     */
-    public void setJarfile(File jarFile) {
-        setDestFile(jarFile);
-    }
-
-    /**
-     * Set whether or not to create an index list for classes
-     * to speed up classloading.
-     */
-    public void setIndex(boolean flag){
-        index = flag;
-    }
-
-    public void addConfiguredManifest(Manifest newManifest) 
-        throws ManifestException {
-        if (configuredManifest == null) {
-            configuredManifest = newManifest;
-        } else {
-            configuredManifest.merge(newManifest);
-        }
-        savedConfiguredManifest = configuredManifest;
-    }
-
-    public void setManifest(File manifestFile) {
-        if (!manifestFile.exists()) {
-            throw new BuildException("Manifest file: " + manifestFile +
-                                     " does not exist.", getLocation());
-        }
-
-        this.manifestFile = manifestFile;
-    }
-
-    private Manifest getManifest(File manifestFile) {
-
-        Manifest newManifest = null;
-        Reader r = null;
-        try {
-            r = new FileReader(manifestFile);
-            newManifest = getManifest(r);
-        } catch (IOException e) {
-            throw new BuildException("Unable to read manifest file: " 
-                                     + manifestFile 
-                                     + " (" + e.getMessage() + ")", e);
-        } finally {
-            if (r != null) {
-                try {
-                    r.close();
-                } catch (IOException e) {
-                    // do nothing
-                }
-            }
-        }
-        return newManifest;
-    }
-
-    private Manifest getManifest(Reader r) {
-
-        Manifest newManifest = null;
-        try {
-            newManifest = new Manifest(r);
-        } catch (ManifestException e) {
-            log("Manifest is invalid: " + e.getMessage(), Project.MSG_ERR);
-            throw new BuildException("Invalid Manifest: " + manifestFile, 
-                                     e, getLocation());
-        } catch (IOException e) {
-            throw new BuildException("Unable to read manifest file"
-                                     + " (" + e.getMessage() + ")", e);
-        }
-        return newManifest;
-    }
-
-    public void setFilesetmanifest(FilesetManifestConfig config) {
-        String filesetManifestConfig = config.getValue();
-        mergeManifests = !("skip".equals(filesetManifestConfig));
-        mergeManifestsMain = "merge".equals(filesetManifestConfig);
-    }
-
-    public void addMetainf(ZipFileSet fs) {
-        // We just set the prefix for this fileset, and pass it up.
-        fs.setPrefix("META-INF/");
-        super.addFileset(fs);
-    }
-
-    protected void initZipOutputStream(ZipOutputStream zOut)
-        throws IOException, BuildException {
-        String ls = System.getProperty("line.separator");
-
-        try {
-            Manifest finalManifest = Manifest.getDefaultManifest();
-
-            if (manifest == null) {
-                if (manifestFile != null) {
-                    // if we haven't got the manifest yet, attempt to
-                    // get it now and have manifest be the final merge
-                    manifest = getManifest(manifestFile);
-                    finalManifest.merge(filesetManifest);
-                    finalManifest.merge(configuredManifest);
-                    finalManifest.merge(manifest, !mergeManifestsMain);
-                } else if (configuredManifest != null) {
-                    // configuredManifest is the final merge
-                    finalManifest.merge(filesetManifest);
-                    finalManifest.merge(configuredManifest, 
-                                        !mergeManifestsMain);
-                } else if (filesetManifest != null) {
-                    // filesetManifest is the final (and only) merge
-                    finalManifest.merge(filesetManifest, !mergeManifestsMain);
-                }
-            } else {
-                // manifest is the final merge
-                finalManifest.merge(filesetManifest);
-                finalManifest.merge(configuredManifest);
-                finalManifest.merge(manifest, !mergeManifestsMain);
-            }
-
-            for (Enumeration e = finalManifest.getWarnings(); 
-                 e.hasMoreElements();) {
-                log("Manifest warning: " + (String) e.nextElement(), 
-                    Project.MSG_WARN);
-            }
-
-            // need to set the line.separator as \r\n due to a bug
-            // with the jar verifier
-            System.getProperties().put("line.separator", "\r\n");
-
-            zipDir(null, zOut, "META-INF/");
-            // time to write the manifest
-            ByteArrayOutputStream baos = new ByteArrayOutputStream();
-            PrintWriter writer = new PrintWriter(baos);
-            finalManifest.write(writer);
-            writer.flush();
-
-            ByteArrayInputStream bais = 
-                new ByteArrayInputStream(baos.toByteArray());
-            super.zipFile(bais, zOut, "META-INF/MANIFEST.MF", 
-                          System.currentTimeMillis(), null);
-            super.initZipOutputStream(zOut);
-        } catch (ManifestException e) {
-            log("Manifest is invalid: " + e.getMessage(), Project.MSG_ERR);
-            throw new BuildException("Invalid Manifest", e, getLocation());
-        } finally {
-            System.getProperties().put("line.separator", ls);
-        }
-    }
-
-    protected void finalizeZipOutputStream(ZipOutputStream zOut)
-            throws IOException, BuildException {
-        if (index) {
-            createIndexList(zOut);
-        }
-    }
-
-    /**
-     * Create the index list to speed up classloading.
-     * This is a JDK 1.3+ specific feature and is enabled by default. See
-     * <a href="http://java.sun.com/j2se/1.3/docs/guide/jar/jar.html#JAR+Index">
-     * the JAR index specification</a> for more details.
-     *
-     * @param zOut the zip stream representing the jar being built.
-     * @throws IOException thrown if there is an error while creating the
-     * index and adding it to the zip stream.
-     */
-    private void createIndexList(ZipOutputStream zOut) throws IOException {
-        ByteArrayOutputStream baos = new ByteArrayOutputStream();
-        // encoding must be UTF8 as specified in the specs.
-        PrintWriter writer = new PrintWriter(new OutputStreamWriter(baos, 
-                                                                    "UTF8"));
-
-        // version-info blankline
-        writer.println("JarIndex-Version: 1.0");
-        writer.println();
-
-        // header newline
-        writer.println(zipFile.getName());
-
-        // JarIndex is sorting the directories by ascending order.
-        // it's painful to do in JDK 1.1 and it has no value but cosmetic
-        // since it will be read into a hashtable by the classloader.
-        Enumeration enum = addedDirs.keys();
-        while (enum.hasMoreElements()) {
-            String dir = (String) enum.nextElement();
-
-            // try to be smart, not to be fooled by a weird directory name
-            // @fixme do we need to check for directories starting by ./ ?
-            dir = dir.replace('\\', '/');
-            int pos = dir.lastIndexOf('/');
-            if (pos != -1){
-                dir = dir.substring(0, pos);
-            }
-
-            // looks like nothing from META-INF should be added
-            // and the check is not case insensitive.
-            // see sun.misc.JarIndex
-            if (dir.startsWith("META-INF")) {
-                continue;
-            }
-            // name newline
-            writer.println(dir);
-        }
-
-        writer.flush();
-        ByteArrayInputStream bais = 
-            new ByteArrayInputStream(baos.toByteArray());
-        super.zipFile(bais, zOut, INDEX_NAME, System.currentTimeMillis(), null);
-    }
-
-    /**
-     * Overriden from Zip class to deal with manifests
-     */
-    protected void zipFile(File file, ZipOutputStream zOut, String vPath)
-        throws IOException {
-        if ("META-INF/MANIFEST.MF".equalsIgnoreCase(vPath))  {
-            filesetManifest(file, null);
-        } else {
-            super.zipFile(file, zOut, vPath);
-        }
-    }
-
-    /**
-     * Overriden from Zip class to deal with manifests
-     */
-    protected void zipFile(InputStream is, ZipOutputStream zOut, String vPath,
-                           long lastModified, File file)
-        throws IOException {
-        if ("META-INF/MANIFEST.MF".equalsIgnoreCase(vPath))  {
-            filesetManifest(file, is);
-        } else {
-            super.zipFile(is, zOut, vPath, lastModified, null);
-        }
-    }
-
-    private void filesetManifest(File file, InputStream is) {
-        if (manifestFile != null && manifestFile.equals(file)) {
-            // If this is the same name specified in 'manifest', this
-            // is the manifest to use
-            log("Found manifest " + file, Project.MSG_VERBOSE);
-            if (is != null) {
-                manifest = getManifest(new InputStreamReader(is));
-            } else {
-                manifest = getManifest(file);
-            }
-        } else if (mergeManifests) {
-            // we add this to our group of fileset manifests
-            log("Found manifest to merge in file " + file, 
-                Project.MSG_VERBOSE);
-
-            try {
-                Manifest newManifest = getManifest(new InputStreamReader(is));
-                if (filesetManifest == null) {
-                    filesetManifest = newManifest;
-                } else {
-                    filesetManifest.merge(newManifest);
-                }
-            } catch (ManifestException e) {
-                log("Manifest in file " + file + " is invalid: " 
-                    + e.getMessage(), Project.MSG_ERR);
-                throw new BuildException("Invalid Manifest", e, getLocation());
-            }
-        } else {
-            // assuming 'skip' otherwise
-            log("File " + file 
-                + " includes a META-INF/MANIFEST.MF which will be ignored. " 
-                + "To include this file, set filesetManifest to a value other "
-                + "than 'skip'.", Project.MSG_WARN);
-        }
-    }
-
-    /**
-     * Check whether the archive is up-to-date;
-     * @param scanners list of prepared scanners containing files to archive
-     * @param zipFile intended archive file (may or may not exist)
-     * @return true if nothing need be done (may have done something
-     *         already); false if archive creation should proceed
-     * @exception BuildException if it likes
-     */
-    protected boolean isUpToDate(FileScanner[] scanners, File zipFile) 
-        throws BuildException {
-        // need to handle manifest as a special check
-        if (configuredManifest != null || manifestFile == null) {
-            java.util.zip.ZipFile theZipFile = null;
-            try {
-                theZipFile = new java.util.zip.ZipFile(zipFile);
-                java.util.zip.ZipEntry entry = 
-                    theZipFile.getEntry("META-INF/MANIFEST.MF");
-                if (entry == null) {
-                    log("Updating jar since the current jar has no manifest", 
-                        Project.MSG_VERBOSE);
-                    return false;
-                }
-                Manifest currentManifest = 
-                    new Manifest(new InputStreamReader(theZipFile
-                                                       .getInputStream(entry)));
-                if (configuredManifest == null) {
-                    configuredManifest = Manifest.getDefaultManifest();
-                }
-                if (!currentManifest.equals(configuredManifest)) {
-                    log("Updating jar since jar manifest has changed", 
-                        Project.MSG_VERBOSE);
-                    return false;
-                }
-            } catch (Exception e) {
-                // any problems and we will rebuild
-                log("Updating jar since cannot read current jar manifest: " 
-                    + e.getClass().getName() + " - " + e.getMessage(),
-                    Project.MSG_VERBOSE);
-                return false;
-            } finally {
-                if (theZipFile != null) {
-                    try {
-                        theZipFile.close();
-                    } catch (IOException e) {
-                        //ignore
-                    }
-                }
-            }
-        } else if (manifestFile.lastModified() > zipFile.lastModified()) {
-            return false;
-        }
-        return super.isUpToDate(scanners, zipFile);
-    }
-
-    protected boolean createEmptyZip(File zipFile) {
-        // Jar files always contain a manifest and can never be empty
-        return true;
-    }
-
-    /**
-     * Make sure we don't think we already have a MANIFEST next time this task
-     * gets executed.
-     *
-     * @see Zip#cleanUp
-     */
-    protected void cleanUp() {
-        super.cleanUp();
-
-        manifest = null;
-        configuredManifest = savedConfiguredManifest;
-        filesetManifest = null;
-    }
-
-    /**
-     * reset to default values.
-     *
-     * @see Zip#reset
-     *
-     * @since 1.44, Ant 1.5
-     */
-    public void reset() {
-        super.reset();
-        configuredManifest = null;
-        mergeManifests = false;
-        mergeManifestsMain = false;
-        manifestFile = null;
-        index = false;
-    }
-
-    public static class FilesetManifestConfig extends EnumeratedAttribute {
-        public String[] getValues() {
-            return new String[] {"skip", "merge", "mergewithoutmain"};
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/Java.java b/src/main/org/apache/tools/ant/taskdefs/Java.java
deleted file mode 100644
index 8e7b320..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Java.java
+++ /dev/null
@@ -1,502 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights 
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.ExitException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.types.Commandline;
-import org.apache.tools.ant.types.Path;
-import org.apache.tools.ant.types.CommandlineJava;
-import org.apache.tools.ant.types.Reference;
-import org.apache.tools.ant.types.Environment;
-
-import java.io.File;
-import java.io.PrintStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-
-import java.util.Vector;
-
-/**
- * This task acts as a loader for java applications but allows to use
- * the same JVM for the called application thus resulting in much
- * faster operation.
- *
- * @author Stefano Mazzocchi 
- *         <a href="mailto:stefano@apache.org">stefano@apache.org</a>
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- *
- * @since Ant 1.1
- *
- * @ant.task category="java"
- */
-public class Java extends Task {
-
-    private CommandlineJava cmdl = new CommandlineJava();
-    private Environment env = new Environment();
-    private boolean fork = false;
-    private boolean newEnvironment = false;
-    private File dir = null;
-    private File out;
-    private PrintStream outStream = null;
-    private boolean failOnError = false;
-    private boolean append = false;
-    private Long timeout = null;
-    
-    /**
-     * Do the execution.
-     */
-    public void execute() throws BuildException {
-        File savedDir = dir;
-
-        int err = -1;
-        try {
-            if ((err = executeJava()) != 0) { 
-                if (failOnError) {
-                    throw new BuildException("Java returned: " + err, location);
-                } else {
-                    log("Java Result: " + err, Project.MSG_ERR);
-                }
-            }
-        } finally {
-            dir = savedDir;
-        }
-    }
-
-    /**
-     * Do the execution and return a return code.
-     *
-     * @return the return code from the execute java class if it was
-     * executed in a separate VM (fork = "yes").
-     */
-    public int executeJava() throws BuildException {
-        String classname = cmdl.getClassname();
-        if (classname == null && cmdl.getJar() == null) {
-            throw new BuildException("Classname must not be null.");
-        }
-
-        if (!fork && cmdl.getJar() != null){
-            throw new BuildException("Cannot execute a jar in non-forked mode."
-                                     + " Please set fork='true'. ");
-        }
-
-        if (fork) {
-            log(cmdl.describeCommand(), Project.MSG_VERBOSE);
-        } else {
-            if (cmdl.getVmCommand().size() > 1) {
-                log("JVM args ignored when same JVM is used.", 
-                    Project.MSG_WARN);
-            }
-            if (dir != null) {
-                log("Working directory ignored when same JVM is used.", 
-                    Project.MSG_WARN);
-            }
-
-            if (newEnvironment || null != env.getVariables()) {
-                log("Changes to environment variables are ignored when same "
-                    + "JVM is used.", Project.MSG_WARN);
-            }
-
-            log("Running in same VM " + cmdl.describeJavaCommand(), 
-                Project.MSG_VERBOSE);
-        }
-        
-        try {
-            if (fork) {
-                return run(cmdl.getCommandline());
-            } else {
-                try {
-                    run(cmdl);
-                    return 0;
-                } catch (ExitException ex) {
-                    return ex.getStatus();
-                }
-            }
-        } catch (BuildException e) {
-            if (failOnError) {
-                throw e;
-            } else {
-                log(e.getMessage(), Project.MSG_ERR);
-                return 0;
-            }
-        } catch (Throwable t) {
-            if (failOnError) {
-                throw new BuildException(t);
-            } else {
-                log(t.getMessage(), Project.MSG_ERR);
-                return 0;
-            }
-        }
-    }
-
-    /**
-     * Set the classpath to be used when running the Java class
-     * 
-     * @param s an Ant Path object containing the classpath.
-     */
-    public void setClasspath(Path s) {
-        createClasspath().append(s);
-    }
-    
-    /**
-     * Creates a nested classpath element
-     */
-    public Path createClasspath() {
-        return cmdl.createClasspath(project).createPath();
-    }
-
-    /**
-     * Adds a reference to a CLASSPATH defined elsewhere.
-     */
-    public void setClasspathRef(Reference r) {
-        createClasspath().setRefid(r);
-    }
-
-    /**
-     * set the jar name...
-     */
-    public void setJar(File jarfile) throws BuildException {
-        if (cmdl.getClassname() != null){
-            throw new BuildException("Cannot use 'jar' and 'classname' "
-                                     + "attributes in same command.");
-        }
-        cmdl.setJar(jarfile.getAbsolutePath());
-    }
-
-    /**
-     * Set the class name.
-     */
-    public void setClassname(String s) throws BuildException {
-        if (cmdl.getJar() != null){
-            throw new BuildException("Cannot use 'jar' and 'classname' "
-                                     + "attributes in same command");
-        }
-        cmdl.setClassname(s);
-    }
-
-    /**
-     * Set the command line arguments for the class.
-     */
-    public void setArgs(String s) {
-        log("The args attribute is deprecated. " +
-            "Please use nested arg elements.",
-            Project.MSG_WARN);
-        cmdl.createArgument().setLine(s);
-    }
-
-    /**
-     * Creates a nested arg element.
-     */
-    public Commandline.Argument createArg() {
-        return cmdl.createArgument();
-    }
-
-    /**
-     * Set the forking flag.
-     */
-    public void setFork(boolean s) {
-        this.fork = s;
-    }
-
-    /**
-     * Set the command line arguments for the JVM.
-     */
-    public void setJvmargs(String s) {
-        log("The jvmargs attribute is deprecated. " +
-            "Please use nested jvmarg elements.",
-            Project.MSG_WARN);
-        cmdl.createVmArgument().setLine(s);
-    }
-        
-    /**
-     * Creates a nested jvmarg element.
-     */
-    public Commandline.Argument createJvmarg() {
-        return cmdl.createVmArgument();
-    }
-
-    /**
-     * Set the command used to start the VM (only if fork==false).
-     */
-    public void setJvm(String s) {
-        cmdl.setVm(s);
-    }
-        
-    /**
-     * Add a nested sysproperty element.
-     */
-    public void addSysproperty(Environment.Variable sysp) {
-        cmdl.addSysproperty(sysp);
-    }
-
-    /**
-     * Throw a BuildException if process returns non 0.
-     */
-    public void setFailonerror(boolean fail) {
-        failOnError = fail;
-    }
-
-    /**
-     * The working directory of the process
-     */
-    public void setDir(File d) {
-        this.dir = d;
-    }
-
-    /**
-     * File the output of the process is redirected to.
-     */
-    public void setOutput(File out) {
-        this.out = out;
-    }
-
-    /**
-     * -mx or -Xmx depending on VM version
-     */
-    public void setMaxmemory(String max){
-        cmdl.setMaxmemory(max);
-    }
-
-    public void setJVMVersion(String value) {
-        cmdl.setVmversion(value);
-    }
-    
-    /**
-     * Add a nested env element - an environment variable.
-     *
-     * <p>Will be ignored if we are not forking a new VM.
-     *
-     * @since Ant 1.5
-     */
-    public void addEnv(Environment.Variable var) {
-        env.addVariable(var);
-    }
-
-    /**
-     * Use a completely new environment.
-     *
-     * <p>Will be ignored if we are not forking a new VM.
-     *
-     * @since Ant 1.5
-     */
-    public void setNewenvironment(boolean newenv) {
-        newEnvironment = newenv;
-    }
-
-    /**
-     * Shall we append to an existing file?
-     *
-     * @since Ant 1.5
-     */
-    public void setAppend(boolean append) {
-        this.append = append;
-    }
-
-    /**
-     * Timeout in milliseconds after which the process will be killed.
-     *
-     * @since Ant 1.5
-     */
-    public void setTimeout(Long value) {
-        timeout = value;
-    }
-
-    /**
-     * Pass output sent to System.out to specified output file.
-     *
-     * @since Ant 1.5
-     */
-    protected void handleOutput(String line) {
-        if (outStream != null) {
-            outStream.println(line);
-        } else {
-            super.handleOutput(line);
-        }
-    }
-    
-    /**
-     * Pass output sent to System.err to specified output file.
-     *
-     * @since Ant 1.5
-     */
-    protected void handleErrorOutput(String line) {
-        if (outStream != null) {
-            outStream.println(line);
-        } else {
-            super.handleErrorOutput(line);
-        }
-    }
-    
-    /**
-     * Executes the given classname with the given arguments as it
-     * was a command line application.
-     */
-    private void run(CommandlineJava command) throws BuildException {
-        ExecuteJava exe = new ExecuteJava();
-        exe.setJavaCommand(command.getJavaCommand());
-        exe.setClasspath(command.getClasspath());
-        exe.setSystemProperties(command.getSystemProperties());
-        exe.setTimeout(timeout);
-        if (out != null) {
-            try {
-                outStream = 
-                    new PrintStream(new FileOutputStream(out.getAbsolutePath(),
-                                                         append));
-                exe.execute(project);
-            } catch (IOException io) {
-                throw new BuildException(io, location);
-            } finally {
-                if (outStream != null) {
-                    outStream.close();
-                }
-            }
-        } else {
-            exe.execute(project);
-        }
-    }
-
-    /**
-     * Executes the given classname with the given arguments in a separate VM.
-     */
-    private int run(String[] command) throws BuildException {
-        FileOutputStream fos = null;
-        try {
-            Execute exe = null;
-            if (out == null) {
-                exe = new Execute(new LogStreamHandler(this, Project.MSG_INFO,
-                                                       Project.MSG_WARN), 
-                                  createWatchdog());
-            } else {
-                fos = new FileOutputStream(out.getAbsolutePath(), append);
-                exe = new Execute(new PumpStreamHandler(fos),
-                                  createWatchdog());
-            }
-            
-            exe.setAntRun(project);
-            
-            if (dir == null) {
-                dir = project.getBaseDir();
-            } else if (!dir.exists() || !dir.isDirectory()) {
-                throw new BuildException(dir.getAbsolutePath()
-                                         + " is not a valid directory",
-                                         location);
-            }
-            
-            exe.setWorkingDirectory(dir);
-            
-            String[] environment = env.getVariables();
-            if (environment != null) {
-                for (int i = 0; i < environment.length; i++) {
-                    log("Setting environment variable: " + environment[i],
-                        Project.MSG_VERBOSE);
-                }
-            }
-            exe.setNewenvironment(newEnvironment);
-            exe.setEnvironment(environment);
-
-            exe.setCommandline(command);
-            try {
-                int rc = exe.execute();
-                if (exe.killedProcess()) {
-                    log("Timeout: killed the sub-process", Project.MSG_WARN); 
-                }
-                return rc;
-            } catch (IOException e) {
-                throw new BuildException(e, location);
-            }
-        } catch (IOException io) {
-            throw new BuildException(io, location);
-        } finally {
-            if (fos != null) {
-                try {fos.close();} catch (IOException io) {}
-            }
-        }
-    }
-
-    /**
-     * Executes the given classname with the given arguments as it
-     * was a command line application.
-     */
-    protected void run(String classname, Vector args) throws BuildException {
-        CommandlineJava cmdj = new CommandlineJava();
-        cmdj.setClassname(classname);
-        for (int i = 0; i < args.size(); i++) {
-            cmdj.createArgument().setValue((String) args.elementAt(i));
-        }
-        run(cmdj);
-    }
-
-    /**
-     * Clear out the arguments to this java task.
-     */
-    public void clearArgs() {
-        cmdl.clearJavaArgs();
-    }
-
-    /**
-     * Create the Watchdog to kill a runaway process.
-     *
-     * @since Ant 1.5
-     */
-    protected ExecuteWatchdog createWatchdog() throws BuildException {
-        if (timeout == null) {
-            return null;
-        }
-        return new ExecuteWatchdog(timeout.longValue());
-    }
-
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/Javac.java b/src/main/org/apache/tools/ant/taskdefs/Javac.java
deleted file mode 100644
index 34938ed..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Javac.java
+++ /dev/null
@@ -1,841 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.DirectoryScanner;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.types.Path;
-import org.apache.tools.ant.types.Reference;
-import org.apache.tools.ant.util.GlobPatternMapper;
-import org.apache.tools.ant.util.JavaEnvUtils;
-import org.apache.tools.ant.util.SourceFileScanner;
-import org.apache.tools.ant.util.facade.FacadeTaskHelper;
-import org.apache.tools.ant.taskdefs.compilers.CompilerAdapter;
-import org.apache.tools.ant.taskdefs.compilers.CompilerAdapterFactory;
-
-import java.io.File;
-
-/**
- * Task to compile Java source files. This task can take the following
- * arguments:
- * <ul>
- * <li>sourcedir
- * <li>destdir
- * <li>deprecation
- * <li>classpath
- * <li>bootclasspath
- * <li>extdirs
- * <li>optimize
- * <li>debug
- * <li>encoding
- * <li>target
- * <li>depend
- * <li>vebose
- * <li>failonerror
- * <li>includeantruntime
- * <li>includejavaruntime
- * <li>source
- * <li>compiler
- * </ul>
- * Of these arguments, the <b>sourcedir</b> and <b>destdir</b> are required.
- * <p>
- * When this task executes, it will recursively scan the sourcedir and
- * destdir looking for Java source files to compile. This task makes its
- * compile decision based on timestamp.
- *
- * @author James Davidson <a href="mailto:duncan@x180.com">duncan@x180.com</a>
- * @author Robin Green 
- *         <a href="mailto:greenrd@hotmail.com">greenrd@hotmail.com</a>
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- * @author <a href="mailto:jayglanville@home.com">J D Glanville</a>
- *
- * @version $Revision$
- *
- * @since Ant 1.1
- *
- * @ant.task category="java"
- */
-
-public class Javac extends MatchingTask {
-
-    private static final String FAIL_MSG
-        = "Compile failed; see the compiler error output for details.";
-
-    private Path src;
-    private File destDir;
-    private Path compileClasspath;
-    private Path compileSourcepath;
-    private String encoding;
-    private boolean debug = false;
-    private boolean optimize = false;
-    private boolean deprecation = false;
-    private boolean depend = false;
-    private boolean verbose = false;
-    private String target;
-    private Path bootclasspath;
-    private Path extdirs;
-    private boolean includeAntRuntime = true;
-    private boolean includeJavaRuntime = false;
-    private boolean fork = false;
-    private String forkedExecutable = null;
-    private boolean nowarn = false;
-    private String memoryInitialSize;
-    private String memoryMaximumSize;
-    private FacadeTaskHelper facade = null;
-
-    protected boolean failOnError = true;
-    protected boolean listFiles = false;
-    protected File[] compileList = new File[0];
-
-    private String source;
-    private String debugLevel;
-
-    /**
-     * Javac task for compilation of Java files.
-     */
-    public Javac() {
-        if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_1)) {
-            facade = new FacadeTaskHelper("javac1.1");
-        } else if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_2)) {
-            facade = new FacadeTaskHelper("javac1.2");
-        } else if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_3)) {
-            facade = new FacadeTaskHelper("javac1.3");
-        } else if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_4)) {
-            facade = new FacadeTaskHelper("javac1.4");
-        } else {
-            facade = new FacadeTaskHelper("classic");
-        }
-    }
-
-    /**
-     * Get the value of debugLevel.
-     * @return value of debugLevel.
-     */
-    public String getDebugLevel() {
-        return debugLevel;
-    }
-
-    /**
-     * Set the value of debugLevel.
-     * @param v  Value to assign to debugLevel.
-     */
-    public void setDebugLevel(String  v) {
-        this.debugLevel = v;
-    }
-
-    /**
-     * Get the value of source.
-     * @return value of source.
-     */
-    public String getSource() {
-        return source;
-    }
-
-    /**
-     * Set the value of source.
-     * @param v  Value to assign to source.
-     */
-    public void setSource(String  v) {
-        this.source = v;
-    }
-
-    /**
-     * Create a nested src element for multiple source path
-     * support.
-     *
-     * @return a nested src element.
-     */
-    public Path createSrc() {
-        if (src == null) {
-            src = new Path(project);
-        }
-        return src.createPath();
-    }
-
-    /**
-     * Recreate src
-     *
-     * @return a nested src element.
-     */
-    protected Path recreateSrc() {
-        src = null;
-        return createSrc();
-    }
-
-    /**
-     * Set the source dirs to find the source Java files.
-     */
-    public void setSrcdir(Path srcDir) {
-        if (src == null) {
-            src = srcDir;
-        } else {
-            src.append(srcDir);
-        }
-    }
-
-    /** Gets the source dirs to find the source java files. */
-    public Path getSrcdir() {
-        return src;
-    }
-
-    /**
-     * Set the destination directory into which the Java source
-     * files should be compiled.
-     */
-    public void setDestdir(File destDir) {
-        this.destDir = destDir;
-    }
-
-    /**
-     * Gets the destination directory into which the java source files
-     * should be compiled.
-     */
-    public File getDestdir() {
-        return destDir;
-    }
-
-    /**
-     * Set the sourcepath to be used for this compilation.
-     */
-    public void setSourcepath(Path sourcepath) {
-        if (compileSourcepath == null) {
-            compileSourcepath = sourcepath;
-        } else {
-            compileSourcepath.append(sourcepath);
-        }
-    }
-
-    /** Gets the sourcepath to be used for this compilation. */
-    public Path getSourcepath() {
-        return compileSourcepath;
-    }
-
-    /**
-     * Maybe creates a nested sourcepath element.
-     */
-    public Path createSourcepath() {
-        if (compileSourcepath == null) {
-            compileSourcepath = new Path(project);
-        }
-        return compileSourcepath.createPath();
-    }
-
-    /**
-     * Adds a reference to a CLASSPATH defined elsewhere.
-     */
-    public void setSourcepathRef(Reference r) {
-        createSourcepath().setRefid(r);
-    }
-
-    /**
-     * Set the classpath to be used for this compilation.
-     * 
-     * @param classpath an Ant Path object containing the compilation classpath.
-     */
-    public void setClasspath(Path classpath) {
-        if (compileClasspath == null) {
-            compileClasspath = classpath;
-        } else {
-            compileClasspath.append(classpath);
-        }
-    }
-
-    /** Gets the classpath to be used for this compilation. */
-    public Path getClasspath() {
-        return compileClasspath;
-    }
-
-    /**
-     * Maybe creates a nested classpath element.
-     */
-    public Path createClasspath() {
-        if (compileClasspath == null) {
-            compileClasspath = new Path(project);
-        }
-        return compileClasspath.createPath();
-    }
-
-    /**
-     * Adds a reference to a CLASSPATH defined elsewhere.
-     */
-    public void setClasspathRef(Reference r) {
-        createClasspath().setRefid(r);
-    }
-
-    /**
-     * Sets the bootclasspath that will be used to compile the classes
-     * against.
-     */
-    public void setBootclasspath(Path bootclasspath) {
-        if (this.bootclasspath == null) {
-            this.bootclasspath = bootclasspath;
-        } else {
-            this.bootclasspath.append(bootclasspath);
-        }
-    }
-
-    /**
-     * Gets the bootclasspath that will be used to compile the classes
-     * against.
-     */
-    public Path getBootclasspath() {
-        return bootclasspath;
-    }
-
-    /**
-     * Maybe creates a nested classpath element.
-     */
-    public Path createBootclasspath() {
-        if (bootclasspath == null) {
-            bootclasspath = new Path(project);
-        }
-        return bootclasspath.createPath();
-    }
-
-    /**
-     * Adds a reference to a CLASSPATH defined elsewhere.
-     */
-    public void setBootClasspathRef(Reference r) {
-        createBootclasspath().setRefid(r);
-    }
-
-    /**
-     * Sets the extension directories that will be used during the
-     * compilation.
-     */
-    public void setExtdirs(Path extdirs) {
-        if (this.extdirs == null) {
-            this.extdirs = extdirs;
-        } else {
-            this.extdirs.append(extdirs);
-        }
-    }
-
-    /**
-     * Gets the extension directories that will be used during the
-     * compilation.
-     */
-    public Path getExtdirs() {
-        return extdirs;
-    }
-
-    /**
-     * Maybe creates a nested classpath element.
-     */
-    public Path createExtdirs() {
-        if (extdirs == null) {
-            extdirs = new Path(project);
-        }
-        return extdirs.createPath();
-    }
-
-    /**
-     * List the source files being handed off to the compiler
-     */
-    public void setListfiles(boolean list) {
-        listFiles = list;
-    }
-
-    /** Get the listfiles flag. */
-    public boolean getListfiles() {
-        return listFiles;
-    }
-
-    /**
-     * Throw a BuildException if compilation fails
-     */
-    public void setFailonerror(boolean fail) {
-        failOnError = fail;
-    }
-
-    /**
-     * Proceed if compilation fails
-     */
-    public void setProceed(boolean proceed) {
-        failOnError = !proceed;
-    }
-
-    /**
-     * Gets the failonerror flag.
-     */
-    public boolean getFailonerror() {
-        return failOnError;
-    }
-
-    /**
-     * Set the deprecation flag.
-     */
-    public void setDeprecation(boolean deprecation) {
-        this.deprecation = deprecation;
-    }
-
-    /** Gets the deprecation flag. */
-    public boolean getDeprecation() {
-        return deprecation;
-    }
-
-    /**
-     * Set the memoryInitialSize flag.
-     */
-    public void setMemoryInitialSize(String memoryInitialSize) {
-        this.memoryInitialSize = memoryInitialSize;
-    }
-
-    /** Gets the memoryInitialSize flag. */
-    public String getMemoryInitialSize() {
-        return memoryInitialSize;
-    }
-
-    /**
-     * Set the memoryMaximumSize flag.
-     */
-    public void setMemoryMaximumSize(String memoryMaximumSize) {
-        this.memoryMaximumSize = memoryMaximumSize;
-    }
-
-    /** Gets the memoryMaximumSize flag. */
-    public String getMemoryMaximumSize() {
-        return memoryMaximumSize;
-    }
-
-    /**
-     * Set the Java source file encoding name.
-     */
-    public void setEncoding(String encoding) {
-        this.encoding = encoding;
-    }
-
-    /** Gets the java source file encoding name. */
-    public String getEncoding() {
-        return encoding;
-    }
-
-    /**
-     * Set the debug flag.
-     */
-    public void setDebug(boolean debug) {
-        this.debug = debug;
-    }
-
-    /** Gets the debug flag. */
-    public boolean getDebug() {
-        return debug;
-    }
-
-    /**
-     * Set the optimize flag.
-     */
-    public void setOptimize(boolean optimize) {
-        this.optimize = optimize;
-    }
-
-    /** Gets the optimize flag. */
-    public boolean getOptimize() {
-        return optimize;
-    }
-
-    /**
-     * Set the depend flag.
-     */
-    public void setDepend(boolean depend) {
-        this.depend = depend;
-    }
-
-    /** Gets the depend flag. */
-    public boolean getDepend() {
-        return depend;
-    }
-
-    /**
-     * Set the verbose flag.
-     */
-    public void setVerbose(boolean verbose) {
-        this.verbose = verbose;
-    }
-
-    /** Gets the verbose flag. */
-    public boolean getVerbose() {
-        return verbose;
-    }
-
-    /**
-     * Sets the target VM that the classes will be compiled for. Valid
-     * strings are "1.1", "1.2", and "1.3".
-     */
-    public void setTarget(String target) {
-        this.target = target;
-    }
-
-    /** Gets the target VM that the classes will be compiled for. */
-    public String getTarget() {
-        return target;
-    }
-
-    /**
-     * Include ant's own classpath in this task's classpath?
-     */
-    public void setIncludeantruntime(boolean include) {
-        includeAntRuntime = include;
-    }
-
-    /**
-     * Gets whether or not the ant classpath is to be included in the
-     * task's classpath.
-     */
-    public boolean getIncludeantruntime() {
-        return includeAntRuntime;
-    }
-
-    /**
-     * Sets whether or not to include the java runtime libraries to this
-     * task's classpath.
-     */
-    public void setIncludejavaruntime(boolean include) {
-        includeJavaRuntime = include;
-    }
-
-    /**
-     * Gets whether or not the java runtime should be included in this
-     * task's classpath.
-     */
-    public boolean getIncludejavaruntime() {
-        return includeJavaRuntime;
-    }
-
-    /**
-     * Sets whether to fork the javac compiler.
-     *
-     * @param f "true|false|on|off|yes|no"
-     */
-    public void setFork(boolean f) {
-        fork = f;
-    }
-
-    /**
-     * Sets the the name of the javac executable.
-     *
-     * <p>Ignored unless fork is true or extJavac has been specified
-     * as the compiler.</p>
-     */
-    public void setExecutable(String forkExec) {
-        forkedExecutable = forkExec;
-    }
-
-    /**
-     * Is this a forked invocation of JDK's javac?
-     */
-    public boolean isForkedJavac() {
-        return fork || "extJavac".equals(getCompiler());
-    }
-
-    /**
-     * The name of the javac executable to use in fork-mode.
-     */
-    public String getJavacExecutable() {
-        if (forkedExecutable == null && isForkedJavac()) {
-            forkedExecutable = getSystemJavac();
-        } else if (forkedExecutable != null && !isForkedJavac()) {
-            forkedExecutable = null;
-        }
-        return forkedExecutable;
-    }
-
-    /**
-     * Sets whether the -nowarn option should be used.
-     */
-    public void setNowarn(boolean flag) {
-        this.nowarn = flag;
-    }
-
-    /**
-     * Should the -nowarn option be used.
-     */
-    public boolean getNowarn() {
-        return nowarn;
-    }
-
-    /**
-     * Adds an implementation specific command line argument.
-     */
-    public ImplementationSpecificArgument createCompilerArg() {
-        ImplementationSpecificArgument arg =
-            new ImplementationSpecificArgument();
-        facade.addImplementationArgument(arg);
-        return arg;
-    }
-
-    /**
-     * Get the additional implementation specific command line arguments.
-     * @return array of command line arguments, guaranteed to be non-null.
-     */
-    public String[] getCurrentCompilerArgs() {
-        String chosen = facade.getExplicitChoice();
-        // make sure facade knows about magic properties and fork setting
-        facade.setImplementation(getCompiler());
-        try {
-            return facade.getArgs();
-        } finally {
-            facade.setImplementation(chosen);
-        }
-    }
-        
-
-    /**
-     * Executes the task.
-     */
-    public void execute() throws BuildException {
-        checkParameters();
-        resetFileLists();
-
-        // scan source directories and dest directory to build up
-        // compile lists
-        String[] list = src.list();
-        for (int i = 0; i < list.length; i++) {
-            File srcDir = project.resolveFile(list[i]);
-            if (!srcDir.exists()) {
-                throw new BuildException("srcdir \"" 
-                                         + srcDir.getPath() 
-                                         + "\" does not exist!", location);
-            }
-
-            DirectoryScanner ds = this.getDirectoryScanner(srcDir);
-            String[] files = ds.getIncludedFiles();
-
-            scanDir(srcDir, destDir != null ? destDir : srcDir, files);
-        }
-
-        compile();
-    }
-
-    /**
-     * Clear the list of files to be compiled and copied..
-     */
-    protected void resetFileLists() {
-        compileList = new File[0];
-    }
-
-    /**
-     * Scans the directory looking for source files to be compiled.
-     * The results are returned in the class variable compileList
-     */
-    protected void scanDir(File srcDir, File destDir, String[] files) {
-        GlobPatternMapper m = new GlobPatternMapper();
-        m.setFrom("*.java");
-        m.setTo("*.class");
-        SourceFileScanner sfs = new SourceFileScanner(this);
-        File[] newFiles = sfs.restrictAsFiles(files, srcDir, destDir, m);
-
-        if (newFiles.length > 0) {
-            File[] newCompileList = new File[compileList.length +
-                newFiles.length];
-            System.arraycopy(compileList, 0, newCompileList, 0,
-                    compileList.length);
-            System.arraycopy(newFiles, 0, newCompileList,
-                    compileList.length, newFiles.length);
-            compileList = newCompileList;
-        }
-    }
-
-    /** Gets the list of files to be compiled. */
-    public File[] getFileList() {
-        return compileList;
-    }
-
-    protected boolean isJdkCompiler(String compilerImpl) {
-        return "modern".equals(compilerImpl) ||
-            "classic".equals(compilerImpl) ||
-            "javac1.1".equals(compilerImpl) ||
-            "javac1.2".equals(compilerImpl) ||
-            "javac1.3".equals(compilerImpl) ||
-            "javac1.4".equals(compilerImpl);
-    }
-
-    protected String getSystemJavac() {
-        return JavaEnvUtils.getJdkExecutable("javac");
-    }
-
-    /**
-     * Choose the implementation for this particular task.
-     *
-     * @since Ant 1.5
-     */
-    public void setCompiler(String compiler) {
-        facade.setImplementation(compiler);
-    }
-
-    /**
-     * The implementation for this particular task.
-     *
-     * <p>Defaults to the build.compiler property but can be overriden
-     * via the compiler and fork attributes.</p>
-     *
-     * <p>If fork has been set to true, the result will be extJavac
-     * and not classic or java1.2 - no matter what the compiler
-     * attribute looks like.</p>
-     * 
-     * @see #getCompilerVersion
-     * 
-     * @since Ant 1.5
-     */
-    public String getCompiler() {
-        String compilerImpl = getCompilerVersion();
-        if (fork) {
-            if (isJdkCompiler(compilerImpl)) {
-                log("Since fork is true, ignoring compiler setting.",
-                    Project.MSG_WARN);
-                compilerImpl = "extJavac";
-            } else {
-                log("Since compiler setting isn't classic or modern,"
-                    + "ignoring fork setting.", Project.MSG_WARN);
-            }
-        }
-        return compilerImpl;
-    }
-
-    /**
-     * The implementation for this particular task.
-     *
-     * <p>Defaults to the build.compiler property but can be overriden
-     * via the compiler attribute.</p>
-     *
-     * <p>This method does not take the fork attribute into
-     * account.</p>
-     * 
-     * @see #getCompiler
-     *
-     * @since Ant 1.5
-     */
-    public String getCompilerVersion() {
-        facade.setMagicValue(getProject().getProperty("build.compiler"));
-        return facade.getImplementation();
-    }
-
-    /**
-     * Check that all required attributes have been set and nothing
-     * silly has been entered.
-     *
-     * @since Ant 1.5
-     */
-    protected void checkParameters() throws BuildException {
-        if (src == null) {
-            throw new BuildException("srcdir attribute must be set!", 
-                                     location);
-        }
-        if (src.size() == 0) {
-            throw new BuildException("srcdir attribute must be set!", 
-                                     location);
-        }
-
-        if (destDir != null && !destDir.isDirectory()) {
-            throw new BuildException("destination directory \"" 
-                                     + destDir 
-                                     + "\" does not exist "
-                                     + "or is not a directory", location);
-        }
-    }
-
-    /**
-     * Perform the compilation.
-     *
-     * @since Ant 1.5
-     */
-    protected void compile() {
-        String compilerImpl = getCompiler();
-
-        if (compileList.length > 0) {
-            log("Compiling " + compileList.length +
-                " source file"
-                + (compileList.length == 1 ? "" : "s")
-                + (destDir != null ? " to " + destDir : ""));
-
-            if (listFiles) {
-                for (int i = 0 ; i < compileList.length ; i++) {
-                  String filename = compileList[i].getAbsolutePath();
-                  log(filename) ;
-                }
-            }
-
-            CompilerAdapter adapter = 
-                CompilerAdapterFactory.getCompiler(compilerImpl, this);
-
-            // now we need to populate the compiler adapter
-            adapter.setJavac(this);
-
-            // finally, lets execute the compiler!!
-            if (!adapter.execute()) {
-                if (failOnError) {
-                    throw new BuildException(FAIL_MSG, location);
-                } else {
-                    log(FAIL_MSG, Project.MSG_ERR);
-                }
-            }
-        }
-    }
-
-    /**
-     * Adds an "compiler" attribute to Commandline$Attribute used to
-     * filter command line attributes based on the current
-     * implementation.
-     */
-    public class ImplementationSpecificArgument extends 
-        org.apache.tools.ant.util.facade.ImplementationSpecificArgument {
-
-        public void setCompiler(String impl) {
-            super.setImplementation(impl);
-        }
-    }
-
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/Javadoc.java b/src/main/org/apache/tools/ant/taskdefs/Javadoc.java
deleted file mode 100644
index 499c56c..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Javadoc.java
+++ /dev/null
@@ -1,1916 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs;
-
-import java.io.File;
-import java.io.PrintWriter;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.FilenameFilter;
-import java.util.Locale;
-import java.util.Vector;
-import java.util.Enumeration;
-import java.util.StringTokenizer;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.DirectoryScanner;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.ProjectComponent;
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.types.Commandline;
-import org.apache.tools.ant.types.DirSet;
-import org.apache.tools.ant.types.EnumeratedAttribute;
-import org.apache.tools.ant.types.FileSet;
-import org.apache.tools.ant.types.Path;
-import org.apache.tools.ant.types.PatternSet;
-import org.apache.tools.ant.types.Reference;
-import org.apache.tools.ant.util.FileUtils;
-import org.apache.tools.ant.util.JavaEnvUtils;
-
-/**
- * This task makes it easy to generate Javadoc documentation for a collection
- * of source code.
- *
- * <P>Current known limitations are:
- *
- * <P><UL>
- *    <LI>patterns must be of the form "xxx.*", every other pattern doesn't
- *        work.
- *    <LI>there is no control on arguments sanity since they are left
- *        to the javadoc implementation.
- *    <LI>argument J in javadoc1 is not supported (what is that for anyway?)
- * </UL>
- *
- * <P>If no <CODE>doclet</CODE> is set, then the <CODE>version</CODE> and
- * <CODE>author</CODE> are by default <CODE>"yes"</CODE>.
- *
- * <P>Note: This task is run on another VM because the Javadoc code calls
- * <CODE>System.exit()</CODE> which would break Ant functionality.
- *
- * @author Jon S. Stevens <a href="mailto:jon@clearink.com">jon@clearink.com</a>
- * @author Stefano Mazzocchi 
- *         <a href="mailto:stefano@apache.org">stefano@apache.org</a>
- * @author Patrick Chanezon 
- *         <a href="mailto:chanezon@netscape.com">chanezon@netscape.com</a>
- * @author Ernst de Haan <a href="mailto:ernst@jollem.com">ernst@jollem.com</a>
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- *
- * @since Ant 1.1
- *
- * @ant.task category="java"
- */
-public class Javadoc extends Task {
-    /**
-     * Inner class used to manage doclet parameters.
-     */
-    public class DocletParam {
-        /** The parameter name */
-        private String name;
-        
-        /** The parameter value */
-        private String value;
-
-        /**
-         * Set the name of the parameter.
-         *
-         * @param name the name of the doclet parameter
-         */
-        public void setName(String name) {
-            this.name = name;
-        }
-
-        /**
-         * Get the parameter name.
-         *
-         * @return the parameter's name.
-         */
-        public String getName() {
-            return name;
-        }
-
-        /**
-         * Set the parameter value. 
-         *
-         * Note that only string values are supported. No resolution of file 
-         * paths is performed. 
-         *
-         * @param value the parameter value.
-         */
-        public void setValue(String value) {
-            this.value = value;
-        }
-
-        /**
-         * Get the parameter value.
-         *
-         * @return the parameter value.
-         */
-        public String getValue() {
-            return value;
-        }
-    }
-
-    /**
-     * A project aware class used for Javadoc extensions which take a name
-     * and a path such as doclet and taglet arguments.
-     *
-     * @author Conor MacNeill
-     */
-    public static class ExtensionInfo extends ProjectComponent {
-        /** The name of the extension */
-        private String name;
-        
-        /** The optional path to use to load the extension */
-        private Path path;
-        
-        /**
-         * Set the name of the extension
-         *
-         * @param name the extension's name.
-         */
-        public void setName(String name) {
-            this.name = name;
-        }
-
-        /**
-         * Get the name of the extension.
-         *
-         * @return the extension's name.
-         */
-        public String getName() {
-            return name;
-        }
-
-        /**
-         * Set the path to use when loading the component.
-         *
-         * @param path a Path instance containing the classpath to use.
-         */
-        public void setPath(Path path) {
-            if (this.path == null) {
-                this.path = path;
-            } else {
-                this.path.append(path);
-            }
-        }
-
-        /**
-         * Get the extension's path.
-         *
-         * @return the path to be used to load the extension. 
-         * May be <code>null</code>
-         */
-        public Path getPath() {
-            return path;
-        }
-
-        /**
-         * Create an empty nested path to be configured by Ant with the 
-         * classpath for the extension.
-         *
-         * @return a new Path instance to be configured.
-         */
-        public Path createPath() {
-            if (path == null) {
-                path = new Path(getProject());
-            }
-            return path.createPath();
-        }
-
-        /**
-         * Adds a reference to a CLASSPATH defined elsewhere.
-         *
-         * @param r the reference containing the path.
-         */
-        public void setPathRef(Reference r) {
-            createPath().setRefid(r);
-        }
-    }
-    
-    /**
-     * This class stores info about doclets.
-     *
-     * @author Conor MacNeill
-     */
-    public class DocletInfo extends ExtensionInfo {
-        
-        /** Collection of doclet parameters. */
-        private Vector params = new Vector();
-
-        /** 
-         * Create a doclet parameter to be configured by Ant.
-         *
-         * @return a new DocletParam instance to be configured.
-         */
-        public DocletParam createParam() {
-            DocletParam param = new DocletParam();
-            params.addElement(param);
-
-            return param;
-        }
-
-        /**
-         * Get the doclet's parameters.
-         *
-         * @return an Enumeration of DocletParam instances.
-         */
-        public Enumeration getParams() {
-            return params.elements();
-        }
-    }
-
-    /**
-     * Used to track info about the packages to be javadoc'd
-     */
-    public static class PackageName {
-        /** The package name */
-        private String name;
-        
-        /**
-         * Set the name of the package
-         *
-         * @param name the package name.
-         */
-        public void setName(String name) {
-            this.name = name.trim();
-        }
-        
-        /** 
-         * Get the package name.
-         *
-         * @return the package's name.
-         */
-        public String getName() {
-            return name;
-        }
-        
-        /**
-         * @see java.lang.Object#toString
-         */
-        public String toString() {
-            return getName();
-        }
-    }
-
-    /**
-     * This class is used to manage the source files to be processed.
-     */
-    public static class SourceFile {
-        /** The source file */
-        private File file;
-        
-        public SourceFile() {}
-        public SourceFile(File file) {
-            this.file = file;
-        }
-
-        /**
-         * Set the source file.
-         *
-         * @param file the source file.
-         */
-        public void setFile(File file) {
-            this.file = file;
-        }
-        
-        /**
-         * Get the source file.
-         *
-         * @return the source file.
-         */
-        public File getFile() {
-            return file;
-        }
-    }
-
-    /**
-     * An HTML element in the javadoc.
-     *
-     * This class is used for those javadoc elements which contain HTML such as
-     * footers, headers, etc.
-     */
-    public static class Html {
-        /** The text for the element */
-        private StringBuffer text = new StringBuffer();
-        
-        /**
-         * Add text to the element.
-         *
-         * @param t the text to be added.
-         */
-        public void addText(String t) {
-            text.append(t);
-        }
-        
-        /**
-         * Get the current text for the element.
-         *
-         * @return the current text.
-         */
-        public String getText() {
-            return text.toString();
-        }
-    }
-
-    /**
-     * EnumeratedAttribute implementation supporting the javadoc scoping
-     * values.
-     */
-    public static class AccessType extends EnumeratedAttribute {
-        /**
-         * @see EnumeratedAttributes#getValues().
-         */
-        public String[] getValues() {
-            // Protected first so if any GUI tool offers a default
-            // based on enum #0, it will be right.
-            return new String[] {"protected", "public", "package", "private"};
-        }
-    }
-
-    /** The command line built to execute Javadoc. */
-    private Commandline cmd = new Commandline();
-    
-    /** Flag which indicates if javadoc from JDK 1.1 is to be used. */
-    private static boolean javadoc1 = 
-        JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_1);
-
-    /** Flag which indicates if javadoc from JDK 1.4 is available */
-    private static boolean javadoc4 =
-        (!JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_1) &&
-         !JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_2) &&
-         !JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_3));
-
-    /**
-     * Utility method to add an argument to the command line conditionally
-     * based on the given flag.
-     *
-     * @param b the flag which controls if the argument is added.
-     * @param arg the argument value.
-     */
-    private void addArgIf(boolean b, String arg) {
-        if (b) {
-            cmd.createArgument().setValue(arg);
-        }
-    }
-
-    /**
-     * Utility method to add a non JDK1.1 javadoc argument.
-     *
-     * @param key the argument name.
-     * @param value the argument value.
-     */
-    private void add12ArgIfNotEmpty(String key, String value) {
-        if (!javadoc1) {
-            if (value != null && value.length() != 0) {
-                cmd.createArgument().setValue(key);
-                cmd.createArgument().setValue(value);
-            } else {
-                log("Warning: Leaving out empty argument '" + key + "'", 
-                    Project.MSG_WARN);
-            }
-        }
-    }
-
-    /**
-     * Utility method to add a non-JDK1.1 argument to the command line 
-     * conditionally based on the given flag.
-     *
-     * @param b the flag which controls if the argument is added.
-     * @param arg the argument value.
-     */
-    private void add12ArgIf(boolean b, String arg) {
-        if (!javadoc1 && b) {
-            cmd.createArgument().setValue(arg);
-        }
-    }
-
-    /** 
-     * Flag which indicates if the task should fail if there is a
-     * javadoc error.
-     */
-    private boolean failOnError = false;
-    private Path sourcePath = null;
-    private File destDir = null;
-    private Vector sourceFiles = new Vector();
-    private Vector packageNames = new Vector(5);
-    private Vector excludePackageNames = new Vector(1);
-    private boolean author = true;
-    private boolean version = true;
-    private DocletInfo doclet = null;
-    private Path classpath = null;
-    private Path bootclasspath = null;
-    private String group = null;
-    private String packageList = null;
-    private Vector links = new Vector(2);
-    private Vector groups = new Vector(2);
-    private Vector tags = new Vector(5);
-    private boolean useDefaultExcludes = true;
-    private Html doctitle = null;
-    private Html header = null;
-    private Html footer = null;
-    private Html bottom = null;
-    private boolean useExternalFile = false;
-    private FileUtils fileUtils = FileUtils.newFileUtils();
-    private String source = null;
-
-    private Vector fileSets = new Vector();
-    private Vector packageSets = new Vector();
-
-    /**
-     * Work around command line length limit by using an external file
-     * for the sourcefiles.
-     *
-     * @param b true if an external file is to be used.
-     */
-    public void setUseExternalFile(boolean b) {
-        if (!javadoc1) {
-            useExternalFile = b;
-        }
-    }
-
-    /**
-     * Sets whether default exclusions should be used or not.
-     *
-     * @param useDefaultExcludes "true"|"on"|"yes" when default exclusions
-     *                           should be used, "false"|"off"|"no" when they
-     *                           shouldn't be used.
-     */
-    public void setDefaultexcludes(boolean useDefaultExcludes) {
-        this.useDefaultExcludes = useDefaultExcludes;
-    }
-
-    /**
-     * Set the maximum memory to be used by the javadoc process
-     *
-     * @param max a string indicating the maximum memory according to the 
-     *        JVM conventions (e.g. 128m is 128 Megabytes)
-     */
-    public void setMaxmemory(String max){
-        if (javadoc1) {
-            cmd.createArgument().setValue("-J-mx" + max);
-        } else {
-            cmd.createArgument().setValue("-J-Xmx" + max);
-        }
-    }
-
-    /**
-     * Set an additional parameter on the command line
-     *
-     * @param add the additional command line parameter for the javadoc task.
-     */
-    public void setAdditionalparam(String add){
-        cmd.createArgument().setLine(add);
-    }
-
-    /**
-     * Specify where to find source file
-     *
-     * @param src a Path instance containing the various source directories.
-     */
-    public void setSourcepath(Path src) {
-        if (sourcePath == null) {
-            sourcePath = src;
-        } else {
-            sourcePath.append(src);
-        }
-    }
-    
-    /**
-     * Create a path to be configured with the locations of the source
-     * files.
-     *
-     * @return a new Path instance to be configured by the Ant core.
-     */
-    public Path createSourcepath() {
-        if (sourcePath == null) {
-            sourcePath = new Path(project);
-        }
-        return sourcePath.createPath();
-    }
-
-    /**
-     * Adds a reference to a CLASSPATH defined elsewhere.
-     *
-     * @param r the reference containing the source path definition.
-     */
-    public void setSourcepathRef(Reference r) {
-        createSourcepath().setRefid(r);
-    }
-
-    /** 
-     * Set the directory where the Javadoc output will be generated.
-     *
-     * @param dir the destination directory.
-     */
-    public void setDestdir(File dir) {
-        destDir = dir;
-        cmd.createArgument().setValue("-d");
-        cmd.createArgument().setFile(destDir);
-    }
-    
-    /**
-     * Set the list of source files to process.
-     *
-     * @param src a comma separated list of source files.
-     */
-    public void setSourcefiles(String src) {
-        StringTokenizer tok = new StringTokenizer(src, ",");
-        while (tok.hasMoreTokens()) {
-            String f = tok.nextToken();
-            SourceFile sf = new SourceFile();
-            sf.setFile(project.resolveFile(f));
-            addSource(sf);
-        }
-    }
-    
-    /**
-     * Add a single source file.
-     *
-     * @param sf the source file to be processed.
-     */
-    public void addSource(SourceFile sf) {
-        sourceFiles.addElement(sf);
-    }
-    
-    /**
-     * Set the package names to be processed.
-     *
-     * @param packages a comma separated list of packages specs 
-     *        (may be wildcarded).
-     *
-     * @see #addPackage for wildcard information.
-     */
-    public void setPackagenames(String packages) {
-        StringTokenizer tok = new StringTokenizer(packages, ",");
-        while (tok.hasMoreTokens()) {
-            String p = tok.nextToken();
-            PackageName pn = new PackageName();
-            pn.setName(p);
-            addPackage(pn);
-        }
-    }
-    
-    /**
-     * Add a single package to be processed.
-     *
-     * If the package name ends with &quot;.*&quot; the Javadoc task
-     * will find and process all subpackages.
-     *
-     * @param pn the package name, possibly wildcarded.
-     */
-    public void addPackage(PackageName pn) {
-        packageNames.addElement(pn);
-    }
-
-    /**
-     * Set the list of packages to be excluded.
-     *
-     * @param packages a comma separated list of packages to be excluded. 
-     *        This may not include wildcards.
-     */
-    public void setExcludePackageNames(String packages) {
-        StringTokenizer tok = new StringTokenizer(packages, ",");
-        while (tok.hasMoreTokens()) {
-            String p = tok.nextToken();
-            PackageName pn = new PackageName();
-            pn.setName(p);
-            addExcludePackage(pn);
-        }
-    }
-    
-    /**
-     * Add a package to be excluded from the javadoc run.
-     *
-     * @param pn the name of the package (wildcards are not permitted).
-     */
-    public void addExcludePackage(PackageName pn) {
-        excludePackageNames.addElement(pn);
-    }
-
-    /**
-     * Specify the fiel containing the overview to be included in the generated
-     * documentation.
-     *
-     * @param f the file containing the overview.
-     */
-    public void setOverview(File f) {
-        if (!javadoc1) {
-            cmd.createArgument().setValue("-overview");
-            cmd.createArgument().setFile(f);
-        }
-    }
-    
-    /**
-     * Indicate whether only public classes and members are to be included in 
-     * the scope processed
-     *
-     * @param b true if scope is to be public.
-     */
-    public void setPublic(boolean b) {
-        addArgIf(b, "-public");
-    }
-
-    /**
-     * Indicate whether only protected and public classes and members are to 
-     * be included in the scope processed
-     *
-     * @param b true if scope is to be protected.
-     */
-    public void setProtected(boolean b) {
-        addArgIf(b, "-protected");
-    }
-
-    /**
-     * Indicate whether only package, protected and public classes and 
-     * members are to be included in the scope processed
-     *
-     * @param b true if scope is to be package level.
-     */
-    public void setPackage(boolean b) {
-        addArgIf(b, "-package");
-    }
-    
-    /**
-     * Indicate whether all classes and 
-     * members are to be included in the scope processed
-     *
-     * @param b true if scope is to be private level.
-     */
-    public void setPrivate(boolean b) {
-        addArgIf(b, "-private");
-    }
-    
-    /**
-     * Set the scope to be processed. This is an alternative to the
-     * use of the setPublic, setPrivate, etc methods. It gives better build
-     * file control over what scope is processed.
-     *
-     * @param at the scope to be processed.
-     */
-    public void setAccess(AccessType at) {
-        cmd.createArgument().setValue("-" + at.getValue());
-    }
-    
-    /**
-     * Set the class that starts the doclet used in generating the 
-     * documentation.
-     *
-     * @param docletName the name of the doclet class.
-     */
-    public void setDoclet(String docletName) {
-        if (doclet == null) {
-            doclet = new DocletInfo();
-        }
-        doclet.setName(docletName);
-    }
-
-    /**
-     * Set the classpath used to find the doclet class.
-     *
-     * @param docletPath the doclet classpath.
-     */
-    public void setDocletPath(Path docletPath) {
-        if (doclet == null) {
-            doclet = new DocletInfo();
-        }
-        doclet.setPath(docletPath);
-    }
-
-    /**
-     * Set the classpath used to find the doclet class by reference.
-     *
-     * @param r the reference to the Path instance to use as the doclet 
-     *        classpath.
-     */
-    public void setDocletPathRef(Reference r) {
-        if (doclet == null) {
-            doclet = new DocletInfo();
-        }
-        doclet.createPath().setRefid(r);
-    }
-
-    /**
-     * Create a doclet to be used in the documentation generation.
-     *
-     * @return a new DocletInfo instance to be configured.
-     */
-    public DocletInfo createDoclet() {
-        doclet = new DocletInfo();
-        return doclet;
-    }
-
-    /**
-     * Add a taglet
-     *
-     * @param tagletInfo information about the taglet.
-     */
-    public void addTaglet(ExtensionInfo tagletInfo) {
-        tags.addElement(tagletInfo);
-    }
-    
-    /**
-     * Indicate whether Javadoc should produce old style (JDK 1.1) 
-     * documentation.
-     *
-     * This is not supported by JDK 1.1 and has been phased out in JDK 1.4
-     * 
-     * @param b if true attempt to generate old style documentation.
-     */
-    public void setOld(boolean b) {
-        if (b) {
-            if (javadoc1) {
-                log("Javadoc 1.1 doesn't support the -1.1 switch", 
-                    Project.MSG_WARN);
-            } else if (javadoc4) {
-                log("Javadoc 1.4 doesn't support the -1.1 switch anymore", 
-                    Project.MSG_WARN);
-            } else {
-                cmd.createArgument().setValue("-1.1");
-            }
-        }
-    }
-
-    /**
-     * Set the classpath to be used for this javadoc run.
-     * 
-     * @param path an Ant Path object containing the compilation 
-     *        classpath.
-     */
-    public void setClasspath(Path path) {
-        if (classpath == null) {
-            classpath = path;
-        } else {
-            classpath.append(path);
-        }
-    }
-    
-    /**
-     * Create a Path to be configured with the classpath to use
-     *
-     * @return a new Path instance to be configured with the classpath.
-     */
-    public Path createClasspath() {
-        if (classpath == null) {
-            classpath = new Path(project);
-        }
-        return classpath.createPath();
-    }
-
-    /**
-     * Adds a reference to a CLASSPATH defined elsewhere.
-     *
-     * @param r the reference to an instance defining the classpath.
-     */
-    public void setClasspathRef(Reference r) {
-        createClasspath().setRefid(r);
-    }
-
-    /** 
-     * Set the boot classpath to use.
-     *
-     * @param path the boot classpath.
-     */
-    public void setBootclasspath(Path path) {
-        if (bootclasspath == null) {
-            bootclasspath = path;
-        } else {
-            bootclasspath.append(path);
-        }
-    }
-    
-    /**
-     * Create a Path to be configured with the boot classpath
-     *
-     * @return a new Path instance to be configured with the boot classpath.
-     */
-    public Path createBootclasspath() {
-        if (bootclasspath == null) {
-            bootclasspath = new Path(project);
-        }
-        return bootclasspath.createPath();
-    }
-
-    /**
-     * Adds a reference to a CLASSPATH defined elsewhere.
-     *
-     * @param r the reference to an instance defining the bootclasspath.
-     */
-    public void setBootClasspathRef(Reference r) {
-        createBootclasspath().setRefid(r);
-    }
-
-    /**
-     * Set the location of the extensions directories.
-     *
-     * @param path the string version of the path.
-     * @deprecated Use the {@link #setExtdirs(Path)} version.
-     */
-    public void setExtdirs(String path) {
-        if (!javadoc1) {
-            cmd.createArgument().setValue("-extdirs");
-            cmd.createArgument().setValue(path);
-        }
-    }
-
-    /**
-     * Set the location of the extensions directories.
-     *
-     * @param path a path containing the extension directories.
-     */
-    public void setExtdirs(Path path) {
-        if (!javadoc1) {
-            cmd.createArgument().setValue("-extdirs");
-            cmd.createArgument().setPath(path);
-        }
-    }
-
-    /**
-     * Run javadoc in verbose mode
-     *
-     * @param b true if operation is to be verbose.
-     */
-    public void setVerbose(boolean b) {
-        add12ArgIf(b, "-verbose");
-    }
-    
-    /**
-     * Set the local to use in documentation generation.
-     *
-     * @param locale the locale to use.
-     */
-    public void setLocale(String locale) {
-        if (!javadoc1) {
-            // createArgument(true) is necessary to make sure, -locale
-            // is the first argument (required in 1.3+).
-            cmd.createArgument(true).setValue(locale);
-            cmd.createArgument(true).setValue("-locale");
-        }
-    }
-    
-    /**
-     * Set the encoding name of the source files,
-     *
-     * @param enc the name of the encoding for the source files.
-     */
-    public void setEncoding(String enc) {
-        cmd.createArgument().setValue("-encoding");
-        cmd.createArgument().setValue(enc);
-    }
-    
-    /**
-     * Include the version tag in the generated documentation.
-     *
-     * @param b true if the version tag should be included.
-     */
-    public void setVersion(boolean b) {
-        this.version = b;
-    }
-    
-    /**
-     * Generate the &quot;use&quot page for each package.
-     *
-     * @param b true if the use page should be generated.
-     */
-    public void setUse(boolean b) {
-        add12ArgIf(b, "-use");
-    }
-    
-    
-    /**
-     * Include the author tag in the generated documentation.
-     *
-     * @param b true if the author tag should be included.
-     */
-    public void setAuthor(boolean b) {
-        author = b;
-    }
-    
-    /**
-     * Generate a split index
-     *
-     * @param b true if the index should be split into a file per letter.
-     */
-    public void setSplitindex(boolean b) {
-        add12ArgIf(b, "-splitindex");
-    }
-    
-    /**
-     * Set the title to be placed in the HTML &lt;title&gt; tag of the 
-     * generated documentation.
-     *
-     * @param title the window title to use.
-     */
-    public void setWindowtitle(String title) {
-        add12ArgIfNotEmpty("-windowtitle", title);
-    }
-    
-    /**
-     * Set the title of the generated overview page.
-     *
-     * @param doctitle the Document title.
-     */
-    public void setDoctitle(String doctitle) {
-        Html h = new Html();
-        h.addText(doctitle);
-        addDoctitle(h);
-    }
-    
-    /**
-     * Add a document title to use for the overview page.
-     *
-     * @param text the HTML element containing the document title.
-     */
-    public void addDoctitle(Html text) {
-        if (!javadoc1) {
-            doctitle = text;
-        }
-    }
-    
-    /**
-     * Set the header text to be placed at the top of each output file.
-     *
-     * @param header the header text
-     */
-    public void setHeader(String header) {
-        Html h = new Html();
-        h.addText(header);
-        addHeader(h);
-    }
-
-    /**
-     * Set the header text to be placed at the top of each output file.
-     *
-     * @param text the header text
-     */
-    public void addHeader(Html text) {
-        if (!javadoc1) {
-            header = text;
-        }
-    }
-
-    /**
-     * Set the footer text to be placed at the bottom of each output file.
-     *
-     * @param footer the footer text.
-     */
-    public void setFooter(String footer) {
-        Html h = new Html();
-        h.addText(footer);
-        addFooter(h);
-    }
-    
-    /**
-     * Set the footer text to be placed at the bottom of each output file.
-     *
-     * @param text the footer text.
-     */
-    public void addFooter(Html text) {
-        if (!javadoc1) {
-            footer = text;
-        }
-    }
-
-    /**
-     * Set the text to be placed at the bottom of each output file.
-     *
-     * @param bottom the bottom text.
-     */
-    public void setBottom(String bottom) {
-        Html h = new Html();
-        h.addText(bottom);
-        addBottom(h);
-    }
-    
-    /**
-     * Set the text to be placed at the bottom of each output file.
-     *
-     * @param text the bottom text.
-     */
-    public void addBottom(Html text) {
-        if (!javadoc1) {
-            bottom = text;
-        }
-    }
-
-    public void setLinkoffline(String src) {
-        if (!javadoc1) {
-            LinkArgument le = createLink();
-            le.setOffline(true);
-            String linkOfflineError = "The linkoffline attribute must include"
-                + " a URL and a package-list file location separated by a"
-                + " space";
-            if (src.trim().length() == 0) {
-                throw new BuildException(linkOfflineError);
-            }
-            StringTokenizer tok = new StringTokenizer(src, " ", false);
-            le.setHref(tok.nextToken());
-
-            if (!tok.hasMoreTokens()) {
-                throw new BuildException(linkOfflineError);
-            }
-            le.setPackagelistLoc(project.resolveFile(tok.nextToken()));
-        }
-    }
-    public void setGroup(String src) {
-        group = src;
-    }
-    public void setLink(String src) {
-        if (!javadoc1) {
-            createLink().setHref(src);
-        }
-    }
-    public void setNodeprecated(boolean b) {
-        addArgIf(b, "-nodeprecated");
-    }
-    public void setNodeprecatedlist(boolean b) {
-        add12ArgIf(b, "-nodeprecatedlist");
-    }
-    public void setNotree(boolean b) {
-        addArgIf(b, "-notree");
-    }
-    public void setNoindex(boolean b) {
-        addArgIf(b, "-noindex");
-    }
-    public void setNohelp(boolean b) {
-        add12ArgIf(b, "-nohelp");
-    }
-    public void setNonavbar(boolean b) {
-        add12ArgIf(b, "-nonavbar");
-    }
-    public void setSerialwarn(boolean b) {
-        add12ArgIf(b, "-serialwarn");
-    }
-    public void setStylesheetfile(File f) {
-        if (!javadoc1) {
-            cmd.createArgument().setValue("-stylesheetfile");
-            cmd.createArgument().setFile(f);
-        }
-    }
-    public void setHelpfile(File f) {
-        if (!javadoc1) {
-            cmd.createArgument().setValue("-helpfile");
-            cmd.createArgument().setFile(f);
-        }
-    }
-    public void setDocencoding(String enc) {
-        cmd.createArgument().setValue("-docencoding");
-        cmd.createArgument().setValue(enc);
-    }
-    public void setPackageList(String src) {
-        if (!javadoc1) {
-            packageList = src;
-        }
-    }
-
-    public LinkArgument createLink() {
-        LinkArgument la = new LinkArgument();
-        links.addElement(la);
-        return la;
-    }
-
-    public class LinkArgument {
-        private String href;
-        private boolean offline = false;
-        private File packagelistLoc;
-
-        public LinkArgument() {
-        }
-
-        public void setHref(String hr) {
-            href = hr;
-        }
-
-        public String getHref() {
-            return href;
-        }
-
-        public void setPackagelistLoc(File src) {
-            packagelistLoc = src;
-        }
-
-        public File getPackagelistLoc() {
-            return packagelistLoc;
-        }
-
-        public void setOffline(boolean offline) {
-            this.offline = offline;
-        }
-
-        public boolean isLinkOffline() {
-            return offline;
-        }
-    }
-
-    /**
-     * Creates and adds a -tag argument. This is used to specify
-     * custom tags. This argument is only available for JavaDoc 1.4,
-     * and will generate a verbose message (and then be ignored)
-     * when run on Java versions below 1.4.
-     */
-    public TagArgument createTag() {
-        if (!javadoc4) {
-            log ("-tag option not supported on JavaDoc < 1.4", 
-                 Project.MSG_VERBOSE);
-        }
-        TagArgument ta = new TagArgument();
-        tags.addElement (ta);
-        return ta;
-    }
-    
-    /**
-     * Scope element verbose names. (Defined here as fields
-     * cannot be static in inner classes.) The first letter
-     * from each element is used to build up the scope string.
-     */
-    static final String[] SCOPE_ELEMENTS = {
-        "overview", "packages", "types", "constructors",
-        "methods", "fields"
-    };
-
-    /**
-     * Class representing a -tag argument.
-     */
-    public class TagArgument {
-        /** Name of the tag. */
-        private String name = null;
-        /** Description of the tag to place in the JavaDocs. */
-        private String description = null;
-        /** Whether or not the tag is enabled. */
-        private boolean enabled = true;
-        /** 
-         * Scope string of the tag. This will form the middle
-         * argument of the -tag parameter when the tag is enabled
-         * (with an X prepended for and is parsed from human-readable form.
-         */
-        private String scope = "a";
-        
-        /** Sole constructor. */
-        public TagArgument () {
-        }
-        
-        /** 
-         * Sets the name of the tag.
-         * 
-         * @param name The name of the tag. 
-         *             Must not be <code>null</code> or empty.
-         */
-        public void setName (String name) {
-            this.name = name;
-        }
-        
-        /** 
-         * Sets the description of the tag. This is what appears in
-         * the JavaDoc.
-         * 
-         * @param description The description of the tag. 
-         *                    Must not be <code>null</code> or empty.
-         */
-        public void setDescription (String description) {
-            this.description = description;
-        }
-
-        /** 
-         * Sets the scope of the tag. This is in comma-separated
-         * form, with each element being one of "all" (the default),
-         * "overview", "packages", "types", "constructors", "methods",
-         * "fields". The elements are treated in a case-insensitive
-         * manner. 
-         * 
-         * @param verboseScope The scope of the tag.
-         *                     Must not be <code>null</code>, 
-         *                     should not be empty.
-         * 
-         * @exception BuildException if all is specified along with
-         * other elements, if any elements are repeated, if no
-         * elements are specified, or if any unrecognised elements are
-         * specified.
-         */
-        public void setScope (String verboseScope) throws BuildException {
-            verboseScope = verboseScope.toLowerCase(Locale.US);
-
-            boolean[] elements = new boolean[SCOPE_ELEMENTS.length];
-            
-            boolean gotAll = false;
-            boolean gotNotAll = false;
-            
-            // Go through the tokens one at a time, updating the
-            // elements array and issuing warnings where appropriate.
-            StringTokenizer tok = new StringTokenizer (verboseScope, ",");
-            while (tok.hasMoreTokens()) {
-                String next = tok.nextToken().trim();
-                if (next.equals("all")) {
-                    if (gotAll) {   
-                        getProject().log ("Repeated tag scope element: all", 
-                                          Project.MSG_VERBOSE);
-                    }
-                    gotAll = true;
-                } else {
-                    int i;
-                    for (i = 0; i < SCOPE_ELEMENTS.length; i++) {
-                        if (next.equals (SCOPE_ELEMENTS[i]))
-                            break;
-                    }
-                    if (i == SCOPE_ELEMENTS.length) {
-                        throw new BuildException ("Unrecognised scope element: "
-                                                  + next);
-                    } else {
-                        if (elements[i]) {
-                            getProject().log ("Repeated tag scope element: "
-                                              + next, Project.MSG_VERBOSE);
-                        }
-                        elements[i] = true;
-                        gotNotAll = true;
-                    }
-                }
-            }
-            
-            if (gotNotAll && gotAll) {
-                throw new BuildException ("Mixture of \"all\" and other scope "
-                                          + "elements in tag parameter.");
-            }
-            if (!gotNotAll && !gotAll) {
-                throw new BuildException ("No scope elements specified in tag "
-                                          + "parameter.");
-            }
-            if (gotAll) {
-                this.scope = "a";
-            } else {
-                StringBuffer buff = new StringBuffer (elements.length);
-                for (int i = 0; i < elements.length; i++) {
-                    if (elements[i]) {
-                        buff.append (SCOPE_ELEMENTS[i].charAt(0));
-                    }
-                }
-                this.scope = buff.toString();
-            }
-        }
-        
-        /**
-         * Sets whether or not the tag is enabled.
-         * 
-         * @param enabled Whether or not this tag is enabled.
-         */
-        public void setEnabled (boolean enabled) {
-            this.enabled = enabled;
-        }
-        
-        /**
-         * Returns the -tag parameter this argument represented.
-         * 
-         * @exception BuildException if either the name or description
-         *                           is <code>null</code> or empty.
-         */
-        public String getParameter () throws BuildException {
-            if (name == null || name.equals("")) {
-                throw new BuildException ("No name specified for custom tag.");
-            }
-            if (description == null || description.equals("")){
-                throw new BuildException 
-                    ("No description specified for custom tag " + name);
-            }
-            
-            return name + ":" + (enabled ? "" : "X") 
-                + scope + ":" + description;
-        }
-    }
-
-    public GroupArgument createGroup() {
-        GroupArgument ga = new GroupArgument();
-        groups.addElement(ga);
-        return ga;
-    }
-
-    public class GroupArgument {
-        private Html title;
-        private Vector packages = new Vector(3);
-
-        public GroupArgument() {
-        }
-
-        public void setTitle(String src) {
-            Html h = new Html();
-            h.addText(src);
-            addTitle(h);
-        }
-        public void addTitle(Html text) {
-            title = text;
-        }
-
-        public String getTitle() {
-            return title != null ? title.getText() : null;
-        }
-
-        public void setPackages(String src) {
-            StringTokenizer tok = new StringTokenizer(src, ",");
-            while (tok.hasMoreTokens()) {
-                String p = tok.nextToken();
-                PackageName pn = new PackageName();
-                pn.setName(p);
-                addPackage(pn);
-            }
-        }
-        public void addPackage(PackageName pn) {
-            packages.addElement(pn);
-        }
-
-        public String getPackages() {
-            StringBuffer p = new StringBuffer();
-            for (int i = 0; i < packages.size(); i++) {
-                if (i > 0) {
-                    p.append(":");
-                }
-                p.append(packages.elementAt(i).toString());
-            }
-            return p.toString();
-        }
-    }
-
-    public void setCharset(String src) {
-        this.add12ArgIfNotEmpty("-charset", src);
-    }
-
-    /**
-     * Should the build process fail if javadoc fails (as indicated by
-     * a non zero return code)?
-     *
-     * <p>Default is false.</p>
-     */
-    public void setFailonerror(boolean b) {
-        failOnError = b;
-    }
-
-    /**
-     * Enables the -source switch, will be ignored if javadoc is not
-     * the 1.4 version or a different doclet than the standard doclet
-     * is used.
-     *
-     * @since Ant 1.5
-     */
-    public void setSource(String source) {
-        this.source = source;
-    }
-
-    /**
-     * Adds a packageset.
-     *
-     * <p>All included directories will be translated into package
-     * names be converting the directory separator into dots.</p>
-     *
-     * @since 1.5
-     */
-    public void addPackageset(DirSet packageSet) {
-        packageSets.addElement(packageSet);
-    }
-
-    /**
-     * Adds a fileset.
-     *
-     * <p>All included files will be added as sourcefiles.  The task
-     * will automatically add
-     * <code>includes=&quot;**&#47;*.java&quot;</code> to the
-     * fileset.</p>
-     *
-     * @since 1.5
-     */
-    public void addFileset(FileSet fs) {
-        fs.createInclude().setName("**/*.java");
-        fileSets.addElement(fs);
-    }
-
-    public void execute() throws BuildException {
-        if ("javadoc2".equals(taskType)) {
-            log("!! javadoc2 is deprecated. Use javadoc instead. !!");
-        }
-
-        Vector packagesToDoc = new Vector();
-        Path sourceDirs = new Path(getProject());
-        parsePackages(packagesToDoc, sourceDirs);
-
-        if (packagesToDoc.size() != 0 && sourceDirs.size() == 0) {
-            String msg = "sourcePath attribute must be set when "
-                + "specifying package names.";
-            throw new BuildException(msg);
-        }
-
-        Vector sourceFilesToDoc = (Vector) sourceFiles.clone();
-        addFileSets(sourceFilesToDoc);
-
-        if (packagesToDoc.size() == 0 && sourceFilesToDoc.size() == 0) {
-            throw new BuildException("No source files and no packages have "
-                                     + "been specified.");
-        }
-        
-        log("Generating Javadoc", Project.MSG_INFO);
-
-        Commandline toExecute = (Commandline) cmd.clone();
-        toExecute.setExecutable(JavaEnvUtils.getJdkExecutable("javadoc"));
-
-        // ------------------------------------------ general javadoc arguments
-        if (doctitle != null) {
-            toExecute.createArgument().setValue("-doctitle");
-            toExecute.createArgument().setValue(expand(doctitle.getText()));
-        }
-        if (header != null) {
-            toExecute.createArgument().setValue("-header");
-            toExecute.createArgument().setValue(expand(header.getText()));
-        }
-        if (footer != null) {
-            toExecute.createArgument().setValue("-footer");
-            toExecute.createArgument().setValue(expand(footer.getText()));
-        }
-        if (bottom != null) {
-            toExecute.createArgument().setValue("-bottom");
-            toExecute.createArgument().setValue(expand(bottom.getText()));
-        }
-
-        if (classpath == null) {
-            classpath = Path.systemClasspath;
-        } else {
-            classpath = classpath.concatSystemClasspath("ignore");
-        }
-
-        if (!javadoc1) {
-            toExecute.createArgument().setValue("-classpath");
-            toExecute.createArgument().setPath(classpath);
-            if (sourceDirs.size() > 0) {
-                toExecute.createArgument().setValue("-sourcepath");
-                toExecute.createArgument().setPath(sourceDirs);
-            }
-        } else {
-            sourceDirs.append(classpath);
-            toExecute.createArgument().setValue("-classpath");
-            toExecute.createArgument().setPath(sourceDirs);
-        }
-
-        if (version && doclet == null) {
-            toExecute.createArgument().setValue("-version");
-        }
-        if (author && doclet == null) {
-            toExecute.createArgument().setValue("-author");
-        }
-
-        if (javadoc1 || doclet == null) {
-            if (destDir == null) {
-                String msg = "destDir attribute must be set!";
-                throw new BuildException(msg);
-            }
-        }
-
-        // ---------------------------- javadoc2 arguments for default doclet
-
-        if (!javadoc1) {
-            if (doclet != null) {
-                if (doclet.getName() == null) {
-                    throw new BuildException("The doclet name must be "
-                                             + "specified.", location);
-                } else {
-                    toExecute.createArgument().setValue("-doclet");
-                    toExecute.createArgument().setValue(doclet.getName());
-                    if (doclet.getPath() != null) {
-                        Path docletPath 
-                            = doclet.getPath().concatSystemClasspath("ignore");
-                        if (docletPath.size() != 0) {
-                            toExecute.createArgument().setValue("-docletpath");
-                            toExecute.createArgument().setPath(docletPath);
-                        }
-                    }
-                    for (Enumeration e = doclet.getParams(); 
-                         e.hasMoreElements();) {
-                        DocletParam param = (DocletParam) e.nextElement();
-                        if (param.getName() == null) {
-                            throw new BuildException("Doclet parameters must "
-                                                     + "have a name");
-                        }
-
-                        toExecute.createArgument().setValue(param.getName());
-                        if (param.getValue() != null) {
-                            toExecute.createArgument()
-                                .setValue(param.getValue());
-                        }
-                    }
-                }
-            }
-            if (bootclasspath != null) {
-                toExecute.createArgument().setValue("-bootclasspath");
-                toExecute.createArgument().setPath(bootclasspath);
-            }
-
-            // add the links arguments
-            if (links.size() != 0) {
-                for (Enumeration e = links.elements(); e.hasMoreElements();) {
-                    LinkArgument la = (LinkArgument) e.nextElement();
-
-                    if (la.getHref() == null) {
-                        throw new BuildException("Links must provide the URL "
-                                                 + "to the external class "
-                                                 + "documentation.");
-                    }
-
-                    if (la.isLinkOffline()) {
-                        File packageListLocation = la.getPackagelistLoc();
-                        if (packageListLocation == null) {
-                            throw new BuildException("The package list "
-                                                     + " location for link " 
-                                                     + la.getHref()
-                                                     + " must be provided "
-                                                     + "because the link is "
-                                                     + "offline");
-                        }
-                        File packageList = 
-                            new File(packageListLocation, "package-list");
-                        if (packageList.exists()) {
-                            toExecute.createArgument().setValue("-linkoffline");
-                            toExecute.createArgument().setValue(la.getHref());
-                            toExecute.createArgument()
-                                .setValue(packageListLocation
-                                          .getAbsolutePath());
-                        } else {
-                            log("Warning: No package list was found at " 
-                                + packageListLocation, Project.MSG_VERBOSE);
-                        }
-                    } else {
-                        toExecute.createArgument().setValue("-link");
-                        toExecute.createArgument().setValue(la.getHref());
-                    }
-                }
-            }
-
-            // add the single group arguments
-            // Javadoc 1.2 rules:
-            //   Multiple -group args allowed.
-            //   Each arg includes 3 strings: -group [name] [packagelist].
-            //   Elements in [packagelist] are colon-delimited.
-            //   An element in [packagelist] may end with the * wildcard.
-
-            // Ant javadoc task rules for group attribute:
-            //   Args are comma-delimited.
-            //   Each arg is 2 space-delimited strings.
-            //   E.g., group="XSLT_Packages org.apache.xalan.xslt*,
-            //                XPath_Packages org.apache.xalan.xpath*"
-            if (group != null) {
-                StringTokenizer tok = new StringTokenizer(group, ",", false);
-                while (tok.hasMoreTokens()) {
-                    String grp = tok.nextToken().trim();
-                    int space = grp.indexOf(" ");
-                    if (space > 0){
-                        String name = grp.substring(0, space);
-                        String pkgList = grp.substring(space + 1);
-                        toExecute.createArgument().setValue("-group");
-                        toExecute.createArgument().setValue(name);
-                        toExecute.createArgument().setValue(pkgList);
-                    }
-                }
-            }
-
-            // add the group arguments
-            if (groups.size() != 0) {
-                for (Enumeration e = groups.elements(); e.hasMoreElements();) {
-                    GroupArgument ga = (GroupArgument) e.nextElement();
-                    String title = ga.getTitle();
-                    String packages = ga.getPackages();
-                    if (title == null || packages == null) {
-                        throw new BuildException("The title and packages must "
-                                                 + "be specified for group "
-                                                 + "elements.");
-                    }
-                    toExecute.createArgument().setValue("-group");
-                    toExecute.createArgument().setValue(expand(title));
-                    toExecute.createArgument().setValue(packages);
-                }
-            }
-            
-            // JavaDoc 1.4 parameters
-            if (javadoc4) {
-                for (Enumeration e = tags.elements(); e.hasMoreElements();) {
-                    Object element = e.nextElement();
-                    if (element instanceof TagArgument) {
-                        TagArgument ta = (TagArgument) element;
-                        toExecute.createArgument().setValue ("-tag");
-                        toExecute.createArgument().setValue (ta.getParameter());
-                    } else {
-                        ExtensionInfo tagletInfo = (ExtensionInfo) element;
-                        toExecute.createArgument().setValue("-taglet");
-                        toExecute.createArgument().setValue(tagletInfo
-                                                            .getName());
-                        if (tagletInfo.getPath() != null) {
-                            Path tagletPath = tagletInfo.getPath()
-                                .concatSystemClasspath("ignore");
-                            if (tagletPath.size() != 0) {
-                                toExecute.createArgument()
-                                    .setValue("-tagletpath");
-                                toExecute.createArgument().setPath(tagletPath);
-                            }
-                        }
-                    }
-                }
-
-                if (source != null) {
-                    if (doclet != null) {
-                        log("ignoring source option for custom doclet",
-                            Project.MSG_WARN);
-                    } else {
-                        toExecute.createArgument().setValue("-source");
-                        toExecute.createArgument().setValue(source);
-                    }
-                }
-            }
-
-        }
-
-        File tmpList = null;
-        PrintWriter srcListWriter = null;
-        try {
-
-            /**
-             * Write sourcefiles and package names to a temporary file
-             * if requested.
-             */
-            if (useExternalFile) {
-                if (tmpList == null) {
-                    tmpList = fileUtils.createTempFile("javadoc", "", null);
-                    toExecute.createArgument()
-                        .setValue("@" + tmpList.getAbsolutePath());
-                }
-                srcListWriter = new PrintWriter(
-                                    new FileWriter(tmpList.getAbsolutePath(),
-                                                   true));
-            }
-
-            Enumeration enum = packagesToDoc.elements();
-            while (enum.hasMoreElements()) {
-                String packageName = (String) enum.nextElement();
-                if (useExternalFile) {
-                    srcListWriter.println(packageName);
-                } else {
-                    toExecute.createArgument().setValue(packageName);
-                }
-            }
-            
-            enum = sourceFilesToDoc.elements();
-            while (enum.hasMoreElements()) {
-                SourceFile sf = (SourceFile) enum.nextElement();
-                String sourceFileName = sf.getFile().getAbsolutePath();
-                if (useExternalFile) {
-                    srcListWriter.println(sourceFileName);
-                } else {
-                    toExecute.createArgument().setValue(sourceFileName);
-                }
-            }
-
-        } catch (IOException e) {
-            tmpList.delete();
-            throw new BuildException("Error creating temporary file",
-                                     e, location);
-        } finally {
-            if (srcListWriter != null) {
-                srcListWriter.close();
-            }
-        }
-
-        if (packageList != null) {
-            toExecute.createArgument().setValue("@" + packageList);
-        }
-        log(toExecute.describeCommand(), Project.MSG_VERBOSE);
-
-        log("Javadoc execution", Project.MSG_INFO);
-
-        JavadocOutputStream out = new JavadocOutputStream(Project.MSG_INFO);
-        JavadocOutputStream err = new JavadocOutputStream(Project.MSG_WARN);
-        Execute exe = new Execute(new PumpStreamHandler(out, err));
-        exe.setAntRun(project);
-
-        /*
-         * No reason to change the working directory as all filenames and
-         * path components have been resolved already.
-         *
-         * Avoid problems with command line length in some environments.
-         */
-        exe.setWorkingDirectory(null);
-        try {
-            exe.setCommandline(toExecute.getCommandline());
-            int ret = exe.execute();
-            if (ret != 0 && failOnError) {
-                throw new BuildException("Javadoc returned " + ret, location);
-            }
-        } catch (IOException e) {
-            throw new BuildException("Javadoc failed: " + e, e, location);
-        } finally {
-            if (tmpList != null) {
-                tmpList.delete();
-                tmpList = null;
-            }
-
-            out.logFlush();
-            err.logFlush();
-            try {
-                out.close();
-                err.close();
-            } catch (IOException e) {}
-        }
-    }
-
-    /**
-     * Add the files matched by the nested filesets to the Vector as
-     * SourceFile instances.
-     *
-     * @since 1.5
-     */
-    private void addFileSets(Vector sf) {
-        Enumeration enum = fileSets.elements();
-        while (enum.hasMoreElements()) {
-            FileSet fs = (FileSet) enum.nextElement();
-            File baseDir = fs.getDir(getProject());
-            DirectoryScanner ds = fs.getDirectoryScanner(getProject());
-            String[] files = ds.getIncludedFiles();
-            for (int i = 0; i < files.length; i++) {
-                sf.addElement(new SourceFile(new File(baseDir, files[i])));
-            }
-        }
-    }
-
-    /**
-     * Add the directories matched by the nested dirsets to the Vector
-     * and the base directories of the dirsets to the Path.  It also
-     * handles the packages and excludepackages attributes and
-     * elements.
-     *
-     * @since 1.5
-     */
-    private void parsePackages(Vector pn, Path sp) {
-        Vector addedPackages = new Vector();
-        Vector dirSets = (Vector) packageSets.clone();
-
-        // for each sourcePath entry, add a directoryset with includes
-        // taken from packagenames attribute and nested package
-        // elements and excludes taken from excludepackages attribute
-        // and nested excludepackage elements
-        if (sourcePath != null && packageNames.size() > 0) {
-            PatternSet ps = new PatternSet();
-            Enumeration enum = packageNames.elements();
-            while (enum.hasMoreElements()) {
-                PackageName p = (PackageName) enum.nextElement();
-                String pkg = p.getName().replace('.', '/');
-                if (pkg.endsWith("*")) {
-                    pkg += "*";
-                }
-                ps.createInclude().setName(pkg);
-            }
-            
-            enum = excludePackageNames.elements();
-            while (enum.hasMoreElements()) {
-                PackageName p = (PackageName) enum.nextElement();
-                String pkg = p.getName().replace('.', '/');
-                if (pkg.endsWith("*")) {
-                    pkg += "*";
-                }
-                ps.createExclude().setName(pkg);
-            }
-            
-
-            String[] pathElements = sourcePath.list();
-            for (int i = 0; i < pathElements.length; i++) {
-                DirSet ds = new DirSet();
-                ds.setDefaultexcludes(useDefaultExcludes);
-                ds.setDir(new File(pathElements[i]));
-                ds.createPatternSet().addConfiguredPatternset(ps);
-                dirSets.addElement(ds);
-            }
-        }
-
-        Enumeration enum = dirSets.elements();
-        while (enum.hasMoreElements()) {
-            DirSet ds = (DirSet) enum.nextElement();
-            File baseDir = ds.getDir(getProject());
-            log("scanning " + baseDir + " for packages.", Project.MSG_DEBUG); 
-            DirectoryScanner dsc = ds.getDirectoryScanner(getProject());
-            String[] dirs = dsc.getIncludedDirectories();
-            boolean containsPackages = false;
-            for (int i = 0; i < dirs.length; i++) {
-                // are there any java files in this directory?
-                File pd = new File(baseDir, dirs[i]);
-                String[] files = pd.list(new FilenameFilter () {
-                        public boolean accept(File dir1, String name) {
-                            if (name.endsWith(".java")) {
-                                return true;
-                            }
-                            return false;        // ignore dirs
-                        }
-                    });
-
-                if (files.length > 0) {
-                    containsPackages = true;
-                    String packageName = 
-                        dirs[i].replace(File.separatorChar, '.');
-                    if (!addedPackages.contains(packageName)) {
-                        addedPackages.addElement(packageName);
-                        pn.addElement(packageName);
-                    }
-                }
-            }
-            if (containsPackages) {
-                sp.createPathElement().setLocation(baseDir);
-            } else {
-                log(baseDir + " doesn\'t contain any packages, dropping it.",
-                    Project.MSG_VERBOSE); 
-            }
-        }
-    }
-
-    private class JavadocOutputStream extends LogOutputStream {
-        JavadocOutputStream(int level) {
-            super(Javadoc.this, level);
-        }
-
-        //
-        // Override the logging of output in order to filter out Generating
-        // messages.  Generating messages are set to a priority of VERBOSE
-        // unless they appear after what could be an informational message.
-        //
-        private String queuedLine = null;
-        protected void processLine(String line, int messageLevel) {
-            if (messageLevel == Project.MSG_INFO 
-                && line.startsWith("Generating ")) {
-                if (queuedLine != null) {
-                    super.processLine(queuedLine, Project.MSG_VERBOSE);
-                }
-                queuedLine = line;
-            } else {
-                if (queuedLine != null) {
-                    if (line.startsWith("Building ")) {
-                        super.processLine(queuedLine, Project.MSG_VERBOSE);
-                    } else {
-                        super.processLine(queuedLine, Project.MSG_INFO);
-                    }
-                    queuedLine = null;
-                }
-                super.processLine(line, messageLevel);
-            }
-        }
-
-
-        protected void logFlush() {
-            if (queuedLine != null) {
-                super.processLine(queuedLine, Project.MSG_VERBOSE);
-                queuedLine = null;
-            }
-        }
-    }
-
-    /**
-     * Convenience method to expand properties.
-     */
-    protected String expand(String content) {
-        return project.replaceProperties(content);
-    }
-
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/Jikes.java b/src/main/org/apache/tools/ant/taskdefs/Jikes.java
deleted file mode 100644
index 6cc3221..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Jikes.java
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000,2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs;
-
-import java.io.File;
-import java.io.PrintWriter;
-import java.io.FileWriter;
-import java.io.IOException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.BuildException;
-
-import java.util.Random;
-
-/**
- * Encapsulates a Jikes compiler, by directly executing an external
- * process.
- *
- * <p><strong>As of Ant 1.2, this class is considered to be dead code
- * by the Ant developers and is unmaintained.  Don't use
- * it.</strong></p>
- *
- * @author skanthak@muehlheim.de
- * @deprecated merged into the class Javac.
- */
-public class Jikes {
-
-    protected JikesOutputParser jop;
-    protected String command;
-    protected Project project;
-
-    /**
-     * Constructs a new Jikes obect.
-     * @param jop - Parser to send jike's output to
-     * @param command - name of jikes executeable
-     */
-    protected Jikes(JikesOutputParser jop, String command, Project project) {
-        super();
-
-        System.err.println("As of Ant 1.2 released in October 2000, " 
-            + "the Jikes class");
-        System.err.println("is considered to be dead code by the Ant " 
-            + "developers and is unmaintained.");
-        System.err.println("Don\'t use it!");
-
-        this.jop = jop;
-        this.command = command;
-        this.project = project;
-    }
-
-    /**
-     * Do the compile with the specified arguments.
-     * @param args - arguments to pass to process on command line
-     */
-    protected void compile(String[] args) {
-        String[] commandArray = null;
-        File tmpFile = null;
-
-        try {
-            String myos = System.getProperty("os.name");
-
-            // Windows has a 32k limit on total arg size, so
-            // create a temporary file to store all the arguments
-
-            // There have been reports that 300 files could be compiled
-            // so 250 is a conservative approach
-            if (myos.toLowerCase().indexOf("windows") >= 0 
-                && args.length > 250) {
-                PrintWriter out = null;
-                try {
-                    tmpFile = new File("jikes" + (new Random(System.currentTimeMillis())).nextLong());
-                    out = new PrintWriter(new FileWriter(tmpFile));
-                    for (int i = 0; i < args.length; i++) {
-                        out.println(args[i]);
-                    }
-                    out.flush();
-                    commandArray = new String[] { command, 
-                                                  "@" + tmpFile.getAbsolutePath()};
-                } catch (IOException e) {
-                    throw new BuildException("Error creating temporary file", 
-                                             e);
-                } finally {
-                    if (out != null) {
-                        try {out.close();} catch (Throwable t) {}
-                    }
-                }
-            } else {
-                commandArray = new String[args.length + 1];
-                commandArray[0] = command;
-                System.arraycopy(args, 0, commandArray, 1, args.length);
-            }
-            
-            // We assume, that everything jikes writes goes to
-            // standard output, not to standard error. The option
-            // -Xstdout that is given to Jikes in Javac.doJikesCompile()
-            // should guarantee this. At least I hope so. :)
-            try {
-                Execute exe = new Execute(jop);
-                exe.setAntRun(project);
-                exe.setWorkingDirectory(project.getBaseDir());
-                exe.setCommandline(commandArray);
-                exe.execute();
-            } catch (IOException e) {
-                throw new BuildException("Error running Jikes compiler", e);
-            }
-        } finally {
-            if (tmpFile != null) {
-                tmpFile.delete();
-            }
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/JikesOutputParser.java b/src/main/org/apache/tools/ant/taskdefs/JikesOutputParser.java
deleted file mode 100644
index f80c04d..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/JikesOutputParser.java
+++ /dev/null
@@ -1,207 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000,2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.Project;
-    
-import java.io.BufferedReader;
-import java.io.OutputStream;
-import java.io.InputStream;
-import java.io.IOException;
-import java.io.InputStreamReader;
-
-/**
- * Parses output from jikes and
- * passes errors and warnings
- * into the right logging channels of Project.
- *
- * <p><strong>As of Ant 1.2, this class is considered to be dead code
- * by the Ant developers and is unmaintained.  Don't use
- * it.</strong></p>
- *
- * @author skanthak@muehlheim.de
- * @deprecated use Jikes' exit value to detect compilation failure.
- */
-public class JikesOutputParser implements ExecuteStreamHandler {
-    protected Task task;
-    protected boolean errorFlag = false; // no errors so far
-    protected int errors;
-    protected int warnings;
-    protected boolean error = false;
-    protected boolean emacsMode;
-    
-    protected BufferedReader br;
-
-    /**
-     * Ignore.
-     */
-    public void setProcessInputStream(OutputStream os) {}
-
-    /**
-     * Ignore.
-     */
-    public void setProcessErrorStream(InputStream is) {}
-
-    /**
-     * Set the inputstream
-     */
-    public void setProcessOutputStream(InputStream is) throws IOException {
-        br = new BufferedReader(new InputStreamReader(is));
-    }
-
-    /**
-     * Invokes parseOutput.
-     */
-    public void start() throws IOException {
-        parseOutput(br);
-    }
-
-    /**
-     * Ignore.
-     */
-    public void stop() {}
-
-    /**
-     * Construct a new Parser object
-     * @param task - task in whichs context we are called
-     */
-    protected JikesOutputParser(Task task, boolean emacsMode) {
-        super();
-
-        System.err.println("As of Ant 1.2 released in October 2000, the " 
-            + "JikesOutputParser class");
-        System.err.println("is considered to be dead code by the Ant " 
-            + "developers and is unmaintained.");
-        System.err.println("Don\'t use it!");
-
-        this.task = task;
-        this.emacsMode = emacsMode;
-    }
-
-    /**
-     * Parse the output of a jikes compiler
-     * @param reader - Reader used to read jikes's output
-     */
-    protected void parseOutput(BufferedReader reader) throws IOException {
-       if (emacsMode) {
-           parseEmacsOutput(reader);
-       } else {
-           parseStandardOutput(reader);
-       }
-    }
-
-    private void parseStandardOutput(BufferedReader reader) throws IOException {
-        String line;
-        String lower;
-        // We assume, that every output, jike does, stands for an error/warning
-        // XXX 
-        // Is this correct?
-        
-        // TODO:
-        // A warning line, that shows code, which contains a variable
-        // error will cause some trouble. The parser should definitely
-        // be much better.
-
-        while ((line = reader.readLine()) != null) {
-            lower = line.toLowerCase();
-            if (line.trim().equals("")) {
-                continue;
-            }
-            if (lower.indexOf("error") != -1) {
-                setError(true);
-            } else if (lower.indexOf("warning") != -1) {
-                setError(false);
-                   } else {
-                // If we don't know the type of the line
-                // and we are in emacs mode, it will be
-                // an error, because in this mode, jikes won't
-                // always print "error", but sometimes other
-                // keywords like "Syntax". We should look for
-                // all those keywords.
-                if (emacsMode) {
-                    setError(true);
-                }
-            }
-            log(line);
-        }
-    }
-
-    private void parseEmacsOutput(BufferedReader reader) throws IOException {
-       // This may change, if we add advanced parsing capabilities.
-       parseStandardOutput(reader);
-    }
-
-    private void setError(boolean err) {
-        error = err;
-        if (error) {
-            errorFlag = true;
-        }
-    }
-
-    private void log(String line) {
-       if (!emacsMode) {
-           task.log("", (error ? Project.MSG_ERR : Project.MSG_WARN));
-       }
-       task.log(line, (error ? Project.MSG_ERR : Project.MSG_WARN));
-    }
-
-    /**
-     * Indicate if there were errors during the compile
-     * @return if errors ocured
-     */
-    protected boolean getErrorFlag() {
-        return errorFlag;
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/KeySubst.java b/src/main/org/apache/tools/ant/taskdefs/KeySubst.java
deleted file mode 100644
index 85aa311..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/KeySubst.java
+++ /dev/null
@@ -1,221 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000,2002 The Apache Software Foundation.  All rights 
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.BuildException;
-import java.io.File;
-import java.io.BufferedReader;
-import java.io.BufferedWriter;
-import java.io.FileReader;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.util.Hashtable;
-import java.util.StringTokenizer;
-
-/**
- * Keyword substitution. Input file is written to output file.
- * Do not make input file same as output file.
- * Keywords in input files look like this: @foo@. See the docs for the 
- * setKeys method to understand how to do the substitutions.
- *
- * @author Jon S. Stevens <a href="mailto:jon@clearink.com">jon@clearink.com</a>
- * @since Ant 1.1
- * @deprecated KeySubst is deprecated since Ant 1.1. Use Filter + Copy
- * instead.
- */
-public class KeySubst extends Task {
-    private File source = null;
-    private File dest = null;
-    private String sep = "*";
-    private Hashtable replacements = new Hashtable();
-    
-    /**
-        Do the execution.
-    */
-    public void execute() throws BuildException {
-        log("!! KeySubst is deprecated. Use Filter + Copy instead. !!");
-        log("Performing Substitions");
-        if (source == null || dest == null) {
-            log("Source and destinations must not be null");
-            return;            
-        }
-        BufferedReader br = null;
-        BufferedWriter bw = null;
-        try {
-            br = new BufferedReader(new FileReader(source));
-            dest.delete();
-            bw = new BufferedWriter(new FileWriter(dest));
-
-            String line = null;
-            String newline = null;
-            line = br.readLine();
-            while (line != null) {
-                if (line.length() == 0) {
-                    bw.newLine();
-                } else {
-                    newline = KeySubst.replace(line, replacements);
-                    bw.write(newline);
-                    bw.newLine();
-                }
-                line = br.readLine();
-            }
-            bw.flush();
-        } catch (IOException ioe) {
-            ioe.printStackTrace();
-        } finally {
-            if (bw != null) {
-                try {
-                    bw.close();
-                } catch (IOException e) {}
-            }
-            if (bw != null) {
-                try {
-                    br.close();
-                } catch (IOException e) {}
-            }
-        }
-    }
-
-    /**
-        Set the source file.
-    */
-    public void setSrc(File s) {
-        this.source = s;
-    }
-
-    /**
-        Set the destination file.
-    */
-    public void setDest(File dest) {
-        this.dest = dest;
-    }
-
-    /**
-        Sets the seperator between name=value arguments
-        in setKeys(). By default it is "*".
-    */
-    public void setSep(String sep) {
-        this.sep = sep;
-    }
-    /**
-     * Sets the keys.
-     * 
-        Format string is like this:
-        <p>
-        name=value*name2=value
-        <p>
-        Names are case sensitive.
-        <p>
-        Use the setSep() method to change the * to something else
-        if you need to use * as a name or value.
-    */
-    public void setKeys(String keys) {
-        if (keys != null && keys.length() > 0) {
-            StringTokenizer tok =
-            new StringTokenizer(keys, this.sep, false);
-            while (tok.hasMoreTokens()) {
-                String token = tok.nextToken().trim();
-                StringTokenizer itok =
-                new StringTokenizer(token, "=", false);
-                
-                String name = itok.nextToken();
-                String value = itok.nextToken();
-                replacements.put(name, value);
-            }
-        }
-    }
-        
-
-    public static void main(String[] args) {
-        try {
-            Hashtable hash = new Hashtable();
-            hash.put("VERSION", "1.0.3");
-            hash.put("b", "ffff");
-            System.out.println(KeySubst.replace("$f ${VERSION} f ${b} jj $", 
-                                                hash));
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-    }
-
-    /**
-        Does replacement on text using the hashtable of keys.
-        
-        @return the string with the replacements in it.
-    */
-    public static String replace(String origString, Hashtable keys)
-        throws BuildException {
-        StringBuffer finalString = new StringBuffer();
-        int index = 0;
-        int i = 0;
-        String key = null;
-        while ((index = origString.indexOf("${", i)) > -1) {
-            key = origString.substring(index + 2, origString.indexOf("}", 
-                                       index + 3));
-            finalString.append (origString.substring(i, index));
-            if (keys.containsKey(key)) {
-                finalString.append (keys.get(key));
-            } else {
-                finalString.append ("${");
-                finalString.append (key);
-                finalString.append ("}");
-            }
-            i = index + 3 + key.length();
-        }
-        finalString.append (origString.substring(i));
-        return finalString.toString();
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/LoadFile.java b/src/main/org/apache/tools/ant/taskdefs/LoadFile.java
deleted file mode 100644
index 05435e2..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/LoadFile.java
+++ /dev/null
@@ -1,233 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.types.FilterChain;
-import org.apache.tools.ant.filters.util.ChainReaderHelper;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.BufferedInputStream;
-import java.io.Reader;
-import java.io.InputStreamReader;
-import java.io.IOException;
-import java.util.Vector;
-
-/**
- * Load a file into a property
- *
- * @author Steve Loughran
- * @author <a href="mailto:umagesh@apache.org">Magesh Umasankar</a>
- * @since Ant 1.5
- * @ant.task category="utility"
- */
-public final class LoadFile extends Task {
-
-    /**
-     * source file, usually null
-     */
-    private File srcFile = null;
-
-    /**
-     * what to do when it goes pear-shaped
-     */
-    private boolean failOnError = true;
-
-    /**
-     * Encoding to use for filenames, defaults to the platform's default
-     * encoding.
-     */
-    private String encoding = null;
-
-    /**
-     * name of property
-     */
-    private String property = null;
-
-    /**
-     * Holds FilterChains
-     */
-    private final Vector filterChains = new Vector();
-
-    /**
-     * Encoding to use for input, defaults to the platform's default
-     * encoding. <p>
-     *
-     * For a list of possible values see <a href="http://java.sun.com/products/jdk/1.2/docs/guide/internat/encoding.doc.html">
-     * http://java.sun.com/products/jdk/1.2/docs/guide/internat/encoding.doc.html
-     * </a>.</p>
-     *
-     * @param encoding The new Encoding value
-     */
-
-    public final void setEncoding(final String encoding) {
-        this.encoding = encoding;
-    }
-
-
-    /**
-     * Sets the Property attribute of the LoadFile object
-     *
-     * @param property The new Property value
-     */
-    public final void setProperty(final String property) {
-        this.property = property;
-    }
-
-
-    /**
-     * Sets the srcfile attribute.
-     *
-     * @param srcFile The new SrcFile value
-     */
-    public final void setSrcFile(final File srcFile) {
-        this.srcFile = srcFile;
-    }
-
-
-    /**
-     * Sets the Failonerror attribute of the LoadFile object
-     *
-     * @param fail The new Failonerror value
-     */
-    public final void setFailonerror(final boolean fail) {
-        failOnError = fail;
-    }
-
-
-    /**
-     * read in a source file to a property
-     *
-     * @exception BuildException if something goes wrong with the build
-     */
-    public final void execute()
-        throws BuildException {
-        //validation
-        if (srcFile == null) {
-            throw new BuildException("source file not defined");
-        }
-        if (property == null) {
-            throw new BuildException("output property not defined");
-        }
-        FileInputStream fis = null;
-        BufferedInputStream bis = null;
-        Reader instream = null;
-        log("loading " + srcFile + " into property " + property,
-            Project.MSG_VERBOSE);
-        try {
-            final long len = srcFile.length();
-            log("file size = " + len, Project.MSG_DEBUG);
-            //discard most of really big files
-            final int size = (int) len;
-            //open up the file
-            fis = new FileInputStream(srcFile);
-            bis = new BufferedInputStream(fis);
-            if (encoding == null) {
-                instream = new InputStreamReader(bis);
-            } else {
-                instream = new InputStreamReader(bis, encoding);
-            }
-
-            ChainReaderHelper crh = new ChainReaderHelper();
-            crh.setBufferSize(size);
-            crh.setPrimaryReader(instream);
-            crh.setFilterChains(filterChains);
-            crh.setProject(project);
-            instream = crh.getAssembledReader();
-
-            String text = crh.readFully(instream);
-
-            if (text != null) {
-                project.setNewProperty(property, text);
-                log("loaded " + text.length() + " characters",
-                    Project.MSG_VERBOSE);
-                log(property + " := " + text, Project.MSG_DEBUG);
-            }
-
-        } catch (final IOException ioe) {
-            final String message = "Unable to load file: " + ioe.toString();
-            if (failOnError) {
-                throw new BuildException(message, ioe, location);
-            } else {
-                log(message, Project.MSG_ERR);
-            }
-        } catch (final BuildException be) {
-            if (failOnError) {
-                throw be;
-            } else {
-                log(be.getMessage(), Project.MSG_ERR);
-            }
-        } finally {
-            try {
-                if (fis != null) {
-                    fis.close();
-                }
-            } catch (IOException ioex) {
-                //ignore
-            }
-        }
-    }
-
-    /**
-     * Add the FilterChain element.
-     */
-    public final void addFilterChain(FilterChain filter) {
-        filterChains.addElement(filter);
-    }
-
-//end class
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/LoadProperties.java b/src/main/org/apache/tools/ant/taskdefs/LoadProperties.java
deleted file mode 100644
index 08f5e55..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/LoadProperties.java
+++ /dev/null
@@ -1,185 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.types.FilterChain;
-import org.apache.tools.ant.filters.StringInputStream;
-import org.apache.tools.ant.filters.util.ChainReaderHelper;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.BufferedInputStream;
-import java.io.InputStreamReader;
-import java.io.Reader;
-import java.io.IOException;
-import java.util.Enumeration;
-import java.util.Properties;
-import java.util.Vector;
-
-/**
- * Load a file's contents as Ant Properties.
- *
- * @author <a href="mailto:umagesh@apache.org">Magesh Umasankar</a>
- * @since Ant 1.5
- * @ant.task category="utility"
- */
-public final class LoadProperties extends Task {
-
-    /**
-     * Source file
-     */
-    private File srcFile = null;
-
-    /**
-     * Holds filterchains
-     */
-    private final Vector filterChains = new Vector();
-
-    /**
-     * Sets the srcfile attribute.
-     *
-     * @param srcFile The new SrcFile value
-     */
-    public final void setSrcFile(final File srcFile) {
-        this.srcFile = srcFile;
-    }
-
-    /**
-     * read in a source file's contents and load them up as Ant properties
-     *
-     * @exception BuildException if something goes wrong with the build
-     */
-    public final void execute() throws BuildException {
-        //validation
-        if (srcFile == null) {
-            throw new BuildException("Source file not defined.");
-        }
-
-        if (!srcFile.exists()) {
-            throw new BuildException("Source file does not exist.");
-        }
-
-        if (!srcFile.isFile()) {
-            throw new BuildException("Source file is not a file.");
-        }
-
-        FileInputStream fis = null;
-        BufferedInputStream bis = null;
-        Reader instream = null;
-
-        try {
-            final long len = srcFile.length();
-            final int size = (int) len;
-
-            //open up the file
-            fis = new FileInputStream(srcFile);
-            bis = new BufferedInputStream(fis);
-            instream = new InputStreamReader(bis);
-
-            ChainReaderHelper crh = new ChainReaderHelper();
-            crh.setBufferSize(size);
-            crh.setPrimaryReader(instream);
-            crh.setFilterChains(filterChains);
-            crh.setProject(project);
-            instream = crh.getAssembledReader();
-
-            String text = crh.readFully(instream);
-
-            if (text != null) {
-                if (!text.endsWith("\n")) {
-                    text = text + "\n";
-                }
-
-                final StringInputStream sis = new StringInputStream(text);
-                final Properties props = new Properties();
-                props.load(sis);
-                final Enumeration e = props.keys();
-                while (e.hasMoreElements()) {
-                    final String key = (String) e.nextElement();
-                    final String value = props.getProperty(key);
-                    if (key != null && value != null
-                            && value.trim().length() > 0) {
-                        project.setNewProperty(key, value);
-                    }
-                }
-                sis.close();
-            }
-
-        } catch (final IOException ioe) {
-            final String message = "Unable to load file: " + ioe.toString();
-            throw new BuildException(message, ioe, location);
-        } catch (final BuildException be) {
-            throw be;
-        } finally {
-            try {
-                if (fis != null) {
-                    fis.close();
-                }
-            } catch (IOException ioex) {
-                //ignore
-            }
-        }
-    }
-
-    /**
-     * Add the FilterChain element.
-     */
-    public final void addFilterChain(FilterChain filter) {
-        filterChains.addElement(filter);
-    }
-
-//end class
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/LogOutputStream.java b/src/main/org/apache/tools/ant/taskdefs/LogOutputStream.java
deleted file mode 100644
index f450eef..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/LogOutputStream.java
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.Task;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.ByteArrayOutputStream;
-
-
-/**
- * Logs each line written to this stream to the log system of ant.
- *
- * Tries to be smart about line separators.<br>
- * TODO: This class can be split to implement other line based processing
- * of data written to the stream.
- *
- * @author thomas.haas@softwired-inc.com
- * @since Ant 1.2
- */
-public class LogOutputStream extends OutputStream {
-
-    private ByteArrayOutputStream buffer = new ByteArrayOutputStream();
-    private boolean skip = false;
-
-    private Task task;
-    private int level = Project.MSG_INFO;
-
-    /**
-     * Creates a new instance of this class.
-     *
-     * @param task the task for whom to log
-     * @param level loglevel used to log data written to this stream.
-     */
-    public LogOutputStream(Task task, int level) {
-        this.task = task;
-        this.level = level;
-    }
-
-
-    /**
-     * Write the data to the buffer and flush the buffer, if a line
-     * separator is detected.
-     *
-     * @param cc data to log (byte).
-     */
-    public void write(int cc) throws IOException {
-        final byte c = (byte) cc;
-        if ((c == '\n') || (c == '\r')) {
-            if (!skip) {
-              processBuffer();
-            }
-        } else {
-          buffer.write(cc);
-        }
-        skip = (c == '\r');
-    }
-
-
-    /**
-     * Converts the buffer to a string and sends it to <code>processLine</code>
-     */
-    protected void processBuffer() {
-        processLine(buffer.toString());
-        buffer.reset();
-    }
-
-    /**
-     * Logs a line to the log system of ant.
-     *
-     * @param line the line to log.
-     */
-    protected void processLine(String line) {
-        processLine(line, level);
-    }
-
-    /**
-     * Logs a line to the log system of ant.
-     *
-     * @param line the line to log.
-     */
-    protected void processLine(String line, int level) {
-        task.log(line, level);
-    }
-
-
-    /**
-     * Writes all remaining
-     */
-    public void close() throws IOException {
-        if (buffer.size() > 0) {
-          processBuffer();
-        }
-        super.close();
-    }
-
-    public int getMessageLevel() {
-        return level;
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/LogStreamHandler.java b/src/main/org/apache/tools/ant/taskdefs/LogStreamHandler.java
deleted file mode 100644
index a46dde8..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/LogStreamHandler.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000,2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Task;
-
-import java.io.IOException;
-
-/**
- * Logs standard output and error of a subprocess to the log system of ant.
- *
- * @author thomas.haas@softwired-inc.com
- * @since Ant 1.2
- */
-public class LogStreamHandler extends PumpStreamHandler {
-
-    /**
-     * Creates a new instance of this class.
-     *
-     * @param task the task for whom to log
-     * @param outlevel the loglevel used to log standard output
-     * @param errlevel the loglevel used to log standard error
-     */
-    public LogStreamHandler(Task task, int outlevel, int errlevel) {
-        super(new LogOutputStream(task, outlevel),
-              new LogOutputStream(task, errlevel));
-    }
-
-    public void stop() {
-        super.stop();
-        try {
-            getErr().close();
-            getOut().close();
-        } catch (IOException e) {
-            // plain impossible
-            throw new BuildException(e);
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/Manifest.java b/src/main/org/apache/tools/ant/taskdefs/Manifest.java
deleted file mode 100644
index 75b4254..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Manifest.java
+++ /dev/null
@@ -1,1135 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import java.util.Vector;
-import java.util.Hashtable;
-import java.util.Enumeration;
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileReader;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.PrintWriter;
-import java.io.Reader;
-import java.io.StringWriter;
-import java.io.UnsupportedEncodingException;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.types.EnumeratedAttribute;
-import org.apache.tools.ant.util.CollectionUtils;
-
-/**
- * Class to manage Manifest information
- *
- * @author Conor MacNeill
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- * @author <a href="mailto:j_a_fernandez@yahoo.com">Jose Alberto Fernandez</a>
- *
- * @since Ant 1.4
- *
- * @ant.task category="java"
- */
-public class Manifest extends Task {
-    /** The standard manifest version header */
-    public static final String ATTRIBUTE_MANIFEST_VERSION 
-        = "Manifest-Version";
-
-    /** The standard Signature Version header */
-    public static final String ATTRIBUTE_SIGNATURE_VERSION 
-        = "Signature-Version";
-
-    /** The Name Attribute is the first in a named section */
-    public static final String ATTRIBUTE_NAME = "Name";
-
-    /** The From Header is disallowed in a Manifest */
-    public static final String ATTRIBUTE_FROM = "From";
-
-    /** The Class-Path Header is special - it can be duplicated */
-    public static final String ATTRIBUTE_CLASSPATH = "class-path";
-
-    /** Default Manifest version if one is not specified */
-    public static final  String DEFAULT_MANIFEST_VERSION = "1.0";
-
-    /** The max length of a line in a Manifest */
-    public static final int MAX_LINE_LENGTH = 72;
-    
-    /** 
-     * Max length of a line section which is continued. Need to allow 
-     * for the CRLF.
-     */
-    public static final int MAX_SECTION_LENGTH = MAX_LINE_LENGTH - 2;
-
-    /** The End-Of-Line marker in manifests */
-    public static final String EOL = "\r\n";
-    
-    /**
-     * Helper class for Manifest's mode attribute.
-     */
-    public static class Mode extends EnumeratedAttribute {
-        /** 
-         * Get Allowed values for the mode attribute.
-         *
-         * @return a String array of the allowed values.
-         */
-        public String[] getValues() {
-            return new String[] {"update", "replace"};
-        }
-    }
-
-    /**
-     * Class to hold manifest attributes
-     */
-    public static class Attribute {
-        /** The attribute's name */
-        private String name = null;
-
-        /** The attribute's value */
-        private Vector values = new Vector();
-
-        /**
-         * For multivalued attributes, this is the index of the attribute
-         * currently being defined.
-         */
-        private int currentIndex = 0;
-        
-        /**
-         * Construct an empty attribute */
-        public Attribute() {
-        }
-
-        /**
-         * Construct an attribute by parsing a line from the Manifest
-         *
-         * @param line the line containing the attribute name and value
-         *
-         * @throws ManifestException if the line is not valid
-         */
-        public Attribute(String line) throws ManifestException {
-            parse(line);
-        }
-
-        /**
-         * Construct a manifest by specifying its name and value
-         *
-         * @param name the attribute's name
-         * @param value the Attribute's value
-         */
-        public Attribute(String name, String value) {
-            this.name = name;
-            setValue(value);
-        }
-
-        /**
-         * @see java.lang.Object#hashCode
-         */
-        public int hashCode() {
-            int hashCode = 0;
-            
-            if (name != null) {
-                hashCode += name.hashCode();
-            }
-            
-            hashCode += values.hashCode();
-            return hashCode;
-        }
-
-        /**
-         * @see java.lang.Object#equals
-         */
-        public boolean equals(Object rhs) {
-            if (rhs == null || rhs.getClass() != getClass()) {
-                return false;
-            }
-    
-            if (rhs == this) {
-                return true;
-            }
-
-            Attribute rhsAttribute = (Attribute) rhs;
-            String lhsKey = getKey();
-            String rhsKey = rhsAttribute.getKey();
-            if ((lhsKey == null && rhsKey != null) 
-                 || (lhsKey != null && rhsKey == null)
-                 || !lhsKey.equals(rhsKey)) {
-                return false;
-            }
-            
-            return CollectionUtils.equals(values, rhsAttribute.values);
-        }
-
-        /**
-         * Parse a line into name and value pairs
-         *
-         * @param line the line to be parsed
-         *
-         * @throws ManifestException if the line does not contain a colon
-         * separating the name and value
-         */
-        public void parse(String line) throws ManifestException {
-            int index = line.indexOf(": ");
-            if (index == -1) {
-                throw new ManifestException("Manifest line \"" + line 
-                    + "\" is not valid as it does not " 
-                    + "contain a name and a value separated by ': ' ");
-            }
-            name = line.substring(0, index);
-            setValue(line.substring(index + 2));
-        }
-
-        /**
-         * Set the Attribute's name
-         *
-         * @param name the attribute's name
-         */
-        public void setName(String name) {
-            this.name = name;
-        }
-
-        /**
-         * Get the Attribute's name
-         *
-         * @return the attribute's name.
-         */
-        public String getName() {
-            return name;
-        }
-
-        /**
-         * Get the attribute's Key - its name in lower case.
-         *
-         * @return the attribute's key.
-         */
-        public String getKey() {
-            if (name == null) {
-                return null;
-            }
-            return name.toLowerCase();
-        }
-        
-        /**
-         * Set the Attribute's value
-         *
-         * @param value the attribute's value
-         */
-        public void setValue(String value) {
-            if (currentIndex >= values.size()) {
-                values.addElement(value);
-                currentIndex = values.size() - 1;
-            } else {
-                values.setElementAt(value, currentIndex);
-            }
-        }
-
-        /**
-         * Get the Attribute's value
-         *
-         * @return the attribute's value.
-         */
-        public String getValue() {
-            if (values.size() == 0) {
-                return null;
-            }
-            
-            String fullValue = "";
-            for (Enumeration e = getValues(); e.hasMoreElements();) {
-                String value = (String) e.nextElement();
-                fullValue += value + " ";
-            }
-            return fullValue.trim();
-        }
-
-        /**
-         * Add a new value to this attribute - making it multivalued
-         *
-         * @param value the attribute's additional value
-         */
-        public void addValue(String value) {
-            currentIndex++;
-            setValue(value);
-        }
-        
-        /** 
-         * Get all the attribute's values
-         *
-         * @return an enumeration of the attributes values
-         */
-        public Enumeration getValues() {
-            return values.elements();
-        }
-        
-        /**
-         * Add a continuation line from the Manifest file
-         *
-         * When lines are too long in a manifest, they are continued on the
-         * next line by starting with a space. This method adds the continuation
-         * data to the attribute value by skipping the first character.
-         *
-         * @param line the continuation line.
-         */
-        public void addContinuation(String line) {
-            String currentValue = (String) values.elementAt(currentIndex);
-            setValue(currentValue + line.substring(1));
-        }
-
-        /**
-         * Write the attribute out to a print writer.
-         *
-         * @param writer the Writer to which the attribute is written
-         *
-         * @throws IOException if the attribte value cannot be written
-         */
-        public void write(PrintWriter writer) throws IOException {
-            for (Enumeration e = getValues(); e.hasMoreElements();) {
-                writeValue(writer, (String) e.nextElement());
-            }
-        }
-        
-        /**
-         * Write a single attribute value out
-         *
-         * @param writer the Writer to which the attribute is written
-         * @param value the attribute value
-         *
-         * @throws IOException if the attribte value cannot be written
-         */
-        private void writeValue(PrintWriter writer, String value) 
-             throws IOException {
-            String line = name + ": " + value;
-            while (line.getBytes().length > MAX_LINE_LENGTH) {
-                // try to find a MAX_LINE_LENGTH byte section
-                int breakIndex = MAX_SECTION_LENGTH;
-                String section = line.substring(0, breakIndex);
-                while (section.getBytes().length > MAX_SECTION_LENGTH 
-                     && breakIndex > 0) {
-                    breakIndex--;
-                    section = line.substring(0, breakIndex);
-                }
-                if (breakIndex == 0) {
-                    throw new IOException("Unable to write manifest line " 
-                        + name + ": " + value);
-                }
-                writer.print(section + EOL);
-                line = " " + line.substring(breakIndex);
-            }
-            writer.print(line + EOL);
-        }
-    }
-    
-    /**
-     * Class to represent an individual section in the
-     * Manifest. A section consists of a set of attribute values,
-     * separated from other sections by a blank line.
-     */
-    public static class Section {
-        /** Warnings for this section */
-        private Vector warnings = new Vector();
-
-        /** 
-         * The section's name if any. The main section in a 
-         * manifest is unnamed.
-         */
-        private String name = null;
-
-        /** The section's attributes.*/
-        private Hashtable attributes = new Hashtable();
-
-        /** Index used to retain the attribute ordering */
-        private Vector attributeIndex = new Vector();
-        
-        /**
-         * Set the Section's name
-         *
-         * @param name the section's name
-         */
-        public void setName(String name) {
-            this.name = name;
-        }
-
-        /**
-         * Get the Section's name
-         *
-         * @return the section's name.
-         */
-        public String getName() {
-            return name;
-        }
-
-        /**
-         * Read a section through a reader
-         *
-         * @param reader the reader from which the section is read
-         *
-         * @return the name of the next section if it has been read as 
-         *         part of this section - This only happens if the 
-         *         Manifest is malformed.
-         *
-         * @throws ManifestException if the section is not valid according 
-         *         to the JAR spec
-         * @throws IOException if the section cannot be read from the reader.
-         */
-        public String read(BufferedReader reader) 
-             throws ManifestException, IOException {
-            Attribute attribute = null;
-            while (true) {
-                String line = reader.readLine();
-                if (line == null || line.length() == 0) {
-                    return null;
-                }
-                if (line.charAt(0) == ' ') {
-                    // continuation line
-                    if (attribute == null) {
-                        if (name != null) {
-                            // a continuation on the first line is a 
-                            // continuation of the name - concatenate this 
-                            // line and the name
-                            name += line.substring(1);
-                        } else {
-                            throw new ManifestException("Can't start an " 
-                                + "attribute with a continuation line " + line);
-                        }
-                    } else {
-                        attribute.addContinuation(line);
-                    }
-                } else {
-                    attribute = new Attribute(line);
-                    String nameReadAhead = addAttributeAndCheck(attribute);
-                    if (nameReadAhead != null) {
-                        return nameReadAhead;
-                    }
-                }
-            }
-        }
-
-        /**
-         * Merge in another section
-         *
-         * @param section the section to be merged with this one.
-         *
-         * @throws ManifestException if the sections cannot be merged.
-         */
-        public void merge(Section section) throws ManifestException {
-            if (name == null && section.getName() != null 
-                || name != null 
-                && !(name.equalsIgnoreCase(section.getName()))) {
-                throw new ManifestException("Unable to merge sections " 
-                    + "with different names");
-            }
-
-            Enumeration e = section.getAttributeKeys();
-            while (e.hasMoreElements()) {
-                String attributeName = (String) e.nextElement();
-                Attribute attribute = section.getAttribute(attributeName);
-                if (attributeName.equals(ATTRIBUTE_CLASSPATH) &&
-                        attributes.containsKey(attributeName)) {
-                    Attribute ourClassPath = getAttribute(attributeName);
-                    Enumeration cpe = attribute.getValues();
-                    while (cpe.hasMoreElements()) {
-                        String value = (String) cpe.nextElement();
-                        ourClassPath.addValue(value);
-                    }
-                } else {
-                    // the merge file always wins
-                    storeAttribute(attribute);
-                }
-            }
-
-            // add in the warnings
-            Enumeration warnEnum = section.warnings.elements();
-            while (warnEnum.hasMoreElements()) {
-                warnings.addElement(warnEnum.nextElement());
-            }
-        }
-
-        /**
-         * Write the section out to a print writer.
-         *
-         * @param writer the Writer to which the section is written
-         *
-         * @throws IOException if the section cannot be written
-         */
-        public void write(PrintWriter writer) throws IOException {
-            if (name != null) {
-                Attribute nameAttr = new Attribute(ATTRIBUTE_NAME, name);
-                nameAttr.write(writer);
-            }
-            Enumeration e = getAttributeKeys();
-            while (e.hasMoreElements()) {
-                String key = (String) e.nextElement();
-                Attribute attribute = getAttribute(key);
-                attribute.write(writer);
-            }
-            writer.print(EOL);
-        }
-
-        /**
-         * Get a attribute of the section
-         *
-         * @param attributeName the name of the attribute
-         * @return a Manifest.Attribute instance if the attribute is
-         *         single-valued, otherwise a Vector of Manifest.Attribute
-         *         instances.
-         */
-        public Attribute getAttribute(String attributeName) {
-            return (Attribute) attributes.get(attributeName.toLowerCase());
-        }
-
-        /**
-         * Get the attribute keys.
-         *
-         * @return an Enumeration of Strings, each string being the lower case
-         *         key of an attribute of the section.
-         */
-        public Enumeration getAttributeKeys() {
-            return attributeIndex.elements();
-        }
-        
-        /**
-         * Get the value of the attribute with the name given.
-         *
-         * @param attributeName the name of the attribute to be returned.
-         *
-         * @return the attribute's value or null if the attribute does not exist
-         *         in the section
-         */
-        public String getAttributeValue(String attributeName) {
-            Attribute attribute = getAttribute(attributeName.toLowerCase());
-            if (attribute == null) {
-                return null;
-            }
-            return attribute.getValue();
-        }
-
-        /**
-         * Remove tge given attribute from the section
-         *
-         * @param attributeName the name of the attribute to be removed.
-         */
-        public void removeAttribute(String attributeName) {
-            String key = attributeName.toLowerCase();
-            attributes.remove(key);
-            attributeIndex.removeElement(key);
-        }
-
-        /**
-         * Add an attribute to the section.
-         *
-         * @param attribute the attribute to be added to the section
-         *
-         * @exception ManifestException if the attribute is not valid.
-         */
-        public void addConfiguredAttribute(Attribute attribute) 
-             throws ManifestException {
-            String check = addAttributeAndCheck(attribute);
-            if (check != null) {
-                throw new BuildException("Specify the section name using " 
-                    + "the \"name\" attribute of the <section> element rather "
-                    + "than using a \"Name\" manifest attribute");
-            }
-        }
-
-        /**
-         * Add an attribute to the section
-         *
-         * @param attribute the attribute to be added.
-         *
-         * @return the value of the attribute if it is a name 
-         *         attribute - null other wise
-         *
-         * @exception ManifestException if the attribute already 
-         *            exists in this section.
-         */
-        public String addAttributeAndCheck(Attribute attribute) 
-             throws ManifestException {
-            if (attribute.getName() == null || attribute.getValue() == null) {
-                throw new BuildException("Attributes must have name and value");
-            }
-            if (attribute.getKey().equalsIgnoreCase(ATTRIBUTE_NAME)) {
-                warnings.addElement("\"" + ATTRIBUTE_NAME + "\" attributes " 
-                    + "should not occur in the main section and must be the "
-                    + "first element in all other sections: \"" 
-                    + attribute.getName() + ": " + attribute.getValue() + "\"");
-                return attribute.getValue();
-            }
-
-            if (attribute.getKey().startsWith(ATTRIBUTE_FROM.toLowerCase())) {
-                warnings.addElement("Manifest attributes should not start " 
-                    + "with \"" + ATTRIBUTE_FROM + "\" in \"" 
-                    + attribute.getName() + ": " + attribute.getValue() + "\"");
-            } else {
-                // classpath attributes go into a vector
-                String attributeKey = attribute.getKey();
-                if (attributeKey.equals(ATTRIBUTE_CLASSPATH)) {
-                    Attribute classpathAttribute = 
-                        (Attribute) attributes.get(attributeKey);
-                    
-                    if (classpathAttribute == null) {
-                        storeAttribute(attribute);
-                    } else {
-                        Enumeration e = attribute.getValues();
-                        while (e.hasMoreElements()) {
-                            String value = (String) e.nextElement();
-                            classpathAttribute.addValue(value);
-                        }
-                    }
-                } else if (attributes.containsKey(attributeKey)) {
-                    throw new ManifestException("The attribute \"" 
-                        + attribute.getName() + "\" may not occur more " 
-                        + "than once in the same section");
-                } else {
-                    storeAttribute(attribute);
-                }
-            }
-            return null;
-        }
-        
-        /**
-         * Store an attribute and update the index.
-         *
-         * @param attribute the attribute to be stored
-         */
-        private void storeAttribute(Attribute attribute) {
-            if (attribute == null) {
-                return;
-            }
-            String attributeKey = attribute.getKey();
-            attributes.put(attributeKey, attribute);
-            if (!attributeIndex.contains(attributeKey)) {
-                attributeIndex.addElement(attributeKey);
-            }
-        }
-
-        /**
-         * Get the warnings for this section.
-         *
-         * @return an Enumeration of warning strings.
-         */
-        public Enumeration getWarnings() {
-            return warnings.elements();
-        }
-
-        /**
-         * @see java.lang.Object#hashCode
-         */
-        public int hashCode() {
-            int hashCode = 0;
-            
-            if (name != null) {
-                hashCode += name.hashCode();
-            }
-            
-            hashCode += attributes.hashCode();
-            return hashCode;
-        }
-
-        /**
-         * @see java.lang.Object#equals
-         */
-        public boolean equals(Object rhs) {
-            if (rhs == null || rhs.getClass() != getClass()) {
-                return false;
-            }
-    
-            if (rhs == this) {
-                return true;
-            }
-
-            Section rhsSection = (Section) rhs;
-            
-            return attributes.equals(rhsSection.attributes);
-        }
-    }
-
-
-    /** The version of this manifest */
-    private String manifestVersion = DEFAULT_MANIFEST_VERSION;
-
-    /** The main section of this manifest */
-    private Section mainSection = new Section();
-
-    /** The named sections of this manifest */
-    private Hashtable sections = new Hashtable();
-
-    /** Index of sections - used to retain order of sections in manifest */
-    private Vector sectionIndex = new Vector();
-
-    /**
-     * The file to which the manifest should be written when used as a task
-     */
-    private File manifestFile;
-
-    /**
-     * The mode with which the manifest file is written 
-     */
-    private Mode mode;
-
-    /**
-     * Construct a manifest from Ant's default manifest file.
-     *
-     * @return the default manifest.
-     * @exception BuildException if there is a problem loading the 
-     *            default manifest
-     */
-    public static Manifest getDefaultManifest() throws BuildException {
-        try {
-            String defManifest = "/org/apache/tools/ant/defaultManifest.mf";
-            InputStream in = Manifest.class.getResourceAsStream(defManifest);
-            if (in == null) {
-                throw new BuildException("Could not find default manifest: " 
-                    + defManifest);
-            }
-            try {
-                return new Manifest(new InputStreamReader(in, "ASCII"));
-            } catch (UnsupportedEncodingException e) {
-                return new Manifest(new InputStreamReader(in));
-            }
-        } catch (ManifestException e) {
-            throw new BuildException("Default manifest is invalid !!", e);
-        } catch (IOException e) {
-            throw new BuildException("Unable to read default manifest", e);
-        }
-    }
-
-    /** Construct an empty manifest */
-    public Manifest() {
-        mode = new Mode();
-        mode.setValue("replace");
-        manifestVersion = null;
-    }
-
-    /**
-     * Read a manifest file from the given reader
-     *
-     * @param r is the reader from which the Manifest is read
-     *
-     * @throws ManifestException if the manifest is not valid according 
-     *         to the JAR spec
-     * @throws IOException if the manifest cannot be read from the reader.
-     */
-    public Manifest(Reader r) throws ManifestException, IOException {
-        BufferedReader reader = new BufferedReader(r);
-        // This should be the manifest version
-        String nextSectionName = mainSection.read(reader);
-        String readManifestVersion 
-            = mainSection.getAttributeValue(ATTRIBUTE_MANIFEST_VERSION);
-        if (readManifestVersion != null) {
-            manifestVersion = readManifestVersion;
-            mainSection.removeAttribute(ATTRIBUTE_MANIFEST_VERSION);
-        }
-
-        String line = null;
-        while ((line = reader.readLine()) != null) {
-            if (line.length() == 0) {
-                continue;
-            }
-
-            Section section = new Section();
-            if (nextSectionName == null) {
-                Attribute sectionName = new Attribute(line);
-                if (!sectionName.getName().equalsIgnoreCase(ATTRIBUTE_NAME)) {
-                    throw new ManifestException("Manifest sections should " 
-                        + "start with a \"" + ATTRIBUTE_NAME 
-                        + "\" attribute and not \"" 
-                        + sectionName.getName() + "\"");
-                }
-                nextSectionName = sectionName.getValue();
-            } else {
-                // we have already started reading this section
-                // this line is the first attribute. set it and then 
-                // let the normal read handle the rest
-                Attribute firstAttribute = new Attribute(line);
-                section.addAttributeAndCheck(firstAttribute);
-            }
-
-            section.setName(nextSectionName);
-            nextSectionName = section.read(reader);
-            addConfiguredSection(section);
-        }
-    }
-
-    /**
-     * Add a section to the manifest
-     *
-     * @param section the manifest section to be added
-     *
-     * @exception ManifestException if the secti0on is not valid.
-     */
-    public void addConfiguredSection(Section section) 
-         throws ManifestException {
-        String sectionName = section.getName();
-        if (sectionName == null) {
-            throw new BuildException("Sections must have a name");
-        }
-        sections.put(sectionName, section);
-        if (!sectionIndex.contains(sectionName)) {
-            sectionIndex.addElement(sectionName);
-        }
-    }
-
-    /**
-     * Add an attribute to the manifest - it is added to the main section.
-     *
-     * @param attribute the attribute to be added.
-     *
-     * @exception ManifestException if the attribute is not valid.
-     */
-    public void addConfiguredAttribute(Attribute attribute) 
-         throws ManifestException {
-        mainSection.addConfiguredAttribute(attribute);
-    }
-
-    /**
-     * Merge the contents of the given manifest into this manifest
-     *
-     * @param other the Manifest to be merged with this one.
-     *
-     * @throws ManifestException if there is a problem merging the 
-     *         manfest according to the Manifest spec.
-     */
-    public void merge(Manifest other) throws ManifestException {
-        merge(other, false);
-    }
-
-    /**
-     * Merge the contents of the given manifest into this manifest
-     *
-     * @param other the Manifest to be merged with this one.
-     * @param overwriteMain whether to overwrite the main section 
-     *        of the current manifest
-     *
-     * @throws ManifestException if there is a problem merging the 
-     *         manfest according to the Manifest spec.
-     */
-    public void merge(Manifest other, boolean overwriteMain) 
-         throws ManifestException {
-        if (other != null) {
-             if (overwriteMain) {
-                 mainSection = other.mainSection;
-             } else {
-                 mainSection.merge(other.mainSection);
-             }
-
-             if (other.manifestVersion != null) {
-                 manifestVersion = other.manifestVersion;
-             }
-
-             Enumeration e = other.getSectionNames();
-             while (e.hasMoreElements()) {
-                 String sectionName = (String) e.nextElement();
-                 Section ourSection = (Section) sections.get(sectionName);
-                 Section otherSection 
-                    = (Section) other.sections.get(sectionName);
-                 if (ourSection == null) {
-                     if (otherSection != null) {
-                         addConfiguredSection(otherSection);
-                     }
-                 } else {
-                     ourSection.merge(otherSection);
-                 }
-             }
-         }
-    }
-
-    /**
-    * Write the manifest out to a print writer.
-    *
-    * @param writer the Writer to which the manifest is written
-    *
-    * @throws IOException if the manifest cannot be written
-    */
-    public void write(PrintWriter writer) throws IOException {
-        writer.print(ATTRIBUTE_MANIFEST_VERSION + ": " + manifestVersion + EOL);
-        String signatureVersion 
-            = mainSection.getAttributeValue(ATTRIBUTE_SIGNATURE_VERSION);
-        if (signatureVersion != null) {
-            writer.print(ATTRIBUTE_SIGNATURE_VERSION + ": " 
-                + signatureVersion + EOL);
-            mainSection.removeAttribute(ATTRIBUTE_SIGNATURE_VERSION);
-        }
-        mainSection.write(writer);
-        
-        // add it back
-        if (signatureVersion != null) {
-            try {
-                Attribute svAttr = new Attribute(ATTRIBUTE_SIGNATURE_VERSION, 
-                    signatureVersion);
-                mainSection.addConfiguredAttribute(svAttr);
-            } catch (ManifestException e) {
-                // shouldn't happen - ignore
-            }
-        }
-
-        Enumeration e = sectionIndex.elements();
-        while (e.hasMoreElements()) {
-            String sectionName = (String) e.nextElement();
-            Section section = getSection(sectionName);
-            section.write(writer);
-        }
-    }
-
-    /**
-     * Convert the manifest to its string representation
-     *
-     * @return a multiline string with the Manifest as it 
-     *         appears in a Manifest file.
-     */
-    public String toString() {
-        StringWriter sw = new StringWriter();
-        try {
-            write(new PrintWriter(sw));
-        } catch (IOException e) {
-            return null;
-        }
-        return sw.toString();
-    }
-
-    /**
-     * Get the warnings for this manifest.
-     *
-     * @return an enumeration of warning strings
-     */
-    public Enumeration getWarnings() {
-        Vector warnings = new Vector();
-
-        Enumeration warnEnum = mainSection.getWarnings(); 
-        while (warnEnum.hasMoreElements()) {
-            warnings.addElement(warnEnum.nextElement());
-        }
-
-        // create a vector and add in the warnings for all the sections
-        Enumeration e = sections.elements(); 
-        while (e.hasMoreElements()) {
-            Section section = (Section) e.nextElement();
-            Enumeration e2 = section.getWarnings(); 
-            while (e2.hasMoreElements()) {
-                warnings.addElement(e2.nextElement());
-            }
-        }
-
-        return warnings.elements();
-    }
-
-    /**
-     * @see java.lang.Object#hashCode
-     */
-    public int hashCode() {
-        int hashCode = 0;
-        
-        if (manifestVersion != null) {
-            hashCode += manifestVersion.hashCode();
-        }
-        hashCode += mainSection.hashCode();
-        hashCode += sections.hashCode();
-        
-        return hashCode;
-    }
-    
-    /**
-     * @see java.lang.Object#equals
-     */
-    public boolean equals(Object rhs) {
-        if (rhs == null || rhs.getClass() != getClass()) {
-            return false;
-        }
-
-        if (rhs == this) {
-            return true;
-        }
-        
-        Manifest rhsManifest = (Manifest) rhs;
-        if (manifestVersion == null) {
-            if (rhsManifest.manifestVersion != null) {
-                return false;
-            }
-        } else if (!manifestVersion.equals(rhsManifest.manifestVersion)) {
-            return false;
-        }
-
-        if (!mainSection.equals(rhsManifest.mainSection)) {
-            return false;
-        }
-
-        return sections.equals(rhsManifest.sections);
-    }
-
-    /**
-     * The name of the manifest file to write (if used as a task).
-     *
-     * @param f the Manifest file to be written
-     */
-    public void setFile(File f) {
-        manifestFile = f;
-    }
-
-    /**
-     * Shall we update or replace an existing manifest?
-     *
-     * @param m the mode value - update or replace.
-     */
-    public void setMode(Mode m) {
-        mode = m;
-    }
-
-    /**
-     * Get the version of the manifest
-     *
-     * @return the manifest's version string
-     */
-    public String getManifestVersion() {
-        return manifestVersion;
-    }
-
-    /**
-     * Get the main section of the manifest
-     *
-     * @return the main section of the manifest
-     */
-    public Section getMainSection() {
-        return mainSection;
-    }
-
-    /**
-     * Get a particular section from the manifest
-     *
-     * @param name the name of the section desired.
-     * @return the specified section or null if that section
-     * does not exist in the manifest
-     */
-    public Section getSection(String name) {
-        return (Section) sections.get(name);
-    }
-
-    /**
-     * Get the section names in this manifest.
-     *
-     * @return an Enumeration of section names
-     */
-    public Enumeration getSectionNames() {
-        return sectionIndex.elements();
-    }
-
-    /**
-     * Create or update the Manifest when used as a task.
-     *
-     * @throws BuildException if the manifest cannot be written.
-     */
-    public void execute() throws BuildException {
-        if (manifestFile == null) {
-            throw new BuildException("the file attribute is required");
-        }
-
-        Manifest toWrite = getDefaultManifest();
-        Manifest current = null;
-        BuildException error = null;
-
-        if (manifestFile.exists()) {
-            FileReader f = null;
-            try {
-                f = new FileReader(manifestFile);
-                current = new Manifest(f);
-            } catch (ManifestException m) {
-                error = new BuildException("Existing manifest " + manifestFile
-                                           + " is invalid", m, location);
-            } catch (IOException e) {
-                error = new BuildException("Failed to read " + manifestFile,
-                                           e, location);
-            } finally {
-                if (f != null) {
-                    try {
-                        f.close();
-                    } catch (IOException e) {}
-                }
-            }
-        }
-
-        try {
-            if (mode.getValue().equals("update") && manifestFile.exists()) {
-                if (current != null) {
-                    toWrite.merge(current);
-                } else if (error != null) {
-                    throw error;
-                }
-            }
-
-            toWrite.merge(this);
-        } catch (ManifestException m) {
-            throw new BuildException("Manifest is invalid", m, location);
-        }
-
-        if (toWrite.equals(current)) {
-            log("Manifest has not changed, do not recreate", 
-                Project.MSG_VERBOSE);
-            return;
-        }
-
-        PrintWriter w = null;
-        try {
-            w = new PrintWriter(new FileWriter(manifestFile));
-            toWrite.write(w);
-        } catch (IOException e) {
-            throw new BuildException("Failed to write " + manifestFile,
-                                     e, location);
-        } finally {
-            if (w != null) {
-                w.close();
-            }
-        }
-    }
-
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/ManifestException.java b/src/main/org/apache/tools/ant/taskdefs/ManifestException.java
deleted file mode 100644
index 1398a56..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/ManifestException.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs;
-
-/**
- * Exception thrown indicating problems in a JAR Manifest
- *
- * @author Conor MacNeill
- * @since Ant 1.4
- */
-public class ManifestException extends Exception {
-
-    /**
-     * Constructs an exception with the given descriptive message.
-     * @param msg Description of or information about the exception.
-     */
-    public ManifestException(String msg) {
-        super(msg);
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/MatchingTask.java b/src/main/org/apache/tools/ant/taskdefs/MatchingTask.java
deleted file mode 100644
index 3e0d832..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/MatchingTask.java
+++ /dev/null
@@ -1,232 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.DirectoryScanner;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.types.FileSet;
-import org.apache.tools.ant.types.PatternSet;
-
-import java.io.File;
-import java.util.StringTokenizer;
-
-/**
- * This is an abstract task that should be used by all those tasks that 
- * require to include or exclude files based on pattern matching.
- *
- * @author Arnout J. Kuiper 
- *         <a href="mailto:ajkuiper@wxs.nl">ajkuiper@wxs.nl</a> 
- * @author Stefano Mazzocchi 
- *         <a href="mailto:stefano@apache.org">stefano@apache.org</a>
- * @author Sam Ruby <a href="mailto:rubys@us.ibm.com">rubys@us.ibm.com</a>
- * @author Jon S. Stevens <a href="mailto:jon@clearink.com">jon@clearink.com</a>
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- * @since Ant 1.1
- */
-
-public abstract class MatchingTask extends Task {
-
-    protected boolean useDefaultExcludes = true;
-    protected FileSet fileset = new FileSet();
-
-    /**
-     * @see org.apache.tools.ant.ProjectComponent#setProject
-     */
-    public void setProject(Project project) {
-        super.setProject(project);
-        fileset.setProject(project);
-    }
-
-    /**
-     * add a name entry on the include list
-     */
-    public PatternSet.NameEntry createInclude() {
-        return fileset.createInclude();
-    }
-    
-    /**
-     * add a name entry on the include files list
-     */
-    public PatternSet.NameEntry createIncludesFile() {
-        return fileset.createIncludesFile();
-    }
-    
-    /**
-     * add a name entry on the exclude list
-     */
-    public PatternSet.NameEntry createExclude() {
-        return fileset.createExclude();
-    }
-
-    /**
-     * add a name entry on the include files list
-     */
-    public PatternSet.NameEntry createExcludesFile() {
-        return fileset.createExcludesFile();
-    }
-    
-    /**
-     * add a set of patterns
-     */
-    public PatternSet createPatternSet() {
-        return fileset.createPatternSet();
-    }
-
-    /**
-     * Sets the set of include patterns. Patterns may be separated by a comma
-     * or a space.
-     *
-     * @param includes the string containing the include patterns
-     */
-    public void setIncludes(String includes) {
-        fileset.setIncludes(includes);
-    }
-
-    /**
-     * Set this to be the items in the base directory that you want to be
-     * included. You can also specify "*" for the items (ie: items="*") 
-     * and it will include all the items in the base directory.
-     *
-     * @param itemString the string containing the files to include.
-     */
-    public void XsetItems(String itemString) {
-        log("The items attribute is deprecated. " +
-            "Please use the includes attribute.",
-            Project.MSG_WARN);
-        if (itemString == null || itemString.equals("*") 
-            || itemString.equals(".")) {
-            createInclude().setName("**");
-        } else {
-            StringTokenizer tok = new StringTokenizer(itemString, ", ");
-            while (tok.hasMoreTokens()) {
-                String pattern = tok.nextToken().trim();
-                if (pattern.length() > 0) {
-                    createInclude().setName(pattern + "/**");
-                }
-            }
-        }
-    }
-    
-    /**
-     * Sets the set of exclude patterns. Patterns may be separated by a comma
-     * or a space.
-     *
-     * @param excludes the string containing the exclude patterns
-     */
-    public void setExcludes(String excludes) {
-        fileset.setExcludes(excludes);
-    }
-
-    /**
-     * List of filenames and directory names to not include. They should be 
-     * either , or " " (space) separated. The ignored files will be logged.
-     *
-     * @param ignoreString the string containing the files to ignore.
-     */
-    public void XsetIgnore(String ignoreString) {
-        log("The ignore attribute is deprecated." + 
-            "Please use the excludes attribute.",
-            Project.MSG_WARN);
-        if (ignoreString != null && ignoreString.length() > 0) {
-            StringTokenizer tok = new StringTokenizer(ignoreString, ", ", 
-                                                      false);
-            while (tok.hasMoreTokens()) {
-                createExclude().setName("**/" + tok.nextToken().trim() + "/**");
-            }
-        }
-    }
-    
-    /**
-     * Sets whether default exclusions should be used or not.
-     *
-     * @param useDefaultExcludes "true"|"on"|"yes" when default exclusions 
-     *                           should be used, "false"|"off"|"no" when they
-     *                           shouldn't be used.
-     */
-    public void setDefaultexcludes(boolean useDefaultExcludes) {
-        this.useDefaultExcludes = useDefaultExcludes;
-    }
-    
-    /**
-     * Returns the directory scanner needed to access the files to process.
-     */
-    protected DirectoryScanner getDirectoryScanner(File baseDir) {
-        fileset.setDir(baseDir);
-        fileset.setDefaultexcludes(useDefaultExcludes);
-        return fileset.getDirectoryScanner(project);
-    }
-
-    /**
-     * Sets the name of the file containing the includes patterns.
-     *
-     * @param includesfile A string containing the filename to fetch
-     * the include patterns from.  
-     */
-     public void setIncludesfile(File includesfile) {
-         fileset.setIncludesfile(includesfile);
-     }
-
-    /**
-     * Sets the name of the file containing the includes patterns.
-     *
-     * @param excludesfile A string containing the filename to fetch
-     * the include patterns from.  
-     */
-     public void setExcludesfile(File excludesfile) {
-         fileset.setExcludesfile(excludesfile);
-     }
-
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/Mkdir.java b/src/main/org/apache/tools/ant/taskdefs/Mkdir.java
deleted file mode 100644
index accc4a0..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Mkdir.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000,2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.BuildException;
-import java.io.File;
-
-/**
- * Creates a given directory.
- *
- * @author duncan@x180.com
- * @since Ant 1.1
- *
- * @ant.task category="filesystem"
- */
-
-public class Mkdir extends Task {
-
-    private File dir;
-
-    public void execute() throws BuildException {
-        if (dir == null) {
-            throw new BuildException("dir attribute is required", location);
-        }
-
-        if (dir.isFile()) {
-            throw new BuildException("Unable to create directory as a file "
-                                     + "already exists with that name: " 
-                                     + dir.getAbsolutePath());
-        }
-
-        if (!dir.exists()) {
-            boolean result = dir.mkdirs();
-            if (!result) {
-                String msg = "Directory " + dir.getAbsolutePath() 
-                    + " creation was not successful for an unknown reason";
-                throw new BuildException(msg, location);
-            }
-            log("Created dir: " + dir.getAbsolutePath());
-        }
-    }
-
-    public void setDir(File dir) {
-        this.dir = dir;
-    }
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/Move.java b/src/main/org/apache/tools/ant/taskdefs/Move.java
deleted file mode 100644
index 0a0b3af..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Move.java
+++ /dev/null
@@ -1,322 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.types.FilterSetCollection;
-import org.apache.tools.ant.types.FilterSet;
-import org.apache.tools.ant.types.FileSet;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.Enumeration;
-
-/**
- * Moves a file or directory to a new file or directory.  By default,
- * the destination is overwriten when existing.  When overwrite is
- * turned off, then files are only moved if the source file is
- * newer than the destination file, or when the destination file does
- * not exist.</p>
- *
- * <p>Source files and directories are only deleted when the file or
- * directory has been copied to the destination successfully.  Filtering
- * also works.</p>
- *
- * <p>This implementation is based on Arnout Kuiper's initial design
- * document, the following mailing list discussions, and the
- * copyfile/copydir tasks.</p>
- *
- * @author Glenn McAllister 
- *         <a href="mailto:glennm@ca.ibm.com">glennm@ca.ibm.com</a>
- * @author <a href="mailto:umagesh@rediffmail.com">Magesh Umasankar</a>
- * @version $Revision$
- *
- * @since Ant 1.2
- *
- * @ant.task category="filesystem"
- */
-public class Move extends Copy {
-
-    public Move() {
-        super();
-        forceOverwrite = true;
-    }
-
-//************************************************************************
-//  protected and private methods
-//************************************************************************
-
-    protected void doFileOperations() {
-        //Attempt complete directory renames, if any, first.
-        if (completeDirMap.size() > 0) {
-            Enumeration e = completeDirMap.keys();
-            while (e.hasMoreElements()) {
-                File fromDir = (File) e.nextElement();
-                File toDir = (File) completeDirMap.get(fromDir);
-                try {
-                    log("Attempting to rename dir: " + fromDir +
-                        " to " + toDir, verbosity);
-                    renameFile(fromDir, toDir, filtering, forceOverwrite);
-                } catch (IOException ioe) {
-                    String msg = "Failed to rename dir " + fromDir
-                        + " to " + toDir
-                        + " due to " + ioe.getMessage();
-                    throw new BuildException(msg, ioe, location);
-                }
-            }
-        }
-        if (fileCopyMap.size() > 0) {   // files to move
-            log("Moving " + fileCopyMap.size() + " files to " +
-                destDir.getAbsolutePath());
-
-            Enumeration e = fileCopyMap.keys();
-            while (e.hasMoreElements()) {
-                String fromFile = (String) e.nextElement();
-                String toFile = (String) fileCopyMap.get(fromFile);
-
-                if (fromFile.equals(toFile)) {
-                    log("Skipping self-move of " + fromFile, verbosity);
-                    continue;
-                }
-
-                boolean moved = false;
-                File f = new File(fromFile);
-
-                if (f.exists()) { //Is this file still available to be moved?
-                    File d = new File(toFile);
-
-                    try {
-                        log("Attempting to rename: " + fromFile +
-                            " to " + toFile, verbosity);
-                        moved = renameFile(f, d, filtering, forceOverwrite);
-                    } catch (IOException ioe) {
-                        String msg = "Failed to rename " + fromFile
-                            + " to " + toFile
-                            + " due to " + ioe.getMessage();
-                        throw new BuildException(msg, ioe, location);
-                    }
-
-                    if (!moved) {
-                        try {
-                            log("Moving " + fromFile + " to " + toFile, 
-                                verbosity);
-
-                            FilterSetCollection executionFilters = 
-                                new FilterSetCollection();
-                            if (filtering) {
-                                executionFilters
-                                    .addFilterSet(project.getGlobalFilterSet());
-                            }
-                            for (Enumeration filterEnum = 
-                                     getFilterSets().elements(); 
-                                 filterEnum.hasMoreElements();) {
-                                executionFilters
-                                    .addFilterSet((FilterSet) filterEnum
-                                                  .nextElement());
-                            }
-                            getFileUtils().copyFile(f, d, executionFilters, 
-                                                    getFilterChains(), 
-                                                    forceOverwrite,
-                                                    getPreserveLastModified(),
-                                                    getEncoding(), project);
-
-                            f = new File(fromFile);
-                            if (!f.delete()) {
-                                throw new BuildException("Unable to delete "
-                                                         + "file "
-                                                         + f.getAbsolutePath());
-                            }
-                        } catch (IOException ioe) {
-                            String msg = "Failed to copy " + fromFile + " to "
-                                + toFile
-                                + " due to " + ioe.getMessage();
-                            throw new BuildException(msg, ioe, location);
-                        }
-                    }
-                }
-            }
-        }
-
-        if (includeEmpty) {
-            Enumeration e = dirCopyMap.elements();
-            int count = 0;
-            while (e.hasMoreElements()) {
-                File d = new File((String) e.nextElement());
-                if (!d.exists()) {
-                    if (!d.mkdirs()) {
-                        log("Unable to create directory " 
-                            + d.getAbsolutePath(), Project.MSG_ERR);
-                    } else {
-                        count++;
-                    }
-                }
-            }
-
-            if (count > 0) {
-                log("Moved " + count + " empty directories to " 
-                    + destDir.getAbsolutePath());
-            }
-        }
-
-        if (filesets.size() > 0) {
-            Enumeration e = filesets.elements();
-            while (e.hasMoreElements()) {
-                FileSet fs = (FileSet) e.nextElement();
-                File dir = fs.getDir(project);
-
-                if (okToDelete(dir)) {
-                    deleteDir(dir);
-                }
-            }
-        }
-    }
-
-    /**
-     * Its only ok to delete a directory tree if there are
-     * no files in it.
-     */
-    protected boolean okToDelete(File d) {
-        String[] list = d.list();
-        if (list == null) {
-            return false;
-        }     // maybe io error?
-
-        for (int i = 0; i < list.length; i++) {
-            String s = list[i];
-            File f = new File(d, s);
-            if (f.isDirectory()) {
-                if (!okToDelete(f)) {
-                    return false;
-                }
-            } else {
-                return false;   // found a file
-            }
-        }
-
-        return true;
-    }
-
-    /**
-     * Go and delete the directory tree.
-     */
-    protected void deleteDir(File d) {
-        String[] list = d.list();
-        if (list == null) {
-            return;
-        }      // on an io error list() can return null
-
-        for (int i = 0; i < list.length; i++) {
-            String s = list[i];
-            File f = new File(d, s);
-            if (f.isDirectory()) {
-                deleteDir(f);
-            } else {
-                throw new BuildException("UNEXPECTED ERROR - The file " 
-                                         + f.getAbsolutePath() 
-                                         + " should not exist!");
-            }
-        }
-        log("Deleting directory " + d.getAbsolutePath(), verbosity);
-        if (!d.delete()) {
-            throw new BuildException("Unable to delete directory " 
-                                     + d.getAbsolutePath());
-        }
-    }
-
-    /**
-     * Attempts to rename a file from a source to a destination.
-     * If overwrite is set to true, this method overwrites existing file
-     * even if the destination file is newer.  Otherwise, the source file is
-     * renamed only if the destination file is older than it.
-     * Method then checks if token filtering is used.  If it is, this method
-     * returns false assuming it is the responsibility to the copyFile method.
-     *
-     * @throws IOException
-     */
-    protected boolean renameFile(File sourceFile, File destFile,
-                                 boolean filtering, boolean overwrite)
-        throws IOException, BuildException {
-
-        boolean renamed = true;
-        if ((getFilterSets() != null && getFilterSets().size() > 0) ||
-            (getFilterChains() != null && getFilterChains().size() > 0)) {
-            renamed = false;
-        } else {
-            if (!filtering) {
-                // ensure that parent dir of dest file exists!
-                // not using getParentFile method to stay 1.1 compat
-                String parentPath = destFile.getParent();
-                if (parentPath != null) {
-                    File parent = new File(parentPath);
-                    if (!parent.exists()) {
-                        parent.mkdirs();
-                    }
-                }
-
-                if (destFile.exists()) {
-                    if (!destFile.delete()) {
-                        throw new BuildException("Unable to remove existing "
-                                                 + "file " + destFile);
-                    }
-                }
-                renamed = sourceFile.renameTo(destFile);
-            } else {
-                renamed = false;
-            }
-        }
-        return renamed;
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/Pack.java b/src/main/org/apache/tools/ant/taskdefs/Pack.java
deleted file mode 100644
index eca8636..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Pack.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Task;
-
-/**
- * Abstract Base class for pack tasks.
- *
- * @author <a href="mailto:umagesh@rediffmail.com">Magesh Umasankar</a>
- *
- * @since Ant 1.5
- */
-
-public abstract class Pack extends Task {
-
-    protected File zipFile;
-    protected File source;
-
-    public void setZipfile(File zipFile) {
-        this.zipFile = zipFile;
-    }
-
-    public void setSrc(File src) {
-        source = src;
-    }
-
-    private void validate() {
-        if (zipFile == null) {
-            throw new BuildException("zipfile attribute is required", location);
-        }
-
-        if (zipFile.isDirectory()) {
-            throw new BuildException("zipfile attribute must not " +
-                                     "represent a directory!", location);
-        }
-
-        if (source == null) {
-            throw new BuildException("src attribute is required", location);
-        }
-
-        if (source.isDirectory()) {
-            throw new BuildException("Src attribute must not " +
-                                     "represent a directory!", location);
-        }
-    }
-
-    public void execute() throws BuildException {
-        validate();
-
-        if (zipFile.lastModified() < source.lastModified()) {
-            log("Building: " + zipFile.getAbsolutePath());
-            pack();
-        } else {
-            log("Nothing to do: " + zipFile.getAbsolutePath() +
-                " is up to date.");
-        }
-    }
-
-    private void zipFile(InputStream in, OutputStream zOut)
-        throws IOException {
-        byte[] buffer = new byte[8 * 1024];
-        int count = 0;
-        do {
-            zOut.write(buffer, 0, count);
-            count = in.read(buffer, 0, buffer.length);
-        } while (count != -1);
-    }
-
-    protected void zipFile(File file, OutputStream zOut)
-        throws IOException {
-        FileInputStream fIn = new FileInputStream(file);
-        try {
-            zipFile(fIn, zOut);
-        } finally {
-            fIn.close();
-        }
-    }
-
-    protected abstract void pack();
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/Parallel.java b/src/main/org/apache/tools/ant/taskdefs/Parallel.java
deleted file mode 100644
index 6c227d1..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Parallel.java
+++ /dev/null
@@ -1,184 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.TaskContainer;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Location;
-import org.apache.tools.ant.util.StringUtils;
-
-import java.util.Vector;
-import java.util.Enumeration;
-
-
-
-/**
- * Implements a multi threaded task execution.
- * <p>
- * @author Thomas Christen <a href="mailto:chr@active.ch">chr@active.ch</a>
- * @author Conor MacNeill
- * @since Ant 1.4
- *
- * @ant.task category="control"
- */
-public class Parallel extends Task
-                      implements TaskContainer {
-
-    /** Collection holding the nested tasks */
-    private Vector nestedTasks = new Vector();
-
-
-    /**
-     * Add a nested task to execute parallel (asynchron).
-     * <p>
-     * @param nestedTask  Nested task to be executed in parallel
-     */
-    public void addTask(Task nestedTask) throws BuildException {
-        nestedTasks.addElement(nestedTask);
-    }
-
-    /**
-     * Block execution until the specified time or for a
-     * specified amount of milliseconds and if defined,
-     * execute the wait status.
-     */
-    public void execute() throws BuildException {
-        TaskThread[] threads = new TaskThread[nestedTasks.size()];
-        int threadNumber = 0;
-        for (Enumeration e = nestedTasks.elements(); e.hasMoreElements(); 
-             threadNumber++) {
-            Task nestedTask = (Task) e.nextElement();
-            threads[threadNumber] = new TaskThread(threadNumber, nestedTask);
-        }
-
-        // now start all threads        
-        for (int i = 0; i < threads.length; ++i) {
-            threads[i].start();
-        }
-
-        // now join to all the threads 
-        for (int i = 0; i < threads.length; ++i) {
-            try {
-                threads[i].join();
-            } catch (InterruptedException ie) {
-                // who would interrupt me at a time like this?
-            }
-        }
-        
-        // now did any of the threads throw an exception
-        StringBuffer exceptionMessage = new StringBuffer();
-        int numExceptions = 0;
-        Throwable firstException = null;
-        Location firstLocation = Location.UNKNOWN_LOCATION;;
-        for (int i = 0; i < threads.length; ++i) {
-            Throwable t = threads[i].getException();
-            if (t != null) {
-                numExceptions++;
-                if (firstException == null) {
-                    firstException = t;
-                }
-                if (t instanceof BuildException && 
-                        firstLocation == Location.UNKNOWN_LOCATION) {
-                    firstLocation = ((BuildException) t).getLocation();
-                }
-                exceptionMessage.append(StringUtils.LINE_SEP);
-                exceptionMessage.append(t.getMessage());
-            }
-        }
-        
-        if (numExceptions == 1) {
-            if (firstException instanceof BuildException) {
-                throw (BuildException) firstException;
-            } else {
-                throw new BuildException(firstException);
-            }
-        } else if (numExceptions > 1) {
-            throw new BuildException(exceptionMessage.toString(), 
-                                     firstLocation);
-        }
-    }
-
-    class TaskThread extends Thread {
-        private Throwable exception;
-        private Task task;
-        private int taskNumber;
-
-        /**
-         * Construct a new TaskThread.<p>
-         *
-         * @param task the Task to be executed in a seperate thread
-         */
-        TaskThread(int taskNumber, Task task) {
-            this.task = task;
-            this.taskNumber = taskNumber;
-        }
-
-        /**
-         * Executes the task within a thread and takes care about
-         * Exceptions raised within the task.
-         */
-        public void run() {
-            try {
-                task.perform();
-            } catch (Throwable t) {
-                exception = t;
-            }
-        }
-        
-        public Throwable getException() { 
-            return exception;
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/Patch.java b/src/main/org/apache/tools/ant/taskdefs/Patch.java
deleted file mode 100644
index 34db7aa..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Patch.java
+++ /dev/null
@@ -1,196 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000,2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.types.Commandline;
-import java.io.File;
-import java.io.IOException;
-
-/**
- * Task as a layer on top of patch. Patch applies a diff file to an original.
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- *
- * @since Ant 1.1
- *
- * @ant.task category="utility"
- */
-public class Patch extends Task {
-
-    private File originalFile;
-    private File directory;
-    private boolean havePatchfile = false;
-    private Commandline cmd = new Commandline();
-
-    /**
-     * The file to patch.
-     */
-    public void setOriginalfile(File file) {
-        originalFile = file;
-    }
-
-    /**
-     * The file containing the diff output.
-     */
-    public void setPatchfile(File file) {
-        if (!file.exists()) {
-            throw new BuildException("patchfile " + file + " doesn\'t exist", 
-                                     location);
-        }
-        cmd.createArgument().setValue("-i");
-        cmd.createArgument().setFile(file);
-        havePatchfile = true;
-    }
-
-    /**
-     * Shall patch write backups.
-     */
-    public void setBackups(boolean backups) {
-        if (backups) {
-            cmd.createArgument().setValue("-b");
-        }
-    }
-
-    /**
-     * Ignore whitespace differences.
-     */
-    public void setIgnorewhitespace(boolean ignore) {
-        if (ignore) {
-            cmd.createArgument().setValue("-l");
-        }
-    }
-
-    /**
-     * Strip the smallest prefix containing <i>num</i> leading slashes
-     * from filenames.
-     *
-     * <p>patch's <i>-p</i> option.
-     */
-    public void setStrip(int num) throws BuildException {
-        if (num < 0) {
-            throw new BuildException("strip has to be >= 0", location);
-        }
-        cmd.createArgument().setValue("-p" + num);
-    }
-
-    /**
-     * Work silently unless an error occurs.
-     */
-    public void setQuiet(boolean q) {
-        if (q) {
-            cmd.createArgument().setValue("-s");
-        }
-    }
-
-    /**
-     * Assume patch was created with old and new files swapped.
-     */
-    public void setReverse(boolean r) {
-        if (r) {
-            cmd.createArgument().setValue("-R");
-        }
-    }
-
-    /**
-     * The directory to run the patch command in, defaults to the
-     * project's base directory.
-     *
-     * @since Ant 1.5
-     */
-    public void setDir(File directory) throws BuildException {
-        this.directory = directory;
-    }
-
-    public void execute() throws BuildException {
-        if (!havePatchfile) {
-            throw new BuildException("patchfile argument is required", 
-                                     location);
-        } 
-        Commandline toExecute = (Commandline) cmd.clone();
-        toExecute.setExecutable("patch");
-
-        if (originalFile != null) {
-            toExecute.createArgument().setFile(originalFile);
-        }
-
-        Execute exe = new Execute(new LogStreamHandler(this, Project.MSG_INFO,
-                                                       Project.MSG_WARN), 
-                                  null);
-
-        if (directory != null) {
-            if (directory.exists() && directory.isDirectory()) {
-                exe.setWorkingDirectory(directory);
-            } else if (!directory.isDirectory()) {
-                throw new BuildException(directory + " is not a directory.",
-                                         location);
-            } else {
-                throw new BuildException("directory " + directory
-                                         + " doesn\'t exist", location);
-            }
-        } else {
-            exe.setWorkingDirectory(getProject().getBaseDir());
-        }
-
-        try {
-            exe.execute();
-        } catch (IOException e) {
-            throw new BuildException(e, location);
-        }
-    }
-
-}// Patch
diff --git a/src/main/org/apache/tools/ant/taskdefs/PathConvert.java b/src/main/org/apache/tools/ant/taskdefs/PathConvert.java
deleted file mode 100644
index 6d2841a..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/PathConvert.java
+++ /dev/null
@@ -1,451 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.taskdefs.condition.Os;
-import org.apache.tools.ant.types.DirSet;
-import org.apache.tools.ant.types.EnumeratedAttribute;
-import org.apache.tools.ant.types.FileList;
-import org.apache.tools.ant.types.FileSet;
-import org.apache.tools.ant.types.Path;
-import org.apache.tools.ant.types.Reference;
-
-import java.util.StringTokenizer;
-import java.util.Vector;
-import java.io.File;
-
-/**
- * This task converts path and classpath information to a specific target OS
- * format. The resulting formatted path is placed into a specified property.
- *
- * @author Larry Streepy <a href="mailto:streepy@healthlanguage.com">
- *      streepy@healthlanguage.com</a>
- * @since Ant 1.4
- * @ant.task category="utility"
- */
-public class PathConvert extends Task {
-
-    // Members
-    private Path path = null;// Path to be converted
-    private Reference refid = null;// Reference to path/fileset to
-    // convert
-    private String targetOS = null;// The target OS type
-    private boolean targetWindows = false;// Set when targetOS is set
-    private boolean onWindows = false;// Set if we're running on windows
-    private String property = null;// The property to receive the
-    //results
-    private Vector prefixMap = new Vector();// Path prefix map
-    private String pathSep = null;// User override on path sep char
-    private String dirSep = null;// User override on directory sep
-    // char
-
-    public PathConvert() {
-        onWindows = Os.isFamily("dos");
-    }
-
-
-    /**
-     * Helper class, holds the nested <map> values. Elements will look like
-     * this: &lt;map from=&quot;d:&quot; to=&quot;/foo&quot;/&gt; <p>
-     *
-     * When running on windows, the prefix comparison will be case
-     * insensitive.
-     */
-    public class MapEntry {
-
-        /** Set the &quot;from&quot; attribute of the map entry  */
-        public void setFrom(String from) {
-            this.from = from;
-        }
-
-
-        /** Set the &quot;to&quot; attribute of the map entry  */
-        public void setTo(String to) {
-            this.to = to;
-        }
-
-
-        /**
-         * Apply this map entry to a given path element
-         *
-         * @param elem Path element to process
-         * @return String Updated path element after mapping
-         */
-        public String apply(String elem) {
-            if (from == null || to == null) {
-                throw new BuildException("Both 'from' and 'to' must be set "
-                     + "in a map entry");
-            }
-
-            // If we're on windows, then do the comparison ignoring case
-            String cmpElem = onWindows ? elem.toLowerCase() : elem;
-            String cmpFrom = onWindows ? from.toLowerCase() : from;
-
-            // If the element starts with the configured prefix, then
-            // convert the prefix to the configured 'to' value.
-
-            if (cmpElem.startsWith(cmpFrom)) {
-                int len = from.length();
-
-                if (len >= elem.length()) {
-                    elem = to;
-                } else {
-                    elem = to + elem.substring(len);
-                }
-            }
-
-            return elem;
-        }
-
-        // Members
-        private String from = null;
-        private String to = null;
-    }
-
-
-    public static class TargetOs extends EnumeratedAttribute {
-        public String[] getValues() {
-            return new String[]{"windows", "unix", "netware", "os/2"};
-        }
-    }
-
-
-    /** Create a nested PATH element  */
-    public Path createPath() {
-
-        if (isReference()) {
-            throw noChildrenAllowed();
-        }
-
-        if (path == null) {
-            path = new Path(getProject());
-        }
-        return path.createPath();
-    }
-
-
-    /** Create a nested MAP element  */
-    public MapEntry createMap() {
-
-        MapEntry entry = new MapEntry();
-
-        prefixMap.addElement(entry);
-        return entry;
-    }
-
-
-    /**
-     * Set the value of the targetos attribute
-     *
-     * @deprecated use the method taking a TargetOs argument instead
-     * @see setTargetos(TargetOs)
-     */
-    public void setTargetos(String target) {
-        TargetOs to = new TargetOs();
-
-        to.setValue(target);
-        setTargetos(to);
-    }
-
-
-    /**
-     * Set the value of the targetos attribute
-     *
-     * @since Ant 1.5
-     */
-    public void setTargetos(TargetOs target) {
-
-        targetOS = target.getValue();
-
-        // Currently, we deal with only two path formats: Unix and Windows
-        // And Unix is everything that is not Windows
-
-        // for NetWare and OS/2, piggy-back on Windows, since in the
-        // validateSetup code, the same assumptions can be made as
-        // with windows - that ; is the path separator
-
-        targetWindows = !targetOS.equals("unix");
-    }
-
-
-    /**
-     * Set the value of the property attribute - this is the property into
-     * which our converted path will be placed.
-     */
-    public void setProperty(String p) {
-        property = p;
-    }
-
-
-    /**
-     * Adds a reference to a Path, FileSet, DirSet, or FileList defined
-     * elsewhere.
-     */
-    public void setRefid(Reference r) {
-        if (path != null) {
-            throw noChildrenAllowed();
-        }
-
-        refid = r;
-    }
-
-
-    /** Override the default path separator string for the target os  */
-    public void setPathSep(String sep) {
-        pathSep = sep;
-    }
-
-
-    /**
-     * Override the default directory separator string for the target os
-     */
-    public void setDirSep(String sep) {
-        dirSep = sep;
-    }
-
-
-    /** Has the refid attribute of this element been set?  */
-    public boolean isReference() {
-        return refid != null;
-    }
-
-
-    /** Do the execution.  */
-    public void execute() throws BuildException {
-        Path savedPath = path;
-        String savedPathSep = pathSep;// may be altered in validateSetup
-        String savedDirSep = dirSep;// may be altered in validateSetup
-
-        try {
-            // If we are a reference, create a Path from the reference
-            if (isReference()) {
-                path = new Path(getProject()).createPath();
-
-                Object obj = refid.getReferencedObject(getProject());
-
-                if (obj instanceof Path) {
-                    path.setRefid(refid);
-                } else if (obj instanceof FileSet) {
-                    FileSet fs = (FileSet) obj;
-
-                    path.addFileset(fs);
-                } else if (obj instanceof DirSet) {
-                    DirSet ds = (DirSet) obj;
-
-                    path.addDirset(ds);
-                } else if (obj instanceof FileList) {
-                    FileList fl = (FileList) obj;
-
-                    path.addFilelist(fl);
-
-                } else {
-                    throw new BuildException("'refid' does not refer to a "
-                         + "path, fileset, dirset, or "
-                         + "filelist.");
-                }
-            }
-
-            validateSetup();// validate our setup
-
-            // Currently, we deal with only two path formats: Unix and Windows
-            // And Unix is everything that is not Windows
-            // (with the exception for NetWare and OS/2 below)
-
-            // for NetWare and OS/2, piggy-back on Windows, since here and
-            // in the apply code, the same assumptions can be made as with
-            // windows - that \\ is an OK separator, and do comparisons
-            // case-insensitive.
-            String fromDirSep = onWindows ? "\\" : "/";
-
-            StringBuffer rslt = new StringBuffer(100);
-
-            // Get the list of path components in canonical form
-            String[] elems = path.list();
-
-            for (int i = 0; i < elems.length; i++) {
-                String elem = elems[i];
-
-                elem = mapElement(elem);// Apply the path prefix map
-
-                // Now convert the path and file separator characters from the
-                // current os to the target os.
-
-                if (i != 0) {
-                    rslt.append(pathSep);
-                }
-
-                StringTokenizer stDirectory =
-                    new StringTokenizer(elem, fromDirSep, true);
-                String token = null;
-
-                while (stDirectory.hasMoreTokens()) {
-                    token = stDirectory.nextToken();
-
-                    if (fromDirSep.equals(token)) {
-                        rslt.append(dirSep);
-                    } else {
-                        rslt.append(token);
-                    }
-                }
-            }
-
-            // Place the result into the specified property
-            String value = rslt.toString();
-
-            log("Set property " + property + " = " + value,
-                Project.MSG_VERBOSE);
-
-            getProject().setNewProperty(property, value);
-        } finally {
-            path = savedPath;
-            dirSep = savedDirSep;
-            pathSep = savedPathSep;
-        }
-    }
-
-
-    /**
-     * Apply the configured map to a path element. The map is used to convert
-     * between Windows drive letters and Unix paths. If no map is configured,
-     * then the input string is returned unchanged.
-     *
-     * @param elem The path element to apply the map to
-     * @return String Updated element
-     */
-    private String mapElement(String elem) {
-
-        int size = prefixMap.size();
-
-        if (size != 0) {
-
-            // Iterate over the map entries and apply each one.
-            // Stop when one of the entries actually changes the element.
-
-            for (int i = 0; i < size; i++) {
-                MapEntry entry = (MapEntry) prefixMap.elementAt(i);
-                String newElem = entry.apply(elem);
-
-                // Note I'm using "!=" to see if we got a new object back from
-                // the apply method.
-
-                if (newElem != elem) {
-                    elem = newElem;
-                    break;// We applied one, so we're done
-                }
-            }
-        }
-
-        return elem;
-    }
-
-
-    /**
-     * Validate that all our parameters have been properly initialized.
-     *
-     * @throws BuildException if something is not setup properly
-     */
-    private void validateSetup() throws BuildException {
-
-        if (path == null) {
-            throw new BuildException("You must specify a path to convert");
-        }
-
-        if (property == null) {
-            throw new BuildException("You must specify a property");
-        }
-
-        // Must either have a target OS or both a dirSep and pathSep
-
-        if (targetOS == null && pathSep == null && dirSep == null) {
-            throw new BuildException("You must specify at least one of "
-                 + "targetOS, dirSep, or pathSep");
-        }
-
-        // Determine the separator strings.  The dirsep and pathsep attributes
-        // override the targetOS settings.
-        String dsep = File.separator;
-        String psep = File.pathSeparator;
-
-        if (targetOS != null) {
-            psep = targetWindows ? ";" : ":";
-            dsep = targetWindows ? "\\" : "/";
-        }
-
-        if (pathSep != null) {// override with pathsep=
-            psep = pathSep;
-        }
-
-        if (dirSep != null) {// override with dirsep=
-            dsep = dirSep;
-        }
-
-        pathSep = psep;
-        dirSep = dsep;
-    }
-
-
-    /**
-     * Creates an exception that indicates that this XML element must not have
-     * child elements if the refid attribute is set.
-     */
-    private BuildException noChildrenAllowed() {
-        return new BuildException("You must not specify nested <path> "
-             + "elements when using the refid attribute.");
-    }
-
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/ProcessDestroyer.java b/src/main/org/apache/tools/ant/taskdefs/ProcessDestroyer.java
deleted file mode 100644
index 8459431..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/ProcessDestroyer.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import java.lang.reflect.Method;
-import java.util.Enumeration;
-import java.util.Vector;
-
-/**
- * Destroys all registered <code>Process</code>es when the VM exits.
- *
- * @author <a href="mailto:mnewcomb@tacintel.com">Michael Newcomb</a>
- * @since Ant 1.5
- */
-class ProcessDestroyer
-    extends Thread {
-
-    private Vector processes = new Vector();
-
-    /**
-     * Constructs a <code>ProcessDestroyer</code> and registers it as
-     * a shutdown hook.
-     */
-    public ProcessDestroyer() {
-        try {
-            // check to see if the method exists (support pre-JDK 1.3 VMs)
-            //
-            Class[] paramTypes = {Thread.class};
-            Method addShutdownHook =
-                Runtime.class.getMethod("addShutdownHook", paramTypes);
-
-            // add the hook
-            //
-            Object[] args = {this};
-            addShutdownHook.invoke(Runtime.getRuntime(), args);
-        } catch (Exception e) {
-            // it just won't be added as a shutdown hook... :(
-        }
-    }
-
-    /**
-     * Returns <code>true</code> if the specified <code>Process</code> was
-     * successfully added to the list of processes to destroy upon VM exit.
-     *
-     * @param   process the process to add
-     * @return  <code>true</code> if the specified <code>Process</code> was
-     *          successfully added
-     */
-    public boolean add(Process process) {
-        processes.addElement(process);
-        return processes.contains(process);
-    }
-
-    /**
-     * Returns <code>true</code> if the specified <code>Process</code> was
-     * successfully removed from the list of processes to destroy upon VM exit.
-     *
-     * @param   process the process to remove
-     * @return  <code>true</code> if the specified <code>Process</code> was
-     *          successfully removed
-     */
-    public boolean remove(Process process) {
-        return processes.removeElement(process);
-    }
-
-    /**
-     * Invoked by the VM when it is exiting.
-     */
-    public void run() {
-        synchronized (processes) {
-            Enumeration e = processes.elements();
-            while (e.hasMoreElements()) {
-                ((Process) e.nextElement()).destroy();
-            }
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/Property.java b/src/main/org/apache/tools/ant/taskdefs/Property.java
deleted file mode 100644
index f40ac71..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Property.java
+++ /dev/null
@@ -1,393 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.AntClassLoader;
-import org.apache.tools.ant.ProjectHelper;
-import org.apache.tools.ant.types.Path;
-import org.apache.tools.ant.types.Reference;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Properties;
-import java.util.Vector;
-import java.util.Enumeration;
-
-/**
- * Will set a Project property. Used to be a hack in ProjectHelper
- * Will not override values set by the command line or parent projects.
- *
- * @author costin@dnt.ro
- * @author <a href="mailto:rubys@us.ibm.com">Sam Ruby</a>
- * @author <a href="mailto:glennm@ca.ibm.com">Glenn McAllister</a>
- * @since Ant 1.1
- */
-public class Property extends Task {
-
-    protected String name;
-    protected String value;
-    protected File file;
-    protected String resource;
-    protected Path classpath;
-    protected String env;
-    protected Reference ref;
-    protected String prefix;
-
-    protected boolean userProperty; // set read-only properties
-
-    public Property() {
-        super();
-    }
-
-    /**
-     * @since Ant 1.5
-     */
-    protected Property(boolean userProperty) {
-        this.userProperty = userProperty;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setLocation(File location) {
-        setValue(location.getAbsolutePath());
-    }
-
-    public void setValue(String value) {
-        this.value = value;
-    }
-
-    public String getValue() {
-        return value;
-    }
-
-    public void setFile(File file) {
-        this.file = file;
-    }
-
-    public File getFile() {
-        return file;
-    }
-    
-    public void setPrefix(String prefix) {
-        this.prefix = prefix;
-        if (!prefix.endsWith(".")) {
-            this.prefix += ".";
-        }
-    }
-
-    public void setRefid(Reference ref) {
-        this.ref = ref;
-    }
-
-    public Reference getRefid() {
-        return ref;
-    }
-
-    public void setResource(String resource) {
-        this.resource = resource;
-    }
-
-    public String getResource() {
-        return resource;
-    }
-
-    public void setEnvironment(String env) {
-        this.env = env;
-    }
-
-    public String getEnvironment() {
-        return env;
-    }
-
-    public void setClasspath(Path classpath) {
-        if (this.classpath == null) {
-            this.classpath = classpath;
-        } else {
-            this.classpath.append(classpath);
-        }
-    }
-
-    public Path createClasspath() {
-        if (this.classpath == null) {
-            this.classpath = new Path(project);
-        }
-        return this.classpath.createPath();
-    }
-
-    public void setClasspathRef(Reference r) {
-        createClasspath().setRefid(r);
-    }
-
-    /**
-     * @deprecated This was never a supported feature and has been
-     * deprecated without replacement
-     */
-    public void setUserProperty(boolean userProperty) {
-        log("DEPRECATED: Ignoring request to set user property in Property"
-            + " task.", Project.MSG_WARN);
-    }
-
-    public String toString() {
-        return value == null ? "" : value;
-    }
-
-    public void execute() throws BuildException {
-        if (name != null) {
-            if (value == null && ref == null) {
-                throw new BuildException("You must specify value, location or "
-                                         + "refid with the name attribute",
-                                         location);
-            }
-        } else {
-            if (file == null && resource == null && env == null) {
-                throw new BuildException("You must specify file, resource or "
-                                         + "environment when not using the "
-                                         + "name attribute", location);
-            }
-        }
-        
-        if (file == null && resource == null && prefix != null) {
-            throw new BuildException("Prefix is only valid when loading from "
-                                     + "a file or resource", location);
-        }
-
-        if ((name != null) && (value != null)) {
-            addProperty(name, value);
-        }
-
-        if (file != null) {
-            loadFile(file);
-        }
-
-        if (resource != null) {
-            loadResource(resource);
-        }
-
-        if (env != null) {
-            loadEnvironment(env);
-        }
-
-        if ((name != null) && (ref != null)) {
-            Object obj = ref.getReferencedObject(getProject());
-            if (obj != null) {
-                addProperty(name, obj.toString());
-            }
-        }
-    }
-
-    protected void loadFile(File file) throws BuildException {
-        Properties props = new Properties();
-        log("Loading " + file.getAbsolutePath(), Project.MSG_VERBOSE);
-        try {
-            if (file.exists()) {
-                FileInputStream fis = new FileInputStream(file);
-                try {
-                    props.load(fis);
-                } finally {
-                    if (fis != null) {
-                        fis.close();
-                    }
-                }
-                addProperties(props);
-            } else {
-                log("Unable to find property file: " + file.getAbsolutePath(),
-                    Project.MSG_VERBOSE);
-            }
-        } catch (IOException ex) {
-            throw new BuildException(ex, location);
-        }
-    }
-
-    protected void loadResource(String name) {
-        Properties props = new Properties();
-        log("Resource Loading " + name, Project.MSG_VERBOSE);
-        InputStream is = null;
-        try {
-            ClassLoader cL = null;
-
-            if (classpath != null) {
-                cL = new AntClassLoader(project, classpath);
-            } else {
-                cL = this.getClass().getClassLoader();
-            }
-
-            if (cL == null) {
-                is = ClassLoader.getSystemResourceAsStream(name);
-            } else {
-                is = cL.getResourceAsStream(name);
-            }
-
-            if (is != null) {
-                props.load(is);
-                addProperties(props);
-            } else {
-                log("Unable to find resource " + name, Project.MSG_WARN);
-            }
-        } catch (IOException ex) {
-            throw new BuildException(ex, location);
-        } finally {
-            if (is != null) {
-                try {
-                    is.close();
-                } catch (IOException e) {}
-            }
-        }
-        
-    }
-
-    protected void loadEnvironment(String prefix) {
-        Properties props = new Properties();
-        if (!prefix.endsWith(".")) {
-            prefix += ".";
-        }
-        log("Loading Environment " + prefix, Project.MSG_VERBOSE);
-        Vector osEnv = Execute.getProcEnvironment();
-        for (Enumeration e = osEnv.elements(); e.hasMoreElements();) {
-            String entry = (String) e.nextElement();
-            int pos = entry.indexOf('=');
-            if (pos == -1) {
-                log("Ignoring: " + entry, Project.MSG_WARN);
-            } else {
-                props.put(prefix + entry.substring(0, pos),
-                entry.substring(pos + 1));
-            }
-        }
-        addProperties(props);
-    }
-
-    protected void addProperties(Properties props) {
-        resolveAllProperties(props);
-        Enumeration e = props.keys();
-        while (e.hasMoreElements()) {
-            String name = (String) e.nextElement();
-            String value = props.getProperty(name);
-
-            String v = project.replaceProperties(value);
-
-            if (prefix != null) {
-                name = prefix + name;
-            }
-
-            addProperty(name, v);
-        }
-    }
-
-    protected void addProperty(String n, String v) {
-        if (userProperty) {
-            if (project.getUserProperty(n) == null) {
-                project.setUserProperty(n, v);
-            } else {
-                log("Override ignored for " + n, Project.MSG_VERBOSE);
-            }
-        } else {
-            project.setNewProperty(n, v);
-        }
-    }
-
-    private void resolveAllProperties(Properties props) throws BuildException {
-        for (Enumeration e = props.keys(); e.hasMoreElements();) {
-            String name = (String) e.nextElement();
-            String value = props.getProperty(name);
-
-            boolean resolved = false;
-            while (!resolved) {
-                Vector fragments = new Vector();
-                Vector propertyRefs = new Vector();
-                ProjectHelper.parsePropertyString(value, fragments, 
-                                                  propertyRefs);
-
-                resolved = true;
-                if (propertyRefs.size() != 0) {
-                    StringBuffer sb = new StringBuffer();
-                    Enumeration i = fragments.elements();
-                    Enumeration j = propertyRefs.elements();
-                    while (i.hasMoreElements()) {
-                        String fragment = (String) i.nextElement();
-                        if (fragment == null) {
-                            String propertyName = (String) j.nextElement();
-                            if (propertyName.equals(name)) {
-                                throw new BuildException("Property " + name 
-                                                         + " was circularly "
-                                                         + "defined.");
-                            }
-                            fragment = getProject().getProperty(propertyName);
-                            if (fragment == null) {
-                                if (props.containsKey(propertyName)) {
-                                    fragment = props.getProperty(propertyName);
-                                    resolved = false;
-                                } else {
-                                    fragment = "${" + propertyName + "}";
-                                }
-                            }
-                        }
-                        sb.append(fragment);
-                    }
-                    value = sb.toString();
-                    props.put(name, value);
-                }
-            }
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/PumpStreamHandler.java b/src/main/org/apache/tools/ant/taskdefs/PumpStreamHandler.java
deleted file mode 100644
index 4e219e8..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/PumpStreamHandler.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import java.io.InputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-
-/**
- * Copies standard output and error of subprocesses to standard output and
- * error of the parent process.
- *
- * TODO: standard input of the subprocess is not implemented.
- *
- * @author thomas.haas@softwired-inc.com
- * @since Ant 1.2
- */
-public class PumpStreamHandler implements ExecuteStreamHandler {
-
-    private Thread inputThread;
-    private Thread errorThread;
-
-    private OutputStream out, err;
-
-    public PumpStreamHandler(OutputStream out, OutputStream err) {
-        this.out = out;
-        this.err = err;
-    }
-
-    public PumpStreamHandler(OutputStream outAndErr) {
-        this(outAndErr, outAndErr);
-    }
-
-    public PumpStreamHandler() {
-        this(System.out, System.err);
-    }
-
-    public void setProcessOutputStream(InputStream is) {
-        createProcessOutputPump(is, out);
-    }
-
-
-    public void setProcessErrorStream(InputStream is) {
-        createProcessErrorPump(is, err);
-    }
-
-
-    public void setProcessInputStream(OutputStream os) {
-    }
-
-
-    public void start() {
-        inputThread.start();
-        errorThread.start();
-    }
-
-
-    public void stop() {
-        try {
-            inputThread.join();
-        } catch (InterruptedException e) {}
-        try {
-            errorThread.join();
-        } catch (InterruptedException e) {}
-        try {
-            err.flush();
-        } catch (IOException e) {}
-        try {
-            out.flush();
-        } catch (IOException e) {}
-    }
-
-    protected OutputStream getErr() {
-        return err;
-    }
-
-    protected OutputStream getOut() {
-        return out;
-    }
-
-    protected void createProcessOutputPump(InputStream is, OutputStream os) {
-        inputThread = createPump(is, os);
-    }
-
-    protected void createProcessErrorPump(InputStream is, OutputStream os) {
-        errorThread = createPump(is, os);
-    }
-
-
-    /**
-     * Creates a stream pumper to copy the given input stream to the
-     * given output stream.
-     */
-    protected Thread createPump(InputStream is, OutputStream os) {
-        final Thread result = new Thread(new StreamPumper(is, os));
-        result.setDaemon(true);
-        return result;
-    }
-
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/Recorder.java b/src/main/org/apache/tools/ant/taskdefs/Recorder.java
deleted file mode 100644
index 46fc8f5..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Recorder.java
+++ /dev/null
@@ -1,257 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.BuildException;
-
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.types.EnumeratedAttribute;
-
-import org.apache.tools.ant.Task;
-
-import java.io.PrintStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-
-import java.util.Hashtable;
-
-/**
- * This task is the manager for RecorderEntry's. It is this class that holds
- * all entries, modifies them every time the &lt;recorder&gt; task is called,
- * and addes them to the build listener process.
- *
- * @author <a href="mailto:jayglanville@home.com">J D Glanville</a>
- * @see RecorderEntry
- * @version 0.5
- * @since Ant 1.4
- * @ant.task name="record" category="utility"
- */
-public class Recorder extends Task {
-
-    //////////////////////////////////////////////////////////////////////
-    // ATTRIBUTES
-
-    /** The name of the file to record to. */
-    private String filename = null;
-    /**
-     * Whether or not to append. Need Boolean to record an unset state (null).
-     */
-    private Boolean append = null;
-    /**
-     * Whether to start or stop recording. Need Boolean to record an unset
-     * state (null).
-     */
-    private Boolean start = null;
-    /** The level to log at. A level of -1 means not initialized yet. */
-    private int loglevel = -1;
-    /** Strip task banners if true.  */
-    private boolean emacsMode = false;
-    /** The list of recorder entries. */
-    private static Hashtable recorderEntries = new Hashtable();
-
-    //////////////////////////////////////////////////////////////////////
-    // CONSTRUCTORS / INITIALIZERS
-
-    //////////////////////////////////////////////////////////////////////
-    // ACCESSOR METHODS
-
-    /**
-     * Sets the name of the file to log to, and the name of the recorder
-     * entry.
-     *
-     * @param fname File name of logfile.
-     */
-    public void setName(String fname) {
-        filename = fname;
-    }
-
-
-    /**
-     * Sets the action for the associated recorder entry.
-     *
-     * @param action The action for the entry to take: start or stop.
-     */
-    public void setAction(ActionChoices action) {
-        if (action.getValue().equalsIgnoreCase("start")) {
-            start = Boolean.TRUE;
-        } else {
-            start = Boolean.FALSE;
-        }
-    }
-
-
-    /** Whether or not the logger should append to a previous file.  */
-    public void setAppend(boolean append) {
-        this.append = new Boolean(append);
-    }
-
-
-    public void setEmacsMode(boolean emacsMode) {
-        this.emacsMode = emacsMode;
-    }
-
-
-    /**
-     * Sets the level to which this recorder entry should log to.
-     *
-     * @see VerbosityLevelChoices
-     */
-    public void setLoglevel(VerbosityLevelChoices level) {
-        //I hate cascading if/elseif clauses !!!
-        String lev = level.getValue();
-
-        if (lev.equalsIgnoreCase("error")) {
-            loglevel = Project.MSG_ERR;
-        } else if (lev.equalsIgnoreCase("warn")) {
-            loglevel = Project.MSG_WARN;
-        } else if (lev.equalsIgnoreCase("info")) {
-            loglevel = Project.MSG_INFO;
-        } else if (lev.equalsIgnoreCase("verbose")) {
-            loglevel = Project.MSG_VERBOSE;
-        } else if (lev.equalsIgnoreCase("debug")) {
-            loglevel = Project.MSG_DEBUG;
-        }
-    }
-
-    //////////////////////////////////////////////////////////////////////
-    // CORE / MAIN BODY
-
-    /** The main execution.  */
-    public void execute() throws BuildException {
-        if (filename == null) {
-            throw new BuildException("No filename specified");
-        }
-
-        getProject().log("setting a recorder for name " + filename,
-            Project.MSG_DEBUG);
-
-        // get the recorder entry
-        RecorderEntry recorder = getRecorder(filename, getProject());
-        // set the values on the recorder
-        recorder.setMessageOutputLevel(loglevel);
-        recorder.setRecordState(start);
-        recorder.setEmacsMode(emacsMode);
-    }
-
-    //////////////////////////////////////////////////////////////////////
-    // INNER CLASSES
-
-    /**
-     * A list of possible values for the <code>setAction()</code> method.
-     * Possible values include: start and stop.
-     */
-    public static class ActionChoices extends EnumeratedAttribute {
-        private static final String[] values = {"start", "stop"};
-
-
-        public String[] getValues() {
-            return values;
-        }
-    }
-
-
-    /**
-     * A list of possible values for the <code>setLoglevel()</code> method.
-     * Possible values include: error, warn, info, verbose, debug.
-     */
-    public static class VerbosityLevelChoices extends EnumeratedAttribute {
-        private static final String[] values = {"error", "warn", "info",
-            "verbose", "debug"};
-
-
-        public String[] getValues() {
-            return values;
-        }
-    }
-
-
-    /**
-     * Gets the recorder that's associated with the passed in name. If the
-     * recorder doesn't exist, then a new one is created.
-     */
-    protected RecorderEntry getRecorder(String name, Project proj)
-         throws BuildException {
-        Object o = recorderEntries.get(name);
-        RecorderEntry entry;
-
-        if (o == null) {
-            // create a recorder entry
-            try {
-                entry = new RecorderEntry(name);
-
-                PrintStream out = null;
-
-                if (append == null) {
-                    out = new PrintStream(
-                        new FileOutputStream(name));
-                } else {
-                    out = new PrintStream(
-                        new FileOutputStream(name, append.booleanValue()));
-                }
-                entry.setErrorPrintStream(out);
-                entry.setOutputPrintStream(out);
-            } catch (IOException ioe) {
-                throw new BuildException("Problems creating a recorder entry",
-                    ioe);
-            }
-            proj.addBuildListener(entry);
-            recorderEntries.put(name, entry);
-        } else {
-            entry = (RecorderEntry) o;
-        }
-        return entry;
-    }
-
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/RecorderEntry.java b/src/main/org/apache/tools/ant/taskdefs/RecorderEntry.java
deleted file mode 100644
index a046a45..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/RecorderEntry.java
+++ /dev/null
@@ -1,250 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.BuildLogger;
-import org.apache.tools.ant.DefaultLogger;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.BuildEvent;
-import org.apache.tools.ant.util.StringUtils;
-
-import java.io.PrintStream;
-
-/**
- * This is a class that represents a recorder. This is the listener to the
- * build process.
- *
- * @author <a href="mailto:jayglanville@home.com">J D Glanville</a>
- * @version 0.5
- * @since Ant 1.4
- */
-public class RecorderEntry implements BuildLogger {
-
-    //////////////////////////////////////////////////////////////////////
-    // ATTRIBUTES
-
-    /** The name of the file associated with this recorder entry.  */
-    private String filename = null;
-    /** The state of the recorder (recorder on or off).  */
-    private boolean record = true;
-    /** The current verbosity level to record at.  */
-    private int loglevel = Project.MSG_INFO;
-    /** The output PrintStream to record to.  */
-    private PrintStream out = null;
-    /** The start time of the last know target.  */
-    private long targetStartTime = 0l;
-    /** Strip task banners if true.  */
-    private boolean emacsMode = false;
-
-    //////////////////////////////////////////////////////////////////////
-    // CONSTRUCTORS / INITIALIZERS
-
-    /**
-     * @param name The name of this recorder (used as the filename).
-     */
-    protected RecorderEntry(String name) {
-        filename = name;
-    }
-
-    //////////////////////////////////////////////////////////////////////
-    // ACCESSOR METHODS
-
-    /**
-     * @return the name of the file the output is sent to.
-     */
-    public String getFilename() {
-        return filename;
-    }
-
-
-    /**
-     * Turns off or on this recorder.
-     *
-     * @param state true for on, false for off, null for no change.
-     */
-    public void setRecordState(Boolean state) {
-        if (state != null) {
-            record = state.booleanValue();
-        }
-    }
-
-
-    public void buildStarted(BuildEvent event) {
-        log("> BUILD STARTED", Project.MSG_DEBUG);
-    }
-
-
-    public void buildFinished(BuildEvent event) {
-        log("< BUILD FINISHED", Project.MSG_DEBUG);
-
-        Throwable error = event.getException();
-
-        if (error == null) {
-            out.println(StringUtils.LINE_SEP + "BUILD SUCCESSFUL");
-        } else {
-            out.println(StringUtils.LINE_SEP + "BUILD FAILED"
-                 + StringUtils.LINE_SEP);
-            error.printStackTrace(out);
-        }
-        out.flush();
-        out.close();
-    }
-
-
-    public void targetStarted(BuildEvent event) {
-        log(">> TARGET STARTED -- " + event.getTarget(), Project.MSG_DEBUG);
-        log(StringUtils.LINE_SEP + event.getTarget().getName() + ":",
-            Project.MSG_INFO);
-        targetStartTime = System.currentTimeMillis();
-    }
-
-
-    public void targetFinished(BuildEvent event) {
-        log("<< TARGET FINISHED -- " + event.getTarget(), Project.MSG_DEBUG);
-
-        String time = formatTime(System.currentTimeMillis() - targetStartTime);
-
-        log(event.getTarget() + ":  duration " + time, Project.MSG_VERBOSE);
-        out.flush();
-    }
-
-
-    public void taskStarted(BuildEvent event) {
-        log(">>> TASK STARTED -- " + event.getTask(), Project.MSG_DEBUG);
-    }
-
-
-    public void taskFinished(BuildEvent event) {
-        log("<<< TASK FINISHED -- " + event.getTask(), Project.MSG_DEBUG);
-        out.flush();
-    }
-
-
-    public void messageLogged(BuildEvent event) {
-        log("--- MESSAGE LOGGED", Project.MSG_DEBUG);
-
-        StringBuffer buf = new StringBuffer();
-
-        if (event.getTask() != null) {
-            String name = event.getTask().getTaskName();
-
-            if (!emacsMode) {
-                String label = "[" + name + "] ";
-                int size = DefaultLogger.LEFT_COLUMN_SIZE - label.length();
-
-                for (int i = 0; i < size; i++) {
-                    buf.append(" ");
-                }// for
-                buf.append(label);
-            }// if
-        }// if
-        buf.append(event.getMessage());
-
-        log(buf.toString(), event.getPriority());
-    }
-
-
-    /**
-     * The thing that actually sends the information to the output.
-     *
-     * @param mesg The message to log.
-     * @param level The verbosity level of the message.
-     */
-    private void log(String mesg, int level) {
-        if (record && (level <= loglevel)) {
-            out.println(mesg);
-        }
-    }
-
-
-    public void setMessageOutputLevel(int level) {
-        if (level >= Project.MSG_ERR && level <= Project.MSG_DEBUG) {
-            loglevel = level;
-        }
-    }
-
-
-    public void setOutputPrintStream(PrintStream output) {
-        out = output;
-    }
-
-
-    public void setEmacsMode(boolean emacsMode) {
-        this.emacsMode = emacsMode;
-    }
-
-
-    public void setErrorPrintStream(PrintStream err) {
-        out = err;
-    }
-
-
-    private static String formatTime(long millis) {
-        long seconds = millis / 1000;
-        long minutes = seconds / 60;
-
-
-        if (minutes > 0) {
-            return Long.toString(minutes) + " minute"
-                 + (minutes == 1 ? " " : "s ")
-                 + Long.toString(seconds % 60) + " second"
-                 + (seconds % 60 == 1 ? "" : "s");
-        } else {
-            return Long.toString(seconds) + " second"
-                 + (seconds % 60 == 1 ? "" : "s");
-        }
-
-    }
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/Rename.java b/src/main/org/apache/tools/ant/taskdefs/Rename.java
deleted file mode 100644
index fedec9e..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Rename.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.Project;
-
-import java.io.File;
-
-/**
- * Renames a file.
- *
- * @author haas@softwired.ch
- *
- * @deprecated The rename task is deprecated since Ant 1.2.  Use move instead.
- * @since Ant 1.1
- */
-public class Rename extends Task {
-
-    private File src;
-    private File dest;
-    private boolean replace = true;
-
-
-    /**
-     * Sets the file to be renamed.
-     * @param src the file to rename
-     */
-    public void setSrc(File src) {
-        this.src = src;
-    }
-
-    /**
-     * Sets the new name of the file.
-     * @param dest the new name of the file.
-     */
-    public void setDest(File dest) {
-        this.dest = dest;
-    }
-
-    /**
-     * Sets whether an existing file should be replaced.
-     * @param replace <code>on</code>, if an existing file should be replaced.
-     */
-    public void setReplace(String replace) {
-        this.replace = Project.toBoolean(replace);
-    }
-
-
-    /**
-     * Renames the file <code>src</code> to <code>dest</code>
-     * @exception org.apache.tools.ant.BuildException The exception is
-     * thrown, if the rename operation fails.
-     */
-    public void execute() throws BuildException {
-        log("DEPRECATED - The rename task is deprecated.  Use move instead.");
-
-        if (dest == null) {
-            throw new BuildException("dest attribute is required", location);
-        }
-
-        if (src == null) {
-            throw new BuildException("src attribute is required", location);
-        }
-
-        if (replace && dest.exists()) {
-            if (!dest.delete()) {
-                throw new BuildException("Unable to remove existing file " +
-                      dest);
-            }
-        }
-        if (!src.renameTo(dest)) {
-            throw new BuildException("Unable to rename " + src + " to " +
-                  dest);
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/Replace.java b/src/main/org/apache/tools/ant/taskdefs/Replace.java
deleted file mode 100644
index 29f371e..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Replace.java
+++ /dev/null
@@ -1,579 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.DirectoryScanner;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.util.FileUtils;
-import org.apache.tools.ant.util.StringUtils;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.Reader;
-import java.io.FileReader;
-import java.io.InputStreamReader;
-import java.io.Writer;
-import java.io.FileWriter;
-import java.io.OutputStreamWriter;
-import java.io.FileOutputStream;
-import java.io.BufferedReader;
-import java.io.BufferedWriter;
-import java.util.Enumeration;
-import java.util.Properties;
-import java.util.Vector;
-
-/**
- * Replaces all occurrences of one or more string tokens with given
- * values in the indicated files. Each value can be either a string 
- * or the value of a property available in a designated property file.
- *
- * @author Stefano Mazzocchi 
- *         <a href="mailto:stefano@apache.org">stefano@apache.org</a>
- * @author <a href="mailto:erik@desknetinc.com">Erik Langenbach</a>
- *
- * @since Ant 1.1
- *
- * @ant.task category="filesystem"
- */
-public class Replace extends MatchingTask {
-    
-    private File src = null;
-    private NestedString token = null;
-    private NestedString value = new NestedString();
-
-    private File propertyFile = null;
-    private File replaceFilterFile = null;
-    private Properties properties = null;
-    private Vector replacefilters = new Vector();
-
-    private File dir = null;
-
-    private int fileCount;
-    private int replaceCount;    
-    private boolean summary = false;
-    
-    /** The encoding used to read and write files - if null, uses default */
-    private String encoding = null;
-    
-    private FileUtils fileUtils = FileUtils.newFileUtils();
-
-    //Inner class
-    public class NestedString {
-
-        private StringBuffer buf = new StringBuffer();
-
-        public void addText(String val) {
-            buf.append(val);
-        }
-
-        public String getText() {
-            return buf.toString();
-        }
-    }
-
-    //Inner class
-    public class Replacefilter {
-        private String token;
-        private String value;
-        private String property;
-
-        public void validate() throws BuildException {
-            //Validate mandatory attributes
-            if (token == null) {
-                String message = "token is a mandatory attribute " 
-                    + "of replacefilter.";
-                throw new BuildException(message);
-            }
-
-            if ("".equals(token)) {
-                String message = "The token attribute must not be an empty "
-                    + "string.";
-                throw new BuildException(message);
-            }
-
-            //value and property are mutually exclusive attributes
-            if ((value != null) && (property != null)) {
-                String message = "Either value or property " 
-                    + "can be specified, but a replacefilter " 
-                    + "element cannot have both.";
-                throw new BuildException(message);
-            }
-
-            if ((property != null)) {
-                //the property attribute must have access to a property file
-                if (propertyFile == null) {
-                    String message = "The replacefilter's property attribute "
-                        + "can only be used with the replacetask's "
-                        + "propertyFile attribute.";
-                    throw new BuildException(message);
-                }
-
-                //Make sure property exists in property file
-                if (properties == null ||
-                    properties.getProperty(property) == null) {
-                    String message = "property \"" + property 
-                        + "\" was not found in " + propertyFile.getPath();
-                    throw new BuildException(message);
-                }
-            }
-        }
-
-        public String getReplaceValue() {
-            if (property != null) {
-                return properties.getProperty(property);
-            } else if (value != null) {
-                return value;
-            } else if (Replace.this.value != null) {
-                return Replace.this.value.getText();
-            } else {
-                //Default is empty string
-                return new String("");
-            }
-        }
-
-        public void setToken(String token) {
-            this.token = token;
-        }
-
-        public String getToken() {
-            return token;
-        }
-
-        public void setValue(String value) {
-            this.value = value;
-        }
-
-        public String getValue() {
-            return value;
-        }
-
-        public void setProperty(String property) {
-            this.property = property;
-        }
-
-        public String getProperty() {
-            return property;
-        }
-    }
-
-    /**
-     * Do the execution.
-     */
-    public void execute() throws BuildException {
-
-        Vector savedFilters = (Vector) replacefilters.clone();
-        Properties savedProperties = 
-            properties == null ? null : (Properties) properties.clone();
-
-        try {
-            if (replaceFilterFile != null) {
-                Properties props = getProperties(replaceFilterFile);
-                Enumeration enum = props.keys();
-                while (enum.hasMoreElements()){
-                    String token =  enum.nextElement().toString();
-                    Replacefilter replaceFilter = createReplacefilter();
-                    replaceFilter.setToken(token);
-                    replaceFilter.setValue(props.getProperty(token));
-                }
-            }
-            
-            validateAttributes();
-            
-            if (propertyFile != null) {
-                properties = getProperties(propertyFile);
-            }
-            
-            validateReplacefilters();
-            fileCount = 0;
-            replaceCount = 0;
-            
-            if (src != null) {
-                processFile(src);
-            }
-            
-            if (dir != null) {
-                DirectoryScanner ds = super.getDirectoryScanner(dir);
-                String[] srcs = ds.getIncludedFiles();
-                
-                for (int i = 0; i < srcs.length; i++) {
-                    File file = new File(dir, srcs[i]);
-                    processFile(file);
-                }
-            }
-            
-            if (summary) {
-                log("Replaced " + replaceCount + " occurrences in " 
-                    + fileCount + " files.", Project.MSG_INFO);
-            }
-        } finally {
-            replacefilters = savedFilters;
-            properties = savedProperties;
-        } // end of finally
-        
-    }
-    
-    /**
-     * Validate attributes provided for this task in .xml build file.
-     *
-     * @exception BuildException if any supplied attribute is invalid or any
-     * mandatory attribute is missing
-     */
-    public void validateAttributes() throws BuildException {
-        if (src == null && dir == null) {
-            String message = "Either the file or the dir attribute " 
-                + "must be specified";
-            throw new BuildException(message, location);
-        }
-        if (propertyFile != null && !propertyFile.exists()) {
-            String message = "Property file " + propertyFile.getPath() 
-                + " does not exist.";
-            throw new BuildException(message, location);
-        }
-        if (token == null && replacefilters.size() == 0) {
-            String message = "Either token or a nested replacefilter "
-                + "must be specified";
-            throw new BuildException(message, location);
-        }
-        if (token != null && "".equals(token.getText())) {
-            String message = "The token attribute must not be an empty string.";
-            throw new BuildException(message, location);
-        }
-    }
-
-    /**
-     * Validate nested elements.
-     *
-     * @exception BuildException if any supplied attribute is invalid or any
-     * mandatory attribute is missing
-     */
-    public void validateReplacefilters()
-            throws BuildException {
-        for (int i = 0; i < replacefilters.size(); i++) {
-            Replacefilter element = 
-                (Replacefilter) replacefilters.elementAt(i);
-            element.validate();
-        }
-    }
-
-    public Properties getProperties(File propertyFile) throws BuildException {
-        Properties properties = new Properties();
-
-        try {
-            properties.load(new FileInputStream(propertyFile));
-        } catch (FileNotFoundException e) {
-            String message = "Property file (" + propertyFile.getPath() 
-                + ") not found.";
-            throw new BuildException(message);
-        } catch (IOException e) {
-            String message = "Property file (" + propertyFile.getPath() 
-                + ") cannot be loaded.";
-            throw new BuildException(message);
-        }
-
-        return properties;
-    }
-
-    /**
-     * Perform the replacement on the given file.
-     *
-     * The replacement is performed on a temporary file which then
-     * replaces the original file.
-     *
-     * @param src the source file
-     */
-    private void processFile(File src) throws BuildException {
-        if (!src.exists()) {
-            throw new BuildException("Replace: source file " + src.getPath() 
-                                     + " doesn't exist", location);
-        }
-
-        File temp = fileUtils.createTempFile("rep", ".tmp", 
-                                             fileUtils.getParentFile(src));
-
-        Reader reader = null;
-        Writer writer = null;
-        try {
-            reader = encoding == null ? new FileReader(src)
-                : new InputStreamReader(new FileInputStream(src), encoding);
-            writer = encoding == null ? new FileWriter(temp)
-                : new OutputStreamWriter(new FileOutputStream(temp), encoding);
-            
-            BufferedReader br = new BufferedReader(reader);
-            BufferedWriter bw = new BufferedWriter(writer);
-
-            // read the entire file into a StringBuffer
-            //   size of work buffer may be bigger than needed
-            //   when multibyte characters exist in the source file
-            //   but then again, it might be smaller than needed on
-            //   platforms like Windows where length can't be trusted
-            int fileLengthInBytes = (int) src.length();
-            StringBuffer tmpBuf = new StringBuffer(fileLengthInBytes);
-            int readChar = 0;
-            int totread = 0;
-            while (true) {
-                readChar = br.read();
-                if (readChar < 0) { break; }
-                tmpBuf.append((char) readChar);
-                totread++;
-            }
-
-            // create a String so we can use indexOf
-            String buf = tmpBuf.toString();
-
-            //Preserve original string (buf) so we can compare the result
-            String newString = new String(buf);
-
-            if (token != null) {
-                // line separators in values and tokens are "\n"
-                // in order to compare with the file contents, replace them
-                // as needed
-                String val = stringReplace(value.getText(), "\n",
-                                           StringUtils.LINE_SEP);
-                String tok = stringReplace(token.getText(), "\n",
-                                           StringUtils.LINE_SEP);
-                
-                // for each found token, replace with value
-                log("Replacing in " + src.getPath() + ": " + token.getText() 
-                    + " --> " + value.getText(), Project.MSG_VERBOSE);
-                newString = stringReplace(newString, tok, val);
-            }
-
-            if (replacefilters.size() > 0) {
-                newString = processReplacefilters(newString, src.getPath());
-            }
-
-            boolean changes = !newString.equals(buf);
-            if (changes) {
-                bw.write(newString, 0, newString.length());
-                bw.flush();
-            }
-
-            // cleanup
-            bw.close();
-            writer = null;
-            br.close();
-            reader = null;
-
-            // If there were changes, move the new one to the old one;
-            // otherwise, delete the new one
-            if (changes) {
-                ++fileCount;
-                src.delete();
-                temp.renameTo(src);
-                temp = null;
-            }
-        } catch (IOException ioe) {
-            throw new BuildException("IOException in " + src + " - " + 
-                                     ioe.getClass().getName() + ":" 
-                                     + ioe.getMessage(), ioe, location);
-        } finally {
-            if (reader != null) {
-                try {
-                    reader.close();
-                } catch (IOException e) {}
-            }
-            if (writer != null) {
-                try {
-                    writer.close();
-                } catch (IOException e) {}
-            }
-            if (temp != null) {
-                temp.delete();
-            }
-        }
-        
-    }
-
-    private String processReplacefilters(String buffer, String filename) {
-        String newString = new String(buffer);
-
-        for (int i = 0; i < replacefilters.size(); i++) {
-            Replacefilter filter = (Replacefilter) replacefilters.elementAt(i);
-
-            //for each found token, replace with value
-            log("Replacing in " + filename + ": " + filter.getToken() 
-                + " --> " + filter.getReplaceValue(), Project.MSG_VERBOSE);
-            newString = stringReplace(newString, filter.getToken(), 
-                                      filter.getReplaceValue());
-        }
-
-        return newString;
-    }
-
-
-    /**
-     * Set the source file.
-     */
-    public void setFile(File file) {
-        this.src = file;
-    }
-
-    /**
-     * Request a summary
-     *
-     * @param summary true if you would like a summary logged of the
-     * replace operation
-     */
-    public void setSummary(boolean summary) {
-        this.summary = summary;
-    }
-    
-    
-    /**
-     * Sets a file used to define multiple ReplaceFilters from key-value pairs.
-     */
-    public void setReplaceFilterFile(File filename) {
-        replaceFilterFile = filename;
-    }
-
-    /**
-     * Set the source files path when using matching tasks.
-     */
-    public void setDir(File dir) {
-        this.dir = dir;
-    }
-
-    /**
-     * Set the string token to replace.
-     */
-    public void setToken(String token) {
-        createReplaceToken().addText(token);
-    }
-
-    /**
-     * Set the string value to use as token replacement.
-     */
-    public void setValue(String value) {
-        createReplaceValue().addText(value);
-    }
-
-    /**
-     * Set the file encoding to use on the files read and written by replace
-     *
-     * @param encoding the encoding to use on the files
-     */
-    public void setEncoding(String encoding) {
-        this.encoding = encoding;
-    }
-    
-    /**
-     * Nested &lt;replacetoken&gt; element.
-     */
-    public NestedString createReplaceToken() {
-        if (token == null) {
-            token = new NestedString();
-        }
-        return token;
-    }
-
-    /**
-     * Nested &lt;replacevalue&gt; element.
-     */
-    public NestedString createReplaceValue() {
-        return value;
-    }
-
-    /**
-     * Sets a file to be searched for property values.
-     */
-    public void setPropertyFile(File filename) {
-        propertyFile = filename;
-    }
-
-    /**
-     * Add nested &lt;replacefilter&gt; element.
-     */
-    public Replacefilter createReplacefilter() {
-        Replacefilter filter = new Replacefilter();
-        replacefilters.addElement(filter);
-        return filter;
-    }
-
-    /**
-     * Replace occurrences of str1 in string str with str2
-     */    
-    private String stringReplace(String str, String str1, String str2) {
-        StringBuffer ret = new StringBuffer();
-        int start = 0;
-        int found = str.indexOf(str1);
-        while (found >= 0) {
-            // write everything up to the found str1
-            if (found > start) {
-                ret.append(str.substring(start, found));
-            }
-
-            // write the replacement str2
-            if (str2 != null) {
-                ret.append(str2);
-            }
-
-            // search again
-            start = found + str1.length();
-            found = str.indexOf(str1, start);
-            ++replaceCount;
-        }
-
-        // write the remaining characters
-        if (str.length() > start) {
-            ret.append(str.substring(start, str.length()));
-        }
-
-        return ret.toString();
-    }
-
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/Rmic.java b/src/main/org/apache/tools/ant/taskdefs/Rmic.java
deleted file mode 100644
index 814f4c9..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Rmic.java
+++ /dev/null
@@ -1,638 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.AntClassLoader;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.DirectoryScanner;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.taskdefs.rmic.RmicAdapter;
-import org.apache.tools.ant.taskdefs.rmic.RmicAdapterFactory;
-import org.apache.tools.ant.types.FilterSetCollection;
-import org.apache.tools.ant.types.Path;
-import org.apache.tools.ant.types.Reference;
-import org.apache.tools.ant.util.FileNameMapper;
-import org.apache.tools.ant.util.FileUtils;
-import org.apache.tools.ant.util.SourceFileScanner;
-import org.apache.tools.ant.util.facade.FacadeTaskHelper;
-
-import java.io.File;
-import java.io.IOException;
-import java.rmi.Remote;
-import java.util.Vector;
-
-/**
- * Task to compile RMI stubs and skeletons. This task can take the following
- * arguments:
- * <ul>
- * <li>base: The base directory for the compiled stubs and skeletons
- * <li>class: The name of the class to generate the stubs from
- * <li>stubVersion: The version of the stub prototol to use (1.1, 1.2, compat)
- * <li>sourceBase: The base directory for the generated stubs and skeletons
- * <li>classpath: Additional classpath, appended before the system classpath
- * <li>iiop: Generate IIOP compatable output 
- * <li>iiopopts: Include IIOP options 
- * <li>idl: Generate IDL output 
- * <li>idlopts: Include IDL options 
- * <li>includeantruntime
- * <li>includejavaruntime
- * <li>extdirs
- * </ul>
- * Of these arguments, <b>base</b> is required.
- * <p>
- * If classname is specified then only that classname will be compiled. If it
- * is absent, then <b>base</b> is traversed for classes according to patterns.
- * <p>
- *
- * @author duncan@x180.com
- * @author ludovic.claude@websitewatchers.co.uk
- * @author David Maclean <a href="mailto:david@cm.co.za">david@cm.co.za</a>
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> 
- * @author Takashi Okamoto tokamoto@rd.nttdata.co.jp
- *
- * @since Ant 1.1
- *
- * @ant.task category="java"
- */
-
-public class Rmic extends MatchingTask {
-
-    private static final String FAIL_MSG 
-        = "Rmic failed; see the compiler error output for details.";
-
-    private File baseDir;
-    private String classname;
-    private File sourceBase;
-    private String stubVersion;
-    private Path compileClasspath;
-    private Path extdirs;
-    private boolean verify = false;
-    private boolean filtering = false;
-
-    private boolean iiop = false;
-    private String  iiopopts;
-    private boolean idl  = false;
-    private String  idlopts;
-    private boolean debug  = false;
-    private boolean includeAntRuntime = true;
-    private boolean includeJavaRuntime = false;
-
-    private Vector compileList = new Vector();
-
-    private ClassLoader loader = null;
-
-    private FileUtils fileUtils = FileUtils.newFileUtils();
-
-    private FacadeTaskHelper facade;
-
-    public Rmic() {
-        try {
-            Class.forName("kaffe.rmi.rmic.RMIC");
-            facade = new FacadeTaskHelper("kaffe");
-        } catch (ClassNotFoundException cnfe) {
-            facade = new FacadeTaskHelper("sun");
-        }
-    }
-
-    /** Sets the base directory to output generated class. */
-    public void setBase(File base) {
-        this.baseDir = base;
-    }
-
-    /** Gets the base directory to output generated class. */
-    public File getBase() {
-        return this.baseDir;
-    }
-
-    /** Sets the class name to compile. */
-    public void setClassname(String classname) {
-        this.classname = classname;
-    }
-
-    /** Gets the class name to compile. */
-    public String getClassname() {
-        return classname;
-    }
-
-    /** Sets the source dirs to find the source java files. */
-    public void setSourceBase(File sourceBase) {
-        this.sourceBase = sourceBase;
-    }
-
-    /** Gets the source dirs to find the source java files. */
-    public File getSourceBase() {
-        return sourceBase;
-    }
-
-    /** Sets the stub version. */
-    public void setStubVersion(String stubVersion) {
-        this.stubVersion = stubVersion;
-    }
-
-    public String getStubVersion() {
-        return stubVersion;
-    }
-
-    public void setFiltering(boolean filter) {
-        filtering = filter;
-    }
-
-    public boolean getFiltering() {
-        return filtering;
-    }
-
-    /** Sets the debug flag. */
-    public void setDebug(boolean debug) {
-        this.debug = debug;
-    }
-
-    /** Gets the debug flag. */
-    public boolean getDebug() {
-        return debug;
-    }
-
-    /**
-     * Set the classpath to be used for this compilation.
-     */
-    public void setClasspath(Path classpath) {
-        if (compileClasspath == null) {
-            compileClasspath = classpath;
-        } else {
-            compileClasspath.append(classpath);
-        }
-    }
-
-    /**
-     * Creates a nested classpath element.
-     */
-    public Path createClasspath() {
-        if (compileClasspath == null) {
-            compileClasspath = new Path(project);
-        }
-        return compileClasspath.createPath();
-    }
-
-    /**
-     * Adds a reference to a CLASSPATH defined elsewhere.
-     */
-    public void setClasspathRef(Reference r) {
-        createClasspath().setRefid(r);
-    }
-
-    /**
-     * Gets the classpath. 
-     */
-    public Path getClasspath() {
-        return compileClasspath; 
-    }
-
-    /**
-     * Indicates that the classes found by the directory match should be
-     * checked to see if they implement java.rmi.Remote.
-     * This defaults to false if not set.  */
-    public void setVerify(boolean verify) {
-        this.verify = verify;
-    }
-
-    /** Get verify flag. */
-    public boolean getVerify() {
-        return verify;
-    }
-
-    /**
-     * Indicates that IIOP compatible stubs should
-     * be generated.  This defaults to false 
-     * if not set.  
-     */
-    public void setIiop(boolean iiop) {
-        this.iiop = iiop;
-    }
-
-    /** Gets iiop flags. */
-    public boolean getIiop() {
-        return iiop;
-    }
-
-    /**
-     * pass additional arguments for iiop 
-     */
-    public void setIiopopts(String iiopopts) {
-        this.iiopopts = iiopopts;
-    }
-
-    /** Gets additional arguments for iiop. */
-    public String getIiopopts() {
-        return iiopopts;
-    }
-
-    /**
-     * Indicates that IDL output should be 
-     * generated.  This defaults to false 
-     * if not set.  
-     */
-    public void setIdl(boolean idl) {
-        this.idl = idl;
-    }
-
-    /* Gets IDL flags. */
-    public boolean getIdl() {
-        return idl;
-    }
-
-    /**
-     * pass additional arguments for idl compile 
-     */
-    public void setIdlopts(String idlopts) {
-        this.idlopts = idlopts;
-    }
-
-    /**
-     * Gets additional arguments for idl compile. 
-     */
-    public String getIdlopts() {
-        return idlopts;
-    }
-
-    /** Gets file list to compile. */
-    public Vector getFileList() {
-        return compileList;
-    }
-
-    /**
-     * Include ant's own classpath in this task's classpath?
-     */
-    public void setIncludeantruntime(boolean include) {
-        includeAntRuntime = include;
-    }
-
-    /**
-     * Gets whether or not the ant classpath is to be included in the
-     * task's classpath.
-     */
-    public boolean getIncludeantruntime() {
-        return includeAntRuntime;
-    }
-
-    /**
-     * Sets whether or not to include the java runtime libraries to this
-     * task's classpath.
-     */
-    public void setIncludejavaruntime(boolean include) {
-        includeJavaRuntime = include;
-    }
-
-    /**
-     * Gets whether or not the java runtime should be included in this
-     * task's classpath.
-     */
-    public boolean getIncludejavaruntime() {
-        return includeJavaRuntime;
-    }
-
-    /**
-     * Sets the extension directories that will be used during the
-     * compilation.
-     */
-    public void setExtdirs(Path extdirs) {
-        if (this.extdirs == null) {
-            this.extdirs = extdirs;
-        } else {
-            this.extdirs.append(extdirs);
-        }
-    }
-
-    /**
-     * Maybe creates a nested extdirs element.
-     */
-    public Path createExtdirs() {
-        if (extdirs == null) {
-            extdirs = new Path(project);
-        }
-        return extdirs.createPath();
-    }
-
-    /**
-     * Gets the extension directories that will be used during the
-     * compilation.
-     */
-    public Path getExtdirs() {
-        return extdirs;
-    }
-
-    public Vector getCompileList() {
-        return compileList;
-    }
-
-    /**
-     * @since Ant 1.5
-     */
-    public void setCompiler(String compiler) {
-        facade.setImplementation(compiler);
-    }
-
-    /**
-     * @since Ant 1.5
-     */
-    public String getCompiler() {
-        facade.setMagicValue(getProject().getProperty("build.rmic"));
-        return facade.getImplementation();
-    }
-
-    /**
-     * Adds an implementation specific command line argument.
-     * @since Ant 1.5
-     */
-    public ImplementationSpecificArgument createCompilerArg() {
-        ImplementationSpecificArgument arg =
-            new ImplementationSpecificArgument();
-        facade.addImplementationArgument(arg);
-        return arg;
-    }
-
-    /**
-     * Get the additional implementation specific command line arguments.
-     * @return array of command line arguments, guaranteed to be non-null.
-     * @since Ant 1.5
-     */
-    public String[] getCurrentCompilerArgs() {
-        getCompiler();
-        return facade.getArgs();
-    }
-
-    public void execute() throws BuildException {
-        if (baseDir == null) {
-            throw new BuildException("base attribute must be set!", location);
-        }
-        if (!baseDir.exists()) {
-            throw new BuildException("base does not exist!", location);
-        }
-
-        if (verify) {
-            log("Verify has been turned on.", Project.MSG_INFO);
-        }
-
-        RmicAdapter adapter = RmicAdapterFactory.getRmic(getCompiler(), this);
-            
-        // now we need to populate the compiler adapter
-        adapter.setRmic(this);
-
-        Path classpath = adapter.getClasspath();
-        loader = new AntClassLoader(project, classpath);
-
-        try {
-            // scan base dirs to build up compile lists only if a
-            // specific classname is not given
-            if (classname == null) {
-                DirectoryScanner ds = this.getDirectoryScanner(baseDir);
-                String[] files = ds.getIncludedFiles();
-                scanDir(baseDir, files, adapter.getMapper());
-            } else {
-                // otherwise perform a timestamp comparison - at least
-                scanDir(baseDir, 
-                        new String[] {classname.replace('.', 
-                                                        File.separatorChar)
-                                          + ".class"},
-                        adapter.getMapper());
-            }
-            
-            int fileCount = compileList.size();
-            if (fileCount > 0) {
-                log("RMI Compiling " + fileCount +
-                    " class" + (fileCount > 1 ? "es" : "") + " to " + baseDir, 
-                    Project.MSG_INFO);
-                
-                // finally, lets execute the compiler!!
-                if (!adapter.execute()) {
-                    throw new BuildException(FAIL_MSG, location);
-                }
-            }
-            
-            /* 
-             * Move the generated source file to the base directory.  If
-             * base directory and sourcebase are the same, the generated
-             * sources are already in place.
-             */
-            if (null != sourceBase && !baseDir.equals(sourceBase) 
-                && fileCount > 0) {
-                if (idl) {
-                    log("Cannot determine sourcefiles in idl mode, ", 
-                        Project.MSG_WARN);
-                    log("sourcebase attribute will be ignored.", 
-                        Project.MSG_WARN);
-                } else {
-                    for (int j = 0; j < fileCount; j++) {
-                        moveGeneratedFile(baseDir, sourceBase,
-                                          (String) compileList.elementAt(j),
-                                          adapter);
-                    }
-                }
-            }
-        } finally {
-            compileList.removeAllElements();
-        }
-    }
-
-    /**
-     * Move the generated source file(s) to the base directory
-     *
-     * @exception org.apache.tools.ant.BuildException When error
-     * copying/removing files.
-     */
-    private void moveGeneratedFile (File baseDir, File sourceBaseFile,
-                                    String classname,
-                                    RmicAdapter adapter)
-        throws BuildException {
-
-        String classFileName = 
-            classname.replace('.', File.separatorChar) + ".class";
-        String[] generatedFiles = 
-            adapter.getMapper().mapFileName(classFileName);
-
-        for (int i = 0; i < generatedFiles.length; i++) {
-            if (!generatedFiles[i].endsWith(".class")) {
-                // don't know how to handle that - a IDL file doesn't
-                // have a corresponding Java source for example.
-                continue;
-            }
-            
-            String sourceFileName = 
-                generatedFiles[i].substring(0, classFileName.length() - 6)
-                + ".java";
-
-            File oldFile = new File(baseDir, sourceFileName);
-            if (!oldFile.exists()) {
-                // no source file generated, nothing to move
-                continue;
-            }
-
-            File newFile = new File(sourceBaseFile, sourceFileName);
-            try {
-                if (filtering) {
-                    fileUtils.copyFile(oldFile, newFile, 
-                        new FilterSetCollection(getProject()
-                                                .getGlobalFilterSet()));
-                } else {
-                    fileUtils.copyFile(oldFile, newFile);
-                }
-                oldFile.delete();
-            } catch (IOException ioe) {
-                String msg = "Failed to copy " + oldFile + " to " +
-                    newFile + " due to " + ioe.getMessage();
-                throw new BuildException(msg, ioe, location);
-            }
-        }
-    }
-
-    /**
-     * Scans the directory looking for class files to be compiled.
-     * The result is returned in the class variable compileList.
-     */
-    protected void scanDir(File baseDir, String[] files,
-                           FileNameMapper mapper) {
-
-        String[] newFiles = files;
-        if (idl) {
-            log("will leave uptodate test to rmic implementation in idl mode.",
-                Project.MSG_VERBOSE);
-        } else if (iiop 
-                   && iiopopts != null && iiopopts.indexOf("-always") > -1) {
-            log("no uptodate test as -always option has been specified",
-                Project.MSG_VERBOSE);
-        } else {
-            SourceFileScanner sfs = new SourceFileScanner(this);
-            newFiles = sfs.restrict(files, baseDir, baseDir, mapper);
-        }
-
-        for (int i = 0; i < newFiles.length; i++) {
-            String classname = newFiles[i].replace(File.separatorChar, '.');
-            classname = classname.substring(0, classname.lastIndexOf(".class"));
-            compileList.addElement(classname);
-        }
-    }
-
-    /**
-     * Load named class and test whether it can be rmic'ed
-     */
-    public boolean isValidRmiRemote(String classname) {
-        try {
-            Class testClass = loader.loadClass(classname);
-            // One cannot RMIC an interface for "classic" RMI (JRMP)
-            if (testClass.isInterface() && !iiop && !idl) {
-                return false;
-            }
-            return isValidRmiRemote(testClass);
-        } catch (ClassNotFoundException e) {
-            log("Unable to verify class " + classname + 
-                ". It could not be found.", Project.MSG_WARN);
-        } catch (NoClassDefFoundError e) {
-            log("Unable to verify class " + classname + 
-                ". It is not defined.", Project.MSG_WARN);
-        } catch (Throwable t) {
-            log("Unable to verify class " + classname + 
-                ". Loading caused Exception: " +
-                t.getMessage(), Project.MSG_WARN);
-        }
-        // we only get here if an exception has been thrown
-        return false;
-    }
-
-    /**
-     * Returns the topmost interface that extends Remote for a given
-     * class - if one exists.
-     */
-    public Class getRemoteInterface(Class testClass) {
-        if (Remote.class.isAssignableFrom(testClass)) {
-            Class [] interfaces = testClass.getInterfaces();
-            if (interfaces != null) {
-                for (int i = 0; i < interfaces.length; i++) {
-                    if (Remote.class.isAssignableFrom(interfaces[i])) {
-                        return interfaces[i];
-                    }
-                }
-            }
-        }
-        return null;
-    }
-
-    /**
-     * Check to see if the class or (super)interfaces implement
-     * java.rmi.Remote.
-     */
-    private boolean isValidRmiRemote (Class testClass) {
-        return getRemoteInterface(testClass) != null;
-    }
-
-    /**
-     * Classloader for the user-specified classpath.
-     */
-    public ClassLoader getLoader() {
-        return loader;
-    }
-
-    /**
-     * Adds an "compiler" attribute to Commandline$Attribute used to
-     * filter command line attributes based on the current
-     * implementation.
-     */
-    public class ImplementationSpecificArgument extends 
-        org.apache.tools.ant.util.facade.ImplementationSpecificArgument {
-
-        public void setCompiler(String impl) {
-            super.setImplementation(impl);
-        }
-    }
-
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/SQLExec.java b/src/main/org/apache/tools/ant/taskdefs/SQLExec.java
deleted file mode 100644
index baa2dd4..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/SQLExec.java
+++ /dev/null
@@ -1,609 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights 
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.AntClassLoader;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.DirectoryScanner;
-import org.apache.tools.ant.Project;
-
-import org.apache.tools.ant.types.EnumeratedAttribute;
-import org.apache.tools.ant.types.Path;
-import org.apache.tools.ant.types.Reference;
-import org.apache.tools.ant.types.FileSet;
-
-import java.io.File;
-import java.io.PrintStream;
-import java.io.BufferedOutputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.Reader;
-import java.io.BufferedReader;
-import java.io.StringReader;
-import java.io.FileReader;
-import java.io.InputStreamReader;
-import java.io.FileInputStream;
-import java.util.Enumeration;
-import java.util.StringTokenizer;
-import java.util.Vector;
-import java.util.Properties;
-import java.util.Hashtable;
-
-import java.sql.Connection;
-import java.sql.Statement;
-import java.sql.Driver;
-import java.sql.SQLException;
-import java.sql.DatabaseMetaData;
-import java.sql.SQLWarning;
-import java.sql.ResultSet;
-import java.sql.ResultSetMetaData;
-
-/**
- * Reads in a text file containing SQL statements seperated with semicolons
- * and executes it in a given db.
- * Comments may be created with REM -- or //.
- * 
- * @author <a href="mailto:jeff@custommonkey.org">Jeff Martin</a>
- * @author <A href="mailto:gholam@xtra.co.nz">Michael McCallum</A>
- * @author <A href="mailto:tim.stephenson@sybase.com">Tim Stephenson</A>
- *
- * @since Ant 1.2
- *
- * @ant.task name="sql" category="database"
- */
-public class SQLExec extends JDBCTask {
-
-    public static class DelimiterType extends EnumeratedAttribute {
-        public static final String NORMAL = "normal";
-        public static final String ROW = "row";
-        public String[] getValues() {
-            return new String[] {NORMAL, ROW};
-        }
-    }
-
-    
-    
-    private int goodSql = 0;
-
-    private int totalSql = 0;
-
-	/**
-     * Database connection
-     */
-    private Connection conn = null;
-
-    private Vector filesets = new Vector();
-
-        
-        
-    /**
-     * SQL statement
-     */
-    private Statement statement = null;
-
-    
-    
-    
-    
-    /**
-     * SQL input file
-     */
-    private File srcFile = null;
-
-    /**
-     * SQL input command
-     */
-    private String sqlCommand = "";
-
-    /**
-     * SQL transactions to perform
-     */
-    private Vector transactions = new Vector();
-
-    /**
-     * SQL Statement delimiter
-     */
-    private String delimiter = ";";
-    
-    /**
-     * The delimiter type indicating whether the delimiter will
-     * only be recognized on a line by itself
-     */
-    private String delimiterType = DelimiterType.NORMAL;
-    
-    /**
-     * Print SQL results.
-     */
-    private boolean print = false;
-
-    /**
-     * Print header columns.
-     */
-    private boolean showheaders = true;
-
-    /**
-     * Results Output file.
-     */
-    private File output = null;
-
-    
-    
-    /**
-     * Action to perform if an error is found
-     **/
-    private String onError = "abort";
-    
-    /**
-     * Encoding to use when reading SQL statements from a file
-     */
-    private String encoding = null;
-
-    /**
-     * Append to an existing file or overwrite it?
-     */
-    private boolean append = false;
-
-
-    
-    
-        
-    /**
-     * Set the name of the sql file to be run.
-     */
-    public void setSrc(File srcFile) {
-        this.srcFile = srcFile;
-    }
-    
-    /**
-     * Set the sql command to execute
-     */
-    public void addText(String sql) {
-        this.sqlCommand += sql;
-    }
-    
-    /**
-     * Adds a set of files (nested fileset attribute).
-     */
-    public void addFileset(FileSet set) {
-        filesets.addElement(set);
-    }
-
-
-    /**
-     * Set the sql command to execute
-     */
-    public Transaction createTransaction() {
-        Transaction t = new Transaction();
-        transactions.addElement(t);
-        return t;
-    }
-    
-        
-        
-    
-    /**
-     * Set the file encoding to use on the sql files read in
-     *
-     * @param encoding the encoding to use on the files
-     */
-    public void setEncoding(String encoding) {
-        this.encoding = encoding;
-    }
-    
-    
-        
-    
-    /**
-     * Set the statement delimiter.
-     *
-     * <p>For example, set this to "go" and delimitertype to "ROW" for
-     * Sybase ASE or MS SQL Server.</p>
-     */
-    public void setDelimiter(String delimiter) {
-        this.delimiter = delimiter;
-    }
-
-    /**
-     * Set the Delimiter type for this sql task. 
-     *
-     * <p>The delimiter type takes two values - normal and row. Normal
-     * means that any occurence of the delimiter terminate the SQL
-     * command whereas with row, only a line containing just the
-     * delimiter is recognized as the end of the command.</p>
-     */
-    public void setDelimiterType(DelimiterType delimiterType) {
-        this.delimiterType = delimiterType.getValue();
-    }
-    
-    /**
-     * Set the print flag.
-     */
-    public void setPrint(boolean print) {
-        this.print = print;
-    }
-    
-    /**
-     * Set the showheaders flag.
-     */
-    public void setShowheaders(boolean showheaders) {
-        this.showheaders = showheaders;
-    }
-
-    /**
-     * Set the output file.
-     */
-    public void setOutput(File output) {
-        this.output = output;
-    }
-
-    /**
-     * Shall we append to an existing file?
-     *
-     * @since Ant 1.5
-     */
-    public void setAppend(boolean append) {
-        this.append = append;
-    }
-
-    
-    
-    /**
-     * Set the action to perform onerror
-     */
-    public void setOnerror(OnError action) {
-        this.onError = action.getValue();
-    }
-
-    /**
-     * Load the sql file and then execute it
-     */
-    public void execute() throws BuildException {
-        Vector savedTransaction = (Vector) transactions.clone();
-        String savedSqlCommand = sqlCommand;
-
-        sqlCommand = sqlCommand.trim();
-
-        try {
-            if (srcFile == null && sqlCommand.length() == 0 
-                && filesets.isEmpty()) { 
-                if (transactions.size() == 0) {
-                    throw new BuildException("Source file or fileset, "
-                                             + "transactions or sql statement "
-                                             + "must be set!", location);
-                }
-            }
-        
-           	if (srcFile != null && !srcFile.exists()) {
-		   	 	throw new BuildException("Source file does not exist!", location);
-			}
-
-            // deal with the filesets
-            for (int i = 0; i < filesets.size(); i++) {
-                FileSet fs = (FileSet) filesets.elementAt(i);
-                DirectoryScanner ds = fs.getDirectoryScanner(project);
-                File srcDir = fs.getDir(project);
-                
-                String[] srcFiles = ds.getIncludedFiles();
-                
-                // Make a transaction for each file
-                for (int j = 0 ; j < srcFiles.length ; j++) {
-                    Transaction t = createTransaction();
-                    t.setSrc(new File(srcDir, srcFiles[j]));
-                }
-            }
-            
-            // Make a transaction group for the outer command
-            Transaction t = createTransaction();
-            t.setSrc(srcFile);
-            t.addText(sqlCommand);
-			conn = getConnection();
-			if (!isValidRdbms(conn)) {
-				return;
-			}
-            try {
-                statement = conn.createStatement();
-
-            
-                PrintStream out = System.out;
-                try {
-                    if (output != null) {
-                        log("Opening PrintStream to output file " + output, 
-                            Project.MSG_VERBOSE);
-                        out = new PrintStream(
-                                  new BufferedOutputStream(
-                                      new FileOutputStream(output
-                                                           .getAbsolutePath(),
-                                                           append)));
-                    }
-                    
-                    // Process all transactions
-                    for (Enumeration e = transactions.elements(); 
-                         e.hasMoreElements();) {
-                       
-                        ((Transaction) e.nextElement()).runTransaction(out);
-                        if (!isAutocommit()) {
-                            log("Commiting transaction", Project.MSG_VERBOSE);
-                            conn.commit();
-                        }
-                    }
-                } finally {
-                    if (out != null && out != System.out) {
-                        out.close();
-                    }
-                } 
-            } catch (IOException e){
-                if (!isAutocommit() && conn != null && onError.equals("abort")) {
-                    try {
-                        conn.rollback();
-                    } catch (SQLException ex) {}
-                }
-                throw new BuildException(e, location);
-            } catch (SQLException e){
-                if (!isAutocommit() && conn != null && onError.equals("abort")) {
-                    try {
-                        conn.rollback();
-                    } catch (SQLException ex) {}
-                }
-                throw new BuildException(e, location);
-            } finally {
-                try {
-                    if (statement != null) {
-                        statement.close();
-                    }
-                    if (conn != null) {
-                        conn.close();
-                    }
-                } catch (SQLException e) {}
-            }
-            
-            log(goodSql + " of " + totalSql + 
-                " SQL statements executed successfully");
-        } finally {
-            transactions = savedTransaction;
-            sqlCommand = savedSqlCommand;
-        }
-    }
-
-
-    protected void runStatements(Reader reader, PrintStream out) 
-        throws SQLException, IOException {
-        String sql = "";
-        String line = "";
- 
-        BufferedReader in = new BufferedReader(reader);
- 
-        while ((line = in.readLine()) != null){
-            line = line.trim();
-            line = project.replaceProperties(line);
-            if (line.startsWith("//")) {
-                continue;
-            }
-            if (line.startsWith("--")) {
-                continue;
-            }
-            StringTokenizer st = new StringTokenizer(line);
-            if (st.hasMoreTokens()) {
-                String token = st.nextToken();
-                if ("REM".equalsIgnoreCase(token)) {
-                    continue;
-                }
-            }
-            
-            sql += " " + line;
-            sql = sql.trim();
-            
-            // SQL defines "--" as a comment to EOL
-            // and in Oracle it may contain a hint
-            // so we cannot just remove it, instead we must end it
-            if (line.indexOf("--") >= 0) {
-                sql += "\n";
-            }
-            
-            if ((delimiterType.equals(DelimiterType.NORMAL) 
-                 && sql.endsWith(delimiter)) 
-                ||
-                (delimiterType.equals(DelimiterType.ROW) 
-                 && line.equals(delimiter))) {
-                log("SQL: " + sql, Project.MSG_VERBOSE);
-                execSQL(sql.substring(0, sql.length() - delimiter.length()), 
-                        out);
-                sql = "";
-            }
-        }
-        
-        // Catch any statements not followed by ;
-        if (!sql.equals("")){
-            execSQL(sql, out);
-        }
-    }
- 
-        
-    /**
-     * Exec the sql statement.
-     */
-    protected void execSQL(String sql, PrintStream out) throws SQLException {
-        // Check and ignore empty statements
-        if ("".equals(sql.trim())) {
-            return;
-        }
-        
-        try {  
-            totalSql++;
-            if (!statement.execute(sql)) {
-                log(statement.getUpdateCount() + " rows affected", 
-                    Project.MSG_VERBOSE);
-            } else {
-                if (print) {
-                    printResults(out);
-                }
-            }
-            
-            SQLWarning warning = conn.getWarnings();
-            while (warning != null){
-                log(warning + " sql warning", Project.MSG_VERBOSE);
-                warning = warning.getNextWarning();
-            }
-            conn.clearWarnings();
-            goodSql++;
-        } catch (SQLException e) {
-            log("Failed to execute: " + sql, Project.MSG_ERR);
-            if (!onError.equals("continue")) {
-                throw e;
-            }
-            log(e.toString(), Project.MSG_ERR);
-        }
-    }
-    
-    /**
-     * print any results in the statement.
-     */
-    protected void printResults(PrintStream out) throws java.sql.SQLException {
-        ResultSet rs = null;
-        do {
-            rs = statement.getResultSet();
-            if (rs != null) {
-                log("Processing new result set.", Project.MSG_VERBOSE);
-                ResultSetMetaData md = rs.getMetaData();
-                int columnCount = md.getColumnCount();
-                StringBuffer line = new StringBuffer();
-                if (showheaders) {
-                    for (int col = 1; col < columnCount; col++) {
-                         line.append(md.getColumnName(col));
-                         line.append(",");
-                    }
-                    line.append(md.getColumnName(columnCount));
-                    out.println(line);
-                    line.setLength(0);
-                }
-                while (rs.next()) {
-                    boolean first = true;
-                    for (int col = 1; col <= columnCount; col++) {
-                        String columnValue = rs.getString(col);
-                        if (columnValue != null) {
-                            columnValue = columnValue.trim();
-                        }
-                         
-                        if (first) {
-                            first = false;
-                        } else {
-                            line.append(",");
-                        }
-                        line.append(columnValue);
-                    }
-                    out.println(line);
-                    line.setLength(0);
-                }
-            }
-        }
-        while (statement.getMoreResults());
-        out.println();
-    }
-
-    /**
-     * Enumerated attribute with the values "continue", "stop" and "abort"
-     * for the onerror attribute.  
-     */
-    public static class OnError extends EnumeratedAttribute {
-        public String[] getValues() {
-            return new String[] {"continue", "stop", "abort"};
-        }
-    }
-
-    /**
-     * Contains the definition of a new transaction element.
-     * Transactions allow several files or blocks of statements
-     * to be executed using the same JDBC connection and commit
-     * operation in between.
-     */
-    public class Transaction {
-        private File tSrcFile = null;
-        private String tSqlCommand = "";
-
-        public void setSrc(File src) {
-            this.tSrcFile = src;
-        }
-
-        public void addText(String sql) {
-            this.tSqlCommand += sql;
-        }
-
-        private void runTransaction(PrintStream out) 
-            throws IOException, SQLException {
-            if (tSqlCommand.length() != 0) {
-                log("Executing commands", Project.MSG_INFO);
-                runStatements(new StringReader(tSqlCommand), out);
-            }
-      
-            if (tSrcFile != null) {
-                log("Executing file: " + tSrcFile.getAbsolutePath(), 
-                    Project.MSG_INFO);
-                Reader reader = 
-                    (encoding == null) ? new FileReader(tSrcFile)
-                                       : new InputStreamReader(
-                                             new FileInputStream(tSrcFile), 
-                                             encoding);
-                try {
-                    runStatements(reader, out);
-                } finally {
-                    reader.close();
-                }
-            }
-        }
-    }
-
-
-
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/SendEmail.java b/src/main/org/apache/tools/ant/taskdefs/SendEmail.java
deleted file mode 100644
index 3c8e1df..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/SendEmail.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.taskdefs.email.EmailTask;
-
-/**
- * A task to send SMTP email.
- * <p>
- * <table border="1" cellpadding="3" cellspacing="0">
- * <tr bgcolor="#CCCCFF">
- * <th>Attribute</th>
- * <th>Description</th>
- * <th>Required</th>
- * </tr>
- * <tr>
- * <td>from</td>
- * <td>Email address of sender.</td>
- * <td>Yes</td>
- * </tr>
- * <tr>
- * <td>mailhost</td>
- * <td>Host name of the mail server.</td>
- * <td>No, default to &quot;localhost&quot;</td>
- * </tr>
- * <tr>
- * <td>toList</td>
- * <td>Comma-separated list of recipients.</td>
- * <td>Yes</td>
- * </tr>
- * <tr>
- * <td>subject</td>
- * <td>Email subject line.</td>
- * <td>No</td>
- * </tr>
- * <tr>
- * <td>files</td>
- * <td>Filename(s) of text to send in the body of the email. Multiple files are
- *     comma-separated.</td>
- * <td rowspan="2">One of these two attributes</td>
- * </tr>
- * <tr>
- * <td>message</td>
- * <td>Message to send inthe body of the email.</td>
- * </tr>
- * </table>
- * <tr>
- * <td>includefilenames</td>
- * <td>Includes filenames before file contents when set to true.</td>
- * <td>No, default is <I>false</I></td>
- * </tr>
- * <p>
- *
- * @author glenn_twiggs@bmc.com
- * @author <a href="mailto:umagesh@rediffmail.com">Magesh Umasankar</a>
- *
- * @since Ant 1.2
- *
- * @ant.task name="mail" category="network"
- */
-public class SendEmail extends EmailTask {
-    /**
-     * Sets the mailport parameter of this build task.
-     * @param value mail port name.
-     *
-     * @deprecated Use {@link #setMailport(int)} instead.
-     */
-    public void setMailport(Integer value) {
-        setMailport(value.intValue());
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/Sequential.java b/src/main/org/apache/tools/ant/taskdefs/Sequential.java
deleted file mode 100644
index 30364c7..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Sequential.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.TaskContainer;
-import org.apache.tools.ant.BuildException;
-
-import java.util.Vector;
-import java.util.Enumeration;
-
-
-
-/**
- * Implements a single threaded task execution.
- * <p>
- * @author Thomas Christen <a href="mailto:chr@active.ch">chr@active.ch</a>
- * @since Ant 1.4
- * @ant.task category="control"
- */
-public class Sequential extends Task
-                        implements TaskContainer {
-
-    /** Optional Vector holding the nested tasks */
-    private Vector nestedTasks = new Vector();
-
-    /**
-     * Add a nested task to Sequential.
-     * <p>
-     * @param nestedTask  Nested task to execute Sequential
-     * <p>
-     */
-    public void addTask(Task nestedTask) {
-        nestedTasks.addElement(nestedTask);
-    }
-
-    /**
-     * Execute all nestedTasks.
-     */
-    public void execute() throws BuildException {
-        for (Enumeration e = nestedTasks.elements(); e.hasMoreElements();) {
-            Task nestedTask = (Task) e.nextElement();
-            nestedTask.perform();
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/SignJar.java b/src/main/org/apache/tools/ant/taskdefs/SignJar.java
deleted file mode 100644
index 7abe1e2..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/SignJar.java
+++ /dev/null
@@ -1,333 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.Enumeration;
-import java.util.Vector;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipFile;
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.DirectoryScanner;
-import org.apache.tools.ant.Project;
-
-import org.apache.tools.ant.types.FileSet;
-import org.apache.tools.ant.util.JavaEnvUtils;
-
-/**
- * Sign a archive.
- *
- * @author Peter Donald 
- *         <a href="mailto:donaldp@apache.org">donaldp@apache.org</a>
- * @author Nick Fortescue 
- *         <a href="mailto:nick@ox.compsoc.net">nick@ox.compsoc.net</a>
- * @since Ant 1.1
- * @ant.task category="java"
- */
-public class SignJar extends Task {
-
-    /**
-     * The name of the jar file.
-     */
-    protected File jar;
-
-    /**
-     * The alias of signer.
-     */
-    protected String alias;
-
-    /**
-     * The name of keystore file.
-     */
-    protected File keystore;
-
-    protected String storepass;
-    protected String storetype;
-    protected String keypass;
-    protected File sigfile;
-    protected File signedjar;
-    protected boolean verbose;
-    protected boolean internalsf;
-    protected boolean sectionsonly;
-
-    /**
-     * the filesets of the jars to sign
-     */
-    protected Vector filesets = new Vector();
-    /**
-     * Whether to assume a jar which has an appropriate .SF file in is already
-     * signed.
-     */
-    protected boolean lazy;
-
-    public void setJar(final File jar) {
-        this.jar = jar;
-    }
-
-    public void setAlias(final String alias) {
-        this.alias = alias;
-    }
-
-    public void setKeystore(final File keystore) {
-        this.keystore = keystore;
-    }
-
-    public void setStorepass(final String storepass) {
-        this.storepass = storepass;
-    }
-
-    public void setStoretype(final String storetype) {
-        this.storetype = storetype;
-    }
-
-    public void setKeypass(final String keypass) {
-        this.keypass = keypass;
-    }
-
-    public void setSigfile(final File sigfile) {
-        this.sigfile = sigfile;
-    }
-
-    public void setSignedjar(final File signedjar) {
-        this.signedjar = signedjar;
-    }
-
-    public void setVerbose(final boolean verbose) {
-        this.verbose = verbose;
-    }
-
-    public void setInternalsf(final boolean internalsf) {
-        this.internalsf = internalsf;
-    }
-
-    public void setSectionsonly(final boolean sectionsonly) {
-        this.sectionsonly = sectionsonly;
-    }
-
-    public void setLazy(final boolean lazy) {
-        this.lazy = lazy;
-    }
-
-    /**
-     * Adds a set of files (nested fileset attribute).
-     * @since Ant 1.4
-     */
-    public void addFileset(final FileSet set) {
-        filesets.addElement(set);
-    }
-
-
-    public void execute() throws BuildException {
-        if (null == jar && null == filesets) {
-            throw new BuildException("jar must be set through jar attribute "
-                                     + "or nested filesets");
-        }
-        if (null != jar) {
-            doOneJar(jar, signedjar);
-            return;
-        } else {
-            //Assume null != filesets
-
-            // deal with the filesets
-            for (int i = 0; i < filesets.size(); i++) {
-                FileSet fs = (FileSet) filesets.elementAt(i);
-                DirectoryScanner ds = fs.getDirectoryScanner(project);
-                String[] jarFiles = ds.getIncludedFiles();
-                for (int j = 0; j < jarFiles.length; j++) {
-                    doOneJar(new File(fs.getDir(project), jarFiles[j]), null);
-                }
-            }
-        }
-    }
-
-    private void doOneJar(File jarSource, File jarTarget) 
-        throws BuildException {
-        if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_1)) {
-            throw new BuildException("The signjar task is only available on "
-                                     + "JDK versions 1.2 or greater");
-        }
-
-        if (null == alias) {
-            throw new BuildException("alias attribute must be set");
-        }
-
-        if (null == storepass) {
-            throw new BuildException("storepass attribute must be set");
-        }
-
-        if (isUpToDate(jarSource, jarTarget)) {
-          return;
-        }
-
-        final ExecTask cmd = (ExecTask) project.createTask("exec");
-        cmd.setExecutable("jarsigner");
-
-        if (null != keystore) {
-            cmd.createArg().setValue("-keystore");
-            cmd.createArg().setValue(keystore.toString());
-        }
-
-        if (null != storepass) {
-            cmd.createArg().setValue("-storepass");
-            cmd.createArg().setValue(storepass);
-        }
-
-        if (null != storetype) {
-            cmd.createArg().setValue("-storetype");
-            cmd.createArg().setValue(storetype);
-        }
-
-        if (null != keypass) {
-            cmd.createArg().setValue("-keypass");
-            cmd.createArg().setValue(keypass);
-        }
-
-        if (null != sigfile) {
-            cmd.createArg().setValue("-sigfile");
-            cmd.createArg().setValue(sigfile.toString());
-        }
-
-        if (null != jarTarget) {
-            cmd.createArg().setValue("-signedjar");
-            cmd.createArg().setValue(jarTarget.toString());
-        }
-
-        if (verbose) {
-            cmd.createArg().setValue("-verbose");
-        }
-
-        if (internalsf) {
-            cmd.createArg().setValue("-internalsf");
-        }
-
-        if (sectionsonly) {
-            cmd.createArg().setValue("-sectionsonly");
-        }
-
-        cmd.createArg().setValue(jarSource.toString());
-
-        cmd.createArg().setValue(alias);
-
-        log("Signing Jar : " + jarSource.getAbsolutePath());
-        cmd.setFailonerror(true);
-        cmd.setTaskName(getTaskName());
-        cmd.execute();
-    }
-
-    protected boolean isUpToDate(File jarFile, File signedjarFile) {
-        if (null == jarFile) {
-            return false;
-        }
-
-        if (null != signedjarFile) {
-
-            if (!jarFile.exists()) {
-              return false;
-            }
-            if (!signedjarFile.exists()) {
-              return false;
-            }
-            if (jarFile.equals(signedjarFile)) {
-              return false;
-            }
-            if (signedjarFile.lastModified() > jarFile.lastModified()) {
-                return true;
-            }
-        } else {
-            if (lazy) {
-                return isSigned(jarFile);
-            }
-        }
-
-        return false;
-    }
-
-    protected boolean isSigned(File file) {
-        final String SIG_START = "META-INF/";
-        final String SIG_END = ".SF";
-
-        if (!file.exists()) {
-            return false;
-        }
-        ZipFile jarFile = null;
-        try {
-            jarFile = new ZipFile(file);
-            if (null == alias) {
-                Enumeration entries = jarFile.entries();
-                while (entries.hasMoreElements()) {
-                    String name = ((ZipEntry) entries.nextElement()).getName();
-                    if (name.startsWith(SIG_START) && name.endsWith(SIG_END)) {
-                        return true;
-                    }
-                }
-                return false;
-            } else {
-                return jarFile.getEntry(SIG_START + alias.toUpperCase() +
-                                        SIG_END) != null;
-            }
-        } catch (IOException e) {
-            return false;
-        } finally {
-            if (jarFile != null) {
-                try {
-                    jarFile.close();
-                } catch (IOException e) {
-                }
-            }
-        }
-    }
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/Sleep.java b/src/main/org/apache/tools/ant/taskdefs/Sleep.java
deleted file mode 100644
index b4cdfcd..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Sleep.java
+++ /dev/null
@@ -1,214 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.BuildException;
-
-/**
- * A task to sleep for a period of time
- *
- * @author steve_l@iseran.com steve loughran
- * @since Ant 1.4
- * @ant.task category="utility"
- */
-
-public class Sleep extends Task {
-    /**
-     * failure flag
-     */
-    private boolean failOnError = true;
-
-    /**
-     * Description of the Field
-     */
-    private int seconds = 0;
-    /**
-     * Description of the Field
-     */
-    private int hours = 0;
-    /**
-     * Description of the Field
-     */
-    private int minutes = 0;
-    /**
-     * Description of the Field
-     */
-    private int milliseconds = 0;
-
-
-
-    /**
-     * Creates new instance
-     */
-    public Sleep() {
-    }
-
-
-    /**
-     * Sets the Seconds attribute of the Sleep object
-     *
-     * @param seconds The new Seconds value
-     */
-    public void setSeconds(int seconds) {
-        this.seconds = seconds;
-    }
-
-
-    /**
-     * Sets the Hours attribute of the Sleep object
-     *
-     * @param hours The new Hours value
-     */
-    public void setHours(int hours) {
-        this.hours = hours;
-    }
-
-
-    /**
-     * Sets the Minutes attribute of the Sleep object
-     *
-     * @param minutes The new Minutes value
-     */
-    public void setMinutes(int minutes) {
-        this.minutes = minutes;
-    }
-
-
-    /**
-     * Sets the Milliseconds attribute of the Sleep object
-     *
-     * @param milliseconds The new Milliseconds value
-     */
-    public void setMilliseconds(int milliseconds) {
-        this.milliseconds = milliseconds;
-    }
-
-
-    /**
-     * sleep for a period of time
-     *
-     * @param millis time to sleep
-     */
-    public void doSleep(long millis) {
-        try {
-            Thread.sleep(millis);
-        } catch (InterruptedException ie) {
-        }
-    }
-
-
-    /**
-     * Sets the FailOnError attribute of the MimeMail object
-     *
-     * @param failOnError The new FailOnError value
-     */
-    public void setFailOnError(boolean failOnError) {
-        this.failOnError = failOnError;
-    }
-
-
-    /**
-     * return time to sleep
-     *
-     * @return sleep time. if below 0 then there is an error
-     */
-
-    private long getSleepTime() {
-        return ((((long) hours * 60) + minutes) * 60 + seconds) * 1000 
-            + milliseconds;
-    }
-
-
-    /**
-     * verify parameters
-     *
-     * @throws BuildException if something is invalid
-     */
-    public void validate() 
-        throws BuildException {
-        if (getSleepTime() < 0) {
-            throw new BuildException("Negative sleep periods are not "
-                                     + "supported");
-        }
-    }
-
-
-    /**
-     * Executes this build task. Throws org.apache.tools.ant.BuildException
-     * if there is an error during task execution.
-     *
-     * @exception BuildException Description of Exception
-     */
-    public void execute()
-        throws BuildException {
-        try {
-            validate();
-            long sleepTime = getSleepTime();
-            log("sleeping for " + sleepTime + " milliseconds",
-                Project.MSG_VERBOSE);
-            doSleep(sleepTime);
-        } catch (Exception e) {
-            if (failOnError) {
-                throw new BuildException(e);
-            } else {
-                String text = e.toString();
-                log(text, Project.MSG_ERR);
-            }
-        }
-    }
-
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/StreamPumper.java b/src/main/org/apache/tools/ant/taskdefs/StreamPumper.java
deleted file mode 100644
index 618e0eb..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/StreamPumper.java
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000,2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-
-/**
- * Copies all data from an input stream to an output stream.
- *
- * @author thomas.haas@softwired-inc.com
- * @since Ant 1.2
- */
-public class StreamPumper implements Runnable {
-
-    // TODO: make SIZE and SLEEP instance variables.
-    // TODO: add a status flag to note if an error occured in run.
-
-    private static final int SLEEP = 5;
-    private static final int SIZE = 128;
-    private InputStream is;
-    private OutputStream os;
-    private boolean finished;
-
-    /**
-     * Create a new stream pumper.
-     *
-     * @param is input stream to read data from
-     * @param os output stream to write data to.
-     */
-    public StreamPumper(InputStream is, OutputStream os) {
-        this.is = is;
-        this.os = os;
-    }
-
-
-    /**
-     * Copies data from the input stream to the output stream.
-     *
-     * Terminates as soon as the input stream is closed or an error occurs.
-     */
-    public void run() {
-        synchronized (this) {
-            // Just in case this object is reused in the future
-            finished = false;
-        }
-
-        final byte[] buf = new byte[SIZE];
-
-        int length;
-        try {
-            while ((length = is.read(buf)) > 0) {
-                os.write(buf, 0, length);
-                try {
-                    Thread.sleep(SLEEP);
-                } catch (InterruptedException e) {}
-            }
-        } catch (IOException e) {
-        } finally {
-            synchronized (this) {
-                finished = true;
-                notify();
-            }
-        }
-    }
-
-    /**
-     * Tells whether the end of the stream has been reached.
-     * @return true is the stream has been exhausted.
-     **/
-    public synchronized boolean isFinished() {
-        return finished;
-    }
-
-    /**
-     * This method blocks until the stream pumper finishes.
-     * @see #isFinished()
-     **/
-    public synchronized void waitFor()
-        throws InterruptedException {
-        while (!isFinished()) {
-            wait();
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/Tar.java b/src/main/org/apache/tools/ant/taskdefs/Tar.java
deleted file mode 100644
index 3f01ae1..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Tar.java
+++ /dev/null
@@ -1,615 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.FileOutputStream;
-import java.io.OutputStream;
-import java.io.FileInputStream;
-import java.io.BufferedOutputStream;
-import java.util.Vector;
-import java.util.Enumeration;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.DirectoryScanner;
-import org.apache.tools.ant.types.FileSet;
-import org.apache.tools.ant.types.EnumeratedAttribute;
-import org.apache.tools.ant.util.SourceFileScanner;
-import org.apache.tools.ant.util.MergingMapper;
-import org.apache.tools.tar.TarOutputStream;
-import org.apache.tools.tar.TarConstants;
-import org.apache.tools.tar.TarEntry;
-import java.util.zip.GZIPOutputStream;
-import org.apache.tools.bzip2.CBZip2OutputStream;
-
-
-
-/**
- * Creates a TAR archive.
- *
- * @author Stefano Mazzocchi
- *         <a href="mailto:stefano@apache.org">stefano@apache.org</a>
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- * @author <a href="mailto:umagesh@apache.org">Magesh Umasankar</a>
- *
- * @since Ant 1.1
- *
- * @ant.task category="packaging"
- */
-
-public class Tar extends MatchingTask {
-
-    /**
-     * @deprecated Tar.WARN is deprecated and is replaced with
-     *             Tar.TarLongFileMode.WARN
-     */
-    public static final String WARN = "warn";
-    /**
-     * @deprecated Tar.FAIL is deprecated and is replaced with
-     *             Tar.TarLongFileMode.FAIL
-     */
-    public static final String FAIL = "fail";
-    /**
-     * @deprecated Tar.TRUNCATE is deprecated and is replaced with
-     *             Tar.TarLongFileMode.TRUNCATE
-     */
-    public static final String TRUNCATE = "truncate";
-    /**
-     * @deprecated Tar.GNU is deprecated and is replaced with
-     *             Tar.TarLongFileMode.GNU
-     */
-    public static final String GNU = "gnu";
-    /**
-     * @deprecated Tar.OMIT is deprecated and is replaced with
-     *             Tar.TarLongFileMode.OMIT
-     */
-    public static final String OMIT = "omit";
-
-    File tarFile;
-    File baseDir;
-
-    private TarLongFileMode longFileMode = new TarLongFileMode();
-
-    Vector filesets = new Vector();
-    Vector fileSetFiles = new Vector();
-
-    /**
-     * Indicates whether the user has been warned about long files already.
-     */
-    private boolean longWarningGiven = false;
-
-    private TarCompressionMethod compression = new TarCompressionMethod();
-
-    public TarFileSet createTarFileSet() {
-        TarFileSet fileset = new TarFileSet();
-        filesets.addElement(fileset);
-        return fileset;
-    }
-
-
-    /**
-     * This is the name/location of where to create the tar file.
-     * @deprecated for consistency with other tasks, please use setDestFile()
-     */
-    public void setTarfile(File tarFile) {
-        this.tarFile = tarFile;
-    }
-
-    /**
-     * Sets the destfile attribute.
-     * @since Ant 1.5
-     * @param destFile The output of the tar
-     */
-    public void setDestFile(File destFile) {
-        this.tarFile = destFile;
-    }
-
-    /**
-     * This is the base directory to look in for things to tar.
-     */
-    public void setBasedir(File baseDir) {
-        this.baseDir = baseDir;
-    }
-
-    /**
-     * Set how to handle long files.
-     *
-     * Allowable values are
-     *   truncate - paths are truncated to the maximum length
-     *   fail - paths greater than the maximim cause a build exception
-     *   warn - paths greater than the maximum cause a warning and GNU is used
-     *   gnu - GNU extensions are used for any paths greater than the maximum.
-     *   omit - paths greater than the maximum are omitted from the archive
-     * @deprecated setLongFile(String) is deprecated and is replaced with
-     *             setLongFile(Tar.TarLongFileMode) to make Ant's Introspection
-     *             mechanism do the work and also to encapsulate operations on
-     *             the mode in its own class.
-     */
-    public void setLongfile(String mode) {
-        log("DEPRECATED - The setLongfile(String) method has been deprecated."
-            + " Use setLongfile(Tar.TarLongFileMode) instead.");
-        this.longFileMode = new TarLongFileMode();
-        longFileMode.setValue(mode);
-    }
-
-    /**
-     * Set how to handle long files.
-     *
-     * Allowable values are
-     *   truncate - paths are truncated to the maximum length
-     *   fail - paths greater than the maximim cause a build exception
-     *   warn - paths greater than the maximum cause a warning and GNU is used
-     *   gnu - GNU extensions are used for any paths greater than the maximum.
-     *   omit - paths greater than the maximum are omitted from the archive
-     */
-    public void setLongfile(TarLongFileMode mode) {
-        this.longFileMode = mode;
-    }
-
-    /**
-     * Set compression method.
-     *
-     * Allowable values are
-     *   none - no compression
-     *   gzip - Gzip compression
-     *   bzip2 - Bzip2 compression
-     */
-    public void setCompression(TarCompressionMethod mode) {
-        this.compression = mode;
-    }
-
-    public void execute() throws BuildException {
-        if (tarFile == null) {
-            throw new BuildException("tarfile attribute must be set!",
-                                     location);
-        }
-
-        if (tarFile.exists() && tarFile.isDirectory()) {
-            throw new BuildException("tarfile is a directory!",
-                                     location);
-        }
-
-        if (tarFile.exists() && !tarFile.canWrite()) {
-            throw new BuildException("Can not write to the specified tarfile!",
-                                     location);
-        }
-
-        Vector savedFileSets = (Vector) filesets.clone();
-        try {
-            if (baseDir != null) {
-                if (!baseDir.exists()) {
-                    throw new BuildException("basedir does not exist!",
-                                             location);
-                }
-
-                // add the main fileset to the list of filesets to process.
-                TarFileSet mainFileSet = new TarFileSet(fileset);
-                mainFileSet.setDir(baseDir);
-                filesets.addElement(mainFileSet);
-            }
-
-            if (filesets.size() == 0) {
-                throw new BuildException("You must supply either a basedir "
-                                         + "attribute or some nested filesets.",
-                                         location);
-            }
-
-            // check if tar is out of date with respect to each
-            // fileset
-            boolean upToDate = true;
-            for (Enumeration e = filesets.elements(); e.hasMoreElements();) {
-                TarFileSet fs = (TarFileSet) e.nextElement();
-                String[] files = fs.getFiles(project);
-
-                if (!archiveIsUpToDate(files)) {
-                    upToDate = false;
-                }
-
-                for (int i = 0; i < files.length; ++i) {
-                    if (tarFile.equals(new File(fs.getDir(project),
-                                                files[i]))) {
-                        throw new BuildException("A tar file cannot include "
-                                                 + "itself", location);
-                    }
-                }
-            }
-
-            if (upToDate) {
-                log("Nothing to do: " + tarFile.getAbsolutePath()
-                    + " is up to date.", Project.MSG_INFO);
-                return;
-            }
-
-            log("Building tar: " + tarFile.getAbsolutePath(), Project.MSG_INFO);
-
-            TarOutputStream tOut = null;
-            try {
-                tOut = new TarOutputStream(
-                    compression.compress(
-                        new BufferedOutputStream(
-                            new FileOutputStream(tarFile))));
-                tOut.setDebug(true);
-                if (longFileMode.isTruncateMode()) {
-                    tOut.setLongFileMode(TarOutputStream.LONGFILE_TRUNCATE);
-                } else if (longFileMode.isFailMode() ||
-                         longFileMode.isOmitMode()) {
-                    tOut.setLongFileMode(TarOutputStream.LONGFILE_ERROR);
-                } else {
-                    // warn or GNU
-                    tOut.setLongFileMode(TarOutputStream.LONGFILE_GNU);
-                }
-
-                longWarningGiven = false;
-                for (Enumeration e = filesets.elements();
-                     e.hasMoreElements();) {
-                    TarFileSet fs = (TarFileSet) e.nextElement();
-                    String[] files = fs.getFiles(project);
-                    if (files.length > 1 && fs.getFullpath().length() > 0) {
-                        throw new BuildException("fullpath attribute may only "
-                                                 + "be specified for "
-                                                 + "filesets that specify a "
-                                                 + "single file.");
-                    }
-                    for (int i = 0; i < files.length; i++) {
-                        File f = new File(fs.getDir(project), files[i]);
-                        String name = files[i].replace(File.separatorChar, '/');
-                        tarFile(f, tOut, name, fs);
-                    }
-                }
-            } catch (IOException ioe) {
-                String msg = "Problem creating TAR: " + ioe.getMessage();
-                throw new BuildException(msg, ioe, location);
-            } finally {
-                if (tOut != null) {
-                    try {
-                        // close up
-                        tOut.close();
-                    } catch (IOException e) {}
-                }
-            }
-        } finally {
-            filesets = savedFileSets;
-        }
-    }
-
-    protected void tarFile(File file, TarOutputStream tOut, String vPath,
-                           TarFileSet tarFileSet)
-        throws IOException {
-        FileInputStream fIn = null;
-
-        String fullpath = tarFileSet.getFullpath();
-        if (fullpath.length() > 0) {
-            vPath = fullpath;
-        } else {
-            // don't add "" to the archive
-            if (vPath.length() <= 0) {
-                return;
-            }
-
-            if (file.isDirectory() && !vPath.endsWith("/")) {
-                vPath += "/";
-            }
-
-            String prefix = tarFileSet.getPrefix();
-            // '/' is appended for compatibility with the zip task.
-            if (prefix.length() > 0 && !prefix.endsWith("/")) {
-                prefix = prefix + "/";
-            }
-            vPath = prefix + vPath;
-        }
-
-        if (vPath.startsWith("/") && !tarFileSet.getPreserveLeadingSlashes()) {
-            int l = vPath.length();
-            if (l <= 1) {
-                // we would end up adding "" to the archive
-                return;
-            }
-            vPath = vPath.substring(1, l);
-        }
-
-        try {
-            if (vPath.length() >= TarConstants.NAMELEN) {
-                if (longFileMode.isOmitMode()) {
-                    log("Omitting: " + vPath, Project.MSG_INFO);
-                    return;
-                } else if (longFileMode.isWarnMode()) {
-                    log("Entry: " + vPath + " longer than " +
-                        TarConstants.NAMELEN + " characters.",
-                        Project.MSG_WARN);
-                    if (!longWarningGiven) {
-                        log("Resulting tar file can only be processed "
-                            + "successfully by GNU compatible tar commands",
-                            Project.MSG_WARN);
-                        longWarningGiven = true;
-                    }
-                } else if (longFileMode.isFailMode()) {
-                    throw new BuildException(
-                        "Entry: " + vPath + " longer than " +
-                        TarConstants.NAMELEN + "characters.", location);
-                }
-            }
-
-            TarEntry te = new TarEntry(vPath);
-            te.setModTime(file.lastModified());
-            if (!file.isDirectory()) {
-                te.setSize(file.length());
-                te.setMode(tarFileSet.getMode());
-            }
-            te.setUserName(tarFileSet.getUserName());
-            te.setGroupName(tarFileSet.getGroup());
-
-            tOut.putNextEntry(te);
-
-            if (!file.isDirectory()) {
-                fIn = new FileInputStream(file);
-
-                byte[] buffer = new byte[8 * 1024];
-                int count = 0;
-                do {
-                    tOut.write(buffer, 0, count);
-                    count = fIn.read(buffer, 0, buffer.length);
-                } while (count != -1);
-            }
-
-            tOut.closeEntry();
-        } finally {
-            if (fIn != null) {
-                fIn.close();
-            }
-        }
-    }
-
-    protected boolean archiveIsUpToDate(String[] files) {
-        SourceFileScanner sfs = new SourceFileScanner(this);
-        MergingMapper mm = new MergingMapper();
-        mm.setTo(tarFile.getAbsolutePath());
-        return sfs.restrict(files, baseDir, null, mm).length == 0;
-    }
-
-    public static class TarFileSet extends FileSet {
-        private String[] files = null;
-
-        private int mode = 0100644;
-
-        private String userName = "";
-        private String groupName = "";
-        private String prefix = "";
-        private String fullpath = "";
-        private boolean preserveLeadingSlashes = false;
-
-        public TarFileSet(FileSet fileset) {
-            super(fileset);
-        }
-
-        public TarFileSet() {
-            super();
-        }
-
-        /**
-         *  Get a list of files and directories specified in the fileset.
-         *  @return a list of file and directory names, relative to
-         *    the baseDir for the project.
-         */
-        public String[] getFiles(Project p) {
-            if (files == null) {
-                DirectoryScanner ds = getDirectoryScanner(p);
-                String[] directories = ds.getIncludedDirectories();
-                String[] filesPerSe = ds.getIncludedFiles();
-                files = new String [directories.length + filesPerSe.length];
-                System.arraycopy(directories, 0, files, 0, directories.length);
-                System.arraycopy(filesPerSe, 0, files, directories.length,
-                        filesPerSe.length);
-            }
-
-            return files;
-        }
-
-        public void setMode(String octalString) {
-            this.mode = 0100000 | Integer.parseInt(octalString, 8);
-        }
-
-        public int getMode() {
-            return mode;
-        }
-
-        public void setUserName(String userName) {
-            this.userName = userName;
-        }
-
-        public String getUserName() {
-            return userName;
-        }
-
-        public void setGroup(String groupName) {
-            this.groupName = groupName;
-        }
-
-        public String getGroup() {
-            return groupName;
-        }
-
-        public void setPrefix(String prefix) {
-            this.prefix = prefix;
-        }
-
-        public String getPrefix() {
-            return prefix;
-        }
-
-        public void setFullpath(String fullpath) {
-            this.fullpath = fullpath;
-        }
-
-        public String getFullpath() {
-            return fullpath;
-        }
-
-        public void setPreserveLeadingSlashes(boolean b) {
-            this.preserveLeadingSlashes = b;
-        }
-
-        public boolean getPreserveLeadingSlashes() {
-            return preserveLeadingSlashes;
-        }
-    }
-
-    /**
-     * Valid Modes for LongFile attribute to Tar Task
-     *
-     * @author <a href="mailto:umagesh@apache.org">Magesh Umasankar</a>
-     */
-    public static class TarLongFileMode extends EnumeratedAttribute {
-
-        // permissable values for longfile attribute
-        public static final String WARN = "warn";
-        public static final String FAIL = "fail";
-        public static final String TRUNCATE = "truncate";
-        public static final String GNU = "gnu";
-        public static final String OMIT = "omit";
-
-        private final String[] validModes = {WARN, FAIL, TRUNCATE, GNU, OMIT};
-
-        public TarLongFileMode() {
-            super();
-            setValue(WARN);
-        }
-
-        public String[] getValues() {
-            return validModes;
-        }
-
-        public boolean isTruncateMode() {
-            return TRUNCATE.equalsIgnoreCase(getValue());
-        }
-
-        public boolean isWarnMode() {
-            return WARN.equalsIgnoreCase(getValue());
-        }
-
-        public boolean isGnuMode() {
-            return GNU.equalsIgnoreCase(getValue());
-        }
-
-        public boolean isFailMode() {
-            return FAIL.equalsIgnoreCase(getValue());
-        }
-
-        public boolean isOmitMode() {
-            return OMIT.equalsIgnoreCase(getValue());
-        }
-    }
-
-    /**
-     * Valid Modes for Compression attribute to Tar Task
-     *
-     */
-    public static final class TarCompressionMethod extends EnumeratedAttribute {
-
-        // permissable values for compression attribute
-        /**
-         *    No compression
-         */
-        private static final String NONE = "none";
-        /**
-         *    GZIP compression
-         */
-        private static final String GZIP = "gzip";
-        /**
-         *    BZIP2 compression
-         */
-        private static final String BZIP2 = "bzip2";
-
-
-        /**
-         * Default constructor
-         */
-        public TarCompressionMethod() {
-            super();
-            setValue(NONE);
-        }
-
-        /**
-         *  Get valid enumeration values.
-         *  @return valid enumeration values
-         */
-        public String[] getValues() {
-            return new String[] { NONE, GZIP, BZIP2 };
-        }
-
-        /**
-         *  This method wraps the output stream with the
-         *     corresponding compression method
-         *
-         *  @param ostream output stream
-         *  @return output stream with on-the-fly compression
-         *  @exception IOException thrown if file is not writable
-         */
-        private OutputStream compress(final OutputStream ostream)
-            throws IOException {
-            final String value = getValue();
-            if (GZIP.equals(value)) {
-                return new GZIPOutputStream(ostream);
-            } else {
-                if (BZIP2.equals(value)) {
-                    ostream.write('B');
-                    ostream.write('Z');
-                    return new CBZip2OutputStream(ostream);
-                }
-            }
-            return ostream;
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/TaskOutputStream.java b/src/main/org/apache/tools/ant/taskdefs/TaskOutputStream.java
deleted file mode 100644
index 742989c..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/TaskOutputStream.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000,2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.Task;
-import java.io.OutputStream;
-import java.io.IOException;
-
-/**
- * Redirects text written to a stream thru the standard
- * ant logging mechanism. This class is useful for integrating
- * with tools that write to System.out and System.err. For example,
- * the following will cause all text written to System.out to be
- * logged with "info" priority:
- * <pre>System.setOut(new PrintStream(new TaskOutputStream(project, Project.MSG_INFO)));</pre>
- *
- * <p><strong>As of Ant 1.2, this class is considered to be dead code
- * by the Ant developers and is unmaintained.  Don't use
- * it.</strong></p>
- *
- * @author James Duncan Davidson (duncan@x180.com)
- * @deprecated use LogOutputStream instead.
- */
-
-public class TaskOutputStream extends OutputStream {
-
-    private Task task;
-    private StringBuffer line;
-    private int msgOutputLevel;
-
-    /**
-     * Constructs a new JavacOutputStream with the given project
-     * as the output source for messages.
-     */
-
-    TaskOutputStream(Task task, int msgOutputLevel) {
-        System.err.println("As of Ant 1.2 released in October 2000, the TaskOutputStream class");
-        System.err.println("is considered to be dead code by the Ant developers and is unmaintained.");
-        System.err.println("Don\'t use it!");
-
-        this.task = task;
-        this.msgOutputLevel = msgOutputLevel;
-
-        line = new StringBuffer();
-    }
-
-    /**
-     * Write a character to the output stream. This method looks
-     * to make sure that there isn't an error being reported and
-     * will flush each line of input out to the project's log stream.
-     */
-
-    public void write(int c) throws IOException {
-        char cc = (char) c;
-        if (cc == '\r' || cc == '\n') {
-            // line feed
-            if (line.length() > 0) {
-                processLine();
-            }
-        } else {
-            line.append(cc);
-        }
-    }
-
-    /**
-     * Processes a line of input and determines if an error occured.
-     */
-
-    private void processLine() {
-        String s = line.toString();
-        task.log(s, msgOutputLevel);
-        line = new StringBuffer();
-    }
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/Taskdef.java b/src/main/org/apache/tools/ant/taskdefs/Taskdef.java
deleted file mode 100644
index 7c65d03..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Taskdef.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights 
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.BuildException;
-
-/**
- * Define a new task.
- *
- * @author <a href="stefan.bodewig@epost.de">Stefan Bodewig</a>
- * @since Ant 1.1
- * @ant.task category="internal"
- */
-public class Taskdef extends Definer {
-    protected void addDefinition(String name, Class c) throws BuildException {
-        project.addTaskDefinition(name, c);
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/TempFile.java b/src/main/org/apache/tools/ant/taskdefs/TempFile.java
deleted file mode 100644
index e6e1c54..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/TempFile.java
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- *  The Apache Software License, Version 1.1
- *
- *  Copyright (c) 2002 The Apache Software Foundation.  All rights
- *  reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions
- *  are met:
- *
- *  1. Redistributions of source code must retain the above copyright
- *  notice, this list of conditions and the following disclaimer.
- *
- *  2. Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in
- *  the documentation and/or other materials provided with the
- *  distribution.
- *
- *  3. The end-user documentation included with the redistribution, if
- *  any, must include the following acknowlegement:
- *  "This product includes software developed by the
- *  Apache Software Foundation (http://www.apache.org/)."
- *  Alternately, this acknowlegement may appear in the software itself,
- *  if and wherever such third-party acknowlegements normally appear.
- *
- *  4. The names "The Jakarta Project", "Ant", and "Apache Software
- *  Foundation" must not be used to endorse or promote products derived
- *  from this software without prior written permission. For written
- *  permission, please contact apache@apache.org.
- *
- *  5. Products derived from this software may not be called "Apache"
- *  nor may "Apache" appear in their names without prior written
- *  permission of the Apache Group.
- *
- *  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- *  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- *  OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- *  DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- *  ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- *  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- *  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- *  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- *  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- *  SUCH DAMAGE.
- *  ====================================================================
- *
- *  This software consists of voluntary contributions made by many
- *  individuals on behalf of the Apache Software Foundation.  For more
- *  information on the Apache Software Foundation, please see
- *  <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.util.Properties;
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.util.FileUtils;
-
-/**
- *  This task fills a proprerty with a temporary file
- *
- *@author      steve loughran
- *@since       Ant 1.5
- *@ant.task
- */
-
-public class TempFile extends Task {
-
-    /**
-     *  name of property to set
-     */
-    private String property;
-
-    /**
-     *  directory to create the file in. can be null
-     */
-    private File destDir = null;
-
-    /**
-     *  prefix for the file
-     */
-    private String prefix;
-
-    /**
-     *  suffix for the file
-     */
-    private String suffix = "";
-
-
-    /**
-     *  Sets the property attribute of the TempFile object
-     *
-     *@param  property  The property to set
-     */
-    public void setProperty(String property) {
-        this.property = property;
-    }
-
-
-    /**
-     *  destination directory. If null, 
-     the parent directory is used instead
-     *
-     *@param  destDir  The new destDir value
-     */
-    public void setDestDir(File destDir) {
-        this.destDir = destDir;
-    }
-
-
-    /**
-     *  optional prefix string
-     *
-     *@param  prefix  string to prepend to generated string
-     */
-    public void setPrefix(String prefix) {
-        this.prefix = prefix;
-    }
-
-
-    /**
-     *  Suffix string for the temp file (optional)
-     *
-     *@param  suffix  suffix including any "." , e.g ".xml"
-     */
-    public void setSuffix(String suffix) {
-        this.suffix = suffix;
-    }
-
-
-    /**
-     *  create the temp file
-     *
-     *@exception  BuildException  if something goes wrong with the build
-     */
-    public void execute() throws BuildException {
-        if (property == null || property.length() == 0) {
-            throw new BuildException("no property specified");
-        }
-        if (destDir == null) {
-            destDir = project.resolveFile(".");
-        }
-        FileUtils utils = FileUtils.newFileUtils();
-        File tfile = utils.createTempFile(prefix, suffix, destDir);
-        project.setNewProperty(property, tfile.toString());
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/Touch.java b/src/main/org/apache/tools/ant/taskdefs/Touch.java
deleted file mode 100644
index cbb8b8f..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Touch.java
+++ /dev/null
@@ -1,242 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.DirectoryScanner;
-import org.apache.tools.ant.types.FileSet;
-import org.apache.tools.ant.util.FileUtils;
-import org.apache.tools.ant.util.JavaEnvUtils;
-
-import java.io.File;
-import java.io.IOException;
-import java.text.DateFormat;
-import java.text.ParseException;
-import java.util.Locale;
-import java.util.Vector;
-
-/**
- * Touch a file and/or fileset(s) -- corresponds to the Unix touch command.
- *
- * <p>If the file to touch doesn't exist, an empty one is
- * created. </p>
- *
- * <p>Note: Setting the modification time of files is not supported in
- * JDK 1.1.</p>
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> 
- * @author <a href="mailto:mj@servidium.com">Michael J. Sikorsky</a>
- * @author <a href="mailto:shaw@servidium.com">Robert Shaw</a>
- *
- * @since Ant 1.1
- *
- * @ant.task category="filesystem"
- */
-public class Touch extends Task {
-
-    private File file;              // required
-    private long millis = -1;
-    private String dateTime;
-    private Vector filesets = new Vector();
-    private FileUtils fileUtils;
-
-    public Touch() {
-        fileUtils = FileUtils.newFileUtils();
-    }
-
-    /**
-     * Sets a single source file to touch.  If the file does not exist
-     * an empty file will be created.
-     */
-    public void setFile(File file) {
-        this.file = file;
-    }
-
-    /**
-     * Milliseconds since 01/01/1970 00:00 am.
-     */
-    public void setMillis(long millis) {
-        this.millis = millis;
-    }
-
-    /**
-     * Date in the format MM/DD/YYYY HH:MM AM_PM.
-     */
-    public void setDatetime(String dateTime) {
-        this.dateTime = dateTime;
-    }
-
-    /**
-     * Adds a set of files (nested fileset attribute).
-     */
-    public void addFileset(FileSet set) {
-        filesets.addElement(set);
-    }
-
-    /**
-     * Execute the touch operation.
-     */
-    public void execute() throws BuildException {
-        long savedMillis = millis;
-
-        if (file == null && filesets.size() == 0) {
-            throw 
-                new BuildException("Specify at least one source - a file or "
-                                   + "a fileset.");
-        }
-
-        if (file != null && file.exists() && file.isDirectory()) {
-            throw new BuildException("Use a fileset to touch directories.");
-        }
-
-        try {
-            if (dateTime != null) {
-                DateFormat df = 
-                    DateFormat.getDateTimeInstance(DateFormat.SHORT,
-                                                   DateFormat.SHORT,
-                                                   Locale.US);
-                try {
-                    setMillis(df.parse(dateTime).getTime());
-                    if (millis < 0) {
-                        throw new BuildException("Date of " + dateTime
-                                                 + " results in negative "
-                                                 + "milliseconds value "
-                                                 + "relative to epoch "
-                                                 + "(January 1, 1970, "
-                                                 + "00:00:00 GMT).");
-                    }
-                } catch (ParseException pe) {
-                    throw new BuildException(pe.getMessage(), pe, location);
-                }
-            }
-
-            touch();
-        } finally {
-            millis = savedMillis;
-        }
-    }
-
-    /**
-     * Does the actual work. Entry point for Untar and Expand as well.
-     */
-    protected void touch() throws BuildException {
-        if (file != null) {
-            if (!file.exists()) {
-                log("Creating " + file, Project.MSG_INFO);
-                try {
-                    fileUtils.createNewFile(file);
-                } catch (IOException ioe) {
-                    throw new BuildException("Could not create " + file, ioe, 
-                                             location);
-                }
-            }
-        }
-
-        if (millis >= 0 && 
-            JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_1)) {
-            log("modification time of files cannot be set in JDK 1.1",
-                Project.MSG_WARN);
-            return;
-        } 
-
-        boolean resetMillis = false;
-        if (millis < 0) {
-            resetMillis = true;
-            millis = System.currentTimeMillis();
-        }
-
-        if (file != null) {
-            touch(file);
-        }
-
-        // deal with the filesets
-        for (int i = 0; i < filesets.size(); i++) {
-            FileSet fs = (FileSet) filesets.elementAt(i);
-            DirectoryScanner ds = fs.getDirectoryScanner(project);
-            File fromDir = fs.getDir(project);
-
-            String[] srcFiles = ds.getIncludedFiles();
-            String[] srcDirs = ds.getIncludedDirectories();
-
-            for (int j = 0; j < srcFiles.length ; j++) {
-                touch(new File(fromDir, srcFiles[j]));
-            }
-         
-            for (int j = 0; j < srcDirs.length ; j++) {
-                touch(new File(fromDir, srcDirs[j]));
-            }
-        }
-
-        if (resetMillis) {
-            millis = -1;
-        }
-    }
-
-    protected void touch(File file) throws BuildException {
-        if (!file.canWrite()) {
-            throw new BuildException("Can not change modification date of "
-                                     + "read-only file " + file);
-        }
-
-        if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_1)) {
-            return;
-        }
-
-        fileUtils.setFileLastModified(file, millis);
-    }
-
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/Transform.java b/src/main/org/apache/tools/ant/taskdefs/Transform.java
deleted file mode 100644
index 32a153a..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Transform.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights 
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-/**
- * Has been merged into ExecuteOn, empty class for backwards compatibility.
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> 
- */
-public class Transform extends ExecuteOn {}
diff --git a/src/main/org/apache/tools/ant/taskdefs/Tstamp.java b/src/main/org/apache/tools/ant/taskdefs/Tstamp.java
deleted file mode 100644
index d9fe5e0..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Tstamp.java
+++ /dev/null
@@ -1,284 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.Location;
-import org.apache.tools.ant.types.EnumeratedAttribute;
-
-import java.util.Calendar;
-import java.util.Date;
-import java.util.Enumeration;
-import java.util.Hashtable;
-import java.util.Locale;
-import java.util.NoSuchElementException;
-import java.util.StringTokenizer;
-import java.util.TimeZone;
-import java.util.Vector;
-import java.text.SimpleDateFormat;
-
-/**
- * Sets TSTAMP, DSTAMP and TODAY
- *
- * @author costin@dnt.ro
- * @author stefano@apache.org
- * @author roxspring@yahoo.com
- * @author Conor MacNeill
- * @author <a href="mailto:umagesh@apache.org">Magesh Umasankar</a>
- * @since Ant 1.1
- * @ant.task category="utility"
- */
-public class Tstamp extends Task {
-
-    private Vector customFormats = new Vector();
-    private String prefix = "";
-
-    /**
-     * @since Ant 1.5
-     */
-    public void setPrefix(String prefix) {
-        this.prefix = prefix;
-        if (!this.prefix.endsWith(".")) {
-            this.prefix += ".";
-        }
-    }
-
-    public void execute() throws BuildException {
-        try {
-            Date d = new Date();
-
-            SimpleDateFormat dstamp = new SimpleDateFormat ("yyyyMMdd");
-            project.setNewProperty(prefix + "DSTAMP", dstamp.format(d));
-
-            SimpleDateFormat tstamp = new SimpleDateFormat ("HHmm");
-            project.setNewProperty(prefix + "TSTAMP", tstamp.format(d));
-
-            SimpleDateFormat today 
-                = new SimpleDateFormat ("MMMM d yyyy", Locale.US);
-            project.setNewProperty(prefix + "TODAY", today.format(d));
-
-            Enumeration i = customFormats.elements();
-            while (i.hasMoreElements()) {
-                CustomFormat cts = (CustomFormat) i.nextElement();
-                cts.execute(project, d, location);
-            }
-
-        } catch (Exception e) {
-            throw new BuildException(e);
-        }
-    }
-
-    public CustomFormat createFormat() {
-        CustomFormat cts = new CustomFormat(prefix);
-        customFormats.addElement(cts);
-        return cts;
-    }
-
-    public class CustomFormat {
-        private TimeZone timeZone;
-        private String propertyName;
-        private String pattern;
-        private String language;
-        private String country;
-        private String variant;
-        private int offset = 0;
-        private int field = Calendar.DATE;
-        private String prefix = "";
-
-        public CustomFormat(String prefix) {
-            this.prefix = prefix;
-        }
-
-        public void setProperty(String propertyName) {
-            this.propertyName = prefix + propertyName;
-        }
-
-        public void setPattern(String pattern) {
-            this.pattern = pattern;
-        }
-
-        public void setLocale(String locale) {
-            StringTokenizer st = new StringTokenizer(locale, " \t\n\r\f,");
-            try {
-                language = st.nextToken();
-                if (st.hasMoreElements()) {
-                    country = st.nextToken();
-                    if (st.hasMoreElements()) {
-                        variant = st.nextToken();
-                        if (st.hasMoreElements()) {
-                            throw new BuildException("bad locale format", 
-                                                      getLocation());
-                        }
-                    }
-                } else {
-                    country = "";
-                }
-            } catch (NoSuchElementException e) {
-                throw new BuildException("bad locale format", e, 
-                                         getLocation());
-            }
-        }
-
-        public void setTimezone(String id){
-            timeZone = TimeZone.getTimeZone(id);
-        }
-
-        public void setOffset(int offset) {
-            this.offset = offset;
-        }
-
-        /**
-         * @deprecated setUnit(String) is deprecated and is replaced with
-         *             setUnit(Tstamp.Unit) to make Ant's
-         *             Introspection mechanism do the work and also to
-         *             encapsulate operations on the unit in its own
-         *             class.
-         */
-        public void setUnit(String unit) {
-            log("DEPRECATED - The setUnit(String) method has been deprecated."
-                + " Use setUnit(Tstamp.Unit) instead.");
-            Unit u = new Unit();
-            u.setValue(unit);
-            field = u.getCalendarField();
-        }
-
-        public void setUnit(Unit unit) {
-            field = unit.getCalendarField();
-        }
-
-        public void execute(Project project, Date date, Location location) {
-            if (propertyName == null) {
-                throw new BuildException("property attribute must be provided",
-                                         location);
-            }
-
-            if (pattern == null) {
-                throw new BuildException("pattern attribute must be provided",
-                                         location);
-            }
-
-            SimpleDateFormat sdf;
-            if (language == null) {
-                sdf = new SimpleDateFormat(pattern);
-            } else if (variant == null) {
-                sdf = new SimpleDateFormat(pattern,
-                                           new Locale(language, country));
-            } else {
-                sdf = new SimpleDateFormat(pattern,
-                                           new Locale(language, country,
-                                                      variant));
-            }
-            if (offset != 0) {
-                Calendar calendar = Calendar.getInstance();
-                calendar.setTime(date);
-                calendar.add(field, offset);
-                date = calendar.getTime();
-            }
-            if (timeZone != null){
-                sdf.setTimeZone(timeZone);
-            }
-            project.setNewProperty(propertyName, sdf.format(date));
-        }
-    }
-
-    public static class Unit extends EnumeratedAttribute {
-
-        private static final String MILLISECOND = "millisecond";
-        private static final String SECOND = "second";
-        private static final String MINUTE = "minute";
-        private static final String HOUR = "hour";
-        private static final String DAY = "day";
-        private static final String WEEK = "week";
-        private static final String MONTH = "month";
-        private static final String YEAR = "year";
-
-        private static final String[] units = {
-                                                MILLISECOND,
-                                                SECOND,
-                                                MINUTE,
-                                                HOUR,
-                                                DAY,
-                                                WEEK,
-                                                MONTH,
-                                                YEAR
-                                              };
-
-        private Hashtable calendarFields = new Hashtable();
-
-        public Unit() {
-            calendarFields.put(MILLISECOND,
-                               new Integer(Calendar.MILLISECOND));
-            calendarFields.put(SECOND, new Integer(Calendar.SECOND));
-            calendarFields.put(MINUTE, new Integer(Calendar.MINUTE));
-            calendarFields.put(HOUR, new Integer(Calendar.HOUR_OF_DAY));
-            calendarFields.put(DAY, new Integer(Calendar.DATE));
-            calendarFields.put(WEEK, new Integer(Calendar.WEEK_OF_YEAR));
-            calendarFields.put(MONTH, new Integer(Calendar.MONTH));
-            calendarFields.put(YEAR, new Integer(Calendar.YEAR));
-        }
-
-        public int getCalendarField() {
-            String key = getValue().toLowerCase();
-            Integer i = (Integer) calendarFields.get(key);
-            return i.intValue();
-        }
-
-        public String[] getValues() {
-            return units;
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/Typedef.java b/src/main/org/apache/tools/ant/taskdefs/Typedef.java
deleted file mode 100644
index 7331a2b..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Typedef.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights 
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.BuildException;
-
-/**
- * Define a new data type.
- *
- * @author <a href="stefan.bodewig@epost.de">Stefan Bodewig</a>
- * @since Ant 1.4
- * @ant.task category="internal"
- */
-public class Typedef extends Definer {
-    protected void addDefinition(String name, Class c) throws BuildException {
-        project.addDataTypeDefinition(name, c);
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/Unpack.java b/src/main/org/apache/tools/ant/taskdefs/Unpack.java
deleted file mode 100644
index 67c7533..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Unpack.java
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-
-import java.io.File;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Task;
-
-/**
- * Abstract Base class for unpack tasks.
- *
- * @author <a href="mailto:umagesh@apache.org">Magesh Umasankar</a>
- *
- * @since Ant 1.5
- */
-
-public abstract class Unpack extends Task {
-
-    protected File source;
-    protected File dest;
-
-    /**
-     * @deprecated setSrc(String) is deprecated and is replaced with
-     *             setSrc(File) to make Ant's Introspection
-     *             mechanism do the work and also to encapsulate operations on
-     *             the type in its own class.
-     */
-    public void setSrc(String src) {
-        log("DEPRECATED - The setSrc(String) method has been deprecated."
-            + " Use setSrc(File) instead.");
-        setSrc(project.resolveFile(src));
-    }
-
-    /**
-     * @deprecated setDest(String) is deprecated and is replaced with
-     *             setDest(File) to make Ant's Introspection
-     *             mechanism do the work and also to encapsulate operations on
-     *             the type in its own class.
-     */
-    public void setDest(String dest) {
-        log("DEPRECATED - The setDest(String) method has been deprecated."
-            + " Use setDest(File) instead.");
-        setDest(project.resolveFile(dest));
-    }
-
-    public void setSrc(File src) {
-        source = src;
-    }
-
-    public void setDest(File dest) {
-        this.dest = dest;
-    }
-
-    private void validate() throws BuildException {
-        if (source == null) {
-            throw new BuildException("No Src specified", location);
-        }
-
-        if (!source.exists()) {
-            throw new BuildException("Src doesn't exist", location);
-        }
-
-        if (source.isDirectory()) {
-            throw new BuildException("Cannot expand a directory", location);
-        }
-
-        if (dest == null) {
-            dest = new File(source.getParent());
-        }
-
-        if (dest.isDirectory()) {
-            String defaultExtension = getDefaultExtension();
-            createDestFile(defaultExtension);
-        }
-    }
-
-    private void createDestFile(String defaultExtension) {
-        String sourceName = source.getName();
-        int len = sourceName.length();
-        if (defaultExtension != null
-            && len > defaultExtension.length()
-            && defaultExtension.equalsIgnoreCase(sourceName.substring(len - defaultExtension.length()))) {
-            dest = new File(dest, sourceName.substring(0,
-                                                       len - defaultExtension.length()));
-        } else {
-            dest = new File(dest, sourceName);
-        }
-    }
-
-    public void execute() throws BuildException {
-        File savedDest = dest; // may be altered in validate
-        try {
-            validate();
-            extract();
-        } finally {
-            dest = savedDest;
-        }
-    }
-
-    protected abstract String getDefaultExtension();
-    protected abstract void extract();
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/Untar.java b/src/main/org/apache/tools/ant/taskdefs/Untar.java
deleted file mode 100644
index dbc520e..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Untar.java
+++ /dev/null
@@ -1,202 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.tar.TarInputStream;
-import org.apache.tools.tar.TarEntry;
-import org.apache.tools.ant.util.FileUtils;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.BufferedInputStream;
-import java.io.InputStream;
-import java.io.IOException;
-import java.util.zip.GZIPInputStream;
-import org.apache.tools.bzip2.CBZip2InputStream;
-import org.apache.tools.ant.types.EnumeratedAttribute;
-
-
-
-/**
- * Untar a file.
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- * @author <a href="mailto:umagesh@rediffmail.com">Magesh Umasankar</a>
- *
- * @since Ant 1.1
- *
- * @ant.task category="packaging"
- */
-public class Untar extends Expand {
-    /**
-     *   compression method
-     */
-    private UntarCompressionMethod compression = new UntarCompressionMethod();
-
-    /**
-     * Set compression method.
-     *
-     * Allowable values are
-     *   none - no compression
-     *   gzip - Gzip compression
-     *   bzip2 - Bzip2 compression
-     *
-     * @param method compression method
-     */
-    public void setCompression(UntarCompressionMethod method) {
-        compression = method;
-    }
-
-    protected void expandFile(FileUtils fileUtils, File srcF, File dir) {
-        TarInputStream tis = null;
-        try {
-            log("Expanding: " + srcF + " into " + dir, Project.MSG_INFO);
-            tis = new TarInputStream(
-                compression.decompress(srcF,
-                    new BufferedInputStream(
-                        new FileInputStream(srcF))));
-            TarEntry te = null;
-
-            while ((te = tis.getNextEntry()) != null) {
-                extractFile(fileUtils, srcF, dir, tis,
-                            te.getName(), te.getModTime(), te.isDirectory());
-            }
-            log("expand complete", Project.MSG_VERBOSE);
-
-        } catch (IOException ioe) {
-            throw new BuildException("Error while expanding " + srcF.getPath(),
-                                     ioe, location);
-        } finally {
-            if (tis != null) {
-                try {
-                    tis.close();
-                } catch (IOException e) {}
-            }
-        }
-    }
-
-    /**
-     * Valid Modes for Compression attribute to Untar Task
-     *
-     */
-    public static final class UntarCompressionMethod
-        extends EnumeratedAttribute {
-
-        // permissable values for compression attribute
-        /**
-         *  No compression
-         */
-        private static final String NONE = "none";
-        /**
-         *  GZIP compression
-         */
-        private static final String GZIP = "gzip";
-        /**
-         *  BZIP2 compression
-         */
-        private static final String BZIP2 = "bzip2";
-
-
-        /**
-         *  Constructor
-         */
-        public UntarCompressionMethod() {
-            super();
-            setValue(NONE);
-        }
-
-        /**
-         * Get valid enumeration values
-         *
-         * @return valid values
-         */
-        public String[] getValues() {
-            return new String[] { NONE, GZIP, BZIP2 };
-        }
-
-        /**
-         *  This method wraps the input stream with the
-         *     corresponding decompression method
-         *
-         *  @param file provides location information for BuildException
-         *  @param istream input stream
-         *  @return input stream with on-the-fly decompression
-         *  @exception IOException thrown by GZIPInputStream constructor
-         *  @exception BuildException thrown if bzip stream does not
-         *     start with expected magic values
-         */
-        private InputStream decompress(final File file,
-                                       final InputStream istream)
-            throws IOException, BuildException {
-            final String value = getValue();
-            if (GZIP.equals(value)) {
-                return new GZIPInputStream(istream);
-            } else {
-                if (BZIP2.equals(value)) {
-                    final char[] magic = new char[] { 'B', 'Z' };
-                    for (int i = 0; i < magic.length; i++) {
-                        if (istream.read() != magic[i]) {
-                            throw new BuildException(
-                                "Invalid bz2 file." + file.toString());
-                        }
-                    }
-                    return new CBZip2InputStream(istream);
-                }
-            }
-            return istream;
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/UpToDate.java b/src/main/org/apache/tools/ant/taskdefs/UpToDate.java
deleted file mode 100644
index 59dd30c..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/UpToDate.java
+++ /dev/null
@@ -1,253 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.DirectoryScanner;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.taskdefs.condition.Condition;
-import org.apache.tools.ant.types.Mapper;
-import org.apache.tools.ant.types.FileSet;
-import org.apache.tools.ant.util.SourceFileScanner;
-import org.apache.tools.ant.util.FileNameMapper;
-import org.apache.tools.ant.util.MergingMapper;
-import java.io.File;
-import java.util.Enumeration;
-
-import java.util.Vector;
-
-/**
- * Will set the given property if the specified target has a timestamp
- * greater than all of the source files.
- *
- * @author William Ferguson 
- *         <a href="mailto:williamf@mincom.com">williamf@mincom.com</a> 
- * @author Hiroaki Nakamura 
- *         <a href="mailto:hnakamur@mc.neweb.ne.jp">hnakamur@mc.neweb.ne.jp</a>
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- *
- * @since Ant 1.2
- *
- * @ant.task category="control"
- */
-
-public class UpToDate extends Task implements Condition {
-
-    private String _property;
-    private String _value;
-    private File _sourceFile;
-    private File _targetFile;
-    private Vector sourceFileSets = new Vector();
-
-    protected Mapper mapperElement = null;
-
-    /**
-     * The property to set if the target file is more up-to-date than
-     * (each of) the source file(s).
-     *
-     * @param property the name of the property to set if Target is up-to-date.
-     */
-    public void setProperty(String property) {
-        _property = property;
-    }
-
-    /**
-     * The value to set the named property to if the target file is more
-     * up-to-date than (each of) the source file(s). Defaults to 'true'.
-     *
-     * @param value the value to set the property to if Target is up-to-date
-     */
-    public void setValue(String value) {
-        _value = value;
-    }
-
-    /**
-     * Returns the value, or "true" if a specific value wasn't provided.
-     */
-    private String getValue() {
-        return (_value != null) ? _value : "true";
-    } 
-
-    /**
-     * The file which must be more up-to-date than (each of) the source file(s)
-     * if the property is to be set.
-     *
-     * @param file the file we are checking against.
-     */
-    public void setTargetFile(File file) {
-        _targetFile = file;
-    }
-
-    /**
-     * The file that must be older than the target file
-     * if the property is to be set.
-     *
-     * @param file the file we are checking against the target file.
-     */
-    public void setSrcfile(File file) {
-        _sourceFile = file;
-    }
-
-    /**
-     * Nested &lt;srcfiles&gt; element.
-     */
-    public void addSrcfiles(FileSet fs) {
-        sourceFileSets.addElement(fs);
-    }
-
-    /**
-     * Defines the FileNameMapper to use (nested mapper element).
-     */
-    public Mapper createMapper() throws BuildException {
-        if (mapperElement != null) {
-            throw new BuildException("Cannot define more than one mapper",
-                                     location);
-        }
-        mapperElement = new Mapper(project);
-        return mapperElement;
-    }
-
-    /**
-     * Evaluate (all) target and source file(s) to
-     * see if the target(s) is/are up-to-date.
-     */
-    public boolean eval() {
-        if (sourceFileSets.size() == 0 && _sourceFile == null) {
-            throw new BuildException("At least one srcfile or a nested "
-                                     + "<srcfiles> element must be set.");
-        }
-
-        if (sourceFileSets.size() > 0 && _sourceFile != null) {
-            throw new BuildException("Cannot specify both the srcfile "
-                                     + "attribute and a nested <srcfiles> "
-                                     + "element.");
-        }
-
-        if (_targetFile == null && mapperElement == null) {
-            throw new BuildException("The targetfile attribute or a nested "
-                                     + "mapper element must be set.");
-        }
-
-        // if the target file is not there, then it can't be up-to-date
-        if (_targetFile != null && !_targetFile.exists()) {
-            return false;
-        } 
-
-        // if the source file isn't there, throw an exception
-        if (_sourceFile != null && !_sourceFile.exists()) {
-            throw new BuildException(_sourceFile.getAbsolutePath() 
-                                     + " not found.");
-        }
-
-        Enumeration enum = sourceFileSets.elements();
-        boolean upToDate = true;
-        while (upToDate && enum.hasMoreElements()) {
-            FileSet fs = (FileSet) enum.nextElement();
-            DirectoryScanner ds = fs.getDirectoryScanner(project);
-            upToDate = upToDate && scanDir(fs.getDir(project), 
-                                           ds.getIncludedFiles());
-        }
-
-        if (_sourceFile != null) {
-            if (mapperElement == null) {
-                upToDate = upToDate &&
-                    (_targetFile.lastModified() > _sourceFile.lastModified());
-            } else {
-                SourceFileScanner sfs = new SourceFileScanner(this);
-                upToDate = upToDate &&
-                    (sfs.restrict(new String[] {_sourceFile.getAbsolutePath()},
-                                  null, null,
-                                  mapperElement.getImplementation())
-                     .length == 0);
-            }
-        }
-        return upToDate;
-    }
-
-
-    /**
-     * Sets property to true if target file(s) have a more recent timestamp
-     * than (each of) the corresponding source file(s).
-     */
-    public void execute() throws BuildException {
-        boolean upToDate = eval();
-        if (upToDate) {
-            this.project.setNewProperty(_property, getValue());
-            if (mapperElement == null) {
-                log("File \"" + _targetFile.getAbsolutePath() 
-                    + "\" is up-to-date.", Project.MSG_VERBOSE);
-            } else {
-                log("All target files are up-to-date.",
-                    Project.MSG_VERBOSE);
-            }
-        }
-    }
-
-    protected boolean scanDir(File srcDir, String[] files) {
-        SourceFileScanner sfs = new SourceFileScanner(this);
-        FileNameMapper mapper = null;
-        File dir = srcDir;
-        if (mapperElement == null) {
-            MergingMapper mm = new MergingMapper();
-            mm.setTo(_targetFile.getAbsolutePath());
-            mapper = mm;
-            dir = null;
-        } else {
-            mapper = mapperElement.getImplementation();
-        }
-        return sfs.restrict(files, srcDir, dir, mapper).length == 0;
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/WaitFor.java b/src/main/org/apache/tools/ant/taskdefs/WaitFor.java
deleted file mode 100644
index 629ef55..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/WaitFor.java
+++ /dev/null
@@ -1,209 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.taskdefs.condition.ConditionBase;
-import org.apache.tools.ant.taskdefs.condition.Condition;
-import org.apache.tools.ant.types.EnumeratedAttribute;
-
-import java.util.Hashtable;
-
-/**
- * Wait for an external event to occur.
- *
- * Wait for an external process to start or to complete some
- * task. This is useful with the <code>parallel</code> task to
- * syncronize the execution of tests with server startup.
- *
- * The following attributes can be specified on a waitfor task:
- * <ul>
- * <li>maxwait - maximum length of time to wait before giving up</li>
- * <li>maxwaitunit - The unit to be used to interpret maxwait attribute</li>
- * <li>checkevery - amount of time to sleep between each check</li>
- * <li>checkeveryunit - The unit to be used to interpret checkevery attribute</li>
- * <li>timeoutproperty - name of a property to set if maxwait has been exceeded.</li>
- * </ul>
- *
- * The maxwaitunit and checkeveryunit are allowed to have the following values:
- * millesond, second, minute, hour, day and week. The default is millisecond.
- *
- * @author <a href="mailto:denis@network365.com">Denis Hennessy</a>
- * @author <a href="mailto:umagesh@apache.org">Magesh Umasankar</a>
- *
- * @since Ant 1.5
- *
- * @ant.task category="control"
- */
-
-public class WaitFor extends ConditionBase {
-    private long maxWaitMillis = 1000l * 60l * 3l; // default max wait time
-    private long maxWaitMultiplier = 1l;
-    private long checkEveryMillis = 500l;
-    private long checkEveryMultiplier = 1l;
-    private String timeoutProperty;
-
-    /**
-     * Set the maximum length of time to wait
-     */
-    public void setMaxWait(long time) {
-        maxWaitMillis = time;
-    }
-
-    /**
-     * Set the max wait time unit
-     */
-    public void setMaxWaitUnit(Unit unit) {
-        maxWaitMultiplier = unit.getMultiplier();
-    }
-
-    /**
-     * Set the time between each check
-     */
-    public void setCheckEvery(long time) {
-        checkEveryMillis = time;
-    }
-
-    /**
-     * Set the check every time unit
-     */
-    public void setCheckEveryUnit(Unit unit) {
-        checkEveryMultiplier = unit.getMultiplier();
-    }
-
-    /**
-     * Set the timeout property.
-     */
-    public void setTimeoutProperty(String p) {
-        timeoutProperty = p;
-    }
-
-    /**
-     * Check repeatedly for the specified conditions until they become
-     * true or the timeout expires.
-     */
-    public void execute() throws BuildException {
-        if (countConditions() > 1) {
-            throw new BuildException("You must not nest more than one "
-                                     + "condition into <waitfor>");
-        }
-        if (countConditions() < 1) {
-            throw new BuildException("You must nest a condition into "
-                                     + "<waitfor>");
-        }
-        Condition c = (Condition) getConditions().nextElement();
-
-        long savedMaxWaitMillis = maxWaitMillis;
-        long savedCheckEveryMillis = checkEveryMillis;
-        try {
-            maxWaitMillis *= maxWaitMultiplier;
-            checkEveryMillis *= checkEveryMultiplier;
-            long start = System.currentTimeMillis();
-            long end = start + maxWaitMillis;
-
-            while (System.currentTimeMillis() < end) {
-                if (c.eval()) {
-                    return;
-                }
-                try {
-                    Thread.sleep(checkEveryMillis);
-                } catch (InterruptedException e) {
-                }
-            }
-
-            if (timeoutProperty != null) {
-                project.setNewProperty(timeoutProperty, "true");
-            }
-        } finally {
-            maxWaitMillis = savedMaxWaitMillis;
-            checkEveryMillis = savedCheckEveryMillis;
-        }
-    }
-
-    public static class Unit extends EnumeratedAttribute {
-
-        private static final String MILLISECOND = "millisecond";
-        private static final String SECOND = "second";
-        private static final String MINUTE = "minute";
-        private static final String HOUR = "hour";
-        private static final String DAY = "day";
-        private static final String WEEK = "week";
-
-        private static final String[] units = {
-            MILLISECOND, SECOND, MINUTE, HOUR, DAY, WEEK
-        };
-
-        private Hashtable timeTable = new Hashtable();
-
-        public Unit() {
-            timeTable.put(MILLISECOND, new Long(1l));
-            timeTable.put(SECOND,      new Long(1000l));
-            timeTable.put(MINUTE,      new Long(1000l * 60l));
-            timeTable.put(HOUR,        new Long(1000l * 60l * 60l));
-            timeTable.put(DAY,         new Long(1000l * 60l * 60l * 24l));
-            timeTable.put(WEEK,        new Long(1000l * 60l * 60l * 24l * 7l));
-        }
-
-        public long getMultiplier() {
-            String key = getValue().toLowerCase();
-            Long l = (Long) timeTable.get(key);
-            return l.longValue();
-        }
-
-        public String[] getValues() {
-            return units;
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/War.java b/src/main/org/apache/tools/ant/taskdefs/War.java
deleted file mode 100644
index fa44dd7..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/War.java
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.types.ZipFileSet;
-import org.apache.tools.zip.ZipOutputStream;
-
-import java.io.File;
-import java.io.IOException;
-
-
-/**
- * Creates a WAR archive.
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- *
- * @since Ant 1.2
- *
- * @ant.task category="packaging"
- */
-public class War extends Jar {
-
-    private File deploymentDescriptor;
-    private boolean descriptorAdded;
-
-    public War() {
-        super();
-        archiveType = "war";
-        emptyBehavior = "create";
-    }
-
-    /**
-     * @deprecated Use setDestFile(File) instead
-     */
-    public void setWarfile(File warFile) {
-        setDestFile(warFile);
-    }
-
-    /**
-     * set the web app descriptor for this WAR file
-     */
-    public void setWebxml(File descr) {
-        deploymentDescriptor = descr;
-        if (!deploymentDescriptor.exists()) {
-            throw new BuildException("Deployment descriptor: " 
-                                     + deploymentDescriptor 
-                                     + " does not exist.");
-        }
-
-        // Create a ZipFileSet for this file, and pass it up.
-        ZipFileSet fs = new ZipFileSet();
-        fs.setDir(new File(deploymentDescriptor.getParent()));
-        fs.setIncludes(deploymentDescriptor.getName());
-        fs.setFullpath("WEB-INF/web.xml");
-        super.addFileset(fs);
-    }
-
-    public void addLib(ZipFileSet fs) {
-        // We just set the prefix for this fileset, and pass it up.
-        fs.setPrefix("WEB-INF/lib/");
-        super.addFileset(fs);
-    }
-
-    public void addClasses(ZipFileSet fs) {
-        // We just set the prefix for this fileset, and pass it up.
-        fs.setPrefix("WEB-INF/classes/");
-        super.addFileset(fs);
-    }
-
-    public void addWebinf(ZipFileSet fs) {
-        // We just set the prefix for this fileset, and pass it up.
-        fs.setPrefix("WEB-INF/");
-        super.addFileset(fs);
-    }
-
-    protected void initZipOutputStream(ZipOutputStream zOut)
-        throws IOException, BuildException {
-        // If no webxml file is specified, it's an error.
-        if (deploymentDescriptor == null && !isInUpdateMode()) {
-            throw new BuildException("webxml attribute is required", location);
-        }
-
-        super.initZipOutputStream(zOut);
-    }
-
-    protected void zipFile(File file, ZipOutputStream zOut, String vPath)
-        throws IOException {
-        // If the file being added is WEB-INF/web.xml, we warn if it's
-        // not the one specified in the "webxml" attribute - or if
-        // it's being added twice, meaning the same file is specified
-        // by the "webxml" attribute and in a <fileset> element.
-        if (vPath.equalsIgnoreCase("WEB-INF/web.xml"))  {
-            if (deploymentDescriptor == null 
-                || !deploymentDescriptor.equals(file) 
-                || descriptorAdded) {
-                log("Warning: selected " + archiveType
-                    + " files include a WEB-INF/web.xml which will be ignored "
-                    + "(please use webxml attribute to "
-                    + archiveType + " task)", Project.MSG_WARN);
-            } else {
-                super.zipFile(file, zOut, vPath);
-                descriptorAdded = true;
-            }
-        } else {
-            super.zipFile(file, zOut, vPath);
-        }
-    }
-
-    /**
-     * Make sure we don't think we already have a web.xml next time this task
-     * gets executed.
-     */
-    protected void cleanUp() {
-        descriptorAdded = false;
-        super.cleanUp();
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/XSLTLiaison.java b/src/main/org/apache/tools/ant/taskdefs/XSLTLiaison.java
deleted file mode 100644
index 33f0d52..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/XSLTLiaison.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import java.io.File;
-
-/**
- * Proxy interface for XSLT processors.
- *
- * @author <a href="mailto:rubys@us.ibm.com">Sam Ruby</a>
- * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
- * @see XSLTProcess
- * @since Ant 1.1
- */
-public interface XSLTLiaison {
-
-    /**
-     * the file protocol prefix for systemid.
-     * This file protocol must be appended to an absolute path.
-     * Typically: <tt>FILE_PROTOCOL_PREFIX + file.getAbsolutePath()</tt>
-     * Note that on Windows, an extra '/' must be appended to the
-     * protocol prefix so that there is always 3 consecutive slashes.
-     * @since Ant 1.4
-     */
-    String FILE_PROTOCOL_PREFIX = "file://";
-
-    /**
-     * set the stylesheet to use for the transformation.
-     * @param stylesheet the stylesheet to be used for transformation.
-     * @since Ant 1.4
-     */
-    void setStylesheet(File stylesheet) throws Exception;
-
-    /**
-     * Add a parameter to be set during the XSL transformation.
-     * @param name the parameter name.
-     * @param expression the parameter value as an expression string.
-     * @throws Exception thrown if any problems happens.
-     * @since Ant 1.3
-     */
-    void addParam(String name, String expression) throws Exception;
-
-    /**
-     * set the output type to use for the transformation.  Only "xml" (the
-     * default) is guaranteed to work for all parsers.  Xalan2 also
-     * supports "html" and "text".
-     * @param type the output method to use
-     * @since Ant 1.5
-     */
-    void setOutputtype(String type) throws Exception;
-
-    /**
-     * Perform the transformation of a file into another.
-     * @param infile the input file, probably an XML one. :-)
-     * @param outfile the output file resulting from the transformation
-     * @throws Exception thrown if any problems happens.
-     * @see #setStylesheet(File)
-     * @since Ant 1.4
-     */
-    void transform(File infile, File outfile) throws Exception;
-
-} //-- XSLTLiaison
diff --git a/src/main/org/apache/tools/ant/taskdefs/XSLTLogger.java b/src/main/org/apache/tools/ant/taskdefs/XSLTLogger.java
deleted file mode 100644
index aee143c..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/XSLTLogger.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-/**
- * @since Ant 1.5
- */
-public interface XSLTLogger {
-    /**
-     * Log a message.
-     */
-    void log(String msg);
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/XSLTLoggerAware.java b/src/main/org/apache/tools/ant/taskdefs/XSLTLoggerAware.java
deleted file mode 100644
index 99b3743..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/XSLTLoggerAware.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-/**
- * @since Ant 1.5
- */
-public interface XSLTLoggerAware {
-    void setLogger(XSLTLogger l);
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/XSLTProcess.java b/src/main/org/apache/tools/ant/taskdefs/XSLTProcess.java
deleted file mode 100644
index fe18b53..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/XSLTProcess.java
+++ /dev/null
@@ -1,681 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import java.lang.reflect.Method;
-import java.io.File;
-import java.util.Enumeration;
-import java.util.Vector;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.DirectoryScanner;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.AntClassLoader;
-import org.apache.tools.ant.types.Path;
-import org.apache.tools.ant.types.Reference;
-import org.apache.tools.ant.util.FileUtils;
-import org.apache.tools.ant.types.XMLCatalog;
-import org.xml.sax.EntityResolver;
-
-/**
- * A Task to process via XSLT a set of XML documents. This is
- * useful for building views of XML based documentation.
- *
- * @version $Revision$ 
- *
- * @author <a href="mailto:kvisco@exoffice.com">Keith Visco</a>
- * @author <a href="mailto:rubys@us.ibm.com">Sam Ruby</a>
- * @author <a href="mailto:russgold@acm.org">Russell Gold</a>
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- *
- * @since Ant 1.1
- *
- * @ant.task name="style" category="xml"
- */
-
-public class XSLTProcess extends MatchingTask implements XSLTLogger {
-    /** destination directory */
-    private File destDir = null;
-    
-    /** where to find the source XML file, default is the project's basedir */
-    private File baseDir = null;
-    
-    /** XSL stylesheet */
-    private String xslFile = null;
-    
-    /** extension of the files produced by XSL processing */
-    private String targetExtension = ".html";
-
-    /** additional parameters to be passed to the stylesheets */
-    private Vector params = new Vector();
-    
-    /** Input XML document to be used */
-    private File inFile = null;
-    
-    /** Output file */
-    private File outFile = null;
-    
-    /** The name of the XSL processor to use */
-    private String processor;
-    
-    /** Classpath to use when trying to load the XSL processor */
-    private Path classpath = null;
-    
-    /** The Liason implementation to use to communicate with the XSL 
-     *  processor */
-    private XSLTLiaison liaison;
-    
-    /** Flag which indicates if the stylesheet has been loaded into 
-     *  the processor */
-    private boolean stylesheetLoaded = false;
-    
-    /** force output of target files even if they already exist */
-    private boolean force = false;
-    
-    /** Utilities used for file operations */
-    private FileUtils fileUtils;
-    
-    /** XSL output method to be used */
-    private String outputtype = null;
-    
-    /** for resolving entities such as dtds */
-    private XMLCatalog xmlCatalog = new XMLCatalog();
-    
-    /** Name of the TRAX Liason class */
-    private static final String TRAX_LIAISON_CLASS =
-                        "org.apache.tools.ant.taskdefs.optional.TraXLiaison";
-
-    /** Name of the now-deprecated XSLP Liason class */                        
-    private static final String XSLP_LIASON_CLASS = 
-                        "org.apache.tools.ant.taskdefs.optional.XslpLiaison";
-
-    /** Name of the Xalan liason class */                            
-    private static final String XALAN_LIASON_CLASS =
-                        "org.apache.tools.ant.taskdefs.optional.XalanLiaison";
-                        
-    /**
-     * Whether to style all files in the included directories as well.
-     *
-     * @since Ant 1.5
-     */
-    private boolean performDirectoryScan = true;
-
-    /**
-     * Creates a new XSLTProcess Task.
-     */
-    public XSLTProcess() {
-        fileUtils = FileUtils.newFileUtils();
-    } //-- XSLTProcess
-    
-    /**
-     * Whether to style all files in the included directories as well.
-     *
-     * @param b true if files in included directories are processed.
-     * @since Ant 1.5
-     */
-    public void setScanIncludedDirectories(boolean b) {
-        performDirectoryScan = b;
-    }
-    
-    /**
-     * Executes the task.
-     *
-     * @exception BuildException if there is an execution problem.
-     */
-    public void execute() throws BuildException {
-        File savedBaseDir = baseDir;
-
-        DirectoryScanner scanner;
-        String[]         list;
-        String[]         dirs;
-        
-        if (xslFile == null) {
-            throw new BuildException("no stylesheet specified", location);
-        }
-        
-        try {
-            if (baseDir == null) {
-                baseDir = project.resolveFile(".");
-            }
-        
-            liaison = getLiaison();
-            
-            // check if liaison wants to log errors using us as logger
-            if (liaison instanceof XSLTLoggerAware) {
-                ((XSLTLoggerAware) liaison).setLogger(this);
-            }
-            
-            log("Using " + liaison.getClass().toString(), Project.MSG_VERBOSE);
-            
-            File stylesheet = project.resolveFile(xslFile);
-            if (!stylesheet.exists()) {
-                stylesheet = fileUtils.resolveFile(baseDir, xslFile);
-                /*
-                 * shouldn't throw out deprecation warnings before we know,
-                 * the wrong version has been used.
-                 */
-                if (stylesheet.exists()) {
-                    log("DEPRECATED - the style attribute should be relative " 
-                        + "to the project\'s");
-                    log("             basedir, not the tasks\'s basedir.");
-                }
-            }
-        
-            // if we have an in file and out then process them
-            if (inFile != null && outFile != null) {
-                process(inFile, outFile, stylesheet);
-                return;
-            }
-        
-            /*
-             * if we get here, in and out have not been specified, we are
-             * in batch processing mode.
-             */
-        
-            //-- make sure Source directory exists...
-            if (destDir == null) {
-                String msg = "destdir attributes must be set!";
-                throw new BuildException(msg);
-            }
-            scanner = getDirectoryScanner(baseDir);
-            log("Transforming into " + destDir, Project.MSG_INFO);
-        
-            // Process all the files marked for styling
-            list = scanner.getIncludedFiles();
-            for (int i = 0; i < list.length; ++i) {
-                process(baseDir, list[i], destDir, stylesheet);
-            }
-            if (performDirectoryScan) {
-                // Process all the directories marked for styling
-                dirs = scanner.getIncludedDirectories();
-                for (int j = 0; j < dirs.length; ++j){
-                    list = new File(baseDir, dirs[j]).list();
-                    for (int i = 0; i < list.length; ++i) {
-                        process(baseDir, list[i], destDir, stylesheet);
-                    }
-                }
-            }
-        } finally {
-            liaison = null;
-            stylesheetLoaded = false;
-            baseDir = savedBaseDir;
-        }
-    }
-    
-    /**
-     * Set whether to check dependencies, or always generate.
-     *
-     * @param force true if always generate.
-     */
-    public void setForce(boolean force) {
-        this.force = force;
-    }
-    
-    /**
-     * Set the base directory.
-     *
-     * @param dir the base directory
-     **/
-    public void setBasedir(File dir) {
-        baseDir = dir;
-    }
-    
-    /**
-     * Set the destination directory into which the XSL result
-     * files should be copied to
-     * @param dir the name of the destination directory
-     **/
-    public void setDestdir(File dir) {
-        destDir = dir;
-    }
-    
-    /**
-     * Set the desired file extension to be used for the target
-     * @param name the extension to use
-     **/
-    public void setExtension(String name) {
-        targetExtension = name;
-    }
-    
-    /**
-     * Sets the file to use for styling relative to the base directory
-     * of this task.
-     *
-     * @param xslFile the stylesheet to use
-     */
-    public void setStyle(String xslFile) {
-        this.xslFile = xslFile;
-    }
-    
-    /**
-     * Set the classpath to load the Processor through (attribute).
-     *
-     * @param classpath the classpath to use when loading the XSL processor
-     */
-    public void setClasspath(Path classpath) {
-        createClasspath().append(classpath);
-    }
-    
-    /**
-     * Set the classpath to load the Processor through (nested element).
-     *
-     * @return a path instance to be configured by the Ant core.
-     */
-    public Path createClasspath() {
-        if (classpath == null) {
-            classpath = new Path(project);
-        }
-        return classpath.createPath();
-    }
-    
-    /**
-     * Set the classpath to load the Processor through via reference
-     * (attribute).
-     *
-     * @param r the id of the Ant path instance to act as the classpath 
-     *          for loading the XSL processor
-     */
-    public void setClasspathRef(Reference r) {
-        createClasspath().setRefid(r);
-    }
-    
-    /**
-     * Set the name of the XSL processor to use 
-     *
-     * @param processor the name of the XSL processor
-     */
-    public void setProcessor(String processor) {
-        this.processor = processor;
-    }
-    
-    /**
-     * Add the catalog to our internal catalog
-     * 
-     * @param xmlCatalog the XMLCatalog instance to use to look up DTDs
-     */
-    public void addConfiguredXMLCatalog(XMLCatalog xmlCatalog) {
-        this.xmlCatalog.addConfiguredXMLCatalog(xmlCatalog);
-    }
-    
-    /**
-     * Load processor here instead of in setProcessor - this will be
-     * called from within execute, so we have access to the latest
-     * classpath.
-     *
-     * @param proc the name of the processor to load.
-     * @exception Exception if the processor cannot be loaded.
-     */
-    private void resolveProcessor(String proc) throws Exception {
-        if (proc.equals("trax")) {
-            final Class clazz = loadClass(TRAX_LIAISON_CLASS);
-            liaison = (XSLTLiaison) clazz.newInstance();
-        } else if (proc.equals("xslp")) {
-            log("DEPRECATED - xslp processor is deprecated. Use trax or "
-                + "xalan instead.");
-            final Class clazz = loadClass(XSLP_LIASON_CLASS);
-            liaison = (XSLTLiaison) clazz.newInstance();
-        } else if (proc.equals("xalan")) {
-            final Class clazz = loadClass(XALAN_LIASON_CLASS);
-            liaison = (XSLTLiaison) clazz.newInstance();
-        } else {
-            liaison = (XSLTLiaison) loadClass(proc).newInstance();
-        }
-    }
-    
-    /**
-     * Load named class either via the system classloader or a given
-     * custom classloader.
-     *
-     * @param classname the name of the class to load.
-     * @return the requested class.
-     * @exception Exception if the class could not be loaded.
-     */
-    private Class loadClass(String classname) throws Exception {
-        if (classpath == null) {
-            return Class.forName(classname);
-        } else {
-            AntClassLoader al = new AntClassLoader(project, classpath);
-            Class c = al.loadClass(classname);
-            AntClassLoader.initializeClass(c);
-            return c;
-        }
-    }
-    
-    /**
-     * Sets an out file
-     *
-     * @param outFile the output File instance.
-     */
-    public void setOut(File outFile){
-        this.outFile = outFile;
-    }
-    
-    /**
-     * Sets an input xml file to be styled
-     *
-     * @param inFile the input file
-     */
-    public void setIn(File inFile){
-        this.inFile = inFile;
-    }
-    
-    /**
-     * Processes the given input XML file and stores the result
-     * in the given resultFile.
-     *
-     * @param baseDir the base directory for resolving files.
-     * @param xmlFile the input file
-     * @param destDir the destination directory
-     * @param stylesheet the stylesheet to use.
-     * @exception BuildException if the processing fails.
-     */
-    private void process(File baseDir, String xmlFile, File destDir,
-                         File stylesheet)
-        throws BuildException {
-        
-        String fileExt = targetExtension;
-        File   outFile = null;
-        File   inFile = null;
-        
-        try {
-            long styleSheetLastModified = stylesheet.lastModified();
-            inFile = new File(baseDir, xmlFile);
-
-            if (inFile.isDirectory()) {
-                log("Skipping " + inFile + " it is a directory.",
-                    Project.MSG_VERBOSE);
-                return;
-            }
-            
-            int dotPos = xmlFile.lastIndexOf('.');
-            if (dotPos > 0) {
-                outFile = new File(destDir, 
-                    xmlFile.substring(0, xmlFile.lastIndexOf('.')) + fileExt);
-            } else {
-                outFile = new File(destDir, xmlFile + fileExt);
-            }
-            if (force ||
-                inFile.lastModified() > outFile.lastModified() ||
-                styleSheetLastModified > outFile.lastModified()) {
-                ensureDirectoryFor(outFile);
-                log("Processing " + inFile + " to " + outFile);
-                
-                configureLiaison(stylesheet);
-                liaison.transform(inFile, outFile);
-            }
-        } catch (Exception ex) {
-            // If failed to process document, must delete target document,
-            // or it will not attempt to process it the second time
-            log("Failed to process " + inFile, Project.MSG_INFO);
-            if (outFile != null) {
-                outFile.delete();
-            }
-            
-            throw new BuildException(ex);
-        }
-        
-    } //-- processXML
-    
-    /**
-     * Process the input file to the output file with the given stylesheet.
-     *
-     * @param inFile the input file to process.
-     * @param outFile the detination file.
-     * @param stylesheet the stylesheet to use.
-     * @exception BuildException if the processing fails.
-     */
-    private void process(File inFile, File outFile, File stylesheet) 
-         throws BuildException {
-        try {
-            long styleSheetLastModified = stylesheet.lastModified();
-            log("In file " + inFile + " time: " + inFile.lastModified(),
-                Project.MSG_DEBUG);
-            log("Out file " + outFile + " time: " + outFile.lastModified(),
-                Project.MSG_DEBUG);
-            log("Style file " + xslFile + " time: " + styleSheetLastModified,
-                Project.MSG_DEBUG);
-            if (force ||
-                inFile.lastModified() > outFile.lastModified() ||
-                styleSheetLastModified > outFile.lastModified()) {
-                ensureDirectoryFor(outFile);
-                log("Processing " + inFile + " to " + outFile, 
-                    Project.MSG_INFO);
-                configureLiaison(stylesheet);
-                liaison.transform(inFile, outFile);
-            }
-        } catch (Exception ex) {
-            log("Failed to process " + inFile, Project.MSG_INFO);
-            if (outFile != null) {
-                outFile.delete();
-            }
-            throw new BuildException(ex);
-        }
-    }
-    
-    /**
-     * Ensure the directory exists for a given file 
-     *
-     * @param targetFile the file for which the directories are required.
-     * @exception BuildException if the directories cannot be created.
-     */
-    private void ensureDirectoryFor(File targetFile) 
-         throws BuildException {
-        File directory = fileUtils.getParentFile(targetFile);
-        if (!directory.exists()) {
-            if (!directory.mkdirs()) {
-                throw new BuildException("Unable to create directory: "
-                                         + directory.getAbsolutePath());
-            }
-        }
-    }
-    
-    /**
-     * Get the Liason implementation to use in processing.
-     *
-     * @return an instance of the XSLTLiason interface.
-     */
-    protected XSLTLiaison getLiaison() {
-        // if processor wasn't specified, see if TraX is available.  If not,
-        // default it to xslp or xalan, depending on which is in the classpath
-        if (liaison == null) {
-            if (processor != null) {
-                try {
-                    resolveProcessor(processor);
-                } catch (Exception e) {
-                    throw new BuildException(e);
-                }
-            } else {
-                try {
-                    resolveProcessor("trax");
-                } catch (Throwable e1) {
-                    try {
-                        resolveProcessor("xalan");
-                    } catch (Throwable e2) {
-                        try {
-                            resolveProcessor("xslp");
-                        } catch (Throwable e3) {
-                            e3.printStackTrace();
-                            e2.printStackTrace();
-                            throw new BuildException(e1);
-                        }
-                    }
-                }
-            }
-        }
-        return liaison;
-    }
-    
-    /**
-     * Create an instance of an XSL parameter for configuration by Ant.
-     *
-     * @return an instance of the Param class to be configured.
-     */
-    public Param createParam() {
-        Param p = new Param();
-        params.addElement(p);
-        return p;
-    }
-    
-    /**
-     * The Param inner class used to store XSL parameters
-     */
-    public class Param {
-        /** The parameter name */
-        private String name = null;
-        
-        /** The parameter's XSL expression */
-        private String expression = null;
-        
-        /** 
-         * Set the parameter name.
-         * 
-         * @param name the name of the parameter.
-         */
-        public void setName(String name){
-            this.name = name;
-        }
-        
-        /** 
-         * The XSL expression for the parameter value
-         *
-         * @param expression the XSL expression representing the 
-         *   parameter's value.
-         */
-        public void setExpression(String expression){
-            this.expression = expression;
-        }
-        
-        /**
-         * Get the parameter name
-         *
-         * @return the parameter name
-         * @exception BuildException if the name is not set.
-         */
-        public String getName() throws BuildException{
-            if (name == null) {
-                throw new BuildException("Name attribute is missing.");
-            }
-            return name;
-        }
-        
-        /**
-         * Get the parameter expression
-         *
-         * @return the parameter expression
-         * @exception BuildException if the expression is not set.
-         */
-        public String getExpression() throws BuildException{
-            if (expression == null) {
-                throw new BuildException("Expression attribute is missing.");
-            }
-            return expression;
-        }
-    }
-    
-    /**
-     * Set the output type to use for the transformation.  Only "xml" (the
-     * default) is guaranteed to work for all parsers.  Xalan2 also
-     * supports "html" and "text".
-     * @param type the output method to use
-     */
-    public void setOutputtype(String type) {
-        this.outputtype = type;
-    }
-
-    /**
-     * Initialize internal instance of XMLCatalog
-     */
-    public void init() throws BuildException {
-        super.init();
-
-        xmlCatalog.setProject(project);
-    }
-
-    /**
-     * Loads the stylesheet and set xsl:param parameters.
-     *
-     * @param stylesheet the file form which to load the stylesheet.
-     * @exception BuildException if the stylesheet cannot be loaded.
-     */
-    protected void configureLiaison(File stylesheet) throws BuildException {
-        if (stylesheetLoaded) {
-            return;
-        }
-        stylesheetLoaded = true;
-        
-        try {
-            log("Loading stylesheet " + stylesheet, Project.MSG_INFO);
-            liaison.setStylesheet(stylesheet);
-            for (Enumeration e = params.elements(); e.hasMoreElements();) {
-                Param p = (Param) e.nextElement();
-                liaison.addParam(p.getName(), p.getExpression());
-            }
-            // if liaison is a TraxLiason, use XMLCatalog as the entity
-            // resolver
-            if (liaison.getClass().getName().equals(TRAX_LIAISON_CLASS) &&
-                xmlCatalog != null) {
-                log("Configuring TraxLiaison and calling entity resolver",
-                    Project.MSG_DEBUG);
-                Method resolver = liaison.getClass()
-                                    .getDeclaredMethod("setEntityResolver", 
-                                        new Class[] {EntityResolver.class});
-                resolver.invoke(liaison, new Object[] {xmlCatalog});
-            }
-        } catch (Exception ex) {
-            log("Failed to read stylesheet " + stylesheet, Project.MSG_INFO);
-            throw new BuildException(ex);
-        }
-    }
-    
-} //-- XSLTProcess
diff --git a/src/main/org/apache/tools/ant/taskdefs/XmlProperty.java b/src/main/org/apache/tools/ant/taskdefs/XmlProperty.java
deleted file mode 100644
index b7edacb..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/XmlProperty.java
+++ /dev/null
@@ -1,237 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.xml.sax.SAXException;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.FactoryConfigurationError;
-import javax.xml.parsers.ParserConfigurationException;
-import java.io.BufferedInputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.util.Vector;
-
-/**
- * Task that gets property values from a valid xml file.
- * Example:
- *   <root-tag myattr="true">
- *     <inner-tag someattr="val">Text</inner-tag>
- *     <a2><a3><a4>false</a4></a3></a2>
- *   </root-tag>
- *
- *  root-tag(myattr)=true
- *  root-tag.inner-tag=Text
- *  root-tag.inner-tag(someattr)=val
- *  root-tag.a2.a3.a4=false
- *
- * @author <a href="mailto:nicolaken@apache.org">Nicola Ken Barozzi</a>
- * @author Erik Hatcher
- * @created 14 January 2002
- */
-
-public class XmlProperty extends org.apache.tools.ant.Task {
-
-    private File src;
-    private String prefix = "";
-    private boolean keepRoot = true;
-    private boolean validate = false;
-    private boolean collapseAttributes = false;
-    private org.w3c.dom.Document document;
-
-    /**
-     * Constructor.
-     */
-    public XmlProperty() {
-        super();
-    }
-
-    /**
-     * Initializes the task.
-     */
-
-    public void init() {
-        super.init();
-    }
-
-    /**
-     * Run the task.
-     * @exception org.apache.tools.ant.BuildException The exception raised during task execution.
-     */
-    public void execute()
-            throws org.apache.tools.ant.BuildException {
-            
-        BufferedInputStream configurationStream = null;
-
-        try {
-            configurationStream =
-                    new BufferedInputStream(new FileInputStream(src));
-
-            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
-
-            factory.setValidating(validate);
-            factory.setNamespaceAware(false);
-
-            DocumentBuilder builder = factory.newDocumentBuilder();
-            document = builder.parse(configurationStream);
-
-            Element topElement = document.getDocumentElement();
-            NodeList topChildren = topElement.getChildNodes();
-            int numChildren = topChildren.getLength();
-
-            log("Using prefix: \"" + prefix + "\"", Project.MSG_DEBUG);
-
-            if (keepRoot) {
-                addNodeRecursively(topElement, prefix);
-            }
-            else {
-                for (int i = 0; i < numChildren; i++) {
-                    addNodeRecursively(topChildren.item(i), prefix);
-                }
-            }
-
-        } catch (SAXException sxe) {
-            // Error generated during parsing
-            Exception x = sxe;
-            if (sxe.getException() != null)
-                x = sxe.getException();
-            throw new BuildException(x);
-
-        } catch (ParserConfigurationException pce) {
-            // Parser with specified options can't be built
-            throw new BuildException(pce);
-        } catch (IOException ioe) {
-            // I/O error
-            throw new BuildException(ioe);
-        } finally {
-            if (configurationStream != null) {
-                try {
-                    configurationStream.close();
-                } catch (Exception e) {
-                }
-            }
-        }
-    }
-
-
-    void addNodeRecursively(org.w3c.dom.Node node, String prefix) {
-
-        if (node.hasAttributes()) {
-            org.w3c.dom.NamedNodeMap nodeAttributes = node.getAttributes();
-            for (int i = 0; i < nodeAttributes.getLength(); i++) {
-                Node attributeNode = nodeAttributes.item(i);
-                String attributeName;
-                
-                if(collapseAttributes){
-                  attributeName = prefix + (prefix.trim().equals("")?"":".") + node.getNodeName() + "." + attributeNode.getNodeName();
-                }
-                else{
-                  attributeName = prefix + (prefix.trim().equals("")?"":".") + node.getNodeName() + "(" + attributeNode.getNodeName() + ")";
-		}              
-		  
-                String attributeValue = attributeNode.getNodeValue();
-                log(attributeName + ":" + attributeValue, Project.MSG_DEBUG);
-                project.setNewProperty(attributeName, attributeValue);
-            }
-        }
-
-        if (node.getNodeType() == Node.TEXT_NODE) {
-            String nodeText = node.getNodeValue();
-            if (nodeText.trim().length() != 0) {
-                log(prefix + ":" + nodeText, Project.MSG_DEBUG);
-                 project.setNewProperty(prefix, nodeText);
-            }
-        }
-
-        if (node.hasChildNodes()) {
-            prefix += ((prefix.trim().equals("")?"":".") + node.getNodeName());
-
-            org.w3c.dom.NodeList nodeChildren = node.getChildNodes();
-            int numChildren = nodeChildren.getLength();
-
-            for (int i = 0; i < numChildren; i++) {
-                addNodeRecursively(nodeChildren.item(i), prefix);
-            }
-        }
-    }
-
-    public void setFile(File src) {
-        this.src = src;
-    }
-
-    public void setPrefix(String prefix) {
-        this.prefix = prefix.trim();
-    }
-
-    public void setKeeproot(boolean keepRoot) {
-        this.keepRoot = keepRoot;
-    }
-
-    public void setValidate(boolean validate) {
-        this.validate = validate;
-    }
-
-    public void setCollapseAttributes(boolean collapseAttributes) {
-        this.collapseAttributes = collapseAttributes;
-    }
-        
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/Zip.java b/src/main/org/apache/tools/ant/taskdefs/Zip.java
deleted file mode 100644
index d7f8be1..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/Zip.java
+++ /dev/null
@@ -1,922 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.FileOutputStream;
-import java.io.FileInputStream;
-import java.io.OutputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.ByteArrayInputStream;
-import java.util.Enumeration;
-import java.util.Hashtable;
-import java.util.Stack;
-import java.util.Vector;
-import java.util.zip.CRC32;
-import java.util.zip.ZipInputStream;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.FileScanner;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.DirectoryScanner;
-import org.apache.tools.ant.types.FileSet;
-import org.apache.tools.ant.types.EnumeratedAttribute;
-import org.apache.tools.ant.types.PatternSet;
-import org.apache.tools.ant.types.ZipFileSet;
-import org.apache.tools.ant.types.ZipScanner;
-import org.apache.tools.ant.util.FileUtils;
-import org.apache.tools.ant.util.SourceFileScanner;
-import org.apache.tools.ant.util.MergingMapper;
-import org.apache.tools.zip.ZipOutputStream;
-import org.apache.tools.zip.ZipEntry;
-
-/**
- * Create a ZIP archive.
- *
- * @author James Davidson <a href="mailto:duncan@x180.com">duncan@x180.com</a>
- * @author Jon S. Stevens <a href="mailto:jon@clearink.com">jon@clearink.com</a>
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- *
- * @since Ant 1.1
- *
- * @ant.task category="packaging"
- */
-public class Zip extends MatchingTask {
-
-    protected File zipFile;
-    private File baseDir;
-    protected Hashtable entries = new Hashtable();
-    private Vector groupfilesets = new Vector();
-    private Vector filesetsFromGroupfilesets = new Vector();
-    protected String duplicate = "add";
-    private boolean doCompress = true;
-    private boolean doUpdate = false;
-    // shadow of the above if the value is altered in execute
-    private boolean savedDoUpdate = false;
-    private boolean doFilesonly = false;
-    protected String archiveType = "zip";
-
-    // For directories:
-    private static final long EMPTY_CRC = new CRC32 ().getValue ();
-    protected String emptyBehavior = "skip";
-    private Vector filesets = new Vector ();
-    protected Hashtable addedDirs = new Hashtable();
-    private Vector addedFiles = new Vector();
-
-    /** 
-     * true when we are adding new files into the Zip file, as opposed
-     * to adding back the unchanged files 
-     */
-    private boolean addingNewFiles = false;
-
-    /**
-     * Encoding to use for filenames, defaults to the platform's
-     * default encoding.
-     */
-    private String encoding;
-
-    /**
-     * This is the name/location of where to
-     * create the .zip file.
-     *
-     * @deprecated Use setDestFile(File) instead.
-     */
-    public void setZipfile(File zipFile) {
-        setDestFile(zipFile);
-    }
-
-    /**
-     * This is the name/location of where to
-     * create the .zip file.
-     * @since Ant 1.5alpha
-     * @deprecated Use setDestFile(File) instead
-     */
-    public void setFile(File file) {
-        setDestFile(file);
-    }
-
-
-    /**
-     * Sets the destfile attribute.
-     * @since Ant 1.5
-     * @param destFile The new destination File
-     */
-    public void setDestFile(File destFile) {
-       this.zipFile = destFile;
-    }
-
-
-    /**
-     * This is the base directory to look in for
-     * things to zip.
-     */
-    public void setBasedir(File baseDir) {
-        this.baseDir = baseDir;
-    }
-
-    /**
-     * Sets whether we want to compress the files or only store them.
-     */
-    public void setCompress(boolean c) {
-        doCompress = c;
-    }
-
-    /**
-     * Emulate Sun's jar utility by not adding parent dirs
-     */
-    public void setFilesonly(boolean f) {
-        doFilesonly = f;
-    }
-
-    /**
-     * Sets whether we want to update the file (if it exists)
-     * or create a new one.
-     */
-    public void setUpdate(boolean c) {
-        doUpdate = c;
-        savedDoUpdate = c;
-    }
-
-    /**
-     * Are we updating an existing archive?
-     */
-    public boolean isInUpdateMode() {
-        return doUpdate;
-    }
-
-    /**
-     * Adds a set of files (nested fileset attribute).
-     */
-    public void addFileset(FileSet set) {
-        filesets.addElement(set);
-    }
-
-    /**
-     * Adds a set of files (nested zipfileset attribute) that can be
-     * read from an archive and be given a prefix/fullpath.
-     */
-    public void addZipfileset(ZipFileSet set) {
-        filesets.addElement(set);
-    }
-
-    /**
-     * Adds a group of zip files (a group of nested filesets).
-     */
-    public void addZipGroupFileset(FileSet set) {
-        groupfilesets.addElement(set);
-    }
-
-    /**
-     * Sets behavior for when a duplicate file is about to be added
-     * Possible values are: <code>keep</code> (keep both
-     * of the files); <code>skip</code> (keep the first version
-     * of the file found); <code>overwrite</code> overwrite the file
-     * with the new file
-     * Default for zip tasks is <code>keep</code>
-     */
-    public void setDuplicate(Duplicate df) {
-        duplicate = df.getValue();
-    }
-
-    /** Possible behaviors when there are no matching files for the task. */
-    public static class WhenEmpty extends EnumeratedAttribute {
-        public String[] getValues() {
-            return new String[] {"fail", "skip", "create"};
-        }
-    }
-
-    /**
-     * Sets behavior of the task when no files match.
-     * Possible values are: <code>fail</code> (throw an exception
-     * and halt the build); <code>skip</code> (do not create
-     * any archive, but issue a warning); <code>create</code>
-     * (make an archive with no entries).
-     * Default for zip tasks is <code>skip</code>;
-     * for jar tasks, <code>create</code>.
-     */
-    public void setWhenempty(WhenEmpty we) {
-        emptyBehavior = we.getValue();
-    }
-
-    /**
-     * Encoding to use for filenames, defaults to the platform's
-     * default encoding.
-     *
-     * <p>For a list of possible values see <a
-     * href="http://java.sun.com/products/jdk/1.2/docs/guide/internat/encoding.doc.html">http://java.sun.com/products/jdk/1.2/docs/guide/internat/encoding.doc.html</a>.</p>
-     */
-    public void setEncoding(String encoding) {
-        this.encoding = encoding;
-    }
-
-    public void execute() throws BuildException {
-        if (baseDir == null && filesets.size() == 0
-            && groupfilesets.size() == 0 && "zip".equals(archiveType)) {
-            throw new BuildException("basedir attribute must be set, "
-                                     + "or at least " 
-                                     + "one fileset must be given!");
-        }
-
-        if (zipFile == null) {
-            throw new BuildException("You must specify the " 
-                                     + archiveType + " file to create!");
-        }
-
-        // Renamed version of original file, if it exists
-        File renamedFile = null;
-        // Whether or not an actual update is required -
-        // we don't need to update if the original file doesn't exist
-
-        addingNewFiles = true;
-        doUpdate = doUpdate && zipFile.exists();
-        if (doUpdate) {
-            FileUtils fileUtils = FileUtils.newFileUtils();
-            renamedFile = 
-                fileUtils.createTempFile("zip", ".tmp",
-                                         fileUtils.getParentFile(zipFile));
-
-            try {
-                if (!zipFile.renameTo(renamedFile)) {
-                    throw new BuildException("Unable to rename old file to "
-                                             + "temporary file");
-                }
-            } catch (SecurityException e) {
-                throw new BuildException("Not allowed to rename old file to "
-                                         + "temporary file");
-            }
-        }
-
-        // Add the files found in groupfileset to fileset
-        for (int i = 0; i < groupfilesets.size(); i++) {
-
-            log("Processing groupfileset ", Project.MSG_VERBOSE);
-            FileSet fs = (FileSet) groupfilesets.elementAt(i);
-            FileScanner scanner = fs.getDirectoryScanner(project);
-            String[] files = scanner.getIncludedFiles();
-            File basedir = scanner.getBasedir();
-            for (int j = 0; j < files.length; j++) {
-
-                log("Adding file " + files[j] + " to fileset", 
-                    Project.MSG_VERBOSE);
-                ZipFileSet zf = new ZipFileSet();
-                zf.setSrc(new File(basedir, files[j]));
-                filesets.addElement(zf);
-                filesetsFromGroupfilesets.addElement(zf);
-            }
-        }
-
-        // Create the scanners to pass to isUpToDate().
-        Vector dss = new Vector();
-        if (baseDir != null) {
-            dss.addElement(getDirectoryScanner(baseDir));
-        }
-        for (int i = 0; i < filesets.size(); i++) {
-            FileSet fs = (FileSet) filesets.elementAt(i);
-            dss.addElement (fs.getDirectoryScanner(project));
-        }
-        int dssSize = dss.size();
-        FileScanner[] scanners = new FileScanner[dssSize];
-        dss.copyInto(scanners);
-
-        boolean success = false;
-        try {
-            // quick exit if the target is up to date
-            // can also handle empty archives
-            if (isUpToDate(scanners, zipFile)) {
-                return;
-            }
-            
-            String action = doUpdate ? "Updating " : "Building ";
-            
-            log(action + archiveType + ": " + zipFile.getAbsolutePath());
-
-            ZipOutputStream zOut =
-                new ZipOutputStream(new FileOutputStream(zipFile));
-            zOut.setEncoding(encoding);
-            try {
-                if (doCompress) {
-                    zOut.setMethod(ZipOutputStream.DEFLATED);
-                } else {
-                    zOut.setMethod(ZipOutputStream.STORED);
-                }
-                initZipOutputStream(zOut);
-
-                // Add the implicit fileset to the archive.
-                if (baseDir != null) {
-                    addFiles(getDirectoryScanner(baseDir), zOut, "", "");
-                }
-                // Add the explicit filesets to the archive.
-                addFiles(filesets, zOut);
-                if (doUpdate) {
-                    addingNewFiles = false;
-                    ZipFileSet oldFiles = new ZipFileSet();
-                    oldFiles.setSrc(renamedFile);
-
-                    for (int i = 0; i < addedFiles.size(); i++) {
-                        PatternSet.NameEntry ne = oldFiles.createExclude();
-                        ne.setName((String) addedFiles.elementAt(i));
-                    }
-                    Vector tmp = new Vector(1);
-                    tmp.addElement(oldFiles);
-                    addFiles(tmp, zOut);
-                }
-                finalizeZipOutputStream(zOut);
-
-                // If we've been successful on an update, delete the
-                // temporary file
-                if (doUpdate) {
-                    if (!renamedFile.delete()) {
-                        log ("Warning: unable to delete temporary file " +
-                             renamedFile.getName(), Project.MSG_WARN);
-                    }
-                }
-                success = true;
-            } finally {
-                // Close the output stream.
-                try {
-                    if (zOut != null) {
-                        zOut.close();
-                    }
-                } catch (IOException ex) {
-                    // If we're in this finally clause because of an
-                    // exception, we don't really care if there's an
-                    // exception when closing the stream. E.g. if it
-                    // throws "ZIP file must have at least one entry",
-                    // because an exception happened before we added
-                    // any files, then we must swallow this
-                    // exception. Otherwise, the error that's reported
-                    // will be the close() error, which is not the
-                    // real cause of the problem.
-                    if (success) {
-                        throw ex;
-                    }
-                }
-            }
-        } catch (IOException ioe) {
-            String msg = "Problem creating " + archiveType + ": " 
-                + ioe.getMessage();
-
-            // delete a bogus ZIP file
-            if (!zipFile.delete()) {
-                msg += " (and the archive is probably corrupt but I could not "
-                    + "delete it)";
-            }
-
-            if (doUpdate) {
-                if (!renamedFile.renameTo(zipFile)) {
-                    msg += " (and I couldn't rename the temporary file " +
-                        renamedFile.getName() + " back)";
-                }
-            }
-
-            throw new BuildException(msg, ioe, location);
-        } finally {
-            cleanUp();
-        }
-    }
-
-    /**
-     * Indicates if the task is adding new files into the archive as opposed to
-     * copying back unchanged files from the backup copy
-     */
-    protected boolean isAddingNewFiles() {
-        return addingNewFiles;
-    }
-
-    /**
-     * Add all files of the given FileScanner to the ZipOutputStream
-     * prependig the given prefix to each filename.
-     *
-     * <p>Ensure parent directories have been added as well.
-     */
-    protected void addFiles(FileScanner scanner, ZipOutputStream zOut,
-                            String prefix, String fullpath) 
-        throws IOException {
-
-        if (prefix.length() > 0 && fullpath.length() > 0) {
-            throw new BuildException("Both prefix and fullpath attributes must"
-                                     + " not be set on the same fileset.");
-        }
-
-        File thisBaseDir = scanner.getBasedir();
-
-        // directories that matched include patterns
-        String[] dirs = scanner.getIncludedDirectories();
-        if (dirs.length > 0 && fullpath.length() > 0) {
-            throw new BuildException("fullpath attribute may only be specified"
-                                     + " for filesets that specify a single"
-                                     + " file.");
-        }
-        for (int i = 0; i < dirs.length; i++) {
-            if ("".equals(dirs[i])) {
-                continue;
-            }
-            String name = dirs[i].replace(File.separatorChar, '/');
-            if (!name.endsWith("/")) {
-                name += "/";
-            }
-            addParentDirs(thisBaseDir, name, zOut, prefix);
-        }
-
-        // files that matched include patterns
-        String[] files = scanner.getIncludedFiles();
-        if (files.length > 1 && fullpath.length() > 0) {
-            throw new BuildException("fullpath attribute may only be specified"
-                                     + " for filesets that specify a single"
-                                     + "file.");
-        }
-        for (int i = 0; i < files.length; i++) {
-            File f = new File(thisBaseDir, files[i]);
-            if (fullpath.length() > 0) {
-                // Add this file at the specified location.
-                addParentDirs(null, fullpath, zOut, "");
-                zipFile(f, zOut, fullpath);
-            } else {
-                // Add this file with the specified prefix.
-                String name = files[i].replace(File.separatorChar, '/');
-                addParentDirs(thisBaseDir, name, zOut, prefix);
-                zipFile(f, zOut, prefix + name);
-            }
-        }
-    }
-
-    protected void addZipEntries(ZipFileSet fs, DirectoryScanner ds,
-                                 ZipOutputStream zOut, String prefix, 
-                                 String fullpath)
-        throws IOException {
-        log("adding zip entries: " + fullpath, Project.MSG_VERBOSE);
-
-        if (prefix.length() > 0 && fullpath.length() > 0) {
-            throw new BuildException("Both prefix and fullpath attributes must"
-                                     + " not be set on the same fileset.");
-        }
-
-        ZipScanner zipScanner = (ZipScanner) ds;
-        File zipSrc = fs.getSrc();
-
-        ZipEntry entry;
-        java.util.zip.ZipEntry origEntry;
-        ZipInputStream in = null;
-        try {
-            in = new ZipInputStream(new FileInputStream(zipSrc));
-
-            while ((origEntry = in.getNextEntry()) != null) {
-                entry = new ZipEntry(origEntry);
-                String vPath = entry.getName();
-                if (zipScanner.match(vPath)) {
-                    if (fullpath.length() > 0) {
-                        addParentDirs(null, fullpath, zOut, "");
-                        zipFile(in, zOut, fullpath, entry.getTime(), zipSrc);
-                    } else {
-                        addParentDirs(null, vPath, zOut, prefix);
-                        if (!entry.isDirectory()) {
-                            zipFile(in, zOut, prefix + vPath, entry.getTime(), 
-                                    zipSrc);
-                        }
-                    }
-                }
-            }
-        } finally {
-            if (in != null) {
-                in.close();
-            }
-        }
-    }
-
-    protected void initZipOutputStream(ZipOutputStream zOut)
-        throws IOException, BuildException {
-    }
-
-    protected void finalizeZipOutputStream(ZipOutputStream zOut)
-        throws IOException, BuildException {
-    }
-
-    /**
-     * Create an empty zip file
-     *
-     * @return true if the file is then considered up to date.
-     */
-    protected boolean createEmptyZip(File zipFile) {
-        // In this case using java.util.zip will not work
-        // because it does not permit a zero-entry archive.
-        // Must create it manually.
-        log("Note: creating empty " + archiveType + " archive " + zipFile, 
-            Project.MSG_INFO);
-        OutputStream os = null;
-        try {
-            os = new FileOutputStream(zipFile);
-            // Cf. PKZIP specification.
-            byte[] empty = new byte[22];
-            empty[0] = 80; // P
-            empty[1] = 75; // K
-            empty[2] = 5;
-            empty[3] = 6;
-            // remainder zeros
-            os.write(empty);
-        } catch (IOException ioe) {
-            throw new BuildException("Could not create empty ZIP archive "
-                                     + "(" + ioe.getMessage() + ")", ioe, 
-                                     location);
-        } finally {
-            if (os != null) {
-                try {
-                    os.close();
-                } catch (IOException e) {
-                }
-            }
-        }
-        return true;
-    }
-
-
-    /**
-     * Check whether the archive is up-to-date; and handle behavior
-     * for empty archives.
-     * @param scanners list of prepared scanners containing files to archive
-     * @param zipFile intended archive file (may or may not exist)
-     * @return true if nothing need be done (may have done something
-     *         already); false if archive creation should proceed
-     * @exception BuildException if it likes
-     */
-    protected boolean isUpToDate(FileScanner[] scanners, File zipFile) 
-        throws BuildException {
-        String[][] fileNames = grabFileNames(scanners);
-        File[] files = grabFiles(scanners, fileNames);
-        if (files.length == 0) {
-            if (emptyBehavior.equals("skip")) {
-                log("Warning: skipping " + archiveType + " archive " + zipFile +
-                    " because no files were included.", Project.MSG_WARN);
-                return true;
-            } else if (emptyBehavior.equals("fail")) {
-                throw new BuildException("Cannot create " + archiveType
-                                         + " archive " + zipFile +
-                                         ": no files were included.", location);
-            } else {
-                // Create.
-                return createEmptyZip(zipFile);
-            }
-        } else {
-            for (int i = 0; i < files.length; ++i) {
-                if (files[i].equals(zipFile)) {
-                    throw new BuildException("A zip file cannot include " 
-                        + "itself", location);
-                }
-            }
-
-            if (!zipFile.exists()) {
-                return false;
-            }
-
-            SourceFileScanner sfs = new SourceFileScanner(this);
-            MergingMapper mm = new MergingMapper();
-            mm.setTo(zipFile.getAbsolutePath());
-            for (int i = 0; i < scanners.length; i++) {
-                if (sfs.restrict(fileNames[i], scanners[i].getBasedir(), null,
-                                 mm).length > 0) {
-                    return false;
-                }
-            }
-            return true;
-        }
-    }
-
-    protected static File[] grabFiles(FileScanner[] scanners) {
-        return grabFiles(scanners, grabFileNames(scanners));
-    }
-
-    protected static File[] grabFiles(FileScanner[] scanners,
-                                      String[][] fileNames) {
-        Vector files = new Vector();
-        for (int i = 0; i < fileNames.length; i++) {
-            File thisBaseDir = scanners[i].getBasedir();
-            for (int j = 0; j < fileNames[i].length; j++) {
-                files.addElement(new File(thisBaseDir, fileNames[i][j]));
-            }
-        }
-        File[] toret = new File[files.size()];
-        files.copyInto(toret);
-        return toret;
-    }
-
-    protected static String[][] grabFileNames(FileScanner[] scanners) {
-        String[][] result = new String[scanners.length][];
-        for (int i = 0; i < scanners.length; i++) {
-            String[] files = scanners[i].getIncludedFiles();
-            String[] dirs = scanners[i].getIncludedDirectories();
-            result[i] = new String[files.length + dirs.length];
-            System.arraycopy(files, 0, result[i], 0, files.length);
-            System.arraycopy(dirs, 0, result[i], files.length, dirs.length);
-        }
-        return result;
-    }
-
-    protected void zipDir(File dir, ZipOutputStream zOut, String vPath)
-        throws IOException {
-        if (addedDirs.get(vPath) != null) {
-            // don't add directories we've already added.
-            // no warning if we try, it is harmless in and of itself
-            return;
-        }
-
-        log("adding directory " + vPath, Project.MSG_VERBOSE);
-        addedDirs.put(vPath, vPath);
-
-        ZipEntry ze = new ZipEntry (vPath);
-        if (dir != null && dir.exists()) {
-            ze.setTime(dir.lastModified());
-        } else {
-            ze.setTime(System.currentTimeMillis());
-        }
-        ze.setSize (0);
-        ze.setMethod (ZipEntry.STORED);
-        // This is faintly ridiculous:
-        ze.setCrc (EMPTY_CRC);
-
-        // this is 040775 | MS-DOS directory flag in reverse byte order
-        ze.setExternalAttributes(0x41FD0010L);
-
-        zOut.putNextEntry (ze);
-    }
-
-    protected void zipFile(InputStream in, ZipOutputStream zOut, String vPath,
-                           long lastModified, File file)
-        throws IOException {
-        if (entries.contains(vPath)) {
-
-            if (duplicate.equals("preserve")) {
-                log(vPath + " already added, skipping", Project.MSG_INFO);
-                return;
-            } else if (duplicate.equals("fail")) {
-                throw new BuildException("Duplicate file " + vPath 
-                                         + " was found and the duplicate "
-                                         + "attribute is 'fail'.");
-            } else {
-                // duplicate equal to add, so we continue
-                log("duplicate file " + vPath 
-                    + " found, adding.", Project.MSG_VERBOSE);
-            }
-        } else {
-            log("adding entry " + vPath, Project.MSG_VERBOSE);
-        }
-
-        entries.put(vPath, vPath);
-
-        ZipEntry ze = new ZipEntry(vPath);
-        ze.setTime(lastModified);
-
-        /*
-         * XXX ZipOutputStream.putEntry expects the ZipEntry to know its
-         * size and the CRC sum before you start writing the data when using
-         * STORED mode.
-         *
-         * This forces us to process the data twice.
-         *
-         * I couldn't find any documentation on this, just found out by try
-         * and error.
-         */
-        if (!doCompress) {
-            long size = 0;
-            CRC32 cal = new CRC32();
-            if (!in.markSupported()) {
-                // Store data into a byte[]
-                ByteArrayOutputStream bos = new ByteArrayOutputStream();
-
-                byte[] buffer = new byte[8 * 1024];
-                int count = 0;
-                do {
-                    size += count;
-                    cal.update(buffer, 0, count);
-                    bos.write(buffer, 0, count);
-                    count = in.read(buffer, 0, buffer.length);
-                } while (count != -1);
-                in = new ByteArrayInputStream(bos.toByteArray());
-
-            } else {
-                in.mark(Integer.MAX_VALUE);
-                byte[] buffer = new byte[8 * 1024];
-                int count = 0;
-                do {
-                    size += count;
-                    cal.update(buffer, 0, count);
-                    count = in.read(buffer, 0, buffer.length);
-                } while (count != -1);
-                in.reset();
-            }
-            ze.setSize(size);
-            ze.setCrc(cal.getValue());
-        }
-
-        zOut.putNextEntry(ze);
-
-        byte[] buffer = new byte[8 * 1024];
-        int count = 0;
-        do {
-            if (count != 0) {
-                zOut.write(buffer, 0, count);
-            }
-            count = in.read(buffer, 0, buffer.length);
-        } while (count != -1);
-        addedFiles.addElement(vPath);
-    }
-
-    protected void zipFile(File file, ZipOutputStream zOut, String vPath)
-        throws IOException {
-        if (file.equals(zipFile)) {
-            throw new BuildException("A zip file cannot include itself", 
-                                     location);
-        }
-
-        FileInputStream fIn = new FileInputStream(file);
-        try {
-            zipFile(fIn, zOut, vPath, file.lastModified(), null);
-        } finally {
-            fIn.close();
-        }
-    }
-
-    /**
-     * Ensure all parent dirs of a given entry have been added.
-     */
-    protected void addParentDirs(File baseDir, String entry,
-                                 ZipOutputStream zOut, String prefix)
-        throws IOException {
-        if (!doFilesonly) {
-            Stack directories = new Stack();
-            int slashPos = entry.length();
-
-            while ((slashPos = entry.lastIndexOf('/', slashPos - 1)) != -1) {
-                String dir = entry.substring(0, slashPos + 1);
-                if (addedDirs.get(prefix + dir) != null) {
-                    break;
-                }
-                directories.push(dir);
-            }
-
-            while (!directories.isEmpty()) {
-                String dir = (String) directories.pop();
-                File f = null;
-                if (baseDir != null) {
-                    f = new File(baseDir, dir);
-                } else {
-                    f = new File(dir);
-                }
-                zipDir(f, zOut, prefix + dir);
-            }
-        }
-    }
-
-    /**
-     * Iterate over the given Vector of (zip)filesets and add
-     * all files to the ZipOutputStream using the given prefix
-     * or fullpath.
-     */
-    protected void addFiles(Vector filesets, ZipOutputStream zOut)
-        throws IOException {
-        // Add each fileset in the Vector.
-        for (int i = 0; i < filesets.size(); i++) {
-            FileSet fs = (FileSet) filesets.elementAt(i);
-            DirectoryScanner ds = fs.getDirectoryScanner(project);
-
-            String prefix = "";
-            String fullpath = "";
-            if (fs instanceof ZipFileSet) {
-                ZipFileSet zfs = (ZipFileSet) fs;
-                prefix = zfs.getPrefix();
-                fullpath = zfs.getFullpath();
-            }
-
-            if (prefix.length() > 0
-                && !prefix.endsWith("/")
-                && !prefix.endsWith("\\")) {
-                prefix += "/";
-            }
-
-            // Need to manually add either fullpath's parent directory, or
-            // the prefix directory, to the archive.
-            if (prefix.length() > 0) {
-                addParentDirs(null, prefix, zOut, "");
-                zipDir(null, zOut, prefix);
-            } else if (fullpath.length() > 0) {
-                addParentDirs(null, fullpath, zOut, "");
-            }
-
-            if (fs instanceof ZipFileSet
-                && ((ZipFileSet) fs).getSrc() != null) {
-                addZipEntries((ZipFileSet) fs, ds, zOut, prefix, fullpath);
-            } else {
-                // Add the fileset.
-                addFiles(ds, zOut, prefix, fullpath);
-            }
-        }
-    }
-
-    /**
-     * Do any clean up necessary to allow this instance to be used again.
-     *
-     * <p>When we get here, the Zip file has been closed and all we
-     * need to do is to reset some globals.</p>
-     *
-     * <p>This method will only reset globals that have been changed
-     * during execute(), it will not alter the attributes or nested
-     * child elements.  If you want to reset the instance so that you
-     * can later zip a completely different set of files, you must use
-     * the reset method.</p>
-     *
-     * @see #reset
-     */
-    protected void cleanUp() {
-        addedDirs.clear();
-        addedFiles.removeAllElements();
-        entries.clear();
-        addingNewFiles = false;
-        doUpdate = savedDoUpdate;
-        Enumeration enum = filesetsFromGroupfilesets.elements();
-        while (enum.hasMoreElements()) {
-            ZipFileSet zf = (ZipFileSet) enum.nextElement();
-            filesets.removeElement(zf);
-        }
-        filesetsFromGroupfilesets.removeAllElements();
-    }
-
-    /**
-     * Makes this instance reset all attributes to their default
-     * values and forget all children.
-     *
-     * @since 1.72, Ant 1.5
-     *
-     * @see #cleanUp
-     */
-    public void reset() {
-        filesets.removeAllElements();
-        zipFile = null;
-        baseDir = null;
-        groupfilesets.removeAllElements();
-        duplicate = "add";
-        archiveType = "zip";
-        doCompress = true;
-        emptyBehavior = "skip";
-        doUpdate = false;
-        doFilesonly = false;
-        encoding = null;
-    }
-
-    /** Possible behaviors when a duplicate file is added. */
-    public static class Duplicate extends EnumeratedAttribute {
-        public String[] getValues() {
-            return new String[] {"add", "preserve", "fail"};
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/compilers/CompilerAdapter.java b/src/main/org/apache/tools/ant/taskdefs/compilers/CompilerAdapter.java
deleted file mode 100644
index 2ef5576..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/compilers/CompilerAdapter.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.compilers;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.taskdefs.Javac;
-
-/**
- * The interface that all compiler adapters must adher to.  
- *
- * <p>A compiler adapter is an adapter that interprets the javac's
- * parameters in preperation to be passed off to the compier this
- * adapter represents.  As all the necessary values are stored in the
- * Javac task itself, the only thing all adapters need is the javac
- * task, the execute command and a parameterless constructor (for
- * reflection).</p>
- *
- * @author Jay Dickon Glanville 
- *         <a href="mailto:jayglanville@home.com">jayglanville@home.com</a>
- * @since Ant 1.3
- */
-
-public interface CompilerAdapter {
-
-    /**
-     * Sets the compiler attributes, which are stored in the Javac task.
-     */
-    void setJavac(Javac attributes);
-
-    /**
-     * Executes the task.
-     *
-     * @return has the compilation been successful
-     */
-    boolean execute() throws BuildException;
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/compilers/CompilerAdapterFactory.java b/src/main/org/apache/tools/ant/taskdefs/compilers/CompilerAdapterFactory.java
deleted file mode 100644
index af99511..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/compilers/CompilerAdapterFactory.java
+++ /dev/null
@@ -1,206 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.compilers;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.util.JavaEnvUtils;
-
-/**
- * Creates the necessary compiler adapter, given basic criteria.
- *
- * @author <a href="mailto:jayglanville@home.com">J D Glanville</a>
- * @since Ant 1.3
- */
-public class CompilerAdapterFactory {
-
-    /** This is a singleton -- can't create instances!! */
-    private CompilerAdapterFactory() {
-    }
-
-    /**
-     * Based on the parameter passed in, this method creates the necessary
-     * factory desired.
-     *
-     * The current mapping for compiler names are as follows:
-     * <ul><li>jikes = jikes compiler
-     * <li>classic, javac1.1, javac1.2 = the standard compiler from JDK
-     * 1.1/1.2
-     * <li>modern, javac1.3, javac1.4 = the compiler of JDK 1.3+
-     * <li>jvc, microsoft = the command line compiler from Microsoft's SDK
-     * for Java / Visual J++
-     * <li>kjc = the kopi compiler</li>
-     * <li>gcj = the gcj compiler from gcc</li>
-     * <li>sj, symantec = the Symantec Java compiler</li>
-     * <li><i>a fully quallified classname</i> = the name of a compiler
-     * adapter
-     * </ul>
-     *
-     * @param compilerType either the name of the desired compiler, or the
-     * full classname of the compiler's adapter.
-     * @param task a task to log through.
-     * @throws BuildException if the compiler type could not be resolved into
-     * a compiler adapter.
-     */
-    public static CompilerAdapter getCompiler(String compilerType, Task task) 
-        throws BuildException {
-            boolean isClassicCompilerSupported = true;
-            //as new versions of java come out, add them to this test
-            if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_4)) {
-                isClassicCompilerSupported = false;
-            }
-
-            if (compilerType.equalsIgnoreCase("jikes")) {
-                return new Jikes();
-            }
-            if (compilerType.equalsIgnoreCase("extJavac")) {
-                return new JavacExternal();
-            }       
-            if (compilerType.equalsIgnoreCase("classic") ||
-                compilerType.equalsIgnoreCase("javac1.1") ||
-                compilerType.equalsIgnoreCase("javac1.2")) {
-                if (isClassicCompilerSupported) {
-                    return new Javac12();
-                } else {
-                    throw new BuildException("This version of java does "
-                                             + "not support the classic "
-                                             + "compiler");
-                }
-
-            }
-            //on java<=1.3 the modern falls back to classic if it is not found
-            //but on java>=1.4 we just bail out early
-            if (compilerType.equalsIgnoreCase("modern") ||
-                compilerType.equalsIgnoreCase("javac1.3") ||
-                compilerType.equalsIgnoreCase("javac1.4")) {
-                // does the modern compiler exist?
-                if (doesModernCompilerExist()) {
-                    return new Javac13();
-                } else {
-                    if (isClassicCompilerSupported) {
-                        task.log("Modern compiler not found - looking for "
-                                 + "classic compiler", Project.MSG_WARN);
-                        return new Javac12();
-                    } else {
-                        throw new BuildException("Unable to find a javac " 
-                                                 + "compiler;\n"
-                                                 + "com.sun.tools.javac.Main "
-                                                 + "is not on the " 
-                                                 + "classpath.\n"
-                                                 + "Perhaps JAVA_HOME does not"
-                                                 + " point to the JDK");
-                    }
-                }
-            }
-
-            if (compilerType.equalsIgnoreCase("jvc") ||
-                compilerType.equalsIgnoreCase("microsoft")) {
-                return new Jvc();
-            }
-            if (compilerType.equalsIgnoreCase("kjc")) {
-                return new Kjc();
-            }
-            if (compilerType.equalsIgnoreCase("gcj")) {
-                return new Gcj();
-            }
-            if (compilerType.equalsIgnoreCase("sj") ||
-                compilerType.equalsIgnoreCase("symantec")) {
-                return new Sj();
-            }
-            return resolveClassName(compilerType);
-        }
-
-    /**
-     * query for the Modern compiler existing
-     * @return true iff classic os on the classpath
-     */ 
-    private static boolean doesModernCompilerExist() {
-        try {
-            Class.forName("com.sun.tools.javac.Main");
-            return true;
-        } catch (ClassNotFoundException cnfe) {
-            return false;
-        }
-    }
-    
-    /**
-     * Tries to resolve the given classname into a compiler adapter.
-     * Throws a fit if it can't.
-     *
-     * @param className The fully qualified classname to be created.
-     * @throws BuildException This is the fit that is thrown if className
-     * isn't an instance of CompilerAdapter.
-     */
-    private static CompilerAdapter resolveClassName(String className)
-        throws BuildException {
-        try {
-            Class c = Class.forName(className);
-            Object o = c.newInstance();
-            return (CompilerAdapter) o;
-        } catch (ClassNotFoundException cnfe) {
-            throw new BuildException("Compiler Adapter '"+className 
-                    + "' can\'t be found.", cnfe);
-        } catch (ClassCastException cce) {
-            throw new BuildException(className + " isn\'t the classname of "
-                    + "a compiler adapter.", cce);
-        } catch (Throwable t) {
-            // for all other possibilities
-            throw new BuildException("Compiler Adapter "+className 
-                    + " caused an interesting exception.", t);
-        }
-    }
-
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/compilers/DefaultCompilerAdapter.java b/src/main/org/apache/tools/ant/taskdefs/compilers/DefaultCompilerAdapter.java
deleted file mode 100644
index cd84262..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/compilers/DefaultCompilerAdapter.java
+++ /dev/null
@@ -1,493 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.compilers;
-
-import org.apache.tools.ant.Location;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.taskdefs.Javac;
-import org.apache.tools.ant.taskdefs.Execute;
-import org.apache.tools.ant.taskdefs.LogStreamHandler;
-import org.apache.tools.ant.types.Path;
-import org.apache.tools.ant.types.Commandline;
-import org.apache.tools.ant.util.FileUtils;
-import org.apache.tools.ant.util.JavaEnvUtils;
-
-import java.io.File;
-import java.io.PrintWriter;
-import java.io.FileWriter;
-import java.io.IOException;
-
-/**
- * This is the default implementation for the CompilerAdapter interface.
- * Currently, this is a cut-and-paste of the original javac task.
- *
- * @author James Davidson <a href="mailto:duncan@x180.com">duncan@x180.com</a>
- * @author Robin Green 
- *         <a href="mailto:greenrd@hotmail.com">greenrd@hotmail.com</a>
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- * @author <a href="mailto:jayglanville@home.com">J D Glanville</a>
- *
- * @since Ant 1.3
- */
-public abstract class DefaultCompilerAdapter implements CompilerAdapter {
-
-    /* jdg - TODO - all these attributes are currently protected, but they
-     * should probably be private in the near future.
-     */
-
-    protected Path src;
-    protected File destDir;
-    protected String encoding;
-    protected boolean debug = false;
-    protected boolean optimize = false;
-    protected boolean deprecation = false;
-    protected boolean depend = false;
-    protected boolean verbose = false;
-    protected String target;
-    protected Path bootclasspath;
-    protected Path extdirs;
-    protected Path compileClasspath;
-    protected Path compileSourcepath;
-    protected Project project;
-    protected Location location;
-    protected boolean includeAntRuntime;
-    protected boolean includeJavaRuntime;
-    protected String memoryInitialSize;
-    protected String memoryMaximumSize;
-
-    protected File[] compileList;
-    protected static String lSep = System.getProperty("line.separator");
-    protected Javac attributes;
-
-    private FileUtils fileUtils = FileUtils.newFileUtils();
-
-    /**
-     * Set the Javac instance which contains the configured compilation
-     * attributes.
-     *
-     * @param attributes a configured Javac task.
-     */
-    public void setJavac(Javac attributes) {
-        this.attributes = attributes;
-        src = attributes.getSrcdir();
-        destDir = attributes.getDestdir();
-        encoding = attributes.getEncoding();
-        debug = attributes.getDebug();
-        optimize = attributes.getOptimize();
-        deprecation = attributes.getDeprecation();
-        depend = attributes.getDepend();
-        verbose = attributes.getVerbose();
-        target = attributes.getTarget();
-        bootclasspath = attributes.getBootclasspath();
-        extdirs = attributes.getExtdirs();
-        compileList = attributes.getFileList();
-        compileClasspath = attributes.getClasspath();
-        compileSourcepath = attributes.getSourcepath();
-        project = attributes.getProject();
-        location = attributes.getLocation();
-        includeAntRuntime = attributes.getIncludeantruntime();
-        includeJavaRuntime = attributes.getIncludejavaruntime();
-        memoryInitialSize = attributes.getMemoryInitialSize();
-        memoryMaximumSize = attributes.getMemoryMaximumSize();
-    }
-
-    /**
-     * Get the Javac task instance associated with this compiler adapter
-     *
-     * @return the configured Javac task instance used by this adapter.
-     */
-    public Javac getJavac() {
-        return attributes;
-    }
-
-    /**
-     * Builds the compilation classpath.
-     *
-     */
-    protected Path getCompileClasspath() {
-        Path classpath = new Path(project);
-
-        // add dest dir to classpath so that previously compiled and
-        // untouched classes are on classpath
-
-        if (destDir != null) {
-            classpath.setLocation(destDir);
-        }
-
-        // Combine the build classpath with the system classpath, in an
-        // order determined by the value of build.classpath
-
-        if (compileClasspath == null) {
-            if (includeAntRuntime) {
-                classpath.addExisting(Path.systemClasspath);
-            }
-        } else {
-            if (includeAntRuntime) {
-                classpath.addExisting(compileClasspath
-                                      .concatSystemClasspath("last"));
-            } else {
-                classpath.addExisting(compileClasspath
-                                      .concatSystemClasspath("ignore"));
-            }
-        }
-
-        if (includeJavaRuntime) {
-            classpath.addJavaRuntime();
-        }
-
-        return classpath;
-    }
-
-    protected Commandline setupJavacCommandlineSwitches(Commandline cmd) {
-        return setupJavacCommandlineSwitches(cmd, false);
-    }
-
-    /**
-     * Does the command line argument processing common to classic and
-     * modern.  Doesn't add the files to compile.
-     */
-    protected Commandline setupJavacCommandlineSwitches(Commandline cmd,
-                                                        boolean useDebugLevel) {
-        Path classpath = getCompileClasspath();
-        // For -sourcepath, use the "sourcepath" value if present.
-        // Otherwise default to the "srcdir" value.
-        Path sourcepath = null;
-        if (compileSourcepath != null) {
-            sourcepath = compileSourcepath;
-        } else {
-            sourcepath = src;
-        }
-
-        String memoryParameterPrefix = assumeJava11() ? "-J-" : "-J-X";
-        if (memoryInitialSize != null) {
-            if (!attributes.isForkedJavac()) {
-                attributes.log("Since fork is false, ignoring "
-                               + "memoryInitialSize setting.", 
-                               Project.MSG_WARN);
-            } else {
-                cmd.createArgument().setValue(memoryParameterPrefix
-                                              + "ms" + memoryInitialSize);
-            }
-        }
-
-        if (memoryMaximumSize != null) {
-            if (!attributes.isForkedJavac()) {
-                attributes.log("Since fork is false, ignoring "
-                               + "memoryMaximumSize setting.",
-                               Project.MSG_WARN);
-            } else {
-                cmd.createArgument().setValue(memoryParameterPrefix
-                                              + "mx" + memoryMaximumSize);
-            }
-        }
-
-        if (attributes.getNowarn()) {
-            cmd.createArgument().setValue("-nowarn");
-        }
-
-        if (deprecation == true) {
-            cmd.createArgument().setValue("-deprecation");
-        }
-
-        if (destDir != null) {
-            cmd.createArgument().setValue("-d");
-            cmd.createArgument().setFile(destDir);
-        }
-
-        cmd.createArgument().setValue("-classpath");
-
-        // Just add "sourcepath" to classpath ( for JDK1.1 )
-        // as well as "bootclasspath" and "extdirs"
-        if (assumeJava11()) {
-            Path cp = new Path(project);
-            /*
-             * XXX - This doesn't mix very well with build.systemclasspath,
-             */
-            if (bootclasspath != null) {
-                cp.append(bootclasspath);
-            }
-            if (extdirs != null) {
-                cp.addExtdirs(extdirs);
-            }
-            cp.append(classpath);
-            cp.append(sourcepath);
-            cmd.createArgument().setPath(cp);
-        } else {
-            cmd.createArgument().setPath(classpath);
-            // If the buildfile specifies sourcepath="", then don't
-            // output any sourcepath.
-            if (sourcepath.size() > 0) {
-                cmd.createArgument().setValue("-sourcepath");
-                cmd.createArgument().setPath(sourcepath);
-            }
-            if (target != null) {
-                cmd.createArgument().setValue("-target");
-                cmd.createArgument().setValue(target);
-            }
-            if (bootclasspath != null) {
-                cmd.createArgument().setValue("-bootclasspath");
-                cmd.createArgument().setPath(bootclasspath);
-            }
-            if (extdirs != null) {
-                cmd.createArgument().setValue("-extdirs");
-                cmd.createArgument().setPath(extdirs);
-            }
-        }
-
-        if (encoding != null) {
-            cmd.createArgument().setValue("-encoding");
-            cmd.createArgument().setValue(encoding);
-        }
-        if (debug) {
-            if (useDebugLevel && !assumeJava11()) {
-                String debugLevel = attributes.getDebugLevel();
-                if (debugLevel != null) {
-                    cmd.createArgument().setValue("-g:" + debugLevel);
-                } else {
-                    cmd.createArgument().setValue("-g");
-                }
-            } else {
-                cmd.createArgument().setValue("-g");
-            }
-        } else if (!assumeJava11()) {
-            cmd.createArgument().setValue("-g:none");
-        }
-        if (optimize) {
-            cmd.createArgument().setValue("-O");
-        }
-
-        if (depend) {
-            if (assumeJava11()) {
-                cmd.createArgument().setValue("-depend");
-            } else if (assumeJava12()) {
-                cmd.createArgument().setValue("-Xdepend");
-            } else {
-                attributes.log("depend attribute is not supported by the "
-                               + "modern compiler", Project.MSG_WARN);
-            }
-        }
-
-        if (verbose) {
-            cmd.createArgument().setValue("-verbose");
-        }
-
-        addCurrentCompilerArgs(cmd);
-
-        return cmd;
-    }
-
-    /**
-     * Does the command line argument processing for modern.  Doesn't
-     * add the files to compile.
-     */
-    protected Commandline setupModernJavacCommandlineSwitches(Commandline cmd) {
-        setupJavacCommandlineSwitches(cmd, true);
-        if (attributes.getSource() != null) {
-            cmd.createArgument().setValue("-source");
-            cmd.createArgument().setValue(attributes.getSource());
-        }
-        return cmd;
-    }
-
-    /**
-     * Does the command line argument processing for modern and adds
-     * the files to compile as well.
-     */
-    protected Commandline setupModernJavacCommand() {
-        Commandline cmd = new Commandline();
-        setupModernJavacCommandlineSwitches(cmd);
-
-        logAndAddFilesToCompile(cmd);
-        return cmd;
-    }
-
-    protected Commandline setupJavacCommand() {
-        return setupJavacCommand(false);
-    }
-
-    /**
-     * Does the command line argument processing for classic and adds
-     * the files to compile as well.
-     */
-    protected Commandline setupJavacCommand(boolean debugLevelCheck) {
-        Commandline cmd = new Commandline();
-        setupJavacCommandlineSwitches(cmd, debugLevelCheck);
-        logAndAddFilesToCompile(cmd);
-        return cmd;
-    }
-
-    /**
-     * Logs the compilation parameters, adds the files to compile and logs the
-     * &qout;niceSourceList&quot;
-     */
-    protected void logAndAddFilesToCompile(Commandline cmd) {
-        attributes.log("Compilation " + cmd.describeArguments(),
-                       Project.MSG_VERBOSE);
-
-        StringBuffer niceSourceList = new StringBuffer("File");
-        if (compileList.length != 1) {
-            niceSourceList.append("s");
-        }
-        niceSourceList.append(" to be compiled:");
-
-        niceSourceList.append(lSep);
-
-        for (int i = 0; i < compileList.length; i++) {
-            String arg = compileList[i].getAbsolutePath();
-            cmd.createArgument().setValue(arg);
-            niceSourceList.append("    " + arg + lSep);
-        }
-
-        attributes.log(niceSourceList.toString(), Project.MSG_VERBOSE);
-    }
-
-    /**
-     * Do the compile with the specified arguments.
-     * @param args - arguments to pass to process on command line
-     * @param firstFileName - index of the first source file in args
-     */
-    protected int executeExternalCompile(String[] args, int firstFileName) {
-        String[] commandArray = null;
-        File tmpFile = null;
-
-        try {
-            /*
-             * Many system have been reported to get into trouble with
-             * long command lines - no, not only Windows ;-).
-             *
-             * POSIX seems to define a lower limit of 4k, so use a temporary
-             * file if the total length of the command line exceeds this limit.
-             */
-            if (Commandline.toString(args).length() > 4096) {
-                PrintWriter out = null;
-                try {
-                    String userDirName = System.getProperty("user.dir");
-                    File userDir = new File(userDirName);
-                    tmpFile = fileUtils.createTempFile("jikes", "", userDir);
-                    out = new PrintWriter(new FileWriter(tmpFile));
-                    for (int i = firstFileName; i < args.length; i++) {
-                        out.println(args[i]);
-                    }
-                    out.flush();
-                    commandArray = new String[firstFileName + 1];
-                    System.arraycopy(args, 0, commandArray, 0, firstFileName);
-                    commandArray[firstFileName] = "@" + tmpFile;
-                } catch (IOException e) {
-                    throw new BuildException("Error creating temporary file", 
-                                             e, location);
-                } finally {
-                    if (out != null) {
-                        try {out.close();} catch (Throwable t) {}
-                    }
-                }
-            } else {
-                commandArray = args;
-            }
-
-            try {
-                Execute exe = new Execute(
-                                  new LogStreamHandler(attributes,
-                                                       Project.MSG_INFO,
-                                                       Project.MSG_WARN));
-                exe.setAntRun(project);
-                exe.setWorkingDirectory(project.getBaseDir());
-                exe.setCommandline(commandArray);
-                exe.execute();
-                return exe.getExitValue();
-            } catch (IOException e) {
-                throw new BuildException("Error running " + args[0]
-                        + " compiler", e, location);
-            }
-        } finally {
-            if (tmpFile != null) {
-                tmpFile.delete();
-            }
-        }
-    }
-
-    /**
-     * Adds the command line arguments specifc to the current implementation.
-     */
-    protected void addCurrentCompilerArgs(Commandline cmd) {
-        cmd.addArguments(getJavac().getCurrentCompilerArgs());
-    }
-
-    /**
-     * Shall we assume JDK 1.1 command line switches?
-     * @since Ant 1.5
-     */
-    protected boolean assumeJava11() {
-        return "javac1.1".equals(attributes.getCompilerVersion()) ||
-            ("classic".equals(attributes.getCompilerVersion()) 
-             && JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_1)) ||
-            ("extJavac".equals(attributes.getCompilerVersion()) 
-             && JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_1));
-    }
-
-    /**
-     * Shall we assume JDK 1.2 command line switches?
-     * @since Ant 1.5
-     */
-    protected boolean assumeJava12() {
-        return "javac1.2".equals(attributes.getCompilerVersion()) ||
-            ("classic".equals(attributes.getCompilerVersion()) 
-             && JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_2)) ||
-            ("extJavac".equals(attributes.getCompilerVersion()) 
-             && JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_2));
-    }
-
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/compilers/Gcj.java b/src/main/org/apache/tools/ant/taskdefs/compilers/Gcj.java
deleted file mode 100644
index 98246c3..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/compilers/Gcj.java
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.compilers;
-
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.types.Commandline;
-import org.apache.tools.ant.types.Path;
-
-/**
- * The implementation of the gcj compiler.
- * This is primarily a cut-and-paste from the jikes.
- *
- * @author <a href="mailto:tora@debian.org">Takashi Okamoto</a>
- * @since Ant 1.4
- */
-public class Gcj extends DefaultCompilerAdapter {
-
-    /**
-     * Performs a compile using the gcj compiler.
-     */
-    public boolean execute() throws BuildException {
-        Commandline cmd;
-        attributes.log("Using gcj compiler", Project.MSG_VERBOSE);
-        cmd = setupGCJCommand();
-
-        int firstFileName = cmd.size();
-        logAndAddFilesToCompile(cmd);
-
-        return 
-            executeExternalCompile(cmd.getCommandline(), firstFileName) == 0;
-    }
-
-    protected Commandline setupGCJCommand() {
-        Commandline cmd = new Commandline();
-        Path classpath = new Path(project);
-
-        // gcj doesn't support bootclasspath dir (-bootclasspath)
-        // so we'll emulate it for compatibility and convenience.
-        if (bootclasspath != null) {
-            classpath.append(bootclasspath);
-        }
-
-        // gcj doesn't support an extension dir (-extdir)
-        // so we'll emulate it for compatibility and convenience.
-        classpath.addExtdirs(extdirs);
-
-        if (bootclasspath == null || bootclasspath.size() == 0) {
-            // no bootclasspath, therefore, get one from the java runtime
-            includeJavaRuntime = true;
-        }
-        classpath.append(getCompileClasspath());
-
-        // Gcj has no option for source-path so we
-        // will add it to classpath.
-        classpath.append(src);
-
-        cmd.setExecutable("gcj");
-
-        if (destDir != null) {
-            cmd.createArgument().setValue("-d");
-            cmd.createArgument().setFile(destDir);
-            
-            if (destDir.mkdirs()) {
-                throw new BuildException("Can't make output directories. "
-                                         + "Maybe permission is wrong. ");
-            };
-        }
-        
-        cmd.createArgument().setValue("-classpath");
-        cmd.createArgument().setPath(classpath);
-
-        if (encoding != null) {
-            cmd.createArgument().setValue("--encoding=" + encoding);
-        }
-        if (debug) {
-            cmd.createArgument().setValue("-g1");
-        }
-        if (optimize) {
-            cmd.createArgument().setValue("-O");
-        }
-
-        /**
-         *  gcj should be set for generate class.
-         */
-        cmd.createArgument().setValue("-C");
-
-        addCurrentCompilerArgs(cmd);
-
-        return cmd;
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/compilers/Javac12.java b/src/main/org/apache/tools/ant/taskdefs/compilers/Javac12.java
deleted file mode 100644
index d124ecd..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/compilers/Javac12.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.compilers;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.taskdefs.LogOutputStream;
-import org.apache.tools.ant.types.Commandline;
-
-import java.io.OutputStream;
-import java.io.IOException;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.Method;
-
-/**
- * The implementation of the javac compiler for JDK 1.2
- * This is primarily a cut-and-paste from the original javac task before it
- * was refactored.
- *
- * @author James Davidson <a href="mailto:duncan@x180.com">duncan@x180.com</a>
- * @author Robin Green 
- *         <a href="mailto:greenrd@hotmail.com">greenrd@hotmail.com</a>
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- * @author <a href="mailto:jayglanville@home.com">J D Glanville</a>
- *
- * @since Ant 1.3
- */
-public class Javac12 extends DefaultCompilerAdapter {
-
-    /**
-     * Run the compilation.
-     *
-     * @exception BuildException if the compilation has problems.
-     */
-    public boolean execute() throws BuildException {
-        attributes.log("Using classic compiler", Project.MSG_VERBOSE);
-        Commandline cmd = setupJavacCommand(true);
-
-        OutputStream logstr = new LogOutputStream(attributes, Project.MSG_WARN);
-        try {
-            // Create an instance of the compiler, redirecting output to
-            // the project log
-            Class c = Class.forName("sun.tools.javac.Main");
-            Constructor cons = 
-                c.getConstructor(new Class[] { OutputStream.class, 
-                                               String.class });
-            Object compiler = cons.newInstance(new Object[] { logstr, 
-                                                              "javac" });
-
-            // Call the compile() method
-            Method compile = c.getMethod("compile", 
-                                         new Class [] { String[].class });
-            Boolean ok = 
-                (Boolean) compile.invoke(compiler, 
-                                        new Object[] {cmd.getArguments()});
-            return ok.booleanValue();
-        } catch (ClassNotFoundException ex) {
-            throw new BuildException("Cannot use classic compiler, as it is "
-                                     + "not available.  A common solution is "
-                                     + "to set the environment variable"
-                                     + " JAVA_HOME to your jdk directory.", 
-                                     location);
-        } catch (Exception ex) {
-            if (ex instanceof BuildException) {
-                throw (BuildException) ex;
-            } else {
-                throw new BuildException("Error starting classic compiler: ", 
-                                         ex, location);
-            }
-        } finally {
-            try {
-                logstr.close();
-            } catch (IOException e) {
-                // plain impossible
-                throw new BuildException(e);
-            }
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/compilers/Javac13.java b/src/main/org/apache/tools/ant/taskdefs/compilers/Javac13.java
deleted file mode 100644
index 6202ac9..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/compilers/Javac13.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.compilers;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-
-import org.apache.tools.ant.types.Commandline;
-
-import java.lang.reflect.Method;
-
-
-/**
- * The implementation of the javac compiler for JDK 1.3
- * This is primarily a cut-and-paste from the original javac task before it
- * was refactored.
- *
- * @author James Davidson <a href="mailto:duncan@x180.com">duncan@x180.com</a>
- * @author Robin Green 
- *         <a href="mailto:greenrd@hotmail.com">greenrd@hotmail.com</a>
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> 
- * @author <a href="mailto:jayglanville@home.com">J D Glanville</a>
- *
- * @since Ant 1.3
- */
-public class Javac13 extends DefaultCompilerAdapter {
-
-    /**
-     * Integer returned by the "Modern" jdk1.3 compiler to indicate success.
-     */
-    private static final int MODERN_COMPILER_SUCCESS = 0;
-
-    /**
-     * Run the compilation.
-     *
-     * @exception BuildException if the compilation has problems.
-     */
-    public boolean execute() throws BuildException {
-        attributes.log("Using modern compiler", Project.MSG_VERBOSE);
-        Commandline cmd = setupModernJavacCommand();
-
-        // Use reflection to be able to build on all JDKs >= 1.1:
-        try {
-            Class c = Class.forName ("com.sun.tools.javac.Main");
-            Object compiler = c.newInstance ();
-            Method compile = c.getMethod ("compile",
-                new Class [] {(new String [] {}).getClass ()});
-            int result = ((Integer) compile.invoke
-                          (compiler, new Object[] {cmd.getArguments()}))
-                .intValue ();
-            return (result == MODERN_COMPILER_SUCCESS);
-        } catch (Exception ex) {
-            if (ex instanceof BuildException) {
-                throw (BuildException) ex;
-            } else {
-                throw new BuildException("Error starting modern compiler", 
-                                         ex, location);
-            }
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/compilers/JavacExternal.java b/src/main/org/apache/tools/ant/taskdefs/compilers/JavacExternal.java
deleted file mode 100644
index 66cc651..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/compilers/JavacExternal.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.compilers;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.types.Commandline;
-
-/**
- * Performs a compile using javac externally.
- *
- * @author Brian Deitte
- * @since Ant 1.4
- */
-public class JavacExternal extends DefaultCompilerAdapter {
-
-    /**
-     * Performs a compile using the Javac externally.
-     */
-    public boolean execute() throws BuildException {
-        attributes.log("Using external javac compiler", Project.MSG_VERBOSE);
-
-        Commandline cmd = new Commandline();
-        cmd.setExecutable(getJavac().getJavacExecutable());
-        setupModernJavacCommandlineSwitches(cmd);
-        int firstFileName = cmd.size();
-        logAndAddFilesToCompile(cmd);
-
-        return 
-            executeExternalCompile(cmd.getCommandline(), firstFileName) == 0;
-    }
-
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/compilers/Jikes.java b/src/main/org/apache/tools/ant/taskdefs/compilers/Jikes.java
deleted file mode 100644
index be43838..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/compilers/Jikes.java
+++ /dev/null
@@ -1,233 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.compilers;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.types.Path;
-import org.apache.tools.ant.types.Commandline;
-
-/**
- * The implementation of the jikes compiler.
- * This is primarily a cut-and-paste from the original javac task before it
- * was refactored.
- *
- * @author James Davidson <a href="mailto:duncan@x180.com">duncan@x180.com</a>
- * @author Robin Green 
- *         <a href="mailto:greenrd@hotmail.com">greenrd@hotmail.com</a>
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> 
- * @author <a href="mailto:jayglanville@home.com">J D Glanville</a>
- * @since Ant 1.3
- */
-public class Jikes extends DefaultCompilerAdapter {
-
-    /**
-     * Performs a compile using the Jikes compiler from IBM..
-     * Mostly of this code is identical to doClassicCompile()
-     * However, it does not support all options like
-     * bootclasspath, extdirs, deprecation and so on, because
-     * there is no option in jikes and I don't understand
-     * what they should do.
-     *
-     * It has been successfully tested with jikes >1.10
-     */
-    public boolean execute() throws BuildException {
-        attributes.log("Using jikes compiler", Project.MSG_VERBOSE);
-
-        Path classpath = new Path(project);
-
-        // Jikes doesn't support bootclasspath dir (-bootclasspath)
-        // so we'll emulate it for compatibility and convenience.
-        if (bootclasspath != null) {
-            classpath.append(bootclasspath);
-        }
-
-        // Jikes doesn't support an extension dir (-extdir)
-        // so we'll emulate it for compatibility and convenience.
-        classpath.addExtdirs(extdirs);
-
-        if (bootclasspath == null || bootclasspath.size() == 0) {
-            // no bootclasspath, therefore, get one from the java runtime
-            includeJavaRuntime = true;
-        } else {
-            // there is a bootclasspath stated.  By default, the
-            // includeJavaRuntime is false.  If the user has stated a
-            // bootclasspath and said to include the java runtime, it's on
-            // their head!
-        }
-        classpath.append(getCompileClasspath());
-
-        // Jikes has no option for source-path so we
-        // will add it to classpath.
-        classpath.append(src);
-
-        // if the user has set JIKESPATH we should add the contents as well
-        String jikesPath = System.getProperty("jikes.class.path");
-        if (jikesPath != null) {
-            classpath.append(new Path(project, jikesPath));
-        }
-        
-        Commandline cmd = new Commandline();
-        cmd.setExecutable("jikes");
-
-        if (deprecation == true) {
-            cmd.createArgument().setValue("-deprecation");
-        }
-
-        if (destDir != null) {
-            cmd.createArgument().setValue("-d");
-            cmd.createArgument().setFile(destDir);
-        }
-        
-        cmd.createArgument().setValue("-classpath");
-        cmd.createArgument().setPath(classpath);
-
-        if (encoding != null) {
-            cmd.createArgument().setValue("-encoding");
-            cmd.createArgument().setValue(encoding);
-        }
-        if (debug) {
-            cmd.createArgument().setValue("-g");
-        }
-        if (optimize) {
-            cmd.createArgument().setValue("-O");
-        }
-        if (verbose) {
-            cmd.createArgument().setValue("-verbose");
-        }
-        if (depend) {
-            cmd.createArgument().setValue("-depend");
-        } 
-        /**
-         * XXX
-         * Perhaps we shouldn't use properties for these
-         * three options (emacs mode, warnings and pedantic),
-         * but include it in the javac directive?
-         */
-
-        /**
-         * Jikes has the nice feature to print error
-         * messages in a form readable by emacs, so
-         * that emacs can directly set the cursor
-         * to the place, where the error occured.
-         */
-        String emacsProperty = project.getProperty("build.compiler.emacs");
-        if (emacsProperty != null && Project.toBoolean(emacsProperty)) {
-            cmd.createArgument().setValue("+E");
-        }
-
-        /**
-         * Jikes issues more warnings that javac, for
-         * example, when you have files in your classpath
-         * that don't exist. As this is often the case, these
-         * warning can be pretty annoying.
-         */
-        String warningsProperty = 
-            project.getProperty("build.compiler.warnings");
-        if (warningsProperty != null) {
-            attributes.log("!! the build.compiler.warnings property is "
-                           + "deprecated. !!", Project.MSG_WARN);
-            attributes.log("!! Use the nowarn attribute instead. !!",
-                           Project.MSG_WARN);
-            if (!Project.toBoolean(warningsProperty)) {
-                cmd.createArgument().setValue("-nowarn");
-            }
-        } if (attributes.getNowarn()) {
-            /* 
-             * FIXME later
-             *
-             * let the magic property win over the attribute for backwards 
-             * compatibility
-             */
-            cmd.createArgument().setValue("-nowarn");
-        }
-
-        /**
-         * Jikes can issue pedantic warnings. 
-         */
-        String pedanticProperty = 
-            project.getProperty("build.compiler.pedantic");
-        if (pedanticProperty != null && Project.toBoolean(pedanticProperty)) {
-            cmd.createArgument().setValue("+P");
-        }
- 
-        /**
-         * Jikes supports something it calls "full dependency
-         * checking", see the jikes documentation for differences
-         * between -depend and +F.
-         */
-        String fullDependProperty = 
-            project.getProperty("build.compiler.fulldepend");
-        if (fullDependProperty != null 
-            && Project.toBoolean(fullDependProperty)) {
-            cmd.createArgument().setValue("+F");
-        }
-
-        if (attributes.getSource() != null) {
-            cmd.createArgument().setValue("-source");
-            cmd.createArgument().setValue(attributes.getSource());
-        }
-
-        addCurrentCompilerArgs(cmd);
-
-        int firstFileName = cmd.size();
-        logAndAddFilesToCompile(cmd);
-
-        return 
-            executeExternalCompile(cmd.getCommandline(), firstFileName) == 0;
-    }
-
-
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/compilers/Jvc.java b/src/main/org/apache/tools/ant/taskdefs/compilers/Jvc.java
deleted file mode 100644
index d0b89b7..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/compilers/Jvc.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.compilers;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.types.Path;
-import org.apache.tools.ant.types.Commandline;
-
-/**
- * The implementation of the jvc compiler from microsoft.
- * This is primarily a cut-and-paste from the original javac task before it
- * was refactored.
- *
- * @author James Davidson <a href="mailto:duncan@x180.com">duncan@x180.com</a>
- * @author Robin Green 
- *         <a href="mailto:greenrd@hotmail.com">greenrd@hotmail.com</a>
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> 
- * @author <a href="mailto:jayglanville@home.com">J D Glanville</a>
- * @since Ant 1.3
- */
-public class Jvc extends DefaultCompilerAdapter {
-
-    /**
-     * Run the compilation.
-     *
-     * @exception BuildException if the compilation has problems.
-     */
-    public boolean execute() throws BuildException {
-        attributes.log("Using jvc compiler", Project.MSG_VERBOSE);
-
-        Path classpath = new Path(project);
-
-        // jvc doesn't support bootclasspath dir (-bootclasspath)
-        // so we'll emulate it for compatibility and convenience.
-        if (bootclasspath != null) {
-            classpath.append(bootclasspath);
-        }
-
-        // jvc doesn't support an extension dir (-extdir)
-        // so we'll emulate it for compatibility and convenience.
-        classpath.addExtdirs(extdirs);
-
-        if (bootclasspath == null || bootclasspath.size() == 0) {
-            // no bootclasspath, therefore, get one from the java runtime
-            includeJavaRuntime = true;
-        } else {
-            // there is a bootclasspath stated.  By default, the
-            // includeJavaRuntime is false.  If the user has stated a
-            // bootclasspath and said to include the java runtime, it's on
-            // their head!
-        }
-        classpath.append(getCompileClasspath());
-
-        // jvc has no option for source-path so we
-        // will add it to classpath.
-        classpath.append(src);
-
-        Commandline cmd = new Commandline();
-        cmd.setExecutable("jvc");
-
-        if (destDir != null) {
-            cmd.createArgument().setValue("/d");
-            cmd.createArgument().setFile(destDir);
-        }
-        
-        // Add the Classpath before the "internal" one.
-        cmd.createArgument().setValue("/cp:p");
-        cmd.createArgument().setPath(classpath);
-
-        // Enable MS-Extensions and ...
-        cmd.createArgument().setValue("/x-");
-        // ... do not display a Message about this.
-        cmd.createArgument().setValue("/nomessage");
-        // Do not display Logo
-        cmd.createArgument().setValue("/nologo");
-
-        if (debug) {
-            cmd.createArgument().setValue("/g");
-        }
-        if (optimize) {
-            cmd.createArgument().setValue("/O");
-        }
-        if (verbose) {
-            cmd.createArgument().setValue("/verbose");
-        }
-
-        addCurrentCompilerArgs(cmd);
-
-        int firstFileName = cmd.size();
-        logAndAddFilesToCompile(cmd);
-
-        return 
-            executeExternalCompile(cmd.getCommandline(), firstFileName) == 0;
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/compilers/Kjc.java b/src/main/org/apache/tools/ant/taskdefs/compilers/Kjc.java
deleted file mode 100644
index 7761879..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/compilers/Kjc.java
+++ /dev/null
@@ -1,175 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.compilers;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-
-import org.apache.tools.ant.types.Commandline;
-import org.apache.tools.ant.types.Path;
-
-
-
-import java.lang.reflect.Method;
-
-/**
- * The implementation of the Java compiler for KJC.
- * This is primarily a cut-and-paste from Jikes.java and
- * DefaultCompilerAdapter.
- *
- * @author <a href="mailto:tora@debian.org">Takashi Okamoto</a> 
- * @since Ant 1.4
- */
-public class Kjc extends DefaultCompilerAdapter {
-
-    /**
-     * Run the compilation.
-     *
-     * @exception BuildException if the compilation has problems.
-     */
-    public boolean execute() throws BuildException {
-        attributes.log("Using kjc compiler", Project.MSG_VERBOSE);
-        Commandline cmd = setupKjcCommand();
-
-        try {
-            Class c = Class.forName("at.dms.kjc.Main");
-
-            // Call the compile() method
-            Method compile = c.getMethod("compile",
-                                         new Class [] { String [].class });
-            Boolean ok = 
-                (Boolean) compile.invoke(null, 
-                                        new Object[] {cmd.getArguments()});
-            return ok.booleanValue();
-        } catch (ClassNotFoundException ex) {
-            throw new BuildException("Cannot use kjc compiler, as it is not "
-                                     + "available. A common solution is to "
-                                     + "set the environment variable CLASSPATH "
-                                     + "to your kjc archive (kjc.jar).", 
-                                     location);
-        } catch (Exception ex) {
-            if (ex instanceof BuildException) {
-                throw (BuildException) ex;
-            } else {
-                throw new BuildException("Error starting kjc compiler: ", 
-                                         ex, location);
-            }
-        }
-    }
-
-    /**
-     * setup kjc command arguments.
-     */
-    protected Commandline setupKjcCommand() {
-        Commandline cmd = new Commandline();
-
-        // generate classpath, because kjc does't support sourcepath.
-        Path classpath = getCompileClasspath();
-
-        if (deprecation == true) {
-            cmd.createArgument().setValue("-deprecation");
-        }
-
-        if (destDir != null) {
-            cmd.createArgument().setValue("-d");
-            cmd.createArgument().setFile(destDir);
-        }
-
-        // generate the clsspath
-        cmd.createArgument().setValue("-classpath");
-
-        Path cp = new Path(project);
-
-        // kjc don't have bootclasspath option.
-        if (bootclasspath != null) {
-            cp.append(bootclasspath);
-        }
-        
-        if (extdirs != null) {
-            cp.addExtdirs(extdirs);
-        }
-        
-        cp.append(classpath);
-        cp.append(src);
-        
-        cmd.createArgument().setPath(cp);
-        
-        // kjc-1.5A doesn't support -encoding option now.
-        // but it will be supported near the feature.
-        if (encoding != null) {
-            cmd.createArgument().setValue("-encoding");
-            cmd.createArgument().setValue(encoding);
-        }
-        
-        if (debug) {
-            cmd.createArgument().setValue("-g");
-        }
-        
-        if (optimize) {
-            cmd.createArgument().setValue("-O2");
-        }
-
-        if (verbose) {
-            cmd.createArgument().setValue("-verbose");
-        }
-
-        addCurrentCompilerArgs(cmd);
-
-        logAndAddFilesToCompile(cmd);
-        return cmd;
-    }
-}
-
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/compilers/Sj.java b/src/main/org/apache/tools/ant/taskdefs/compilers/Sj.java
deleted file mode 100644
index 76cb4b3..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/compilers/Sj.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.compilers;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.types.Commandline;
-
-/**
- * The implementation of the sj compiler.
- * Uses the defaults for DefaultCompilerAdapter
- * 
- * @author <a href="mailto:don@bea.com">Don Ferguson</a>
- * @since Ant 1.4
- */
-public class Sj extends DefaultCompilerAdapter {
-
-    /**
-     * Performs a compile using the sj compiler from Symantec.
-     */
-    public boolean execute() throws BuildException {
-        attributes.log("Using symantec java compiler", Project.MSG_VERBOSE);
-
-        Commandline cmd = setupJavacCommand();
-        cmd.setExecutable("sj");
-
-        int firstFileName = cmd.size() - compileList.length;
-
-        return 
-            executeExternalCompile(cmd.getCommandline(), firstFileName) == 0;
-    }
-
-
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/condition/And.java b/src/main/org/apache/tools/ant/taskdefs/condition/And.java
deleted file mode 100644
index 82a67f9..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/condition/And.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.condition;
-
-import java.util.Enumeration;
-
-import org.apache.tools.ant.BuildException;
-
-/**
- * &lt;and&gt; condition container.
- *
- * <p>Iterates over all conditions and returns false as soon as one
- * evaluates to false.</p>
- * 
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- * @since Ant 1.4
- * @version $Revision$
- */
-public class And extends ConditionBase implements Condition {
-
-    public boolean eval() throws BuildException {
-        Enumeration enum = getConditions();
-        while (enum.hasMoreElements()) {
-            Condition c = (Condition) enum.nextElement();
-            if (!c.eval()) {
-                return false;
-            }
-        }
-        return true;
-    }
-
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/condition/Condition.java b/src/main/org/apache/tools/ant/taskdefs/condition/Condition.java
deleted file mode 100644
index 86542bf..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/condition/Condition.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.condition;
-
-import org.apache.tools.ant.BuildException;
-
-/**
- * Interface for conditions to use inside the &lt;condition&gt; task.
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- * @version $Revision$
- */
-public interface Condition {
-    /**
-     * Is this condition true?
-     */
-    boolean eval() throws BuildException;
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/condition/ConditionBase.java b/src/main/org/apache/tools/ant/taskdefs/condition/ConditionBase.java
deleted file mode 100644
index 79c51b0..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/condition/ConditionBase.java
+++ /dev/null
@@ -1,201 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.condition;
-
-import java.util.Enumeration;
-import java.util.Vector;
-
-
-import org.apache.tools.ant.ProjectComponent;
-import org.apache.tools.ant.taskdefs.Available;
-import org.apache.tools.ant.taskdefs.Checksum;
-import org.apache.tools.ant.taskdefs.UpToDate;
-
-/**
- * Baseclass for the &lt;condition&gt; task as well as several
- * conditions - ensures that the types of conditions inside the task
- * and the "container" conditions are in sync.
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- * @since Ant 1.4
- * @version $Revision$
- */
-public abstract class ConditionBase extends ProjectComponent {
-    private Vector conditions = new Vector();
-
-    /**
-     * Count the conditions.
-     *
-     * @since 1.1
-     */
-    protected int countConditions() {
-        return conditions.size();
-    }
-
-    /**
-     * Iterate through all conditions.
-     *
-     * @since 1.1
-     */
-    protected final Enumeration getConditions() {
-        return conditions.elements();
-    }
-
-    /**
-     * Add an &lt;available&gt; condition.
-     *
-     * @since 1.1
-     */
-    public void addAvailable(Available a) {conditions.addElement(a);}
-
-    /**
-     * Add an &lt;checksum&gt; condition.
-     *
-     * @since 1.4, Ant 1.5
-     */
-    public void addChecksum(Checksum c) {conditions.addElement(c);}
-
-    /**
-     * Add an &lt;uptodate&gt; condition.
-     *
-     * @since 1.1
-     */
-    public void addUptodate(UpToDate u) {conditions.addElement(u);}
-
-    /**
-     * Add an &lt;not&gt; condition "container".
-     *
-     * @since 1.1
-     */
-    public void addNot(Not n) {conditions.addElement(n);}
-
-    /**
-     * Add an &lt;and&gt; condition "container".
-     *
-     * @since 1.1
-     */
-    public void addAnd(And a) {conditions.addElement(a);}
-
-    /**
-     * Add an &lt;or&gt; condition "container".
-     *
-     * @since 1.1
-     */
-    public void addOr(Or o) {conditions.addElement(o);}
-
-    /**
-     * Add an &lt;equals&gt; condition.
-     *
-     * @since 1.1
-     */
-    public void addEquals(Equals e) {conditions.addElement(e);}
-
-    /**
-     * Add an &lt;os&gt; condition.
-     *
-     * @since 1.1
-     */
-    public void addOs(Os o) {conditions.addElement(o);}
-
-    /**
-     * Add an &lt;isset&gt; condition.
-     *
-     * @since Ant 1.5
-     */
-    public void addIsSet(IsSet i) {conditions.addElement(i);}
-
-    /**
-     * Add an &lt;http&gt; condition.
-     *
-     * @since Ant 1.5
-     */
-    public void addHttp(Http h) {conditions.addElement(h);}
-
-    /**
-     * Add a &lt;socket&gt; condition.
-     *
-     * @since Ant 1.5
-     */
-    public void addSocket(Socket s) {conditions.addElement(s);}
-
-    /**
-     * Add a &lt;filesmatch&gt; condition.
-     *
-     * @since Ant 1.5
-     */
-    public void addFilesMatch(FilesMatch test) {conditions.addElement(test);}
-    
-    /**
-     * Add a &lt;contains&gt; condition.
-     *
-     * @since Ant 1.5
-     */
-    public void addContains(Contains test) {conditions.addElement(test);}
-
-    /**
-     * Add a &lt;istrue&gt; condition.
-     *
-     * @since Ant 1.5
-     */
-    public void addIsTrue(IsTrue test) {conditions.addElement(test);}
-
-    /**
-     * Add a &lt;isfalse&gt; condition.
-     *
-     * @since Ant 1.5
-     */
-    public void addIsFalse(IsFalse test) {conditions.addElement(test);}
-      
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/condition/Contains.java b/src/main/org/apache/tools/ant/taskdefs/condition/Contains.java
deleted file mode 100644
index c6d56e5..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/condition/Contains.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.condition;
-
-import org.apache.tools.ant.BuildException;
-
-/**
- * Is one string part of another string?
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- * @version $Revision$
- *
- * @since Ant 1.5
- */
-public class Contains implements Condition {
-
-    private String string, subString;
-    private boolean caseSensitive = true;
-
-    /**
-     * The string to search in.
-     *
-     * @since 1.1, Ant 1.5
-     */
-    public void setString(String a1) {
-        string = a1;
-    }
-
-    /**
-     * The string to search for.
-     *
-     * @since 1.1, Ant 1.5
-     */
-    public void setSubstring(String a2) {
-        subString = a2;
-    }
-
-    /**
-     * Whether to search ignoring case or not.
-     * 
-     * @since 1.1, Ant 1.5
-     */
-    public void setCasesensitive(boolean b) {
-        caseSensitive = b;
-    }
-
-    /** 
-     * @since 1.1, Ant 1.5
-     */
-    public boolean eval() throws BuildException {
-        if (string == null || subString == null) {
-            throw new BuildException("both string and substring are required "
-                                     + "in contains");
-        }
-
-        return caseSensitive 
-            ? string.indexOf(subString) > -1
-            : string.toLowerCase().indexOf(subString.toLowerCase()) > -1;
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/condition/Equals.java b/src/main/org/apache/tools/ant/taskdefs/condition/Equals.java
deleted file mode 100644
index 0a70d83..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/condition/Equals.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.condition;
-
-import org.apache.tools.ant.BuildException;
-
-/**
- * Simple String comparison condition.
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- * @since Ant 1.4
- * @version $Revision$
- */
-public class Equals implements Condition {
-
-    private String arg1, arg2;
-    private boolean trim = false;
-    private boolean caseSensitive = true;
-
-    public void setArg1(String a1) {
-        arg1 = a1;
-    }
-
-    public void setArg2(String a2) {
-        arg2 = a2;
-    }
-
-    /**
-     * Should we want to trim the arguments before comparing them?
-     *
-     * @since Revision: 1.3, Ant 1.5
-     */
-    public void setTrim(boolean b) {
-        trim = b;
-    }
-
-    /**
-     * Should the comparison be case sensitive?
-     *
-     * @since Revision: 1.3, Ant 1.5
-     */
-    public void setCasesensitive(boolean b) {
-        caseSensitive = b;
-    }
-
-    public boolean eval() throws BuildException {
-        if (arg1 == null || arg2 == null) {
-            throw new BuildException("both arg1 and arg2 are required in "
-                                     + "equals");
-        }
-
-        if (trim) {
-            arg1 = arg1.trim();
-            arg2 = arg2.trim();
-        }
-        
-        return caseSensitive ? arg1.equals(arg2) : arg1.equalsIgnoreCase(arg2);
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/condition/FilesMatch.java b/src/main/org/apache/tools/ant/taskdefs/condition/FilesMatch.java
deleted file mode 100644
index 18a89ab..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/condition/FilesMatch.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
- package org.apache.tools.ant.taskdefs.condition;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.util.FileUtils;
-import java.io.File;
-import java.io.IOException;
-
-/**
- * Compares two files for bitwise equality based on size and
- * content. Timestamps are not looked at at all.
- *
- * @author Steve Loughran
- * @version $Revision$
- * @since Ant 1.5
- */
-
-public class FilesMatch implements Condition {
-
-    /**
-     * files to compare
-     */
-    private File file1, file2;
-
-    /**
-     * Helper that provides the file comparison method.
-     */
-    private FileUtils fu = FileUtils.newFileUtils();
-
-    /**
-     * Sets the File1 attribute
-     *
-     * @param file1 The new File1 value
-     */
-    public void setFile1(File file1) {
-        this.file1 = file1;
-    }
-
-
-    /**
-     * Sets the File2 attribute
-     *
-     * @param file2 The new File2 value
-     */
-    public void setFile2(File file2) {
-        this.file2 = file2;
-    }
-
-    /**
-     * comparision method of the interface
-     *
-     * @return true if the files are equal
-     * @exception BuildException if it all went pear-shaped
-     */
-    public boolean eval()
-        throws BuildException {
-
-        //validate
-        if (file1 == null || file2 == null) {
-            throw new BuildException("both file1 and file2 are required in "
-                                     + "filesmatch");
-        }
-
-        //#now match the files
-        boolean matches = false;
-        try {
-            matches = fu.contentEquals(file1, file2);
-        } catch (IOException ioe) {
-            throw new BuildException("when comparing files: " 
-                + ioe.getMessage(), ioe);
-        }
-        return matches;
-    }
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/condition/Http.java b/src/main/org/apache/tools/ant/taskdefs/condition/Http.java
deleted file mode 100644
index 3849dfb..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/condition/Http.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.condition;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.ProjectComponent;
-
-
-import java.net.MalformedURLException;
-import java.net.HttpURLConnection;
-import java.net.URLConnection;
-import java.net.URL;
-
-/**
- * Condition to wait for a HTTP request to succeed. Its attribute(s) are:
- *   url - the URL of the request.
- *
- * @author <a href="mailto:denis@network365.com">Denis Hennessy</a>
- * @since Ant 1.5
- */
-public class Http extends ProjectComponent implements Condition {
-    private String spec = null;
-
-    public void setUrl(String url) {
-        spec = url;
-    }
-
-    public boolean eval() throws BuildException {
-        if (spec == null) {
-            throw new BuildException("No url specified in http condition");
-        }
-        log("Checking for " + spec, Project.MSG_VERBOSE);
-        try {
-            URL url = new URL(spec);
-            try {
-                URLConnection conn = url.openConnection();
-                if (conn instanceof HttpURLConnection) {
-                    HttpURLConnection http = (HttpURLConnection) conn;
-                    int code = http.getResponseCode();
-                    log("Result code for " + spec + " was " + code, 
-                        Project.MSG_VERBOSE);
-                    if (code > 0 && code < 500) {
-                        return true;
-                    } else {
-                        return false;
-                    }
-                }
-            } catch (java.io.IOException e) {
-                return false;
-            }
-        } catch (MalformedURLException e) {
-            throw new BuildException("Badly formed URL: " + spec, e);
-        }
-        return true;
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/condition/IsFalse.java b/src/main/org/apache/tools/ant/taskdefs/condition/IsFalse.java
deleted file mode 100644
index 3bea151..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/condition/IsFalse.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.condition;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.ProjectComponent;
-
-/**
- * Condition that tests whether a given string evals to false
- *
- * @author Steve Loughran
- * @since Ant 1.5
- */
-public class IsFalse extends ProjectComponent implements Condition {
-    /**  
-     * what we eval
-     */ 
-    private Boolean value=null;
-
-    /**
-     * set the value to be tested; let ant eval it to true/false
-     */ 
-    public void setValue(boolean value) {
-        this.value = new Boolean(value);
-    }
-
-    /**
-     * return the inverted value;
-     * @throws BuildException if someone forgot to spec a value
-     */ 
-    public boolean eval() throws BuildException {
-        if (value == null) {
-            throw new BuildException("Nothing to test for falsehood");
-        }
-        return !value.booleanValue();
-    }
-
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/condition/IsSet.java b/src/main/org/apache/tools/ant/taskdefs/condition/IsSet.java
deleted file mode 100644
index b280e06..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/condition/IsSet.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.condition;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.ProjectComponent;
-
-/**
- * Condition that tests whether a given property has been set.
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- * @since Ant 1.5
- * @version $Revision$
- */
-public class IsSet extends ProjectComponent implements Condition {
-    private String property;
-
-    public void setProperty(String p) {property = p;}
-
-    public boolean eval() throws BuildException {
-        if (property == null) {
-            throw new BuildException("No property specified for isset "
-                                     + "condition");
-        }
-        
-        return getProject().getProperty(property) != null;
-    }
-
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/condition/IsTrue.java b/src/main/org/apache/tools/ant/taskdefs/condition/IsTrue.java
deleted file mode 100644
index ee2b3f1..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/condition/IsTrue.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.condition;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.ProjectComponent;
-
-/**
- * Condition that tests whether a given string evals to true
- *
- * @author Steve Loughran
- * @since Ant 1.5
- */
-public class IsTrue extends ProjectComponent implements Condition {
-    /**  
-     * what we eval
-     */ 
-    private Boolean value=null;
-
-    /**
-     * set the value to be tested; let ant eval it to true/false
-     */ 
-    public void setValue(boolean value) {
-        this.value = new Boolean(value);
-    }
-
-    /**
-     * return the value;
-     * @throws BuildException if someone forgot to spec a value
-     */ 
-    public boolean eval() throws BuildException {
-        if (value == null) {
-            throw new BuildException("Nothing to test for truth");
-        }
-        return value.booleanValue();
-    }
-
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/condition/Not.java b/src/main/org/apache/tools/ant/taskdefs/condition/Not.java
deleted file mode 100644
index 75a07c7..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/condition/Not.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.condition;
-
-import org.apache.tools.ant.BuildException;
-
-/**
- * &lt;not&gt; condition.
- *
- * Evaluates to true if the single condition nested into it is false
- * and vice versa.
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- * @since Ant 1.4
- * @version $Revision$
- */
-public class Not extends ConditionBase implements Condition {
-
-    public boolean eval() throws BuildException {
-        if (countConditions() > 1) {
-            throw new BuildException("You must not nest more than one condition into <not>");
-        }
-        if (countConditions() < 1) {
-            throw new BuildException("You must nest a condition into <not>");
-        }
-        return !((Condition) getConditions().nextElement()).eval();
-    }
-
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/condition/Or.java b/src/main/org/apache/tools/ant/taskdefs/condition/Or.java
deleted file mode 100644
index 3e312d0..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/condition/Or.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.condition;
-
-import java.util.Enumeration;
-
-import org.apache.tools.ant.BuildException;
-
-/**
- * &lt;or&gt; condition container.
- *
- * <p>Iterates over all conditions and returns true as soon as one
- * evaluates to true.</p>
- * 
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- * @since Ant 1.4
- * @version $Revision$
- */
-public class Or extends ConditionBase implements Condition {
-
-    public boolean eval() throws BuildException {
-        Enumeration enum = getConditions();
-        while (enum.hasMoreElements()) {
-            Condition c = (Condition) enum.nextElement();
-            if (c.eval()) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/condition/Os.java b/src/main/org/apache/tools/ant/taskdefs/condition/Os.java
deleted file mode 100644
index 7e6d254..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/condition/Os.java
+++ /dev/null
@@ -1,243 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.condition;
-
-import org.apache.tools.ant.BuildException;
-
-import java.util.Locale;
-
-/**
- * Condition that tests the OS type.
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- * @author <a href="mailto:umagesh@apache.org">Magesh Umasankar</a>
- * @since Ant 1.4
- * @version $Revision$
- */
-public class Os implements Condition {
-    private static final String osName =
-        System.getProperty("os.name").toLowerCase(Locale.US);
-    private static final String osArch =
-        System.getProperty("os.arch").toLowerCase(Locale.US);
-    private static final String osVersion =
-        System.getProperty("os.version").toLowerCase(Locale.US);
-    private static final String pathSep = System.getProperty("path.separator");
-
-    private String family;
-    private String name;
-    private String version;
-    private String arch;
-
-    public Os() {}
-
-    public Os(String family) {
-        setFamily(family);
-    }
-
-    /**
-     * Sets the desired OS family type
-     *
-     * @param f      The OS family type desired<br />
-     *               Possible values:<br />
-     *               <ul>
-     *               <li>dos</li>
-     *               <li>mac</li>
-     *               <li>netware</li>
-     *               <li>os/2</li>
-     *               <li>unix</li>
-     *               <li>windows</li>
-     *               <li>win9x</li>
-     *               </ul>
-     */
-    public void setFamily(String f) {family = f.toLowerCase(Locale.US);}
-
-    /**
-     * Sets the desired OS name
-     *
-     * @param name   The OS name
-     */
-    public void setName(String name) {
-        this.name = name.toLowerCase(Locale.US);
-    }
-
-    /**
-     * Sets the desired OS architecture
-     *
-     * @param arch   The OS architecture
-     */
-    public void setArch(String arch) {
-        this.arch = arch.toLowerCase(Locale.US);
-    }
-
-    /**
-     * Sets the desired OS version
-     *
-     * @param version   The OS version
-     */
-    public void setVersion(String version) {
-        this.version = version.toLowerCase(Locale.US);
-    }
-
-    /**
-     * Determines if the OS on which Ant is executing matches the type of
-     * that set in setFamily.
-     * @see Os#setFamily(String)
-     */
-    public boolean eval() throws BuildException {
-        return isOs(family, name, arch, version);
-    }
-
-    /**
-     * Determines if the OS on which Ant is executing matches the
-     * given OS family.
-     *
-     * @since 1.5
-     */
-    public static boolean isFamily(String family) {
-        return isOs(family, null, null, null);
-    }
-
-    /**
-     * Determines if the OS on which Ant is executing matches the
-     * given OS name.
-     *
-     * @since 1.7
-     */
-    public static boolean isName(String name) {
-        return isOs(null, name, null, null);
-    }
-
-    /**
-     * Determines if the OS on which Ant is executing matches the
-     * given OS architecture.
-     *
-     * @since 1.7
-     */
-    public static boolean isArch(String arch) {
-        return isOs(null, null, arch, null);
-    }
-
-    /**
-     * Determines if the OS on which Ant is executing matches the
-     * given OS version.
-     *
-     * @since 1.7
-     */
-    public static boolean isVersion(String version) {
-        return isOs(null, null, null, version);
-    }
-
-    /**
-     * Determines if the OS on which Ant is executing matches the
-     * given OS family, name, architecture and version
-     *
-     * @param family   The OS family
-     * @param name   The OS name
-     * @param arch   The OS architecture
-     * @param version   The OS version
-     *
-     * @since 1.7
-     */
-    public static boolean isOs(String family, String name, String arch,
-                               String version) {
-        boolean retValue = false;
-
-        if (family != null || name != null || arch != null
-            || version != null) {
-
-            boolean isFamily = true;
-            boolean isName = true;
-            boolean isArch = true;
-            boolean isVersion = true;
-
-            if (family != null) {
-                if (family.equals("windows")) {
-                    isFamily = osName.indexOf("windows") > -1;
-                } else if (family.equals("os/2")) {
-                    isFamily = osName.indexOf("os/2") > -1;
-                } else if (family.equals("netware")) {
-                    isFamily = osName.indexOf("netware") > -1;
-                } else if (family.equals("dos")) {
-                    isFamily = pathSep.equals(";") && !isFamily("netware");
-                } else if (family.equals("mac")) {
-                    isFamily = osName.indexOf("mac") > -1;
-                } else if (family.equals("unix")) {
-                    isFamily = pathSep.equals(":")
-                        && (!isFamily("mac") || osName.endsWith("x"));
-                } else if (family.equals("win9x")) {
-                    isFamily = isFamily("windows") &&
-                        !(osName.indexOf("nt") >= 0 ||
-                          osName.indexOf("2000") >= 0 ||
-                          osName.indexOf("xp") >= 0);
-                } else {
-                    throw new BuildException(
-                        "Don\'t know how to detect os family \""
-                        + family + "\"");
-                }
-            }
-            if (name != null) {
-                isName = name.equals(osName);
-            }
-            if (arch != null) {
-                isArch = arch.equals(osArch);
-            }
-            if (version != null) {
-                isVersion = version.equals(osVersion);
-            }
-            retValue = isFamily && isName && isArch && isVersion;
-        }
-        return retValue;
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/condition/Socket.java b/src/main/org/apache/tools/ant/taskdefs/condition/Socket.java
deleted file mode 100644
index ed04d65..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/condition/Socket.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.condition;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.ProjectComponent;
-
-import java.io.IOException;
-
-/**
- * Condition to wait for a TCP/IP socket to have a listener. Its attribute(s) are:
- *   server - the name of the server.
- *   port - the port number of the socket.
- *
- * @author <a href="mailto:denis@network365.com">Denis Hennessy</a>
- * @since Ant 1.5
- */
-public class Socket extends ProjectComponent implements Condition {
-    private String server = null;
-    private int port = 0;
-
-    public void setServer(String server) {
-        this.server = server;
-    }
-
-    public void setPort(int port) {
-        this.port = port;
-    }
-
-    public boolean eval() throws BuildException {
-        if (server == null) {
-            throw new BuildException("No server specified in socket "
-                                     + "condition");
-        }
-        if (port == 0) {
-            throw new BuildException("No port specified in socket condition");
-        }
-        log("Checking for listener at " + server + ":" + port, 
-            Project.MSG_VERBOSE);
-        try {
-            java.net.Socket socket = new java.net.Socket(server, port);
-        } catch (IOException e) {
-            return false;
-        }
-        return true;
-    }
-
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/cvslib/CVSEntry.java b/src/main/org/apache/tools/ant/taskdefs/cvslib/CVSEntry.java
deleted file mode 100644
index 3c8d63c..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/cvslib/CVSEntry.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.cvslib;
-
-import java.util.Vector;
-import java.util.Date;
-
-/**
- * CVS Entry.
- *
- * @author <a href="mailto:jeff.martin@synamic.co.uk">Jeff Martin</a>
- * @author <a href="mailto:peter@apache.org">Peter Donald</a>
- * @version $Revision$ $Date$
- */
-class CVSEntry {
-    private Date m_date;
-    private String m_author;
-    private final String m_comment;
-    private final Vector m_files = new Vector();
-
-    public CVSEntry(Date date, String author, String comment) {
-        m_date = date;
-        m_author = author;
-        m_comment = comment;
-    }
-
-    public void addFile(String file, String revision) {
-        m_files.addElement(new RCSFile(file, revision));
-    }
-
-    public void addFile(String file, String revision, String previousRevision) {
-        m_files.addElement(new RCSFile(file, revision, previousRevision));
-    }
-
-    Date getDate() {
-        return m_date;
-    }
-
-    void setAuthor(final String author) {
-        m_author = author;
-    }
-    
-    String getAuthor() {
-        return m_author;
-    }
-
-    String getComment() {
-        return m_comment;
-    }
-
-    Vector getFiles() {
-        return m_files;
-    }
-
-    public String toString() {
-        return getAuthor() + "\n" + getDate() + "\n" + getFiles() + "\n" 
-            + getComment();
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/cvslib/ChangeLogParser.java b/src/main/org/apache/tools/ant/taskdefs/cvslib/ChangeLogParser.java
deleted file mode 100644
index 47e4967..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/cvslib/ChangeLogParser.java
+++ /dev/null
@@ -1,256 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.cvslib;
-
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.Enumeration;
-import java.util.Hashtable;
-
-/**
- * A class used to parse the output of the CVS log command.
- *
- * @author <a href="mailto:peter@apache.org">Peter Donald</a>
- * @version $Revision$ $Date$
- */
-class ChangeLogParser {
-    //private static final int GET_ENTRY = 0;
-    private static final int GET_FILE = 1;
-    private static final int GET_DATE = 2;
-    private static final int GET_COMMENT = 3;
-    private static final int GET_REVISION = 4;
-    private static final int GET_PREVIOUS_REV = 5;
-
-    /** input format for dates read in from cvs log */
-    private static final SimpleDateFormat c_inputDate 
-        = new SimpleDateFormat("yyyy/MM/dd hh:mm:ss");
-
-    //The following is data used while processing stdout of CVS command
-    private String m_file;
-    private String m_date;
-    private String m_author;
-    private String m_comment;
-    private String m_revision;
-    private String m_previousRevision;
-
-    private int m_status = GET_FILE;
-
-    /** rcs entries */
-    private final Hashtable m_entries = new Hashtable();
-
-    /**
-     * Get a list of rcs entrys as an array.
-     *
-     * @return a list of rcs entrys as an array
-     */
-    CVSEntry[] getEntrySetAsArray() {
-        final CVSEntry[] array = new CVSEntry[ m_entries.size() ];
-        Enumeration enum = m_entries.elements();
-        int i = 0;
-        while (enum.hasMoreElements()) {
-            array[i++] = (CVSEntry) enum.nextElement();
-        }
-        return array;
-    }
-
-    /**
-     * Receive notification about the process writing
-     * to standard output.
-     */
-    public void stdout(final String line) {
-        switch(m_status) {
-            case GET_FILE:
-                processFile(line);
-                break;
-            case GET_REVISION:
-                processRevision(line);
-                break;
-
-            case GET_DATE:
-                processDate(line);
-                break;
-
-            case GET_COMMENT:
-                processComment(line);
-                break;
-
-            case GET_PREVIOUS_REV:
-                processGetPreviousRevision(line);
-                break;
-        }
-    }
-
-    /**
-     * Process a line while in "GET_COMMENT" state.
-     *
-     * @param line the line
-     */
-    private void processComment(final String line) {
-        final String lineSeparator = System.getProperty("line.separator");
-        if (line.startsWith("======")) {
-            //We have ended changelog for that particular file
-            //so we can save it
-            final int end 
-                = m_comment.length() - lineSeparator.length(); //was -1
-            m_comment = m_comment.substring(0, end);
-            saveEntry();
-            m_status = GET_FILE;
-        } else if (line.startsWith("----------------------------")) {
-            final int end 
-                = m_comment.length() - lineSeparator.length(); //was -1
-            m_comment = m_comment.substring(0, end);
-            m_status = GET_PREVIOUS_REV;
-        } else {
-            m_comment += line + lineSeparator;
-        }
-    }
-
-    /**
-     * Process a line while in "GET_FILE" state.
-     *
-     * @param line the line
-     */
-    private void processFile(final String line) {
-        if (line.startsWith("Working file:")) {
-            m_file = line.substring(14, line.length());
-            m_status = GET_REVISION;
-        }
-    }
-
-    /**
-     * Process a line while in "REVISION" state.
-     *
-     * @param line the line
-     */
-    private void processRevision(final String line) {
-        if (line.startsWith("revision")) {
-            m_revision = line.substring(9);
-            m_status = GET_DATE;
-        } else if (line.startsWith("======")) {
-            //There was no revisions in this changelog
-            //entry so lets move unto next file
-            m_status = GET_FILE;
-        }
-    }
-
-    /**
-     * Process a line while in "DATE" state.
-     *
-     * @param line the line
-     */
-    private void processDate(final String line) {
-        if (line.startsWith("date:")) {
-            m_date = line.substring(6, 25);
-            String lineData = line.substring(line.indexOf(";") + 1);
-            m_author = lineData.substring(10, lineData.indexOf(";"));
-
-            m_status = GET_COMMENT;
-
-            //Reset comment to empty here as we can accumulate multiple lines
-            //in the processComment method
-            m_comment = "";
-        }
-    }
-
-    /**
-     * Process a line while in "GET_PREVIOUS_REVISION" state.
-     *
-     * @param line the line
-     */
-    private void processGetPreviousRevision(final String line) {
-        if (!line.startsWith("revision")) {
-            throw new IllegalStateException("Unexpected line from CVS: " 
-                + line);
-        }
-        m_previousRevision = line.substring(9);
-
-        saveEntry();
-
-        m_revision = m_previousRevision;
-        m_status = GET_DATE;
-    }
-
-    /**
-     * Utility method that saves the current entry.
-     */
-    private void saveEntry() {
-        final String entryKey = m_date + m_author + m_comment;
-        CVSEntry entry;
-        if (!m_entries.containsKey(entryKey)) {
-            entry = new CVSEntry(parseDate(m_date), m_author, m_comment);
-            m_entries.put(entryKey, entry);
-        } else {
-            entry = (CVSEntry) m_entries.get(entryKey);
-        }
-
-        entry.addFile(m_file, m_revision, m_previousRevision);
-    }
-
-    /**
-     * Parse date out from expected format.
-     *
-     * @param date the string holding dat
-     * @return the date object or null if unknown date format
-     */
-    private Date parseDate(final String date) {
-        try {
-            return c_inputDate.parse(date);
-        } catch (ParseException e) {
-            //final String message = REZ.getString( "changelog.bat-date.error", date );
-            //getContext().error( message );
-            return null;
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/cvslib/ChangeLogTask.java b/src/main/org/apache/tools/ant/taskdefs/cvslib/ChangeLogTask.java
deleted file mode 100644
index e388195..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/cvslib/ChangeLogTask.java
+++ /dev/null
@@ -1,438 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.cvslib;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.OutputStreamWriter;
-import java.io.PrintWriter;
-import java.io.UnsupportedEncodingException;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.Enumeration;
-import java.util.Properties;
-import java.util.Vector;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.DirectoryScanner;
-import org.apache.tools.ant.taskdefs.Execute;
-import org.apache.tools.ant.types.Commandline;
-import org.apache.tools.ant.types.FileSet;
-
-/**
- * Change log task.
- * The task will examine the output of cvs log and group related changes together.
- * It produces an XML output representing the list of changes.
- * <PRE>
- * <FONT color=#0000ff>&lt;!-- Root element --&gt;</FONT>
- * <FONT color=#6a5acd>&lt;!ELEMENT</FONT> changelog <FONT color=#ff00ff>(entry</FONT><FONT color=#ff00ff>+</FONT><FONT color=#ff00ff>)</FONT><FONT color=#6a5acd>&gt;</FONT>
- * <FONT color=#0000ff>&lt;!-- CVS Entry --&gt;</FONT>
- * <FONT color=#6a5acd>&lt;!ELEMENT</FONT> entry <FONT color=#ff00ff>(date,author,file</FONT><FONT color=#ff00ff>+</FONT><FONT color=#ff00ff>,msg)</FONT><FONT color=#6a5acd>&gt;</FONT>
- * <FONT color=#0000ff>&lt;!-- Date of cvs entry --&gt;</FONT>
- * <FONT color=#6a5acd>&lt;!ELEMENT</FONT> date <FONT color=#ff00ff>(#PCDATA)</FONT><FONT color=#6a5acd>&gt;</FONT>
- * <FONT color=#0000ff>&lt;!-- Author of change --&gt;</FONT>
- * <FONT color=#6a5acd>&lt;!ELEMENT</FONT> author <FONT color=#ff00ff>(#PCDATA)</FONT><FONT color=#6a5acd>&gt;</FONT>
- * <FONT color=#0000ff>&lt;!-- List of files affected --&gt;</FONT>
- * <FONT color=#6a5acd>&lt;!ELEMENT</FONT> msg <FONT color=#ff00ff>(#PCDATA)</FONT><FONT color=#6a5acd>&gt;</FONT>
- * <FONT color=#0000ff>&lt;!-- File changed --&gt;</FONT>
- * <FONT color=#6a5acd>&lt;!ELEMENT</FONT> file <FONT color=#ff00ff>(name,revision,prevrevision</FONT><FONT color=#ff00ff>?</FONT><FONT color=#ff00ff>)</FONT><FONT color=#6a5acd>&gt;</FONT>
- * <FONT color=#0000ff>&lt;!-- Name of the file --&gt;</FONT>
- * <FONT color=#6a5acd>&lt;!ELEMENT</FONT> name <FONT color=#ff00ff>(#PCDATA)</FONT><FONT color=#6a5acd>&gt;</FONT>
- * <FONT color=#0000ff>&lt;!-- Revision number --&gt;</FONT>
- * <FONT color=#6a5acd>&lt;!ELEMENT</FONT> revision <FONT color=#ff00ff>(#PCDATA)</FONT><FONT color=#6a5acd>&gt;</FONT>
- * <FONT color=#0000ff>&lt;!-- Previous revision number --&gt;</FONT>
- * <FONT color=#6a5acd>&lt;!ELEMENT</FONT> prevrevision <FONT color=#ff00ff>(#PCDATA)</FONT><FONT color=#6a5acd>&gt;</FONT>
- * </PRE>
- *
- * @author <a href="mailto:jeff.martin@synamic.co.uk">Jeff Martin</a>
- * @author <a href="mailto:peter@apache.org">Peter Donald</a>
- * @version $Revision$ $Date$
- * @since Ant 1.5
- * @ant.task name="changelog"
- */
-public class ChangeLogTask extends Task {
-    /** User list */
-    private File m_usersFile;
-
-    /** User list */
-    private Vector m_cvsUsers = new Vector();
-
-    /** Input dir */
-    private File m_dir;
-
-    /** Output file */
-    private File m_destfile;
-
-    /** The earliest date at which to start processing entrys.  */
-    private Date m_start;
-
-    /** The latest date at which to stop processing entrys.  */
-    private Date m_stop;
-
-    /**
-     * Filesets containting list of files against which the cvs log will be
-     * performed. If empty then all files will in the working directory will
-     * be checked.
-     */
-    private final Vector m_filesets = new Vector();
-
-
-    /**
-     * Set the base dir for cvs.
-     *
-     * @param dir The new dir value
-     */
-    public void setDir(final File dir) {
-        m_dir = dir;
-    }
-
-
-    /**
-     * Set the output file for the log.
-     *
-     * @param destfile The new destfile value
-     */
-    public void setDestfile(final File destfile) {
-        m_destfile = destfile;
-    }
-
-
-    /**
-     * Set a lookup list of user names & addresses
-     *
-     * @param usersFile The file containing the users info.
-     */
-    public void setUsersfile(final File usersFile) {
-        m_usersFile = usersFile;
-    }
-
-
-    /**
-     * Add a user to list changelog knows about.
-     *
-     * @param user the user
-     */
-    public void addUser(final CvsUser user) {
-        m_cvsUsers.addElement(user);
-    }
-
-
-    /**
-     * Set the date at which the changelog should start.
-     *
-     * @param start The date at which the changelog should start.
-     */
-    public void setStart(final Date start) {
-        m_start = start;
-    }
-
-
-    /**
-     * Set the date at which the changelog should stop.
-     *
-     * @param stop The date at which the changelog should stop.
-     */
-    public void setEnd(final Date stop) {
-        m_stop = stop;
-    }
-
-
-    /**
-     * Set the numbers of days worth of log entries to process.
-     *
-     * @param days the number of days of log to process.
-     */
-    public void setDaysinpast(final int days) {
-        final long time = System.currentTimeMillis()
-             - (long) days * 24 * 60 * 60 * 1000;
-
-        setStart(new Date(time));
-    }
-
-
-    /**
-     * Adds a set of files about which cvs logs will be generated.
-     *
-     * @param fileSet a set of files about which cvs logs will be generated.
-     */
-    public void addFileset(final FileSet fileSet) {
-        m_filesets.addElement(fileSet);
-    }
-
-
-    /**
-     * Execute task
-     *
-     * @exception BuildException if something goes wrong executing the 
-     *            cvs command
-     */
-    public void execute() throws BuildException {
-        File savedDir = m_dir;// may be altered in validate
-
-        try {
-
-            validate();
-
-            final Properties userList = new Properties();
-
-            loadUserlist(userList);
-
-            for (Enumeration e = m_cvsUsers.elements();
-                e.hasMoreElements();) {
-                final CvsUser user = (CvsUser) e.nextElement();
-
-                user.validate();
-                userList.put(user.getUserID(), user.getDisplayname());
-            }
-
-            final Commandline command = new Commandline();
-
-            command.setExecutable("cvs");
-            command.createArgument().setValue("log");
-
-            if (null != m_start) {
-                final SimpleDateFormat outputDate =
-                    new SimpleDateFormat("yyyy-MM-dd");
-
-                // We want something of the form: -d ">=YYYY-MM-dd"
-                final String dateRange = "-d >="
-                     + outputDate.format(m_start);
-
-                command.createArgument().setValue(dateRange);
-            }
-
-            // Check if list of files to check has been specified
-            if (!m_filesets.isEmpty()) {
-                final Enumeration e = m_filesets.elements();
-
-                while (e.hasMoreElements()) {
-                    final FileSet fileSet = (FileSet) e.nextElement();
-                    final DirectoryScanner scanner =
-                        fileSet.getDirectoryScanner(project);
-                    final String[] files = scanner.getIncludedFiles();
-
-                    for (int i = 0; i < files.length; i++) {
-                        command.createArgument().setValue(files[i]);
-                    }
-                }
-            }
-
-            final ChangeLogParser parser = new ChangeLogParser();
-            final RedirectingStreamHandler handler =
-                new RedirectingStreamHandler(parser);
-
-            log("ChangeLog command: [" + command.toString() + "]",
-                Project.MSG_VERBOSE);
-
-            final Execute exe = new Execute(handler);
-
-            exe.setWorkingDirectory(m_dir);
-            exe.setCommandline(command.getCommandline());
-            exe.setAntRun(getProject());
-            try {
-                final int resultCode = exe.execute();
-
-                if (0 != resultCode) {
-                    throw new BuildException("Error running cvs log");
-                }
-            } catch (final IOException ioe) {
-                throw new BuildException(ioe.toString());
-            }
-
-            final String errors = handler.getErrors();
-
-            if (null != errors) {
-                log(errors, Project.MSG_ERR);
-            }
-
-            final CVSEntry[] entrySet = parser.getEntrySetAsArray();
-            final CVSEntry[] filteredEntrySet = filterEntrySet(entrySet);
-
-            replaceAuthorIdWithName(userList, filteredEntrySet);
-
-            writeChangeLog(filteredEntrySet);
-
-        } finally {
-            m_dir = savedDir;
-        }
-    }
-
-    /**
-     * Validate the parameters specified for task.
-     *
-     * @throws BuildException if fails validation checks
-     */
-    private void validate()
-         throws BuildException {
-        if (null == m_dir) {
-            m_dir = getProject().getBaseDir();
-        }
-        if (null == m_destfile) {
-            final String message = "Destfile must be set.";
-
-            throw new BuildException(message);
-        }
-        if (!m_dir.exists()) {
-            final String message = "Cannot find base dir "
-                 + m_dir.getAbsolutePath();
-
-            throw new BuildException(message);
-        }
-        if (null != m_usersFile && !m_usersFile.exists()) {
-            final String message = "Cannot find user lookup list "
-                 + m_usersFile.getAbsolutePath();
-
-            throw new BuildException(message);
-        }
-    }
-
-    /**
-     * Load the userlist from the userList file (if specified) and add to
-     * list of users.
-     *
-     * @param userList the file of users
-     * @throws BuildException if file can not be loaded for some reason
-     */
-    private void loadUserlist(final Properties userList)
-         throws BuildException {
-        if (null != m_usersFile) {
-            try {
-                userList.load(new FileInputStream(m_usersFile));
-            } catch (final IOException ioe) {
-                throw new BuildException(ioe.toString(), ioe);
-            }
-        }
-    }
-
-    /**
-     * Filter the specified entrys accoridn to an appropriate rule.
-     *
-     * @param entrySet the entry set to filter
-     * @return the filtered entry set
-     */
-    private CVSEntry[] filterEntrySet(final CVSEntry[] entrySet) {
-        final Vector results = new Vector();
-
-        for (int i = 0; i < entrySet.length; i++) {
-            final CVSEntry cvsEntry = entrySet[i];
-            final Date date = cvsEntry.getDate();
-
-            if (null != m_start && m_start.after(date)) {
-                //Skip dates that are too early
-                continue;
-            }
-            if (null != m_stop && m_stop.before(date)) {
-                //Skip dates that are too late
-                continue;
-            }
-            results.addElement(cvsEntry);
-        }
-
-        final CVSEntry[] resultArray = new CVSEntry[results.size()];
-
-        results.copyInto(resultArray);
-        return resultArray;
-    }
-
-    /**
-     * replace all known author's id's with their maven specified names
-     */
-    private void replaceAuthorIdWithName(final Properties userList,
-                                         final CVSEntry[] entrySet) {
-        for (int i = 0; i < entrySet.length; i++) {
-
-            final CVSEntry entry = entrySet[ i ];
-            if (userList.containsKey(entry.getAuthor())) {
-                entry.setAuthor(userList.getProperty(entry.getAuthor()));
-            }
-        }
-    }
-
-    /**
-     * Print changelog to file specified in task.
-     *
-     * @param entrySet the entry set to write.
-     * @throws BuildException if theres an error writing changelog.
-     */
-    private void writeChangeLog(final CVSEntry[] entrySet)
-         throws BuildException {
-        FileOutputStream output = null;
-
-        try {
-            output = new FileOutputStream(m_destfile);
-
-            final PrintWriter writer =
-                new PrintWriter(new OutputStreamWriter(output, "UTF-8"));
-
-            final ChangeLogWriter serializer = new ChangeLogWriter();
-
-            serializer.printChangeLog(writer, entrySet);
-        } catch (final UnsupportedEncodingException uee) {
-            getProject().log(uee.toString(), Project.MSG_ERR);
-        } catch (final IOException ioe) {
-            throw new BuildException(ioe.toString(), ioe);
-        } finally {
-            if (null != output) {
-                try {
-                    output.close();
-                } catch (final IOException ioe) {
-                }
-            }
-        }
-    }
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/cvslib/ChangeLogWriter.java b/src/main/org/apache/tools/ant/taskdefs/cvslib/ChangeLogWriter.java
deleted file mode 100644
index b371548..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/cvslib/ChangeLogWriter.java
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.cvslib;
-
-import java.io.PrintWriter;
-import java.text.SimpleDateFormat;
-import java.util.Enumeration;
-
-/**
- * Class used to generate an XML changelog.
- *
- * @author <a href="mailto:peter@apache.org">Peter Donald</a>
- * @version $Revision$ $Date$
- */
-class ChangeLogWriter {
-    /** output format for dates writtn to xml file */
-    private static final SimpleDateFormat c_outputDate 
-        = new SimpleDateFormat("yyyy-MM-dd");
-    /** output format for times writtn to xml file */
-    private static final SimpleDateFormat c_outputTime 
-        = new SimpleDateFormat("hh:mm");
-
-
-    /**
-     * Print out the specifed entrys.
-     *
-     * @param output writer to which to send output.
-     * @param entries the entries to be written.
-     */
-    public void printChangeLog(final PrintWriter output,
-                               final CVSEntry[] entries) {
-        output.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
-        output.println("<changelog>");
-        for (int i = 0; i < entries.length; i++) {
-            final CVSEntry entry = entries[i];
-
-            printEntry(output, entry);
-        }
-        output.println("</changelog>");
-        output.flush();
-        output.close();
-    }
-
-
-    /**
-     * Print out an individual entry in changelog.
-     *
-     * @param entry the entry to print
-     * @param output writer to which to send output.
-     */
-    private void printEntry(final PrintWriter output, final CVSEntry entry) {
-        output.println("\t<entry>");
-        output.println("\t\t<date>" + c_outputDate.format(entry.getDate()) 
-            + "</date>");
-        output.println("\t\t<time>" + c_outputTime.format(entry.getDate()) 
-            + "</time>");
-        output.println("\t\t<author><![CDATA[" + entry.getAuthor() 
-            + "]]></author>");
-
-        final Enumeration enumeration = entry.getFiles().elements();
-
-        while (enumeration.hasMoreElements()) {
-            final RCSFile file = (RCSFile) enumeration.nextElement();
-
-            output.println("\t\t<file>");
-            output.println("\t\t\t<name>" + file.getName() + "</name>");
-            output.println("\t\t\t<revision>" + file.getRevision() 
-                + "</revision>");
-
-            final String previousRevision = file.getPreviousRevision();
-
-            if (previousRevision != null) {
-                output.println("\t\t\t<prevrevision>" + previousRevision 
-                    + "</prevrevision>");
-            }
-
-            output.println("\t\t</file>");
-        }
-        output.println("\t\t<msg><![CDATA[" + entry.getComment() + "]]></msg>");
-        output.println("\t</entry>");
-    }
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/cvslib/CvsTagDiff.java b/src/main/org/apache/tools/ant/taskdefs/cvslib/CvsTagDiff.java
deleted file mode 100644
index b5f006b..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/cvslib/CvsTagDiff.java
+++ /dev/null
@@ -1,501 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.cvslib;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.taskdefs.Cvs;
-import org.apache.tools.ant.util.FileUtils;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.FileReader;
-import java.io.IOException;
-import java.io.OutputStreamWriter;
-import java.io.PrintWriter;
-import java.io.UnsupportedEncodingException;
-import java.util.Vector;
-
-/**
- * Cvs tag diff.
- * The task will examine the output of cvs rdiff between two tags.
- * It produces an XML output representing the list of changes.
- * <PRE>
- * &lt;!-- Root element --&gt;
- * &lt;!ELEMENT tagdiff ( entry+ ) &gt;
- * &lt;!-- Start tag of the report --&gt;
- * &lt;!ATTLIST tagdiff startTag NMTOKEN #IMPLIED &gt;
- * &lt;!-- End tag of the report --&gt;
- * &lt;!ATTLIST tagdiff endTag NMTOKEN #IMPLIED &gt;
- * &lt;!-- Start date of the report --&gt;
- * &lt;!ATTLIST tagdiff startDate NMTOKEN #IMPLIED &gt;
- * &lt;!-- End date of the report --&gt;
- * &lt;!ATTLIST tagdiff endDate NMTOKEN #IMPLIED &gt;
- *
- * &lt;!-- CVS tag entry --&gt;
- * &lt;!ELEMENT entry ( file ) &gt;
- * &lt;!-- File added, changed or removed --&gt;
- * &lt;!ELEMENT file ( name, revision?, prevrevision? ) &gt;
- * &lt;!-- Name of the file --&gt;
- * &lt;!ELEMENT name ( #PCDATA ) &gt;
- * &lt;!-- Revision number --&gt;
- * &lt;!ELEMENT revision ( #PCDATA ) &gt;
- * &lt;!-- Previous revision number --&gt;
- * &lt;!ELEMENT prevrevision ( #PCDATA ) &gt;
- * </PRE>
- *
- * @author <a href="mailto:fred@castify.net">Frederic Lavigne</a>
- * @version $Revision$ $Date$
- * @since Ant 1.5
- * @ant.task name="cvstagdiff"
- */
-public class CvsTagDiff extends Task {
-
-    /**
-     * Token to identify a new file in the rdiff log
-     */
-    static final String FILE_IS_NEW = " is new; current revision ";
-
-    /**
-     * Token to identify a modified file in the rdiff log
-     */
-    static final String FILE_HAS_CHANGED = " changed from revision ";
-
-    /**
-     * Token to identify a removed file in the rdiff log
-     */
-    static final String FILE_WAS_REMOVED = " is removed";
-
-    /**
-     * The cvs task which will perform the rdiff.
-     */
-    private Cvs m_cvs;
-
-    /**
-     * The cvs package/module to analyse
-     */
-    private String m_package;
-
-    /**
-     * The earliest tag from which diffs are to be included in the report.
-     */
-    private String m_startTag;
-
-    /**
-     * The latest tag from which diffs are to be included in the report.
-     */
-    private String m_endTag;
-
-    /**
-     * The earliest date from which diffs are to be included in the report.
-     */
-    private String m_startDate;
-
-    /**
-     * The latest date from which diffs are to be included in the report.
-     */
-    private String m_endDate;
-
-    /**
-     * The file in which to write the diff report.
-     */
-    private File m_destfile;
-
-    /**
-     * Used to create the temp file for cvs log
-     */
-    private FileUtils m_fileUtils = FileUtils.newFileUtils();
-
-    /**
-     * Initialize this task.
-     * CvsTagDiff initializes a member cvs task in init() to perform the
-     * rdiff in execute().
-     *
-     * @exception BuildException if an error occurs
-     */
-    public void init() throws BuildException {
-        m_cvs = (Cvs) getProject().createTask("cvs");
-    }
-
-    /**
-     * @see org.apache.tools.ant.taskdefs.AbstractCvsTask#setCompressionLevel(int)
-     */
-    public void setCompressionLevel(int level) {
-        m_cvs.setCompressionLevel(level);
-    }
-
-    /**
-     * @see org.apache.tools.ant.taskdefs.AbstractCvsTask#setCompression(boolean)
-     */
-    public void setCompression(boolean usecomp) {
-        m_cvs.setCompression(usecomp);
-    }
-
-    /**
-     * @see org.apache.tools.ant.taskdefs.AbstractCvsTask#setCvsRoot
-     */
-    public void setCvsRoot(String cvsRoot) {
-        m_cvs.setCvsRoot(cvsRoot);
-    }
-
-    /**
-     * @see org.apache.tools.ant.taskdefs.AbstractCvsTask#setCvsRsh
-     */
-    public void setCvsRsh(String rsh) {
-        m_cvs.setCvsRsh(rsh);
-    }
-
-    /**
-     * @see org.apache.tools.ant.taskdefs.AbstractCvsTask#setPackage
-     */
-    public void setPackage(String p) {
-        m_package = p;
-    }
-
-    /**
-     * @see org.apache.tools.ant.taskdefs.AbstractCvsTask#setQuiet
-     */
-    public void setQuiet(boolean quiet) {
-        m_cvs.setQuiet(quiet);
-    }
-
-    /**
-     * @see org.apache.tools.ant.taskdefs.AbstractCvsTask#setPort
-     */
-    public void setPort(int port) {
-        m_cvs.setPort(port);
-    }
-
-    /**
-     * @see org.apache.tools.ant.taskdefs.AbstractCvsTask#setPassfile
-     */
-    public void setPassfile(File f) {
-        m_cvs.setPassfile(f);
-    }
-
-    /**
-     * @see org.apache.tools.ant.taskdefs.AbstractCvsTask#setFailOnError
-     */
-    public void setFailOnError(boolean b) {
-        m_cvs.setFailOnError(b);
-    }
-
-    /**
-     * Set the start tag.
-     *
-     * @param s the start tag.
-     */
-    public void setStartTag(String s) {
-        m_startTag = s;
-    }
-
-    /**
-     * Set the start date.
-     *
-     * @param s the start date.
-     */
-    public void setStartDate(String s) {
-        m_startDate = s;
-    }
-
-    /**
-     * Set the end tag.
-     *
-     * @param s the end tag.
-     */
-    public void setEndTag(String s) {
-        m_endTag = s;
-    }
-
-    /**
-     * Set the end date.
-     *
-     * @param s the end date.
-     */
-    public void setEndDate(String s) {
-        m_endDate = s;
-    }
-
-    /**
-     * Set the output file for the diff.
-     *
-     * @param f the output file for the diff.
-     */
-    public void setDestFile(File f) {
-        m_destfile = f;
-    }
-
-    /**
-     * Execute task.
-     *
-     * @exception BuildException if an error occurs
-     */
-    public void execute() throws BuildException {
-        // validate the input parameters
-        validate();
-
-        // build the rdiff command
-        String rdiff = "rdiff -s " +
-            (m_startTag != null ? ("-r " + m_startTag) : ("-D " + m_startDate))
-            + " "
-            + (m_endTag != null ? ("-r " + m_endTag) : ("-D " + m_endDate))
-            + " " + m_package;
-        log("Cvs command is " + rdiff, Project.MSG_VERBOSE);
-        m_cvs.setCommand(rdiff);
-
-        File tmpFile = null;
-        try {
-            tmpFile = m_fileUtils.createTempFile("cvstagdiff", ".log", null);
-            m_cvs.setOutput(tmpFile);
-
-            // run the cvs command
-            m_cvs.execute();
-
-            // parse the rdiff
-            CvsTagEntry[] entries = parseRDiff(tmpFile);
-
-            // write the tag diff
-            writeTagDiff(entries);
-
-        } finally {
-            if (tmpFile != null) {
-                tmpFile.delete();
-            }
-        }
-    }
-
-    /**
-     * Parse the tmpFile and return and array of CvsTagEntry to be
-     * written in the output.
-     *
-     * @param tmpFile the File containing the output of the cvs rdiff command
-     * @return the entries in the output
-     * @exception BuildException if an error occurs
-     */
-    private CvsTagEntry[] parseRDiff(File tmpFile) throws BuildException {
-        // parse the output of the command
-        BufferedReader reader = null;
-
-        try {
-            reader = new BufferedReader(new FileReader(tmpFile));
-
-            // entries are of the form:
-            // File module/filename is new; current revision 1.1
-            // or
-            // File module/filename changed from revision 1.4 to 1.6
-            // or
-            // File module/filename is removed; not included in
-            // release tag SKINLF_12
-
-            // get rid of 'File module/"
-            int headerLength = 5 + m_package.length() + 1;
-            Vector entries = new Vector();
-
-            String line = reader.readLine();
-            int index;
-            CvsTagEntry entry = null;
-
-            while (null != line) {
-                line = line.substring(headerLength);
-
-                if ((index = line.indexOf(FILE_IS_NEW)) != -1) {
-                    // it is a new file
-                    // set the revision but not the prevrevision
-                    String filename = line.substring(0, index);
-                    String rev = line.substring(index + FILE_IS_NEW.length());
-
-                    entries.addElement(entry = new CvsTagEntry(filename, rev));
-                    log(entry.toString(), Project.MSG_VERBOSE);
-                } else if ((index = line.indexOf(FILE_HAS_CHANGED)) != -1) {
-                    // it is a modified file
-                    // set the revision and the prevrevision
-                    String filename = line.substring(0, index);
-                    int revSeparator = line.indexOf(" to ", index);
-                    String prevRevision =
-                        line.substring(index + FILE_HAS_CHANGED.length(),
-                                       revSeparator);
-                     // 4 is " to " length
-                    String revision = line.substring(revSeparator + 4);
-
-                    entries.addElement(entry = new CvsTagEntry(filename,
-                                                               revision,
-                                                               prevRevision));
-                    log(entry.toString(), Project.MSG_VERBOSE);
-                } else if ((index = line.indexOf(FILE_WAS_REMOVED)) != -1) {
-                    // it is a removed file
-                    String filename = line.substring(0, index);
-
-                    entries.addElement(entry = new CvsTagEntry(filename));
-                    log(entry.toString(), Project.MSG_VERBOSE);
-                }
-                line = reader.readLine();
-            }
-
-            CvsTagEntry[] array = new CvsTagEntry[entries.size()];
-            entries.copyInto(array);
-
-            return array;
-        } catch (IOException e) {
-            throw new BuildException("Error in parsing", e);
-        } finally {
-            if (reader != null) {
-                try {
-                    reader.close();
-                } catch (IOException e) {
-                }
-            }
-        }
-    }
-
-    /**
-     * Write the rdiff log.
-     *
-     * @param entries a <code>CvsTagEntry[]</code> value
-     * @exception BuildException if an error occurs
-     */
-    private void writeTagDiff(CvsTagEntry[] entries) throws BuildException {
-        FileOutputStream output = null;
-        try {
-            output = new FileOutputStream(m_destfile);
-            PrintWriter writer = new PrintWriter(
-                                     new OutputStreamWriter(output, "UTF-8"));
-            writer.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
-            writer.print("<tagdiff ");
-            if (m_startTag != null) {
-                writer.print("startTag=\"" + m_startTag + "\" ");
-            } else {
-                writer.print("startDate=\"" + m_startDate + "\" ");
-            }
-            if (m_endTag != null) {
-                writer.print("endTag=\"" + m_endTag + "\" ");
-            } else {
-                writer.print("endDate=\"" + m_endDate + "\" ");
-            }
-            writer.println(">");
-            for (int i = 0, c = entries.length; i < c; i++) {
-                writeTagEntry(writer, entries[i]);
-            }
-            writer.println("</tagdiff>");
-            writer.flush();
-            writer.close();
-        } catch (UnsupportedEncodingException uee) {
-            log(uee.toString(), Project.MSG_ERR);
-        } catch (IOException ioe) {
-            throw new BuildException(ioe.toString(), ioe);
-        } finally {
-            if (null != output) {
-                try {
-                    output.close();
-                } catch (IOException ioe) { }
-            }
-        }
-    }
-
-    /**
-     * Write a single entry to the given writer.
-     *
-     * @param writer a <code>PrintWriter</code> value
-     * @param entry a <code>CvsTagEntry</code> value
-     */
-    private void writeTagEntry(PrintWriter writer, CvsTagEntry entry) {
-        writer.println("\t<entry>");
-        writer.println("\t\t<file>");
-        writer.println("\t\t\t<name>" + entry.getFile() + "</name>");
-        if (entry.getRevision() != null) {
-            writer.println("\t\t\t<revision>" + entry.getRevision()
-                           + "</revision>");
-        }
-        if (entry.getPreviousRevision() != null) {
-            writer.println("\t\t\t<prevrevision>"
-                           + entry.getPreviousRevision() + "</prevrevision>");
-        }
-        writer.println("\t\t</file>");
-        writer.println("\t</entry>");
-    }
-
-    /**
-     * Validate the parameters specified for task.
-     *
-     * @exception BuildException if a parameter is not correctly set
-     */
-    private void validate() throws BuildException {
-        if (null == m_package) {
-            throw new BuildException("Package/module must be set.");
-        }
-
-        if (null == m_destfile) {
-            throw new BuildException("Destfile must be set.");
-        }
-
-        if (null == m_startTag && null == m_startDate) {
-            throw new BuildException("Start tag or start date must be set.");
-        }
-
-        if (null != m_startTag && null != m_startDate) {
-            throw new BuildException("Only one of start tag and start date "
-                                     + "must be set.");
-        }
-
-        if (null == m_endTag && null == m_endDate) {
-            throw new BuildException("End tag or end date must be set.");
-        }
-
-        if (null != m_endTag && null != m_endDate) {
-            throw new BuildException("Only one of end tag and end date must "
-                                     + "be set.");
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/cvslib/CvsTagEntry.java b/src/main/org/apache/tools/ant/taskdefs/cvslib/CvsTagEntry.java
deleted file mode 100644
index 6b5a8bd..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/cvslib/CvsTagEntry.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.cvslib;
-
-/**
- * Holds the information of a line of rdiff
- */
-class CvsTagEntry {
-    String m_filename;
-    String m_prevRevision;
-    String m_revision;
-
-    public CvsTagEntry(String filename) {
-        this(filename, null, null);
-    }
-
-    public CvsTagEntry(String filename, String revision) {
-        this(filename, revision, null);
-    }
-
-    public CvsTagEntry(String filename, String revision,
-                       String prevRevision) {
-        m_filename = filename;
-        m_revision = revision;
-        m_prevRevision = prevRevision;
-    }
-
-    public String getFile() {
-        return m_filename;
-    }
-
-    public String getRevision() {
-        return m_revision;
-    }
-
-    public String getPreviousRevision() {
-        return m_prevRevision;
-    }
-
-    public String toString() {
-        StringBuffer buffer = new StringBuffer();
-        buffer.append(m_filename);
-        if ((m_revision == null) && (m_prevRevision == null)) {
-            buffer.append(" was removed");
-        } else if (m_revision != null && m_prevRevision == null) {
-            buffer.append(" is new; current revision is ")
-                .append(m_revision);
-        } else if (m_revision != null && m_prevRevision != null) {
-            buffer.append(" has changed from ")
-                .append(m_prevRevision).append(" to ").append(m_revision);
-        }
-        return buffer.toString();
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/cvslib/CvsUser.java b/src/main/org/apache/tools/ant/taskdefs/cvslib/CvsUser.java
deleted file mode 100644
index 5f5737a..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/cvslib/CvsUser.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.cvslib;
-
-import org.apache.tools.ant.BuildException;
-
-/**
- * Represents a CVS user with a userID and a full name.
- *
- * @author <a href="mailto:peter@apache.org">Peter Donald</a>
- * @author <a href="mailto:jeff.martin@synamic.co.uk">Jeff Martin</a>
- * @version $Revision$ $Date$
- */
-public class CvsUser {
-    /** The user's Id */
-    private String m_userID;
-    /** The user's full name */
-    private String m_displayName;
-
-
-    /**
-     * Set the user's fullname
-     *
-     * @param displayName the user's full name
-     */
-    public void setDisplayname(final String displayName) {
-        m_displayName = displayName;
-    }
-
-
-    /**
-     * Set the user's id
-     *
-     * @param userID the user's new id value.
-     */
-    public void setUserid(final String userID) {
-        m_userID = userID;
-    }
-
-
-    /**
-     * Get the user's id.
-     *
-     * @return The userID value
-     */
-    String getUserID() {
-        return m_userID;
-    }
-
-
-    /**
-     * Get the user's full name
-     *
-     * @return the usre's full name
-     */
-    String getDisplayname() {
-        return m_displayName;
-    }
-
-
-    /**
-     * validate that this objetc is configured.
-     *
-     * @exception BuildException if the instance has not be correctly 
-     *            configured.
-     */
-    void validate() throws BuildException {
-        if (null == m_userID) {
-            final String message = "Username attribute must be set.";
-
-            throw new BuildException(message);
-        }
-        if (null == m_displayName) {
-            final String message =
-                "Displayname attribute must be set for userID " + m_userID;
-
-            throw new BuildException(message);
-        }
-    }
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/cvslib/RCSFile.java b/src/main/org/apache/tools/ant/taskdefs/cvslib/RCSFile.java
deleted file mode 100644
index 3c2bbc4..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/cvslib/RCSFile.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.cvslib;
-
-/**
- * Represents a RCS File cheange.
- *
- * @author <a href="mailto:peter@apache.org">Peter Donald</a>
- * @author <a href="mailto:jeff.martin@synamic.co.uk">Jeff Martin</a>
- * @version $Revision$ $Date$
- */
-class RCSFile {
-    private String m_name;
-    private String m_revision;
-    private String m_previousRevision;
-
-
-    RCSFile(final String name, final String rev) {
-        this(name, rev, null);
-    }
-
-
-    RCSFile(final String name,
-                  final String revision,
-                  final String previousRevision) {
-        m_name = name;
-        m_revision = revision;
-        if (!revision.equals(previousRevision)) {
-            m_previousRevision = previousRevision;
-        }
-    }
-
-
-    String getName() {
-        return m_name;
-    }
-
-
-    String getRevision() {
-        return m_revision;
-    }
-
-
-    String getPreviousRevision() {
-        return m_previousRevision;
-    }
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/cvslib/RedirectingOutputStream.java b/src/main/org/apache/tools/ant/taskdefs/cvslib/RedirectingOutputStream.java
deleted file mode 100644
index e09fe20..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/cvslib/RedirectingOutputStream.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.cvslib;
-
-import org.apache.tools.ant.taskdefs.LogOutputStream;
-
-/**
- * A dummy stream that just passes stuff to the parser.
- *
- * @author <a href="mailto:peter@apache.org">Peter Donald</a>
- * @version $Revision$ $Date$
- */
-class RedirectingOutputStream
-     extends LogOutputStream {
-    private final ChangeLogParser m_parser;
-
-
-    /**
-     * Creates a new instance of this class.
-     *
-     * @param parser the parser to which output is sent.
-     */
-    public RedirectingOutputStream(final ChangeLogParser parser) {
-        super(null, 0);
-        m_parser = parser;
-    }
-
-
-    /**
-     * Logs a line to the log system of ant.
-     *
-     * @param line the line to log.
-     */
-    protected void processLine(final String line) {
-        m_parser.stdout(line);
-    }
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/cvslib/RedirectingStreamHandler.java b/src/main/org/apache/tools/ant/taskdefs/cvslib/RedirectingStreamHandler.java
deleted file mode 100644
index 26acf91..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/cvslib/RedirectingStreamHandler.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.cvslib;
-
-import java.io.IOException;
-import java.io.ByteArrayOutputStream;
-import org.apache.tools.ant.taskdefs.PumpStreamHandler;
-import org.apache.tools.ant.BuildException;
-
-/**
- * A dummy stream handler that just passes stuff to the parser.
- *
- * @author <a href="mailto:peter@apache.org">Peter Donald</a>
- * @version $Revision$ $Date$
- */
-class RedirectingStreamHandler
-     extends PumpStreamHandler {
-    RedirectingStreamHandler(final ChangeLogParser parser) {
-        super(new RedirectingOutputStream(parser),
-            new ByteArrayOutputStream());
-    }
-
-
-    String getErrors() {
-        try {
-            final ByteArrayOutputStream error 
-                = (ByteArrayOutputStream) getErr();
-
-            return error.toString("ASCII");
-        } catch (final Exception e) {
-            return null;
-        }
-    }
-
-
-    public void stop() {
-        super.stop();
-        try {
-            getErr().close();
-            getOut().close();
-        } catch (final IOException e) {
-            // plain impossible
-            throw new BuildException(e);
-        }
-    }
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/defaults.properties b/src/main/org/apache/tools/ant/taskdefs/defaults.properties
deleted file mode 100644
index f13ae69..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/defaults.properties
+++ /dev/null
@@ -1,173 +0,0 @@
-# standard ant tasks
-mkdir=org.apache.tools.ant.taskdefs.Mkdir
-javac=org.apache.tools.ant.taskdefs.Javac
-chmod=org.apache.tools.ant.taskdefs.Chmod
-delete=org.apache.tools.ant.taskdefs.Delete
-copy=org.apache.tools.ant.taskdefs.Copy
-move=org.apache.tools.ant.taskdefs.Move
-jar=org.apache.tools.ant.taskdefs.Jar
-rmic=org.apache.tools.ant.taskdefs.Rmic
-cvs=org.apache.tools.ant.taskdefs.Cvs
-get=org.apache.tools.ant.taskdefs.Get
-unzip=org.apache.tools.ant.taskdefs.Expand
-unjar=org.apache.tools.ant.taskdefs.Expand
-unwar=org.apache.tools.ant.taskdefs.Expand
-echo=org.apache.tools.ant.taskdefs.Echo
-javadoc=org.apache.tools.ant.taskdefs.Javadoc
-zip=org.apache.tools.ant.taskdefs.Zip
-gzip=org.apache.tools.ant.taskdefs.GZip
-gunzip=org.apache.tools.ant.taskdefs.GUnzip
-replace=org.apache.tools.ant.taskdefs.Replace
-java=org.apache.tools.ant.taskdefs.Java
-tstamp=org.apache.tools.ant.taskdefs.Tstamp
-property=org.apache.tools.ant.taskdefs.Property
-xmlproperty=org.apache.tools.ant.taskdefs.XmlProperty
-taskdef=org.apache.tools.ant.taskdefs.Taskdef
-ant=org.apache.tools.ant.taskdefs.Ant
-exec=org.apache.tools.ant.taskdefs.ExecTask
-tar=org.apache.tools.ant.taskdefs.Tar
-untar=org.apache.tools.ant.taskdefs.Untar
-available=org.apache.tools.ant.taskdefs.Available
-filter=org.apache.tools.ant.taskdefs.Filter
-fixcrlf=org.apache.tools.ant.taskdefs.FixCRLF
-patch=org.apache.tools.ant.taskdefs.Patch
-style=org.apache.tools.ant.taskdefs.XSLTProcess
-xslt=org.apache.tools.ant.taskdefs.XSLTProcess
-touch=org.apache.tools.ant.taskdefs.Touch
-signjar=org.apache.tools.ant.taskdefs.SignJar
-genkey=org.apache.tools.ant.taskdefs.GenerateKey
-antstructure=org.apache.tools.ant.taskdefs.AntStructure
-execon=org.apache.tools.ant.taskdefs.ExecuteOn
-antcall=org.apache.tools.ant.taskdefs.CallTarget
-sql=org.apache.tools.ant.taskdefs.SQLExec
-mail=org.apache.tools.ant.taskdefs.email.EmailTask
-fail=org.apache.tools.ant.taskdefs.Exit
-war=org.apache.tools.ant.taskdefs.War
-uptodate=org.apache.tools.ant.taskdefs.UpToDate
-apply=org.apache.tools.ant.taskdefs.Transform
-record=org.apache.tools.ant.taskdefs.Recorder
-cvspass=org.apache.tools.ant.taskdefs.CVSPass
-typedef=org.apache.tools.ant.taskdefs.Typedef
-sleep=org.apache.tools.ant.taskdefs.Sleep
-pathconvert=org.apache.tools.ant.taskdefs.PathConvert
-ear=org.apache.tools.ant.taskdefs.Ear
-parallel=org.apache.tools.ant.taskdefs.Parallel
-sequential=org.apache.tools.ant.taskdefs.Sequential
-condition=org.apache.tools.ant.taskdefs.ConditionTask
-dependset=org.apache.tools.ant.taskdefs.DependSet
-bzip2=org.apache.tools.ant.taskdefs.BZip2
-bunzip2=org.apache.tools.ant.taskdefs.BUnzip2
-checksum=org.apache.tools.ant.taskdefs.Checksum
-waitfor=org.apache.tools.ant.taskdefs.WaitFor
-input=org.apache.tools.ant.taskdefs.Input
-loadfile=org.apache.tools.ant.taskdefs.LoadFile
-manifest=org.apache.tools.ant.taskdefs.Manifest
-loadproperties=org.apache.tools.ant.taskdefs.LoadProperties
-basename=org.apache.tools.ant.taskdefs.Basename
-dirname=org.apache.tools.ant.taskdefs.Dirname
-cvschangelog=org.apache.tools.ant.taskdefs.cvslib.ChangeLogTask
-buildnumber=org.apache.tools.ant.taskdefs.BuildNumber
-concat=org.apache.tools.ant.taskdefs.Concat
-cvstagdiff=org.apache.tools.ant.taskdefs.cvslib.CvsTagDiff
-
-# optional tasks
-script=org.apache.tools.ant.taskdefs.optional.Script
-netrexxc=org.apache.tools.ant.taskdefs.optional.NetRexxC
-renameext=org.apache.tools.ant.taskdefs.optional.RenameExtensions
-ejbc=org.apache.tools.ant.taskdefs.optional.ejb.Ejbc
-ddcreator=org.apache.tools.ant.taskdefs.optional.ejb.DDCreator
-wlrun=org.apache.tools.ant.taskdefs.optional.ejb.WLRun
-wlstop=org.apache.tools.ant.taskdefs.optional.ejb.WLStop
-vssadd=org.apache.tools.ant.taskdefs.optional.vss.MSVSSADD
-vsscheckin=org.apache.tools.ant.taskdefs.optional.vss.MSVSSCHECKIN
-vsscheckout=org.apache.tools.ant.taskdefs.optional.vss.MSVSSCHECKOUT
-vsscp=org.apache.tools.ant.taskdefs.optional.vss.MSVSSCP
-vsscreate=org.apache.tools.ant.taskdefs.optional.vss.MSVSSCREATE
-vssget=org.apache.tools.ant.taskdefs.optional.vss.MSVSSGET
-vsshistory=org.apache.tools.ant.taskdefs.optional.vss.MSVSSHISTORY
-vsslabel=org.apache.tools.ant.taskdefs.optional.vss.MSVSSLABEL
-ejbjar=org.apache.tools.ant.taskdefs.optional.ejb.EjbJar
-mparse=org.apache.tools.ant.taskdefs.optional.metamata.MParse
-mmetrics=org.apache.tools.ant.taskdefs.optional.metamata.MMetrics
-maudit=org.apache.tools.ant.taskdefs.optional.metamata.MAudit
-junit=org.apache.tools.ant.taskdefs.optional.junit.JUnitTask
-cab=org.apache.tools.ant.taskdefs.optional.Cab
-ftp=org.apache.tools.ant.taskdefs.optional.net.FTP
-icontract=org.apache.tools.ant.taskdefs.optional.IContract
-javacc=org.apache.tools.ant.taskdefs.optional.javacc.JavaCC
-jjtree=org.apache.tools.ant.taskdefs.optional.javacc.JJTree
-stcheckout=org.apache.tools.ant.taskdefs.optional.starteam.StarTeamCheckout
-stcheckin=org.apache.tools.ant.taskdefs.optional.starteam.StarTeamCheckin
-stlabel=org.apache.tools.ant.taskdefs.optional.starteam.StarTeamLabel
-stlist=org.apache.tools.ant.taskdefs.optional.starteam.StarTeamList
-wljspc=org.apache.tools.ant.taskdefs.optional.jsp.WLJspc
-jlink=org.apache.tools.ant.taskdefs.optional.jlink.JlinkTask
-native2ascii=org.apache.tools.ant.taskdefs.optional.Native2Ascii
-propertyfile=org.apache.tools.ant.taskdefs.optional.PropertyFile
-depend=org.apache.tools.ant.taskdefs.optional.depend.Depend
-antlr=org.apache.tools.ant.taskdefs.optional.ANTLR
-vajload=org.apache.tools.ant.taskdefs.optional.ide.VAJLoadProjects
-vajexport=org.apache.tools.ant.taskdefs.optional.ide.VAJExport
-vajimport=org.apache.tools.ant.taskdefs.optional.ide.VAJImport
-telnet=org.apache.tools.ant.taskdefs.optional.net.TelnetTask
-csc=org.apache.tools.ant.taskdefs.optional.dotnet.CSharp
-ilasm=org.apache.tools.ant.taskdefs.optional.dotnet.Ilasm
-WsdlToDotnet=org.apache.tools.ant.taskdefs.optional.dotnet.WsdlToDotnet
-stylebook=org.apache.tools.ant.taskdefs.optional.StyleBook
-test=org.apache.tools.ant.taskdefs.optional.Test
-pvcs=org.apache.tools.ant.taskdefs.optional.pvcs.Pvcs
-p4change=org.apache.tools.ant.taskdefs.optional.perforce.P4Change
-p4label=org.apache.tools.ant.taskdefs.optional.perforce.P4Label
-p4have=org.apache.tools.ant.taskdefs.optional.perforce.P4Have
-p4sync=org.apache.tools.ant.taskdefs.optional.perforce.P4Sync
-p4edit=org.apache.tools.ant.taskdefs.optional.perforce.P4Edit
-p4submit=org.apache.tools.ant.taskdefs.optional.perforce.P4Submit
-p4counter=org.apache.tools.ant.taskdefs.optional.perforce.P4Counter
-javah=org.apache.tools.ant.taskdefs.optional.Javah
-ccupdate=org.apache.tools.ant.taskdefs.optional.clearcase.CCUpdate
-cccheckout=org.apache.tools.ant.taskdefs.optional.clearcase.CCCheckout
-cccheckin=org.apache.tools.ant.taskdefs.optional.clearcase.CCCheckin
-ccuncheckout=org.apache.tools.ant.taskdefs.optional.clearcase.CCUnCheckout
-sound=org.apache.tools.ant.taskdefs.optional.sound.SoundTask
-junitreport=org.apache.tools.ant.taskdefs.optional.junit.XMLResultAggregator
-vsslabel=org.apache.tools.ant.taskdefs.optional.vss.MSVSSLABEL
-vsshistory=org.apache.tools.ant.taskdefs.optional.vss.MSVSSHISTORY
-blgenclient=org.apache.tools.ant.taskdefs.optional.ejb.BorlandGenerateClient
-rpm=org.apache.tools.ant.taskdefs.optional.Rpm
-xmlvalidate=org.apache.tools.ant.taskdefs.optional.XMLValidateTask
-vsscheckin=org.apache.tools.ant.taskdefs.optional.vss.MSVSSCHECKIN
-vsscheckout=org.apache.tools.ant.taskdefs.optional.vss.MSVSSCHECKOUT
-iplanet-ejbc=org.apache.tools.ant.taskdefs.optional.ejb.IPlanetEjbcTask
-jdepend=org.apache.tools.ant.taskdefs.optional.jdepend.JDependTask
-mimemail=org.apache.tools.ant.taskdefs.optional.net.MimeMail
-ccmcheckin=org.apache.tools.ant.taskdefs.optional.ccm.CCMCheckin
-ccmcheckout=org.apache.tools.ant.taskdefs.optional.ccm.CCMCheckout
-ccmcheckintask=org.apache.tools.ant.taskdefs.optional.ccm.CCMCheckinDefault
-ccmreconfigure=org.apache.tools.ant.taskdefs.optional.ccm.CCMReconfigure
-ccmcreatetask=org.apache.tools.ant.taskdefs.optional.ccm.CCMCreateTask
-jpcoverage=org.apache.tools.ant.taskdefs.optional.sitraka.Coverage
-jpcovmerge=org.apache.tools.ant.taskdefs.optional.sitraka.CovMerge
-jpcovreport=org.apache.tools.ant.taskdefs.optional.sitraka.CovReport
-p4add=org.apache.tools.ant.taskdefs.optional.perforce.P4Add
-jspc=org.apache.tools.ant.taskdefs.optional.jsp.JspC
-replaceregexp=org.apache.tools.ant.taskdefs.optional.ReplaceRegExp
-translate=org.apache.tools.ant.taskdefs.optional.i18n.Translate
-sosget=org.apache.tools.ant.taskdefs.optional.sos.SOSGet
-soscheckin=org.apache.tools.ant.taskdefs.optional.sos.SOSCheckin
-soscheckout=org.apache.tools.ant.taskdefs.optional.sos.SOSCheckout
-soslabel=org.apache.tools.ant.taskdefs.optional.sos.SOSLabel
-echoproperties=org.apache.tools.ant.taskdefs.optional.EchoProperties
-splash=org.apache.tools.ant.taskdefs.optional.splash.SplashTask
-serverdeploy=org.apache.tools.ant.taskdefs.optional.j2ee.ServerDeploy
-jarlib-display=org.apache.tools.ant.taskdefs.optional.extension.JarLibDisplayTask
-jarlib-manifest=org.apache.tools.ant.taskdefs.optional.extension.JarLibManifestTask
-jarlib-available=org.apache.tools.ant.taskdefs.optional.extension.JarLibAvailableTask
-jarlib-resolve=org.apache.tools.ant.taskdefs.optional.extension.JarLibResolveTask
-
-# deprecated ant tasks (kept for back compatibility)
-starteam=org.apache.tools.ant.taskdefs.optional.scm.AntStarTeamCheckOut
-javadoc2=org.apache.tools.ant.taskdefs.Javadoc
-copydir=org.apache.tools.ant.taskdefs.Copydir
-copyfile=org.apache.tools.ant.taskdefs.Copyfile
-deltree=org.apache.tools.ant.taskdefs.Deltree
-rename=org.apache.tools.ant.taskdefs.Rename
diff --git a/src/main/org/apache/tools/ant/taskdefs/email/EmailAddress.java b/src/main/org/apache/tools/ant/taskdefs/email/EmailAddress.java
deleted file mode 100644
index d237cef..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/email/EmailAddress.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.email;
-
-/**
- * Holds an email address.
- *
- * @author roxspring@yahoo.com Rob Oxspring
- * @since Ant 1.5
- */
-public class EmailAddress {
-    private String name;
-    private String address;
-
-
-    /** Creates an empty email address  */
-    public EmailAddress() {
-    }
-
-
-    /**
-     * Creates a new email address based on the given string
-     *
-     * @param address the email address
-     */
-    public EmailAddress(String address) {
-        this.address = address;
-    }
-
-
-    /**
-     * Sets the personal / display name of the address
-     *
-     * @param name the display name
-     */
-    public void setName(String name) {
-        this.name = name;
-    }
-
-
-    /**
-     * Sets the email address
-     *
-     * @param address the actual email address
-     */
-    public void setAddress(String address) {
-        this.address = address;
-    }
-
-
-    /**
-     * Constructs a string "name &lt;address&gt;" or "address"
-     *
-     * @return a string representation of the address
-     */
-    public String toString() {
-        if (name == null) {
-            return address;
-        } else {
-            return name + " <" + address + ">";
-        }
-    }
-
-
-    /**
-     * Returns the address
-     *
-     * @return the address part
-     */
-    public String getAddress() {
-        return address;
-    }
-
-
-    /**
-     * Returns the display name
-     *
-     * @return the display name part
-     */
-    public String getName() {
-        return name;
-    }
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/email/EmailTask.java b/src/main/org/apache/tools/ant/taskdefs/email/EmailTask.java
deleted file mode 100644
index 3c912fa..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/email/EmailTask.java
+++ /dev/null
@@ -1,525 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.email;
-
-// Ant imports
-
-import java.io.File;
-import java.util.Enumeration;
-import java.util.StringTokenizer;
-import java.util.Vector;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.DirectoryScanner;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.types.EnumeratedAttribute;
-import org.apache.tools.ant.types.FileSet;
-
-/**
- * A task to send SMTP email. This is a refactoring of the SendMail and
- * MimeMail tasks such that both are within a single task.
- *
- * @author <a href="mailto:umagesh@apache.org">Magesh Umasankar</a>
- * @author glenn_twiggs@bmc.com
- * @author steve_l@iseran.com steve loughran
- * @author ehatcher@apache.org Erik Hatcher
- * @author paulo.gaspar@krankikom.de Paulo Gaspar
- * @author roxspring@yahoo.com Rob Oxspring
- * @since Ant 1.5
- * @ant.task name="mail" category="network"
- */
-public class EmailTask
-     extends Task {
-    /** Constant to show that the best available mailer should be used.  */
-    public static final String AUTO = "auto";
-    /** Constant to allow the Mime mailer to be requested  */
-    public static final String MIME = "mime";
-    /** Constant to allow the UU mailer to be requested  */
-    public static final String UU = "uu";
-    /** Constant to allow the plaintext mailer to be requested  */
-    public static final String PLAIN = "plain";
-
-
-    /**
-     * Enumerates the encoding constants
-     */
-    public static class Encoding extends EnumeratedAttribute {
-        /**
-         * finds the valid encoding values
-         *
-         * @return a list of valid entries
-         */
-        public String[] getValues() {
-            return new String[]
-                {AUTO, MIME, UU, PLAIN};
-        }
-    }
-
-
-    private String encoding = AUTO;
-    /** host running SMTP  */
-    private String host = "localhost";
-    private int port = 25;
-    /** subject field  */
-    private String subject = null;
-    /** any text  */
-    private Message message = null;
-    /** failure flag */
-    private boolean failOnError = true;
-    private boolean includeFileNames = false;
-    private String messageMimeType = null;
-
-    /** sender  */
-    private EmailAddress from = null;
-    /** TO recipients  */
-    private Vector toList = new Vector();
-    /** CC (Carbon Copy) recipients  */
-    private Vector ccList = new Vector();
-    /** BCC (Blind Carbon Copy) recipients  */
-    private Vector bccList = new Vector();
-
-    /** file list  */
-    private Vector files = new Vector();
-    private Vector filesets = new Vector();
-
-
-    /**
-     * Allows the build writer to choose the preferred encoding method
-     *
-     * @param encoding The encoding (one of AUTO,MIME,UU,PLAIN)
-     */
-    public void setEncoding(Encoding encoding) {
-        this.encoding = encoding.getValue();
-    }
-
-
-    /**
-     * Sets the mail server port
-     *
-     * @param port The port to use
-     */
-    public void setMailport(int port) {
-        this.port = port;
-    }
-
-
-    /**
-     * Sets the host
-     *
-     * @param host The host to connect to
-     */
-    public void setMailhost(String host) {
-        this.host = host;
-    }
-
-
-    /**
-     * Sets the subject line of the email
-     *
-     * @param subject Subject of this email.
-     */
-    public void setSubject(String subject) {
-        this.subject = subject;
-    }
-
-
-    /**
-     * Shorthand method to set the message
-     *
-     * @param message Message body of this email.
-     */
-    public void setMessage(String message) {
-        if (this.message != null) {
-            throw new BuildException("Only one message can be sent in an "
-                 + "email");
-        }
-
-        this.message = new Message(message);
-    }
-
-
-    /**
-     * Shorthand method to set the message from a file
-     *
-     * @param file The file from which to take the message
-     */
-    public void setMessageFile(File file) {
-        if (this.message != null) {
-            throw new BuildException("Only one message can be sent in an "
-                 + "email");
-        }
-
-        this.message = new Message(file);
-    }
-
-
-    /**
-     * Shorthand method to set type of the text message, text/plain by default
-     * but text/html or text/xml is quite feasible.
-     *
-     * @param type The new MessageMimeType value
-     */
-    public void setMessageMimeType(String type) {
-        this.messageMimeType = type;
-    }
-
-
-    /**
-     * Add a message elemnt
-     *
-     * @param message The message object
-     * @throws BuildException if a message has already been added
-     */
-    public void addMessage(Message message)
-         throws BuildException {
-        if (this.message != null) {
-            throw new BuildException("Only one message can be sent in an "
-                 + "email");
-        }
-
-        this.message = message;
-    }
-
-
-    /**
-     * Adds a from address element
-     *
-     * @param address The address to send from
-     */
-    public void addFrom(EmailAddress address) {
-        if (this.from != null) {
-            throw new BuildException("Emails can only be from one address");
-        }
-
-        this.from = address;
-    }
-
-
-    /**
-     * Shorthand to set the from address element
-     *
-     * @param address The address to send mail from
-     */
-    public void setFrom(String address) {
-        if (this.from != null) {
-            throw new BuildException("Emails can only be from one address");
-        }
-
-        this.from = new EmailAddress(address);
-    }
-
-
-    /**
-     * Adds a to address element
-     *
-     * @param address An email address
-     */
-    public void addTo(EmailAddress address) {
-        toList.addElement(address);
-    }
-
-
-    /**
-     * Adds "to" address elements
-     *
-     * @param list Comma separated list of addresses
-     */
-    public void setToList(String list) {
-        StringTokenizer tokens = new StringTokenizer(list, ",");
-
-        while (tokens.hasMoreTokens()) {
-            toList.addElement(new EmailAddress(tokens.nextToken()));
-        }
-    }
-
-
-    /**
-     * Adds "cc" address element
-     *
-     * @param address The email address
-     */
-    public void addCc(EmailAddress address) {
-        ccList.addElement(address);
-    }
-
-
-    /**
-     * Adds "cc" address elements
-     *
-     * @param list Comma separated list of addresses
-     */
-    public void setCcList(String list) {
-        StringTokenizer tokens = new StringTokenizer(list, ",");
-
-        while (tokens.hasMoreTokens()) {
-            ccList.addElement(new EmailAddress(tokens.nextToken()));
-        }
-    }
-
-
-    /**
-     * Adds "bcc" address elements
-     *
-     * @param address The email address
-     */
-    public void addBcc(EmailAddress address) {
-        bccList.addElement(address);
-    }
-
-
-    /**
-     * Adds "bcc" address elements
-     *
-     * @param list comma separated list of addresses
-     */
-    public void setBccList(String list) {
-        StringTokenizer tokens = new StringTokenizer(list, ",");
-
-        while (tokens.hasMoreTokens()) {
-            bccList.addElement(new EmailAddress(tokens.nextToken()));
-        }
-    }
-
-
-    /**
-     * Indicates whether BuildExceptions should be passed back to the core
-     *
-     * @param failOnError The new FailOnError value
-     */
-    public void setFailOnError(boolean failOnError) {
-        this.failOnError = failOnError;
-    }
-
-
-    /**
-     * Adds a list of files to be attached
-     *
-     * @param filenames Comma separated list of files
-     */
-    public void setFiles(String filenames) {
-        StringTokenizer t = new StringTokenizer(filenames, ", ");
-
-        while (t.hasMoreTokens()) {
-            files.addElement(project.resolveFile(t.nextToken()));
-        }
-    }
-
-
-    /**
-     * Adds a set of files (nested fileset attribute).
-     *
-     * @param fs The fileset
-     */
-    public void addFileset(FileSet fs) {
-        filesets.addElement(fs);
-    }
-
-
-    /**
-     * Sets Includefilenames attribute
-     *
-     * @param includeFileNames Whether to include filenames in the text of the
-     *      message
-     */
-    public void setIncludefilenames(boolean includeFileNames) {
-        this.includeFileNames = includeFileNames;
-    }
-
-
-    /**
-     * Identifies whether file names should be included
-     *
-     * @return Identifies whether file names should be included
-     */
-    public boolean getIncludeFileNames() {
-        return includeFileNames;
-    }
-
-
-    /** Sends an email  */
-    public void execute() {
-        Message savedMessage = message;
-        Vector savedFiles = (Vector) files.clone();
-
-        try {
-            Mailer mailer = null;
-
-            // prepare for the auto select mechanism
-            boolean autoFound = false;
-
-            // try MIME format
-            if (encoding.equals(MIME)
-                 || (encoding.equals(AUTO) && !autoFound)) {
-                try {
-                    mailer =
-                        (Mailer) Class.forName("org.apache.tools.ant.taskdefs.email.MimeMailer")
-                        .newInstance();
-                    autoFound = true;
-                    log("Using MIME mail", Project.MSG_VERBOSE);
-                } catch (Throwable e) {
-                    log("Failed to initialise MIME mail", Project.MSG_WARN);
-                }
-            }
-
-            // try UU format
-            if (encoding.equals(UU)
-                 || (encoding.equals(AUTO) && !autoFound)) {
-                try {
-                    mailer =
-                        (Mailer) Class.forName("org.apache.tools.ant.taskdefs.email.UUMailer")
-                        .newInstance();
-                    autoFound = true;
-                    log("Using UU mail", Project.MSG_VERBOSE);
-                } catch (Throwable e) {
-                    log("Failed to initialise UU mail", Project.MSG_WARN);
-                }
-            }
-
-            // try plain format
-            if (encoding.equals(PLAIN)
-                 || (encoding.equals(AUTO) && !autoFound)) {
-                mailer = new PlainMailer();
-                autoFound = true;
-                log("Using plain mail", Project.MSG_VERBOSE);
-            }
-
-            // a valid mailer must be present by now
-            if (mailer == null) {
-                throw new BuildException("Failed to initialise encoding: "
-                     + encoding);
-            }
-
-            // a valid message is required
-            if (message == null) {
-                message = new Message();
-            }
-
-            // an address to send from is required
-            if (from == null || from.getAddress() == null) {
-                throw new BuildException("A from element is required");
-            }
-
-            // at least one address to send to/cc/bcc is required
-            if (toList.isEmpty() && ccList.isEmpty() && bccList.isEmpty()) {
-                throw new BuildException("At least one of to,cc or bcc must "
-                     + "be supplied");
-            }
-
-            // set the mimetype if not done already (and required)
-            if (messageMimeType != null) {
-                if (message.isMimeTypeSpecified()) {
-                    throw new BuildException("The mime type can only be "
-                         + "specified in one location");
-                } else {
-                    message.setMimeType(messageMimeType);
-                }
-            }
-
-            // identify which files should be attached
-            Enumeration e = filesets.elements();
-
-            while (e.hasMoreElements()) {
-                FileSet fs = (FileSet) e.nextElement();
-
-                DirectoryScanner ds = fs.getDirectoryScanner(project);
-                String[] includedFiles = ds.getIncludedFiles();
-                File baseDir = ds.getBasedir();
-
-                for (int j = 0; j < includedFiles.length; ++j) {
-                    File file = new File(baseDir, includedFiles[j]);
-
-                    files.addElement(file);
-                }
-            }
-
-            // let the user know what's going to happen
-            log("Sending email: " + subject, Project.MSG_INFO);
-            log("From " + from, Project.MSG_VERBOSE);
-            log("To " + toList, Project.MSG_VERBOSE);
-            log("Cc " + ccList, Project.MSG_VERBOSE);
-            log("Bcc " + bccList, Project.MSG_VERBOSE);
-
-            // pass the params to the mailer
-            mailer.setHost(host);
-            mailer.setPort(port);
-            mailer.setMessage(message);
-            mailer.setFrom(from);
-            mailer.setToList(toList);
-            mailer.setCcList(ccList);
-            mailer.setBccList(bccList);
-            mailer.setFiles(files);
-            mailer.setSubject(subject);
-            mailer.setTask(this);
-            mailer.setIncludeFileNames(includeFileNames);
-
-            // send the email
-            mailer.send();
-
-            // let the user know what happened
-            int count = files.size();
-
-            log("Sent email with " + count + " attachment"
-                 + (count == 1 ? "" : "s"), Project.MSG_INFO);
-        } catch (BuildException e) {
-            log("Failed to send email", Project.MSG_WARN);
-            if (failOnError) {
-                throw e;
-            }
-        } finally {
-            message = savedMessage;
-            files = savedFiles;
-        }
-    }
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/email/Mailer.java b/src/main/org/apache/tools/ant/taskdefs/email/Mailer.java
deleted file mode 100644
index 14c5b38..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/email/Mailer.java
+++ /dev/null
@@ -1,198 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.email;
-
-import java.util.Vector;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Task;
-
-/**
- * Base class for the various emailing implementations.
- *
- * @author roxspring@yahoo.com Rob Oxspring
- * @since Ant 1.5
- */
-abstract class Mailer {
-    protected String host = null;
-    protected int port = -1;
-    protected Message message;
-    protected EmailAddress from;
-    protected Vector toList = null;
-    protected Vector ccList = null;
-    protected Vector bccList = null;
-    protected Vector files = null;
-    protected String subject = null;
-    protected Task task;
-    protected boolean includeFileNames = false;
-
-
-    /**
-     * Sets the mail server
-     *
-     * @param host
-     */
-    public void setHost(String host) {
-        this.host = host;
-    }
-
-
-    /**
-     * Sets the smtp port
-     *
-     * @param port
-     */
-    public void setPort(int port) {
-        this.port = port;
-    }
-
-
-    /**
-     * Sets the message
-     *
-     * @param m
-     */
-    public void setMessage(Message m) {
-        this.message = m;
-    }
-
-
-    /**
-     * Sets the address to send from
-     *
-     * @param from
-     */
-    public void setFrom(EmailAddress from) {
-        this.from = from;
-    }
-
-
-    /**
-     * Set the to addresses
-     *
-     * @param list
-     */
-    public void setToList(Vector list) {
-        this.toList = list;
-    }
-
-
-    /**
-     * Sets the cc addresses
-     *
-     * @param list
-     */
-    public void setCcList(Vector list) {
-        this.ccList = list;
-    }
-
-
-    /**
-     * Sets the bcc addresses
-     *
-     * @param list
-     */
-    public void setBccList(Vector list) {
-        this.bccList = list;
-    }
-
-
-    /**
-     * Sets the files to attach
-     *
-     * @param files
-     */
-    public void setFiles(Vector files) {
-        this.files = files;
-    }
-
-
-    /**
-     * Sets the subject
-     *
-     * @param subject
-     */
-    public void setSubject(String subject) {
-        this.subject = subject;
-    }
-
-
-    /**
-     * Sets the owning task
-     *
-     * @param task
-     */
-    public void setTask(Task task) {
-        this.task = task;
-    }
-
-
-    /**
-     * Indicates whether filenames should be listed in the body
-     *
-     * @param b
-     */
-    public void setIncludeFileNames(boolean b) {
-        this.includeFileNames = b;
-    }
-
-
-    /**
-     * This method should send the email
-     *
-     * @throws BuildException
-     */
-    public abstract void send()
-         throws BuildException;
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/email/Message.java b/src/main/org/apache/tools/ant/taskdefs/email/Message.java
deleted file mode 100644
index b392438..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/email/Message.java
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.email;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileReader;
-import java.io.IOException;
-import java.io.PrintStream;
-
-/**
- * Class representing an email message.
- *
- * @author roxspring@yahoo.com Rob Oxspring
- * @since Ant 1.5
- */
-public class Message {
-    private File messageSource = null;
-    private StringBuffer buffer = new StringBuffer();
-    private String mimeType = "text/plain";
-    private boolean specified = false;
-
-
-    /** Creates a new empty message  */
-    public Message() {
-    }
-
-
-    /**
-     * Creates a new message based on the given string
-     *
-     * @param text the message
-     */
-    public Message(String text) {
-        addText(text);
-    }
-
-
-    /**
-     * Creates a new message using the contents of the given file.
-     *
-     * @param file the source of the message
-     */
-    public Message(File file) {
-        messageSource = file;
-    }
-
-
-    /**
-     * Adds a textual part of the message
-     *
-     * @param text some text to add
-     */
-    public void addText(String text) {
-        buffer.append(text);
-    }
-
-
-    /**
-     * Sets the source file of the message
-     *
-     * @param src the source of the message
-     */
-    public void setSrc(File src) {
-        this.messageSource = src;
-    }
-
-
-    /**
-     * Sets the content type for the message
-     *
-     * @param mimeType a mime type e.g. "text/plain"
-     */
-    public void setMimeType(String mimeType) {
-        this.mimeType = mimeType;
-        specified = true;
-    }
-
-
-    /**
-     * Returns the content type
-     *
-     * @return the mime type
-     */
-    public String getMimeType() {
-        return mimeType;
-    }
-
-
-    /**
-     * Prints the message onto an output stream
-     *
-     * @param out The print stream to write to
-     * @throws IOException if an error occurs
-     */
-    public void print(PrintStream out)
-         throws IOException {
-        if (messageSource != null) {
-            // Read message from a file
-            FileReader freader = new FileReader(messageSource);
-
-            try {
-                BufferedReader in = new BufferedReader(freader);
-                String line = null;
-
-                while ((line = in.readLine()) != null) {
-                    out.println(line);
-                }
-            } finally {
-                freader.close();
-            }
-        } else {
-            out.println(buffer);
-        }
-    }
-
-
-    /**
-     * Returns true iff the mimeType has been set.
-     *
-     * @return false if the default value is in use
-     */
-    public boolean isMimeTypeSpecified() {
-        return specified;
-    }
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/email/MimeMailer.java b/src/main/org/apache/tools/ant/taskdefs/email/MimeMailer.java
deleted file mode 100644
index 754d9a7..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/email/MimeMailer.java
+++ /dev/null
@@ -1,182 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.email;
-
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.IOException;
-import java.io.PrintStream;
-import java.io.UnsupportedEncodingException;
-import java.util.Enumeration;
-import java.util.Properties;
-import java.util.Vector;
-import java.util.Date;
-import javax.activation.DataHandler;
-import javax.activation.FileDataSource;
-import javax.mail.Message;
-import javax.mail.MessagingException;
-import javax.mail.Session;
-import javax.mail.Transport;
-import javax.mail.internet.AddressException;
-import javax.mail.internet.InternetAddress;
-import javax.mail.internet.MimeBodyPart;
-import javax.mail.internet.MimeMessage;
-import javax.mail.internet.MimeMultipart;
-import org.apache.tools.ant.BuildException;
-
-/**
- * Uses the JavaMail classes to send Mime format email.
- *
- * @author roxspring@yahoo.com Rob Oxspring
- * @since Ant 1.5
- */
-class MimeMailer extends Mailer {
-    /** Sends the email  */
-    public void send() {
-        try {
-            Properties props = new Properties();
-
-            props.put("mail.smtp.host", host);
-            props.put("mail.smtp.port", String.valueOf(port));
-
-            // Aside, the JDK is clearly unaware of the scottish
-            // 'session', which //involves excessive quantities of
-            // alcohol :-)
-            Session sesh = Session.getDefaultInstance(props, null);
-
-            //create the message
-            MimeMessage msg = new MimeMessage(sesh);
-            MimeMultipart attachments = new MimeMultipart();
-
-            //set the sender
-            if (from.getName() == null) {
-                msg.setFrom(new InternetAddress(from.getAddress()));
-            } else {
-                msg.setFrom(new InternetAddress(from.getAddress(),
-                    from.getName()));
-            }
-
-            msg.setRecipients(Message.RecipientType.TO,
-                internetAddresses(toList));
-            msg.setRecipients(Message.RecipientType.CC,
-                internetAddresses(ccList));
-            msg.setRecipients(Message.RecipientType.BCC,
-                internetAddresses(bccList));
-
-            if (subject != null) {
-                msg.setSubject(subject);
-            }
-            msg.addHeader("Date", (new Date()).toString());
-
-            ByteArrayOutputStream baos = new ByteArrayOutputStream();
-            PrintStream out = new PrintStream(baos);
-
-            message.print(out);
-            out.close();
-
-            MimeBodyPart textbody = new MimeBodyPart();
-
-            textbody.setContent(baos.toString(), message.getMimeType());
-            attachments.addBodyPart(textbody);
-
-            Enumeration e = files.elements();
-
-            while (e.hasMoreElements()) {
-                File file = (File) e.nextElement();
-
-                MimeBodyPart body;
-
-                body = new MimeBodyPart();
-                if (!file.exists() || !file.canRead()) {
-                    throw new BuildException("File \"" + file.getAbsolutePath()
-                         + "\" does not exist or is not "
-                         + "readable.");
-                }
-                FileDataSource fileData = new FileDataSource(file);
-                DataHandler fileDataHandler = new DataHandler(fileData);
-
-                body.setDataHandler(fileDataHandler);
-                body.setFileName(file.getName());
-                attachments.addBodyPart(body);
-            }
-
-            msg.setContent(attachments);
-            Transport.send(msg);
-        } catch (MessagingException e) {
-            throw new BuildException("Problem while sending mime mail:", e);
-        } catch (IOException e) {
-            throw new BuildException("Problem while sending mime mail:", e);
-        }
-    }
-
-
-    private static InternetAddress[] internetAddresses(Vector list)
-         throws AddressException, UnsupportedEncodingException {
-        InternetAddress[] addrs = new InternetAddress[list.size()];
-
-        for (int i = 0; i < list.size(); ++i) {
-            EmailAddress addr = (EmailAddress) list.elementAt(i);
-
-            if (addr.getName() == null) {
-                addrs[i] = new InternetAddress(addr.getAddress());
-            } else {
-                addrs[i] = new InternetAddress(addr.getAddress(),
-                    addr.getName());
-            }
-        }
-
-        return addrs;
-    }
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/email/PlainMailer.java b/src/main/org/apache/tools/ant/taskdefs/email/PlainMailer.java
deleted file mode 100644
index c72c319..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/email/PlainMailer.java
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.email;
-
-import java.io.BufferedInputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.PrintStream;
-import java.util.Enumeration;
-import java.util.Date;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.mail.MailMessage;
-
-/**
- * Class responsible for sending email through raw protocol methods.
- *
- * @author roxspring@yahoo.com Rob Oxspring
- * @since Ant 1.5
- */
-class PlainMailer extends Mailer {
-    /**
-     * Sends the email using the apache MailMessage class.
-     *
-     * @see org.apache.tools.mail.MailMessage
-     */
-    public void send() {
-        try {
-            MailMessage mailMessage = new MailMessage(host);
-
-            mailMessage.setPort(port);
-
-            mailMessage.from(from.toString());
-
-            Enumeration e;
-
-            e = toList.elements();
-            while (e.hasMoreElements()) {
-                mailMessage.to(e.nextElement().toString());
-            }
-
-            e = ccList.elements();
-            while (e.hasMoreElements()) {
-                mailMessage.cc(e.nextElement().toString());
-            }
-
-            e = bccList.elements();
-            while (e.hasMoreElements()) {
-                mailMessage.bcc(e.nextElement().toString());
-            }
-
-            if (subject != null) {
-                mailMessage.setSubject(subject);
-            }
-
-            mailMessage.setHeader("Date", (new Date()).toString());
-            mailMessage.setHeader("Content-Type", message.getMimeType());
-
-            PrintStream out = mailMessage.getPrintStream();
-
-            message.print(out);
-
-            e = files.elements();
-            while (e.hasMoreElements()) {
-                File file = (File) e.nextElement();
-
-                attach(file, out);
-            }
-
-            mailMessage.sendAndClose();
-        } catch (IOException ioe) {
-            throw new BuildException("IO error sending mail", ioe);
-        }
-
-    }
-
-
-    /**
-     * Attaches a file to this email
-     *
-     * @param file The file to attache
-     * @param out The message stream to add to
-     * @throws IOException if errors occur
-     */
-    protected void attach(File file, PrintStream out)
-         throws IOException {
-        if (!file.exists() || !file.canRead()) {
-            throw new BuildException("File \"" + file.getName()
-                 + "\" does not exist or is not "
-                 + "readable.");
-        }
-
-        if (includeFileNames) {
-            out.println();
-
-            String filename = file.getName();
-            int filenamelength = filename.length();
-
-            out.println(filename);
-            for (int star = 0; star < filenamelength; star++) {
-                out.print('=');
-            }
-            out.println();
-        }
-
-        int length;
-        byte[] buf = new byte[1024];
-        FileInputStream finstr = new FileInputStream(file);
-
-        try {
-            BufferedInputStream in = new BufferedInputStream(finstr, buf.length);
-
-            while ((length = in.read(buf)) != -1) {
-                out.write(buf, 0, length);
-            }
-        } finally {
-            finstr.close();
-        }
-    }
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/email/UUMailer.java b/src/main/org/apache/tools/ant/taskdefs/email/UUMailer.java
deleted file mode 100644
index 16f8284..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/email/UUMailer.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.email;
-
-import java.io.BufferedInputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.PrintStream;
-import org.apache.tools.ant.BuildException;
-import sun.misc.UUEncoder;
-
-/**
- * An emailer that uuencodes attachments.
- *
- * @author roxspring@yahoo.com Rob Oxspring
- * @since Ant 1.5
- */
-class UUMailer extends PlainMailer {
-    protected void attach(File file, PrintStream out)
-         throws IOException {
-        if (!file.exists() || !file.canRead()) {
-            throw new BuildException("File \"" + file.getName()
-                 + "\" does not exist or is not "
-                 + "readable.");
-        }
-
-        FileInputStream finstr = new FileInputStream(file);
-
-        try {
-            BufferedInputStream in = new BufferedInputStream(finstr);
-            UUEncoder encoder = new UUEncoder(file.getName());
-
-            encoder.encode(in, out);
-
-        } finally {
-            finstr.close();
-        }
-    }
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/ANTLR.java b/src/main/org/apache/tools/ant/taskdefs/optional/ANTLR.java
deleted file mode 100644
index 8f45778..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/ANTLR.java
+++ /dev/null
@@ -1,253 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileReader;
-import java.io.IOException;
-import java.net.URL;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.taskdefs.Execute;
-import org.apache.tools.ant.taskdefs.LogStreamHandler;
-import org.apache.tools.ant.types.Commandline;
-import org.apache.tools.ant.types.CommandlineJava;
-import org.apache.tools.ant.types.Path;
-
-/**
- * ANTLR task.
- *
- * @author <a href="mailto:emeade@geekfarm.org">Erik Meade</a>
- * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
- */
-public class ANTLR extends Task {
-
-    private CommandlineJava commandline = new CommandlineJava();
-
-    /** the file to process */
-    private File target;
-
-    /** where to output the result */
-    private File outputDirectory;
-
-    /** should fork ? */
-    private final boolean fork = true;
-
-    /** working directory */
-    private File workingdir = null;
-
-    public ANTLR() {
-        commandline.setVm("java");
-        commandline.setClassname("antlr.Tool");
-    }
-
-    public void setTarget(File target) {
-        log("Setting target to: " + target.toString(), Project.MSG_VERBOSE);
-        this.target = target;
-    }
-
-    public void setOutputdirectory(File outputDirectory) {
-        log("Setting output directory to: " + outputDirectory.toString(), Project.MSG_VERBOSE);
-        this.outputDirectory = outputDirectory;
-    }
-
-    // we are forced to fork ANTLR since there is a call
-    // to System.exit() and there is nothing we can do
-    // right now to avoid this. :-( (SBa)
-    // I'm not removing this method to keep backward compatibility
-    // and
-    public void setFork(boolean s) {
-        //this.fork = s;
-    }
-
-    /**
-     * The working directory of the process
-     */
-    public void setDir(File d) {
-        this.workingdir = d;
-    }
-
-    /**
-     * <code>&lt;classpath&gt;</code> allows classpath to be set
-     * because a directory might be given for Antlr debug...
-     */
-    public Path createClasspath() {
-        return commandline.createClasspath(project).createPath();
-    }
-
-    /**
-     * Create a new JVM argument. Ignored if no JVM is forked.
-     * @return  create a new JVM argument so that any argument can be passed to the JVM.
-     * @see #setFork(boolean)
-     */
-    public Commandline.Argument createJvmarg() {
-        return commandline.createVmArgument();
-    }
-
-    /**
-     * Adds the jars or directories containing Antlr
-     * this should make the forked JVM work without having to
-     * specify it directly.
-     */
-    public void init() throws BuildException {
-        addClasspathEntry("/antlr/Tool.class");
-    }
-
-    /**
-     * Search for the given resource and add the directory or archive
-     * that contains it to the classpath.
-     *
-     * <p>Doesn't work for archives in JDK 1.1 as the URL returned by
-     * getResource doesn't contain the name of the archive.</p>
-     */
-    protected void addClasspathEntry(String resource) {
-        URL url = getClass().getResource(resource);
-        if (url != null) {
-            String u = url.toString();
-            if (u.startsWith("jar:file:")) {
-                int pling = u.indexOf("!");
-                String jarName = u.substring(9, pling);
-                log("Implicitly adding " + jarName + " to classpath",
-                        Project.MSG_DEBUG);
-                createClasspath().setLocation(new File((new File(jarName)).getAbsolutePath()));
-            } else if (u.startsWith("file:")) {
-                int tail = u.indexOf(resource);
-                String dirName = u.substring(5, tail);
-                log("Implicitly adding " + dirName + " to classpath",
-                        Project.MSG_DEBUG);
-                createClasspath().setLocation(new File((new File(dirName)).getAbsolutePath()));
-            } else {
-                log("Don\'t know how to handle resource URL " + u,
-                        Project.MSG_DEBUG);
-            }
-        } else {
-            log("Couldn\'t find " + resource, Project.MSG_DEBUG);
-        }
-    }
-
-    public void execute() throws BuildException {
-        validateAttributes();
-        //TODO: use ANTLR to parse the grammer file to do this.
-        if (target.lastModified() > getGeneratedFile().lastModified()) {
-            commandline.createArgument().setValue("-o");
-            commandline.createArgument().setValue(outputDirectory.toString());
-            commandline.createArgument().setValue(target.toString());
-
-            log(commandline.describeCommand(), Project.MSG_VERBOSE);
-            int err = run(commandline.getCommandline());
-            if (err == 1) {
-                throw new BuildException("ANTLR returned: " + err, location);
-            }
-        } else {
-            log("Skipped grammar file. Generated file is newer.", Project.MSG_VERBOSE);
-        }
-    }
-
-    private void validateAttributes() throws BuildException {
-        if (target == null || !target.isFile()) {
-            throw new BuildException("Invalid target: " + target);
-        }
-
-        // if no output directory is specified, used the target's directory
-        if (outputDirectory == null) {
-            String fileName = target.toString();
-            setOutputdirectory(new File(target.getParent()));
-        }
-        if (!outputDirectory.isDirectory()) {
-            throw new BuildException("Invalid output directory: " + outputDirectory);
-        }
-    }
-
-    private File getGeneratedFile() throws BuildException {
-        String generatedFileName = null;
-        try {
-            BufferedReader in = new BufferedReader(new FileReader(target));
-            String line;
-            while ((line = in.readLine()) != null) {
-                int extendsIndex = line.indexOf(" extends ");
-                if (line.startsWith("class ") && extendsIndex > -1) {
-                    generatedFileName = line.substring(6, extendsIndex).trim();
-                    break;
-                }
-            }
-            in.close();
-        } catch (Exception e) {
-            throw new BuildException("Unable to determine generated class", e);
-        }
-        if (generatedFileName == null) {
-            throw new BuildException("Unable to determine generated class");
-        }
-        return new File(outputDirectory, generatedFileName + ".java");
-    }
-
-    /** execute in a forked VM */
-    private int run(String[] command) throws BuildException {
-        Execute exe = new Execute(new LogStreamHandler(this, Project.MSG_INFO,
-                Project.MSG_WARN), null);
-        exe.setAntRun(project);
-        if (workingdir != null) {
-            exe.setWorkingDirectory(workingdir);
-        }
-        exe.setCommandline(command);
-        try {
-            return exe.execute();
-        } catch (IOException e) {
-            throw new BuildException(e, location);
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/Cab.java b/src/main/org/apache/tools/ant/taskdefs/optional/Cab.java
deleted file mode 100644
index cc3e168..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/Cab.java
+++ /dev/null
@@ -1,364 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.PrintWriter;
-import java.util.Enumeration;
-import java.util.Vector;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.DirectoryScanner;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.taskdefs.Execute;
-import org.apache.tools.ant.taskdefs.ExecTask;
-import org.apache.tools.ant.taskdefs.LogOutputStream;
-import org.apache.tools.ant.taskdefs.MatchingTask;
-import org.apache.tools.ant.taskdefs.StreamPumper;
-import org.apache.tools.ant.taskdefs.condition.Os;
-import org.apache.tools.ant.types.Commandline;
-import org.apache.tools.ant.types.FileSet;
-import org.apache.tools.ant.util.FileUtils;
-
-
-/**
- * Create a CAB archive.
- *
- * @author Roger Vaughn <a href="mailto:rvaughn@seaconinc.com">rvaughn@seaconinc.com</a>
- */
-
-public class Cab extends MatchingTask {
-
-    private File cabFile;
-    private File baseDir;
-    private Vector filesets = new Vector();
-    private boolean doCompress = true;
-    private boolean doVerbose = false;
-    private String cmdOptions;
-
-    protected String archiveType = "cab";
-
-    private FileUtils fileUtils = FileUtils.newFileUtils();
-
-    /**
-     * This is the name/location of where to
-     * create the .cab file.
-     */
-    public void setCabfile(File cabFile) {
-        this.cabFile = cabFile;
-    }
-
-    /**
-     * This is the base directory to look in for
-     * things to cab.
-     */
-    public void setBasedir(File baseDir) {
-        this.baseDir = baseDir;
-    }
-
-    /**
-     * Sets whether we want to compress the files or only store them.
-     */
-    public void setCompress(boolean compress) {
-        doCompress = compress;
-    }
-
-    /**
-     * Sets whether we want to see or suppress cabarc output.
-     */
-    public void setVerbose(boolean verbose) {
-        doVerbose = verbose;
-    }
-
-    /**
-     * Sets additional cabarc options that aren't supported directly.
-     */
-    public void setOptions(String options) {
-        cmdOptions = options;
-    }
-
-    /**
-     * Adds a set of files (nested fileset attribute).
-     */
-    public void addFileset(FileSet set) {
-        filesets.addElement(set);
-    }
-
-    /*
-     * I'm not fond of this pattern: "sub-method expected to throw
-     * task-cancelling exceptions".  It feels too much like programming
-     * for side-effects to me...
-     */
-    protected void checkConfiguration() throws BuildException {
-        if (baseDir == null) {
-            throw new BuildException("basedir attribute must be set!");
-        }
-        if (!baseDir.exists()) {
-            throw new BuildException("basedir does not exist!");
-        }
-        if (cabFile == null) {
-            throw new BuildException("cabfile attribute must be set!");
-        }
-    }
-
-    /**
-     * Create a new exec delegate.  The delegate task is populated so that
-     * it appears in the logs to be the same task as this one.
-     */
-    protected ExecTask createExec() throws BuildException {
-        ExecTask exec = (ExecTask) project.createTask("exec");
-        exec.setOwningTarget(this.getOwningTarget());
-        exec.setTaskName(this.getTaskName());
-        exec.setDescription(this.getDescription());
-
-        return exec;
-    }
-
-    /**
-     * Check to see if the target is up to date with respect to input files.
-     * @return true if the cab file is newer than its dependents.
-     */
-    protected boolean isUpToDate(Vector files) {
-        boolean upToDate = true;
-        for (int i = 0; i < files.size() && upToDate; i++) {
-            String file = files.elementAt(i).toString();
-            if (new File(baseDir, file).lastModified() >
-                cabFile.lastModified()) {
-                upToDate = false;
-            }
-        }
-        return upToDate;
-    }
-
-    /**
-     * Create the cabarc command line to use.
-     */
-    protected Commandline createCommand(File listFile) {
-        Commandline command = new Commandline();
-        command.setExecutable("cabarc");
-        command.createArgument().setValue("-r");
-        command.createArgument().setValue("-p");
-
-        if (!doCompress) {
-            command.createArgument().setValue("-m");
-            command.createArgument().setValue("none");
-        }
-
-        if (cmdOptions != null) {
-            command.createArgument().setLine(cmdOptions);
-        }
-
-        command.createArgument().setValue("n");
-        command.createArgument().setFile(cabFile);
-        command.createArgument().setValue("@" + listFile.getAbsolutePath());
-
-        return command;
-    }
-
-    /**
-     * Creates a list file.  This temporary file contains a list of all files
-     * to be included in the cab, one file per line.
-     */
-    protected File createListFile(Vector files)
-        throws IOException {
-        File listFile = fileUtils.createTempFile("ant", "", null);
-
-        PrintWriter writer = new PrintWriter(new FileOutputStream(listFile));
-
-        for (int i = 0; i < files.size(); i++) {
-            writer.println(files.elementAt(i).toString());
-        }
-        writer.close();
-
-        return listFile;
-    }
-
-    /**
-     * Append all files found by a directory scanner to a vector.
-     */
-    protected void appendFiles(Vector files, DirectoryScanner ds) {
-        String[] dsfiles = ds.getIncludedFiles();
-
-        for (int i = 0; i < dsfiles.length; i++) {
-            files.addElement(dsfiles[i]);
-        }
-    }
-
-    /**
-     * Get the complete list of files to be included in the cab.  Filenames
-     * are gathered from filesets if any have been added, otherwise from the
-     * traditional include parameters.
-     */
-    protected Vector getFileList() throws BuildException {
-        Vector files = new Vector();
-
-        if (filesets.size() == 0) {
-            // get files from old methods - includes and nested include
-            appendFiles(files, super.getDirectoryScanner(baseDir));
-        } else {
-            // get files from filesets
-            for (int i = 0; i < filesets.size(); i++) {
-                FileSet fs = (FileSet) filesets.elementAt(i);
-                if (fs != null) {
-                    appendFiles(files, fs.getDirectoryScanner(project));
-                }
-            }
-        }
-
-        return files;
-    }
-
-    public void execute() throws BuildException {
-
-        checkConfiguration();
-
-        Vector files = getFileList();
-
-        // quick exit if the target is up to date
-        if (isUpToDate(files)) {
-            return;
-        }
-
-        log("Building " + archiveType + ": " + cabFile.getAbsolutePath());
-
-        if (!Os.isFamily("windows")) {
-            log("Using listcab/libcabinet", Project.MSG_VERBOSE);
-
-            StringBuffer sb = new StringBuffer();
-
-            Enumeration fileEnum = files.elements();
-
-            while (fileEnum.hasMoreElements()) {
-                sb.append(fileEnum.nextElement()).append("\n");
-            }
-            sb.append("\n").append(cabFile.getAbsolutePath()).append("\n");
-
-            try {
-                Process p = Execute.launch(getProject(), 
-                                           new String[] {"listcab"}, null,
-                                           baseDir, true);
-                OutputStream out = p.getOutputStream();
-                out.write(sb.toString().getBytes());
-                out.flush();
-                out.close();
-
-                // Create the stream pumpers to forward listcab's stdout and stderr to the log
-                // note: listcab is an interactive program, and issues prompts for every new line.
-                //       Therefore, make it show only with verbose logging turned on.
-                LogOutputStream outLog = new LogOutputStream(this, Project.MSG_VERBOSE);
-                LogOutputStream errLog = new LogOutputStream(this, Project.MSG_ERR);
-                StreamPumper    outPump = new StreamPumper(p.getInputStream(), outLog);
-                StreamPumper    errPump = new StreamPumper(p.getErrorStream(), errLog);
-                
-                // Pump streams asynchronously
-                (new Thread(outPump)).start();
-                (new Thread(errPump)).start();
-
-                int result = -99; // A wild default for when the thread is interrupted
-
-                try {
-                    // Wait for the process to finish
-                    result = p.waitFor();
-
-                    // Wait for the end of output and error streams
-                    outPump.waitFor();
-                    outLog.close();
-                    errPump.waitFor();
-                    errLog.close();
-                } catch (InterruptedException ie) {
-                    log("Thread interrupted: " + ie);
-                }
-
-                // Informative summary message in case of errors
-                if (result != 0) {
-                    log("Error executing listcab; error code: " + result);
-                }
-            } catch (IOException ex) {
-                String msg = "Problem creating " + cabFile + " " + ex.getMessage();
-                throw new BuildException(msg);
-            }
-        } else {
-            try {
-                File listFile = createListFile(files);
-                ExecTask exec = createExec();
-                File outFile = null;
-
-                // die if cabarc fails
-                exec.setFailonerror(true);
-                exec.setDir(baseDir);
-
-                if (!doVerbose) {
-                    outFile = fileUtils.createTempFile("ant", "", null);
-                    exec.setOutput(outFile);
-                }
-
-                exec.setCommand(createCommand(listFile));
-                exec.execute();
-
-                if (outFile != null) {
-                    outFile.delete();
-                }
-
-                listFile.delete();
-            } catch (IOException ioe) {
-                String msg = "Problem creating " + cabFile + " " + ioe.getMessage();
-                throw new BuildException(msg);
-            }
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/EchoProperties.java b/src/main/org/apache/tools/ant/taskdefs/optional/EchoProperties.java
deleted file mode 100644
index 4a30626..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/EchoProperties.java
+++ /dev/null
@@ -1,282 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional;
-
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.BuildException;
-
-import java.util.Properties;
-import java.util.Hashtable;
-import java.util.Enumeration;
-
-import java.io.ByteArrayOutputStream;
-import java.io.OutputStream;
-import java.io.File;
-import java.io.IOException;
-import java.io.FileOutputStream;
-
-/**
- *  Displays all the current properties in the build. The output can be sent to
- *  a file if desired. <P>
- *
- *  Attribute "destfile" defines a file to send the properties to. This can be
- *  processed as a standard property file later. <P>
- *
- *  Attribute "prefix" defines a prefix which is used to filter the properties
- *  only those properties starting with this prefix will be echoed. <P>
- *
- *  By default, the "failonerror" attribute is enabled. If an error occurs while
- *  writing the properties to a file, and this attribute is enabled, then a
- *  BuildException will be thrown. If disabled, then IO errors will be reported
- *  as a log statement, but no error will be thrown. <P>
- *
- *  Examples: <pre>
- *  &lt;echoproperties  /&gt;
- * </pre> Report the current properties to the log. <P>
- *
- *  <pre>
- *  &lt;echoproperties destfile="my.properties" /&gt;
- * </pre> Report the current properties to the file "my.properties", and will
- *  fail the build if the file could not be created or written to. <P>
- *
- *  <pre>
- *  &lt;echoproperties destfile="my.properties" failonerror="false"
- *      prefix="ant" /&gt;
- * </pre> Report all properties beginning with 'ant' to the file
- *  "my.properties", and will log a message if the file could not be created or
- *  written to, but will still allow the build to continue.
- *
- *@author     Matt Albrecht <a href="mailto:groboclown@users.sourceforge.net">
- *      groboclown@users.sourceforge.net</a>
- *@since      Ant 1.5
- */
-public class EchoProperties extends Task {
-
-    /**
-     *  File object pointing to the output file. If this is null, then we output
-     *  to the project log, not to a file.
-     */
-    private File destfile = null;
-
-    /**
-     *  If this is true, then errors generated during file output will become
-     *  build errors, and if false, then such errors will be logged, but not
-     *  thrown.
-     */
-    private boolean failonerror = true;
-
-    /**
-     *  Prefix string controls which properties to save.
-     */
-    private String prefix = null;
-
-
-    /**
-     *  Set a file to store the property output.  If this is never specified,
-     *  then the output will be sent to the Ant log.
-     *
-     *@param destfile file to store the property output
-     */
-    public void setDestfile(File destfile) {
-        this.destfile = destfile;
-    }
-
-
-    /**
-     *  Sets the failure mode for the task.
-     *
-     *@param  failonerror  <tt>true</tt> if IO exceptions are reported as build
-     *      exceptions, or <tt>false</tt> if IO exceptions are ignored.
-     */
-    public void setFailOnError(boolean failonerror) {
-        this.failonerror = failonerror;
-    }
-
-
-    /**
-     *  If the prefix is set, then only properties which start with this
-     *  prefix string will be recorded.  If this is never set, or it is set
-     *  to an empty string or <tt>null</tt>, then all properties will be
-     *  recorded. <P>
-     *
-     *  For example, if the property is set as:
-     *    <PRE>&lt;echoproperties  prefix="ant." /&gt;</PRE>
-     *  then the property "ant.home" will be recorded, but "ant-example"
-     *  will not.
-     *
-     *@param  prefix  The new prefix value
-     */
-    public void setPrefix(String prefix) {
-        this.prefix = prefix;
-    }
-
-
-    /**
-     *  Run the task.
-     *
-     *@exception  BuildException  trouble, probably file IO
-     */
-    public void execute() throws BuildException {
-        //copy the properties file
-        Hashtable allProps = project.getProperties();
-
-        try {
-            if (destfile == null) {
-                ByteArrayOutputStream baos = new ByteArrayOutputStream();
-                saveProperties(allProps, baos);
-                log(baos.toString(), Project.MSG_INFO);
-            } else {
-                OutputStream os = new FileOutputStream(this.destfile);
-                saveProperties(allProps, os);
-            }
-        } catch (IOException ioe) {
-            String message =
-                    "Destfile " + destfile + " could not be written to.";
-            if (failonerror) {
-                throw new BuildException(message, ioe,
-                        location);
-            } else {
-                log(message, Project.MSG_INFO);
-            }
-        }
-    }
-
-
-    /**
-     *  Send the key/value pairs in the hashtable to the given output stream.
-     *  Only those properties matching the <tt>prefix</tt> constraint will be
-     *  sent to the output stream.
-     *  The output stream will be closed when this method returns.
-     *
-     *@param  allProps         propfile to save
-     *@param  os               output stream
-     *@exception  IOException  trouble
-     */
-    protected void saveProperties(Hashtable allProps, OutputStream os)
-             throws IOException, BuildException {
-        Properties props = new Properties();
-        Enumeration enum = allProps.keys();
-        while (enum.hasMoreElements()) {
-            String name = (String) enum.nextElement();
-                String value = (String) allProps.get(name);
-            if (prefix == null || name.indexOf(prefix) == 0) {
-                props.put(name, value);
-            }
-        }
-        try {
-            jdkSaveProperties(props, os, "Ant properties");
-        } finally {
-            os.close();
-        }
-    }
-    
-    
-    /**
-     *  JDK 1.2 allows for the safer method
-     *  <tt>Properties.store( OutputStream, String )</tt>, which throws an
-     *  <tt>IOException</tt> on an output error.  This method attempts to
-     *  use the JDK 1.2 method first, and if that does not exist, then the
-     *  JDK 1.0 compatible method
-     *  <tt>Properties.save( OutputStream, String )</tt> is used instead.
-     *
-     *@param props the properties to record
-     *@param os record the properties to this output stream
-     *@param header prepend this header to the property output
-     *@exception IOException on an I/O error during a write.  Only thrown
-     *      for JDK 1.2+.
-     */
-    protected void jdkSaveProperties(Properties props, OutputStream os,
-                                     String header) throws IOException {
-        try {
-            java.lang.reflect.Method m = props.getClass().getMethod(
-                "store", new Class[]{OutputStream.class, String.class});
-            m.invoke(props, new Object[]{os, header});
-        } catch (java.lang.reflect.InvocationTargetException ite) {
-            Throwable t = ite.getTargetException();
-            if (t instanceof IOException) {
-                throw (IOException) t;
-            }
-            if (t instanceof RuntimeException) {
-                throw (RuntimeException) t;
-            }
-            
-            // not an expected exception.  Resort to JDK 1.0 to execute
-            // this method
-            jdk10SaveProperties(props, os, header);
-        } catch (ThreadDeath td) {
-            // don't trap thread death errors.
-            throw td;
-        } catch (Throwable ex) {
-            // this 'store' method is not available, so resort to the JDK 1.0
-            // compatible method.
-            jdk10SaveProperties(props, os, header);
-        }
-    }
-    
-    
-    /**
-     * Save the properties to the output stream using the JDK 1.0 compatible
-     * method.  This won't throw an <tt>IOException</tt> on an output error.
-     *
-     *@param props the properties to record
-     *@param os record the properties to this output stream
-     *@param header prepend this header to the property output
-     */
-    protected void jdk10SaveProperties(Properties props, OutputStream os,
-            String header) {
-        props.save(os, header);
-    }
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/IContract.java b/src/main/org/apache/tools/ant/taskdefs/optional/IContract.java
deleted file mode 100644
index 0de4c5f..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/IContract.java
+++ /dev/null
@@ -1,896 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional;
-
-
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.PrintStream;
-import java.util.Date;
-import java.util.Properties;
-import org.apache.tools.ant.BuildEvent;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.BuildListener;
-import org.apache.tools.ant.DirectoryScanner;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.taskdefs.Java;
-import org.apache.tools.ant.taskdefs.Javac;
-import org.apache.tools.ant.taskdefs.MatchingTask;
-import org.apache.tools.ant.taskdefs.Mkdir;
-import org.apache.tools.ant.taskdefs.compilers.DefaultCompilerAdapter;
-
-import org.apache.tools.ant.types.Path;
-import org.apache.tools.ant.types.Reference;
-
-/**
- * Instruments Java classes with <a href="http://www.reliable-systems.com/tools/">iContract</a>
- * DBC preprocessor.
- * <br/>
- * The task can generate a properties file for <a href="http://hjem.sol.no/hellesoy/icontrol.html">iControl</a>,
- * a graphical user interface that lets you turn on/off assertions. iControl generates a control file that you can refer to
- * from this task using the controlfile attribute.
- * <p/>
- * Thanks to Rainer Schmitz for enhancements and comments.
- *
- * @author <a href="mailto:aslak.hellesoy@bekk.no">Aslak Helles�a>
- *
- * <p/>
- * <table border="1" cellpadding="2" cellspacing="0">
- *   <tr>
- *     <td valign="top"><b>Attribute</b></td>
- *     <td valign="top"><b>Description</b></td>
- *     <td align="center" valign="top"><b>Required</b></td>
- *   </tr>
- *   <tr>
- *     <td valign="top">srcdir</td>
- *     <td valign="top">Location of the java files.</td>
- *     <td valign="top" align="center">Yes</td>
- *   </tr>
- *   <tr>
- *     <td valign="top">instrumentdir</td>
- *     <td valign="top">Indicates where the instrumented source files should go.</td>
- *     <td valign="top" align="center">Yes</td>
- *   </tr>
- *   <tr>
- *     <td valign="top">repositorydir</td>
- *     <td valign="top">Indicates where the repository source files should go.</td>
- *     <td valign="top" align="center">Yes</td>
- *   </tr>
- *   <tr>
- *     <td valign="top">builddir</td>
- *     <td valign="top">Indicates where the compiled instrumented classes should go.
- *       Defaults to the value of instrumentdir.
- *       </p>
- *       <em>NOTE:</em> Don't use the same directory for compiled instrumented classes
- *       and uninstrumented classes. It will break the dependency checking. (Classes will
- *       not be reinstrumented if you change them).</td>
- *     <td valign="top" align="center">No</td>
- *   </tr>
- *   <tr>
- *     <td valign="top">repositorybuilddir</td>
- *     <td valign="top">Indicates where the compiled repository classes should go.
- *       Defaults to the value of repositorydir.</td>
- *     <td valign="top" align="center">No</td>
- *   </tr>
- *   <tr>
- *     <td valign="top">pre</td>
- *     <td valign="top">Indicates whether or not to instrument for preconditions.
- *       Defaults to <code>true</code> unless controlfile is specified, in which case it
- *       defaults to <code>false</code>.</td>
- *     <td valign="top" align="center">No</td>
- *   </tr>
- *   <tr>
- *     <td valign="top">post</td>
- *     <td valign="top">Indicates whether or not to instrument for postconditions.
- *       Defaults to <code>true</code> unless controlfile is specified, in which case it
- *       defaults to <code>false</code>.</td>
- *     <td valign="top" align="center">No</td>
- *   </tr>
- *   <tr>
- *     <td valign="top">invariant</td>
- *     <td valign="top">Indicates whether or not to instrument for invariants.
- *       Defaults to <code>true</code> unless controlfile is specified, in which case it
- *       defaults to <code>false</code>.</td>
- *     <td valign="top" align="center">No</td>
- *   </tr>
- *   <tr>
- *     <td valign="top">failthrowable</td>
- *     <td valign="top">The full name of the Throwable (Exception) that should be
- *       thrown when an assertion is violated. Defaults to <code>java.lang.Error</code></td>
- *     <td valign="top" align="center">No</td>
- *   </tr>
- *   <tr>
- *     <td valign="top">verbosity</td>
- *     <td valign="top">Indicates the verbosity level of iContract. Any combination
- *       of <code>error*,warning*,note*,info*,progress*,debug*</code> (comma separated) can be
- *       used. Defaults to <code>error*</code></td>
- *     <td valign="top" align="center">No</td>
- *   </tr>
- *   <tr>
- *     <td valign="top">quiet</td>
- *     <td valign="top">Indicates if iContract should be quiet. Turn it off if many your classes extend uninstrumented classes
- *     and you don't want warnings about this. Defaults to <code>false</code></td>
- *     <td valign="top" align="center">No</td>
- *   </tr>
- *   <tr>
- *     <td valign="top">updateicontrol</td>
- *     <td valign="top">If set to true, it indicates that the properties file for
- *       iControl in the current directory should be updated (or created if it doesn't exist).
- *       Defaults to <code>false</code>.</td>
- *     <td valign="top" align="center">No</td>
- *   </tr>
- *   <tr>
- *     <td valign="top">controlfile</td>
- *     <td valign="top">The name of the control file to pass to iContract. Consider using iControl to generate the file.
- *       Default is not to pass a file. </td>
- *     <td valign="top" align="center">Only if <code>updateicontrol=true</code></td>
- *   </tr>
- *   <tr>
- *     <td valign="top">classdir</td>
- *     <td valign="top">Indicates where compiled (unistrumented) classes are located.
- *       This is required in order to properly update the icontrol.properties file, not
- *       for instrumentation.</td>
- *     <td valign="top" align="center">Only if <code>updateicontrol=true</code></td>
- *   </tr>
- *   <tr>
- *     <td valign="top">targets</td>
- *     <td valign="top">Name of the file that will be generated by this task, which lists all the
- *        classes that iContract will instrument. If specified, the file will not be deleted after execution.
- *        If not specified, a file will still be created, but it will be deleted after execution.</td>
- *     <td valign="top" align="center">No</td>
- *   </tr>
- * </table>
- *
- * <p/>
- * <b>Note:</b> iContract will use the java compiler indicated by the project's
- * <code>build.compiler</code> property. See documentation of the Javac task for
- * more information.
- * <p/>
- * Nested includes and excludes are also supported.
- *
- * <p><b>Example:</b></p>
- * <pre>
- * &lt;icontract
- *    srcdir="${build.src}"
- *    instrumentdir="${build.instrument}"
- *    repositorydir="${build.repository}"
- *    builddir="${build.instrclasses}"
- *    updateicontrol="true"
- *    classdir="${build.classes}"
- *    controlfile="control"
- *    targets="targets"
- *    verbosity="error*,warning*"
- *    quiet="true"
- * >
- *    &lt;classpath refid="compile-classpath"/>
- * &lt;/icontract>
- * </pre>
- *
- */
-public class IContract extends MatchingTask {
-
-    private static final String ICONTROL_PROPERTIES_HEADER =
-        " You might want to set classRoot to point to your normal compilation class root directory.";
-
-    private static final String ICONTROL_PROPERTIES_MESSAGE =
-        "You should probably modify icontrol.properties' classRoot to where comiled (uninstrumented) classes go.";
-
-    /** \ on windows, / on linux/unix */
-    private static final String ps = System.getProperty("path.separator");
-
-    /** compiler to use for instrumenation */
-    private String icCompiler = "javac";
-
-    /** temporary file with file names of all java files to be instrumented */
-    private File targets = null;
-
-    /**
-     * will be set to true if any of the sourca files are newer than the
-     * instrumented files
-     */
-    private boolean dirty = false;
-
-    /** set to true if the iContract jar is missing */
-    private boolean iContractMissing = false;
-
-    /** source file root */
-    private File srcDir = null;
-
-    /** instrumentation src root */
-    private File instrumentDir = null;
-
-    /** instrumentation build root */
-    private File buildDir = null;
-
-    /** repository src root */
-    private File repositoryDir = null;
-
-    /** repository build root */
-    private File repBuildDir = null;
-
-    /** classpath */
-    private Path classpath = null;
-
-    /** The class of the Throwable to be thrown on failed assertions */
-    private String failThrowable = "java.lang.Error";
-
-    /** The -v option */
-    private String verbosity = "error*";
-
-    /** The -q option */
-    private boolean quiet = false;
-
-    /** Indicates whether or not to use internal compilation */
-    private boolean internalcompilation = false;
-
-    /** The -m option */
-    private File controlFile = null;
-
-    /** Indicates whether or not to instrument for preconditions */
-    private boolean pre = true;
-    private boolean preModified = false;
-
-    /** Indicates whether or not to instrument for postconditions */
-    private boolean post = true;
-    private boolean postModified = false;
-
-    /** Indicates whether or not to instrument for invariants */
-    private boolean invariant = true;
-    private boolean invariantModified = false;
-
-    /** Indicates whether or not to instrument all files regardless of timestamp */
-    // can't be explicitly set, is set if control file exists and is newer than any source file
-    private boolean instrumentall = false;
-
-    /**
-     * Indicates the name of a properties file (intentionally for iControl)
-     * where the classpath property should be updated.
-     */
-    private boolean updateIcontrol = false;
-
-    /** Regular compilation class root  */
-    private File classDir = null;
-
-
-    /**
-     * Sets the source directory
-     *
-     * @param srcDir the source directory
-     */
-    public void setSrcdir(File srcDir) {
-        this.srcDir = srcDir;
-    }
-
-
-    /**
-     * Sets the class directory (uninstrumented classes)
-     *
-     * @param srcDir the source directory
-     */
-    public void setClassdir(File classDir) {
-        this.classDir = classDir;
-    }
-
-
-    /**
-     * Sets the instrumentation directory
-     *
-     * @param instrumentDir the source directory
-     */
-    public void setInstrumentdir(File instrumentDir) {
-        this.instrumentDir = instrumentDir;
-        if (this.buildDir == null) {
-            setBuilddir(instrumentDir);
-        }
-    }
-
-
-    /**
-     * Sets the build directory for instrumented classes
-     *
-     * @param buildDir the build directory
-     */
-    public void setBuilddir(File buildDir) {
-        this.buildDir = buildDir;
-    }
-
-
-    /**
-     * Sets the build directory for repository classes
-     *
-     * @param repositoryDir the source directory
-     */
-    public void setRepositorydir(File repositoryDir) {
-        this.repositoryDir = repositoryDir;
-        if (this.repBuildDir == null) {
-            setRepbuilddir(repositoryDir);
-        }
-    }
-
-
-    /**
-     * Sets the build directory for instrumented classes
-     *
-     * @param buildDir the build directory
-     */
-    public void setRepbuilddir(File repBuildDir) {
-        this.repBuildDir = repBuildDir;
-    }
-
-
-    /**
-     * Turns on/off precondition instrumentation
-     *
-     * @param pre true turns it on
-     */
-    public void setPre(boolean pre) {
-        this.pre = pre;
-        preModified = true;
-    }
-
-
-    /**
-     * Turns on/off postcondition instrumentation
-     *
-     * @param post true turns it on
-     */
-    public void setPost(boolean post) {
-        this.post = post;
-        postModified = true;
-    }
-
-
-    /**
-     * Turns on/off invariant instrumentation
-     *
-     * @param invariant true turns it on
-     */
-    public void setInvariant(boolean invariant) {
-        this.invariant = invariant;
-        invariantModified = true;
-    }
-
-
-    /**
-     * Sets the Throwable (Exception) to be thrown on assertion violation
-     *
-     * @param clazz the fully qualified Throwable class name
-     */
-    public void setFailthrowable(String clazz) {
-        this.failThrowable = clazz;
-    }
-
-
-    /**
-     * Sets the verbosity level of iContract. Any combination of
-     * error*,warning*,note*,info*,progress*,debug* (comma separated) can be
-     * used. Defaults to error*,warning*
-     *
-     * @param verbosity verbosity level
-     */
-    public void setVerbosity(String verbosity) {
-        this.verbosity = verbosity;
-    }
-
-
-    /**
-     * Tells iContract to be quiet.
-     *
-     * @param quiet true if iContract should be quiet.
-     */
-    public void setQuiet(boolean quiet) {
-        this.quiet = quiet;
-    }
-
-
-    /**
-     * Sets the name of the file where targets will be written. That is the
-     * file that tells iContract what files to process.
-     *
-     * @param targets the targets file name
-     */
-    public void setTargets(File targets) {
-        this.targets = targets;
-    }
-
-
-    /**
-     * Sets the control file to pass to iContract.
-     *
-     * @param controlFile the control file
-     */
-    public void setControlfile(File controlFile) {
-        if (!controlFile.exists()) {
-            log("WARNING: Control file " + controlFile.getAbsolutePath()
-                 + " doesn't exist. iContract will be run "
-                 + "without control file.");
-        }
-        this.controlFile = controlFile;
-    }
-
-
-    /**
-     * Sets the classpath to be used for invocation of iContract.
-     *
-     * @param path the classpath
-     */
-    public void setClasspath(Path path) {
-        createClasspath().append(path);
-    }
-
-
-    /**
-     * Creates a nested classpath element
-     *
-     * @return the nested classpath element
-     */
-    public Path createClasspath() {
-        if (classpath == null) {
-            classpath = new Path(getProject());
-        }
-        return classpath;
-    }
-
-
-    /**
-     * Adds a reference to a classpath defined elsewhere.
-     *
-     * @param reference referenced classpath
-     */
-    public void setClasspathRef(Reference reference) {
-        createClasspath().setRefid(reference);
-    }
-
-
-    /**
-     * Decides whether or not to update iControl properties file
-     *
-     * @param updateIcontrol true if iControl properties file should be
-     *      updated
-     */
-    public void setUpdateicontrol(boolean updateIcontrol) {
-        this.updateIcontrol = updateIcontrol;
-    }
-
-
-    /**
-     * Executes the task
-     *
-     * @exception BuildException if the instrumentation fails
-     */
-    public void execute() throws BuildException {
-        preconditions();
-        scan();
-        if (dirty) {
-
-            // turn off assertions if we're using controlfile, unless they are not explicitly set.
-            boolean useControlFile = (controlFile != null) && controlFile.exists();
-
-            if (useControlFile && !preModified) {
-                pre = false;
-            }
-            if (useControlFile && !postModified) {
-                post = false;
-            }
-            if (useControlFile && !invariantModified) {
-                invariant = false;
-            }
-            // issue warning if pre,post or invariant is used together with controlfile
-            if ((pre || post || invariant) && controlFile != null) {
-                log("WARNING: specifying pre,post or invariant will "
-                     + "override control file settings");
-            }
-
-
-            // We want to be notified if iContract jar is missing. This makes life easier for the user
-            // who didn't understand that iContract is a separate library (duh!)
-            getProject().addBuildListener(new IContractPresenceDetector());
-
-            // Prepare the directories for iContract. iContract will make them if they
-            // don't exist, but for some reason I don't know, it will complain about the REP files
-            // afterwards
-            Mkdir mkdir = (Mkdir) project.createTask("mkdir");
-
-            mkdir.setDir(instrumentDir);
-            mkdir.execute();
-            mkdir.setDir(buildDir);
-            mkdir.execute();
-            mkdir.setDir(repositoryDir);
-            mkdir.execute();
-
-            // Set the classpath that is needed for regular Javac compilation
-            Path baseClasspath = createClasspath();
-
-            // Might need to add the core classes if we're not using Sun's Javac (like Jikes)
-            String compiler = project.getProperty("build.compiler");
-            ClasspathHelper classpathHelper = new ClasspathHelper(compiler);
-
-            classpathHelper.modify(baseClasspath);
-
-            // Create the classpath required to compile the sourcefiles BEFORE instrumentation
-            Path beforeInstrumentationClasspath = ((Path) baseClasspath.clone());
-
-            beforeInstrumentationClasspath.append(new Path(getProject(),
-                srcDir.getAbsolutePath()));
-
-            // Create the classpath required to compile the sourcefiles AFTER instrumentation
-            Path afterInstrumentationClasspath = ((Path) baseClasspath.clone());
-
-            afterInstrumentationClasspath.append(new Path(getProject(), instrumentDir.getAbsolutePath()));
-            afterInstrumentationClasspath.append(new Path(getProject(), repositoryDir.getAbsolutePath()));
-            afterInstrumentationClasspath.append(new Path(getProject(), srcDir.getAbsolutePath()));
-            afterInstrumentationClasspath.append(new Path(getProject(), buildDir.getAbsolutePath()));
-
-            // Create the classpath required to automatically compile the repository files
-            Path repositoryClasspath = ((Path) baseClasspath.clone());
-
-            repositoryClasspath.append(new Path(getProject(), instrumentDir.getAbsolutePath()));
-            repositoryClasspath.append(new Path(getProject(), srcDir.getAbsolutePath()));
-            repositoryClasspath.append(new Path(getProject(), repositoryDir.getAbsolutePath()));
-            repositoryClasspath.append(new Path(getProject(), buildDir.getAbsolutePath()));
-
-            // Create the classpath required for iContract itself
-            Path iContractClasspath = ((Path) baseClasspath.clone());
-
-            iContractClasspath.append(new Path(getProject(), System.getProperty("java.home") + File.separator + ".." + File.separator + "lib" + File.separator + "tools.jar"));
-            iContractClasspath.append(new Path(getProject(), srcDir.getAbsolutePath()));
-            iContractClasspath.append(new Path(getProject(), repositoryDir.getAbsolutePath()));
-            iContractClasspath.append(new Path(getProject(), instrumentDir.getAbsolutePath()));
-            iContractClasspath.append(new Path(getProject(), buildDir.getAbsolutePath()));
-
-            // Create a forked java process
-            Java iContract = (Java) project.createTask("java");
-
-            iContract.setTaskName(getTaskName());
-            iContract.setFork(true);
-            iContract.setClassname("com.reliablesystems.iContract.Tool");
-            iContract.setClasspath(iContractClasspath);
-
-            // Build the arguments to iContract
-            StringBuffer args = new StringBuffer();
-
-            args.append(directiveString());
-            args.append("-v").append(verbosity).append(" ");
-            args.append("-b").append("\"").append(icCompiler).append(" -classpath ").append(beforeInstrumentationClasspath).append("\" ");
-            args.append("-c").append("\"").append(icCompiler).append(" -classpath ").append(afterInstrumentationClasspath).append(" -d ").append(buildDir).append("\" ");
-            args.append("-n").append("\"").append(icCompiler).append(" -classpath ").append(repositoryClasspath).append("\" ");
-            args.append("-d").append(failThrowable).append(" ");
-            args.append("-o").append(instrumentDir).append(File.separator).append("@p").append(File.separator).append("@f.@e ");
-            args.append("-k").append(repositoryDir).append(File.separator).append("@p ");
-            args.append(quiet ? "-q " : "");
-            args.append(instrumentall ? "-a " : "");// reinstrument everything if controlFile exists and is newer than any class
-            args.append("@").append(targets.getAbsolutePath());
-            iContract.createArg().setLine(args.toString());
-
-//System.out.println( "JAVA -classpath " + iContractClasspath + " com.reliablesystems.iContract.Tool " + args.toString() );
-
-            // update iControlProperties if it's set.
-            if (updateIcontrol) {
-                Properties iControlProps = new Properties();
-
-                try {// to read existing propertiesfile
-                    iControlProps.load(new FileInputStream("icontrol.properties"));
-                } catch (IOException e) {
-                    log("File icontrol.properties not found. That's ok. Writing a default one.");
-                }
-                iControlProps.setProperty("sourceRoot", srcDir.getAbsolutePath());
-                iControlProps.setProperty("classRoot", classDir.getAbsolutePath());
-                iControlProps.setProperty("classpath", afterInstrumentationClasspath.toString());
-                iControlProps.setProperty("controlFile", controlFile.getAbsolutePath());
-                iControlProps.setProperty("targetsFile", targets.getAbsolutePath());
-
-                try {// to read existing propertiesfile
-                    iControlProps.store(new FileOutputStream("icontrol.properties"), ICONTROL_PROPERTIES_HEADER);
-                    log("Updated icontrol.properties");
-                } catch (IOException e) {
-                    log("Couldn't write icontrol.properties.");
-                }
-            }
-
-            // do it!
-            int result = iContract.executeJava();
-
-            if (result != 0) {
-                if (iContractMissing) {
-                    log("iContract can't be found on your classpath. Your classpath is:");
-                    log(classpath.toString());
-                    log("If you don't have the iContract jar, go get it at http://www.reliable-systems.com/tools/");
-                }
-                throw new BuildException("iContract instrumentation failed. Code=" + result);
-            }
-        } else {// not dirty
-            //log( "Nothing to do. Everything up to date." );
-        }
-    }
-
-
-    /** Checks that the required attributes are set.  */
-    private void preconditions() throws BuildException {
-        if (srcDir == null) {
-            throw new BuildException("srcdir attribute must be set!", location);
-        }
-        if (!srcDir.exists()) {
-            throw new BuildException("srcdir \"" + srcDir.getPath() + "\" does not exist!", location);
-        }
-        if (instrumentDir == null) {
-            throw new BuildException("instrumentdir attribute must be set!", location);
-        }
-        if (repositoryDir == null) {
-            throw new BuildException("repositorydir attribute must be set!", location);
-        }
-        if (updateIcontrol == true && classDir == null) {
-            throw new BuildException("classdir attribute must be specified when updateicontrol=true!", location);
-        }
-        if (updateIcontrol == true && controlFile == null) {
-            throw new BuildException("controlfile attribute must be specified when updateicontrol=true!", location);
-        }
-    }
-
-
-    /**
-     * Verifies whether any of the source files have changed. Done by
-     * comparing date of source/class files. The whole lot is "dirty" if at
-     * least one source file or the control file is newer than the
-     * instrumented files. If not dirty, iContract will not be executed. <br/>
-     * Also creates a temporary file with a list of the source files, that
-     * will be deleted upon exit.
-     */
-    private void scan() throws BuildException {
-        long now = (new Date()).getTime();
-
-        DirectoryScanner ds = null;
-
-        ds = getDirectoryScanner(srcDir);
-
-        String[] files = ds.getIncludedFiles();
-
-        FileOutputStream targetOutputStream = null;
-        PrintStream targetPrinter = null;
-        boolean writeTargets = false;
-
-        try {
-            if (targets == null) {
-                targets = new File("targets");
-                log("Warning: targets file not specified. generating file: " + targets.getName());
-                writeTargets = true;
-            } else if (!targets.exists()) {
-                log("Specified targets file doesn't exist. generating file: " + targets.getName());
-                writeTargets = true;
-            }
-            if (writeTargets) {
-                log("You should consider using iControl to create a target file.");
-                targetOutputStream = new FileOutputStream(targets);
-                targetPrinter = new PrintStream(targetOutputStream);
-            }
-            for (int i = 0; i < files.length; i++) {
-                File srcFile = new File(srcDir, files[i]);
-
-                if (files[i].endsWith(".java")) {
-                    // print the target, while we're at here. (Only if generatetarget=true).
-                    if (targetPrinter != null) {
-                        targetPrinter.println(srcFile.getAbsolutePath());
-                    }
-                    File classFile = new File(buildDir, files[i].substring(0, files[i].indexOf(".java")) + ".class");
-
-                    if (srcFile.lastModified() > now) {
-                        log("Warning: file modified in the future: " +
-                            files[i], Project.MSG_WARN);
-                    }
-
-                    if (!classFile.exists() || srcFile.lastModified() > classFile.lastModified()) {
-                        //log( "Found a file newer than the instrumentDir class file: " + srcFile.getPath() + " newer than " + classFile.getPath() + ". Running iContract again..." );
-                        dirty = true;
-                    }
-                }
-            }
-            if (targetPrinter != null) {
-                targetPrinter.flush();
-                targetPrinter.close();
-            }
-        } catch (IOException e) {
-            throw new BuildException("Could not create target file:" + e.getMessage());
-        }
-
-        // also, check controlFile timestamp
-        long controlFileTime = -1;
-
-        try {
-            if (controlFile != null) {
-                if (controlFile.exists() && buildDir.exists()) {
-                    controlFileTime = controlFile.lastModified();
-                    ds = getDirectoryScanner(buildDir);
-                    files = ds.getIncludedFiles();
-                    for (int i = 0; i < files.length; i++) {
-                        File srcFile = new File(srcDir, files[i]);
-
-                        if (files[i].endsWith(".class")) {
-                            if (controlFileTime > srcFile.lastModified()) {
-                                if (!dirty) {
-                                    log("Control file " + controlFile.getAbsolutePath() + " has been updated. Instrumenting all files...");
-                                }
-                                dirty = true;
-                                instrumentall = true;
-                            }
-                        }
-                    }
-                }
-            }
-        } catch (Throwable t) {
-            throw new BuildException("Got an interesting exception:" + t.getMessage());
-        }
-    }
-
-
-    /**
-     * Creates the -m option based on the values of controlFile, pre, post and
-     * invariant.
-     */
-    private final String directiveString() {
-        StringBuffer sb = new StringBuffer();
-        boolean comma = false;
-
-        boolean useControlFile = (controlFile != null) && controlFile.exists();
-
-        if (useControlFile || pre || post || invariant) {
-            sb.append("-m");
-        }
-        if (useControlFile) {
-            sb.append("@").append(controlFile);
-            comma = true;
-        }
-        if (pre) {
-            if (comma) {
-                sb.append(",");
-            }
-            sb.append("pre");
-            comma = true;
-        }
-        if (post) {
-            if (comma) {
-                sb.append(",");
-            }
-            sb.append("post");
-            comma = true;
-        }
-        if (invariant) {
-            if (comma) {
-                sb.append(",");
-            }
-            sb.append("inv");
-        }
-        sb.append(" ");
-        return sb.toString();
-    }
-
-
-    /**
-     * BuildListener that sets the iContractMissing flag to true if a message
-     * about missing iContract is missing. Used to indicate a more verbose
-     * error to the user, with advice about how to solve the problem
-     *
-     * @author Conor MacNeill
-     */
-    private class IContractPresenceDetector implements BuildListener {
-        public void buildFinished(BuildEvent event) {
-        }
-
-
-        public void buildStarted(BuildEvent event) {
-        }
-
-
-        public void messageLogged(BuildEvent event) {
-            if ("java.lang.NoClassDefFoundError: com/reliablesystems/iContract/Tool".equals(event.getMessage())) {
-                iContractMissing = true;
-            }
-        }
-
-
-        public void targetFinished(BuildEvent event) {
-        }
-
-
-        public void targetStarted(BuildEvent event) {
-        }
-
-
-        public void taskFinished(BuildEvent event) {
-        }
-
-
-        public void taskStarted(BuildEvent event) {
-        }
-    }
-
-
-    /**
-     * This class is a helper to set correct classpath for other compilers,
-     * like Jikes. It reuses the logic from DefaultCompilerAdapter, which is
-     * protected, so we have to subclass it.
-     *
-     * @author Conor MacNeill
-     */
-    private class ClasspathHelper extends DefaultCompilerAdapter {
-        private final String compiler;
-
-
-        public ClasspathHelper(String compiler) {
-            super();
-            this.compiler = compiler;
-        }
-
-        // make it public
-        public void modify(Path path) {
-            // depending on what compiler to use, set the includeJavaRuntime flag
-            if ("jikes".equals(compiler)) {
-                icCompiler = compiler;
-                includeJavaRuntime = true;
-                path.append(getCompileClasspath());
-            }
-        }
-
-        // dummy implementation. Never called
-        public void setJavac(Javac javac) {
-        }
-
-
-        public boolean execute() {
-            return true;
-        }
-    }
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/Javah.java b/src/main/org/apache/tools/ant/taskdefs/optional/Javah.java
deleted file mode 100755
index b7daeb4..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/Javah.java
+++ /dev/null
@@ -1,426 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional;
-
-import org.apache.tools.ant.BuildException;
-
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.Task;
-
-import org.apache.tools.ant.types.Path;
-import org.apache.tools.ant.types.Reference;
-import org.apache.tools.ant.types.Commandline;
-
-import org.apache.tools.ant.util.JavaEnvUtils;
-
-import java.io.File;
-import java.util.Vector;
-import java.util.StringTokenizer;
-import java.util.Enumeration;
-
-/**
- * Task to generate JNI header files using javah. This task can take the following
- * arguments:
- * <ul>
- * <li>classname - the fully-qualified name of a class</li>
- * <li>outputFile - Concatenates the resulting header or source files for all
- *     the classes listed into this file</li>
- * <li>destdir - Sets the directory where javah saves the header files or the
- *     stub files</li>
- * <li>classpath</li>
- * <li>bootclasspath</li>
- * <li>force - Specifies that output files should always be written
-       (JDK1.2 only)</li>
- * <li>old - Specifies that old JDK1.0-style header files should be generated
- *     (otherwise output file contain JNI-style native method
- *      function prototypes) (JDK1.2 only)</li>
- * <li>stubs - generate C declarations from the Java object file (used with old)</li>
- * <li>verbose - causes javah to print a message to stdout concerning the status
- *     of the generated files</li>
- * <li>extdirs - Override location of installed extensions</li>
- * </ul>
- * Of these arguments, either <b>outputFile</b> or <b>destdir</b> is required,
- * but not both. More than one classname may be specified, using a comma-separated
- * list or by using <code>&lt;class name="xxx"&gt;</code> elements within the task.
- * <p>
- * When this task executes, it will generate C header and source files that
- * are needed to implement native methods.
- *
- * @author Rick Beton <a href="mailto:richard.beton@physics.org">richard.beton@physics.org</a>
- */
-
-public class Javah extends Task {
-
-    private static final String FAIL_MSG = "Compile failed, messages should have been provided.";
-
-    private Vector classes = new Vector(2);
-    private String cls;
-    private File destDir;
-    private Path classpath = null;
-    private File outputFile = null;
-    private boolean verbose = false;
-    private boolean force   = false;
-    private boolean old     = false;
-    private boolean stubs   = false;
-    private Path bootclasspath;
-    //private Path extdirs;
-    private static String lSep = System.getProperty("line.separator");
-
-    public void setClass(String cls) {
-        this.cls = cls;
-    }
-
-    public ClassArgument createClass() {
-        ClassArgument ga = new ClassArgument();
-        classes.addElement(ga);
-        return ga;
-    }
-
-    public class ClassArgument {
-        private String name;
-
-        public ClassArgument() {
-        }
-
-        public void setName(String name) {
-            this.name = name;
-            log("ClassArgument.name=" + name);
-        }
-
-        public String getName() {
-            return name;
-        }
-    }
-
-    /**
-     * Set the destination directory into which the Java source
-     * files should be compiled.
-     */
-    public void setDestdir(File destDir) {
-        this.destDir = destDir;
-    }
-
-    public void setClasspath(Path src) {
-        if (classpath == null) {
-            classpath = src;
-        } else {
-            classpath.append(src);
-        }
-    }
-    public Path createClasspath() {
-        if (classpath == null) {
-            classpath = new Path(project);
-        }
-        return classpath.createPath();
-    }
-
-    /**
-     * Adds a reference to a CLASSPATH defined elsewhere.
-     */
-    public void setClasspathRef(Reference r) {
-        createClasspath().setRefid(r);
-    }
-
-    public void setBootclasspath(Path src) {
-        if (bootclasspath == null) {
-            bootclasspath = src;
-        } else {
-            bootclasspath.append(src);
-        }
-    }
-    public Path createBootclasspath() {
-        if (bootclasspath == null) {
-            bootclasspath = new Path(project);
-        }
-        return bootclasspath.createPath();
-    }
-
-    /**
-     * Adds a reference to a CLASSPATH defined elsewhere.
-     */
-    public void setBootClasspathRef(Reference r) {
-        createBootclasspath().setRefid(r);
-    }
-
-    ///**
-    // * Sets the extension directories that will be used during the
-    // * compilation.
-    // */
-    //public void setExtdirs(Path extdirs) {
-    //    if (this.extdirs == null) {
-    //        this.extdirs = extdirs;
-    //    } else {
-    //        this.extdirs.append(extdirs);
-    //    }
-    //}
-
-    ///**
-    // * Maybe creates a nested classpath element.
-    // */
-    //public Path createExtdirs() {
-    //    if (extdirs == null) {
-    //        extdirs = new Path(project);
-    //    }
-    //    return extdirs.createPath();
-    //}
-
-    /**
-     * Set the output file name.
-     */
-    public void setOutputFile(File outputFile) {
-        this.outputFile = outputFile;
-    }
-
-    /**
-     * Set the force-write flag.
-     */
-    public void setForce(boolean force) {
-        this.force = force;
-    }
-
-    /**
-     * Set the old flag.
-     */
-    public void setOld(boolean old) {
-        this.old = old;
-    }
-
-    /**
-     * Set the stubs flag.
-     */
-    public void setStubs(boolean stubs) {
-        this.stubs = stubs;
-    }
-
-    /**
-     * Set the verbose flag.
-     */
-    public void setVerbose(boolean verbose) {
-        this.verbose = verbose;
-    }
-
-    /**
-     * Executes the task.
-     */
-    public void execute() throws BuildException {
-        // first off, make sure that we've got a srcdir
-
-        if ((cls == null) && (classes.size() == 0)) {
-            throw new BuildException("class attribute must be set!", location);
-        }
-
-        if ((cls != null) && (classes.size() > 0)) {
-            throw new BuildException("set class attribute or class element, not both.", location);
-        }
-
-        if (destDir != null) {
-            if (!destDir.isDirectory()) {
-                throw new BuildException("destination directory \"" + destDir + "\" does not exist or is not a directory", location);
-            }
-            if (outputFile != null) {
-                throw new BuildException("destdir and outputFile are mutually exclusive", location);
-            }
-        }
-
-        if (classpath == null) {
-            classpath = Path.systemClasspath;
-        }
-
-        String compiler = project.getProperty("build.compiler");
-        if (compiler == null) {
-            if (!JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_1) &&
-                !JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_2)) {
-                compiler = "modern";
-            } else {
-                compiler = "classic";
-            }
-        }
-
-        doClassicCompile();
-    }
-
-    // XXX
-    // we need a way to not use the current classpath.
-
-    /**
-     * Peforms a compile using the classic compiler that shipped with
-     * JDK 1.1 and 1.2.
-     */
-
-    private void doClassicCompile() throws BuildException {
-        Commandline cmd = setupJavahCommand();
-
-        // Use reflection to be able to build on all JDKs
-        /*
-        // provide the compiler a different message sink - namely our own
-        sun.tools.javac.Main compiler =
-                new sun.tools.javac.Main(new LogOutputStream(this, Project.MSG_WARN), "javac");
-
-        if (!compiler.compile(cmd.getArguments())) {
-            throw new BuildException("Compile failed");
-        }
-        */
-        try {
-            // Javac uses logstr to change the output stream and calls
-            // the constructor's invoke method to create a compiler instance
-            // dynamically. However, javah has a different interface and this
-            // makes it harder, so here's a simple alternative.
-            //------------------------------------------------------------------
-            com.sun.tools.javah.Main main 
-                = new com.sun.tools.javah.Main(cmd.getArguments());
-            main.run();
-        } catch (Exception ex) {
-            if (ex instanceof BuildException) {
-                throw (BuildException) ex;
-            } else {
-                throw new BuildException("Error starting javah: " + ex, ex, location);
-            }
-        }
-    }
-
-    /**
-     * Does the command line argument processing common to classic and
-     * modern.
-     */
-    private Commandline setupJavahCommand() {
-        Commandline cmd = new Commandline();
-
-        if (destDir != null) {
-            cmd.createArgument().setValue("-d");
-            cmd.createArgument().setFile(destDir);
-        }
-
-        if (outputFile != null) {
-            cmd.createArgument().setValue("-o");
-            cmd.createArgument().setFile(outputFile);
-        }
-
-        if (classpath != null) {
-            cmd.createArgument().setValue("-classpath");
-            cmd.createArgument().setPath(classpath);
-        }
-
-        // JDK1.1 is rather simpler than JDK1.2
-        if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_1)) {
-            if (verbose) {
-                cmd.createArgument().setValue("-v");
-            }
-        } else {
-            if (verbose) {
-                cmd.createArgument().setValue("-verbose");
-            }
-            if (old) {
-                cmd.createArgument().setValue("-old");
-            }
-            if (force) {
-                cmd.createArgument().setValue("-force");
-            }
-        }
-
-        if (stubs) {
-            if (!old) {
-                throw new BuildException("stubs only available in old mode.", location);
-            }
-            cmd.createArgument().setValue("-stubs");
-        }
-        if (bootclasspath != null) {
-            cmd.createArgument().setValue("-bootclasspath");
-            cmd.createArgument().setPath(bootclasspath);
-        }
-
-        logAndAddFilesToCompile(cmd);
-        return cmd;
-    }
-
-    /**
-     * Logs the compilation parameters, adds the files to compile and logs the
-     * &qout;niceSourceList&quot;
-     */
-    protected void logAndAddFilesToCompile(Commandline cmd) {
-        int n = 0;
-        log("Compilation " + cmd.describeArguments(),
-            Project.MSG_VERBOSE);
-
-        StringBuffer niceClassList = new StringBuffer();
-        if (cls != null) {
-            StringTokenizer tok = new StringTokenizer(cls, ",", false);
-            while (tok.hasMoreTokens()) {
-                String aClass = tok.nextToken().trim();
-                cmd.createArgument().setValue(aClass);
-                niceClassList.append("    " + aClass + lSep);
-                n++;
-            }
-        }
-
-        Enumeration enum = classes.elements();
-        while (enum.hasMoreElements()) {
-            ClassArgument arg = (ClassArgument) enum.nextElement();
-            String aClass = arg.getName();
-            cmd.createArgument().setValue(aClass);
-            niceClassList.append("    " + aClass + lSep);
-            n++;
-        }
-
-        StringBuffer prefix = new StringBuffer("Class");
-        if (n > 1) {
-            prefix.append("es");
-        }
-        prefix.append(" to be compiled:");
-        prefix.append(lSep);
-
-        log(prefix.toString() + niceClassList.toString(), Project.MSG_VERBOSE);
-    }
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/Native2Ascii.java b/src/main/org/apache/tools/ant/taskdefs/optional/Native2Ascii.java
deleted file mode 100644
index cb3d82b..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/Native2Ascii.java
+++ /dev/null
@@ -1,269 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000,2002 The Apache Software Foundation.  All rights 
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.DirectoryScanner;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.taskdefs.MatchingTask;
-import org.apache.tools.ant.types.Commandline;
-import org.apache.tools.ant.types.Mapper;
-import org.apache.tools.ant.util.FileNameMapper;
-import org.apache.tools.ant.util.IdentityMapper;
-import org.apache.tools.ant.util.SourceFileScanner;
-
-import java.io.File;
-
-/**
- * Convert files from native encodings to ascii.
- *
- * @author <a href="asudell@acm.org">Drew Sudell</a>
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- * @since Ant 1.2
- */
-public class Native2Ascii extends MatchingTask {
-
-    private boolean reverse = false;  // convert from ascii back to native
-    private String encoding = null;   // encoding to convert to/from
-    private File srcDir = null;       // Where to find input files
-    private File destDir = null;      // Where to put output files
-    private String extension = null;  // Extension of output files if different
-
-    private Mapper mapper;
-
-    /**
-     * Flag the conversion to run in the reverse sense,
-     * that is Ascii to Native encoding.
-     * 
-     * @param reverse True if the conversion is to be reversed,
-     *                otherwise false;
-     */
-    public void setReverse(boolean reverse){
-        this.reverse = reverse;
-    }
-
-    /**
-     * Set the encoding to translate to/from.
-     * If unset, the default encoding for the JVM is used.
-     *
-     * @param encoding String containing the name of the Native 
-     *                 encoding to convert from or to.
-     */
-    public void setEncoding(String encoding){
-        this.encoding = encoding;
-    }
-
-    /**
-     * Set the source directory in which to find files to convert.
-     *
-     * @param srcDir Direcrory to find input file in.
-     */
-    public void setSrc(File srcDir){
-        this.srcDir = srcDir;
-    }
-
-
-    /**
-     * Set the destination dirctory to place converted files into.
-     *
-     * @param destDir directory to place output file into.
-     */
-    public void setDest(File destDir){
-        this.destDir = destDir;
-    }
-
-    /**
-     * Set the extension which converted files should have.
-     * If unset, files will not be renamed.
-     *
-     * @param ext File extension to use for converted files.
-     */
-    public void setExt(String ext){
-        this.extension = ext;
-    }
-
-    /**
-     * Defines the FileNameMapper to use (nested mapper element).
-     */
-    public Mapper createMapper() throws BuildException {
-        if (mapper != null) {
-            throw new BuildException("Cannot define more than one mapper",
-                                     location);
-        }
-        mapper = new Mapper(project);
-        return mapper;
-    }
-
-    public void execute() throws BuildException {
-
-        Commandline baseCmd = null;      // the common portion of our cmd line
-        DirectoryScanner scanner = null; // Scanner to find our inputs
-        String[] files;                  // list of files to process
-
-        // default srcDir to basedir
-        if (srcDir == null){
-            srcDir = project.resolveFile(".");
-        }
-
-        // Require destDir
-        if (destDir == null){
-            throw new BuildException("The dest attribute must be set.");
-        }
-
-        // if src and dest dirs are the same, require the extension
-        // to be set, so we don't stomp every file.  One could still
-        // include a file with the same extension, but ....
-        if (srcDir.equals(destDir) && extension == null && mapper == null){
-            throw new BuildException("The ext attribute or a mapper must be set if"
-                                     + " src and dest dirs are the same.");
-        }
-
-        FileNameMapper m = null;
-        if (mapper == null) {
-            if (extension == null) {
-                m = new IdentityMapper();
-            } else {
-                m = new ExtMapper();
-            }
-        } else {
-            m = mapper.getImplementation();
-        }
-        
-        scanner = getDirectoryScanner(srcDir);
-        files = scanner.getIncludedFiles();
-        SourceFileScanner sfs = new SourceFileScanner(this);
-        files = sfs.restrict(files, srcDir, destDir, m);
-        int count = files.length;
-        if (count == 0) {
-            return;
-        }
-        String message = "Converting " + count + " file"
-            + (count != 1 ? "s" : "") + " from ";
-        log(message + srcDir + " to " + destDir);
-        for (int i = 0; i < files.length; i++){
-            convert(files[i], m.mapFileName(files[i])[0]);
-        }
-    }
-
-    /**
-     * Convert a single file.
-     *
-     * @param fileName Name of the file to convert (relative to srcDir).
-     */
-    private void convert(String srcName, String destName) throws BuildException {
-
-        Commandline cmd = new Commandline();  // Command line to run
-        File srcFile;                         // File to convert
-        File destFile;                        // where to put the results
-
-        // Set up the basic args (this could be done once, but
-        // it's cleaner here)
-        if (reverse){
-            cmd.createArgument().setValue("-reverse");
-        }
-
-        if (encoding != null){
-            cmd.createArgument().setValue("-encoding");
-            cmd.createArgument().setValue(encoding);
-        }
-
-        // Build the full file names
-        srcFile = new File(srcDir, srcName);
-        destFile = new File(destDir, destName);
-
-        cmd.createArgument().setFile(srcFile);
-        cmd.createArgument().setFile(destFile);
-        // Make sure we're not about to clobber something
-        if (srcFile.equals(destFile)){
-            throw new BuildException("file " + srcFile 
-                                     + " would overwrite its self");
-        }
-
-        // Make intermediate directories if needed
-        // XXX JDK 1.1 dosen't have File.getParentFile,
-        String parentName = destFile.getParent();
-        if (parentName != null){
-            File parentFile = new File(parentName);
-            
-            if ((!parentFile.exists()) && (!parentFile.mkdirs())){
-                throw new BuildException("cannot create parent directory "
-                                         + parentName);
-            }
-        }
-                        
-        log("converting " + srcName, Project.MSG_VERBOSE);
-        sun.tools.native2ascii.Main n2a
-            = new sun.tools.native2ascii.Main();
-        if (!n2a.convert(cmd.getArguments())){
-            throw new BuildException("conversion failed");
-        }
-    }
-
-    private class ExtMapper implements FileNameMapper {
-
-        public void setFrom(String s) {}
-        public void setTo(String s) {}
-
-        public String[] mapFileName(String fileName) {
-            int lastDot = fileName.lastIndexOf('.');
-            if (lastDot >= 0) {
-                return new String[] {fileName.substring(0, lastDot) 
-                                         + extension};
-            } else {
-                return new String[] {fileName + extension};
-            }
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/NetRexxC.java b/src/main/org/apache/tools/ant/taskdefs/optional/NetRexxC.java
deleted file mode 100644
index 7d35ea7..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/NetRexxC.java
+++ /dev/null
@@ -1,936 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.StringWriter;
-import java.io.PrintWriter;
-import java.io.StringReader;
-import java.io.BufferedReader;
-
-import java.util.Vector;
-import java.util.Hashtable;
-import java.util.Enumeration;
-import java.util.Properties;
-import java.util.StringTokenizer;
-import netrexx.lang.Rexx;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.DirectoryScanner;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.taskdefs.MatchingTask;
-import org.apache.tools.ant.types.EnumeratedAttribute;
-
-/**
- * Task to compile NetRexx source files. This task can take the following
- * arguments:
- * <ul>
- * <li>binary</li>
- * <li>classpath</li>
- * <li>comments</li>
- * <li>compile</li>
- * <li>console</li>
- * <li>crossref</li>
- * <li>decimal</li>
- * <li>destdir</li>
- * <li>diag</li>
- * <li>explicit</li>
- * <li>format</li>
- * <li>keep</li>
- * <li>logo</li>
- * <li>replace</li>
- * <li>savelog</li>
- * <li>srcdir</li>
- * <li>sourcedir</li>
- * <li>strictargs</li>
- * <li>strictassign</li>
- * <li>strictcase</li>
- * <li>strictimport</li>
- * <li>symbols</li>
- * <li>time</li>
- * <li>trace</li>
- * <li>utf8</li>
- * <li>verbose</li>
- * <li>suppressMethodArgumentNotUsed</li>
- * <li>suppressPrivatePropertyNotUsed</li>
- * <li>suppressVariableNotUsed</li>
- * <li>suppressExceptionNotSignalled</li>
- * <li>suppressDeprecation</li>
- * </ul>
- * Of these arguments, the <b>srcdir</b> argument is required.
- *
- * <p>When this task executes, it will recursively scan the srcdir
- * looking for NetRexx source files to compile. This task makes its
- * compile decision based on timestamp.
- * <p>Before files are compiled they and any other file in the
- * srcdir will be copied to the destdir allowing support files to be
- * located properly in the classpath. The reason for copying the source files
- * before the compile is that NetRexxC has only two destinations for classfiles:
- * <ol>
- * <li>The current directory, and,</li>
- * <li>The directory the source is in (see sourcedir option)
- * </ol>
- *
- * @author dIon Gillard <a href="mailto:dion@multitask.com.au">dion@multitask.com.au</a>
- */
-public class NetRexxC extends MatchingTask {
-
-    // variables to hold arguments
-    private boolean binary;
-    private String classpath;
-    private boolean comments;
-    private boolean compact = true;// should be the default, as it integrates better in ant.
-    private boolean compile = true;
-    private boolean console;
-    private boolean crossref;
-    private boolean decimal = true;
-    private File destDir;
-    private boolean diag;
-    private boolean explicit;
-    private boolean format;
-    private boolean java;
-    private boolean keep;
-    private boolean logo = true;
-    private boolean replace;
-    private boolean savelog;
-    private File srcDir;
-    private boolean sourcedir = true;// ?? Should this be the default for ant?
-    private boolean strictargs;
-    private boolean strictassign;
-    private boolean strictcase;
-    private boolean strictimport;
-    private boolean strictprops;
-    private boolean strictsignal;
-    private boolean symbols;
-    private boolean time;
-    private String trace = "trace2";
-    private boolean utf8;
-    private String verbose = "verbose3";
-    private boolean suppressMethodArgumentNotUsed = false;
-    private boolean suppressPrivatePropertyNotUsed = false;
-    private boolean suppressVariableNotUsed = false;
-    private boolean suppressExceptionNotSignalled = false;
-    private boolean suppressDeprecation = false;
-
-    // constants for the messages to suppress by flags and their corresponding properties
-    static final String MSG_METHOD_ARGUMENT_NOT_USED = "Warning: Method argument is not used";
-    static final String MSG_PRIVATE_PROPERTY_NOT_USED = "Warning: Private property is defined but not used";
-    static final String MSG_VARIABLE_NOT_USED = "Warning: Variable is set but not used";
-    static final String MSG_EXCEPTION_NOT_SIGNALLED = "is in SIGNALS list but is not signalled within the method";
-    static final String MSG_DEPRECATION = "has been deprecated";
-
-    // other implementation variables
-    private Vector compileList = new Vector();
-    private Hashtable filecopyList = new Hashtable();
-    private String oldClasspath = System.getProperty("java.class.path");
-
-
-    /**
-     * Set whether literals are treated as binary, rather than NetRexx types
-     */
-    public void setBinary(boolean binary) {
-        this.binary = binary;
-    }
-
-
-    /** Set the classpath used for NetRexx compilation  */
-    public void setClasspath(String classpath) {
-        this.classpath = classpath;
-    }
-
-
-    /**
-     * Set whether comments are passed through to the generated java source.
-     * Valid true values are "on" or "true". Anything else sets the flag to
-     * false. The default value is false
-     */
-    public void setComments(boolean comments) {
-        this.comments = comments;
-    }
-
-
-    /**
-     * Set whether error messages come out in compact or verbose format. Valid
-     * true values are "on" or "true". Anything else sets the flag to false.
-     * The default value is false
-     */
-    public void setCompact(boolean compact) {
-        this.compact = compact;
-    }
-
-
-    /**
-     * Set whether the NetRexx compiler should compile the generated java code
-     * Valid true values are "on" or "true". Anything else sets the flag to
-     * false. The default value is true. Setting this flag to false, will
-     * automatically set the keep flag to true.
-     */
-    public void setCompile(boolean compile) {
-        this.compile = compile;
-        if (!this.compile && !this.keep) {
-            this.keep = true;
-        }
-    }
-
-
-    /**
-     * Set whether or not messages should be displayed on the 'console' Valid
-     * true values are "on" or "true". Anything else sets the flag to false.
-     * The default value is true.
-     */
-    public void setConsole(boolean console) {
-        this.console = console;
-    }
-
-
-    /** Whether variable cross references are generated  */
-    public void setCrossref(boolean crossref) {
-        this.crossref = crossref;
-    }
-
-
-    /**
-     * Set whether decimal arithmetic should be used for the netrexx code.
-     * Binary arithmetic is used when this flag is turned off. Valid true
-     * values are "on" or "true". Anything else sets the flag to false. The
-     * default value is true.
-     */
-    public void setDecimal(boolean decimal) {
-        this.decimal = decimal;
-    }
-
-
-    /**
-     * Set the destination directory into which the NetRexx source files
-     * should be copied and then compiled.
-     */
-    public void setDestDir(File destDirName) {
-        destDir = destDirName;
-    }
-
-
-    /**
-     * Whether diagnostic information about the compile is generated
-     */
-    public void setDiag(boolean diag) {
-        this.diag = diag;
-    }
-
-
-    /**
-     * Sets whether variables must be declared explicitly before use. Valid
-     * true values are "on" or "true". Anything else sets the flag to false.
-     * The default value is false.
-     */
-    public void setExplicit(boolean explicit) {
-        this.explicit = explicit;
-    }
-
-
-    /**
-     * Whether the generated java code is formatted nicely or left to match
-     * NetRexx line numbers for call stack debugging
-     */
-    public void setFormat(boolean format) {
-        this.format = format;
-    }
-
-
-    /**
-     * Whether the generated java code is produced Valid true values are "on"
-     * or "true". Anything else sets the flag to false. The default value is
-     * false.
-     */
-    public void setJava(boolean java) {
-        this.java = java;
-    }
-
-
-    /**
-     * Sets whether the generated java source file should be kept after
-     * compilation. The generated files will have an extension of .java.keep,
-     * <b>not</b> .java Valid true values are "on" or "true". Anything else
-     * sets the flag to false. The default value is false.
-     */
-    public void setKeep(boolean keep) {
-        this.keep = keep;
-    }
-
-
-    /** Whether the compiler text logo is displayed when compiling  */
-    public void setLogo(boolean logo) {
-        this.logo = logo;
-    }
-
-
-    /**
-     * Whether the generated .java file should be replaced when compiling
-     * Valid true values are "on" or "true". Anything else sets the flag to
-     * false. The default value is false.
-     */
-    public void setReplace(boolean replace) {
-        this.replace = replace;
-    }
-
-
-    /**
-     * Sets whether the compiler messages will be written to NetRexxC.log as
-     * well as to the console Valid true values are "on" or "true". Anything
-     * else sets the flag to false. The default value is false.
-     */
-    public void setSavelog(boolean savelog) {
-        this.savelog = savelog;
-    }
-
-
-    /**
-     * Tells the NetRexx compiler to store the class files in the same
-     * directory as the source files. The alternative is the working directory
-     * Valid true values are "on" or "true". Anything else sets the flag to
-     * false. The default value is true.
-     */
-    public void setSourcedir(boolean sourcedir) {
-        this.sourcedir = sourcedir;
-    }
-
-
-    /** Set the source dir to find the source Java files.  */
-    public void setSrcDir(File srcDirName) {
-        srcDir = srcDirName;
-    }
-
-
-    /**
-     * Tells the NetRexx compiler that method calls always need parentheses,
-     * even if no arguments are needed, e.g. <code>aStringVar.getBytes</code>
-     * vs. <code>aStringVar.getBytes()</code> Valid true values are "on" or
-     * "true". Anything else sets the flag to false. The default value is
-     * false.
-     */
-    public void setStrictargs(boolean strictargs) {
-        this.strictargs = strictargs;
-    }
-
-
-    /**
-     * Tells the NetRexx compile that assignments must match exactly on type
-     */
-    public void setStrictassign(boolean strictassign) {
-        this.strictassign = strictassign;
-    }
-
-
-    /**
-     * Specifies whether the NetRexx compiler should be case sensitive or not
-     */
-    public void setStrictcase(boolean strictcase) {
-        this.strictcase = strictcase;
-    }
-
-
-    /**
-     * Sets whether classes need to be imported explicitly using an <code>import</code>
-     * statement. By default the NetRexx compiler will import certain packages
-     * automatically Valid true values are "on" or "true". Anything else sets
-     * the flag to false. The default value is false.
-     */
-    public void setStrictimport(boolean strictimport) {
-        this.strictimport = strictimport;
-    }
-
-
-    /**
-     * Sets whether local properties need to be qualified explicitly using
-     * <code>this</code> Valid true values are "on" or "true". Anything else
-     * sets the flag to false. The default value is false.
-     */
-    public void setStrictprops(boolean strictprops) {
-        this.strictprops = strictprops;
-    }
-
-
-    /**
-     * Whether the compiler should force catching of exceptions by explicitly
-     * named types
-     */
-    public void setStrictsignal(boolean strictsignal) {
-        this.strictsignal = strictsignal;
-    }
-
-
-    /**
-     * Sets whether debug symbols should be generated into the class file
-     * Valid true values are "on" or "true". Anything else sets the flag to
-     * false. The default value is false.
-     */
-    public void setSymbols(boolean symbols) {
-        this.symbols = symbols;
-    }
-
-
-    /**
-     * Asks the NetRexx compiler to print compilation times to the console
-     * Valid true values are "on" or "true". Anything else sets the flag to
-     * false. The default value is false.
-     */
-    public void setTime(boolean time) {
-        this.time = time;
-    }
-
-
-    public void setTrace(TraceAttr trace) {
-        this.trace = trace.getValue();
-    }
-
-
-    /**
-     * Turns on or off tracing and directs the resultant trace output Valid
-     * values are: "trace", "trace1", "trace2" and "notrace". "trace" and
-     * "trace2"
-     */
-    public void setTrace(String trace) {
-        TraceAttr t = new TraceAttr();
-
-        t.setValue(trace);
-        setTrace(t);
-    }
-
-
-    /**
-     * Tells the NetRexx compiler that the source is in UTF8 Valid true values
-     * are "on" or "true". Anything else sets the flag to false. The default
-     * value is false.
-     */
-    public void setUtf8(boolean utf8) {
-        this.utf8 = utf8;
-    }
-
-
-    /**
-     * Whether lots of warnings and error messages should be generated
-     */
-    public void setVerbose(VerboseAttr verbose) {
-        this.verbose = verbose.getValue();
-    }
-
-
-    /**
-     * Whether lots of warnings and error messages should be generated
-     */
-    public void setVerbose(String verbose) {
-        VerboseAttr v = new VerboseAttr();
-
-        v.setValue(verbose);
-        setVerbose(v);
-    }
-
-
-    /**
-     * Whether the task should suppress the "Method argument is not used" in
-     * strictargs-Mode, which can not be suppressed by the compiler itself.
-     * The warning is logged as verbose message, though.
-     */
-    public void setSuppressMethodArgumentNotUsed(boolean suppressMethodArgumentNotUsed) {
-        this.suppressMethodArgumentNotUsed = suppressMethodArgumentNotUsed;
-    }
-
-
-    /**
-     * Whether the task should suppress the "Private property is defined but
-     * not used" in strictargs-Mode, which can be quite annoying while
-     * developing. The warning is logged as verbose message, though.
-     */
-    public void setSuppressPrivatePropertyNotUsed(boolean suppressPrivatePropertyNotUsed) {
-        this.suppressPrivatePropertyNotUsed = suppressPrivatePropertyNotUsed;
-    }
-
-
-    /**
-     * Whether the task should suppress the "Variable is set but not used" in
-     * strictargs-Mode. Be careful with this one! The warning is logged as
-     * verbose message, though.
-     */
-    public void setSuppressVariableNotUsed(boolean suppressVariableNotUsed) {
-        this.suppressVariableNotUsed = suppressVariableNotUsed;
-    }
-
-
-    /**
-     * Whether the task should suppress the "FooException is in SIGNALS list
-     * but is not signalled within the method", which is sometimes rather
-     * useless. The warning is logged as verbose message, though.
-     */
-    public void setSuppressExceptionNotSignalled(boolean suppressExceptionNotSignalled) {
-        this.suppressExceptionNotSignalled = suppressExceptionNotSignalled;
-    }
-
-
-    /**
-     * Whether the task should suppress the "FooException is in SIGNALS list
-     * but is not signalled within the method", which is sometimes rather
-     * useless. The warning is logged as verbose message, though.
-     */
-    public void setSuppressDeprecation(boolean suppressDeprecation) {
-        this.suppressDeprecation = suppressDeprecation;
-    }
-
-
-    /**
-     * init-Method sets defaults from Properties. That way, when ant is called
-     * with arguments like -Dant.netrexxc.verbose=verbose5 one can easily take
-     * control of all netrexxc-tasks.
-     */
-    // Sorry for the formatting, but that way it's easier to keep in sync with the private properties (line by line).
-    public void init() {
-        String p;
-
-        if ((p = project.getProperty("ant.netrexxc.binary")) != null) {
-            this.binary = Project.toBoolean(p);
-        }
-        // classpath makes no sense
-        if ((p = project.getProperty("ant.netrexxc.comments")) != null) {
-            this.comments = Project.toBoolean(p);
-        }
-        if ((p = project.getProperty("ant.netrexxc.compact")) != null) {
-            this.compact = Project.toBoolean(p);
-        }
-        if ((p = project.getProperty("ant.netrexxc.compile")) != null) {
-            this.compile = Project.toBoolean(p);
-        }
-        if ((p = project.getProperty("ant.netrexxc.console")) != null) {
-            this.console = Project.toBoolean(p);
-        }
-        if ((p = project.getProperty("ant.netrexxc.crossref")) != null) {
-            this.crossref = Project.toBoolean(p);
-        }
-        if ((p = project.getProperty("ant.netrexxc.decimal")) != null) {
-            this.decimal = Project.toBoolean(p);
-            // destDir
-        }
-        if ((p = project.getProperty("ant.netrexxc.diag")) != null) {
-            this.diag = Project.toBoolean(p);
-        }
-        if ((p = project.getProperty("ant.netrexxc.explicit")) != null) {
-            this.explicit = Project.toBoolean(p);
-        }
-        if ((p = project.getProperty("ant.netrexxc.format")) != null) {
-            this.format = Project.toBoolean(p);
-        }
-        if ((p = project.getProperty("ant.netrexxc.java")) != null) {
-            this.java = Project.toBoolean(p);
-        }
-        if ((p = project.getProperty("ant.netrexxc.keep")) != null) {
-            this.keep = Project.toBoolean(p);
-        }
-        if ((p = project.getProperty("ant.netrexxc.logo")) != null) {
-            this.logo = Project.toBoolean(p);
-        }
-        if ((p = project.getProperty("ant.netrexxc.replace")) != null) {
-            this.replace = Project.toBoolean(p);
-        }
-        if ((p = project.getProperty("ant.netrexxc.savelog")) != null) {
-            this.savelog = Project.toBoolean(p);
-            // srcDir
-        }
-        if ((p = project.getProperty("ant.netrexxc.sourcedir")) != null) {
-            this.sourcedir = Project.toBoolean(p);
-        }
-        if ((p = project.getProperty("ant.netrexxc.strictargs")) != null) {
-            this.strictargs = Project.toBoolean(p);
-        }
-        if ((p = project.getProperty("ant.netrexxc.strictassign")) != null) {
-            this.strictassign = Project.toBoolean(p);
-        }
-        if ((p = project.getProperty("ant.netrexxc.strictcase")) != null) {
-            this.strictcase = Project.toBoolean(p);
-        }
-        if ((p = project.getProperty("ant.netrexxc.strictimport")) != null) {
-            this.strictimport = Project.toBoolean(p);
-        }
-        if ((p = project.getProperty("ant.netrexxc.strictprops")) != null) {
-            this.strictprops = Project.toBoolean(p);
-        }
-        if ((p = project.getProperty("ant.netrexxc.strictsignal")) != null) {
-            this.strictsignal = Project.toBoolean(p);
-        }
-        if ((p = project.getProperty("ant.netrexxc.symbols")) != null) {
-            this.symbols = Project.toBoolean(p);
-        }
-        if ((p = project.getProperty("ant.netrexxc.time")) != null) {
-            this.time = Project.toBoolean(p);
-        }
-        if ((p = project.getProperty("ant.netrexxc.trace")) != null) {
-            setTrace(p);
-        }
-        if ((p = project.getProperty("ant.netrexxc.utf8")) != null) {
-            this.utf8 = Project.toBoolean(p);
-        }
-        if ((p = project.getProperty("ant.netrexxc.verbose")) != null) {
-            setVerbose(p);
-        }
-        if ((p = project.getProperty("ant.netrexxc.suppressMethodArgumentNotUsed")) != null) {
-            this.suppressMethodArgumentNotUsed = Project.toBoolean(p);
-        }
-        if ((p = project.getProperty("ant.netrexxc.suppressPrivatePropertyNotUsed")) != null) {
-            this.suppressPrivatePropertyNotUsed = Project.toBoolean(p);
-        }
-        if ((p = project.getProperty("ant.netrexxc.suppressVariableNotUsed")) != null) {
-            this.suppressVariableNotUsed = Project.toBoolean(p);
-        }
-        if ((p = project.getProperty("ant.netrexxc.suppressExceptionNotSignalled")) != null) {
-            this.suppressExceptionNotSignalled = Project.toBoolean(p);
-        }
-        if ((p = project.getProperty("ant.netrexxc.suppressDeprecation")) != null) {
-            this.suppressDeprecation = Project.toBoolean(p);
-        }
-    }
-
-
-    /** Executes the task - performs the actual compiler call.  */
-    public void execute() throws BuildException {
-
-        // first off, make sure that we've got a srcdir and destdir
-        if (srcDir == null || destDir == null) {
-            throw new BuildException("srcDir and destDir attributes must be set!");
-        }
-
-        // scan source and dest dirs to build up both copy lists and
-        // compile lists
-        //        scanDir(srcDir, destDir);
-        DirectoryScanner ds = getDirectoryScanner(srcDir);
-
-        String[] files = ds.getIncludedFiles();
-
-        scanDir(srcDir, destDir, files);
-
-        // copy the source and support files
-        copyFilesToDestination();
-
-        // compile the source files
-        if (compileList.size() > 0) {
-            log("Compiling " + compileList.size() + " source file"
-                 + (compileList.size() == 1 ? "" : "s")
-                 + " to " + destDir);
-            doNetRexxCompile();
-        }
-    }
-
-
-    /**
-     * Scans the directory looking for source files to be compiled and support
-     * files to be copied.
-     */
-    private void scanDir(File srcDir, File destDir, String[] files) {
-        for (int i = 0; i < files.length; i++) {
-            File srcFile = new File(srcDir, files[i]);
-            File destFile = new File(destDir, files[i]);
-            String filename = files[i];
-            // if it's a non source file, copy it if a later date than the
-            // dest
-            // if it's a source file, see if the destination class file
-            // needs to be recreated via compilation
-            if (filename.toLowerCase().endsWith(".nrx")) {
-                File classFile =
-                    new File(destDir,
-                    filename.substring(0, filename.lastIndexOf('.')) + ".class");
-
-                if (!compile || srcFile.lastModified() > classFile.lastModified()) {
-                    filecopyList.put(srcFile.getAbsolutePath(), destFile.getAbsolutePath());
-                    compileList.addElement(destFile.getAbsolutePath());
-                }
-            } else {
-                if (srcFile.lastModified() > destFile.lastModified()) {
-                    filecopyList.put(srcFile.getAbsolutePath(), destFile.getAbsolutePath());
-                }
-            }
-        }
-    }
-
-
-    /** Copy eligible files from the srcDir to destDir  */
-    private void copyFilesToDestination() {
-        if (filecopyList.size() > 0) {
-            log("Copying " + filecopyList.size() + " file"
-                 + (filecopyList.size() == 1 ? "" : "s")
-                 + " to " + destDir.getAbsolutePath());
-
-            Enumeration enum = filecopyList.keys();
-
-            while (enum.hasMoreElements()) {
-                String fromFile = (String) enum.nextElement();
-                String toFile = (String) filecopyList.get(fromFile);
-
-                try {
-                    project.copyFile(fromFile, toFile);
-                } catch (IOException ioe) {
-                    String msg = "Failed to copy " + fromFile + " to " + toFile
-                         + " due to " + ioe.getMessage();
-
-                    throw new BuildException(msg, ioe);
-                }
-            }
-        }
-    }
-
-
-    /** Peforms a copmile using the NetRexx 1.1.x compiler  */
-    private void doNetRexxCompile() throws BuildException {
-        log("Using NetRexx compiler", Project.MSG_VERBOSE);
-
-        String classpath = getCompileClasspath();
-        StringBuffer compileOptions = new StringBuffer();
-        StringBuffer fileList = new StringBuffer();
-
-        // create an array of strings for input to the compiler: one array
-        // comes from the compile options, the other from the compileList
-        String[] compileOptionsArray = getCompileOptionsAsArray();
-        String[] fileListArray = new String[compileList.size()];
-        Enumeration e = compileList.elements();
-        int j = 0;
-
-        while (e.hasMoreElements()) {
-            fileListArray[j] = (String) e.nextElement();
-            j++;
-        }
-        // create a single array of arguments for the compiler
-        String compileArgs[] = new String[compileOptionsArray.length + fileListArray.length];
-
-        for (int i = 0; i < compileOptionsArray.length; i++) {
-            compileArgs[i] = compileOptionsArray[i];
-        }
-        for (int i = 0; i < fileListArray.length; i++) {
-            compileArgs[i + compileOptionsArray.length] = fileListArray[i];
-        }
-
-        // print nice output about what we are doing for the log
-        compileOptions.append("Compilation args: ");
-        for (int i = 0; i < compileOptionsArray.length; i++) {
-            compileOptions.append(compileOptionsArray[i]);
-            compileOptions.append(" ");
-        }
-        log(compileOptions.toString(), Project.MSG_VERBOSE);
-
-        String eol = System.getProperty("line.separator");
-        StringBuffer niceSourceList = new StringBuffer("Files to be compiled:" + eol);
-
-        for (int i = 0; i < compileList.size(); i++) {
-            niceSourceList.append("    ");
-            niceSourceList.append(compileList.elementAt(i).toString());
-            niceSourceList.append(eol);
-        }
-
-        log(niceSourceList.toString(), Project.MSG_VERBOSE);
-
-        // need to set java.class.path property and restore it later
-        // since the NetRexx compiler has no option for the classpath
-        String currentClassPath = System.getProperty("java.class.path");
-        Properties currentProperties = System.getProperties();
-
-        currentProperties.put("java.class.path", classpath);
-
-        try {
-            StringWriter out = new StringWriter();
-            int rc =
-                COM.ibm.netrexx.process.NetRexxC.main(new Rexx(compileArgs), new PrintWriter(out));
-            String sdir = srcDir.getAbsolutePath();
-            String ddir = destDir.getAbsolutePath();
-            boolean doReplace = !(sdir.equals(ddir));
-            int dlen = ddir.length();
-            String l;
-            BufferedReader in = new BufferedReader(new StringReader(out.toString()));
-
-            log("replacing destdir '" + ddir + "' through sourcedir '" + sdir + "'", Project.MSG_VERBOSE);
-            while ((l = in.readLine()) != null) {
-                int idx;
-
-                while (doReplace && ((idx = l.indexOf(ddir)) != -1)) {// path is mentioned in the message
-                    l = (new StringBuffer(l)).replace(idx, idx + dlen, sdir).toString();
-                }
-                // verbose level logging for suppressed messages
-                if (suppressMethodArgumentNotUsed && l.indexOf(MSG_METHOD_ARGUMENT_NOT_USED) != -1) {
-                    log(l, Project.MSG_VERBOSE);
-                } else if (suppressPrivatePropertyNotUsed && l.indexOf(MSG_PRIVATE_PROPERTY_NOT_USED) != -1) {
-                    log(l, Project.MSG_VERBOSE);
-                } else if (suppressVariableNotUsed && l.indexOf(MSG_VARIABLE_NOT_USED) != -1) {
-                    log(l, Project.MSG_VERBOSE);
-                } else if (suppressExceptionNotSignalled && l.indexOf(MSG_EXCEPTION_NOT_SIGNALLED) != -1) {
-                    log(l, Project.MSG_VERBOSE);
-                } else if (suppressDeprecation && l.indexOf(MSG_DEPRECATION) != -1) {
-                    log(l, Project.MSG_VERBOSE);
-                } else if (l.indexOf("Error:") != -1) {// error level logging for compiler errors
-                    log(l, Project.MSG_ERR);
-                } else if (l.indexOf("Warning:") != -1) {// warning for all warning messages
-                    log(l, Project.MSG_WARN);
-                } else {
-                    log(l, Project.MSG_INFO);// info level for the rest.
-                }
-            }
-            if (rc > 1) {
-                throw new BuildException("Compile failed, messages should have been provided.");
-            }
-        } catch (IOException ioe) {
-            throw new BuildException("Unexpected IOException while playing with Strings",
-                ioe);
-        } finally {
-            // need to reset java.class.path property
-            // since the NetRexx compiler has no option for the classpath
-            currentProperties = System.getProperties();
-            currentProperties.put("java.class.path", currentClassPath);
-        }
-
-    }
-
-
-    /** Builds the compilation classpath.  */
-    private String getCompileClasspath() {
-        StringBuffer classpath = new StringBuffer();
-
-        // add dest dir to classpath so that previously compiled and
-        // untouched classes are on classpath
-        classpath.append(destDir.getAbsolutePath());
-
-        // add our classpath to the mix
-        if (this.classpath != null) {
-            addExistingToClasspath(classpath, this.classpath);
-        }
-
-        // add the system classpath
-        // addExistingToClasspath(classpath,System.getProperty("java.class.path"));
-        return classpath.toString();
-    }
-
-
-    /** This  */
-    private String[] getCompileOptionsAsArray() {
-        Vector options = new Vector();
-
-        options.addElement(binary ? "-binary" : "-nobinary");
-        options.addElement(comments ? "-comments" : "-nocomments");
-        options.addElement(compile ? "-compile" : "-nocompile");
-        options.addElement(compact ? "-compact" : "-nocompact");
-        options.addElement(console ? "-console" : "-noconsole");
-        options.addElement(crossref ? "-crossref" : "-nocrossref");
-        options.addElement(decimal ? "-decimal" : "-nodecimal");
-        options.addElement(diag ? "-diag" : "-nodiag");
-        options.addElement(explicit ? "-explicit" : "-noexplicit");
-        options.addElement(format ? "-format" : "-noformat");
-        options.addElement(keep ? "-keep" : "-nokeep");
-        options.addElement(logo ? "-logo" : "-nologo");
-        options.addElement(replace ? "-replace" : "-noreplace");
-        options.addElement(savelog ? "-savelog" : "-nosavelog");
-        options.addElement(sourcedir ? "-sourcedir" : "-nosourcedir");
-        options.addElement(strictargs ? "-strictargs" : "-nostrictargs");
-        options.addElement(strictassign ? "-strictassign" : "-nostrictassign");
-        options.addElement(strictcase ? "-strictcase" : "-nostrictcase");
-        options.addElement(strictimport ? "-strictimport" : "-nostrictimport");
-        options.addElement(strictprops ? "-strictprops" : "-nostrictprops");
-        options.addElement(strictsignal ? "-strictsignal" : "-nostrictsignal");
-        options.addElement(symbols ? "-symbols" : "-nosymbols");
-        options.addElement(time ? "-time" : "-notime");
-        options.addElement("-" + trace);
-        options.addElement(utf8 ? "-utf8" : "-noutf8");
-        options.addElement("-" + verbose);
-
-        String[] results = new String[options.size()];
-
-        options.copyInto(results);
-        return results;
-    }
-
-
-    /**
-     * Takes a classpath-like string, and adds each element of this string to
-     * a new classpath, if the components exist. Components that don't exist,
-     * aren't added. We do this, because jikes issues warnings for
-     * non-existant files/dirs in his classpath, and these warnings are pretty
-     * annoying.
-     *
-     * @param target - target classpath
-     * @param source - source classpath to get file objects.
-     */
-    private void addExistingToClasspath(StringBuffer target, String source) {
-        StringTokenizer tok = new StringTokenizer(source,
-            System.getProperty("path.separator"), false);
-
-        while (tok.hasMoreTokens()) {
-            File f = project.resolveFile(tok.nextToken());
-
-            if (f.exists()) {
-                target.append(File.pathSeparator);
-                target.append(f.getAbsolutePath());
-            } else {
-                log("Dropping from classpath: " +
-                    f.getAbsolutePath(), Project.MSG_VERBOSE);
-            }
-        }
-
-    }
-
-
-    public static class TraceAttr extends EnumeratedAttribute {
-        public String[] getValues() {
-            return new String[]{"trace", "trace1", "trace2", "notrace"};
-        }
-    }
-
-
-    public static class VerboseAttr extends EnumeratedAttribute {
-        public String[] getValues() {
-            return new String[]{"verbose", "verbose0", "verbose1",
-                "verbose2", "verbose3", "verbose4",
-                "verbose5", "noverbose"};
-        }
-    }
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/PropertyFile.java b/src/main/org/apache/tools/ant/taskdefs/optional/PropertyFile.java
deleted file mode 100644
index d267027..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/PropertyFile.java
+++ /dev/null
@@ -1,648 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional;
-
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.types.EnumeratedAttribute;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.BufferedInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.BufferedOutputStream;
-import java.io.OutputStream;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.util.Properties;
-import java.util.Vector;
-import java.util.Enumeration;
-import java.util.Date;
-import java.util.Calendar;
-import java.util.Hashtable;
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
-import java.text.ParseException;
-import java.text.DecimalFormat;
-
-/**
- *PropertyFile task uses java.util.Properties to modify integer, String and
- *Date settings in a property file.<p>
- *
- *
- *The following is an example of its usage:
- *    <ul>&lt;target name="setState"&gt;<br>
- *    <ul>&lt;property<br>
- *        <ul>name="header"<br>
- *        value="##Generated file - do not modify!"/&gt;<br>
- *      &lt;propertyfile file="apropfile.properties" comment="${header}"&gt;<br>
- *        &lt;entry key="product.version.major" type="int"  value="5"/&gt;<br>
- *        &lt;entry key="product.version.minor" type="int"  value="0"/&gt;<br>
- *        &lt;entry key="product.build.major"   type="int"  value="0" /&gt;<br>
- *        &lt;entry key="product.build.minor"   type="int"  operation="+" /&gt;<br>
- *        &lt;entry key="product.build.date"    type="date" value="now" /&gt;<br>
- *        &lt;entry key="intSet" type="int" operation="=" value="681"/&gt;<br>
- *        &lt;entry key="intDec" type="int" operation="-"/&gt;<br>
- *        &lt;entry key="StringEquals" type="string" value="testValue"/&gt;<br>
- *     &lt;/propertyfile&gt;<br></ul>
- *   &lt;/target&gt;</ul><p>
- *
- *The &lt;propertyfile&gt; task must have:<br>
- *    <ul><li>file</li></ul>
- *Other parameters are:<br>
- *    <ul><li>comment, key, operation, type and value (the final four being eliminated shortly)</li></ul>
- *
- *The &lt;entry&gt; task must have:<br>
- *    <ul><li>key</li></ul>
- *Other parameters are:<br>
- *    <ul><li>operation</li>
- *        <li>type</li>
- *        <li>value</li>
- *        <li>default</li>
- *        <li>unit</li>
- *    </ul>
- *
- *If type is unspecified, it defaults to string
- *
- *Parameter values:<br>
- *    <ul><li>operation:</li>
- *        <ul><li>"=" (set -- default)</li>
- *        <li>"-" (dec)</li>
- *        <li>"+" (inc)</li>
- *
- *    <li>type:</li>
- *        <ul><li>"int"</li>
- *        <li>"date"</li>
- *        <li>"string"</li></ul></ul>
- *
- *    <li>value:</li>
- *      <ul><li>holds the default value, if the property
- *              was not found in property file</li>
- *          <li>"now" In case of type "date", the
- *              value "now" will be replaced by the current
- *              date/time and used even if a valid date was
- *              found in the property file.</li></ul>
- *
- *
- *String property types can only use the "=" operation.
- *Int property types can only use the "=", "-" or "+" operations.<p>
- *
- *The message property is used for the property file header, with "\\" being
- *a newline delimiter character.
- *
- * @author Thomas Christen <a href="mailto:chr@active.ch">chr@active.ch</a>
- * @author Jeremy Mawson <a href="mailto:jem@loftinspace.com.au">jem@loftinspace.com.au</a>
- * @author Erik Hatcher <a href="mailto:ehatcher@apache.org">ehatcher@apache.org</a>
- */
-public class PropertyFile extends Task {
-
-    /* ========================================================================
-    *
-    * Static variables.
-    */
-
-    private static final String NEWLINE = System.getProperty("line.separator");
-
-
-    /* ========================================================================
-    *
-    * Instance variables.
-    */
-
-    // Use this to prepend a message to the properties file
-    private String              comment;
-
-    private Properties          properties;
-    private File                propertyfile;
-
-    private Vector entries = new Vector();
-
-    /* ========================================================================
-    *
-    * Constructors
-    */
-
-    /* ========================================================================
-    *
-    * Methods
-    */
-
-    public void execute() throws BuildException {
-        checkParameters();
-        readFile();
-        executeOperation();
-        writeFile();
-    }
-
-    public Entry createEntry() {
-        Entry e = new Entry();
-        entries.addElement(e);
-        return e;
-    }
-
-    private void executeOperation() throws BuildException {
-        for (Enumeration e = entries.elements(); e.hasMoreElements();) {
-            Entry entry = (Entry) e.nextElement();
-            entry.executeOn(properties);
-        }
-    }
-
-    private void readFile() throws BuildException {
-        // Create the PropertyFile
-        properties = new Properties();
-        try {
-            if (propertyfile.exists()) {
-                log("Updating property file: " 
-                    + propertyfile.getAbsolutePath());
-                FileInputStream fis = null;
-                try {
-                    fis = new FileInputStream(propertyfile);
-                    BufferedInputStream bis = new BufferedInputStream(fis);
-                    properties.load(bis);
-                } finally {
-                    if (fis != null) {
-                        fis.close();
-                    }
-                }
-            } else {
-                log("Creating new property file: " 
-                    + propertyfile.getAbsolutePath());
-                FileOutputStream out = null;
-                try {
-                    out = new FileOutputStream(propertyfile.getAbsolutePath());
-                    out.flush();
-                } finally {
-                    if (out != null) {
-                        out.close();
-                    }
-                }
-            }
-        } catch (IOException ioe) {
-            throw new BuildException(ioe.toString());
-        }
-    }
-
-    private void checkParameters() throws BuildException {
-        if (!checkParam(propertyfile)) {
-            throw new BuildException("file token must not be null.", location);
-        }
-    }
-
-    public void setFile(File file) {
-        propertyfile = file;
-    }
-
-    public void setComment(String hdr) {
-        comment = hdr;
-    }
-
-    private void writeFile() throws BuildException {
-        BufferedOutputStream bos = null;
-        try {
-            bos = new BufferedOutputStream(new FileOutputStream(propertyfile));
-
-            // Properties.store is not available in JDK 1.1
-            Method m =
-                Properties.class.getMethod("store",
-                                           new Class[] {
-                                               OutputStream.class,
-                                               String.class});
-            m.invoke(properties, new Object[] {bos, comment});
-
-        } catch (NoSuchMethodException nsme) {
-            properties.save(bos, comment);
-        } catch (InvocationTargetException ite) {
-            Throwable t = ite.getTargetException();
-            throw new BuildException(t, location);
-        } catch (IllegalAccessException iae) {
-            // impossible
-            throw new BuildException(iae, location);
-        } catch (IOException ioe) {
-            throw new BuildException(ioe, location);
-        } finally {
-            if (bos != null) {
-                try {
-                    bos.close();
-                } catch (IOException ioex) {}
-            }
-        }
-    }
-
-    /*
-    * Returns whether the given parameter has been defined.
-    */
-    private boolean checkParam(String param) {
-        return !((param == null) || (param.equals("null")));
-    }
-
-    private boolean checkParam(File param) {
-        return !(param == null);
-    }
-
-    /**
-     * Instance of this class represents nested elements of
-     * a task propertyfile.
-     */
-    public static class Entry {
-        private static final int DEFAULT_INT_VALUE = 0;
-        private static final String DEFAULT_DATE_VALUE = "now";
-        private static final String DEFAULT_STRING_VALUE = "";
-
-        private String              key = null;
-        private int                 type = Type.STRING_TYPE;
-        private int                 operation = Operation.EQUALS_OPER;
-        private String              value = null;
-        private String              defaultValue = null;
-        private String              pattern = null;
-        private int                 field = Calendar.DATE;
-
-        public void setKey(String value) {
-            this.key = value;
-        }
-        public void setValue(String value) {
-            this.value = value;
-        }
-        public void setOperation(Operation value) {
-            this.operation = Operation.toOperation(value.getValue());
-        }
-        public void setType(Type value) {
-            this.type = Type.toType(value.getValue());
-        }
-        public void setDefault(String value) {
-            this.defaultValue = value;
-        }
-        public void setPattern(String value) {
-            this.pattern = value;
-        }
-        
-        /**
-         * @since 1.15, Ant 1.5
-         */
-        public void setUnit(PropertyFile.Unit unit) {
-            field = unit.getCalendarField();
-        }
-
-        protected void executeOn(Properties props) throws BuildException {
-            checkParameters();
-
-            // type may be null because it wasn't set
-            String oldValue = (String) props.get(key);
-            try {
-                if (type == Type.INTEGER_TYPE) {
-                    executeInteger(oldValue);
-                } else if (type == Type.DATE_TYPE) {
-                    executeDate(oldValue);
-                } else if (type == Type.STRING_TYPE) {
-                    executeString(oldValue);
-                } else {
-                    throw new BuildException("Unknown operation type: "
-                        + type);
-                }
-            } catch (NullPointerException npe) {
-                // Default to string type
-                // which means do nothing
-                npe.printStackTrace();
-            }
-            
-            if (value == null) {
-                value = "";
-            }
-            
-            // Insert as a string by default
-            props.put(key, value);
-        }
-
-        /**
-        * Handle operations for type <code>date</code>.
-        *
-        * @param oldValue the current value read from the property file or
-        *                 <code>null</code> if the <code>key</code> was
-        *                 not contained in the property file.
-        */
-        private void executeDate(String oldValue) throws BuildException {
-            Calendar currentValue = Calendar.getInstance();
-
-            if (pattern == null) {
-              pattern = "yyyy/MM/dd HH:mm";
-            }
-            DateFormat fmt = new SimpleDateFormat(pattern);
-
-            String currentStringValue = getCurrentValue(oldValue);
-            if (currentStringValue == null) {
-                currentStringValue = DEFAULT_DATE_VALUE;
-            }
-            
-            if ("now".equals(currentStringValue)) {
-                currentValue.setTime(new Date());
-            } else {
-                try {
-                    currentValue.setTime(fmt.parse(currentStringValue));
-                } catch (ParseException pe)  { 
-                    // swallow 
-                }
-            }
-            
-            if (operation != Operation.EQUALS_OPER) {
-                int offset = 0;
-                try {
-                    offset = Integer.parseInt(value);
-                    if (operation == Operation.DECREMENT_OPER) {
-                        offset = -1 * offset;
-                    }
-                } catch (NumberFormatException e) {
-                    throw new BuildException("Value not an integer on " + key);
-                }
-                currentValue.add(field, offset);
-            }
-
-            value = fmt.format(currentValue.getTime());
-        }
-
-
-        /**
-        * Handle operations for type <code>int</code>.
-        *
-        * @param oldValue the current value read from the property file or
-        *                 <code>null</code> if the <code>key</code> was
-        *                 not contained in the property file.
-        */
-        private void executeInteger(String oldValue) throws BuildException {
-            int currentValue = DEFAULT_INT_VALUE;
-            int newValue  = DEFAULT_INT_VALUE;
-
-
-            DecimalFormat fmt = (pattern != null) ? new DecimalFormat(pattern)
-                                                    : new DecimalFormat();
-            try {
-                currentValue = fmt.parse(getCurrentValue(oldValue)).intValue();
-            } catch (NumberFormatException nfe) {
-                // swallow
-            } catch (ParseException pe)  {
-                // swallow
-            }
-            
-            if (operation == Operation.EQUALS_OPER) {
-                newValue = currentValue;
-            } else {
-                int operationValue = 1;
-                try {
-                    operationValue = fmt.parse(value).intValue();
-                } catch (NumberFormatException nfe) { 
-                    // swallow
-                } catch (ParseException pe)  { 
-                    // swallow
-                }
-                
-                if (operation == Operation.INCREMENT_OPER) {
-                    newValue = currentValue + operationValue;
-                } else if (operation == Operation.DECREMENT_OPER) {
-                    newValue = currentValue - operationValue;
-                }
-            }
-
-            value = fmt.format(newValue);
-        }
-        
-        /**
-        * Handle operations for type <code>string</code>.
-        *
-        * @param oldValue the current value read from the property file or
-        *                 <code>null</code> if the <code>key</code> was
-        *                 not contained in the property file.
-        */
-        private void executeString(String oldValue) throws BuildException {
-            String newValue  = DEFAULT_STRING_VALUE;
-
-            String currentValue = getCurrentValue(oldValue);
-            
-            if (currentValue == null) {
-                currentValue = DEFAULT_STRING_VALUE;
-            }
-            
-            if (operation == Operation.EQUALS_OPER) {
-                newValue = currentValue;
-            } else if (operation == Operation.INCREMENT_OPER) {
-                newValue = currentValue + value;
-            }
-            value = newValue;
-        }
-        
-        /**
-         * Check if parameter combinations can be supported
-         * @todo make sure the 'unit' attribute is only specified on date
-         *      fields
-         */
-        private void checkParameters() throws BuildException {
-            if (type == Type.STRING_TYPE &&
-                operation == Operation.DECREMENT_OPER) {
-                throw new BuildException("- is not suported for string " 
-                    + "properties (key:" + key + ")");
-            }
-            if (value == null && defaultValue == null) {
-                throw new BuildException("value and/or default must be " 
-                    + "specified (key:" + key + ")");
-            }
-            if (key == null) {
-                throw new BuildException("key is mandatory");
-            }
-            if (type == Type.STRING_TYPE &&
-                pattern != null) {
-                throw new BuildException("pattern is not suported for string " 
-                    + "properties (key:" + key + ")");
-            }
-        }
-
-        private String getCurrentValue(String oldValue) {
-            String ret = null;
-            if (operation == Operation.EQUALS_OPER) {
-                // If only value is specified, the property is set to it
-                // regardless of its previous value. 
-                if (value != null && defaultValue == null) {
-                    ret = value;
-                }
-                
-                // If only default is specified and the property previously
-                // existed in the property file, it is unchanged. 
-                if (value == null && defaultValue != null && oldValue != null) {
-                    ret = oldValue;
-                }
-
-                // If only default is specified and the property did not
-                // exist in the property file, the property is set to default.
-                if (value == null && defaultValue != null && oldValue == null) {
-                    ret = defaultValue;
-                }
-                
-                // If value and default are both specified and the property
-                // previously existed in the property file, the property
-                // is set to value.
-                if (value != null && defaultValue != null && oldValue != null) {
-                    ret = value;
-                }
-
-                // If value and default are both specified and the property
-                // did not exist in the property file, the property is set
-                // to default. 
-                if (value != null && defaultValue != null && oldValue == null) {
-                    ret = defaultValue;
-                }
-            } else {
-                ret = (oldValue == null) ? defaultValue : oldValue;
-            }
-            
-            return ret;
-        }
-        
-        /**
-         * Enumerated attribute with the values "+", "-", "="
-         */
-        public static class Operation extends EnumeratedAttribute {
-
-            // Property type operations
-            public static final int INCREMENT_OPER =   0;
-            public static final int DECREMENT_OPER =   1;
-            public static final int EQUALS_OPER =      2;
-
-            public String[] getValues() {
-                return new String[] {"+", "-", "="};
-            }
-
-            public static int toOperation(String oper) {
-                if ("+".equals(oper)) {
-                    return INCREMENT_OPER;
-                } else if ("-".equals(oper)) {
-                    return DECREMENT_OPER;
-                }
-                return EQUALS_OPER;
-            }
-        }
-
-        /**
-         * Enumerated attribute with the values "int", "date" and "string".
-         */
-        public static class Type extends EnumeratedAttribute {
-
-            // Property types
-            public static final int INTEGER_TYPE =     0;
-            public static final int DATE_TYPE =        1;
-            public static final int STRING_TYPE =      2;
-
-            public String[] getValues() {
-                return new String[] {"int", "date", "string"};
-            }
-
-            public static int toType(String type) {
-                if ("int".equals(type)) {
-                    return INTEGER_TYPE;
-                } else if ("date".equals(type)) {
-                    return DATE_TYPE;
-                }
-                return STRING_TYPE;
-            }
-        }
-    }
-    
-    /**
-     * Borrowed from Tstamp
-     *
-     * @since 1.15, Ant 1.5
-     */
-    public static class Unit extends EnumeratedAttribute {
-
-        private static final String MILLISECOND = "millisecond";
-        private static final String SECOND = "second";
-        private static final String MINUTE = "minute";
-        private static final String HOUR = "hour";
-        private static final String DAY = "day";
-        private static final String WEEK = "week";
-        private static final String MONTH = "month";
-        private static final String YEAR = "year";
-
-        private static final String[] units = {
-                                                MILLISECOND,
-                                                SECOND,
-                                                MINUTE,
-                                                HOUR,
-                                                DAY,
-                                                WEEK,
-                                                MONTH,
-                                                YEAR
-                                              };
-
-        private Hashtable calendarFields = new Hashtable();
-
-        public Unit() {
-            calendarFields.put(MILLISECOND,
-                                    new Integer(Calendar.MILLISECOND));
-            calendarFields.put(SECOND, new Integer(Calendar.SECOND));
-            calendarFields.put(MINUTE, new Integer(Calendar.MINUTE));
-            calendarFields.put(HOUR, new Integer(Calendar.HOUR_OF_DAY));
-            calendarFields.put(DAY, new Integer(Calendar.DATE));
-            calendarFields.put(WEEK, new Integer(Calendar.WEEK_OF_YEAR));
-            calendarFields.put(MONTH, new Integer(Calendar.MONTH));
-            calendarFields.put(YEAR, new Integer(Calendar.YEAR));
-        }
-
-        public int getCalendarField() {
-            String key = getValue().toLowerCase();
-            Integer i = (Integer) calendarFields.get(key);
-            return i.intValue();
-        }
-
-        public String[] getValues() {
-            return units;
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/RenameExtensions.java b/src/main/org/apache/tools/ant/taskdefs/optional/RenameExtensions.java
deleted file mode 100644
index 8685540..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/RenameExtensions.java
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000,2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-/*
- * Task to rename files based on extension. This task has the following
- * properties which can be set:
- * <ul>
- * <li>fromExtension: </li>
- * <li>toExtension: </li>
- * <li>srcDir: </li>
- * <li>replace: </li>
- * </ul>
- */
-
-package org.apache.tools.ant.taskdefs.optional;
-
-import java.io.File;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.taskdefs.MatchingTask;
-import org.apache.tools.ant.taskdefs.Move;
-import org.apache.tools.ant.types.Mapper;
-
-/**
- *
- * @author dIon Gillard <a href="mailto:dion@multitask.com.au">dion@multitask.com.au</a>
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- * @version 1.2
- *
- * @deprecated Use &lt;move&gt; instead
- */
-public class RenameExtensions extends MatchingTask {
-
-    private String fromExtension = "";
-    private String toExtension = "";
-    private boolean replace = false;
-    private File srcDir;
-
-    private Mapper.MapperType globType;
-
-
-    /** Creates new RenameExtensions */
-    public RenameExtensions() {
-        super();
-        globType = new Mapper.MapperType();
-        globType.setValue("glob");
-    }
-
-    /** store fromExtension **/
-    public void setFromExtension(String from) {
-        fromExtension = from;
-    }
-
-    /** store toExtension **/
-    public void setToExtension(String to) {
-        toExtension = to;
-    }
-
-    /**
-     * store replace attribute - this determines whether the target file
-     * should be overwritten if present
-     */
-    public void setReplace(boolean replace) {
-        this.replace = replace;
-    }
-
-    /**
-     * Set the source dir to find the files to be renamed.
-     */
-    public void setSrcDir(File srcDir) {
-        this.srcDir = srcDir;
-    }
-
-    /**
-     * Executes the task.
-     */
-    public void execute() throws BuildException {
-
-        // first off, make sure that we've got a from and to extension
-        if (fromExtension == null || toExtension == null || srcDir == null) {
-            throw new BuildException("srcDir, fromExtension and toExtension " 
-                + "attributes must be set!");
-        }
-
-        log("DEPRECATED - The renameext task is deprecated.  Use move instead.",
-            Project.MSG_WARN);
-        log("Replace this with:", Project.MSG_INFO);
-        log("<move todir=\"" + srcDir + "\" overwrite=\"" + replace + "\">",
-            Project.MSG_INFO);
-        log("  <fileset dir=\"" + srcDir + "\" />", Project.MSG_INFO);
-        log("  <mapper type=\"glob\"", Project.MSG_INFO);
-        log("          from=\"*" + fromExtension + "\"", Project.MSG_INFO);
-        log("          to=\"*" + toExtension + "\" />", Project.MSG_INFO);
-        log("</move>", Project.MSG_INFO);
-        log("using the same patterns on <fileset> as you\'ve used here", 
-            Project.MSG_INFO);
-
-        Move move = (Move) project.createTask("move");
-        move.setOwningTarget(target);
-        move.setTaskName(getTaskName());
-        move.setLocation(getLocation());
-        move.setTodir(srcDir);
-        move.setOverwrite(replace);
-
-        fileset.setDir(srcDir);
-        move.addFileset(fileset);
-
-        Mapper me = move.createMapper();
-        me.setType(globType);
-        me.setFrom("*" + fromExtension);
-        me.setTo("*" + toExtension);
-
-        move.execute();
-    }
-
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/ReplaceRegExp.java b/src/main/org/apache/tools/ant/taskdefs/optional/ReplaceRegExp.java
deleted file mode 100644
index d8103a9..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/ReplaceRegExp.java
+++ /dev/null
@@ -1,417 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.DirectoryScanner;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.util.regexp.Regexp;
-import org.apache.tools.ant.types.RegularExpression;
-import org.apache.tools.ant.types.Substitution;
-import org.apache.tools.ant.types.FileSet;
-import org.apache.tools.ant.util.FileUtils;
-import java.io.BufferedReader;
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileReader;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.LineNumberReader;
-import java.io.PrintWriter;
-
-import java.util.Vector;
-
-/**
- * <pre>
- * Task to do regular expression string replacements in a text
- * file.  The input file(s) must be able to be properly processed by
- * a Reader instance.  That is, they must be text only, no binary.
- *
- * The syntax of the regular expression depends on the implemtation that
- * you choose to use. The system property <code>ant.regexp.regexpimpl</code>
- * will be the classname of the implementation that will be used (the default
- * is <code>org.apache.tools.ant.util.regexp.JakartaOroRegexp</code> and
- * requires the Jakarta Oro Package).
- *
- * For jdk  &lt;= 1.3, there are two available implementations:
- *   org.apache.tools.ant.util.regexp.JakartaOroRegexp (the default)
- *        Requires  the jakarta-oro package
- *
- *   org.apache.tools.ant.util.regexp.JakartaRegexpRegexp
- *        Requires the jakarta-regexp package
- *
- * For jdk &gt;= 1.4 an additional implementation is available:
- *   org.apache.tools.ant.util.regexp.Jdk14RegexpRegexp
- *        Requires the jdk 1.4 built in regular expression package.
- *
- * Usage:
- *
- *   Call Syntax:
- *
- *     &lt;replaceregexp file="file"
- *                    match="pattern" 
- *                    replace="pattern" 
- *                    flags="options"?
- *                    byline="true|false"? &gt;
- *       regexp?
- *       substitution?
- *       fileset*
- *     &lt;/replaceregexp&gt;
- *
- *    NOTE: You must have either the file attribute specified, or at least one fileset subelement
- *    to operation on.  You may not have the file attribute specified if you nest fileset elements
- *    inside this task.  Also, you cannot specify both match and a regular expression subelement at
- *    the same time, nor can you specify the replace attribute and the substitution subelement at
- *    the same time.
- *
- *   Attributes:
- *
- *     file    --&gt; A single file to operation on (mutually exclusive with the fileset subelements)
- *     match   --&gt; The Regular expression to match 
- *     replace --&gt; The Expression replacement string 
- *     flags   --&gt; The options to give to the replacement 
- *                 g = Substitute all occurrences. default is to replace only the first one
- *                 i = Case insensitive match
- *
- *     byline  --&gt; Should this file be processed a single line at a time (default is false)
- *                 "true" indicates to perform replacement on a line by line basis
- *                 "false" indicates to perform replacement on the whole file at once.
- *
- *  Example:
- *
- *     The following call could be used to replace an old property name in a ".properties"
- *     file with a new name.  In the replace attribute, you can refer to any part of the
- *     match expression in parenthesis using backslash followed by a number like '\1'.
- *
- *     &lt;replaceregexp file="test.properties"
- *                    match="MyProperty=(.*)"
- *                    replace="NewProperty=\1"
- *                    byline="true" /&gt;
- *
- * </pre>
- *
- * @author <a href="mailto:mattinger@mindless.com">Matthew Inger</a>
- */
-public class ReplaceRegExp extends Task {
-
-    private File file;
-    private String flags;
-    private boolean byline;
-    private Vector filesets;// Keep jdk 1.1 compliant so others can use this
-    private RegularExpression regex;
-    private Substitution subs;
-
-    private FileUtils fileUtils = FileUtils.newFileUtils();
-
-
-    /** Default Constructor  */
-    public ReplaceRegExp() {
-        super();
-        this.file = null;
-        this.filesets = new Vector();
-        this.flags = "";
-        this.byline = false;
-
-        this.regex = null;
-        this.subs = null;
-    }
-
-
-    public void setFile(File file) {
-        this.file = file;
-    }
-
-
-    public void setMatch(String match) {
-        if (regex != null) {
-            throw new BuildException("Only one regular expression is allowed");
-        }
-
-        regex = new RegularExpression();
-        regex.setPattern(match);
-    }
-
-
-    public void setReplace(String replace) {
-        if (subs != null) {
-            throw new BuildException("Only one substitution expression is allowed");
-        }
-
-        subs = new Substitution();
-        subs.setExpression(replace);
-    }
-
-
-    public void setFlags(String flags) {
-        this.flags = flags;
-    }
-
-
-    public void setByLine(String byline) {
-        Boolean res = Boolean.valueOf(byline);
-
-        if (res == null) {
-            res = Boolean.FALSE;
-        }
-        this.byline = res.booleanValue();
-    }
-
-
-    public void addFileset(FileSet set) {
-        filesets.addElement(set);
-    }
-
-
-    public RegularExpression createRegexp() {
-        if (regex != null) {
-            throw new BuildException("Only one regular expression is allowed.");
-        }
-
-        regex = new RegularExpression();
-        return regex;
-    }
-
-
-    public Substitution createSubstitution() {
-        if (subs != null) {
-            throw new BuildException("Only one substitution expression is allowed");
-        }
-
-        subs = new Substitution();
-        return subs;
-    }
-
-
-    protected String doReplace(RegularExpression r,
-                               Substitution s,
-                               String input,
-                               int options) {
-        String res = input;
-        Regexp regexp = r.getRegexp(project);
-
-        if (regexp.matches(input, options)) {
-            res = regexp.substitute(input, s.getExpression(project), options);
-        }
-
-        return res;
-    }
-
-
-    /** Perform the replace on the entire file  */
-    protected void doReplace(File f, int options)
-         throws IOException {
-        File parentDir = new File(new File(f.getAbsolutePath()).getParent());
-        File temp = fileUtils.createTempFile("replace", ".txt", parentDir);
-
-        FileReader r = null;
-        FileWriter w = null;
-
-        try {
-            r = new FileReader(f);
-            w = new FileWriter(temp);
-
-            BufferedReader br = new BufferedReader(r);
-            BufferedWriter bw = new BufferedWriter(w);
-            PrintWriter pw = new PrintWriter(bw);
-
-            boolean changes = false;
-
-            log("Replacing pattern '" + regex.getPattern(project) + "' with '" + subs.getExpression(project) +
-                "' in '" + f.getPath() + "'" +
-                (byline ? " by line" : "") +
-                (flags.length() > 0 ? " with flags: '" + flags + "'" : "") +
-                ".",
-                Project.MSG_WARN);
-
-            if (byline) {
-                LineNumberReader lnr = new LineNumberReader(br);
-                String line = null;
-
-                while ((line = lnr.readLine()) != null) {
-                    String res = doReplace(regex, subs, line, options);
-
-                    if (!res.equals(line)) {
-                        changes = true;
-                    }
-
-                    pw.println(res);
-                }
-                pw.flush();
-            } else {
-                int flen = (int) f.length();
-                char tmpBuf[] = new char[flen];
-                int numread = 0;
-                int totread = 0;
-
-                while (numread != -1 && totread < flen) {
-                    numread = br.read(tmpBuf, totread, flen);
-                    totread += numread;
-                }
-
-                String buf = new String(tmpBuf);
-
-                String res = doReplace(regex, subs, buf, options);
-
-                if (!res.equals(buf)) {
-                    changes = true;
-                }
-
-                pw.println(res);
-                pw.flush();
-            }
-
-            r.close();
-            r = null;
-            w.close();
-            w = null;
-
-            if (changes) {
-                f.delete();
-                temp.renameTo(f);
-            } else {
-                temp.delete();
-            }
-        } finally {
-            try {
-                if (r != null) {
-                    r.close();
-                }
-            } catch (Exception e) {
-            }
-            ;
-
-            try {
-                if (w != null) {
-                    r.close();
-                }
-            } catch (Exception e) {
-            }
-            ;
-        }
-    }
-
-
-    public void execute()
-         throws BuildException {
-        if (regex == null) {
-            throw new BuildException("No expression to match.");
-        }
-        if (subs == null) {
-            throw new BuildException("Nothing to replace expression with.");
-        }
-
-        if (file != null && filesets.size() > 0) {
-            throw new BuildException("You cannot supply the 'file' attribute and filesets at the same time.");
-        }
-
-        int options = 0;
-
-        if (flags.indexOf('g') != -1) {
-            options |= Regexp.REPLACE_ALL;
-        }
-
-        if (flags.indexOf('i') != -1) {
-            options |= Regexp.MATCH_CASE_INSENSITIVE;
-        }
-
-        if (flags.indexOf('m') != -1) {
-            options |= Regexp.MATCH_MULTILINE;
-        }
-
-        if (flags.indexOf('s') != -1) {
-            options |= Regexp.MATCH_SINGLELINE;
-        }
-
-        if (file != null && file.exists()) {
-            try {
-                doReplace(file, options);
-            } catch (IOException e) {
-                log("An error occurred processing file: '" + file.getAbsolutePath() + "': " + e.toString(),
-                    Project.MSG_ERR);
-            }
-        } else if (file != null) {
-            log("The following file is missing: '" + file.getAbsolutePath() + "'",
-                Project.MSG_ERR);
-        }
-
-        int sz = filesets.size();
-
-        for (int i = 0; i < sz; i++) {
-            FileSet fs = (FileSet) (filesets.elementAt(i));
-            DirectoryScanner ds = fs.getDirectoryScanner(getProject());
-
-            String files[] = ds.getIncludedFiles();
-
-            for (int j = 0; j < files.length; j++) {
-                File f = new File(files[j]);
-
-                if (f.exists()) {
-                    try {
-                        doReplace(f, options);
-                    } catch (Exception e) {
-                        log("An error occurred processing file: '" + f.getAbsolutePath() + "': " + e.toString(),
-                            Project.MSG_ERR);
-                    }
-                } else {
-                    log("The following file is missing: '" + file.getAbsolutePath() + "'",
-                        Project.MSG_ERR);
-                }
-            }
-        }
-    }
-
-}
-
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/Rpm.java b/src/main/org/apache/tools/ant/taskdefs/optional/Rpm.java
deleted file mode 100644
index a6a971e..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/Rpm.java
+++ /dev/null
@@ -1,232 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional;
-
-import java.io.File;
-import java.io.OutputStream;
-import java.io.PrintStream;
-import java.io.BufferedOutputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.taskdefs.ExecuteStreamHandler;
-import org.apache.tools.ant.taskdefs.LogStreamHandler;
-import org.apache.tools.ant.taskdefs.LogOutputStream;
-import org.apache.tools.ant.taskdefs.PumpStreamHandler;
-import org.apache.tools.ant.taskdefs.Execute;
-import org.apache.tools.ant.types.Commandline;
-
-/**
- *
- *  @author lucas@collab.net
- */
-public class Rpm extends Task {
-    
-    /**
-     * the spec file
-     */
-    private String specFile;
-
-    /**
-     * the rpm top dir
-     */
-    private File topDir;
-
-    /**
-     * the rpm command to use
-     */
-    private String command = "-bb";
-
-    /**
-     * clean BUILD directory
-     */
-    private boolean cleanBuildDir = false;
-
-    /**
-     * remove spec file
-     */
-    private boolean removeSpec = false;
-
-    /**
-     * remove sources
-     */
-    private boolean removeSource = false;
-
-    /**
-     * the file to direct standard output from the command
-     */
-    private File output;
-
-    /**
-     * the file to direct standard error from the command
-     */
-    private File error;
-
-    public void execute() throws BuildException {
-        
-        Commandline toExecute = new Commandline();
-
-        toExecute.setExecutable("rpm");
-        if (topDir != null) {
-            toExecute.createArgument().setValue("--define");
-            toExecute.createArgument().setValue("_topdir" + topDir);
-        }
-
-        toExecute.createArgument().setLine(command);
-
-        if (cleanBuildDir) {
-            toExecute.createArgument().setValue("--clean");
-        }
-        if (removeSpec) {
-            toExecute.createArgument().setValue("--rmspec");
-        }
-        if (removeSource) {
-            toExecute.createArgument().setValue("--rmsource");
-        }
-
-        toExecute.createArgument().setValue("SPECS/" + specFile);
-
-        ExecuteStreamHandler streamhandler = null;
-        OutputStream outputstream = null;
-        OutputStream errorstream = null;
-        if (error == null && output == null) {
-            streamhandler = new LogStreamHandler(this, Project.MSG_INFO,
-                                                 Project.MSG_WARN);
-        } else {
-            if (output != null) {
-                try {
-                    outputstream = new PrintStream(new BufferedOutputStream(new FileOutputStream(output)));
-                } catch (IOException e) {
-                    throw new BuildException(e, location);
-                }
-            } else {
-                outputstream = new LogOutputStream(this, Project.MSG_INFO);
-            }
-            if (error != null) {
-                try {
-                    errorstream = new PrintStream(new BufferedOutputStream(new FileOutputStream(error)));
-                }  catch (IOException e) {
-                    throw new BuildException(e, location);
-                }
-            } else {
-                errorstream = new LogOutputStream(this, Project.MSG_WARN);
-            }
-            streamhandler = new PumpStreamHandler(outputstream, errorstream);
-        }
-
-        Execute exe = new Execute(streamhandler, null);
-
-        exe.setAntRun(project);
-        if (topDir == null) {
-            topDir = project.getBaseDir();
-        }
-        exe.setWorkingDirectory(topDir);
-
-        exe.setCommandline(toExecute.getCommandline());
-        try {
-            exe.execute();
-            log("Building the RPM based on the " + specFile + " file");
-        } catch (IOException e) {
-            throw new BuildException(e, location);
-        } finally {
-            if (output != null) {
-                try {
-                    outputstream.close();
-                } catch (IOException e) {}
-            }
-            if (error != null) {
-                try {
-                    errorstream.close();
-                } catch (IOException e) {}
-            }
-        }
-    }
-
-    public void setTopDir(File td) {
-        this.topDir = td;
-    }
-
-    public void setCommand(String c) {
-        this.command = c;
-    }
-
-    public void setSpecFile(String sf) {
-        if ((sf == null) || (sf.trim().equals(""))) {
-            throw new BuildException("You must specify a spec file", location);
-        }
-        this.specFile = sf;
-    }
-
-    public void setCleanBuildDir(boolean cbd) {
-        cleanBuildDir = cbd;
-    }
-
-    public void setRemoveSpec(boolean rs) {
-        removeSpec = rs;
-    }
-
-    public void setRemoveSource(boolean rs) {
-        removeSource = rs;
-    }
-
-    public void setOutput(File output) {
-        this.output = output;
-    }
-
-    public void setError(File error) {
-        this.error = error;
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/Script.java b/src/main/org/apache/tools/ant/taskdefs/optional/Script.java
deleted file mode 100644
index afe5533..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/Script.java
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights 
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional;
-
-import com.ibm.bsf.BSFManager;
-import com.ibm.bsf.BSFException;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.util.Hashtable;
-import java.util.Enumeration;
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.BuildException;
-
-/**
- * Execute a script
- *
- * @ant.task name="script"
- * @author Sam Ruby <a href="mailto:rubys@us.ibm.com">rubys@us.ibm.com</a>
- */
-public class Script extends Task {
-    private String language;
-    private String script = "";
-    private Hashtable beans = new Hashtable();
-    
-    /**
-     * Add a list of named objects to the list to be exported to the script
-     */
-    private void addBeans(Hashtable dictionary) {
-        for (Enumeration e = dictionary.keys(); e.hasMoreElements();) {
-            String key = (String) e.nextElement();
-
-            boolean isValid = key.length() > 0 &&
-                Character.isJavaIdentifierStart(key.charAt(0));
-
-            for (int i = 1; isValid && i < key.length(); i++) {
-                isValid = Character.isJavaIdentifierPart(key.charAt(i));
-            }
-
-            if (isValid) {
-              beans.put(key, dictionary.get(key));
-            }
-        }
-    }
-
-    /**
-     * Do the work.
-     *
-     * @exception BuildException if someting goes wrong with the build
-     */
-    public void execute() throws BuildException {
-        try {
-            addBeans(project.getProperties());
-            addBeans(project.getUserProperties());
-            addBeans(project.getTargets());
-            addBeans(project.getReferences());
-
-            beans.put("project", getProject());
-
-            beans.put("self", this);
-
-            BSFManager manager = new BSFManager ();
-
-            for (Enumeration e = beans.keys() ; e.hasMoreElements() ;) {
-                String key = (String) e.nextElement();
-                Object value = beans.get(key);
-                manager.declareBean(key, value, value.getClass());
-            }
-
-            // execute the script
-            manager.exec(language, "<ANT>", 0, 0, script);
-        } catch (BSFException be) {
-            Throwable t = be;
-            Throwable te = be.getTargetException();
-            if (te != null) {
-                if  (te instanceof BuildException) {
-                    throw (BuildException) te;
-                } else {
-                    t = te;
-                }
-            }
-            throw new BuildException(t);
-        }
-    }
-
-    /**
-     * Defines the language (required).
-     *
-     * @param msg Sets the value for the script variable.
-     */
-    public void setLanguage(String language) {
-        this.language = language;
-    }
-
-    /**
-     * Load the script from an external file 
-     *
-     * @param msg Sets the value for the script variable.
-     */
-    public void setSrc(String fileName) {
-        File file = new File(fileName);
-        if (!file.exists()) { 
-            throw new BuildException("file " + fileName + " not found.");
-        }
-
-        int count = (int) file.length();
-        byte data[] = new byte[count];
-
-        try {
-            FileInputStream inStream = new FileInputStream(file);
-            inStream.read(data);
-            inStream.close();
-        } catch (IOException e) {
-            throw new BuildException(e);
-        }
-        
-        script += new String(data);
-    }
-
-    /**
-     * Defines the script.
-     *
-     * @param msg Sets the value for the script variable.
-     */
-    public void addText(String text) {
-        this.script += text;
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/StyleBook.java b/src/main/org/apache/tools/ant/taskdefs/optional/StyleBook.java
deleted file mode 100644
index be7d104..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/StyleBook.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional;
-
-import java.io.File;
-import org.apache.tools.ant.BuildException;
-
-
-import org.apache.tools.ant.taskdefs.Java;
-
-/**
- * Basic task for apache stylebook.
- *
- * @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
- * @author <a href="mailto:marcus.boerger@post.rwth-aachen.de">Marcus
- *      B&ouml;rger</a>
- */
-public class StyleBook
-     extends Java {
-    protected File m_targetDirectory;
-    protected File m_skinDirectory;
-    protected String m_loaderConfig;
-    protected File m_book;
-
-
-    public StyleBook() {
-        setClassname("org.apache.stylebook.StyleBook");
-        setFork(true);
-        setFailonerror(true);
-    }
-
-
-    public void setBook(final File book) {
-        m_book = book;
-    }
-
-
-    public void setSkinDirectory(final File skinDirectory) {
-        m_skinDirectory = skinDirectory;
-    }
-
-
-    public void setTargetDirectory(final File targetDirectory) {
-        m_targetDirectory = targetDirectory;
-    }
-
-
-    public void setLoaderConfig(final String loaderConfig) {
-        m_loaderConfig = loaderConfig;
-    }
-
-
-    public void execute()
-         throws BuildException {
-
-        if (null == m_targetDirectory) {
-            throw new BuildException("TargetDirectory attribute not set.");
-        }
-
-        if (null == m_skinDirectory) {
-            throw new BuildException("SkinDirectory attribute not set.");
-        }
-
-        if (null == m_book) {
-            throw new BuildException("book attribute not set.");
-        }
-
-        createArg().setValue("targetDirectory=" + m_targetDirectory);
-        createArg().setValue(m_book.toString());
-        createArg().setValue(m_skinDirectory.toString());
-        if (null != m_loaderConfig) {
-            createArg().setValue("loaderConfig=" + m_loaderConfig);
-        }
-
-        super.execute();
-    }
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/Test.java b/src/main/org/apache/tools/ant/taskdefs/optional/Test.java
deleted file mode 100644
index 2469f90..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/Test.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000,2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.taskdefs.Java;
-import java.util.Vector;
-
-/**
- * @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
- */
-public class Test extends Java {
-
-    protected Vector m_tests = new Vector();
-
-
-    protected static final class TestletEntry {
-
-        protected String m_testname = "";
-
-
-        public void addText(final String testname) {
-            m_testname += testname;
-        }
-
-
-        public String toString() {
-            return m_testname;
-        }
-    }
-
-
-    public Test() {
-        setClassname("org.apache.testlet.engine.TextTestEngine");
-    }
-
-
-    public TestletEntry createTestlet() {
-        final TestletEntry entry = new TestletEntry();
-
-        m_tests.addElement(entry);
-        return entry;
-    }
-
-
-    public void setShowSuccess(final boolean showSuccess) {
-        createArg().setValue("-s=" + showSuccess);
-    }
-
-
-    public void setShowBanner(final String showBanner) {
-        createArg().setValue("-b=" + showBanner);
-    }
-
-
-    public void setShowTrace(final boolean showTrace) {
-        createArg().setValue("-t=" + showTrace);
-    }
-
-
-    public void setForceShowTrace(final boolean forceShowTrace) {
-        createArg().setValue("-f=" + forceShowTrace);
-    }
-
-
-    public void execute()
-         throws BuildException {
-
-        final int size = m_tests.size();
-
-        for (int i = 0; i < size; i++) {
-            createArg().setValue(m_tests.elementAt(i).toString());
-        }
-
-        super.execute();
-    }
-}
-
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/TraXLiaison.java b/src/main/org/apache/tools/ant/taskdefs/optional/TraXLiaison.java
deleted file mode 100644
index 18c20a8..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/TraXLiaison.java
+++ /dev/null
@@ -1,269 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.taskdefs.XSLTLiaison;
-import org.apache.tools.ant.taskdefs.XSLTLoggerAware;
-import org.apache.tools.ant.taskdefs.XSLTLogger;
-
-import org.xml.sax.InputSource;
-import org.xml.sax.EntityResolver;
-import org.xml.sax.XMLReader;
-
-import javax.xml.parsers.SAXParserFactory;
-
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerException;
-import javax.xml.transform.Templates;
-
-import javax.xml.transform.ErrorListener;
-import javax.xml.transform.stream.StreamResult;
-import javax.xml.transform.stream.StreamSource;
-import javax.xml.transform.OutputKeys;
-import javax.xml.transform.Source;
-
-import javax.xml.transform.sax.SAXSource;
-
-/**
- * Concrete liaison for XSLT processor implementing TraX. (ie JAXP 1.1)
- *
- * @author <a href="mailto:rubys@us.ibm.com">Sam Ruby</a>
- * @author <a href="mailto:dims@yahoo.com">Davanum Srinivas</a>
- * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
- * @since Ant 1.3
- */
-public class TraXLiaison implements XSLTLiaison, ErrorListener, XSLTLoggerAware {
-
-    /** The trax TransformerFactory */
-    private TransformerFactory tfactory = null;
-
-    /** stylesheet stream, close it asap */
-    private FileInputStream xslStream = null;
-
-    /** Stylesheet template */
-    private Templates templates = null;
-
-    /** transformer */
-    private Transformer transformer = null;
-
-    private XSLTLogger logger;
-    
-    /** possible resolver for publicIds */
-    private EntityResolver resolver;
-
-    public TraXLiaison() throws Exception {
-        tfactory = TransformerFactory.newInstance();
-        tfactory.setErrorListener(this);
-    }
-
-//------------------- IMPORTANT
-    // 1) Don't use the StreamSource(File) ctor. It won't work with
-    // xalan prior to 2.2 because of systemid bugs.
-
-    // 2) Use a stream so that you can close it yourself quickly
-    // and avoid keeping the handle until the object is garbaged.
-    // (always keep control), otherwise you won't be able to delete
-    // the file quickly on windows.
-
-    // 3) Always set the systemid to the source for imports, includes...
-    // in xsl and xml...
-
-    public void setStylesheet(File stylesheet) throws Exception {
-        xslStream = new FileInputStream(stylesheet);
-        StreamSource src = new StreamSource(xslStream);
-        src.setSystemId(getSystemId(stylesheet));
-        templates = tfactory.newTemplates(src);
-        transformer = templates.newTransformer();
-        transformer.setErrorListener(this);
-    }
-
-    public void transform(File infile, File outfile) throws Exception {
-        FileInputStream fis = null;
-        FileOutputStream fos = null;
-        try {
-            fis = new FileInputStream(infile);
-            fos = new FileOutputStream(outfile);
-            // FIXME: need to use a SAXSource as the source for the transform
-            // so we can plug in our own entity resolver
-            Source src = null;
-            if (resolver != null) {
-                if (tfactory.getFeature(SAXSource.FEATURE)) {
-                    SAXParserFactory spFactory = SAXParserFactory.newInstance();
-                    spFactory.setNamespaceAware(true); 
-                    XMLReader reader = spFactory.newSAXParser().getXMLReader();
-                    reader.setEntityResolver(resolver);
-                    src = new SAXSource(reader, new InputSource(fis));
-                } else {
-                    throw new IllegalStateException("xcatalog specified, but " +
-                        "parser doesn't support SAX");
-                }
-            } else {
-                src = new StreamSource(fis);
-            }
-            src.setSystemId(getSystemId(infile));
-            StreamResult res = new StreamResult(fos);
-            // not sure what could be the need of this...
-            res.setSystemId(getSystemId(outfile));
-
-            transformer.transform(src, res);
-        } finally {
-            // make sure to close all handles, otherwise the garbage
-            // collector will close them...whenever possible and
-            // Windows may complain about not being able to delete files.
-            try {
-                if (xslStream != null){
-                    xslStream.close();
-                }
-            } catch (IOException ignored){}
-            try {
-                if (fis != null){
-                    fis.close();
-                }
-            } catch (IOException ignored){}
-            try {
-                if (fos != null){
-                    fos.close();
-                }
-            } catch (IOException ignored){}
-        }
-    }
-
-    // make sure that the systemid is made of '/' and not '\' otherwise
-    // crimson will complain that it cannot resolve relative entities
-    // because it grabs the base uri via lastIndexOf('/') without
-    // making sure it is really a /'ed path
-    protected String getSystemId(File file){
-        String path = file.getAbsolutePath();
-        path = path.replace('\\', '/');
-
-        // on Windows, use 'file:///'
-        if (File.separatorChar == '\\') {
-            return FILE_PROTOCOL_PREFIX + "/" + path;
-        }
-        // Unix, use 'file://'
-        return FILE_PROTOCOL_PREFIX + path;
-    }
-
-    public void addParam(String name, String value){
-        transformer.setParameter(name, value);
-    }
-
-    public void setOutputtype(String type) throws Exception {
-        transformer.setOutputProperty(OutputKeys.METHOD, type);
-    }
-
-    public void setLogger(XSLTLogger l) {
-        logger = l;
-    }
-    
-    public void error(TransformerException e)  {
-        logError(e, "Error");
-    }
-    
-    public void fatalError(TransformerException e)  {
-        logError(e, "Fatal Error");
-        throw new BuildException("Fatal error during transformation", e);
-    }
-    
-    public void warning(TransformerException e)  {
-        logError(e, "Warning");
-    }
-    
-    private void logError(TransformerException e, String type) {
-        if (logger == null) {
-            return;
-        }
-        
-        StringBuffer msg = new StringBuffer();
-        if (e.getLocator() != null) {
-            if (e.getLocator().getSystemId() != null) {
-                String url = e.getLocator().getSystemId();
-                if (url.startsWith("file:///")) {
-                  url = url.substring(8);
-                }
-                msg.append(url);
-            } else {
-                msg.append("Unknown file");
-            }
-            if (e.getLocator().getLineNumber() != -1) {                          
-                msg.append(":" + e.getLocator().getLineNumber());
-                if (e.getLocator().getColumnNumber() != -1) {
-                    msg.append(":" + e.getLocator().getColumnNumber());
-                }
-            }
-        }
-        msg.append(": " + type + "! ");
-        msg.append(e.getMessage());
-        if (e.getCause() != null) {
-            msg.append(" Cause: " + e.getCause());
-        }
-
-        logger.log(msg.toString());
-    }
-
-    /** Set the class to resolve entities during the transformation
-     */
-    public void setEntityResolver(EntityResolver aResolver) throws Exception {
-        resolver = aResolver;
-    }
-    
-} //-- TraXLiaison
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/XMLValidateTask.java b/src/main/org/apache/tools/ant/taskdefs/optional/XMLValidateTask.java
deleted file mode 100644
index 63c1762..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/XMLValidateTask.java
+++ /dev/null
@@ -1,481 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional;
-
-import java.io.File;
-import java.io.FileReader;
-import java.io.IOException;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.InputStream;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.Vector;
-import java.util.Hashtable;
-import java.util.Enumeration;
-import org.apache.tools.ant.AntClassLoader;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.DirectoryScanner;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.types.FileSet;
-import org.apache.tools.ant.types.Path;
-import org.apache.tools.ant.types.Reference;
-import org.apache.tools.ant.types.XMLCatalog;
-import org.apache.tools.ant.types.DTDLocation;
-import org.apache.tools.ant.util.JAXPUtils;
-import org.xml.sax.XMLReader;
-import org.xml.sax.EntityResolver;
-import org.xml.sax.Parser;
-import org.xml.sax.ErrorHandler;
-import org.xml.sax.SAXNotRecognizedException;
-import org.xml.sax.SAXNotSupportedException;
-import org.xml.sax.InputSource;
-import org.xml.sax.SAXException;
-import org.xml.sax.SAXParseException;
-import org.xml.sax.helpers.ParserAdapter;
-
-/**
- * The <code>XMLValidateTask</code> checks that an XML document is valid,
- * with a SAX validating parser.
- * @author Raphael Pierquin <a href="mailto:raphael.pierquin@agisphere.com">raphael.pierquin@agisphere.com</a>
- */
-public class XMLValidateTask extends Task {
-
-    protected static String INIT_FAILED_MSG = 
-        "Could not start xml validation: ";
-
-    // ant task properties
-    // defaults
-    protected boolean failOnError = true;
-    protected boolean warn = true;
-    protected boolean lenient = false;
-    protected String  readerClassName = null;
-
-    protected File file = null; // file to be validated
-    protected Vector filesets = new Vector(); // sets of file to be validated
-    protected Path classpath;
-
-
-    /**
-     * the parser is viewed as a SAX2 XMLReader. If a SAX1 parser is specified,
-     * it's wrapped in an adapter that make it behave as a XMLReader.
-     * a more 'standard' way of doing this would be to use the JAXP1.1 SAXParser
-     * interface.
-     */
-    protected XMLReader xmlReader = null; // XMLReader used to validation process
-    protected ValidatorErrorHandler errorHandler
-        = new ValidatorErrorHandler(); // to report sax parsing errors
-    protected Hashtable features = new Hashtable();
-
-    private XMLCatalog xmlCatalog = new XMLCatalog();
-
-    /**
-     * Specify how parser error are to be handled.
-     * <p>
-     * If set to <code>true</code> (default), throw a buildException if the parser yields an error.
-     */
-    public void setFailOnError(boolean fail) {
-
-        failOnError = fail;
-    }
-
-    /**
-     * Specify how parser error are to be handled.
-     * <p>
-     * If set to <code>true</true> (default), log a warn message for each SAX warn event.
-     */
-    public void setWarn(boolean bool) {
-
-        warn = bool;
-    }
-
-    /**
-     * Specify whether the parser should be validating. Default is <code>true</code>.
-     * <p>
-     * If set to false, the validation will fail only if the parsed document is not well formed XML.
-     * <p>
-     * this option is ignored if the specified class with {@link #setClassName(String)} is not a SAX2
-     * XMLReader.
-     */
-    public void setLenient(boolean bool) {
-
-        lenient = bool;
-    }
-
-    /**
-     * Specify the class name of the SAX parser to be used. (optional)
-     * @param className should be an implementation of SAX2 <code>org.xml.sax.XMLReader</code>
-     * or SAX2 <code>org.xml.sax.Parser</code>.
-     * <p> if className is an implementation of <code>org.xml.sax.Parser</code>, {@link #setLenient(boolean)},
-     * will be ignored.
-     * <p> if not set, the default {@link #DEFAULT_XML_READER_CLASSNAME} will be used.
-     * @see org.xml.sax.XMLReader
-     * @see org.xml.sax.Parser
-     */
-    public void setClassName(String className) {
-
-        readerClassName = className;
-    }
-
-
-    /**
-     * Specify the classpath to be searched to load the parser (optional)
-     */
-    public void setClasspath(Path classpath) {
-
-        if (this.classpath == null) {
-            this.classpath = classpath;
-        } else {
-            this.classpath.append(classpath);
-        }
-    }
-
-    /**
-     * @see #setClasspath
-     */
-    public Path createClasspath() {
-        if (this.classpath == null) {
-            this.classpath = new Path(project);
-        }
-        return this.classpath.createPath();
-    }
-
-    /**
-     * @see #setClasspath
-     */
-    public void setClasspathRef(Reference r) {
-        createClasspath().setRefid(r);
-    }
-
-    /**
-     * specifify the file to be checked
-     */
-    public void setFile(File file) {
-        this.file = file;
-    }
-
-    /**
-     *
-     */
-    public void addConfiguredXMLCatalog(XMLCatalog catalog) {
-        xmlCatalog.addConfiguredXMLCatalog(catalog);
-    }
-
-    /**
-     * specifify a set of file to be checked
-     */
-    public void addFileset(FileSet set) {
-        filesets.addElement(set);
-    }
-
-    public void init() throws BuildException {
-        super.init();
-        xmlCatalog.setProject(project);
-    }
-
-    /**
-     * Create a DTD location record. This stores the location of a DTD. The DTD is identified
-     * by its public Id.
-     */
-    public DTDLocation createDTD() {
-        DTDLocation dtdLocation = new DTDLocation();
-        xmlCatalog.addDTD(dtdLocation);
-        return dtdLocation;
-    }
-
-    protected EntityResolver getEntityResolver() {
-        return xmlCatalog;
-    }
-
-    public void execute() throws BuildException {
-
-        int fileProcessed = 0;
-        if (file == null && (filesets.size() == 0)) {
-            throw new BuildException("Specify at least one source - a file or a fileset.");
-        }
-
-        initValidator();
-
-        if (file != null) {
-            if (file.exists() && file.canRead() && file.isFile())  {
-                doValidate(file);
-                fileProcessed++;
-            } else {
-                String errorMsg = "File " + file + " cannot be read";
-                if (failOnError) {
-                    throw new BuildException(errorMsg);
-                } else {
-                    log(errorMsg, Project.MSG_ERR);
-                }
-            }
-        }
-
-        for (int i = 0; i < filesets.size(); i++) {
-
-            FileSet fs = (FileSet) filesets.elementAt(i);
-            DirectoryScanner ds = fs.getDirectoryScanner(project);
-            String[] files = ds.getIncludedFiles();
-
-            for (int j = 0; j < files.length ; j++)  {
-                File srcFile = new File(fs.getDir(project), files[j]);
-                doValidate(srcFile);
-                fileProcessed++;
-            }
-        }
-        log(fileProcessed + " file(s) have been successfully validated.");
-    }
-
-    /**
-     * init the parser :
-     * load the parser class, and set features if necessary
-     */
-    private void initValidator() {
-
-        Object reader = null;
-        if (readerClassName == null) {
-            try {
-                reader = JAXPUtils.getXMLReader();
-            } catch (BuildException exc) {
-                reader = JAXPUtils.getParser();
-            }
-        } else {
-        
-            Class readerClass = null;
-            try {
-                // load the parser class
-                if (classpath != null) {
-                    AntClassLoader loader = new AntClassLoader(project, classpath);
-                    readerClass = loader.loadClass(readerClassName);
-                    AntClassLoader.initializeClass(readerClass);
-                } else {
-                    readerClass = Class.forName(readerClassName);
-                }
-
-                reader = readerClass.newInstance();
-            } catch (ClassNotFoundException e) {
-                throw new BuildException(INIT_FAILED_MSG + readerClassName, e);
-            } catch (InstantiationException e) {
-                throw new BuildException(INIT_FAILED_MSG + readerClassName, e);
-            } catch (IllegalAccessException e) {
-                throw new BuildException(INIT_FAILED_MSG + readerClassName, e);
-            }
-        }
-
-        // then check it implements XMLReader
-        if (reader instanceof XMLReader) {
-            xmlReader = (XMLReader) reader; 
-            log("Using SAX2 reader " + reader.getClass().getName(), 
-                Project.MSG_VERBOSE);
-        } else {
-
-            // see if it is a SAX1 Parser
-            if (reader instanceof Parser) {
-                xmlReader = new ParserAdapter((Parser) reader);
-                log("Using SAX1 parser " + reader.getClass().getName(), 
-                    Project.MSG_VERBOSE);
-            }  else {
-                throw new BuildException(INIT_FAILED_MSG + readerClassName
-                                         + " implements nor SAX1 Parser nor SAX2 XMLReader.");
-            }
-        }
-
-        xmlReader.setEntityResolver(getEntityResolver());
-        xmlReader.setErrorHandler(errorHandler);
-
-        if (!(xmlReader instanceof ParserAdapter)) {
-            // turn validation on
-            if (!lenient) {
-                boolean ok = setFeature("http://xml.org/sax/features/validation", true, true);
-                if (!ok) {
-                    throw new BuildException(INIT_FAILED_MSG
-                                             + readerClassName
-                                             + " doesn't provide validation");
-                }
-            }
-            // set other features
-            Enumeration enum = features.keys();
-            while (enum.hasMoreElements()) {
-                String featureId = (String) enum.nextElement();
-                setFeature(featureId, ((Boolean) features.get(featureId)).booleanValue(), true);
-            }
-        }
-    }
-
-    /*
-     * set a feature on the parser.
-     * TODO: find a way to set any feature from build.xml
-     */
-    private boolean setFeature(String feature, boolean value, boolean warn) {
-
-        boolean  toReturn = false;
-        try {
-            xmlReader.setFeature(feature, value);
-            toReturn = true;
-        } catch (SAXNotRecognizedException e) {
-            if (warn) {
-                log("Could not set feature '"
-                    + feature
-                    + "' because the parser doesn't recognize it",
-                    Project.MSG_WARN);
-            }
-        } catch (SAXNotSupportedException  e) {
-            if (warn) {
-                log("Could not set feature '"
-                    + feature
-                    + "' because the parser doesn't support it",
-                    Project.MSG_WARN);
-            }
-        }
-        return toReturn;
-    }
-    /*
-     * parse the file
-     */
-    private void doValidate(File afile) {
-        try {
-            log("Validating " + afile.getName() + "... ", Project.MSG_VERBOSE);
-            errorHandler.init(afile);
-            InputSource is = new InputSource(new FileReader(afile));
-            String uri = "file:" + afile.getAbsolutePath().replace('\\', '/');
-            for (int index = uri.indexOf('#'); index != -1;
-                 index = uri.indexOf('#')) {
-                uri = uri.substring(0, index) + "%23" 
-                    + uri.substring(index + 1);
-            }
-            is.setSystemId(uri);
-            xmlReader.parse(is);
-        } catch (SAXException ex) {
-            if (failOnError) {
-                throw new BuildException("Could not validate document " 
-                    + afile);
-            }
-        } catch (IOException ex) {
-            throw new BuildException("Could not validate document " + afile, 
-                ex);
-        }
-
-        if (errorHandler.getFailure()) {
-            if (failOnError) {
-                throw new BuildException(afile + " is not a valid XML document.");
-            } else {
-                log(afile + " is not a valid XML document", Project.MSG_ERR);
-            }
-        }
-    }
-
-    /*
-     * ValidatorErrorHandler role :
-     * <ul>
-     * <li> log SAX parse exceptions,
-     * <li> remember if an error occured
-     * </ul>
-     */
-    protected class ValidatorErrorHandler implements ErrorHandler {
-
-        protected File currentFile = null;
-        protected String lastErrorMessage = null;
-        protected boolean failed = false;
-
-        public void init(File file) {
-            currentFile = file;
-            failed = false;
-        }
-
-        // did an error happen during last parsing ?
-        public boolean getFailure() {
-
-            return failed;
-        }
-
-        public void fatalError(SAXParseException exception) {
-            failed = true;
-            doLog(exception, Project.MSG_ERR);
-        }
-
-        public void error(SAXParseException exception) {
-            failed = true;
-            doLog(exception, Project.MSG_ERR);
-        }
-
-        public void warning(SAXParseException exception) {
-            // depending on implementation, XMLReader can yield hips of warning,
-            // only output then if user explicitely asked for it
-            if (warn) {
-                doLog(exception, Project.MSG_WARN);
-            }
-        }
-
-        private void doLog(SAXParseException e, int logLevel) {
-
-            log(getMessage(e), logLevel);
-        }
-
-        private String getMessage(SAXParseException e) {
-            String sysID = e.getSystemId();
-            if (sysID != null) {
-                try {
-                    int line = e.getLineNumber();
-                    int col = e.getColumnNumber();
-                    return new URL(sysID).getFile() +
-                        (line == -1 ? "" : (":" + line +
-                                            (col == -1 ? "" : (":" + col)))) +
-                        ": " + e.getMessage();
-                } catch (MalformedURLException mfue) {
-                }
-            }
-            return e.getMessage();
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/XalanLiaison.java b/src/main/org/apache/tools/ant/taskdefs/optional/XalanLiaison.java
deleted file mode 100644
index 589dafe..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/XalanLiaison.java
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.taskdefs.XSLTLiaison;
-
-import org.apache.xalan.xslt.XSLTProcessorFactory;
-import org.apache.xalan.xslt.XSLTProcessor;
-import org.apache.xalan.xslt.XSLTInputSource;
-import org.apache.xalan.xslt.XSLTResultTarget;
-
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-
-/**
- * Concrete liaison for Xalan 1.x API.
- *
- * @author <a href="mailto:rubys@us.ibm.com">Sam Ruby</a>
- * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
- * @since Ant 1.1
- */
-public class XalanLiaison implements XSLTLiaison {
-
-    protected XSLTProcessor processor;
-    protected File stylesheet;
-
-    public XalanLiaison() throws Exception {
-        processor = XSLTProcessorFactory.getProcessor();
-    }
-
-    public void setStylesheet(File stylesheet) throws Exception {
-        this.stylesheet = stylesheet;
-    }
-
-    public void transform(File infile, File outfile) throws Exception {
-        FileInputStream fis = null;
-        FileOutputStream fos = null;
-        FileInputStream xslStream = null;
-        try {
-            xslStream = new FileInputStream(stylesheet);
-            fis = new FileInputStream(infile);
-            fos = new FileOutputStream(outfile);
-            // systemid such as file:/// + getAbsolutePath() are considered
-            // invalid here...
-            XSLTInputSource xslSheet = new XSLTInputSource(xslStream);
-            xslSheet.setSystemId(stylesheet.getAbsolutePath());
-            XSLTInputSource src = new XSLTInputSource(fis);
-            src.setSystemId(infile.getAbsolutePath());
-            XSLTResultTarget res = new XSLTResultTarget(fos);
-            processor.process(src, xslSheet, res);
-        } finally {
-            // make sure to close all handles, otherwise the garbage
-            // collector will close them...whenever possible and
-            // Windows may complain about not being able to delete files.
-            try {
-                if (xslStream != null){
-                    xslStream.close();
-                }
-            } catch (IOException ignored){}
-            try {
-                if (fis != null){
-                    fis.close();
-                }
-            } catch (IOException ignored){}
-            try {
-                if (fos != null){
-                    fos.close();
-                }
-            } catch (IOException ignored){}
-        }
-    }
-
-    public void addParam(String name, String value){
-        processor.setStylesheetParam(name, value);
-    }
-
-    public void setOutputtype(String type) throws Exception {
-        if (!type.equals("xml")) { 
-            throw new BuildException("Unsupported output type: " + type);
-        }
-    }
-} //-- XalanLiaison
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/XslpLiaison.java b/src/main/org/apache/tools/ant/taskdefs/optional/XslpLiaison.java
deleted file mode 100644
index f980604..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/XslpLiaison.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional;
-
-import com.kvisco.xsl.XSLProcessor;
-import com.kvisco.xsl.XSLReader;
-import com.kvisco.xsl.XSLStylesheet;
-import org.apache.tools.ant.taskdefs.XSLTLiaison;
-import org.apache.tools.ant.BuildException;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.OutputStreamWriter;
-
-/**
- * Concrete liaison for XSLP
- *
- * @author <a href="mailto:rubys@us.ibm.com">Sam Ruby</a>
- * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
- * @since Ant 1.1
- */
-public class XslpLiaison implements XSLTLiaison {
-
-    protected XSLProcessor processor;
-    protected XSLStylesheet xslSheet;
-
-    public XslpLiaison() {
-        processor = new XSLProcessor();
-        // uh ?! I'm forced to do that otherwise a setProperty crashes
-        // with NPE !  I don't understand why the property map is static
-        // though...  how can we do multithreading w/ multiple identical
-        // parameters ?
-        processor.getProperty("dummy-to-init-properties-map");
-    }
-
-    public void setStylesheet(File fileName) throws Exception {
-        XSLReader xslReader = new XSLReader();
-        // a file:/// + getAbsolutePath() does not work here
-        // it is really the pathname
-        xslSheet = xslReader.read(fileName.getAbsolutePath());
-    }
-    
-    public void transform(File infile, File outfile) throws Exception {
-        FileOutputStream fos = new FileOutputStream(outfile);
-        // XSLP does not support encoding...we're in hot water.
-        OutputStreamWriter out = new OutputStreamWriter(fos, "UTF8");
-        processor.process(infile.getAbsolutePath(), xslSheet, out);
-    }
-
-    public void addParam(String name, String expression){
-        processor.setProperty(name, expression);
-    }
-
-    public void setOutputtype(String type) throws Exception {
-        if (!type.equals("xml")) { 
-            throw new BuildException("Unsupported output type: " + type);
-        }
-    }
-
-} //-- XSLPLiaison
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/ccm/CCMCheck.java b/src/main/org/apache/tools/ant/taskdefs/optional/ccm/CCMCheck.java
deleted file mode 100644
index 8ca4cb8..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/ccm/CCMCheck.java
+++ /dev/null
@@ -1,184 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.ccm;
-
-import java.io.File;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.types.Commandline;
-
-/**
- * Class common to all check commands (checkout, checkin,checkin default task);
- * @author Benoit Moussaud benoit.moussaud@criltelecom.com
- */
-public class CCMCheck extends Continuus {
-
-    private File file = null;
-    private String comment = null;
-    private String task = null;
-
-    public CCMCheck() {
-        super();
-    }
-
-    /**
-     * Get the value of file.
-     * @return value of file.
-     */
-    public File getFile() {
-        return file;
-    }
-
-    /**
-     * Set the value of file.
-     * @param v  Value to assign to file.
-     */
-    public void setFile(File v) {
-        this.file = v;
-    }
-
-    /**
-     * Get the value of comment.
-     * @return value of comment.
-     */
-    public String getComment() {
-        return comment;
-    }
-
-    /**
-     * Set the value of comment.
-     * @param v  Value to assign to comment.
-     */
-    public void setComment(String v) {
-        this.comment = v;
-    }
-
-
-    /**
-     * Get the value of task.
-     * @return value of task.
-     */
-    public String getTask() {
-        return task;
-    }
-
-    /**
-     * Set the value of task.
-     * @param v  Value to assign to task.
-     */
-    public void setTask(String v) {
-        this.task = v;
-    }
-
-
-    /**
-     * Executes the task.
-     * <p>
-     * Builds a command line to execute ccm and then calls Exec's run method
-     * to execute the command line.
-     * </p>
-     */
-    public void execute() throws BuildException {
-        Commandline commandLine = new Commandline();
-        Project aProj = getProject();
-        int result = 0;
-
-        // build the command line from what we got the format is
-        // ccm co /t .. files
-        // as specified in the CLEARTOOL.EXE help
-        commandLine.setExecutable(getCcmCommand());
-        commandLine.createArgument().setValue(getCcmAction());
-
-        checkOptions(commandLine);
-
-        result = run(commandLine);
-        if (result != 0) {
-            String msg = "Failed executing: " + commandLine.toString();
-            throw new BuildException(msg, location);
-        }
-    }
-
-
-    /**
-     * Check the command line options.
-     */
-    private void checkOptions(Commandline cmd) {
-        if (getComment() != null) {
-            cmd.createArgument().setValue(FLAG_COMMENT);
-            cmd.createArgument().setValue(getComment());
-        }
-
-        if (getTask() != null) {
-            cmd.createArgument().setValue(FLAG_TASK);
-            cmd.createArgument().setValue(getTask());
-        } // end of if ()
-
-        if (getFile() != null) {
-            cmd.createArgument().setValue(file.getAbsolutePath());
-        } // end of if ()
-    }
-
-    /**
-     * -comment flag -- comment to attach to the file
-     */
-    public static final String FLAG_COMMENT = "/comment";
-
-    /**
-     *  -task flag -- associate checckout task with task
-     */
-    public static final String FLAG_TASK = "/task";
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/ccm/CCMCheckin.java b/src/main/org/apache/tools/ant/taskdefs/optional/ccm/CCMCheckin.java
deleted file mode 100644
index b50d1c4..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/ccm/CCMCheckin.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.ccm;
-
-import java.util.Date;
-
-/**
- * Task to perform Checkin command to Continuus
- * @author Benoit Moussaud benoit.moussaud@criltelecom.com
- */
-public class CCMCheckin extends CCMCheck {
-
-    public CCMCheckin() {
-        super();
-        setCcmAction(COMMAND_CHECKIN);
-        setComment("Checkin " + new Date());
-    }
-
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/ccm/CCMCheckinDefault.java b/src/main/org/apache/tools/ant/taskdefs/optional/ccm/CCMCheckinDefault.java
deleted file mode 100644
index 98deb82..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/ccm/CCMCheckinDefault.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.ccm;
-
-/**
- * Task to perform Checkin Default task command to Continuus
- * @author Benoit Moussaud benoit.moussaud@criltelecom.com
- *
- * @ant.task name="ccmcheckintask" category="scm"
- */
-public class CCMCheckinDefault extends CCMCheck {
-
-    public CCMCheckinDefault() {
-        super();
-        setCcmAction(COMMAND_CHECKIN);
-        setTask(DEFAULT_TASK);
-    }
-
-    public static final String DEFAULT_TASK = "default";
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/ccm/CCMCheckout.java b/src/main/org/apache/tools/ant/taskdefs/optional/ccm/CCMCheckout.java
deleted file mode 100644
index bcfb722..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/ccm/CCMCheckout.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.ccm;
-
-/**
- * Task to perform Checkout command to Continuus
- * @author Benoit Moussaud benoit.moussaud@criltelecom.com
- */
-public class CCMCheckout extends CCMCheck {
-
-    public CCMCheckout() {
-        super();
-        setCcmAction(COMMAND_CHECKOUT);
-    }
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/ccm/CCMCreateTask.java b/src/main/org/apache/tools/ant/taskdefs/optional/ccm/CCMCreateTask.java
deleted file mode 100644
index 92613d0..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/ccm/CCMCreateTask.java
+++ /dev/null
@@ -1,361 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.ccm;
-
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.OutputStream;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.taskdefs.ExecuteStreamHandler;
-import org.apache.tools.ant.types.Commandline;
-
-
-/**
- * Task allows to create new ccm task and set it as the default
- * @author Benoit Moussaud benoit.moussaud@criltelecom.com
- *
- * @ant.task name="ccmcreatetask" category="scm"
- */
-public class CCMCreateTask extends Continuus implements ExecuteStreamHandler {
-
-    private String comment = null;
-    private String platform = null;
-    private String resolver = null;
-    private String release = null;
-    private String subSystem = null;
-    private String task = null;
-
-    public CCMCreateTask() {
-        super();
-        setCcmAction(COMMAND_CREATE_TASK);
-    }
-
-
-    /**
-     * Executes the task.
-     * <p>
-     * Builds a command line to execute ccm and then calls Exec's run method
-     * to execute the command line.
-     * </p>
-     */
-    public void execute() throws BuildException {
-        Commandline commandLine = new Commandline();
-        Project aProj = getProject();
-        int result = 0;
-
-        // build the command line from what we got the format
-        // as specified in the CCM.EXE help
-        commandLine.setExecutable(getCcmCommand());
-        commandLine.createArgument().setValue(getCcmAction());
-
-        checkOptions(commandLine);
-
-        result = run(commandLine, this);
-        if (result != 0) {
-            String msg = "Failed executing: " + commandLine.toString();
-            throw new BuildException(msg, location);
-        }
-
-        //create task ok, set this task as the default one
-        Commandline commandLine2 = new Commandline();
-        commandLine2.setExecutable(getCcmCommand());
-        commandLine2.createArgument().setValue(COMMAND_DEFAULT_TASK);
-        commandLine2.createArgument().setValue(getTask());
-
-        log(commandLine.describeCommand(), Project.MSG_DEBUG);
-
-        result = run(commandLine2);
-        if (result != 0) {
-            String msg = "Failed executing: " + commandLine2.toString();
-            throw new BuildException(msg, location);
-        }
-
-    }
-
-
-    /**
-     * Check the command line options.
-     */
-    private void checkOptions(Commandline cmd) {
-        if (getComment() != null) {
-            cmd.createArgument().setValue(FLAG_COMMENT);
-            cmd.createArgument().setValue("\"" + getComment() + "\"");
-        }
-
-        if (getPlatform() != null) {
-            cmd.createArgument().setValue(FLAG_PLATFORM);
-            cmd.createArgument().setValue(getPlatform());
-        } // end of if ()
-
-        if (getResolver() != null) {
-            cmd.createArgument().setValue(FLAG_RESOLVER);
-            cmd.createArgument().setValue(getResolver());
-        } // end of if ()
-
-        if (getSubSystem() != null) {
-            cmd.createArgument().setValue(FLAG_SUBSYSTEM);
-            cmd.createArgument().setValue("\"" + getSubSystem() + "\"");
-        } // end of if ()
-
-        if (getRelease() != null) {
-            cmd.createArgument().setValue(FLAG_RELEASE);
-            cmd.createArgument().setValue(getRelease());
-        } // end of if ()
-    }
-
-
-    /**
-     * Get the value of comment.
-     * @return value of comment.
-     */
-    public String getComment() {
-        return comment;
-    }
-
-    /**
-     * Set the value of comment.
-     * @param v  Value to assign to comment.
-     */
-    public void setComment(String v) {
-        this.comment = v;
-    }
-
-
-    /**
-     * Get the value of platform.
-     * @return value of platform.
-     */
-    public String getPlatform() {
-        return platform;
-    }
-
-    /**
-     * Set the value of platform.
-     * @param v  Value to assign to platform.
-     */
-    public void setPlatform(String v) {
-        this.platform = v;
-    }
-
-
-    /**
-     * Get the value of resolver.
-     * @return value of resolver.
-     */
-    public String getResolver() {
-        return resolver;
-    }
-
-    /**
-     * Set the value of resolver.
-     * @param v  Value to assign to resolver.
-     */
-    public void setResolver(String v) {
-        this.resolver = v;
-    }
-
-
-    /**
-     * Get the value of release.
-     * @return value of release.
-     */
-    public String getRelease() {
-        return release;
-    }
-
-    /**
-     * Set the value of release.
-     * @param v  Value to assign to release.
-     */
-    public void setRelease(String v) {
-        this.release = v;
-    }
-
-    /**
-     * Get the value of subSystem.
-     * @return value of subSystem.
-     */
-    public String getSubSystem() {
-        return subSystem;
-    }
-
-    /**
-     * Set the value of subSystem.
-     * @param v  Value to assign to subSystem.
-     */
-    public void setSubSystem(String v) {
-        this.subSystem = v;
-    }
-
-
-    /**
-     * Get the value of task.
-     * @return value of task.
-     */
-    public String getTask() {
-        return task;
-    }
-
-    /**
-     * Set the value of task.
-     * @param v  Value to assign to task.
-     */
-    public void setTask(String v) {
-        this.task = v;
-    }
-
-    /**
-     * /comment -- comments associated to the task
-     */
-    public static final String FLAG_COMMENT = "/synopsis";
-
-    /**
-     *  /platform flag -- target platform
-     */
-    public static final String FLAG_PLATFORM = "/plat";
-
-    /**
-     * /resolver flag
-     */
-    public static final String FLAG_RESOLVER = "/resolver";
-
-    /**
-     * /release flag
-     */
-    public static final String FLAG_RELEASE = "/release";
-
-    /**
-     * /release flag
-     */
-    public static final String FLAG_SUBSYSTEM = "/subsystem";
-
-    /**
-     *  -task flag -- associate checckout task with task
-     */
-    public static final String FLAG_TASK = "/task";
-
-
-    // implementation of org.apache.tools.ant.taskdefs.ExecuteStreamHandler interface
-
-    /**
-     *
-     * @exception java.io.IOException
-     */
-    public void start() throws IOException {
-    }
-
-    /**
-     *
-     */
-    public void stop() {
-    }
-
-    /**
-     *
-     * @param param1
-     * @exception java.io.IOException
-     */
-    public void setProcessInputStream(OutputStream param1) throws IOException {
-    }
-
-    /**
-     *
-     * @param param1
-     * @exception java.io.IOException
-     */
-    public void setProcessErrorStream(InputStream is) throws IOException {
-        BufferedReader reader = new BufferedReader(new InputStreamReader(is));
-        String s = reader.readLine();
-        if (s != null) {
-            log("err " + s, Project.MSG_DEBUG);
-        } // end of if ()
-    }
-
-    /**
-     * read the output stream to retrieve the new task number.
-     * @param is InputStream
-     * @exception java.io.IOException
-     */
-    public void setProcessOutputStream(InputStream is) throws IOException {
-
-        String buffer = "";
-        try {
-            BufferedReader reader = new BufferedReader(new InputStreamReader(is));
-            buffer = reader.readLine();
-            if (buffer != null) {
-                log("buffer:" + buffer, Project.MSG_DEBUG);
-                String taskstring = buffer.substring(buffer.indexOf(' ')).trim();
-                taskstring = taskstring.substring(0, taskstring.lastIndexOf(' ')).trim();
-                setTask(taskstring);
-                log("task is " + getTask(), Project.MSG_DEBUG);
-            } // end of if ()
-        } catch (NullPointerException npe) {
-            log("error procession stream , null pointer exception", Project.MSG_ERR);
-            npe.printStackTrace();
-            throw new BuildException(npe.getClass().getName());
-        } catch (Exception e) {
-            log("error procession stream " + e.getMessage(), Project.MSG_ERR);
-            throw new BuildException(e.getMessage());
-        } // end of try-catch
-
-    }
-
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/ccm/CCMReconfigure.java b/src/main/org/apache/tools/ant/taskdefs/optional/ccm/CCMReconfigure.java
deleted file mode 100644
index b8dd917..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/ccm/CCMReconfigure.java
+++ /dev/null
@@ -1,194 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.ccm;
-
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.types.Commandline;
-
-
-/**
- * Task allows to reconfigure a project, recurcively or not
- * @author Benoit Moussaud benoit.moussaud@criltelecom.com
- */
-public class CCMReconfigure extends Continuus {
-
-    private String project = null;
-    private boolean recurse = false;
-    private boolean verbose = false;
-
-    public CCMReconfigure() {
-        super();
-        setCcmAction(COMMAND_RECONFIGURE);
-    }
-
-
-    /**
-     * Executes the task.
-     * <p>
-     * Builds a command line to execute ccm and then calls Exec's run method
-     * to execute the command line.
-     * </p>
-     */
-    public void execute() throws BuildException {
-        Commandline commandLine = new Commandline();
-        Project aProj = getProject();
-        int result = 0;
-
-        // build the command line from what we got the format
-        // as specified in the CCM.EXE help
-        commandLine.setExecutable(getCcmCommand());
-        commandLine.createArgument().setValue(getCcmAction());
-
-        checkOptions(commandLine);
-
-        result = run(commandLine);
-        if (result != 0) {
-            String msg = "Failed executing: " + commandLine.toString();
-            throw new BuildException(msg, location);
-        }
-    }
-
-
-    /**
-     * Check the command line options.
-     */
-    private void checkOptions(Commandline cmd) {
-
-        if (isRecurse() == true) {
-            cmd.createArgument().setValue(FLAG_RECURSE);
-        } // end of if ()
-
-        if (isVerbose() == true) {
-            cmd.createArgument().setValue(FLAG_VERBOSE);
-        } // end of if ()
-
-        if (getCcmProject() != null) {
-            cmd.createArgument().setValue(FLAG_PROJECT);
-            cmd.createArgument().setValue(getCcmProject());
-        }
-
-    }
-
-    /**
-     * Get the value of project.
-     * @return value of project.
-     */
-    public String getCcmProject() {
-        return project;
-    }
-
-    /**
-     * Set the value of project.
-     * @param v  Value to assign to project.
-     */
-    public void setCcmProject(String v) {
-        this.project = v;
-    }
-
-
-    /**
-     * Get the value of recurse.
-     * @return value of recurse.
-     */
-    public boolean isRecurse() {
-        return recurse;
-    }
-
-    /**
-     * Set the value of recurse.
-     * @param v  Value to assign to recurse.
-     */
-    public void setRecurse(boolean v) {
-        this.recurse = v;
-    }
-
-
-    /**
-     * Get the value of verbose.
-     * @return value of verbose.
-     */
-    public boolean isVerbose() {
-        return verbose;
-    }
-
-    /**
-     * Set the value of verbose.
-     * @param v  Value to assign to verbose.
-     */
-    public void setVerbose(boolean v) {
-        this.verbose = v;
-    }
-
-
-    /**
-     * /recurse --
-     */
-    public static final String FLAG_RECURSE = "/recurse";
-
-    /**
-     * /recurse --
-     */
-    public static final String FLAG_VERBOSE = "/verbose";
-
-
-    /**
-     *  /project flag -- target project
-     */
-    public static final String FLAG_PROJECT = "/project";
-
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/ccm/Continuus.java b/src/main/org/apache/tools/ant/taskdefs/optional/ccm/Continuus.java
deleted file mode 100644
index edfef50..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/ccm/Continuus.java
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.ccm;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.taskdefs.Execute;
-import org.apache.tools.ant.taskdefs.ExecuteStreamHandler;
-import org.apache.tools.ant.taskdefs.LogStreamHandler;
-import org.apache.tools.ant.types.Commandline;
-
-
-/**
- * A base class for creating tasks for executing commands on Continuus 5.1.
- * <p>
- * The class extends the  task as it operates by executing the ccm.exe program
- * supplied with Continuus/Synergy. By default the task expects the ccm executable to be
- * in the path,
- * you can override this be specifying the ccmdir attribute.
- * </p>
- *
- * @author Benoit Moussaud benoit.moussaud@criltelecom.com
- */
-public abstract class Continuus extends Task {
-
-    private String ccmDir = "";
-    private String ccmAction = "";
-
-    /**
-     * Get the value of ccmAction.
-     * @return value of ccmAction.
-     */
-    public String getCcmAction() {
-        return ccmAction;
-    }
-
-    /**
-     * Set the value of ccmAction.
-     * @param v  Value to assign to ccmAction.
-     */
-    public void setCcmAction(String v) {
-        this.ccmAction = v;
-    }
-
-
-    /**
-     * Set the directory where the ccm executable is located
-     * @param dir the directory containing the ccm executable
-     */
-    public final void setCcmDir(String dir) {
-        ccmDir = project.translatePath(dir);
-    }
-
-    /**
-     * Builds and returns the command string to execute ccm
-     * @return String containing path to the executable
-     */
-    protected final String getCcmCommand() {
-        String toReturn = ccmDir;
-        if (!toReturn.equals("") && !toReturn.endsWith("/")) {
-            toReturn += "/";
-        }
-
-        toReturn += CCM_EXE;
-
-        return toReturn;
-    }
-
-
-    protected int run(Commandline cmd, ExecuteStreamHandler handler) {
-        try {
-            Execute exe = new Execute(handler);
-            exe.setAntRun(getProject());
-            exe.setWorkingDirectory(getProject().getBaseDir());
-            exe.setCommandline(cmd.getCommandline());
-            return exe.execute();
-        } catch (java.io.IOException e) {
-            throw new BuildException(e, location);
-        }
-    }
-
-    protected int run(Commandline cmd) {
-        return run(cmd, new LogStreamHandler(this, Project.MSG_VERBOSE, Project.MSG_WARN));
-    }
-
-    /**
-     * Constant for the thing to execute
-     */
-    private static final String CCM_EXE = "ccm";
-
-    /**
-     * The 'CreateTask' command
-     */
-    public static final String COMMAND_CREATE_TASK = "create_task";
-    /**
-     * The 'Checkout' command
-     */
-    public static final String COMMAND_CHECKOUT = "co";
-    /**
-     * The 'Checkin' command
-     */
-    public static final String COMMAND_CHECKIN = "ci";
-    /**
-     * The 'Reconfigure' command
-     */
-    public static final String COMMAND_RECONFIGURE = "reconfigure";
-
-    /**
-     * The 'Reconfigure' command
-     */
-    public static final String COMMAND_DEFAULT_TASK = "default_task";
-
-
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/clearcase/CCCheckin.java b/src/main/org/apache/tools/ant/taskdefs/optional/clearcase/CCCheckin.java
deleted file mode 100644
index 437d2b3..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/clearcase/CCCheckin.java
+++ /dev/null
@@ -1,372 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000,2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.clearcase;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.types.Commandline;
-
-
-
-
-/**
- * Task to perform Checkin command to ClearCase.
- * <p>
- * The following attributes are interpreted:
- * <table border="1">
- *   <tr>
- *     <th>Attribute</th>
- *     <th>Values</th>
- *     <th>Required</th>
- *   </tr>
- *   <tr>
- *      <td>viewpath</td>
- *      <td>Path to the ClearCase view file or directory that the command will operate on</td>
- *      <td>No</td>
- *   <tr>
- *   <tr>
- *      <td>comment</td>
- *      <td>Specify a comment. Only one of comment or cfile may be used.</td>
- *      <td>No</td>
- *   <tr>
- *   <tr>
- *      <td>commentfile</td>
- *      <td>Specify a file containing a comment. Only one of comment or cfile may be used.</td>
- *      <td>No</td>
- *   <tr>
- *   <tr>
- *      <td>nowarn</td>
- *      <td>Suppress warning messages</td>
- *      <td>No</td>
- *   <tr>
- *   <tr>
- *      <td>preservetime</td>
- *      <td>Preserve the modification time</td>
- *      <td>No</td>
- *   <tr>
- *   <tr>
- *      <td>keepcopy</td>
- *      <td>Keeps a copy of the file with a .keep extension</td>
- *      <td>No</td>
- *   <tr>
- *   <tr>
- *      <td>identical</td>
- *      <td>Allows the file to be checked in even if it is identical to the original</td>
- *      <td>No</td>
- *   <tr>
- * </table>
- *
- * @author Curtis White
- */
-public class CCCheckin extends ClearCase {
-    private String m_Comment = null;
-    private String m_Cfile = null;
-    private boolean m_Nwarn = false;
-    private boolean m_Ptime = false;
-    private boolean m_Keep = false;
-    private boolean m_Identical = true;
-
-    /**
-     * Executes the task.
-     * <p>
-     * Builds a command line to execute cleartool and then calls Exec's run method
-     * to execute the command line.
-     */
-    public void execute() throws BuildException {
-        Commandline commandLine = new Commandline();
-        Project aProj = getProject();
-        int result = 0;
-
-        // Default the viewpath to basedir if it is not specified
-        if (getViewPath() == null) {
-            setViewPath(aProj.getBaseDir().getPath());
-        }
-
-        // build the command line from what we got. the format is
-        // cleartool checkin [options...] [viewpath ...]
-        // as specified in the CLEARTOOL.EXE help
-        commandLine.setExecutable(getClearToolCommand());
-        commandLine.createArgument().setValue(COMMAND_CHECKIN);
-
-        checkOptions(commandLine);
-
-        result = run(commandLine);
-        if (result != 0) {
-            String msg = "Failed executing: " + commandLine.toString();
-            throw new BuildException(msg, location);
-        }
-    }
-
-
-    /**
-     * Check the command line options.
-     */
-    private void checkOptions(Commandline cmd) {
-        if (getComment() != null) {
-            // -c
-            getCommentCommand(cmd);
-        } else {
-            if (getCommentFile() != null) {
-                // -cfile
-                getCommentFileCommand(cmd);
-            } else {
-                cmd.createArgument().setValue(FLAG_NOCOMMENT);
-            }
-        }
-
-        if (getNoWarn()) {
-            // -nwarn
-            cmd.createArgument().setValue(FLAG_NOWARN);
-        }
-
-        if (getPreserveTime()) {
-            // -ptime
-            cmd.createArgument().setValue(FLAG_PRESERVETIME);
-        }
-
-        if (getKeepCopy()) {
-            // -keep
-            cmd.createArgument().setValue(FLAG_KEEPCOPY);
-        }
-
-        if (getIdentical()) {
-            // -identical
-            cmd.createArgument().setValue(FLAG_IDENTICAL);
-        }
-
-        // viewpath
-        cmd.createArgument().setValue(getViewPath());
-    }
-
-
-    /**
-     * Set comment string
-     *
-     * @param comment the comment string
-     */
-    public void setComment(String comment) {
-        m_Comment = comment;
-    }
-
-    /**
-     * Get comment string
-     *
-     * @return String containing the comment
-     */
-    public String getComment() {
-        return m_Comment;
-    }
-
-    /**
-     * Set comment file
-     *
-     * @param cfile the path to the comment file
-     */
-    public void setCommentFile(String cfile) {
-        m_Cfile = cfile;
-    }
-
-    /**
-     * Get comment file
-     *
-     * @return String containing the path to the comment file
-     */
-    public String getCommentFile() {
-        return m_Cfile;
-    }
-
-    /**
-     * Set the nowarn flag
-     *
-     * @param nwarn the status to set the flag to
-     */
-    public void setNoWarn(boolean nwarn) {
-        m_Nwarn = nwarn;
-    }
-
-    /**
-     * Get nowarn flag status
-     *
-     * @return boolean containing status of nwarn flag
-     */
-    public boolean getNoWarn() {
-        return m_Nwarn;
-    }
-
-    /**
-     * Set preservetime flag
-     *
-     * @param ptime the status to set the flag to
-     */
-    public void setPreserveTime(boolean ptime) {
-        m_Ptime = ptime;
-    }
-
-    /**
-     * Get preservetime flag status
-     *
-     * @return boolean containing status of preservetime flag
-     */
-    public boolean getPreserveTime() {
-        return m_Ptime;
-    }
-
-    /**
-     * Set the keepcopy flag
-     *
-     * @param keep the status to set the flag to
-     */
-    public void setKeepCopy(boolean keep) {
-        m_Keep = keep;
-    }
-
-    /**
-     * Get keepcopy flag status
-     *
-     * @return boolean containing status of keepcopy flag
-     */
-    public boolean getKeepCopy() {
-        return m_Keep;
-    }
-
-    /**
-     * Set the identical flag
-     *
-     * @param identical the status to set the flag to
-     */
-    public void setIdentical(boolean identical) {
-        m_Identical = identical;
-    }
-
-    /**
-     * Get identical flag status
-     *
-     * @return boolean containing status of identical flag
-     */
-    public boolean getIdentical() {
-        return m_Identical;
-    }
-
-
-    /**
-     * Get the 'comment' command
-     *
-     * @return the 'comment' command if the attribute was specified, otherwise an empty string
-     *
-     * @param CommandLine containing the command line string with or without the comment flag and string appended
-     */
-    private void getCommentCommand(Commandline cmd) {
-        if (getComment() != null) {
-            /* Had to make two separate commands here because if a space is
-               inserted between the flag and the value, it is treated as a
-               Windows filename with a space and it is enclosed in double
-               quotes ("). This breaks clearcase.
-            */
-            cmd.createArgument().setValue(FLAG_COMMENT);
-            cmd.createArgument().setValue(getComment());
-        }
-    }
-
-    /**
-     * Get the 'commentfile' command
-     *
-     * @return the 'commentfile' command if the attribute was specified, otherwise an empty string
-     *
-     * @param CommandLine containing the command line string with or without the commentfile flag and file appended
-     */
-    private void getCommentFileCommand(Commandline cmd) {
-        if (getCommentFile() != null) {
-            /* Had to make two separate commands here because if a space is
-               inserted between the flag and the value, it is treated as a
-               Windows filename with a space and it is enclosed in double
-               quotes ("). This breaks clearcase.
-            */
-            cmd.createArgument().setValue(FLAG_COMMENTFILE);
-            cmd.createArgument().setValue(getCommentFile());
-        }
-    }
-
-
-        /**
-     * -c flag -- comment to attach to the file
-     */
-    public static final String FLAG_COMMENT = "-c";
-        /**
-     * -cfile flag -- file containing a comment to attach to the file
-     */
-    public static final String FLAG_COMMENTFILE = "-cfile";
-        /**
-     * -nc flag -- no comment is specified
-     */
-    public static final String FLAG_NOCOMMENT = "-nc";
-        /**
-     * -nwarn flag -- suppresses warning messages
-     */
-    public static final String FLAG_NOWARN = "-nwarn";
-        /**
-     * -ptime flag -- preserves the modification time
-     */
-    public static final String FLAG_PRESERVETIME = "-ptime";
-        /**
-     * -keep flag -- keeps a copy of the file with a .keep extension
-     */
-    public static final String FLAG_KEEPCOPY = "-keep";
-        /**
-     * -identical flag -- allows the file to be checked in even if it is identical to the original
-     */
-    public static final String FLAG_IDENTICAL = "-identical";
-
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/clearcase/CCCheckout.java b/src/main/org/apache/tools/ant/taskdefs/optional/clearcase/CCCheckout.java
deleted file mode 100644
index 8467a48..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/clearcase/CCCheckout.java
+++ /dev/null
@@ -1,484 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000,2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.clearcase;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.types.Commandline;
-
-
-
-
-/**
- * Task to perform Checkout command to ClearCase.
- * <p>
- * The following attributes are interpretted:
- * <table border="1">
- *   <tr>
- *     <th>Attribute</th>
- *     <th>Values</th>
- *     <th>Required</th>
- *   </tr>
- *   <tr>
- *      <td>viewpath</td>
- *      <td>Path to the ClearCase view file or directory that the command will operate on</td>
- *      <td>No</td>
- *   <tr>
- *   <tr>
- *      <td>reserved</td>
- *      <td>Specifies whether to check out the file as reserved or not</td>
- *      <td>Yes</td>
- *   <tr>
- *   <tr>
- *      <td>out</td>
- *      <td>Creates a writable file under a different filename</td>
- *      <td>No</td>
- *   <tr>
- *   <tr>
- *      <td>nodata</td>
- *      <td>Checks out the file but does not create an editable file containing its data</td>
- *      <td>No</td>
- *   <tr>
- *   <tr>
- *      <td>branch</td>
- *      <td>Specify a branch to check out the file to</td>
- *      <td>No</td>
- *   <tr>
- *   <tr>
- *      <td>version</td>
- *      <td>Allows checkout of a version other than main latest</td>
- *      <td>No</td>
- *   <tr>
- *   <tr>
- *      <td>nowarn</td>
- *      <td>Suppress warning messages</td>
- *      <td>No</td>
- *   <tr>
- *   <tr>
- *      <td>comment</td>
- *      <td>Specify a comment. Only one of comment or cfile may be used.</td>
- *      <td>No</td>
- *   <tr>
- *   <tr>
- *      <td>commentfile</td>
- *      <td>Specify a file containing a comment. Only one of comment or cfile may be used.</td>
- *      <td>No</td>
- *   <tr>
- * </table>
- *
- * @author Curtis White
- */
-public class CCCheckout extends ClearCase {
-    private boolean m_Reserved = true;
-    private String m_Out = null;
-    private boolean m_Ndata = false;
-    private String m_Branch = null;
-    private boolean m_Version = false;
-    private boolean m_Nwarn = false;
-    private String m_Comment = null;
-    private String m_Cfile = null;
-
-    /**
-     * Executes the task.
-     * <p>
-     * Builds a command line to execute cleartool and then calls Exec's run method
-     * to execute the command line.
-     */
-    public void execute() throws BuildException {
-        Commandline commandLine = new Commandline();
-        Project aProj = getProject();
-        int result = 0;
-
-        // Default the viewpath to basedir if it is not specified
-        if (getViewPath() == null) {
-            setViewPath(aProj.getBaseDir().getPath());
-        }
-
-        // build the command line from what we got the format is
-        // cleartool checkout [options...] [viewpath ...]
-        // as specified in the CLEARTOOL.EXE help
-        commandLine.setExecutable(getClearToolCommand());
-        commandLine.createArgument().setValue(COMMAND_CHECKOUT);
-
-        checkOptions(commandLine);
-
-        result = run(commandLine);
-        if (result != 0) {
-            String msg = "Failed executing: " + commandLine.toString();
-            throw new BuildException(msg, location);
-        }
-    }
-
-
-    /**
-     * Check the command line options.
-     */
-    private void checkOptions(Commandline cmd) {
-        // ClearCase items
-        if (getReserved()) {
-            // -reserved
-            cmd.createArgument().setValue(FLAG_RESERVED);
-        } else {
-            // -unreserved
-            cmd.createArgument().setValue(FLAG_UNRESERVED);
-        }
-
-        if (getOut() != null) {
-            // -out
-            getOutCommand(cmd);
-        } else {
-            if (getNoData()) {
-                // -ndata
-                cmd.createArgument().setValue(FLAG_NODATA);
-            }
-
-        }
-
-        if (getBranch() != null) {
-            // -branch
-            getBranchCommand(cmd);
-        } else {
-            if (getVersion()) {
-                // -version
-                cmd.createArgument().setValue(FLAG_VERSION);
-            }
-
-        }
-
-        if (getNoWarn()) {
-            // -nwarn
-            cmd.createArgument().setValue(FLAG_NOWARN);
-        }
-
-        if (getComment() != null) {
-            // -c
-            getCommentCommand(cmd);
-        } else {
-            if (getCommentFile() != null) {
-                // -cfile
-                getCommentFileCommand(cmd);
-            } else {
-                cmd.createArgument().setValue(FLAG_NOCOMMENT);
-            }
-        }
-
-        // viewpath
-        cmd.createArgument().setValue(getViewPath());
-    }
-
-    /**
-     * Set reserved flag status
-     *
-     * @param reserved the status to set the flag to
-     */
-    public void setReserved(boolean reserved) {
-        m_Reserved = reserved;
-    }
-
-    /**
-     * Get reserved flag status
-     *
-     * @return boolean containing status of reserved flag
-     */
-    public boolean getReserved() {
-        return m_Reserved;
-    }
-
-    /**
-     * Set out file
-     *
-     * @param outf the path to the out file
-     */
-    public void setOut(String outf) {
-        m_Out = outf;
-    }
-
-    /**
-     * Get out file
-     *
-     * @return String containing the path to the out file
-     */
-    public String getOut() {
-        return m_Out;
-    }
-
-    /**
-     * Set the nodata flag
-     *
-     * @param ndata the status to set the flag to
-     */
-    public void setNoData(boolean ndata) {
-        m_Ndata = ndata;
-    }
-
-    /**
-     * Get nodata flag status
-     *
-     * @return boolean containing status of ndata flag
-     */
-    public boolean getNoData() {
-        return m_Ndata;
-    }
-
-    /**
-     * Set branch name
-     *
-     * @param branch the name of the branch
-     */
-    public void setBranch(String branch) {
-        m_Branch = branch;
-    }
-
-    /**
-     * Get branch name
-     *
-     * @return String containing the name of the branch
-     */
-    public String getBranch() {
-        return m_Branch;
-    }
-
-    /**
-     * Set the version flag
-     *
-     * @param version the status to set the flag to
-     */
-    public void setVersion(boolean version) {
-        m_Version = version;
-    }
-
-    /**
-     * Get version flag status
-     *
-     * @return boolean containing status of version flag
-     */
-    public boolean getVersion() {
-        return m_Version;
-    }
-
-    /**
-     * Set the nowarn flag
-     *
-     * @param nwarn the status to set the flag to
-     */
-    public void setNoWarn(boolean nwarn) {
-        m_Nwarn = nwarn;
-    }
-
-    /**
-     * Get nowarn flag status
-     *
-     * @return boolean containing status of nwarn flag
-     */
-    public boolean getNoWarn() {
-        return m_Nwarn;
-    }
-
-    /**
-     * Set comment string
-     *
-     * @param comment the comment string
-     */
-    public void setComment(String comment) {
-        m_Comment = comment;
-    }
-
-    /**
-     * Get comment string
-     *
-     * @return String containing the comment
-     */
-    public String getComment() {
-        return m_Comment;
-    }
-
-    /**
-     * Set comment file
-     *
-     * @param cfile the path to the comment file
-     */
-    public void setCommentFile(String cfile) {
-        m_Cfile = cfile;
-    }
-
-    /**
-     * Get comment file
-     *
-     * @return String containing the path to the comment file
-     */
-    public String getCommentFile() {
-        return m_Cfile;
-    }
-
-    /**
-     * Get the 'out' command
-     *
-     * @return the 'out' command if the attribute was specified, otherwise an empty string
-     *
-     * @param CommandLine containing the command line string with or without the out flag and path appended
-     */
-    private void getOutCommand(Commandline cmd) {
-        if (getOut() != null) {
-            /* Had to make two separate commands here because if a space is
-               inserted between the flag and the value, it is treated as a
-               Windows filename with a space and it is enclosed in double
-               quotes ("). This breaks clearcase.
-            */
-            cmd.createArgument().setValue(FLAG_OUT);
-            cmd.createArgument().setValue(getOut());
-        }
-    }
-
-    /**
-     * Get the 'branch' command
-     *
-     * @return the 'branch' command if the attribute was specified, otherwise an empty string
-     *
-     * @param CommandLine containing the command line string with or without the branch flag and name appended
-     */
-    private void getBranchCommand(Commandline cmd) {
-        if (getBranch() != null) {
-            /* Had to make two separate commands here because if a space is
-               inserted between the flag and the value, it is treated as a
-               Windows filename with a space and it is enclosed in double
-               quotes ("). This breaks clearcase.
-            */
-            cmd.createArgument().setValue(FLAG_BRANCH);
-            cmd.createArgument().setValue(getBranch());
-        }
-    }
-
-
-    /**
-     * Get the 'comment' command
-     *
-     * @return the 'comment' command if the attribute was specified, otherwise an empty string
-     *
-     * @param CommandLine containing the command line string with or without the comment flag and string appended
-     */
-    private void getCommentCommand(Commandline cmd) {
-        if (getComment() != null) {
-            /* Had to make two separate commands here because if a space is
-               inserted between the flag and the value, it is treated as a
-               Windows filename with a space and it is enclosed in double
-               quotes ("). This breaks clearcase.
-            */
-            cmd.createArgument().setValue(FLAG_COMMENT);
-            cmd.createArgument().setValue(getComment());
-        }
-    }
-
-    /**
-     * Get the 'cfile' command
-     *
-     * @return the 'cfile' command if the attribute was specified, otherwise an empty string
-     *
-     * @param CommandLine containing the command line string with or without the cfile flag and file appended
-     */
-    private void getCommentFileCommand(Commandline cmd) {
-        if (getCommentFile() != null) {
-            /* Had to make two separate commands here because if a space is
-               inserted between the flag and the value, it is treated as a
-               Windows filename with a space and it is enclosed in double
-               quotes ("). This breaks clearcase.
-            */
-            cmd.createArgument().setValue(FLAG_COMMENTFILE);
-            cmd.createArgument().setValue(getCommentFile());
-        }
-    }
-
-        /**
-     *  -reserved flag -- check out the file as reserved
-     */
-    public static final String FLAG_RESERVED = "-reserved";
-        /**
-     *  -reserved flag -- check out the file as unreserved
-     */
-    public static final String FLAG_UNRESERVED = "-unreserved";
-        /**
-     * -out flag -- create a writable file under a different filename
-     */
-    public static final String FLAG_OUT = "-out";
-        /**
-     * -ndata flag -- checks out the file but does not create an editable file containing its data
-     */
-    public static final String FLAG_NODATA = "-ndata";
-        /**
-     * -branch flag -- checks out the file on a specified branch
-     */
-    public static final String FLAG_BRANCH = "-branch";
-        /**
-     * -version flag -- allows checkout of a version that is not main latest
-     */
-    public static final String FLAG_VERSION = "-version";
-        /**
-     * -nwarn flag -- suppresses warning messages
-     */
-    public static final String FLAG_NOWARN = "-nwarn";
-        /**
-     * -c flag -- comment to attach to the file
-     */
-    public static final String FLAG_COMMENT = "-c";
-        /**
-     * -cfile flag -- file containing a comment to attach to the file
-     */
-    public static final String FLAG_COMMENTFILE = "-cfile";
-        /**
-     * -nc flag -- no comment is specified
-     */
-    public static final String FLAG_NOCOMMENT = "-nc";
-
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/clearcase/CCUnCheckout.java b/src/main/org/apache/tools/ant/taskdefs/optional/clearcase/CCUnCheckout.java
deleted file mode 100644
index 37e448a..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/clearcase/CCUnCheckout.java
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000,2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.clearcase;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.types.Commandline;
-
-
-
-
-/**
- * Task to perform UnCheckout command to ClearCase.
- * <p>
- * The following attributes are interpretted:
- * <table border="1">
- *   <tr>
- *     <th>Attribute</th>
- *     <th>Values</th>
- *     <th>Required</th>
- *   </tr>
- *   <tr>
- *      <td>viewpath</td>
- *      <td>Path to the ClearCase view file or directory that the command will operate on</td>
- *      <td>No</td>
- *   <tr>
- *   <tr>
- *      <td>keepcopy</td>
- *      <td>Specifies whether to keep a copy of the file with a .keep extension or not</td>
- *      <td>No</td>
- *   <tr>
- * </table>
- *
- * @author Curtis White
- */
-public class CCUnCheckout extends ClearCase {
-    private boolean m_Keep = false;
-
-    /**
-     * Executes the task.
-     * <p>
-     * Builds a command line to execute cleartool and then calls Exec's run method
-     * to execute the command line.
-     */
-    public void execute() throws BuildException {
-        Commandline commandLine = new Commandline();
-        Project aProj = getProject();
-        int result = 0;
-
-        // Default the viewpath to basedir if it is not specified
-        if (getViewPath() == null) {
-            setViewPath(aProj.getBaseDir().getPath());
-        }
-
-        // build the command line from what we got the format is
-        // cleartool uncheckout [options...] [viewpath ...]
-        // as specified in the CLEARTOOL.EXE help
-        commandLine.setExecutable(getClearToolCommand());
-        commandLine.createArgument().setValue(COMMAND_UNCHECKOUT);
-
-        checkOptions(commandLine);
-
-        result = run(commandLine);
-        if (result != 0) {
-            String msg = "Failed executing: " + commandLine.toString();
-            throw new BuildException(msg, location);
-        }
-    }
-
-
-    /**
-     * Check the command line options.
-     */
-    private void checkOptions(Commandline cmd) {
-        // ClearCase items
-        if (getKeepCopy()) {
-            // -keep
-            cmd.createArgument().setValue(FLAG_KEEPCOPY);
-        } else {
-            // -rm
-            cmd.createArgument().setValue(FLAG_RM);
-        }
-
-        // viewpath
-        cmd.createArgument().setValue(getViewPath());
-    }
-
-    /**
-     * Set keepcopy flag status
-     *
-     * @param keep the status to set the flag to
-     */
-    public void setKeepCopy(boolean keep) {
-        m_Keep = keep;
-    }
-
-    /**
-     * Get keepcopy flag status
-     *
-     * @return boolean containing status of keep flag
-     */
-    public boolean getKeepCopy() {
-        return m_Keep;
-    }
-
-
-        /**
-     *  -keep flag -- keep a copy of the file with .keep extension
-     */
-    public static final String FLAG_KEEPCOPY = "-keep";
-        /**
-     *  -rm flag -- remove the copy of the file
-     */
-    public static final String FLAG_RM = "-rm";
-
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/clearcase/CCUpdate.java b/src/main/org/apache/tools/ant/taskdefs/optional/clearcase/CCUpdate.java
deleted file mode 100644
index ced0de1..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/clearcase/CCUpdate.java
+++ /dev/null
@@ -1,356 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000,2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.clearcase;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.types.Commandline;
-
-
-
-
-
-/**
- * Task to perform an Update command to ClearCase.
- * <p>
- * The following attributes are interpretted:
- * <table border="1">
- *   <tr>
- *     <th>Attribute</th>
- *     <th>Values</th>
- *     <th>Required</th>
- *   </tr>
- *   <tr>
- *      <td>viewpath</td>
- *      <td>Path to the ClearCase view file or directory that the command will operate on</td>
- *      <td>No</td>
- *   <tr>
- *   <tr>
- *      <td>graphical</td>
- *      <td>Displays a graphical dialog during the update</td>
- *      <td>No</td>
- *   <tr>
- *   <tr>
- *      <td>log</td>
- *      <td>Specifies a log file for ClearCase to write to</td>
- *      <td>No</td>
- *   <tr>
- *   <tr>
- *      <td>overwrite</td>
- *      <td>Specifies whether to overwrite hijacked files or not</td>
- *      <td>No</td>
- *   <tr>
- *   <tr>
- *      <td>rename</td>
- *      <td>Specifies that hijacked files should be renamed with a .keep extension</td>
- *      <td>No</td>
- *   <tr>
- *   <tr>
- *      <td>currenttime</td>
- *      <td>Specifies that modification time should be written as the current time. Either currenttime or preservetime can be specified.</td>
- *      <td>No</td>
- *   <tr>
- *   <tr>
- *      <td>preservetime</td>
- *      <td>Specifies that modification time should preserved from the VOB time. Either currenttime or preservetime can be specified.</td>
- *      <td>No</td>
- *   <tr>
- * </table>
- *
- * @author Curtis White
- */
-public class CCUpdate extends ClearCase {
-    private boolean m_Graphical = false;
-    private boolean m_Overwrite = false;
-    private boolean m_Rename = false;
-    private boolean m_Ctime = false;
-    private boolean m_Ptime = false;
-    private String m_Log = null;
-
-    /**
-     * Executes the task.
-     * <p>
-     * Builds a command line to execute cleartool and then calls Exec's run method
-     * to execute the command line.
-     */
-    public void execute() throws BuildException {
-        Commandline commandLine = new Commandline();
-        Project aProj = getProject();
-        int result = 0;
-
-        // Default the viewpath to basedir if it is not specified
-        if (getViewPath() == null) {
-            setViewPath(aProj.getBaseDir().getPath());
-        }
-
-        // build the command line from what we got the format is
-        // cleartool update [options...] [viewpath ...]
-        // as specified in the CLEARTOOL.EXE help
-        commandLine.setExecutable(getClearToolCommand());
-        commandLine.createArgument().setValue(COMMAND_UPDATE);
-
-        // Check the command line options
-        checkOptions(commandLine);
-
-        // For debugging
-        System.out.println(commandLine.toString());
-
-        result = run(commandLine);
-        if (result != 0) {
-            String msg = "Failed executing: " + commandLine.toString();
-            throw new BuildException(msg, location);
-        }
-    }
-
-    /**
-     * Check the command line options.
-     */
-    private void checkOptions(Commandline cmd) {
-        // ClearCase items
-        if (getGraphical()) {
-            // -graphical
-            cmd.createArgument().setValue(FLAG_GRAPHICAL);
-        } else {
-            if (getOverwrite()) {
-                // -overwrite
-                cmd.createArgument().setValue(FLAG_OVERWRITE);
-            } else {
-                if (getRename()) {
-                    // -rename
-                    cmd.createArgument().setValue(FLAG_RENAME);
-                } else {
-                    // -noverwrite
-                    cmd.createArgument().setValue(FLAG_NOVERWRITE);
-                }
-            }
-
-            if (getCurrentTime()) {
-                // -ctime
-                cmd.createArgument().setValue(FLAG_CURRENTTIME);
-            } else {
-                if (getPreserveTime()) {
-                    // -ptime
-                    cmd.createArgument().setValue(FLAG_PRESERVETIME);
-                }
-            }
-
-            // -log logname
-            getLogCommand(cmd);
-        }
-
-        // viewpath
-        cmd.createArgument().setValue(getViewPath());
-    }
-
-    /**
-     * Set graphical flag status
-     *
-     * @param graphical the status to set the flag to
-     */
-    public void setGraphical(boolean graphical) {
-        m_Graphical = graphical;
-    }
-
-    /**
-     * Get graphical flag status
-     *
-     * @return boolean containing status of graphical flag
-     */
-    public boolean getGraphical() {
-        return m_Graphical;
-    }
-
-    /**
-     * Set overwrite hijacked files status
-     *
-     * @param ow the status to set the flag to
-     */
-    public void setOverwrite(boolean ow) {
-        m_Overwrite = ow;
-    }
-
-    /**
-     * Get overwrite hijacked files status
-     *
-     * @return boolean containing status of overwrite flag
-     */
-    public boolean getOverwrite() {
-        return m_Overwrite;
-    }
-
-    /**
-     * Set rename hijacked files status
-     *
-     * @param ren the status to set the flag to
-     */
-    public void setRename(boolean ren) {
-        m_Rename = ren;
-    }
-
-    /**
-     * Get rename hijacked files status
-     *
-     * @return boolean containing status of rename flag
-     */
-    public boolean getRename() {
-        return m_Rename;
-    }
-
-    /**
-     * Set modified time based on current time
-     *
-     * @param ct the status to set the flag to
-     */
-    public void setCurrentTime(boolean ct) {
-        m_Ctime = ct;
-    }
-
-    /**
-     * Get current time status
-     *
-     * @return boolean containing status of current time flag
-     */
-    public boolean getCurrentTime() {
-        return m_Ctime;
-    }
-
-    /**
-     * Preserve modified time from the VOB time
-     *
-     * @param pt the status to set the flag to
-     */
-    public void setPreserveTime(boolean pt) {
-        m_Ptime = pt;
-    }
-
-    /**
-     * Get preserve time status
-     *
-     * @return boolean containing status of preserve time flag
-     */
-    public boolean getPreserveTime() {
-        return m_Ptime;
-    }
-
-    /**
-     * Set log file where cleartool can record the status of the command
-     *
-     * @param log the path to the log file
-     */
-    public void setLog(String log) {
-        m_Log = log;
-    }
-
-    /**
-     * Get log file
-     *
-     * @return String containing the path to the log file
-     */
-    public String getLog() {
-        return m_Log;
-    }
-
-    /**
-     * Get the 'log' command
-     *
-     * @return the 'log' command if the attribute was specified, otherwise an empty string
-     *
-     * @param CommandLine containing the command line string with or without the log flag and path appended
-     */
-    private void getLogCommand(Commandline cmd) {
-        if (getLog() == null) {
-            return;
-        } else {
-            /* Had to make two separate commands here because if a space is
-               inserted between the flag and the value, it is treated as a
-               Windows filename with a space and it is enclosed in double
-               quotes ("). This breaks clearcase.
-            */
-            cmd.createArgument().setValue(FLAG_LOG);
-            cmd.createArgument().setValue(getLog());
-        }
-    }
-
-    /**
-     *  -graphical flag -- display graphical dialog during update operation
-     */
-    public static final String FLAG_GRAPHICAL = "-graphical";
-    /**
-     * -log flag -- file to log status to
-     */
-    public static final String FLAG_LOG = "-log";
-    /**
-     * -overwrite flag -- overwrite hijacked files
-     */
-    public static final String FLAG_OVERWRITE = "-overwrite";
-    /**
-     * -noverwrite flag -- do not overwrite hijacked files
-     */
-    public static final String FLAG_NOVERWRITE = "-noverwrite";
-    /**
-     * -rename flag -- rename hijacked files with .keep extension
-     */
-    public static final String FLAG_RENAME = "-rename";
-    /**
-     * -ctime flag -- modified time is written as the current time
-     */
-    public static final String FLAG_CURRENTTIME = "-ctime";
-    /**
-     * -ptime flag -- modified time is written as the VOB time
-     */
-    public static final String FLAG_PRESERVETIME = "-ptime";
-
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/clearcase/ClearCase.java b/src/main/org/apache/tools/ant/taskdefs/optional/clearcase/ClearCase.java
deleted file mode 100644
index 1ce3743..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/clearcase/ClearCase.java
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000,2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.clearcase;
-
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.taskdefs.Execute;
-import org.apache.tools.ant.taskdefs.LogStreamHandler;
-import org.apache.tools.ant.types.Commandline;
-
-
-
-/**
- * A base class for creating tasks for executing commands on ClearCase.
- * <p>
- * The class extends the 'exec' task as it operates by executing the cleartool program
- * supplied with ClearCase. By default the task expects the cleartool executable to be
- * in the path, * you can override this be specifying the cleartooldir attribute.
- * </p>
- * <p>
- * This class provides set and get methods for the 'viewpath' attribute. It
- * also contains constants for the flags that can be passed to cleartool.
- * </p>
- *
- * @author Curtis White
- */
-public abstract class ClearCase extends Task {
-    private String m_ClearToolDir = "";
-    private String m_viewPath = null;
-
-    /**
-     * Set the directory where the cleartool executable is located
-     *
-     * @param dir the directory containing the cleartool executable
-     */
-    public final void setClearToolDir(String dir) {
-        m_ClearToolDir = project.translatePath(dir);
-    }
-
-    /**
-     * Builds and returns the command string to execute cleartool
-     *
-     * @return String containing path to the executable
-     */
-    protected final String getClearToolCommand() {
-        String toReturn = m_ClearToolDir;
-        if (!toReturn.equals("") && !toReturn.endsWith("/")) {
-            toReturn += "/";
-        }
-
-        toReturn += CLEARTOOL_EXE;
-
-        return toReturn;
-    }
-
-    /**
-     * Set the path to the item in a clearcase view to operate on
-     *
-     * @param viewPath Path to the view directory or file
-     */
-    public final void setViewPath(String viewPath) {
-        m_viewPath = viewPath;
-    }
-
-    /**
-     * Get the path to the item in a clearcase view
-     *
-     * @return m_viewPath
-     */
-    public String getViewPath() {
-        return m_viewPath;
-    }
-
-
-    protected int run(Commandline cmd) {
-        try {
-            Project aProj = getProject();
-            Execute exe = new Execute(new LogStreamHandler(this, Project.MSG_INFO, Project.MSG_WARN));
-            exe.setAntRun(aProj);
-            exe.setWorkingDirectory(aProj.getBaseDir());
-            exe.setCommandline(cmd.getCommandline());
-            return exe.execute();
-        } catch (java.io.IOException e) {
-            throw new BuildException(e, location);
-        }
-    }
-
-    /**
-     * Constant for the thing to execute
-     */
-    private static final String CLEARTOOL_EXE = "cleartool";
-
-    /**
-     * The 'Update' command
-     */
-    public static final String COMMAND_UPDATE = "update";
-    /**
-     * The 'Checkout' command
-     */
-    public static final String COMMAND_CHECKOUT = "checkout";
-    /**
-     * The 'Checkin' command
-     */
-    public static final String COMMAND_CHECKIN = "checkin";
-    /**
-     * The 'UndoCheckout' command
-     */
-    public static final String COMMAND_UNCHECKOUT = "uncheckout";
-
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/depend/AntAnalyzer.java b/src/main/org/apache/tools/ant/taskdefs/optional/depend/AntAnalyzer.java
deleted file mode 100644
index 04d0745..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/depend/AntAnalyzer.java
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.depend;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.InputStream;
-import java.io.IOException;
-import java.util.Enumeration;
-import java.util.Hashtable;
-import java.util.Vector;
-import org.apache.tools.ant.util.depend.AbstractAnalyzer;
-import java.util.zip.ZipFile;
-import java.util.zip.ZipEntry;
-
-/**
- * An analyzer which uses the depend task's bytecode classes to analyze 
- * dependencies 
- *
- * @author Conor MacNeill
- */
-public class AntAnalyzer extends AbstractAnalyzer {
-    public AntAnalyzer() {
-    }
-    
-    /**
-     * Determine the dependencies of the configured root classes.
-     *
-     * @param files a vector to be populated with the files which contain
-     *      the dependency classes
-     * @param classes a vector to be populated with the names of the
-     *      depencency classes.
-     */
-    protected void determineDependencies(Vector files, Vector classes) {
-        // we get the root classes and build up a set of
-        // classes upon which they depend
-        Hashtable dependencies = new Hashtable();
-        Hashtable containers = new Hashtable();
-        Hashtable toAnalyze = new Hashtable();
-        for (Enumeration e = getRootClasses(); e.hasMoreElements();) {
-            String classname = (String) e.nextElement();
-            toAnalyze.put(classname, classname);
-        }
-
-        int count = 0;
-        int maxCount = isClosureRequired() ? MAX_LOOPS : 2;
-        while (toAnalyze.size() != 0 && count++ < maxCount) {
-            Hashtable analyzedDeps = new Hashtable();
-            for (Enumeration e = toAnalyze.keys(); e.hasMoreElements();) {
-                String classname = (String) e.nextElement();
-                dependencies.put(classname, classname);
-                try {
-                    File container = getClassContainer(classname);
-                    if (container == null) {
-                        continue;
-                    }
-                    containers.put(container, container);
-
-                    ZipFile zipFile = null;
-                    InputStream inStream = null;
-                    try {
-                        if (container.getName().endsWith(".class")) {
-                            inStream = new FileInputStream(container.getPath());
-                        } else {
-                            zipFile = new ZipFile(container.getPath());
-                            String entryName 
-                                = classname.replace('.', '/') + ".class";
-                            ZipEntry entry = new ZipEntry(entryName);                                
-                            inStream 
-                                = zipFile.getInputStream(entry);                                 
-                        }
-                        ClassFile classFile = new ClassFile();
-                        classFile.read(inStream);
-                        Vector dependencyList = classFile.getClassRefs();
-                        Enumeration depEnum = dependencyList.elements();
-                        while (depEnum.hasMoreElements()) {
-                            String dependency = (String) depEnum.nextElement();
-                            analyzedDeps.put(dependency, dependency);
-                        }
-                    } finally {
-                        if (inStream != null) {
-                            inStream.close();
-                        }
-                        if (zipFile != null) {
-                            zipFile.close();
-                        }
-                    }
-                } catch (IOException ioe) {
-                    // ignore
-                }
-            }
-
-            toAnalyze.clear();
-
-            // now recover all the dependencies collected and add to the list.
-            Enumeration depsEnum = analyzedDeps.elements();
-            while (depsEnum.hasMoreElements()) {
-                String className = (String) depsEnum.nextElement();
-                if (!dependencies.containsKey(className)) {
-                    toAnalyze.put(className, className);
-                }
-            }
-        }
-
-        files.removeAllElements();
-        for (Enumeration e = containers.keys(); e.hasMoreElements();) {
-            files.addElement((File) e.nextElement());
-        }
-
-        classes.removeAllElements();
-        for (Enumeration e = dependencies.keys(); e.hasMoreElements();) {
-            classes.addElement((String) e.nextElement());
-        }
-    }
-
-    /**
-     * Indicate if this analyzer can determine dependent files.
-     *
-     * @return true if the analyzer provides dependency file information.
-     */
-    protected boolean supportsFileDependencies() {
-        return true;
-    }
-
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/depend/ClassFile.java b/src/main/org/apache/tools/ant/taskdefs/optional/depend/ClassFile.java
deleted file mode 100644
index 48397a9..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/depend/ClassFile.java
+++ /dev/null
@@ -1,156 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.depend;
-
-import java.io.DataInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Vector;
-
-import org.apache.tools.ant.taskdefs.optional.depend.constantpool.ClassCPInfo;
-import org.apache.tools.ant.taskdefs.optional.depend.constantpool.ConstantPool;
-import org.apache.tools.ant.taskdefs.optional.depend.constantpool.ConstantPoolEntry;
-
-/**
- * A ClassFile object stores information about a Java class. The class may
- * be read from a DataInputStream.and written to a DataOutputStream. These
- * are usually streams from a Java class file or a class file component of a
- * Jar file.
- *
- * @author Conor MacNeill
- */
-public class ClassFile {
-
-    /** The Magic Value that marks the start of a Java class file  */
-    private static final int CLASS_MAGIC = 0xCAFEBABE;
-
-    /** This class' constant pool.  */
-    private ConstantPool constantPool;
-
-    /** The class name for this class.  */
-    private String className;
-
-    /**
-     * Read the class from a data stream. This method takes an InputStream
-     * as input and parses the class from the stream. <p>
-     *
-     *
-     *
-     * @param stream an InputStream from which the class will be read
-     * @exception IOException if there is a problem reading from the given
-     *      stream.
-     * @exception ClassFormatError if the class cannot be parsed correctly
-     */
-    public void read(InputStream stream) throws IOException, ClassFormatError {
-        DataInputStream classStream = new DataInputStream(stream);
-
-        if (classStream.readInt() != CLASS_MAGIC) {
-            throw new ClassFormatError("No Magic Code Found " 
-                + "- probably not a Java class file.");
-        }
-
-        // right we have a good looking class file.
-        int minorVersion = classStream.readUnsignedShort();
-        int majorVersion = classStream.readUnsignedShort();
-
-        // read the constant pool in and resolve it
-        constantPool = new ConstantPool();
-
-        constantPool.read(classStream);
-        constantPool.resolve();
-
-        int accessFlags = classStream.readUnsignedShort();
-        int thisClassIndex = classStream.readUnsignedShort();
-        int superClassIndex = classStream.readUnsignedShort();
-        ClassCPInfo classInfo 
-            = (ClassCPInfo) constantPool.getEntry(thisClassIndex);
-        className  = classInfo.getClassName();
-    }
-
-
-    /**
-     * Get the classes which this class references.
-     *
-     * @return a vector of class names which this class references
-     */
-    public Vector getClassRefs() {
-
-        Vector classRefs = new Vector();
-
-        for (int i = 0; i < constantPool.size(); ++i) {
-            ConstantPoolEntry entry = constantPool.getEntry(i);
-
-            if (entry != null 
-                && entry.getTag() == ConstantPoolEntry.CONSTANT_CLASS) {
-                ClassCPInfo classEntry = (ClassCPInfo) entry;
-
-                if (!classEntry.getClassName().equals(className)) {
-                    classRefs.addElement(ClassFileUtils.convertSlashName(classEntry.getClassName()));
-                }
-            }
-        }
-
-        return classRefs;
-    }
-
-    /**
-     * Get the class' fully qualified name in dot format.
-     *
-     * @return the class name in dot format (eg. java.lang.Object)
-     */
-    public String getFullClassName() {
-        return ClassFileUtils.convertSlashName(className);
-    }
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/depend/ClassFileIterator.java b/src/main/org/apache/tools/ant/taskdefs/optional/depend/ClassFileIterator.java
deleted file mode 100644
index 33eac59..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/depend/ClassFileIterator.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.depend;
-
-/**
- * Iterator interface for iterating over a set of class files
- *
- * @author Conor MacNeill
- */
-public interface ClassFileIterator {
-
-    /**
-     * Get the next class file in the iteration
-     *
-     * @return the next class file in the iterationr
-     */
-    ClassFile getNextClassFile();
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/depend/ClassFileUtils.java b/src/main/org/apache/tools/ant/taskdefs/optional/depend/ClassFileUtils.java
deleted file mode 100644
index 478a484..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/depend/ClassFileUtils.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.depend;
-
-/**
- * Utility class file routines. This class provides a number of static
- * utility methods to convert between the formats used in the Java class
- * file format and those commonly used in Java programming.
- *
- * @author Conor MacNeill
- * 
- */
-public class ClassFileUtils {
-
-    /**
-     * Convert a class name from class file slash notation to java source
-     * file dot notation.
-     *
-     * @param name the class name in slash notation org/apache/ant
-     * @return the class name in dot notation (eg. java.lang.Object).
-     */
-    public static String convertSlashName(String name) {
-        return name.replace('\\', '.').replace('/', '.');
-    }
-
-    /**
-     * Convert a class name from java source file dot notation to class file
-     * slash notation..
-     *
-     * @param dotName the class name in dot notation (eg. java.lang.Object).
-     * @return the class name in slash notation (eg. java/lang/Object).
-     */
-    public static String convertDotName(String dotName) {
-        return dotName.replace('.', '/');
-    }
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/depend/Depend.java b/src/main/org/apache/tools/ant/taskdefs/optional/depend/Depend.java
deleted file mode 100644
index 60e26ba..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/depend/Depend.java
+++ /dev/null
@@ -1,849 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.depend;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileReader;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.net.URL;
-import java.util.Enumeration;
-import java.util.Hashtable;
-import java.util.Vector;
-
-import org.apache.tools.ant.AntClassLoader;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.DirectoryScanner;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.taskdefs.MatchingTask;
-import org.apache.tools.ant.types.Path;
-import org.apache.tools.ant.types.Reference;
-import org.apache.tools.ant.util.depend.DependencyAnalyzer;
-
-/**
- * Generate a dependency file for a given set of classes
- *
- * @author Conor MacNeill
- */
-public class Depend extends MatchingTask {
-    /**
-     * A class (struct) user to manage information about a class
-     *
-     * @author Conor MacNeill
-     */
-    private static class ClassFileInfo {
-        /** The file where the class file is stored in the file system */
-        private File absoluteFile;
-
-        /** The Java class name of this class */
-        private String className;
-        
-        /** The source File containing this class */
-        private File sourceFile;
-        
-        /** if user has been warned about this file not having a source file */
-        private boolean isUserWarned = false;
-    }
-
-    /** The path where source files exist */
-    private Path srcPath;
-
-    /** The path where compiled class files exist. */
-    private Path destPath;
-
-    /** The directory which contains the dependency cache. */
-    private File cache;
-
-    /** The list of source paths derived from the srcPath field. */
-    private String[] srcPathList;
-    
-    /**
-     * A map which gives for every class a list of the class which it
-     * affects.
-     */
-    private Hashtable affectedClassMap;
-
-    /** A map which gives information about a class */
-    private Hashtable classFileInfoMap;
-
-    /**
-     * A map which gives the list of jars and classes from the classpath
-     * that a class depends upon
-     */
-    private Hashtable classpathDependencies;
-
-    /** The list of classes which are out of date. */
-    private Hashtable outOfDateClasses;
-
-    /**
-     * indicates that the dependency relationships should be extended beyond
-     * direct dependencies to include all classes. So if A directly affects
-     * B abd B directly affects C, then A indirectly affects C.
-     */
-    private boolean closure = false;
-
-    /**
-     * Flag which controls whether the reversed dependencies should be
-     * dumped to the log
-     */
-    private boolean dump = false;
-
-    /** The classpath to look for additional dependencies */
-    private Path dependClasspath;
-
-    /** constants used with the cache file */
-    private static final String CACHE_FILE_NAME = "dependencies.txt";
-    /** String Used to separate classnames in the dependency file */
-    private static final String CLASSNAME_PREPEND = "||:";
-
-    /**
-     * Set the classpath to be used for this dependency check.
-     *
-     * @param classpath the classpath to be used when checking for
-     *      dependencies on elements in the classpath
-     */
-    public void setClasspath(Path classpath) {
-        if (dependClasspath == null) {
-            dependClasspath = classpath;
-        } else {
-            dependClasspath.append(classpath);
-        }
-    }
-
-    /**
-     * Gets the classpath to be used for this dependency check.
-     *
-     * @return the current dependency classpath
-     */
-    public Path getClasspath() {
-        return dependClasspath;
-    }
-
-    /**
-     * Creates a nested classpath element.
-     *
-     * @return A path object to be configured by Ant
-     */
-    public Path createClasspath() {
-        if (dependClasspath == null) {
-            dependClasspath = new Path(project);
-        }
-        return dependClasspath.createPath();
-    }
-
-    /**
-     * Adds a reference to a CLASSPATH defined elsewhere.
-     *
-     * @param r a reference to a path object to be used as the depend
-     *      classpath
-     */
-    public void setClasspathRef(Reference r) {
-        createClasspath().setRefid(r);
-    }
-
-    /**
-     * Read the dependencies from cache file
-     *
-     * @return a collection of class dependencies
-     * @exception IOException if the dependnecy file cannot be read
-     */
-    private Hashtable readCachedDependencies(File depFile) throws IOException {
-        Hashtable dependencyMap = new Hashtable();
-
-        BufferedReader in = null;
-        try {
-            in = new BufferedReader(new FileReader(depFile));
-            String line = null;
-            Vector dependencyList = null;
-            String className = null;
-            int prependLength = CLASSNAME_PREPEND.length();
-            while ((line = in.readLine()) != null) {
-                if (line.startsWith(CLASSNAME_PREPEND)) {
-                    dependencyList = new Vector();
-                    className = line.substring(prependLength);
-                    dependencyMap.put(className, dependencyList);
-                } else {
-                    dependencyList.addElement(line);
-                }
-            }
-        } finally {
-            if (in != null) {
-                in.close();
-            }
-        }
-
-        return dependencyMap;
-    }
-
-    /**
-     * Write the dependencies to cache file
-     *
-     * @param dependencyMap the map of dependencies to be written out.
-     * @exception IOException if the dependency file cannot be written out.
-     */
-    private void writeCachedDependencies(Hashtable dependencyMap)
-         throws IOException {
-        if (cache != null) {
-            PrintWriter pw = null;
-            try {
-                cache.mkdirs();
-                File depFile = new File(cache, CACHE_FILE_NAME);
-
-                pw = new PrintWriter(new FileWriter(depFile));
-                Enumeration e = dependencyMap.keys();
-                while (e.hasMoreElements()) {
-                    String className = (String) e.nextElement();
-
-                    pw.println(CLASSNAME_PREPEND + className);
-
-                    Vector dependencyList
-                         = (Vector) dependencyMap.get(className);
-                    int size = dependencyList.size();
-                    for (int x = 0; x < size; x++) {
-                        pw.println(dependencyList.elementAt(x));
-                    }
-                }
-            } finally {
-                if (pw != null) {
-                    pw.close();
-                }
-            }
-        }
-    }
-
-    /** 
-     * Get the classpath for dependency checking. 
-     * 
-     * This method removes the dest dirs if it is given from the dependency classpath
-     */
-    private Path getCheckClassPath() {
-        if (dependClasspath == null) {
-            return null;
-        }
-        
-        String[] destPathElements = destPath.list();
-        String[] classpathElements = dependClasspath.list();
-        String checkPath = "";
-        for (int i = 0; i < classpathElements.length; ++i) {
-            String element = classpathElements[i];
-            boolean inDestPath = false;
-            for (int j = 0; j < destPathElements.length && !inDestPath; ++j) {
-                inDestPath = destPathElements[j].equals(element);
-            }
-            if (!inDestPath) {
-                if (checkPath.length() == 0) {
-                    checkPath = element;
-                } else {
-                    checkPath += ":" + element;
-                }
-            }
-        }
-        
-        if (checkPath.length() == 0) {
-            return null;
-        }
-        
-        return new Path(getProject(), checkPath);
-    } 
-    
-    /**
-     * Determine the dependencies between classes. Class dependencies are
-     * determined by examining the class references in a class file to other
-     * classes.
-     *
-     * This method sets up the following fields
-     * <ul>
-     *   <li>affectedClassMap - the list of classes each class affects</li>
-     *   <li>classFileInfoMap - information about each class</li>
-     *   <li>classpathDependencies - the list of jars and classes from the 
-     *                             classpath that each class depends upon.</li>
-     * </ul>
-     *
-     * If required, the dependencies are written to the cache.
-     *
-     * @exception IOException if either the dependencies cache or the class
-     *      files cannot be read or written
-     */
-    private void determineDependencies() throws IOException {
-        affectedClassMap = new Hashtable();
-        classFileInfoMap = new Hashtable();
-        boolean cacheDirty = false;
-
-        Hashtable dependencyMap = new Hashtable();
-        File cacheFile = null;
-        boolean cacheFileExists = true;
-        long cacheLastModified = Long.MAX_VALUE;
-
-        // read the dependency cache from the disk
-        if (cache != null) {
-            cacheFile = new File(cache, CACHE_FILE_NAME);
-            cacheFileExists = cacheFile.exists();
-            cacheLastModified = cacheFile.lastModified();
-            if (cacheFileExists) {
-                dependencyMap = readCachedDependencies(cacheFile);
-            }
-        }
-        Enumeration classfileEnum = getClassFiles(destPath).elements();
-        while (classfileEnum.hasMoreElements()) {
-            ClassFileInfo info = (ClassFileInfo) classfileEnum.nextElement();
-            log("Adding class info for " + info.className, Project.MSG_DEBUG);
-            classFileInfoMap.put(info.className, info);
-
-            Vector dependencyList = null;
-
-            if (cache != null) {
-                // try to read the dependency info from the map if it is 
-                // not out of date
-                if (cacheFileExists 
-                    && cacheLastModified > info.absoluteFile.lastModified()) {
-                    // depFile exists and is newer than the class file
-                    // need to get dependency list from the map.
-                    dependencyList = (Vector) dependencyMap.get(info.className);
-                }
-            }
-
-            if (dependencyList == null) {
-                // not cached - so need to read directly from the class file
-                DependencyAnalyzer analyzer = new AntAnalyzer();
-                analyzer.addRootClass(info.className);
-                analyzer.addClassPath(destPath);
-                analyzer.setClosure(false);
-                dependencyList = new Vector();
-                Enumeration depEnum = analyzer.getClassDependencies();
-                while (depEnum.hasMoreElements()) {
-                    dependencyList.addElement(depEnum.nextElement());
-                }
-                if (dependencyList != null) {
-                    cacheDirty = true;
-                    dependencyMap.put(info.className, dependencyList);
-                }
-            }
-
-            // This class depends on each class in the dependency list. For each
-            // one of those, add this class into their affected classes list
-            Enumeration depEnum = dependencyList.elements();
-            while (depEnum.hasMoreElements()) {
-                String dependentClass = (String) depEnum.nextElement();
-
-                Hashtable affectedClasses 
-                    = (Hashtable) affectedClassMap.get(dependentClass);
-                if (affectedClasses == null) {
-                    affectedClasses = new Hashtable();
-                    affectedClassMap.put(dependentClass, affectedClasses);
-                }
-
-                affectedClasses.put(info.className, info);
-            }
-        }
-
-        classpathDependencies = null;
-        Path checkPath = getCheckClassPath();
-        if (checkPath != null) {
-            // now determine which jars each class depends upon
-            classpathDependencies = new Hashtable();
-            AntClassLoader loader 
-                = new AntClassLoader(getProject(), checkPath);
-
-            Hashtable classpathFileCache = new Hashtable();
-            Object nullFileMarker = new Object();
-            for (Enumeration e = dependencyMap.keys(); e.hasMoreElements();) {
-                String className = (String) e.nextElement();
-                Vector dependencyList = (Vector) dependencyMap.get(className);
-                Hashtable dependencies = new Hashtable();
-                classpathDependencies.put(className, dependencies);
-                Enumeration e2 = dependencyList.elements();
-                while (e2.hasMoreElements()) {
-                    String dependency = (String) e2.nextElement();
-                    Object classpathFileObject 
-                        = classpathFileCache.get(dependency);
-                    if (classpathFileObject == null) {
-                        classpathFileObject = nullFileMarker;
-
-                        if (!dependency.startsWith("java.") 
-                            && !dependency.startsWith("javax.")) {
-                            URL classURL = loader.getResource(dependency.replace('.', '/') + ".class");
-                            if (classURL != null) {
-                                if (classURL.getProtocol().equals("jar")) {
-                                    String jarFilePath = classURL.getFile();
-                                    if (jarFilePath.startsWith("file:")) {
-                                        int classMarker = jarFilePath.indexOf('!');
-                                        jarFilePath = jarFilePath.substring(5, classMarker);
-                                    }
-                                    classpathFileObject = new File(jarFilePath);
-                                } else if (classURL.getProtocol().equals("file")) {
-                                    String classFilePath = classURL.getFile();
-                                    classpathFileObject = new File(classFilePath);
-                                }
-                                log("Class " + className +
-                                    " depends on " + classpathFileObject +
-                                    " due to " + dependency, Project.MSG_DEBUG);
-                            }
-                        }
-                        classpathFileCache.put(dependency, classpathFileObject);
-                    }
-                    if (classpathFileObject != null && classpathFileObject != nullFileMarker) {
-                        // we need to add this jar to the list for this class.
-                        File jarFile = (File) classpathFileObject;
-                        dependencies.put(jarFile, jarFile);
-                    }
-                }
-            }
-        }
-
-        // write the dependency cache to the disk
-        if (cache != null && cacheDirty) {
-            writeCachedDependencies(dependencyMap);
-        }
-    }
-
-    /**
-     * Delete all the class files which are out of date, by way of their
-     * dependency on a class which is out of date
-     *
-     * @return the number of files deleted.
-     */
-    private int deleteAllAffectedFiles() {
-        int count = 0;
-        for (Enumeration e = outOfDateClasses.elements(); e.hasMoreElements();) {
-            String className = (String) e.nextElement();
-            count += deleteAffectedFiles(className);
-            ClassFileInfo classInfo 
-                = (ClassFileInfo) classFileInfoMap.get(className);
-            if (classInfo != null && classInfo.absoluteFile.exists()) {
-                classInfo.absoluteFile.delete();
-                count++;
-            }
-        }
-        return count;
-    }
-
-    /**
-     * Delete all the class files of classes which depend on the given class
-     *
-     * @param className the name of the class whose dependent classes willbe
-     *      deleted
-     * @return the number of class files removed
-     */
-    private int deleteAffectedFiles(String className) {
-        int count = 0;
-
-        Hashtable affectedClasses = (Hashtable) affectedClassMap.get(className);
-        if (affectedClasses == null) {
-            return count;
-        }
-        for (Enumeration e = affectedClasses.keys(); e.hasMoreElements();) {
-            String affectedClass = (String) e.nextElement();
-            ClassFileInfo affectedClassInfo 
-                = (ClassFileInfo) affectedClasses.get(affectedClass);
-                
-            if (!affectedClassInfo.absoluteFile.exists()) {
-                continue;
-            }
-                
-            if (affectedClassInfo.sourceFile == null) {
-                if (!affectedClassInfo.isUserWarned) {
-                    log("The class " + affectedClass + " in file " 
-                        + affectedClassInfo.absoluteFile.getPath() 
-                        + " is out of date due to " + className 
-                        + " but has not been deleted because its source file" 
-                        + " could not be determined", Project.MSG_WARN);
-                    affectedClassInfo.isUserWarned = true;
-                }
-                continue;
-            }
-
-            log("Deleting file " + affectedClassInfo.absoluteFile.getPath() 
-                + " since " + className + " out of date", Project.MSG_VERBOSE);
-
-            affectedClassInfo.absoluteFile.delete();
-            count++;
-            if (closure) {
-                count += deleteAffectedFiles(affectedClass);
-            } else {
-                // without closure we may delete an inner class but not the
-                // top level class which would not trigger a recompile.
-
-                if (affectedClass.indexOf("$") == -1) {
-                    continue;
-                }
-                // need to delete the main class
-                String topLevelClassName
-                     = affectedClass.substring(0, affectedClass.indexOf("$"));
-                log("Top level class = " + topLevelClassName, 
-                    Project.MSG_VERBOSE);
-                ClassFileInfo topLevelClassInfo
-                     = (ClassFileInfo) classFileInfoMap.get(topLevelClassName);
-                if (topLevelClassInfo != null &&
-                    topLevelClassInfo.absoluteFile.exists()) {
-                    log("Deleting file " 
-                        + topLevelClassInfo.absoluteFile.getPath() 
-                        + " since one of its inner classes was removed", 
-                        Project.MSG_VERBOSE);
-                    topLevelClassInfo.absoluteFile.delete();
-                    count++;
-                    if (closure) {
-                        count += deleteAffectedFiles(topLevelClassName);
-                    }
-                }
-            }
-        }
-        return count;
-    }
-
-    /**
-     * Dump the dependency information loaded from the classes to the Ant log
-     */
-    private void dumpDependencies() {
-        log("Reverse Dependency Dump for " + affectedClassMap.size() +
-            " classes:", Project.MSG_DEBUG);
-
-        Enumeration classEnum = affectedClassMap.keys();                    
-        while (classEnum.hasMoreElements()) {
-            String className = (String) classEnum.nextElement();
-            log(" Class " + className + " affects:", Project.MSG_DEBUG);
-            Hashtable affectedClasses 
-                = (Hashtable) affectedClassMap.get(className);
-            Enumeration affectedClassEnum = affectedClasses.keys();                
-            while (affectedClassEnum.hasMoreElements()) {
-                String affectedClass = (String) affectedClassEnum.nextElement();
-                ClassFileInfo info 
-                    = (ClassFileInfo) affectedClasses.get(affectedClass);
-                log("    " + affectedClass + " in " 
-                    + info.absoluteFile.getPath(), Project.MSG_DEBUG);
-            }
-        }
-
-        if (classpathDependencies != null) {
-            log("Classpath file dependencies (Forward):", Project.MSG_DEBUG);
-            
-            Enumeration classpathEnum = classpathDependencies.keys(); 
-            while (classpathEnum.hasMoreElements()) {
-                String className = (String) classpathEnum.nextElement();
-                log(" Class " + className + " depends on:", Project.MSG_DEBUG);
-                Hashtable dependencies 
-                    = (Hashtable) classpathDependencies.get(className);
-
-                Enumeration classpathFileEnum = dependencies.elements();                    
-                while (classpathFileEnum.hasMoreElements()) {
-                    File classpathFile = (File) classpathFileEnum.nextElement();
-                    log("    " + classpathFile.getPath(), Project.MSG_DEBUG);
-                }
-            }
-        }
-    }
-
-    private void determineOutOfDateClasses() {
-        outOfDateClasses = new Hashtable();
-        for (int i = 0; i < srcPathList.length; i++) {
-            File srcDir = (File) project.resolveFile(srcPathList[i]);
-            if (srcDir.exists()) {
-                DirectoryScanner ds = this.getDirectoryScanner(srcDir);
-                String[] files = ds.getIncludedFiles();
-                scanDir(srcDir, files);
-            }
-        }
-    
-        // now check classpath file dependencies
-        if (classpathDependencies == null) {
-            return;
-        }
-
-        Enumeration classpathDepsEnum = classpathDependencies.keys();
-        while (classpathDepsEnum.hasMoreElements()) {
-            String className = (String) classpathDepsEnum.nextElement();
-            if (outOfDateClasses.containsKey(className)) {
-                continue;
-            }
-            ClassFileInfo info 
-                = (ClassFileInfo) classFileInfoMap.get(className);
-
-            // if we have no info about the class - it may have been deleted already and we
-            // are using cached info.
-            if (info != null) {
-                Hashtable dependencies 
-                    = (Hashtable) classpathDependencies.get(className);
-                for (Enumeration e2 = dependencies.elements(); e2.hasMoreElements();) {
-                    File classpathFile = (File) e2.nextElement();
-                    if (classpathFile.lastModified() 
-                        > info.absoluteFile.lastModified()) {
-                        log("Class " + className +
-                            " is out of date with respect to " + classpathFile, Project.MSG_DEBUG);
-                        outOfDateClasses.put(className, className);
-                        break;
-                    }
-                }
-            }
-        }
-    }
-    
-    /**
-     * Does the work.
-     *
-     * @exception BuildException Thrown in case of an unrecoverable error.
-     */
-    public void execute() throws BuildException {
-        try {
-            long start = System.currentTimeMillis();
-            if (srcPath == null) {
-                throw new BuildException("srcdir attribute must be set", 
-                    location);
-            }
-
-            srcPathList = srcPath.list();
-            if (srcPathList.length == 0) {
-                throw new BuildException("srcdir attribute must be non-empty", 
-                    location);
-            }
-
-            if (destPath == null) {
-                destPath = srcPath;
-            }
-
-            if (cache != null && cache.exists() && !cache.isDirectory()) {
-                throw new BuildException("The cache, if specified, must " 
-                    + "point to a directory");
-            }
-
-            if (cache != null && !cache.exists()) {
-                cache.mkdirs();
-            }
-
-            determineDependencies();
-            if (dump) {
-                dumpDependencies();
-            }
-            determineOutOfDateClasses();
-            int count = deleteAllAffectedFiles();
-
-            long duration = (System.currentTimeMillis() - start) / 1000;
-            log("Deleted " + count + " out of date files in " 
-                + duration + " seconds");
-        } catch (Exception e) {
-            throw new BuildException(e);
-        }
-    }
-
-    /**
-     * Scans the directory looking for source files that are newer than
-     * their class files. The results are returned in the class variable
-     * compileList
-     *
-     * @param srcDir the source directory
-     * @param files the names of the files in the source dir which are to be
-     *      checked.
-     */
-    protected void scanDir(File srcDir, String files[]) {
-
-        long now = System.currentTimeMillis();
-
-        for (int i = 0; i < files.length; i++) {
-            File srcFile = new File(srcDir, files[i]);
-            if (files[i].endsWith(".java")) {
-                String filePath = srcFile.getPath();
-                String className 
-                    = filePath.substring(srcDir.getPath().length() + 1,
-                        filePath.length() - ".java".length());
-                className = ClassFileUtils.convertSlashName(className);
-                ClassFileInfo info 
-                    = (ClassFileInfo) classFileInfoMap.get(className);
-                if (info == null) {
-                    // there was no class file. add this class to the list
-                    outOfDateClasses.put(className, className);
-                } else {
-                    if (srcFile.lastModified() 
-                        > info.absoluteFile.lastModified()) {
-                        outOfDateClasses.put(className, className);
-                    }
-                }
-            }
-        }
-    }
-
-
-    /**
-     * Get the list of class files we are going to analyse.
-     *
-     * @param classLocations a path structure containing all the directories
-     *      where classes can be found.
-     * @return a vector containing the classes to analyse.
-     */
-    private Vector getClassFiles(Path classLocations) {
-        // break the classLocations into its components.
-        String[] classLocationsList = classLocations.list();
-
-        Vector classFileList = new Vector();
-
-        for (int i = 0; i < classLocationsList.length; ++i) {
-            File dir = new File(classLocationsList[i]);
-            if (dir.isDirectory()) {
-                addClassFiles(classFileList, dir, dir);
-            }
-        }
-
-        return classFileList;
-    }
-
-    /**
-     * Find the source file for a given class
-     *
-     * @param classname the classname in slash format.
-     */
-    private File findSourceFile(String classname) {
-        String sourceFilename = classname + ".java";
-        int innerIndex = classname.indexOf("$");
-        if (innerIndex != -1) {
-            sourceFilename = classname.substring(0, innerIndex) + ".java";
-        }
-        
-        // search the various source path entries
-        for (int i = 0; i < srcPathList.length; ++i) {
-            File sourceFile = new File(srcPathList[i], sourceFilename);
-            if (sourceFile.exists()) {
-                return sourceFile;
-            }
-        }
-        return null;
-    }
-    
-    /**
-     * Add the list of class files from the given directory to the class
-     * file vector, including any subdirectories.
-     *
-     * @param classFileList a list of ClassFileInfo objects for all the
-     *      files in the diretcort tree
-     * @param dir tyhe directory tree to be searched, recursivley, for class
-     *      files
-     * @param root the root of the source tree. This is used to determine
-     *      the absoluate class name from the relative position in the
-     *      source tree
-     */
-    private void addClassFiles(Vector classFileList, File dir, File root) {
-        String[] filesInDir = dir.list();
-
-        if (filesInDir == null) {
-            return;
-        }
-        int length = filesInDir.length;
-
-        int rootLength = root.getPath().length();
-        for (int i = 0; i < length; ++i) {
-            File file = new File(dir, filesInDir[i]);
-            if (file.isDirectory()) {
-                addClassFiles(classFileList, file, root);
-            } else if (file.getName().endsWith(".class")) {
-                ClassFileInfo info = new ClassFileInfo();
-                info.absoluteFile = file;
-                String relativeName = file.getPath().substring(rootLength + 1,
-                    file.getPath().length() - 6);
-                info.className 
-                    = ClassFileUtils.convertSlashName(relativeName);
-                info.sourceFile = findSourceFile(relativeName);    
-                classFileList.addElement(info);
-            }
-        }
-    }
-
-
-    /**
-     * Set the source dirs to find the source Java files.
-     *
-     * @param srcPath the source path
-     */
-    public void setSrcdir(Path srcPath) {
-        this.srcPath = srcPath;
-    }
-
-    /**
-     * Set the destination directory where the compiled java files exist.
-     *
-     * @param destPath the destination areas where build files are written
-     */
-    public void setDestDir(Path destPath) {
-        this.destPath = destPath;
-    }
-
-    /**
-     * Sets the dependency cache file
-     *
-     * @param cache the dependency cache file
-     */
-    public void setCache(File cache) {
-        this.cache = cache;
-    }
-
-    /**
-     * Set the closure flag. When not set, the depend task will only follow
-     * direct dependencies between classes. When set, transitive
-     * dependencies are followed until the closure of the dependency set if
-     * reached.
-     *
-     * @param closure indicate if dependency closure is required.
-     */
-    public void setClosure(boolean closure) {
-        this.closure = closure;
-    }
-
-    /**
-     * Flag to indicate whether the reverse dependency list should be dumped
-     * to debug
-     *
-     * @param dump set to true to dump dependency information to the log
-     */
-    public void setDump(boolean dump) {
-        this.dump = dump;
-    }
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/depend/DirectoryIterator.java b/src/main/org/apache/tools/ant/taskdefs/optional/depend/DirectoryIterator.java
deleted file mode 100644
index 4a4a86b..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/depend/DirectoryIterator.java
+++ /dev/null
@@ -1,213 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.depend;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.util.Enumeration;
-import java.util.Stack;
-import java.util.Vector;
-
-/**
- * An iterator which iterates through the contents of a java directory. The
- * iterator should be created with the directory at the root of the Java
- * namespace.
- *
- * @author Conor MacNeill
- */
-public class DirectoryIterator implements ClassFileIterator {
-
-    /**
-     * This is a stack of current iterators supporting the depth first
-     * traversal of the directory tree.
-     */
-    private Stack enumStack;
-
-    /**
-     * The current directory iterator. As directories encounter lower level
-     * directories, the current iterator is pushed onto the iterator stack
-     * and a new iterator over the sub directory becomes the current
-     * directory. This implements a depth first traversal of the directory
-     * namespace.
-     */
-    private Enumeration currentEnum;
-
-    /**
-     * The length of the root directory. This is used to remove the root
-     * directory from full paths.
-     */
-    private int rootLength;
-
-    /**
-     * Creates a directory iterator. The directory iterator is created to
-     * scan the root directory. If the changeInto flag is given, then the
-     * entries returned will be relative to this directory and not the
-     * current directory.
-     *
-     * @param rootDirectory the root if the directory namespace which is to
-     *      be iterated over
-     * @param changeInto if true then the returned entries will be relative
-     *      to the rootDirectory and not the current directory.
-     * @exception IOException if there is a problem reading the directory
-     *      information.
-     */
-    public DirectoryIterator(File rootDirectory, boolean changeInto)
-         throws IOException {
-        super();
-
-        enumStack = new Stack();
-
-        if (rootDirectory.isAbsolute() || changeInto) {
-            rootLength = rootDirectory.getPath().length() + 1;
-        } else {
-            rootLength = 0;
-        }
-
-        Vector filesInRoot = getDirectoryEntries(rootDirectory);
-
-        currentEnum = filesInRoot.elements();
-    }
-
-    /**
-     * Get a vector covering all the entries (files and subdirectories in a
-     * directory).
-     *
-     * @param directory the directory to be scanned.
-     * @return a vector containing File objects for each entry in the
-     *      directory.
-     */
-    private Vector getDirectoryEntries(File directory) {
-        Vector files = new Vector();
-
-        // File[] filesInDir = directory.listFiles();
-        String[] filesInDir = directory.list();
-
-        if (filesInDir != null) {
-            int length = filesInDir.length;
-
-            for (int i = 0; i < length; ++i) {
-                files.addElement(new File(directory, filesInDir[i]));
-            }
-        }
-
-        return files;
-    }
-
-    /**
-     * Template method to allow subclasses to supply elements for the
-     * iteration. The directory iterator maintains a stack of iterators
-     * covering each level in the directory hierarchy. The current iterator
-     * covers the current directory being scanned. If the next entry in that
-     * directory is a subdirectory, the current iterator is pushed onto the
-     * stack and a new iterator is created for the subdirectory. If the
-     * entry is a file, it is returned as the next element and the iterator
-     * remains valid. If there are no more entries in the current directory,
-     * the topmost iterator on the statck is popped off to become the
-     * current iterator.
-     *
-     * @return the next ClassFile in the iteration.
-     */
-    public ClassFile getNextClassFile() {
-        ClassFile nextElement = null;
-
-        try {
-            while (nextElement == null) {
-                if (currentEnum.hasMoreElements()) {
-                    File element = (File) currentEnum.nextElement();
-
-                    if (element.isDirectory()) {
-
-                        // push the current iterator onto the stack and then
-                        // iterate through this directory.
-                        enumStack.push(currentEnum);
-
-                        Vector files = getDirectoryEntries(element);
-
-                        currentEnum = files.elements();
-                    } else {
-
-                        // we have a file. create a stream for it
-                        FileInputStream inFileStream 
-                            = new FileInputStream(element);
-
-                        if (element.getName().endsWith(".class")) {
-
-                            // create a data input stream from the jar 
-                            // input stream
-                            ClassFile javaClass = new ClassFile();
-
-                            javaClass.read(inFileStream);
-
-                            nextElement = javaClass;
-                        }
-                    }
-                } else {
-                    // this iterator is exhausted. Can we pop one off the stack
-                    if (enumStack.empty()) {
-                        break;
-                    } else {
-                        currentEnum = (Enumeration) enumStack.pop();
-                    }
-                }
-            }
-        } catch (IOException e) {
-            nextElement = null;
-        }
-
-        return nextElement;
-    }
-
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/depend/JarFileIterator.java b/src/main/org/apache/tools/ant/taskdefs/optional/depend/JarFileIterator.java
deleted file mode 100644
index 39f657f..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/depend/JarFileIterator.java
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.depend;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipInputStream;
-
-/**
- * A class file iterator which iterates through the contents of a Java jar
- * file.
- *
- * @author Conor MacNeill
- */
-public class JarFileIterator implements ClassFileIterator {
-    /** The jar stream from the jar file being iterated over*/
-    private ZipInputStream jarStream;
-
-    /**
-     * Construct a iterartor over a jar stream
-     *
-     * @param stream the basic input stream from which the Jar is recived
-     * @exception IOException if the jar stream connot be created
-     */
-    public JarFileIterator(InputStream stream) throws IOException {
-        super();
-
-        jarStream = new ZipInputStream(stream);
-    }
-
-    /**
-     * Read a stream into an array of bytes
-     *
-     * @param stream the stream from which the bytes are read
-     * @return the stream's content as a byte array
-     * @exception IOException if the stream cannot be read
-     */
-    private byte[] getEntryBytes(InputStream stream) throws IOException {
-        byte[] buffer = new byte[8192];
-        ByteArrayOutputStream baos = new ByteArrayOutputStream(2048);
-        int n;
-
-        while ((n = stream.read(buffer, 0, buffer.length)) != -1) {
-            baos.write(buffer, 0, n);
-        }
-
-        return baos.toByteArray();
-    }
-
-    /**
-     * Get the next ClassFile object from the jar
-     *
-     * @return a ClassFile object describing the class from the jar
-     */
-    public ClassFile getNextClassFile() {
-        ZipEntry jarEntry;
-        ClassFile nextElement = null;
-
-        try {
-            jarEntry = jarStream.getNextEntry();
-
-            while (nextElement == null && jarEntry != null) {
-                String entryName = jarEntry.getName();
-
-                if (!jarEntry.isDirectory() && entryName.endsWith(".class")) {
-
-                    // create a data input stream from the jar input stream
-                    ClassFile javaClass = new ClassFile();
-
-                    javaClass.read(jarStream);
-
-                    nextElement = javaClass;
-                } else {
-
-                    jarEntry = jarStream.getNextEntry();
-                }
-            }
-        } catch (IOException e) {
-            String message = e.getMessage();
-            String text = e.getClass().getName();
-
-            if (message != null) {
-                text += ": " + message;
-            }
-
-            throw new RuntimeException("Problem reading JAR file: " + text);
-        }
-
-        return nextElement;
-    }
-
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/depend/constantpool/ClassCPInfo.java b/src/main/org/apache/tools/ant/taskdefs/optional/depend/constantpool/ClassCPInfo.java
deleted file mode 100644
index c65ced5..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/depend/constantpool/ClassCPInfo.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.depend.constantpool;
-
-import java.io.DataInputStream;
-import java.io.IOException;
-
-/**
- * The constant pool entry which stores class information.
- *
- * @author Conor MacNeill
- */
-public class ClassCPInfo extends ConstantPoolEntry {
-
-    /**
-     * The class' name. This will be only valid if the entry has been
-     * resolved against the constant pool.
-     */
-    private String className;
-
-    /**
-     * The index into the constant pool where this class' name is stored. If
-     * the class name is changed, this entry is invalid until this entry is
-     * connected to a constant pool.
-     */
-    private int index;
-
-    /**
-     * Constructor. Sets the tag value for this entry to type Class
-     */
-    public ClassCPInfo() {
-        super(CONSTANT_CLASS, 1);
-    }
-
-    /**
-     * Read the entry from a stream.
-     *
-     * @param cpStream the stream containing the constant pool entry to be
-     *      read.
-     * @exception IOException thrown if there is a problem reading the entry
-     *      from the stream.
-     */
-    public void read(DataInputStream cpStream) throws IOException {
-        index = cpStream.readUnsignedShort();
-        className = "unresolved";
-    }
-
-    /**
-     * Generate a string readable version of this entry
-     *
-     * @return string representation of this constant pool entry
-     */
-    public String toString() {
-        return "Class Constant Pool Entry for " + className + "[" + index + "]";
-    }
-
-    /**
-     * Resolve this class info against the given constant pool.
-     *
-     * @param constantPool the constant pool with which to resolve the
-     *      class.
-     */
-    public void resolve(ConstantPool constantPool) {
-        className = ((Utf8CPInfo) constantPool.getEntry(index)).getValue();
-
-        super.resolve(constantPool);
-    }
-
-    /**
-     * Get the class name of this entry.
-     *
-     * @return the class' name.
-     */
-    public String getClassName() {
-        return className;
-    }
-
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/depend/constantpool/ConstantCPInfo.java b/src/main/org/apache/tools/ant/taskdefs/optional/depend/constantpool/ConstantCPInfo.java
deleted file mode 100644
index 278a319..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/depend/constantpool/ConstantCPInfo.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.depend.constantpool;
-
-/**
- * A Constant Pool entry which represents a constant value.
- *
- * @author Conor MacNeill
- */
-public abstract class ConstantCPInfo extends ConstantPoolEntry {
-
-    /**
-     * The entry's untyped value. Each subclass interprets the constant
-     * value based on the subclass's type. The value here must be
-     * compatible.
-     */
-    private Object value;
-
-    /**
-     * Initialise the constant entry.
-     *
-     * @param tagValue the constant pool entry type to be used.
-     * @param entries the number of constant pool entry slots occupied by
-     *      this entry.
-     */
-    protected ConstantCPInfo(int tagValue, int entries) {
-        super(tagValue, entries);
-    }
-
-    /**
-     * Get the value of the constant.
-     *
-     * @return the value of the constant (untyped).
-     */
-    public Object getValue() {
-        return value;
-    }
-
-    /**
-     * Set the constant value.
-     *
-     * @param newValue the new untyped value of this constant.
-     */
-    public void setValue(Object newValue) {
-        value = newValue;
-    }
-
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/depend/constantpool/ConstantPool.java b/src/main/org/apache/tools/ant/taskdefs/optional/depend/constantpool/ConstantPool.java
deleted file mode 100644
index eb1878c..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/depend/constantpool/ConstantPool.java
+++ /dev/null
@@ -1,391 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.depend.constantpool;
-
-import java.io.DataInputStream;
-import java.io.IOException;
-import java.util.Enumeration;
-import java.util.Hashtable;
-import java.util.Vector;
-
-/**
- * The constant pool of a Java class. The constant pool is a collection of
- * constants used in a Java class file. It stores strings, constant values,
- * class names, method names, field names etc.
- *
- * @author Conor MacNeill
- * @see <a href="http://java.sun.com/docs/books/vmspec/">The Java Virtual
- *      Machine Specification</a>
- */
-public class ConstantPool {
-
-    /** The entries in the constant pool. */
-    private Vector entries;
-
-    /**
-     * A Hashtable of UTF8 entries - used to get constant pool indexes of
-     * the UTF8 values quickly
-     */
-    private Hashtable utf8Indexes;
-
-    /** Initialise the constant pool. */
-    public ConstantPool() {
-        entries = new Vector();
-
-        // The zero index is never present in the constant pool itself so
-        // we add a null entry for it
-        entries.addElement(null);
-
-        utf8Indexes = new Hashtable();
-    }
-
-    /**
-     * Read the constant pool from a class input stream.
-     *
-     * @param classStream the DataInputStream of a class file.
-     * @exception IOException if there is a problem reading the constant pool
-     *      from the stream
-     */
-    public void read(DataInputStream classStream) throws IOException {
-        int numEntries = classStream.readUnsignedShort();
-
-        for (int i = 1; i < numEntries;) {
-            ConstantPoolEntry nextEntry
-                 = ConstantPoolEntry.readEntry(classStream);
-
-            i += nextEntry.getNumEntries();
-
-            addEntry(nextEntry);
-        }
-    }
-
-    /**
-     * Get the size of the constant pool.
-     *
-     * @return the size of the constant pool
-     */
-    public int size() {
-        return entries.size();
-    }
-
-    /**
-     * Add an entry to the constant pool.
-     *
-     * @param entry the new entry to be added to the constant pool.
-     * @return the index into the constant pool at which the entry is
-     *      stored.
-     */
-    public int addEntry(ConstantPoolEntry entry) {
-        int index = entries.size();
-
-        entries.addElement(entry);
-
-        int numSlots = entry.getNumEntries();
-
-        // add null entries for any additional slots required.
-        for (int j = 0; j < numSlots - 1; ++j) {
-            entries.addElement(null);
-        }
-
-        if (entry instanceof Utf8CPInfo) {
-            Utf8CPInfo utf8Info = (Utf8CPInfo) entry;
-
-            utf8Indexes.put(utf8Info.getValue(), new Integer(index));
-        }
-
-        return index;
-    }
-
-    /**
-     * Resolve the entries in the constant pool. Resolution of the constant
-     * pool involves transforming indexes to other constant pool entries
-     * into the actual data for that entry.
-     */
-    public void resolve() {
-        for (Enumeration i = entries.elements(); i.hasMoreElements();) {
-            ConstantPoolEntry poolInfo = (ConstantPoolEntry) i.nextElement();
-
-            if (poolInfo != null && !poolInfo.isResolved()) {
-                poolInfo.resolve(this);
-            }
-        }
-    }
-
-
-    /**
-     * Get an constant pool entry at a particular index.
-     *
-     * @param index the index into the constant pool.
-     * @return the constant pool entry at that index.
-     */
-    public ConstantPoolEntry getEntry(int index) {
-        return (ConstantPoolEntry) entries.elementAt(index);
-    }
-
-    /**
-     * Get the index of a given UTF8 constant pool entry.
-     *
-     * @param value the string value of the UTF8 entry.
-     * @return the index at which the given string occurs in the constant
-     *      pool or -1 if the value does not occur.
-     */
-    public int getUTF8Entry(String value) {
-        int index = -1;
-        Integer indexInteger = (Integer) utf8Indexes.get(value);
-
-        if (indexInteger != null) {
-            index = indexInteger.intValue();
-        }
-
-        return index;
-    }
-
-    /**
-     * Get the index of a given CONSTANT_CLASS entry in the constant pool.
-     *
-     * @param className the name of the class for which the class entry
-     *      index is required.
-     * @return the index at which the given class entry occurs in the
-     *      constant pool or -1 if the value does not occur.
-     */
-    public int getClassEntry(String className) {
-        int index = -1;
-
-        for (int i = 0; i < entries.size() && index == -1; ++i) {
-            Object element = entries.elementAt(i);
-
-            if (element instanceof ClassCPInfo) {
-                ClassCPInfo classinfo = (ClassCPInfo) element;
-
-                if (classinfo.getClassName().equals(className)) {
-                    index = i;
-                }
-            }
-        }
-
-        return index;
-    }
-
-    /**
-     * Get the index of a given constant value entry in the constant pool.
-     *
-     * @param constantValue the constant value for which the index is
-     *      required.
-     * @return the index at which the given value entry occurs in the
-     *      constant pool or -1 if the value does not occur.
-     */
-    public int getConstantEntry(Object constantValue) {
-        int index = -1;
-
-        for (int i = 0; i < entries.size() && index == -1; ++i) {
-            Object element = entries.elementAt(i);
-
-            if (element instanceof ConstantCPInfo) {
-                ConstantCPInfo constantEntry = (ConstantCPInfo) element;
-
-                if (constantEntry.getValue().equals(constantValue)) {
-                    index = i;
-                }
-            }
-        }
-
-        return index;
-    }
-
-    /**
-     * Get the index of a given CONSTANT_METHODREF entry in the constant
-     * pool.
-     *
-     * @param methodClassName the name of the class which contains the
-     *      method being referenced.
-     * @param methodName the name of the method being referenced.
-     * @param methodType the type descriptor of the metho dbeing referenced.
-     * @return the index at which the given method ref entry occurs in the
-     *      constant pool or -1 if the value does not occur.
-     */
-    public int getMethodRefEntry(String methodClassName, String methodName,
-                                 String methodType) {
-        int index = -1;
-
-        for (int i = 0; i < entries.size() && index == -1; ++i) {
-            Object element = entries.elementAt(i);
-
-            if (element instanceof MethodRefCPInfo) {
-                MethodRefCPInfo methodRefEntry = (MethodRefCPInfo) element;
-
-                if (methodRefEntry.getMethodClassName().equals(methodClassName)
-                     && methodRefEntry.getMethodName().equals(methodName)
-                     && methodRefEntry.getMethodType().equals(methodType)) {
-                    index = i;
-                }
-            }
-        }
-
-        return index;
-    }
-
-    /**
-     * Get the index of a given CONSTANT_INTERFACEMETHODREF entry in the
-     * constant pool.
-     *
-     * @param interfaceMethodClassName the name of the interface which
-     *      contains the method being referenced.
-     * @param interfaceMethodName the name of the method being referenced.
-     * @param interfaceMethodType the type descriptor of the metho dbeing
-     *      referenced.
-     * @return the index at which the given method ref entry occurs in the
-     *      constant pool or -1 if the value does not occur.
-     */
-    public int getInterfaceMethodRefEntry(String interfaceMethodClassName,
-                                          String interfaceMethodName,
-                                          String interfaceMethodType) {
-        int index = -1;
-
-        for (int i = 0; i < entries.size() && index == -1; ++i) {
-            Object element = entries.elementAt(i);
-
-            if (element instanceof InterfaceMethodRefCPInfo) {
-                InterfaceMethodRefCPInfo interfaceMethodRefEntry
-                     = (InterfaceMethodRefCPInfo) element;
-
-                if (interfaceMethodRefEntry.getInterfaceMethodClassName().equals(interfaceMethodClassName)
-                     && interfaceMethodRefEntry.getInterfaceMethodName().equals(interfaceMethodName)
-                     && interfaceMethodRefEntry.getInterfaceMethodType().equals(interfaceMethodType)) {
-                    index = i;
-                }
-            }
-        }
-
-        return index;
-    }
-
-    /**
-     * Get the index of a given CONSTANT_FIELDREF entry in the constant
-     * pool.
-     *
-     * @param fieldClassName the name of the class which contains the field
-     *      being referenced.
-     * @param fieldName the name of the field being referenced.
-     * @param fieldType the type descriptor of the field being referenced.
-     * @return the index at which the given field ref entry occurs in the
-     *      constant pool or -1 if the value does not occur.
-     */
-    public int getFieldRefEntry(String fieldClassName, String fieldName,
-                                String fieldType) {
-        int index = -1;
-
-        for (int i = 0; i < entries.size() && index == -1; ++i) {
-            Object element = entries.elementAt(i);
-
-            if (element instanceof FieldRefCPInfo) {
-                FieldRefCPInfo fieldRefEntry = (FieldRefCPInfo) element;
-
-                if (fieldRefEntry.getFieldClassName().equals(fieldClassName)
-                     && fieldRefEntry.getFieldName().equals(fieldName)
-                     && fieldRefEntry.getFieldType().equals(fieldType)) {
-                    index = i;
-                }
-            }
-        }
-
-        return index;
-    }
-
-    /**
-     * Get the index of a given CONSTANT_NAMEANDTYPE entry in the constant
-     * pool.
-     *
-     * @param name the name
-     * @param type the type
-     * @return the index at which the given NameAndType entry occurs in the
-     *      constant pool or -1 if the value does not occur.
-     */
-    public int getNameAndTypeEntry(String name, String type) {
-        int index = -1;
-
-        for (int i = 0; i < entries.size() && index == -1; ++i) {
-            Object element = entries.elementAt(i);
-
-            if (element instanceof NameAndTypeCPInfo) {
-                NameAndTypeCPInfo nameAndTypeEntry 
-                    = (NameAndTypeCPInfo) element;
-
-                if (nameAndTypeEntry.getName().equals(name)
-                     && nameAndTypeEntry.getType().equals(type)) {
-                    index = i;
-                }
-            }
-        }
-
-        return index;
-    }
-
-    /**
-     * Dump the constant pool to a string.
-     *
-     * @return the constant pool entries as strings
-     */
-    public String toString() {
-        StringBuffer sb = new StringBuffer("\n");
-        int size = entries.size();
-
-        for (int i = 0; i < size; ++i) {
-            sb.append("[" + i + "] = " + getEntry(i) + "\n");
-        }
-
-        return sb.toString();
-    }
-
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/depend/constantpool/ConstantPoolEntry.java b/src/main/org/apache/tools/ant/taskdefs/optional/depend/constantpool/ConstantPoolEntry.java
deleted file mode 100644
index 121bdc0..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/depend/constantpool/ConstantPoolEntry.java
+++ /dev/null
@@ -1,258 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.depend.constantpool;
-
-import java.io.DataInputStream;
-import java.io.IOException;
-
-/**
- * An entry in the constant pool. This class contains a represenation of the
- * constant pool entries. It is an abstract base class for all the different
- * forms of constant pool entry.
- *
- * @author Conor MacNeill
- * @see ConstantPool
- */
-public abstract class ConstantPoolEntry {
-
-    /** Tag value for UTF8 entries. */
-    public static final int CONSTANT_UTF8 = 1;
-
-    /** Tag value for Integer entries. */
-    public static final int CONSTANT_INTEGER = 3;
-
-    /** Tag value for Float entries. */
-    public static final int CONSTANT_FLOAT = 4;
-
-    /** Tag value for Long entries. */
-    public static final int CONSTANT_LONG = 5;
-
-    /** Tag value for Double entries. */
-    public static final int CONSTANT_DOUBLE = 6;
-
-    /** Tag value for Class entries. */
-    public static final int CONSTANT_CLASS = 7;
-
-    /** Tag value for String entries. */
-    public static final int CONSTANT_STRING = 8;
-
-    /** Tag value for Field Reference entries. */
-    public static final int CONSTANT_FIELDREF = 9;
-
-    /** Tag value for Method Reference entries. */
-    public static final int CONSTANT_METHODREF = 10;
-
-    /** Tag value for Interface Method Reference entries. */
-    public static final int CONSTANT_INTERFACEMETHODREF = 11;
-
-    /** Tag value for Name and Type entries. */
-    public static final int CONSTANT_NAMEANDTYPE = 12;
-
-    /**
-     * This entry's tag which identifies the type of this constant pool
-     * entry.
-     */
-    private int tag;
-
-    /**
-     * The number of slots in the constant pool, occupied by this entry.
-     */
-    private int numEntries;
-
-    /**
-     * A flag which indiciates if this entry has been resolved or not.
-     */
-    private boolean resolved;
-
-    /**
-     * Initialse the constant pool entry.
-     *
-     * @param tagValue the tag value which identifies which type of constant
-     *      pool entry this is.
-     * @param entries the number of constant pool entry slots this entry
-     *      occupies.
-     */
-    public ConstantPoolEntry(int tagValue, int entries) {
-        tag = tagValue;
-        numEntries = entries;
-        resolved = false;
-    }
-
-    /**
-     * Read a constant pool entry from a stream. This is a factory method
-     * which reads a constant pool entry form a stream and returns the
-     * appropriate subclass for the entry.
-     *
-     * @param cpStream the stream from which the constant pool entry is to
-     *      be read.
-     * @return the appropriate ConstantPoolEntry subclass representing the
-     *      constant pool entry from the stream.
-     * @exception IOException if the constant pool entry cannot be read 
-     *      from the stream
-     */
-    public static ConstantPoolEntry readEntry(DataInputStream cpStream)
-         throws IOException {
-        ConstantPoolEntry cpInfo = null;
-        int cpTag = cpStream.readUnsignedByte();
-
-        switch (cpTag) {
-
-            case CONSTANT_UTF8:
-                cpInfo = new Utf8CPInfo();
-
-                break;
-            case CONSTANT_INTEGER:
-                cpInfo = new IntegerCPInfo();
-
-                break;
-            case CONSTANT_FLOAT:
-                cpInfo = new FloatCPInfo();
-
-                break;
-            case CONSTANT_LONG:
-                cpInfo = new LongCPInfo();
-
-                break;
-            case CONSTANT_DOUBLE:
-                cpInfo = new DoubleCPInfo();
-
-                break;
-            case CONSTANT_CLASS:
-                cpInfo = new ClassCPInfo();
-
-                break;
-            case CONSTANT_STRING:
-                cpInfo = new StringCPInfo();
-
-                break;
-            case CONSTANT_FIELDREF:
-                cpInfo = new FieldRefCPInfo();
-
-                break;
-            case CONSTANT_METHODREF:
-                cpInfo = new MethodRefCPInfo();
-
-                break;
-            case CONSTANT_INTERFACEMETHODREF:
-                cpInfo = new InterfaceMethodRefCPInfo();
-
-                break;
-            case CONSTANT_NAMEANDTYPE:
-                cpInfo = new NameAndTypeCPInfo();
-
-                break;
-            default:
-                throw new ClassFormatError("Invalid Constant Pool entry Type "
-                     + cpTag);
-        }
-
-        cpInfo.read(cpStream);
-
-        return cpInfo;
-    }
-
-    /**
-     * Indicates whether this entry has been resolved. In general a constant
-     * pool entry can reference another constant pool entry by its index
-     * value. Resolution involves replacing this index value with the
-     * constant pool entry at that index.
-     *
-     * @return true if this entry has been resolved.
-     */
-    public boolean isResolved() {
-        return resolved;
-    }
-
-    /**
-     * Resolve this constant pool entry with respect to its dependents in
-     * the constant pool.
-     *
-     * @param constantPool the constant pool of which this entry is a member
-     *      and against which this entry is to be resolved.
-     */
-    public void resolve(ConstantPool constantPool) {
-        resolved = true;
-    }
-
-    /**
-     * read a constant pool entry from a class stream.
-     *
-     * @param cpStream the DataInputStream which contains the constant pool
-     *      entry to be read.
-     * @exception IOException if there is a problem reading the entry from
-     *      the stream.
-     */
-    public abstract void read(DataInputStream cpStream) throws IOException;
-
-    /**
-     * Get the Entry's type tag.
-     *
-     * @return The Tag value of this entry
-     */
-    public int getTag() {
-        return tag;
-    }
-
-    /**
-     * Get the number of Constant Pool Entry slots within the constant pool
-     * occupied by this entry.
-     *
-     * @return the number of slots used.
-     */
-    public final int getNumEntries() {
-        return numEntries;
-    }
-
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/depend/constantpool/DoubleCPInfo.java b/src/main/org/apache/tools/ant/taskdefs/optional/depend/constantpool/DoubleCPInfo.java
deleted file mode 100644
index 488b4a3..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/depend/constantpool/DoubleCPInfo.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.depend.constantpool;
-
-import java.io.DataInputStream;
-import java.io.IOException;
-
-/**
- * The constant pool entry subclass used to represent double constant
- * values.
- *
- * @author Conor MacNeill
- */
-public class DoubleCPInfo extends ConstantCPInfo {
-    /** 
-     * Constructor
-     */
-    public DoubleCPInfo() {
-        super(CONSTANT_DOUBLE, 2);
-    }
-
-    /**
-     * read a constant pool entry from a class stream.
-     *
-     * @param cpStream the DataInputStream which contains the constant pool
-     *      entry to be read.
-     * @exception IOException if there is a problem reading the entry from the
-     *      stream.
-     */
-    public void read(DataInputStream cpStream) throws IOException {
-        setValue(new Double(cpStream.readDouble()));
-    }
-
-    /**
-     * Print a readable version of the constant pool entry.
-     *
-     * @return the string representation of this constant pool entry.
-     */
-    public String toString() {
-        return "Double Constant Pool Entry: " + getValue();
-    }
-
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/depend/constantpool/FieldRefCPInfo.java b/src/main/org/apache/tools/ant/taskdefs/optional/depend/constantpool/FieldRefCPInfo.java
deleted file mode 100644
index 00f46c5..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/depend/constantpool/FieldRefCPInfo.java
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.depend.constantpool;
-
-import java.io.DataInputStream;
-import java.io.IOException;
-
-/**
- * A FieldRef CP Info
- *
- * @author Conor MacNeill
- */
-public class FieldRefCPInfo extends ConstantPoolEntry {
-    /** Name of the field's class */
-    private String fieldClassName;
-    /** name of the field in that class */
-    private String fieldName;
-    /** The type of the field */
-    private String fieldType;
-    /** Index into the constant pool for the class */
-    private int classIndex;
-    /** Index into the constant pool for the name and type entry */
-    private int nameAndTypeIndex;
-
-    /** Constructor.  */
-    public FieldRefCPInfo() {
-        super(CONSTANT_FIELDREF, 1);
-    }
-
-    /**
-     * read a constant pool entry from a class stream.
-     *
-     * @param cpStream the DataInputStream which contains the constant pool
-     *      entry to be read.
-     * @exception IOException if there is a problem reading the entry from
-     *      the stream.
-     */
-    public void read(DataInputStream cpStream) throws IOException {
-        classIndex = cpStream.readUnsignedShort();
-        nameAndTypeIndex = cpStream.readUnsignedShort();
-    }
-
-    /**
-     * Resolve this constant pool entry with respect to its dependents in
-     * the constant pool.
-     *
-     * @param constantPool the constant pool of which this entry is a member
-     *      and against which this entry is to be resolved.
-     */
-    public void resolve(ConstantPool constantPool) {
-        ClassCPInfo fieldClass 
-            = (ClassCPInfo) constantPool.getEntry(classIndex);
-
-        fieldClass.resolve(constantPool);
-
-        fieldClassName = fieldClass.getClassName();
-
-        NameAndTypeCPInfo nt 
-            = (NameAndTypeCPInfo) constantPool.getEntry(nameAndTypeIndex);
-
-        nt.resolve(constantPool);
-
-        fieldName = nt.getName();
-        fieldType = nt.getType();
-
-        super.resolve(constantPool);
-    }
-
-    /**
-     * Print a readable version of the constant pool entry.
-     *
-     * @return the string representation of this constant pool entry.
-     */
-    public String toString() {
-        String value;
-
-        if (isResolved()) {
-            value = "Field : Class = " + fieldClassName + ", name = " 
-                + fieldName + ", type = " + fieldType;
-        } else {
-            value = "Field : Class index = " + classIndex 
-                + ", name and type index = " + nameAndTypeIndex;
-        }
-
-        return value;
-    }
-
-    /**
-     * Gets the name of the class definint the field
-     *
-     * @return the name of the class definint the field
-     */
-    public String getFieldClassName() {
-        return fieldClassName;
-    }
-
-    /**
-     * Get the name of the field
-     *
-     * @return the field's name
-     */
-    public String getFieldName() {
-        return fieldName;
-    }
-
-    /**
-     * Get the type of the field
-     *
-     * @return the field's type in string format
-     */
-    public String getFieldType() {
-        return fieldType;
-    }
-
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/depend/constantpool/FloatCPInfo.java b/src/main/org/apache/tools/ant/taskdefs/optional/depend/constantpool/FloatCPInfo.java
deleted file mode 100644
index db4a54c..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/depend/constantpool/FloatCPInfo.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.depend.constantpool;
-
-import java.io.DataInputStream;
-import java.io.IOException;
-
-/**
- * A Float CP Info
- *
- * @author Conor MacNeill
- */
-public class FloatCPInfo extends ConstantCPInfo {
-
-    /** Constructor.  */
-    public FloatCPInfo() {
-        super(CONSTANT_FLOAT, 1);
-    }
-
-    /**
-     * read a constant pool entry from a class stream.
-     *
-     * @param cpStream the DataInputStream which contains the constant pool
-     *      entry to be read.
-     * @exception IOException if there is a problem reading the entry from
-     *      the stream.
-     */
-    public void read(DataInputStream cpStream) throws IOException {
-        setValue(new Float(cpStream.readFloat()));
-    }
-
-    /**
-     * Print a readable version of the constant pool entry.
-     *
-     * @return the string representation of this constant pool entry.
-     */
-    public String toString() {
-        return "Float Constant Pool Entry: " + getValue();
-    }
-
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/depend/constantpool/IntegerCPInfo.java b/src/main/org/apache/tools/ant/taskdefs/optional/depend/constantpool/IntegerCPInfo.java
deleted file mode 100644
index 3c4ec2b..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/depend/constantpool/IntegerCPInfo.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.depend.constantpool;
-
-import java.io.DataInputStream;
-import java.io.IOException;
-
-/**
- * An Integer CP Info
- *
- * @author Conor MacNeill
- */
-public class IntegerCPInfo extends ConstantCPInfo {
-
-    /** Constructor.  */
-    public IntegerCPInfo() {
-        super(CONSTANT_INTEGER, 1);
-    }
-
-    /**
-     * read a constant pool entry from a class stream.
-     *
-     * @param cpStream the DataInputStream which contains the constant pool
-     *      entry to be read.
-     * @exception IOException if there is a problem reading the entry from
-     *      the stream.
-     */
-    public void read(DataInputStream cpStream) throws IOException {
-        setValue(new Integer(cpStream.readInt()));
-    }
-
-    /**
-     * Print a readable version of the constant pool entry.
-     *
-     * @return the string representation of this constant pool entry.
-     */
-    public String toString() {
-        return "Integer Constant Pool Entry: " + getValue();
-    }
-
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/depend/constantpool/InterfaceMethodRefCPInfo.java b/src/main/org/apache/tools/ant/taskdefs/optional/depend/constantpool/InterfaceMethodRefCPInfo.java
deleted file mode 100644
index 66531c3..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/depend/constantpool/InterfaceMethodRefCPInfo.java
+++ /dev/null
@@ -1,174 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.depend.constantpool;
-
-import java.io.DataInputStream;
-import java.io.IOException;
-
-/**
- * A InterfaceMethodRef CP Info
- *
- * @author Conor MacNeill
- */
-public class InterfaceMethodRefCPInfo extends ConstantPoolEntry {
-    /** the class name of the class defining the interafce method */
-    private String interfaceMethodClassName;
-    /** the name of the interface nmethod */
-    private String interfaceMethodName;
-    /** the method signature of the interface method */
-    private String interfaceMethodType;
-    /**
-     * the index into the constant pool of the class entry for the interface
-     * class
-     */
-    private int classIndex;
-    /**
-     * the index into the constant pool of the name and type entry
-     * describing the method
-     */
-    private int nameAndTypeIndex;
-
-    /** Constructor. */
-    public InterfaceMethodRefCPInfo() {
-        super(CONSTANT_INTERFACEMETHODREF, 1);
-    }
-
-    /**
-     * read a constant pool entry from a class stream.
-     *
-     * @param cpStream the DataInputStream which contains the constant pool
-     *      entry to be read.
-     * @exception IOException if there is a problem reading the entry from
-     *      the stream.
-     */
-    public void read(DataInputStream cpStream) throws IOException {
-        classIndex = cpStream.readUnsignedShort();
-        nameAndTypeIndex = cpStream.readUnsignedShort();
-    }
-
-    /**
-     * Resolve this constant pool entry with respect to its dependents in
-     * the constant pool.
-     *
-     * @param constantPool the constant pool of which this entry is a member
-     *      and against which this entry is to be resolved.
-     */
-    public void resolve(ConstantPool constantPool) {
-        ClassCPInfo interfaceMethodClass
-             = (ClassCPInfo) constantPool.getEntry(classIndex);
-
-        interfaceMethodClass.resolve(constantPool);
-
-        interfaceMethodClassName = interfaceMethodClass.getClassName();
-
-        NameAndTypeCPInfo nt
-             = (NameAndTypeCPInfo) constantPool.getEntry(nameAndTypeIndex);
-
-        nt.resolve(constantPool);
-
-        interfaceMethodName = nt.getName();
-        interfaceMethodType = nt.getType();
-
-        super.resolve(constantPool);
-    }
-
-    /**
-     * Print a readable version of the constant pool entry.
-     *
-     * @return the string representation of this constant pool entry.
-     */
-    public String toString() {
-        String value;
-
-        if (isResolved()) {
-            value = "InterfaceMethod : Class = " + interfaceMethodClassName
-                 + ", name = " + interfaceMethodName + ", type = "
-                 + interfaceMethodType;
-        } else {
-            value = "InterfaceMethod : Class index = " + classIndex
-                 + ", name and type index = " + nameAndTypeIndex;
-        }
-
-        return value;
-    }
-
-    /**
-     * Gets the name of the class defining the interface method
-     *
-     * @return the name of the class defining the interface method
-     */
-    public String getInterfaceMethodClassName() {
-        return interfaceMethodClassName;
-    }
-
-    /**
-     * Get the name of the interface method
-     *
-     * @return the name of the interface method
-     */
-    public String getInterfaceMethodName() {
-        return interfaceMethodName;
-    }
-
-    /**
-     * Gets the type of the interface method
-     *
-     * @return the interface method's type signature
-     */
-    public String getInterfaceMethodType() {
-        return interfaceMethodType;
-    }
-
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/depend/constantpool/LongCPInfo.java b/src/main/org/apache/tools/ant/taskdefs/optional/depend/constantpool/LongCPInfo.java
deleted file mode 100644
index 5f49c0f..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/depend/constantpool/LongCPInfo.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.depend.constantpool;
-
-import java.io.DataInputStream;
-import java.io.IOException;
-
-/**
- * A Long CP Info
- *
- * @author Conor MacNeill
- */
-public class LongCPInfo extends ConstantCPInfo {
-
-    /** Constructor.  */
-    public LongCPInfo() {
-        super(CONSTANT_LONG, 2);
-    }
-
-    /**
-     * read a constant pool entry from a class stream.
-     *
-     * @param cpStream the DataInputStream which contains the constant pool
-     *      entry to be read.
-     * @exception IOException if there is a problem reading the entry from
-     *      the stream.
-     */
-    public void read(DataInputStream cpStream) throws IOException {
-        setValue(new Long(cpStream.readLong()));
-    }
-
-    /**
-     * Print a readable version of the constant pool entry.
-     *
-     * @return the string representation of this constant pool entry.
-     */
-    public String toString() {
-        return "Long Constant Pool Entry: " + getValue();
-    }
-
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/depend/constantpool/MethodRefCPInfo.java b/src/main/org/apache/tools/ant/taskdefs/optional/depend/constantpool/MethodRefCPInfo.java
deleted file mode 100644
index fc8593f..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/depend/constantpool/MethodRefCPInfo.java
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.depend.constantpool;
-
-import java.io.DataInputStream;
-import java.io.IOException;
-
-/**
- * A MethodRef CP Info
- *
- * @author Conor MacNeill
- */
-public class MethodRefCPInfo extends ConstantPoolEntry {
-    /** the name of the class defining this method */
-    private String methodClassName;
-    /** the name of the method */
-    private String methodName;
-    /** the method's type descriptor */
-    private String methodType;
-    /** The index into the constant pool which defines the class of this method. */
-    private int classIndex;
-    /**
-     * the index into the constant pool which defined the name and type
-     * signature of the method
-     */
-    private int nameAndTypeIndex;
-
-    /** Constructor. */
-    public MethodRefCPInfo() {
-        super(CONSTANT_METHODREF, 1);
-    }
-
-    /**
-     * read a constant pool entry from a class stream.
-     *
-     * @param cpStream the DataInputStream which contains the constant pool
-     *      entry to be read.
-     * @exception IOException if there is a problem reading the entry from
-     *      the stream.
-     */
-    public void read(DataInputStream cpStream) throws IOException {
-        classIndex = cpStream.readUnsignedShort();
-        nameAndTypeIndex = cpStream.readUnsignedShort();
-    }
-
-    /**
-     * Print a readable version of the constant pool entry.
-     *
-     * @return the string representation of this constant pool entry.
-     */
-    public String toString() {
-        String value;
-
-        if (isResolved()) {
-            value = "Method : Class = " + methodClassName + ", name = "
-                 + methodName + ", type = " + methodType;
-        } else {
-            value = "Method : Class index = " + classIndex
-                 + ", name and type index = " + nameAndTypeIndex;
-        }
-
-        return value;
-    }
-
-    /**
-     * Resolve this constant pool entry with respect to its dependents in
-     * the constant pool.
-     *
-     * @param constantPool the constant pool of which this entry is a member
-     *      and against which this entry is to be resolved.
-     */
-    public void resolve(ConstantPool constantPool) {
-        ClassCPInfo methodClass
-             = (ClassCPInfo) constantPool.getEntry(classIndex);
-
-        methodClass.resolve(constantPool);
-
-        methodClassName = methodClass.getClassName();
-
-        NameAndTypeCPInfo nt
-             = (NameAndTypeCPInfo) constantPool.getEntry(nameAndTypeIndex);
-
-        nt.resolve(constantPool);
-
-        methodName = nt.getName();
-        methodType = nt.getType();
-
-        super.resolve(constantPool);
-    }
-
-    /**
-     * Get the name of the class defining the method
-     *
-     * @return the name of the class defining this method
-     */
-    public String getMethodClassName() {
-        return methodClassName;
-    }
-
-    /**
-     * Get the name of the method.
-     *
-     * @return the name of the method.
-     */
-    public String getMethodName() {
-        return methodName;
-    }
-
-    /**
-     * Get the type signature of the method.
-     *
-     * @return the type signature of the method.
-     */
-    public String getMethodType() {
-        return methodType;
-    }
-
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/depend/constantpool/NameAndTypeCPInfo.java b/src/main/org/apache/tools/ant/taskdefs/optional/depend/constantpool/NameAndTypeCPInfo.java
deleted file mode 100644
index f596a56..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/depend/constantpool/NameAndTypeCPInfo.java
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.depend.constantpool;
-
-import java.io.DataInputStream;
-import java.io.IOException;
-
-/**
- * A NameAndType CP Info
- *
- * @author Conor MacNeill
- */
-public class NameAndTypeCPInfo extends ConstantPoolEntry {
-
-    /** Constructor. */
-    public NameAndTypeCPInfo() {
-        super(CONSTANT_NAMEANDTYPE, 1);
-    }
-
-    /**
-     * read a constant pool entry from a class stream.
-     *
-     * @param cpStream the DataInputStream which contains the constant pool
-     *      entry to be read.
-     * @exception IOException if there is a problem reading the entry from
-     *      the stream.
-     */
-    public void read(DataInputStream cpStream) throws IOException {
-        nameIndex = cpStream.readUnsignedShort();
-        descriptorIndex = cpStream.readUnsignedShort();
-    }
-
-    /**
-     * Print a readable version of the constant pool entry.
-     *
-     * @return the string representation of this constant pool entry.
-     */
-    public String toString() {
-        String value;
-
-        if (isResolved()) {
-            value = "Name = " + name + ", type = " + type;
-        } else {
-            value = "Name index = " + nameIndex
-                 + ", descriptor index = " + descriptorIndex;
-        }
-
-        return value;
-    }
-
-    /**
-     * Resolve this constant pool entry with respect to its dependents in
-     * the constant pool.
-     *
-     * @param constantPool the constant pool of which this entry is a member
-     *      and against which this entry is to be resolved.
-     */
-    public void resolve(ConstantPool constantPool) {
-        name = ((Utf8CPInfo) constantPool.getEntry(nameIndex)).getValue();
-        type = ((Utf8CPInfo) constantPool.getEntry(descriptorIndex)).getValue();
-
-        super.resolve(constantPool);
-    }
-
-    /**
-     * Get the name component of this entry
-     *
-     * @return the name of this name and type entry
-     */
-    public String getName() {
-        return name;
-    }
-
-    /**
-     * Get the type signature of this entry
-     *
-     * @return the type signature of this entry
-     */
-    public String getType() {
-        return type;
-    }
-
-    /** the name component of this entry */
-    private String name;
-    /** the type component of this entry */
-    private String type;
-    /**
-     * the index into the constant pool at which the name component's string
-     * value is stored
-     */
-    private int nameIndex;
-    /**
-     * the index into the constant pool where the type descriptor string is
-     * stored.
-     */
-    private int descriptorIndex;
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/depend/constantpool/StringCPInfo.java b/src/main/org/apache/tools/ant/taskdefs/optional/depend/constantpool/StringCPInfo.java
deleted file mode 100644
index f4098de..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/depend/constantpool/StringCPInfo.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.depend.constantpool;
-
-import java.io.DataInputStream;
-import java.io.IOException;
-
-/**
- * A String Constant Pool Entry. The String info contains an index into the
- * constant pool where a UTF8 string is stored.
- *
- * @author Conor MacNeill
- */
-public class StringCPInfo extends ConstantCPInfo {
-
-    /** Constructor.  */
-    public StringCPInfo() {
-        super(CONSTANT_STRING, 1);
-    }
-
-    /**
-     * read a constant pool entry from a class stream.
-     *
-     * @param cpStream the DataInputStream which contains the constant pool
-     *      entry to be read.
-     * @exception IOException if there is a problem reading the entry from
-     *      the stream.
-     */
-    public void read(DataInputStream cpStream) throws IOException {
-        index = cpStream.readUnsignedShort();
-
-        setValue("unresolved");
-    }
-
-    /**
-     * Print a readable version of the constant pool entry.
-     *
-     * @return the string representation of this constant pool entry.
-     */
-    public String toString() {
-        return "String Constant Pool Entry for " 
-            + getValue() + "[" + index + "]";
-    }
-
-    /**
-     * Resolve this constant pool entry with respect to its dependents in
-     * the constant pool.
-     *
-     * @param constantPool the constant pool of which this entry is a member
-     *      and against which this entry is to be resolved.
-     */
-    public void resolve(ConstantPool constantPool) {
-        setValue(((Utf8CPInfo) constantPool.getEntry(index)).getValue());
-        super.resolve(constantPool);
-    }
-
-    /** the index into the constant pool containing the string's content */
-    private int index;
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/depend/constantpool/Utf8CPInfo.java b/src/main/org/apache/tools/ant/taskdefs/optional/depend/constantpool/Utf8CPInfo.java
deleted file mode 100644
index a5ca50d..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/depend/constantpool/Utf8CPInfo.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.depend.constantpool;
-
-import java.io.DataInputStream;
-import java.io.IOException;
-
-/**
- * A UTF8 Constant Pool Entry.
- *
- * @author Conor MacNeill
- */
-public class Utf8CPInfo extends ConstantPoolEntry {
-    /** The String value of the UTF-8 entry */
-    private String value;
-
-    /** Constructor.  */
-    public Utf8CPInfo() {
-        super(CONSTANT_UTF8, 1);
-    }
-
-    /**
-     * read a constant pool entry from a class stream.
-     *
-     * @param cpStream the DataInputStream which contains the constant pool
-     *      entry to be read.
-     * @exception IOException if there is a problem reading the entry from
-     *      the stream.
-     */
-    public void read(DataInputStream cpStream) throws IOException {
-        value = cpStream.readUTF();
-    }
-
-    /**
-     * Print a readable version of the constant pool entry.
-     *
-     * @return the string representation of this constant pool entry.
-     */
-    public String toString() {
-        return "UTF8 Value = " + value;
-    }
-
-    /**
-     * Get the string value of the UTF-8 entry
-     *
-     * @return the UTF-8 value as a Java string
-     */
-    public String getValue() {
-        return value;
-    }
-
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/CSharp.java b/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/CSharp.java
deleted file mode 100644
index 7a0996a..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/CSharp.java
+++ /dev/null
@@ -1,1139 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-/*
- *  build notes
- *  -The reference CD to listen to while editing this file is
- *  nap: Underworld  - Everything, Everything
- */
-// ====================================================================
-// place in the optional ant tasks package
-// but in its own dotnet group
-// ====================================================================
-
-package org.apache.tools.ant.taskdefs.optional.dotnet;
-
-// ====================================================================
-// imports
-// ====================================================================
-
-import java.io.File;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.DirectoryScanner;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.taskdefs.MatchingTask;
-import org.apache.tools.ant.types.Path;
-
-// ====================================================================
-
-/**
- *  This task compiles CSharp source into executables or modules. The task will
- *  only work on win2K until other platforms support csc.exe or an equivalent.
- *  CSC.exe must be on the execute path too. <p>
- *
- *  All parameters are optional: &lt;csc/&gt; should suffice to produce a debug
- *  build of all *.cs files. References to external files do require explicit
- *  enumeration, so are one of the first attributes to consider adding. <p>
- *
- *  The task is a directory based task, so attributes like <b>includes="*.cs"
- *  </b> and <b>excludes="broken.cs"</b> can be used to control the files pulled
- *  in. By default, all *.cs files from the project folder down are included in
- *  the command. When this happens the output file -if not specified- is taken
- *  as the first file in the list, which may be somewhat hard to control.
- *  Specifying the output file with <b>'outfile'</b> seems prudent. <p>
- *
- *  <p>
- *
- *  TODO
- *  <ol>
- *    <li> is incremental build still broken in beta-1?
- *    <li> is Win32Icon broken?
- *    <li> all the missing options
- *  </ol>
- *  <p>
- *
- *  History
- *  <Table>
- *
- *    <tr>
- *
- *      <td>
- *        0.3
- *      </td>
- *
- *      <td>
- *        Beta 1 edition
- *      </td>
- *
- *      <td>
- *        To avoid having to remember which assemblies to include, the task
- *        automatically refers to the main dotnet libraries in Beta1.
- *      </tr>
- *
- *      <tr>
- *
- *        <td>
- *          0.2
- *        </td>
- *
- *        <td>
- *          Slightly different
- *        </td>
- *
- *        <td>
- *          Split command execution to a separate class;
- *        </tr>
- *
- *        <tr>
- *
- *          <td>
- *            0.1
- *          </td>
- *
- *          <td>
- *            "I can't believe it's so rudimentary"
- *          </td>
- *
- *          <td>
- *            First pass; minimal builds only support;
- *          </tr>
- *
- *        </table>
- *
- *
- *@author      Steve Loughran steve_l@iseran.com
- *@version     0.5
- *@ant.task    name="csc" category="dotnet"
- */
-
-public class CSharp
-         extends MatchingTask {
-
-    /**
-     *  Name of the executable. The .exe suffix is deliberately not included in
-     *  anticipation of the unix version
-     */
-    private static final String csc_exe_name = "csc";
-
-    /**
-     *  what is the file extension we search on?
-     */
-    private static final String csc_file_ext = "cs";
-
-    /**
-     *  derive the search pattern from the extension
-     */
-    private static final String csc_file_pattern = "**/*." + csc_file_ext;
-
-    /**
-     *  list of reference classes. (pretty much a classpath equivalent)
-     */
-    private String references;
-
-    /**
-     *  flag to enable automatic reference inclusion
-     */
-    private boolean includeDefaultReferences;
-
-    /**
-     *  incremental build flag
-     */
-    private boolean incremental;
-
-    /**
-     *  output XML documentation flag
-     */
-    private File docFile;
-
-    /**
-     *  icon for incorporation into apps
-     */
-    private File win32icon;
-
-    /**
-     *  icon for incorporation into apps
-     */
-    private File win32res;
-
-    /**
-     *  Description of the Field
-     */
-    private boolean noconfig = false;
-
-    /**
-     *  use full paths to things
-     */
-    private boolean fullpaths = false;
-
-    /**
-     *  output file. If not supplied this is derived from the source file
-     */
-    private File outputFile;
-
-    /**
-     *  flag to control action on execution trouble
-     */
-    private boolean failOnError;
-
-    /**
-     *  using the path approach didnt work as it could not handle the implicit
-     *  execution path. Perhaps that could be extracted from the runtime and
-     *  then the path approach would be viable
-     */
-    private Path referenceFiles;
-
-    /**
-     *  optimise flag
-     */
-    private boolean optimize;
-
-    /**
-     *  file alignment; 0 means let the compiler decide
-     */
-    private int fileAlign = 0;
-
-    /**
-     *  Fix C# reference inclusion. C# is really dumb in how it handles
-     *  inclusion. You have to list every 'assembly' -read DLL that is imported.
-     *  So already you are making a platform assumption -shared libraries have a
-     *  .dll;"+ extension and the poor developer has to know every library which
-     *  is included why the compiler cant find classes on the path or in a
-     *  directory, is a mystery. To reduce the need to be explicit, here is a
-     *  long list of the core libraries used in Beta-1 of .NET ommitting the
-     *  blatantly non portable (MS.win32.interop) and the .designer libraries.
-     *  (ripping out Com was tempting) Casing is chosen to match that of the
-     *  file system <i>exactly</i> so may work on a unix box too. there is no
-     *  need to reference mscorlib.dll, cos it is always there
-     */
-
-    protected static final String DEFAULT_REFERENCE_LIST =
-            "Accessibility.dll;" +
-            "cscompmgd.dll;" +
-            "CustomMarshalers.dll;" +
-            "IEExecRemote.dll;" +
-            "IEHost.dll;" +
-            "IIEHost.dll;" +
-            "ISymWrapper.dll;" +
-            "Microsoft.JScript.dll;" +
-            "Microsoft.VisualBasic.dll;" +
-            "Microsoft.VisualC.dll;" +
-            "Microsoft.Vsa.dll;" +
-            "Mscorcfg.dll;" +
-            "office.dll;" +
-            "RegCode.dll;" +
-            "System.Configuration.Install.dll;" +
-            "System.Data.dll;" +
-            "System.Design.dll;" +
-            "System.DirectoryServices.dll;" +
-            "System.EnterpriseServices.dll;" +
-            "System.dll;" +
-            "System.Drawing.Design.dll;" +
-            "System.Drawing.dll;" +
-            "System.Management.dll;" +
-            "System.Messaging.dll;" +
-            "System.Runtime.Remoting.dll;" +
-            "System.Runtime.Serialization.Formatters.Soap.dll;" +
-            "System.Security.dll;" +
-            "System.ServiceProcess.dll;" +
-            "System.Web.dll;" +
-            "System.Web.RegularExpressions.dll;" +
-            "System.Web.Services.dll;" +
-            "System.Windows.Forms.dll;" +
-            "System.XML.dll;";
-
-    /**
-     *  debug flag. Controls generation of debug information.
-     */
-    protected boolean debug;
-
-    /**
-     *  warning level: 0-4, with 4 being most verbose
-     */
-    private int warnLevel;
-
-    /**
-     *  enable unsafe code flag. Clearly set to false by default
-     */
-    protected boolean unsafe;
-
-    /**
-     *  main class (or null for automatic choice)
-     */
-    protected String mainClass;
-
-    /**
-     *  any extra command options?
-     */
-    protected String extraOptions;
-
-    /**
-     *  source directory upon which the search pattern is applied
-     */
-    private File srcDir;
-
-    /**
-     *  destination directory (null means use the source directory) NB: this is
-     *  currently not used
-     */
-    private File destDir;
-
-    /**
-     *  type of target. Should be one of exe|library|module|winexe|(null)
-     *  default is exe; the actual value (if not null) is fed to the command
-     *  line. <br>
-     *  See /target
-     */
-    protected String targetType;
-
-    /**
-     *  utf out flag
-     */
-
-    protected boolean utf8output = false;
-
-    /**
-     *  defines list something like 'RELEASE;WIN32;NO_SANITY_CHECKS;;SOMETHING_ELSE'
-     */
-    String definitions;
-
-    /**
-     *  list of extra modules to refer to
-     */
-    String additionalModules;
-
-
-    /**
-     *  constructor inits everything and set up the search pattern
-     */
-
-    public CSharp() {
-        Clear();
-        setIncludes(csc_file_pattern);
-    }
-
-
-    /**
-     *  Set the reference list to be used for this compilation.
-     *
-     *@param  s  The new References value
-     */
-    public void setReferences(String s) {
-        references = s;
-    }
-
-
-    /**
-     *  get the reference string or null for no argument needed
-     *
-     *@return    The References Parameter to CSC
-     */
-    protected String getReferencesParameter() {
-        //bail on no references
-        if (notEmpty(references)) {
-            return "/reference:" + references;
-        } else {
-            return null;
-        }
-    }
-
-    /**
-     *  add another path to the reference file path list
-     *
-     *@param  path  another path to append
-     */
-    public void setReferenceFiles(Path path) {
-        //demand create pathlist
-        if (referenceFiles == null) {
-            referenceFiles = new Path(this.project);
-        }
-        referenceFiles.append(path);
-    }
-
-
-    /**
-     *  turn the path list into a list of files and a /references argument
-     *
-     *@return    null or a string of references.
-     */
-    protected String getReferenceFilesParameter() {
-        //bail on no references
-        if (references == null) {
-            return null;
-        }
-        //iterate through the ref list & generate an entry for each
-        //or just rely on the fact that the toString operator does this, but
-        //noting that the separator is ';' on windows, ':' on unix
-        String refpath = references.toString();
-
-        //bail on no references listed
-        if (refpath.length() == 0) {
-            return null;
-        }
-
-        StringBuffer s = new StringBuffer("/reference:");
-        s.append(refpath);
-        return new String(s);
-    }
-
-
-    /**
-     *  get default reference list
-     *
-     *@return    null or a string of references.
-     */
-    protected String getDefaultReferenceParameter() {
-        if (includeDefaultReferences) {
-            StringBuffer s = new StringBuffer("/reference:");
-            s.append(DEFAULT_REFERENCE_LIST);
-            return new String(s);
-        } else {
-            return null;
-        }
-    }
-
-
-    /**
-     *  set the automatic reference inclusion flag on or off this flag controls
-     *  the string of references and the /nostdlib option in CSC
-     *
-     *@param  f  on/off flag
-     */
-    public void setIncludeDefaultReferences(boolean f) {
-        includeDefaultReferences = f;
-    }
-
-
-    /**
-     *  query automatic reference inclusion flag
-     *
-     *@return    true if flag is turned on
-     */
-    public boolean getIncludeDefaultReferences() {
-        return includeDefaultReferences;
-    }
-
-
-    /**
-     *  get the include default references flag or null for no argument needed
-     *
-     *@return    The Parameter to CSC
-     */
-    protected String getIncludeDefaultReferencesParameter() {
-        return "/nostdlib" + (includeDefaultReferences ? "-" : "+");
-    }
-
-
-
-    /**
-     *  set the optimise flag on or off
-     *
-     *@param  f  on/off flag
-     */
-    public void setOptimize(boolean f) {
-        optimize = f;
-    }
-
-
-    /**
-     *  query the optimise flag
-     *
-     *@return    true if optimise is turned on
-     */
-    public boolean getOptimize() {
-        return optimize;
-    }
-
-
-    /**
-     *  get the optimise flag or null for no argument needed
-     *
-     *@return    The Optimize Parameter to CSC
-     */
-    protected String getOptimizeParameter() {
-        return "/optimize" + (optimize ? "+" : "-");
-    }
-
-
-    /**
-     *  set the incremental compilation flag on or off
-     *
-     *@param  f  on/off flag
-     */
-    public void setIncremental(boolean f) {
-        incremental = f;
-    }
-
-
-    /**
-     *  query the incrementalflag
-     *
-     *@return    true iff incremental compilation is turned on
-     */
-    public boolean getIncremental() {
-        return incremental;
-    }
-
-
-    /**
-     *  get the incremental build argument
-     *
-     *@return    The Incremental Parameter to CSC
-     */
-    protected String getIncrementalParameter() {
-        return "/incremental" + (incremental ? "+" : "-");
-    }
-
-
-    /**
-     *  set the debug flag on or off
-     *
-     *@param  f  on/off flag
-     */
-    public void setDebug(boolean f) {
-        debug = f;
-    }
-
-
-    /**
-     *  query the debug flag
-     *
-     *@return    true if debug is turned on
-     */
-    public boolean getDebug() {
-        return debug;
-    }
-
-
-    /**
-     *  get the debug switch argument
-     *
-     *@return    The Debug Parameter to CSC
-     */
-    protected String getDebugParameter() {
-        return "/debug" + (debug ? "+" : "-");
-    }
-
-
-
-    /**
-     *  file for generated XML documentation
-     *
-     *@param  f  output file
-     */
-    public void setDocFile(File f) {
-        docFile = f;
-    }
-
-
-    /**
-     *  get the argument or null for no argument needed
-     *
-     *@return    The DocFile Parameter to CSC
-     */
-    protected String getDocFileParameter() {
-        if (docFile != null) {
-            return "/doc:" + docFile.toString();
-        } else {
-            return null;
-        }
-    }
-
-
-    /**
-     *  set warn level (no range checking)
-     *
-     *@param  warnLevel  warn level -see .net docs for valid range (probably
-     *      0-4)
-     */
-    public void setWarnLevel(int warnLevel) {
-        this.warnLevel = warnLevel;
-    }
-
-
-    /**
-     *  query warn level
-     *
-     *@return    current value
-     */
-    public int getWarnLevel() {
-        return warnLevel;
-    }
-
-
-    /**
-     *  get the warn level switch
-     *
-     *@return    The WarnLevel Parameter to CSC
-     */
-    protected String getWarnLevelParameter() {
-        return "/warn:" + warnLevel;
-    }
-
-
-    /**
-     *  Sets the Unsafe attribute
-     *
-     *@param  unsafe  The new Unsafe value
-     */
-    public void setUnsafe(boolean unsafe) {
-        this.unsafe = unsafe;
-    }
-
-
-    /**
-     *  query the Unsafe attribute
-     *
-     *@return    The Unsafe value
-     */
-    public boolean getUnsafe() {
-        return this.unsafe;
-    }
-
-
-    /**
-     *  get the argument or null for no argument needed
-     *
-     *@return    The Unsafe Parameter to CSC
-     */
-    protected String getUnsafeParameter() {
-        return unsafe ? "/unsafe" : null;
-    }
-
-
-    /**
-     *  Sets the MainClass attribute
-     *
-     *@param  mainClass  The new MainClass value
-     */
-    public void setMainClass(String mainClass) {
-        this.mainClass = mainClass;
-    }
-
-
-    /**
-     *  Gets the MainClass attribute
-     *
-     *@return    The MainClass value
-     */
-    public String getMainClass() {
-        return this.mainClass;
-    }
-
-
-    /**
-     *  get the /main argument or null for no argument needed
-     *
-     *@return    The MainClass Parameter to CSC
-     */
-    protected String getMainClassParameter() {
-        if (mainClass != null && mainClass.length() != 0) {
-            return "/main:" + mainClass;
-        } else {
-            return null;
-        }
-    }
-
-
-    /**
-     *  Sets the ExtraOptions attribute
-     *
-     *@param  extraOptions  The new ExtraOptions value
-     */
-    public void setExtraOptions(String extraOptions) {
-        this.extraOptions = extraOptions;
-    }
-
-
-    /**
-     *  Gets the ExtraOptions attribute
-     *
-     *@return    The ExtraOptions value
-     */
-    public String getExtraOptions() {
-        return this.extraOptions;
-    }
-
-
-    /**
-     *  get any extra options or null for no argument needed
-     *
-     *@return    The ExtraOptions Parameter to CSC
-     */
-    protected String getExtraOptionsParameter() {
-        if (extraOptions != null && extraOptions.length() != 0) {
-            return extraOptions;
-        } else {
-            return null;
-        }
-    }
-
-
-    /**
-     *  Set the source dir to find the files to be compiled
-     *
-     *@param  srcDirName  The new SrcDir value
-     */
-    public void setSrcDir(File srcDirName) {
-        this.srcDir = srcDirName;
-    }
-
-
-    /**
-     *  Set the destination dir to find the files to be compiled
-     *
-     *@param  dirName  The new DestDir value
-     */
-    public void setDestDir(File dirName) {
-        this.destDir = dirName;
-    }
-
-
-    /**
-     *  define the target
-     *
-     *@param  targetType          The new TargetType value
-     *@exception  BuildException  if target is not one of
-     *      exe|library|module|winexe
-     */
-    public void setTargetType(String ttype)
-             throws BuildException {
-        targetType = ttype.toLowerCase();
-        if (targetType.equals("exe") || targetType.equals("library") ||
-                targetType.equals("module") || targetType.equals("winexe")) {
-            targetType = targetType;
-        } else {
-            throw new BuildException("targetType " + targetType + " is not a valid type");
-        }
-    }
-
-
-    /**
-     *  Gets the TargetType attribute
-     *
-     *@return    The TargetType value
-     */
-    public String getTargetType() {
-        return targetType;
-    }
-
-
-    /**
-     *  get the argument or null for no argument needed
-     *
-     *@return    The TargetType Parameter to CSC
-     */
-    protected String getTargetTypeParameter() {
-        if (notEmpty(targetType)) {
-            return "/target:" + targetType;
-        } else {
-            return null;
-        }
-    }
-
-
-    /**
-     *  Set the win32 icon
-     *
-     *@param  fileName  path to the file. Can be relative, absolute, whatever.
-     */
-    public void setWin32Icon(File fileName) {
-        win32icon = fileName;
-    }
-
-
-    /**
-     *  get the argument or null for no argument needed
-     *
-     *@return    The Win32Icon Parameter to CSC
-     */
-    protected String getWin32IconParameter() {
-        if (win32icon != null) {
-            return "/win32icon:" + win32icon.toString();
-        } else {
-            return null;
-        }
-    }
-
-
-    /**
-     *  Set the win32 resource
-     *
-     *@param  fileName  path to the file. Can be relative, absolute, whatever.
-     */
-    public void setWin32Res(File fileName) {
-        win32res = fileName;
-    }
-
-
-    /**
-     *  get the argument or null for no argument needed
-     *
-     *@return    The Win32Res Parameter to CSC
-     */
-    protected String getWin32ResParameter() {
-        if (win32res != null) {
-            return "/win32res:" + win32res.toString();
-        } else {
-            return null;
-        }
-    }
-
-
-    /**
-     *  enable generation of utf8 output from the compiler.
-     *
-     *@param  enabled  The new utf8Output value
-     */
-    public void setUtf8Output(boolean enabled) {
-        utf8output = enabled;
-    }
-
-
-    /**
-     *  Gets the utf8OutpuParameter attribute of the CSharp object
-     *
-     *@return    The utf8OutpuParameter value
-     */
-    protected String getUtf8OutputParameter() {
-        return utf8output ? "/utf8output" : null;
-    }
-
-
-    /**
-     *  Sets the noConfig attribute of the CSharp object
-     *
-     *@param  enabled  The new noConfig value
-     */
-    protected void setNoConfig(boolean enabled) {
-        noconfig = enabled;
-    }
-
-
-    /**
-     *  Gets the noConfigParameter attribute of the CSharp object
-     *
-     *@return    The noConfigParameter value
-     */
-    protected String getNoConfigParameter() {
-        return noconfig ? "/noconfig" : null;
-    }
-
-
-    /**
-     *  Sets the fullPaths attribute of the CSharp object
-     *
-     *@param  enabled  The new fullPaths value
-     */
-    public void setFullPaths(boolean enabled) {
-        fullpaths = enabled;
-    }
-
-
-    /**
-     *  Gets the fullPathsParameter attribute of the CSharp object
-     *
-     *@return    The fullPathsParameter value
-     */
-    protected String getFullPathsParameter() {
-        return fullpaths ? "/fullpaths" : null;
-    }
-
-
-    /**
-     *  Set the definitions
-     *
-     *@param  params  The new definitions value
-     */
-    public void setDefinitions(String params) {
-        definitions = params;
-    }
-
-
-    /**
-     *  get the argument or null for no argument needed
-     *
-     *@return    The Definitions Parameter to CSC
-     */
-    protected String getDefinitionsParameter() {
-        if (notEmpty(definitions)) {
-            return "/define:" + definitions;
-        } else {
-            return null;
-        }
-    }
-
-
-    /**
-     *  Set the definitions
-     *
-     *@param  params  The new additionalModules value
-     */
-    public void setAdditionalModules(String params) {
-        additionalModules = params;
-    }
-
-
-    /**
-     *  get the argument or null for no argument needed
-     *
-     *@return    The AdditionalModules Parameter to CSC
-     */
-    protected String getAdditionalModulesParameter() {
-        if (notEmpty(additionalModules)) {
-            return "/addmodule:" + additionalModules;
-        } else {
-            return null;
-        }
-    }
-
-
-    /**
-     *  Set the output file
-     *
-     *@param  params  The new outputFile value
-     */
-    public void setOutputFile(File params) {
-        outputFile = params;
-    }
-
-    /**
-     *  Set the output file
-     *
-     *@param  params  The new outputFile value
-     */
-    public void setDestFile(File file) {
-        outputFile = file;
-    }
-    
-
-    /**
-     *  get the argument or null for no argument needed
-     *
-     *@return    The OutputFile Parameter to CSC
-     */
-    protected String getOutputFileParameter() {
-        if (outputFile != null) {
-            File f = outputFile;
-            return "/out:" + f.toString();
-        } else {
-            return null;
-        }
-    }
-
-
-    /**
-     *  set fail on error flag
-     *
-     *@param  b  The new FailOnError value
-     */
-    public void setFailOnError(boolean b) {
-        failOnError = b;
-    }
-
-
-    /**
-     *  query fail on error flag
-     *
-     *@return    The FailFailOnError value
-     */
-    public boolean getFailOnError() {
-        return failOnError;
-    }
-
-    /** set the file alignment.
-     *  Valid values are 0,512, 1024, 2048, 4096, 8192, and 16384
-     *  0 means 'leave to the compiler'
-     */
-    public void setFileAlign(int fileAlign) {
-        this.fileAlign = fileAlign;
-    }
-
-    /**
-     *  get the argument or null for no argument needed
-     *
-     *@return    The OutputFile Parameter to CSC
-     */
-    protected String getFileAlignParameter() {
-        if (fileAlign != 0) {
-            return "/filealign:" + fileAlign;
-        } else {
-            return null;
-        }
-    }
-    /**
-     *  reset all contents.
-     */
-    public void Clear() {
-        targetType = null;
-        win32icon = null;
-        srcDir = null;
-        destDir = null;
-        mainClass = null;
-        unsafe = false;
-        warnLevel = 3;
-        docFile = null;
-        incremental = false;
-        optimize = false;
-        debug = true;
-        references = null;
-        failOnError = true;
-        definitions = null;
-        additionalModules = null;
-        includeDefaultReferences = true;
-        extraOptions = null;
-        fullpaths = true;
-        fileAlign = 0;
-    }
-
-
-    /**
-     *  test for a string containing something useful
-     *
-     *@param  s  string in
-     *@return    true if the argument is not null or empty
-     */
-    protected boolean notEmpty(String s) {
-        return s != null && s.length() != 0;
-    }
-
-    /**
-     * validation code
-     * @throws  BuildException  if validation failed
-     */ 
-    protected void validate() 
-            throws BuildException {
-        if (outputFile != null && outputFile.isDirectory()) {
-            throw new BuildException("destFile cannot be a directory");
-        }
-    }
-
-    /**
-     *  do the work by building the command line and then calling it
-     *
-     *@throws  BuildException  if validation or execution failed
-     */
-    public void execute()
-             throws BuildException {
-        if (srcDir == null) {
-            srcDir = project.resolveFile(".");
-        }
-        log("CSC working from source directory " + srcDir, Project.MSG_VERBOSE);
-        validate();
-
-        NetCommand command = new NetCommand(this, "CSC", csc_exe_name);
-        command.setFailOnError(getFailOnError());
-        //DEBUG helper
-        command.setTraceCommandLine(true);
-        //fill in args
-        command.addArgument("/nologo");
-        command.addArgument(getAdditionalModulesParameter());
-        command.addArgument(getDefinitionsParameter());
-        command.addArgument(getDebugParameter());
-        command.addArgument(getDocFileParameter());
-        command.addArgument(getIncrementalParameter());
-        command.addArgument(getMainClassParameter());
-        command.addArgument(getOptimizeParameter());
-        command.addArgument(getReferencesParameter());
-        command.addArgument(getTargetTypeParameter());
-        command.addArgument(getUnsafeParameter());
-        command.addArgument(getWarnLevelParameter());
-        command.addArgument(getWin32IconParameter());
-        command.addArgument(getOutputFileParameter());
-        command.addArgument(getIncludeDefaultReferencesParameter());
-        command.addArgument(getDefaultReferenceParameter());
-        command.addArgument(getWin32ResParameter());
-        command.addArgument(getUtf8OutputParameter());
-        command.addArgument(getNoConfigParameter());
-        command.addArgument(getFullPathsParameter());
-        command.addArgument(getExtraOptionsParameter());
-        command.addArgument(getFileAlignParameter());
-
-        long outputTimestamp;
-        if (outputFile != null && outputFile.exists()) {
-            outputTimestamp = outputFile.lastModified();
-        } else {
-            outputTimestamp = 0;
-        }
-        int filesOutOfDate = 0;
-        //get dependencies list.
-        DirectoryScanner scanner = super.getDirectoryScanner(srcDir);
-        String[] dependencies = scanner.getIncludedFiles();
-        log("compiling " + dependencies.length + " file" + ((dependencies.length == 1) ? "" : "s"));
-        String baseDir = scanner.getBasedir().toString();
-        File base = scanner.getBasedir();
-        //add to the command
-        for (int i = 0; i < dependencies.length; i++) {
-            File targetFile = new File(base, dependencies[i]);
-            log(targetFile.toString(), Project.MSG_VERBOSE);
-            command.addArgument(targetFile.toString());
-            if (targetFile.lastModified() > outputTimestamp) {
-                filesOutOfDate++;
-                log("Source file " + targetFile.toString() + " is out of date",
-                        Project.MSG_VERBOSE);
-            } else {
-                log("Source file " + targetFile.toString() + " is up to date",
-                        Project.MSG_VERBOSE);
-            }
-            
-        }
-
-        //now run the command of exe + settings + files
-        if (filesOutOfDate > 0) {
-            command.runCommand();
-        }
-    }
-    // end execute
-
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/Ilasm.java b/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/Ilasm.java
deleted file mode 100644
index b24753d..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/Ilasm.java
+++ /dev/null
@@ -1,547 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-/*
- *  build notes
- *  -The reference CD to listen to while editing this file is
- *  nap: Underworld  - Everything, Everything
- *  -variable naming policy from Fowler's refactoring book.
- *  -tested against the PDC pre-beta of csc.exe; future versions will
- *  inevitably change things
- */
-// ====================================================================
-// place in the optional ant tasks package
-// but in its own dotnet group
-// ====================================================================
-
-package org.apache.tools.ant.taskdefs.optional.dotnet;
-
-// ====================================================================
-// imports
-// ====================================================================
-
-import java.io.File;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.DirectoryScanner;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.taskdefs.MatchingTask;
-
-/**
- *  Task to assemble .net 'Intermediate Language' files. The task will only work
- *  on win2K until other platforms support csc.exe or an equivalent. ilasm.exe
- *  must be on the execute path too. <p>
- *
- *  <p>
- *
- *  All parameters are optional: &lt;il/&gt; should suffice to produce a debug
- *  build of all *.il files. The option set is roughly compatible with the
- *  CSharp class; even though the command line options are only vaguely
- *  equivalent. [The low level commands take things like /OUT=file, csc wants
- *  /out:file ... /verbose is used some places; /quiet here in ildasm... etc.]
- *  It would be nice if someone made all the command line tools consistent (and
- *  not as brittle as the java cmdline tools) <p>
- *
- *  The task is a directory based task, so attributes like <b>includes="*.il"
- *  </b> and <b>excludes="broken.il"</b> can be used to control the files pulled
- *  in. Each file is built on its own, producing an appropriately named output
- *  file unless manually specified with <b>outfile</b>
- *
- *@author     Steve Loughran steve_l@iseran.com
- *@version    0.5
- */
-
-public class Ilasm
-         extends MatchingTask {
-
-    /**
-     *  Name of the executable. The .exe suffix is deliberately not included in
-     *  anticipation of the unix version
-     */
-    protected static final String exe_name = "ilasm";
-
-    /**
-     *  what is the file extension we search on?
-     */
-    protected static final String file_ext = "il";
-
-    /**
-     *  and now derive the search pattern from the extension
-     */
-    protected static final String file_pattern = "**/*." + file_ext;
-
-    /**
-     *  title of task for external presentation
-     */
-    protected static final String exe_title = "ilasm";
-
-    /**
-     *  source directory upon which the search pattern is applied
-     */
-    private File srcDir;
-
-    /**
-     *  type of target. Should be one of exe|library|module|winexe|(null)
-     *  default is exe; the actual value (if not null) is fed to the command
-     *  line. <br>
-     *  See /target
-     */
-    protected String targetType;
-
-    /**
-     *  verbose flag
-     */
-    protected boolean verbose;
-
-    /**
-     *  listing flag
-     */
-
-    protected boolean listing;
-
-    /**
-     *  output file. If not supplied this is derived from the source file
-     */
-    protected File outputFile;
-
-    /**
-     *  resource file (.res format) to include in the app.
-     */
-    protected File resourceFile;
-
-    /**
-     *  flag to control action on execution trouble
-     */
-    protected boolean failOnError;
-
-    /**
-     *  debug flag. Controls generation of debug information.
-     */
-    protected boolean debug;
-
-    /**
-     *  file containing private key
-     */
-
-    private File keyfile;
-
-    /**
-     *  any extra command options?
-     */
-    protected String extraOptions;
-
-
-    /**
-     *  constructor inits everything and set up the search pattern
-     */
-    public Ilasm() {
-        Clear();
-        setIncludes(file_pattern);
-    }
-
-
-    /**
-     *  reset all contents.
-     */
-    public void Clear() {
-        targetType = null;
-        srcDir = null;
-        listing = false;
-        verbose = false;
-        debug = true;
-        outputFile = null;
-        failOnError = true;
-        resourceFile = null;
-        extraOptions = null;
-    }
-
-
-    /**
-     *  Set the source dir to find the files to be compiled
-     *
-     *@param  srcDirName  The new SrcDir value
-     */
-    public void setSrcDir(File srcDirName) {
-        srcDir = srcDirName;
-    }
-
-
-    /**
-     *  define the target
-     *
-     *@param  targetType          one of exe|library|
-     *@exception  BuildException  if target is not one of
-     *      exe|library|module|winexe
-     */
-
-    public void setTargetType(String targetType)
-             throws BuildException {
-        this.targetType = targetType.toLowerCase();
-        if (targetType.equals("exe") || targetType.equals("library")) {
-            targetType = targetType;
-        } else {
-            throw new BuildException("targetType " + targetType + " is not a valid type");
-        }
-    }
-
-
-    /**
-     *  accessor method for target type
-     *
-     *@return    the current target option
-     */
-    public String getTargetType() {
-        return targetType;
-    }
-
-
-    /**
-     *  g get the target type or null for no argument needed
-     *
-     *@return    The TargetTypeParameter value
-     */
-
-    protected String getTargetTypeParameter() {
-        if (!notEmpty(targetType)) {
-            return null;
-        }
-        if (targetType.equals("exe")) {
-            return "/exe";
-        } else if (targetType.equals("library")) {
-            return "/dll";
-        } else {
-            return null;
-        }
-    }
-
-
-    /**
-     *  Sets the Owner attribute
-     *
-     *@param  s  The new Owner value
-     */
-
-    public void setOwner(String s) {
-        log("This option is not supported by ILASM as of Beta-2, and will be ignored", Project.MSG_WARN);
-    }
-
-
-    /**
-     *  test for a string containing something useful
-     *
-     *@param  s       any string
-     *@return         true if the argument is not null or empty
-     */
-    protected boolean notEmpty(String s) {
-        return s != null && s.length() != 0;
-    }
-
-
-    /**
-     *  enable/disable verbose ILASM output
-     *
-     *@param  b  flag set to true for verbose on
-     */
-    public void setVerbose(boolean b) {
-        verbose = b;
-    }
-
-
-    /**
-     *  turn the verbose flag into a parameter for ILASM
-     *
-     *@return    null or the appropriate command line string
-     */
-    protected String getVerboseParameter() {
-        return verbose ? null : "/quiet";
-    }
-
-
-    /**
-     *  enable/disable listing
-     *
-     *@param  b  flag set to true for listing on
-     */
-    public void setListing(boolean b) {
-        listing = b;
-    }
-
-
-    /**
-     *  turn the listing flag into a parameter for ILASM
-     *
-     *@return    the appropriate string from the state of the listing flag
-     */
-    protected String getListingParameter() {
-        return listing ? "/listing" : "/nolisting";
-    }
-
-
-    /**
-     *  Set the output file
-     *
-     *@param  params  The new outputFile value
-     */
-    public void setOutputFile(File params) {
-        outputFile = params;
-    }
-
-
-    /**
-     *  get the output file
-     *
-     *@return    the argument string or null for no argument
-     */
-    protected String getOutputFileParameter() {
-        if (outputFile == null || outputFile.length() == 0) {
-            return null;
-        }
-        File f = outputFile;
-        return "/output=" + f.toString();
-    }
-
-
-    /**
-     *  Set the resource file
-     *
-     *@param  fileName  path to the file. Can be relative, absolute, whatever.
-     */
-    public void setResourceFile(File fileName) {
-        resourceFile = fileName;
-    }
-
-
-    /**
-     *  Gets the resourceFileParameter attribute of the Ilasm task
-     *
-     *@return    The resourceFileParameter value
-     */
-    protected String getResourceFileParameter() {
-        if (resourceFile != null) {
-            return "/resource=" + resourceFile.toString();
-        } else {
-            return null;
-        }
-    }
-
-
-    /**
-     *  set fail on error flag
-     *
-     *@param  b  The new failOnError value
-     */
-    public void setFailOnError(boolean b) {
-        failOnError = b;
-    }
-
-
-    /**
-     *  query fail on error flag
-     *
-     *@return    The failFailOnError value
-     */
-    public boolean getFailFailOnError() {
-        return failOnError;
-    }
-
-
-    /**
-     *  set the debug flag on or off
-     *
-     *@param  f  on/off flag
-     */
-    public void setDebug(boolean f) {
-        debug = f;
-    }
-
-
-    /**
-     *  query the debug flag
-     *
-     *@return    true if debug is turned on
-     */
-    public boolean getDebug() {
-        return debug;
-    }
-
-
-    /**
-     *  get the argument or null for no argument needed
-     *
-     *@return    The debugParameter value
-     */
-    protected String getDebugParameter() {
-        return debug ? "/debug" : null;
-    }
-
-
-    /**
-     *  Sets the keyfile attribute of the Ilasm object
-     *
-     *@param  keyfile  The new keyfile value
-     */
-    public void setKeyfile(File keyfile) {
-        this.keyfile = keyfile;
-    }
-
-
-    /**
-     *  get the argument or null for no argument needed
-     *
-     *@return    The keyfileParameter value
-     */
-    protected String getKeyfileParameter() {
-        if (keyfile != null) {
-            return "/keyfile:" + keyfile.toString();
-        } else {
-            return null;
-        }
-    }
-
-
-    /**
-     *  Sets the ExtraOptions attribute
-     *
-     *@param  extraOptions  The new ExtraOptions value
-     */
-    public void setExtraOptions(String extraOptions) {
-        this.extraOptions = extraOptions;
-    }
-
-
-    /**
-     *  Gets the ExtraOptions attribute
-     *
-     *@return    The ExtraOptions value
-     */
-    public String getExtraOptions() {
-        return this.extraOptions;
-    }
-
-
-    /**
-     *  get any extra options or null for no argument needed
-     *
-     *@return    The ExtraOptions Parameter to CSC
-     */
-    protected String getExtraOptionsParameter() {
-        if (extraOptions != null && extraOptions.length() != 0) {
-            return extraOptions;
-        } else {
-            return null;
-        }
-    }
-
-
-    /**
-     *  This is the execution entry point. Build a list of files and call ilasm
-     *  on each of them.
-     *
-     *@throws  BuildException  if the assembly failed and FailOnError is true
-     */
-    public void execute()
-             throws BuildException {
-        if (srcDir == null) {
-            srcDir = project.resolveFile(".");
-        }
-
-        //get dependencies list.
-        DirectoryScanner scanner = super.getDirectoryScanner(srcDir);
-        String[] dependencies = scanner.getIncludedFiles();
-        log("assembling " + dependencies.length + " file" + ((dependencies.length == 1) ? "" : "s"));
-        String baseDir = scanner.getBasedir().toString();
-        //add to the command
-        for (int i = 0; i < dependencies.length; i++) {
-            String targetFile = dependencies[i];
-            targetFile = baseDir + File.separator + targetFile;
-            executeOneFile(targetFile);
-        }
-
-    }
-    // end execute
-
-
-    /**
-     *  do the work for one file by building the command line then calling it
-     *
-     *@param  targetFile       name of the the file to assemble
-     *@throws  BuildException  if the assembly failed and FailOnError is true
-     */
-    public void executeOneFile(String targetFile)
-             throws BuildException {
-        NetCommand command = new NetCommand(this, exe_title, exe_name);
-        command.setFailOnError(getFailFailOnError());
-        //DEBUG helper
-        command.setTraceCommandLine(true);
-        //fill in args
-        command.addArgument(getDebugParameter());
-        command.addArgument(getTargetTypeParameter());
-        command.addArgument(getListingParameter());
-        command.addArgument(getOutputFileParameter());
-        command.addArgument(getResourceFileParameter());
-        command.addArgument(getVerboseParameter());
-        command.addArgument(getKeyfileParameter());
-        command.addArgument(getExtraOptionsParameter());
-
-        /*
-         *  space for more argumentativeness
-         *  command.addArgument();
-         *  command.addArgument();
-         */
-        command.addArgument(targetFile);
-        //now run the command of exe + settings + file
-        command.runCommand();
-    }
-    // end executeOneFile
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/NetCommand.java b/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/NetCommand.java
deleted file mode 100644
index 90ba7db..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/NetCommand.java
+++ /dev/null
@@ -1,264 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-/*
- *  build notes
- *  The reference CD to listen to while editing this file is
- *  Underworld Everything, Everything
- *  variable naming policy from Fowler's refactoring book.
- */
-// place below the optional ant tasks package
-
-package org.apache.tools.ant.taskdefs.optional.dotnet;
-
-// imports
-
-import java.io.File;
-import java.io.IOException;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.taskdefs.Execute;
-import org.apache.tools.ant.taskdefs.ExecuteStreamHandler;
-import org.apache.tools.ant.taskdefs.LogStreamHandler;
-import org.apache.tools.ant.types.Commandline;
-
-/**
- *  This is a helper class to spawn net commands out. In its initial form it
- *  contains no .net specifics, just contains all the command line/exe
- *  construction stuff. However, it may be handy in future to have a means of
- *  setting the path to point to the dotnet bin directory; in which case the
- *  shared code should go in here.
- *
- *@author     Steve Loughran steve_l@iseran.com
- *@version    0.5
- */
-
-public class NetCommand {
-
-    /**
-     *  owner project
-     */
-    protected Task owner;
-
-    /**
-     *  executabe
-     */
-    protected Execute executable;
-
-    /**
-     *  what is the command line
-     */
-    protected Commandline commandLine;
-
-    /**
-     *  title of the command
-     */
-    protected String title;
-
-    /**
-     *  actual program to invoke
-     */
-    protected String program;
-
-    /**
-     *  trace flag
-     */
-    protected boolean traceCommandLine = false;
-
-    /**
-     *  flag to control action on execution trouble
-     */
-    protected boolean failOnError;
-
-
-    /**
-     *  constructor
-     *
-     *@param  title        (for logging/errors)
-     *@param  owner        owner task
-     *@param  program      app we are to run
-     */
-
-    public NetCommand(Task owner, String title, String program) {
-        this.owner = owner;
-        this.title = title;
-        this.program = program;
-        commandLine = new Commandline();
-        commandLine.setExecutable(program);
-        prepareExecutor();
-    }
-
-
-    /**
-     *  turn tracing on or off
-     *
-     *@param  b  trace flag
-     */
-    public void setTraceCommandLine(boolean b) {
-        traceCommandLine = b;
-    }
-
-
-    /**
-     *  set fail on error flag
-     *
-     *@param  b  fail flag -set to true to cause an exception to be raised if
-     *      the return value != 0
-     */
-    public void setFailOnError(boolean b) {
-        failOnError = b;
-    }
-
-
-    /**
-     *  query fail on error flag
-     *
-     *@return    The failFailOnError value
-     */
-    public boolean getFailFailOnError() {
-        return failOnError;
-    }
-
-
-    /**
-     *  verbose text log
-     *
-     *@param  msg  string to add to log iff verbose is defined for the build
-     */
-    protected void logVerbose(String msg) {
-        owner.getProject().log(msg, Project.MSG_VERBOSE);
-    }
-
-
-    /**
-     *  error text log
-     *
-     *@param  msg  message to display as an error
-     */
-    protected void logError(String msg) {
-        owner.getProject().log(msg, Project.MSG_ERR);
-    }
-
-
-    /**
-     *  add an argument to a command line; do nothing if the arg is null or
-     *  empty string
-     *
-     *@param  argument  The feature to be added to the Argument attribute
-     */
-    public void addArgument(String argument) {
-        if (argument != null && argument.length() != 0) {
-            commandLine.createArgument().setValue(argument);
-        }
-    }
-
-    public void addArgument(String argument1, String argument2) {
-        if (argument2 != null && argument2.length() != 0) {
-            commandLine.createArgument().setValue(argument1 + argument2);
-        }
-    }    
-
-    /**
-     *  set up the command sequence..
-     */
-    protected void prepareExecutor() {
-        // default directory to the project's base directory
-        if (owner == null) {
-            throw new RuntimeException("no owner"); 
-        }
-        if (owner.getProject() == null) {
-            throw new RuntimeException("Owner has no project"); 
-        }
-        File dir = owner.getProject().getBaseDir();
-        ExecuteStreamHandler handler = new LogStreamHandler(owner,
-                Project.MSG_INFO, Project.MSG_WARN);
-        executable = new Execute(handler, null);
-        executable.setAntRun(owner.getProject());
-        executable.setWorkingDirectory(dir);
-    }
-
-
-    /**
-     *  Run the command using the given Execute instance.
-     *
-     *@exception  BuildException  iff something goes wrong and the
-     *      failOnError flag is true
-     */
-    public void runCommand()
-             throws BuildException {
-        int err = -1;
-        // assume the worst
-        try {
-            if (traceCommandLine) {
-                owner.log(commandLine.describeCommand());
-            } else {
-                //in verbose mode we always log stuff
-                logVerbose(commandLine.describeCommand());
-            }
-            executable.setCommandline(commandLine.getCommandline());
-            err = executable.execute();
-            if (err != 0) {
-                if (failOnError) {
-                    throw new BuildException(title + " returned: " + err, owner.getLocation());
-                } else {
-                    owner.log(title + "  Result: " + err, Project.MSG_ERR);
-                }
-            }
-        } catch (IOException e) {
-            throw new BuildException(title + " failed: " + e, e, owner.getLocation());
-        }
-    }
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/WsdlToDotnet.java b/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/WsdlToDotnet.java
deleted file mode 100644
index 717b19c..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/dotnet/WsdlToDotnet.java
+++ /dev/null
@@ -1,223 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.dotnet;
-
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.BuildException;
-import java.io.File;
-
-/**
- * Task to convert a WSDL file/url into a dotnet language 
- * see "Creating an XML Web Service Proxy", "wsdl.exe" docs in
- * the framework SDK docos
- * @author      Steve Loughran steve_l@iseran.com
- * @version     0.5
- * @ant.task    name="csc" category="dotnet"
- * @since       ant 1.5
- */
-
-public class WsdlToDotnet extends Task  { 
-    
-    /**
-     * name of output file (required)
-     */ 
-    private File destFile = null;
-    
-    /**
-     * url to retrieve
-     */ 
-    private String url = null;
-    
-    /**
-     * name of source file
-     */ 
-    private File srcFile = null;
-    
-    /**
-     * language; defaults to C#
-     */ 
-    private String language = "CS";
-    
-    /**
-     * flag set to true to generate server side skeleton
-     */ 
-    private boolean server = false;
-    
-    /**
-     * namespace
-     */ 
-    private String namespace = null;
-    
-    /**
-     *  flag to control action on execution trouble
-     */
-    private boolean failOnError = true;
-
-    /**
-     *  any extra command options?
-     */
-    protected String extraOptions = null;
-    
-    /**
-     *
-     */ 
-    public void setDestFile(File destFile) {
-        this.destFile = destFile;
-    }
-
-    public void setUrl(String url) {
-        this.url = url;
-    }
-
-    public void setSrcFile(File srcFile) {
-        this.srcFile = srcFile;
-    }
-
-    public void setLanguage(String language) {
-        this.language = language;
-    }
-
-    public void setServer(boolean server) {
-        this.server = server;
-    }
-
-    public void setNamespace(String namespace) {
-        this.namespace = namespace;
-    }
-
-    public void setFailOnError(boolean failOnError) {
-        this.failOnError = failOnError;
-    }
-    
-    /**
-     *  Sets the ExtraOptions attribute
-     *
-     *@param  extraOptions  The new ExtraOptions value
-     */
-    public void setExtraOptions(String extraOptions) {
-        this.extraOptions = extraOptions;
-    }
-    
-    /**
-     * validation code
-     * @throws  BuildException  if validation failed
-     */ 
-    protected void validate() 
-            throws BuildException {
-        if (destFile == null) {
-            throw new BuildException("destination file must be specified");
-        }
-        if (destFile.isDirectory()) {
-            throw new BuildException(
-                "destination file is a directory");
-        }        
-        if (url != null && srcFile != null) {
-            throw new BuildException(
-                    "you can not specify both a source file and a URL");
-        }
-        if (url == null && srcFile == null) {
-            throw new BuildException(
-                    "you must specify either a source file or a URL");
-        }
-        if (srcFile != null) {
-            if (!srcFile.exists()) {
-                throw new BuildException(
-                    "source file does not exist");
-            }
-            if (srcFile.isDirectory()) {
-                throw new BuildException(
-                    "source file is a directory");
-            }
-        }
-
-    }
-
-    /**
-     *  do the work by building the command line and then calling it
-     *
-     *@throws  BuildException  if validation or execution failed
-     */
-    public void execute()
-             throws BuildException {
-        validate();
-        NetCommand command = new NetCommand(this, "WSDL", "wsdl");
-        command.setFailOnError(failOnError);
-        //DEBUG helper
-        command.setTraceCommandLine(true);
-        //fill in args
-        command.addArgument("/nologo");
-        command.addArgument("/out:" + destFile);
-        command.addArgument("/language:", language);
-        if (server) {
-            command.addArgument("/server");
-        }
-        command.addArgument("/namespace:", namespace);
-        command.addArgument(extraOptions);
-        //because these args arent added when null, we can 
-        //set both of these and let either of them 
-        command.addArgument(srcFile.toString());
-        command.addArgument(url);
-        
-        //rebuild unless the dest file is newer than the source file
-        boolean rebuild = true;
-        if (srcFile.exists() && destFile.exists() && 
-            srcFile.lastModified() <= destFile.lastModified()) {
-            rebuild = false;
-        }
-        if (rebuild) {
-            command.runCommand();
-        }
-    }
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/BorlandDeploymentTool.java b/src/main/org/apache/tools/ant/taskdefs/optional/ejb/BorlandDeploymentTool.java
deleted file mode 100644
index 45ede6a..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/BorlandDeploymentTool.java
+++ /dev/null
@@ -1,462 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-
-package org.apache.tools.ant.taskdefs.optional.ejb;
-
-
-import java.io.File;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.InputStream;
-import java.io.BufferedReader;
-import java.io.InputStreamReader;
-
-import java.util.Hashtable;
-import java.util.Iterator;
-import java.util.Vector;
-
-
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.taskdefs.ExecuteStreamHandler;
-import org.apache.tools.ant.taskdefs.Java;
-import org.apache.tools.ant.taskdefs.Execute;
-import org.apache.tools.ant.types.Commandline;
-import org.apache.tools.ant.types.Path;
-
-
-/**
- * BorlandDeploymentTool is dedicated to the Borland Application Server 4.5 and 4.5.1
- * This task generates and compiles the stubs and skeletons for all ejb described into the
- * Deployement Descriptor, builds the jar file including the support files and verify
- * whether the produced jar is valid or not.
- * The supported options are:
- * <ul>
- * <li>debug  (boolean)    : turn on the debug mode for generation of stubs and skeletons (default:false)</li>
- * <li>verify (boolean)    : turn on the verification at the end of the jar production    (default:true) </li>
- * <li>verifyargs (String) : add optional argument to verify command (see vbj com.inprise.ejb.util.Verify)</li>
- * <li>basdtd (String)     : location of the BAS DTD </li>
- * <li>generateclient (boolean) : turn on the client jar file generation </li>
- * </ul>
- *
- *<PRE>
- *
- *      &lt;ejbjar srcdir=&quot;${build.classes}&quot;  basejarname=&quot;vsmp&quot;  descriptordir=&quot;${rsc.dir}/hrmanager&quot;&gt;
- *        &lt;borland destdir=&quot;tstlib&quot;&gt;
- *          &lt;classpath refid=&quot;classpath&quot; /&gt;
- *        &lt;/borland&gt;
- *        &lt;include name=&quot;**\ejb-jar.xml&quot;/&gt;
- *        &lt;support dir=&quot;${build.classes}&quot;&gt;
- *          &lt;include name=&quot;demo\smp\*.class&quot;/&gt;
- *          &lt;include name=&quot;demo\helper\*.class&quot;/&gt;
- *         &lt;/support&gt;
- *     &lt;/ejbjar&gt;
- *</PRE>
- * @author     <a href="mailto:benoit.moussaud@criltelecom.com">Benoit Moussaud</a>
- *
- */
-public class BorlandDeploymentTool extends GenericDeploymentTool  implements ExecuteStreamHandler
-{
-    public static final String PUBLICID_BORLAND_EJB
-    = "-//Inprise Corporation//DTD Enterprise JavaBeans 1.1//EN";
-
-    protected static final String DEFAULT_BAS45_EJB11_DTD_LOCATION
-    = "/com/inprise/j2ee/xml/dtds/ejb-jar.dtd";
-
-    protected static final String DEFAULT_BAS_DTD_LOCATION
-    = "/com/inprise/j2ee/xml/dtds/ejb-inprise.dtd";
-
-    protected static final String BAS_DD = "ejb-inprise.xml";
-
-    /** Java2iiop executable **/
-    protected static final String JAVA2IIOP = "java2iiop";
-
-    /** Verify class */
-    protected static final String VERIFY = "com.inprise.ejb.util.Verify";
-
-    /** Instance variable that stores the suffix for the borland jarfile. */
-    private String jarSuffix = "-ejb.jar";
-
-    /** Instance variable that stores the location of the borland DTD file. */
-    private String borlandDTD;
-
-    /** Instance variable that determines whether the debug mode is on */
-    private boolean java2iiopdebug = false;
-
-    /** Instance variable that determines whetger the client jar file is generated */
-    private boolean generateclient = false;
-    /** Instance variable that determines whether it is necessary to verify the produced jar */
-    private boolean verify     = true;
-    private String  verifyArgs = "";
-
-    private Hashtable _genfiles = new Hashtable();
-
-    /**
-     * set the debug mode for java2iiop (default false)
-     **/
-    public void setDebug(boolean debug) {
-        this.java2iiopdebug = debug;
-    }
-
-    /**
-     * set the verify  mode for the produced jar (default true)
-     **/
-    public void setVerify(boolean verify) {
-        this.verify = verify;
-    }
-
-
-    /**
-     * Setter used to store the suffix for the generated borland jar file.
-     * @param inString the string to use as the suffix.
-     */
-    public void setSuffix(String inString) {
-        this.jarSuffix = inString;
-    }
-
-
-    /**
-     * sets some additional args to send to verify command
-     * @param args addtions command line parameters
-     */
-    public void setVerifyArgs(String args) {
-        this.verifyArgs = args;
-    }
-
-    /**
-     * Setter used to store the location of the borland DTD. This can be a file on the system
-     * or a resource on the classpath.
-     * @param inString the string to use as the DTD location.
-     */
-    public void setBASdtd(String inString) {
-        this.borlandDTD = inString;
-    }
-
-
-    /**
-     * setter used to store whether the task will include the generate client task.
-     * (see : BorlandGenerateClient task)
-     */
-    public void setGenerateclient(boolean b) {
-        this.generateclient = b;
-    }
-
-
-    protected DescriptorHandler getBorlandDescriptorHandler(final File srcDir) {
-        DescriptorHandler handler =
-            new DescriptorHandler(getTask(), srcDir) {
-                    protected void processElement() {
-                        if (currentElement.equals("type-storage")) {
-                            // Get the filename of vendor specific descriptor
-                            String fileNameWithMETA = currentText;
-                            //trim the META_INF\ off of the file name
-                            String fileName
-                                = fileNameWithMETA.substring(META_DIR.length(),
-                                    fileNameWithMETA.length());
-                            File descriptorFile = new File(srcDir, fileName);
-
-                            ejbFiles.put(fileNameWithMETA, descriptorFile);
-                        }
-                    }
-                };
-        handler.registerDTD(PUBLICID_BORLAND_EJB,
-                            borlandDTD == null ? DEFAULT_BAS_DTD_LOCATION : borlandDTD);
-
-        for (Iterator i = getConfig().dtdLocations.iterator(); i.hasNext();) {
-            EjbJar.DTDLocation dtdLocation = (EjbJar.DTDLocation) i.next();
-            handler.registerDTD(dtdLocation.getPublicId(), dtdLocation.getLocation());
-        }
-        return handler;
-    }
-
-    /**
-     * Add any vendor specific files which should be included in the
-     * EJB Jar.
-     */
-    protected void addVendorFiles(Hashtable ejbFiles, String ddPrefix) {
-
-        File borlandDD = new File(getConfig().descriptorDir, ddPrefix + BAS_DD);
-        if (borlandDD.exists()) {
-            log("Borland specific file found " + borlandDD,  Project.MSG_VERBOSE);
-            ejbFiles.put(META_DIR + BAS_DD,  borlandDD);
-        } else {
-            log("Unable to locate borland deployment descriptor. It was expected to be in " +
-                borlandDD.getPath(), Project.MSG_WARN);
-            return;
-        }
-    }
-
-    /**
-     * Get the vendor specific name of the Jar that will be output. The modification date
-     * of this jar will be checked against the dependent bean classes.
-     */
-    File getVendorOutputJarFile(String baseName) {
-        return new File(getDestDir(), baseName +  jarSuffix);
-    }
-
-    /**
-     * Verify the produced jar file by invoking the Borland verify tool
-     * @param sourceJar java.io.File representing the produced jar file
-     */
-    private void verifyBorlandJar(File sourceJar) {
-        org.apache.tools.ant.taskdefs.Java javaTask = null;
-        log("verify " + sourceJar, Project.MSG_INFO);
-        try {
-
-            String args = verifyArgs;
-            args += " " + sourceJar.getPath();
-
-            javaTask = (Java) getTask().getProject().createTask("java");
-            javaTask.setTaskName("verify");
-            javaTask.setClassname(VERIFY);
-            Commandline.Argument arguments = javaTask.createArg();
-            arguments.setLine(args);
-            Path classpath = getCombinedClasspath();
-            if (classpath != null)  {
-                javaTask.setClasspath(classpath);
-                javaTask.setFork(true);
-            }
-
-            log("Calling " + VERIFY + " for " + sourceJar.toString(),
-                Project.MSG_VERBOSE);
-            javaTask.execute();
-        } catch (Exception e) {
-            //TO DO : delete the file if it is not a valid file.
-            String msg = "Exception while calling " + VERIFY + " Details: "
-                + e.toString();
-            throw new BuildException(msg, e);
-        }
-    }
-
-    /**
-     * Generate the client jar corresponding to the jar file passed as paremeter
-     * the method uses the BorlandGenerateClient task.
-     * @param sourceJar java.io.File representing the produced jar file
-     */
-    private void generateClient(File sourceJar) {
-        getTask().getProject().addTaskDefinition("internal_bas_generateclient",
-            org.apache.tools.ant.taskdefs.optional.ejb.BorlandGenerateClient.class);
-
-        org.apache.tools.ant.taskdefs.optional.ejb.BorlandGenerateClient gentask = null;
-        log("generate client for " + sourceJar, Project.MSG_INFO);
-        try {
-            gentask = (BorlandGenerateClient) getTask().getProject().createTask("internal_bas_generateclient");
-            gentask.setEjbjar(sourceJar);
-            gentask.setDebug(java2iiopdebug);
-            Path classpath = getCombinedClasspath();
-            if (classpath != null) {
-                gentask.setClasspath(classpath);
-            }
-            gentask.setTaskName("generate client");
-            gentask.execute();
-        } catch (Exception e) {
-            //TO DO : delete the file if it is not a valid file.
-            String msg = "Exception while calling " + VERIFY + " Details: "
-                + e.toString();
-            throw new BuildException(msg, e);
-        }
-    }
-
-    /**
-     * Generate stubs & sketelton for each home found into the DD
-     * Add all the generate class file into the ejb files
-     * @param ithomes : iterator on home class
-     * @param files   : file list , updated by the adding generated files
-     */
-    private void buildBorlandStubs(Iterator ithomes, Hashtable files) {
-        Execute execTask = null;
-
-        execTask = new Execute(this);
-        Project project = getTask().getProject();
-        execTask.setAntRun(project);
-        execTask.setWorkingDirectory(project.getBaseDir());
-
-        Commandline commandline = new Commandline();
-        commandline.setExecutable(JAVA2IIOP);
-        //debug ?
-        if (java2iiopdebug) {
-            commandline.createArgument().setValue("-VBJdebug");
-        } // end of if ()
-        //set the classpath
-        commandline.createArgument().setValue("-VBJclasspath");
-        commandline.createArgument().setPath(getCombinedClasspath());
-        //list file
-        commandline.createArgument().setValue("-list_files");
-        //no TIE classes
-        commandline.createArgument().setValue("-no_tie");
-        //root dir
-        commandline.createArgument().setValue("-root_dir");
-        commandline.createArgument().setValue(getConfig().srcDir.getAbsolutePath());
-        //compiling order
-        commandline.createArgument().setValue("-compile");
-        //add the home class
-        while (ithomes.hasNext()) {
-            commandline.createArgument().setValue(ithomes.next().toString());
-        } // end of while ()
-
-        try {
-            log("Calling java2iiop", Project.MSG_VERBOSE);
-            log(commandline.describeCommand(), Project.MSG_DEBUG);
-            execTask.setCommandline(commandline.getCommandline());
-            int result = execTask.execute();
-            if (result != 0) {
-                String msg = "Failed executing java2iiop (ret code is "
-                    + result + ")";
-                throw new BuildException(msg, getTask().getLocation());
-            }
-        } catch (java.io.IOException e) {
-            log("java2iiop exception :" + e.getMessage(), Project.MSG_ERR);
-            throw new BuildException(e, getTask().getLocation());
-        }
-    }
-
-    /**
-     * Method used to encapsulate the writing of the JAR file. Iterates over the
-     * filenames/java.io.Files in the Hashtable stored on the instance variable
-     * ejbFiles.
-     */
-    protected void writeJar(String baseName, File jarFile, Hashtable files, String publicId)
-        throws BuildException {
-        //build the home classes list.
-        Vector homes = new Vector();
-        Iterator it = files.keySet().iterator();
-        while (it.hasNext()) {
-            String clazz = (String) it.next();
-            if (clazz.endsWith("Home.class")) {
-                //remove .class extension
-                String home = toClass(clazz);
-                homes.add(home);
-                log(" Home " + home, Project.MSG_VERBOSE);
-            } // end of if ()
-        } // end of while ()
-
-        buildBorlandStubs(homes.iterator(), files);
-
-        //add the gen files to the collection
-        files.putAll(_genfiles);
-
-        super.writeJar(baseName, jarFile, files, publicId);
-
-        if (verify) {
-            verifyBorlandJar(jarFile);
-        } // end of if ()
-
-        if (generateclient) {
-            generateClient(jarFile);
-        } // end of if ()
-    }
-
-    /**
-     * convert a class file name : A/B/C/toto.class
-     * into    a class name: A.B.C.toto
-     */
-    private String toClass(String filename) {
-        //remove the .class
-        String classname = filename.substring(0, filename.lastIndexOf(".class"));
-        classname = classname.replace('\\', '.');
-        return classname;
-    }
-
-    /**
-     * convert a file name : A/B/C/toto.java
-     * into    a class name: A/B/C/toto.class
-     */
-    private  String toClassFile(String filename) {
-        //remove the .class
-        String classfile = filename.substring(0, filename.lastIndexOf(".java"));
-        classfile = classfile + ".class";
-        return classfile;
-    }
-
-    // implementation of org.apache.tools.ant.taskdefs.ExecuteStreamHandler interface
-
-    public void start() throws IOException  { }
-    public void stop()  {  }
-    public void setProcessInputStream(OutputStream param1) throws IOException   { }
-
-    /**
-     *
-     * @param is
-     * @exception java.io.IOException
-     */
-    public void setProcessOutputStream(InputStream is) throws IOException {
-        try {
-            BufferedReader reader = new BufferedReader(new InputStreamReader(is));
-            String javafile;
-            while ((javafile = reader.readLine()) != null) {
-                log("buffer:" + javafile, Project.MSG_DEBUG);
-                if (javafile.endsWith(".java")) {
-                    String classfile = toClassFile(javafile);
-                    String key = classfile.substring(getConfig().srcDir.getAbsolutePath().length() + 1);
-                    log(" generated : " + classfile, Project.MSG_DEBUG);
-                    log(" key       : " + key, Project.MSG_DEBUG);
-                    _genfiles.put(key, new File(classfile));
-                } // end of if ()
-            } // end of while ()
-            reader.close();
-        } catch (Exception e) {
-            String msg = "Exception while parsing  java2iiop output. Details: " + e.toString();
-            throw new BuildException(msg, e);
-        }
-    }
-
-    public void setProcessErrorStream(InputStream is) throws IOException {
-        BufferedReader reader = new BufferedReader(new InputStreamReader(is));
-        String s = reader.readLine();
-        if (s != null) {
-            log("[java2iiop] " + s, Project.MSG_DEBUG);
-        } // end of if ()
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/BorlandGenerateClient.java b/src/main/org/apache/tools/ant/taskdefs/optional/ejb/BorlandGenerateClient.java
deleted file mode 100644
index bb3a0f2..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/BorlandGenerateClient.java
+++ /dev/null
@@ -1,249 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-
-package org.apache.tools.ant.taskdefs.optional.ejb;
-
-import java.io.File;
-
-
-
-
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.taskdefs.ExecTask;
-import org.apache.tools.ant.taskdefs.Java;
-import org.apache.tools.ant.types.Path;
-import org.apache.tools.ant.types.Reference;
-
-
-
-/**
- * BorlandGenerateClient is dedicated to the Borland Application Server 4.5
- * This task generates the client jar using as input the ejb jar file.
- * Two mode are available: java mode (default) and fork mode. With the fork mode,
- * it is impossible to add classpath to the commmand line.
- * 
- * @author  <a href="mailto:benoit.moussaud@criltelecom.com">Benoit Moussaud</a>
- *
- * @ant.task name="blgenclient" category="ejb"
- */
-public class BorlandGenerateClient extends Task {
-    static final String JAVA_MODE = "java";
-    static final String FORK_MODE = "fork";
-
-    /** debug the generateclient task */
-    boolean debug = false;
-
-    /** hold the ejbjar file name */
-    File ejbjarfile = null;
-
-    /** hold the client jar file name */
-    File clientjarfile = null;
-
-    /** hold the classpath */
-    Path classpath;
-
-    /** hold the mode (java|fork) */
-    String mode = JAVA_MODE;
-
-    public void setMode(String s) {
-        mode = s;
-    }
-    public void setDebug(boolean debug) {
-        this.debug = debug;
-    }
-
-    public void setEjbjar(File ejbfile) {
-        ejbjarfile = ejbfile;
-    }
-    
-    public void setClientjar(File clientjar) {
-        clientjarfile = clientjar;
-    }
-
-    public void setClasspath(Path classpath) {
-        if (this.classpath == null) {
-            this.classpath = classpath;
-        } else {
-            this.classpath.append(classpath);
-        }
-    }
-    
-    public Path createClasspath() {
-        if (this.classpath == null) {
-            this.classpath = new Path(project);
-        }
-        return this.classpath.createPath();
-    }
-    
-    public void setClasspathRef(Reference r) {
-        createClasspath().setRefid(r);
-    }
-    
-
-    /**
-     * Do the work.
-     *
-     * The work is actually done by creating a separate JVM to run a java task. 
-     *
-     * @exception BuildException if someting goes wrong with the build
-     */
-    public void execute() throws BuildException {
-        if (ejbjarfile == null || ejbjarfile.isDirectory()) {
-            throw new BuildException("invalid ejb jar file.");
-        } // end of if ()
-
-        if (clientjarfile == null || clientjarfile.isDirectory()) {
-            log("invalid or missing client jar file.", Project.MSG_VERBOSE);
-            String ejbjarname = ejbjarfile.getAbsolutePath();
-            //clientname = ejbjarfile+client.jar
-            String clientname = ejbjarname.substring(0, ejbjarname.lastIndexOf("."));
-            clientname = clientname + "client.jar";
-            clientjarfile = new File(clientname);
-
-        } // end of if ()
-
-        if (mode == null) {
-            log("mode is null default mode  is java");
-            setMode(JAVA_MODE);
-        } // end of if ()
-
-        log("client jar file is " + clientjarfile);
-
-        if (mode.equalsIgnoreCase(FORK_MODE)) {
-            executeFork();
-        } else {            
-            executeJava();
-        } // end of else                       
-    }
-    
-    /** launch the generate client using java api */
-    protected void executeJava() throws BuildException {
-        try {
-            log("mode : java");
-
-            org.apache.tools.ant.taskdefs.Java execTask = null;                
-            execTask = (Java) getProject().createTask("java");
-                       
-            execTask.setDir(new File("."));
-            execTask.setClassname("com.inprise.server.commandline.EJBUtilities");
-            //classpath
-            //add at the end of the classpath
-            //the system classpath in order to find the tools.jar file
-            execTask.setClasspath(classpath.concatSystemClasspath());
-
-            execTask.setFork(true);
-            execTask.createArg().setValue("generateclient");
-            if (debug) {
-                execTask.createArg().setValue("-trace");                
-            } // end of if ()
-
-            //
-            execTask.createArg().setValue("-short");
-            execTask.createArg().setValue("-jarfile");
-            // ejb jar file
-            execTask.createArg().setValue(ejbjarfile.getAbsolutePath());
-            //client jar file
-            execTask.createArg().setValue("-single");
-            execTask.createArg().setValue("-clientjarfile");
-            execTask.createArg().setValue(clientjarfile.getAbsolutePath());
-
-            log("Calling EJBUtilities", Project.MSG_VERBOSE);
-            execTask.execute();        
-
-        } catch (Exception e) {
-            // Have to catch this because of the semantics of calling main()
-            String msg = "Exception while calling generateclient Details: " + e.toString();
-            throw new BuildException(msg, e);
-        }
-    }
-
-    /** launch the generate client using system api */
-    protected  void executeFork() throws BuildException {
-        try {
-            log("mode : fork");
-
-            org.apache.tools.ant.taskdefs.ExecTask execTask = null;                
-            execTask = (ExecTask) getProject().createTask("exec");
-                       
-            execTask.setDir(new File("."));
-            execTask.setExecutable("iastool");
-            execTask.createArg().setValue("generateclient");
-            if (debug) {
-                execTask.createArg().setValue("-trace");                
-            } // end of if ()
-
-            //
-            execTask.createArg().setValue("-short");
-            execTask.createArg().setValue("-jarfile");
-            // ejb jar file
-            execTask.createArg().setValue(ejbjarfile.getAbsolutePath());
-            //client jar file
-            execTask.createArg().setValue("-single");
-            execTask.createArg().setValue("-clientjarfile");
-            execTask.createArg().setValue(clientjarfile.getAbsolutePath());
-
-            log("Calling java2iiop", Project.MSG_VERBOSE);
-            execTask.execute();        
-        } catch (Exception e) {
-            // Have to catch this because of the semantics of calling main()
-            String msg = "Exception while calling generateclient Details: " 
-                + e.toString();
-            throw new BuildException(msg, e);
-        }
-
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/DDCreator.java b/src/main/org/apache/tools/ant/taskdefs/optional/ejb/DDCreator.java
deleted file mode 100644
index 8aa7b3b..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/DDCreator.java
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000,2002 The Apache Software Foundation.  All rights 
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.ejb;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.DirectoryScanner;
-import org.apache.tools.ant.taskdefs.MatchingTask;
-import org.apache.tools.ant.taskdefs.Java;
-import org.apache.tools.ant.types.Commandline;
-import org.apache.tools.ant.types.Path;
-
-import java.io.File;
-
-/**
- * Build a serialised deployment descriptor given a text file description of the 
- * descriptor in the format supported by WebLogic.
- *
- * This ant task is a front end for the weblogic DDCreator tool.
- *
- * @author Conor MacNeill, Cortex ebusiness Pty Limited
- */
-public class DDCreator extends MatchingTask {
-    /**
-     * The root directory of the tree containing the textual deployment desciptors. The actual
-     * deployment descriptor files are selected using include and exclude constructs
-     * on the EJBC task, as supported by the MatchingTask superclass.
-     */
-    private File descriptorDirectory;
-    
-    /**
-     * The directory where generated serialised deployment descriptors are placed.
-     */
-    private File generatedFilesDirectory;
-        
-    /**
-     * The classpath to be used in the weblogic ejbc calls. It must contain the weblogic
-     * classes necessary fro DDCreator <b>and</b> the implementation classes of the 
-     * home and remote interfaces.
-     */
-    private String classpath;
-    
-    /**
-     * Do the work.
-     *
-     * The work is actually done by creating a helper task. This approach allows
-     * the classpath of the helper task to be set. Since the weblogic tools require
-     * the class files of the project's home and remote interfaces to be available in
-     * the classpath, this also avoids having to start ant with the class path of the
-     * project it is building.
-     *
-     * @exception BuildException if someting goes wrong with the build
-     */
-    public void execute() throws BuildException {
-        if (descriptorDirectory == null ||
-            !descriptorDirectory.isDirectory()) {
-            throw new BuildException("descriptors directory " + descriptorDirectory.getPath() + 
-                                     " is not valid");
-        }
-        if (generatedFilesDirectory == null ||
-            !generatedFilesDirectory.isDirectory()) {
-            throw new BuildException("dest directory " + generatedFilesDirectory.getPath() + 
-                                     " is not valid");
-        }
-                                    
-        String args = descriptorDirectory + " " + generatedFilesDirectory;
-            
-        // get all the files in the descriptor directory
-        DirectoryScanner ds = super.getDirectoryScanner(descriptorDirectory);
-    
-        String[] files = ds.getIncludedFiles();
-
-        for (int i = 0; i < files.length; ++i) {
-            args += " " + files[i];
-        }
-            
-        String systemClassPath = System.getProperty("java.class.path");
-        String execClassPath = project.translatePath(systemClassPath + ":" + classpath);
-        Java ddCreatorTask = (Java) project.createTask("java");
-        ddCreatorTask.setTaskName(getTaskName());
-        ddCreatorTask.setFork(true);
-        ddCreatorTask.setClassname("org.apache.tools.ant.taskdefs.optional.ejb.DDCreatorHelper");
-        Commandline.Argument arguments = ddCreatorTask.createArg();
-        arguments.setLine(args);
-        ddCreatorTask.setClasspath(new Path(project, execClassPath));                         
-        if (ddCreatorTask.executeJava() != 0) {                         
-            throw new BuildException("Execution of ddcreator helper failed");
-        }
-    }
-
-    /**
-     * Set the directory from where the text descriptions of the deployment descriptors are
-     * to be read.
-     *
-     * @param dirName the name of the directory containing the text deployment descriptor files.
-     */
-    public void setDescriptors(String dirName) {
-        descriptorDirectory = new File(dirName);
-    }
-    
-    /**
-     * Set the directory into which the serialised deployment descriptors are to 
-     * be written.
-     *
-     * @param dirName the name of the directory into which the serialised deployment
-     *                descriptors are written.
-     */
-    public void setDest(String dirName) {
-        generatedFilesDirectory = new File(dirName);
-    }
-
-    /**
-     * Set the classpath to be used for this compilation.
-     *
-     * @param s the classpath to use for the ddcreator tool.
-     */
-    public void setClasspath(String s) {
-        this.classpath = project.translatePath(s);
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/DDCreatorHelper.java b/src/main/org/apache/tools/ant/taskdefs/optional/ejb/DDCreatorHelper.java
deleted file mode 100644
index 59f08b7..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/DDCreatorHelper.java
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights 
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.ejb;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.ObjectInputStream;
-
-import javax.ejb.deployment.DeploymentDescriptor;
-
-/**
- * A helper class which performs the actual work of the ddcreator task.
- *
- * This class is run with a classpath which includes the weblogic tools and the home and remote
- * interface class files referenced in the deployment descriptors being built.
- *
- * @author Conor MacNeill, Cortex ebusiness Pty Limited
- */
-public class DDCreatorHelper {
-    /**
-     * The root directory of the tree containing the textual deployment desciptors. 
-     */
-    private File descriptorDirectory;
-    
-    /**
-     * The directory where generated serialised desployment descriptors are written.
-     */
-    private File generatedFilesDirectory;
-
-    /**
-     * The descriptor text files for which a serialised descriptor is to be created.
-     */
-    String[] descriptors; 
-
-    /**
-     * The main method.
-     *
-     * The main method creates an instance of the DDCreatorHelper, passing it the 
-     * args which it then processes.
-     */    
-    public static void main(String[] args) throws Exception {
-        DDCreatorHelper helper = new DDCreatorHelper(args);
-        helper.process();
-    }
-  
-    /**
-     * Initialise the helper with the command arguments.
-     *
-     */
-    private DDCreatorHelper(String[] args) {
-        int index = 0;
-        descriptorDirectory = new File(args[index++]);
-        generatedFilesDirectory = new File(args[index++]);
-        
-        descriptors = new String[args.length - index];
-        for (int i = 0; index < args.length; ++i) {
-            descriptors[i] = args[index++];
-        }
-    }
-    
-    /**
-     * Do the actual work.
-     *
-     * The work proceeds by examining each descriptor given. If the serialised
-     * file does not exist or is older than the text description, the weblogic
-     * DDCreator tool is invoked directly to build the serialised descriptor.
-     */    
-    private void process() throws Exception {
-        for (int i = 0; i < descriptors.length; ++i) {
-            String descriptorName = descriptors[i];
-            File descriptorFile = new File(descriptorDirectory, descriptorName);
-
-            int extIndex = descriptorName.lastIndexOf(".");
-            String serName = null;
-            if (extIndex != -1) {
-                serName = descriptorName.substring(0, extIndex) + ".ser";
-            } else {
-                serName = descriptorName + ".ser";
-            }
-            File serFile = new File(generatedFilesDirectory, serName);
-                
-            // do we need to regenerate the file
-            if (!serFile.exists() || serFile.lastModified() < descriptorFile.lastModified()
-                || regenerateSerializedFile(serFile)) {
-                
-                String[] args = {"-noexit", 
-                                 "-d", serFile.getParent(),
-                                 "-outputfile", serFile.getName(),
-                                 descriptorFile.getPath()};
-                try {
-                    weblogic.ejb.utils.DDCreator.main(args);
-                } catch (Exception e) {
-                    // there was an exception - run with no exit to get proper error
-                    String[] newArgs = {"-d", generatedFilesDirectory.getPath(),
-                                 "-outputfile", serFile.getName(),
-                                 descriptorFile.getPath()};
-                    weblogic.ejb.utils.DDCreator.main(newArgs);
-                }
-            }
-        }
-    }
-
-    /**
-     * EJBC will fail if the serialized descriptor file does not match the bean classes.
-     * You can test for this by trying to load the deployment descriptor.  If it fails,
-     * the serialized file needs to be regenerated because the associated class files
-     * don't match.
-     */
-    private boolean regenerateSerializedFile(File serFile) {
-        try {
-
-            FileInputStream fis = new FileInputStream(serFile);
-            ObjectInputStream ois = new ObjectInputStream(fis);
-            DeploymentDescriptor dd = (DeploymentDescriptor) ois.readObject();
-            fis.close();
-
-            // Since the descriptor read properly, everything should be o.k.
-            return false;
-
-        } catch (Exception e) {
-            
-            // Weblogic will throw an error if the deployment descriptor does 
-            // not match the class files.
-            return true;
-
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/DescriptorHandler.java b/src/main/org/apache/tools/ant/taskdefs/optional/ejb/DescriptorHandler.java
deleted file mode 100644
index d7c400b..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/DescriptorHandler.java
+++ /dev/null
@@ -1,376 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.ejb;
-
-import java.util.Hashtable;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.InputStream;
-import java.io.IOException;
-import java.net.URL;
-
-import org.xml.sax.InputSource;
-import org.xml.sax.SAXException;
-import org.xml.sax.AttributeList;
-
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.Project;
-
-/**
- * Inner class used by EjbJar to facilitate the parsing of deployment
- * descriptors and the capture of appropriate information. Extends
- * HandlerBase so it only implements the methods needed. During parsing
- * creates a hashtable consisting of entries mapping the name it should be
- * inserted into an EJB jar as to a File representing the file on disk. This
- * list can then be accessed through the getFiles() method.
- */
-public class DescriptorHandler extends org.xml.sax.HandlerBase {
-    private static final int STATE_LOOKING_EJBJAR = 1;
-    private static final int STATE_IN_EJBJAR = 2;
-    private static final int STATE_IN_BEANS = 3;
-    private static final int STATE_IN_SESSION = 4;
-    private static final int STATE_IN_ENTITY = 5;
-    private static final int STATE_IN_MESSAGE = 6;
-
-    private Task owningTask;
-
-    private String publicId = null;
-
-    /**
-     * Bunch of constants used for storing entries in a hashtable, and for
-     * constructing the filenames of various parts of the ejb jar.
-     */
-    private static final String EJB_REF               = "ejb-ref";
-    private static final String HOME_INTERFACE        = "home";
-    private static final String REMOTE_INTERFACE      = "remote";
-    private static final String LOCAL_HOME_INTERFACE  = "local-home";
-    private static final String LOCAL_INTERFACE       = "local";
-    private static final String BEAN_CLASS            = "ejb-class";
-    private static final String PK_CLASS              = "prim-key-class";
-    private static final String EJB_NAME              = "ejb-name";
-    private static final String EJB_JAR               = "ejb-jar";
-    private static final String ENTERPRISE_BEANS      = "enterprise-beans";
-    private static final String ENTITY_BEAN           = "entity";
-    private static final String SESSION_BEAN          = "session";
-    private static final String MESSAGE_BEAN          = "message-driven";
-
-    /**
-     * The state of the parsing
-     */
-    private int parseState = STATE_LOOKING_EJBJAR;
-
-    /**
-     * Instance variable used to store the name of the current element being
-     * processed by the SAX parser.  Accessed by the SAX parser call-back methods
-     * startElement() and endElement().
-     */
-    protected String currentElement = null;
-
-    /**
-     * The text of the current element
-     */
-    protected String currentText = null;
-
-    /**
-     * Instance variable that stores the names of the files as they will be
-     * put into the jar file, mapped to File objects  Accessed by the SAX
-     * parser call-back method characters().
-     */
-    protected Hashtable ejbFiles = null;
-
-    /**
-     * Instance variable that stores the value found in the &lt;ejb-name&gt; element
-     */
-    protected String ejbName = null;
-
-    private Hashtable fileDTDs = new Hashtable();
-
-    private Hashtable resourceDTDs = new Hashtable();
-
-    private boolean inEJBRef = false;
-
-    private Hashtable urlDTDs = new Hashtable();
-
-    /**
-     * The directory containing the bean classes and interfaces. This is
-     * used for performing dependency file lookups.
-     */
-    private File srcDir;
-
-    public DescriptorHandler(Task task, File srcDir) {
-        this.owningTask = task;
-        this.srcDir = srcDir;
-    }
-
-    public void registerDTD(String publicId, String location) {
-        if (location == null) {
-            return;
-        }
-
-        File fileDTD = new File(location);
-        if (fileDTD.exists()) {
-            if (publicId != null) {
-                fileDTDs.put(publicId, fileDTD);
-                owningTask.log("Mapped publicId " + publicId + " to file " + fileDTD, Project.MSG_VERBOSE);
-            }
-            return;
-        }
-
-        if (getClass().getResource(location) != null) {
-            if (publicId != null) {
-                resourceDTDs.put(publicId, location);
-                owningTask.log("Mapped publicId " + publicId + " to resource " + location, Project.MSG_VERBOSE);
-            }
-        }
-
-        try {
-            if (publicId != null) {
-                URL urldtd = new URL(location);
-                urlDTDs.put(publicId, urldtd);
-            }
-        } catch (java.net.MalformedURLException e) {
-            //ignored
-        }
-
-    }
-
-    public InputSource resolveEntity(String publicId, String systemId)
-        throws SAXException {
-        this.publicId = publicId;
-
-        File dtdFile = (File) fileDTDs.get(publicId);
-        if (dtdFile != null) {
-            try {
-                owningTask.log("Resolved " + publicId + " to local file " + dtdFile, Project.MSG_VERBOSE);
-                return new InputSource(new FileInputStream(dtdFile));
-            } catch (FileNotFoundException ex) {
-                // ignore
-            }
-        }
-
-        String dtdResourceName = (String) resourceDTDs.get(publicId);
-        if (dtdResourceName != null) {
-            InputStream is = this.getClass().getResourceAsStream(dtdResourceName);
-            if (is != null) {
-                owningTask.log("Resolved " + publicId + " to local resource " + dtdResourceName, Project.MSG_VERBOSE);
-                return new InputSource(is);
-            }
-        }
-
-        URL dtdUrl = (URL) urlDTDs.get(publicId);
-        if (dtdUrl != null) {
-            try {
-                InputStream is = dtdUrl.openStream();
-                owningTask.log("Resolved " + publicId + " to url " + dtdUrl, Project.MSG_VERBOSE);
-                return new InputSource(is);
-            } catch (IOException ioe) {
-                //ignore
-            }
-        }
-
-        owningTask.log("Could not resolve ( publicId: " + publicId + ", systemId: " + systemId + ") to a local entity",
-                        Project.MSG_INFO);
-
-        return null;
-    }
-
-    /**
-     * Getter method that returns the set of files to include in the EJB jar.
-     */
-    public Hashtable getFiles() {
-        return (ejbFiles == null) ? new Hashtable() : ejbFiles;
-    }
-
-    /**
-     * Get the publicId of the DTD
-     */
-    public String getPublicId() {
-        return publicId;
-    }
-
-     /**
-     * Getter method that returns the value of the &lt;ejb-name&gt; element.
-     */
-    public String getEjbName() {
-        return ejbName;
-    }
-
-    /**
-     * SAX parser call-back method that is used to initialize the values of some
-     * instance variables to ensure safe operation.
-     */
-    public void startDocument() throws SAXException {
-        this.ejbFiles = new Hashtable(10, 1);
-        this.currentElement = null;
-        inEJBRef = false;
-    }
-
-
-    /**
-     * SAX parser call-back method that is invoked when a new element is entered
-     * into.  Used to store the context (attribute name) in the currentAttribute
-     * instance variable.
-     * @param name The name of the element being entered.
-     * @param attrs Attributes associated to the element.
-     */
-    public void startElement(String name, AttributeList attrs)
-        throws SAXException {
-        this.currentElement = name;
-        currentText = "";
-        if (name.equals(EJB_REF)) {
-            inEJBRef = true;
-        } else if (parseState == STATE_LOOKING_EJBJAR && name.equals(EJB_JAR)) {
-            parseState = STATE_IN_EJBJAR;
-        } else if (parseState == STATE_IN_EJBJAR && name.equals(ENTERPRISE_BEANS)) {
-            parseState = STATE_IN_BEANS;
-        } else if (parseState == STATE_IN_BEANS && name.equals(SESSION_BEAN)) {
-            parseState = STATE_IN_SESSION;
-        } else if (parseState == STATE_IN_BEANS && name.equals(ENTITY_BEAN)) {
-            parseState = STATE_IN_ENTITY;
-        } else if (parseState == STATE_IN_BEANS && name.equals(MESSAGE_BEAN)) {
-            parseState = STATE_IN_MESSAGE;
-        }
-    }
-
-
-    /**
-     * SAX parser call-back method that is invoked when an element is exited.
-     * Used to blank out (set to the empty string, not nullify) the name of
-     * the currentAttribute.  A better method would be to use a stack as an
-     * instance variable, however since we are only interested in leaf-node
-     * data this is a simpler and workable solution.
-     * @param name The name of the attribute being exited. Ignored
-     *        in this implementation.
-     */
-    public void endElement(String name) throws SAXException {
-        processElement();
-        currentText = "";
-        this.currentElement = "";
-        if (name.equals(EJB_REF)) {
-            inEJBRef = false;
-        } else if (parseState == STATE_IN_ENTITY && name.equals(ENTITY_BEAN)) {
-            parseState = STATE_IN_BEANS;
-        } else if (parseState == STATE_IN_SESSION && name.equals(SESSION_BEAN)) {
-            parseState = STATE_IN_BEANS;
-        } else if (parseState == STATE_IN_MESSAGE && name.equals(MESSAGE_BEAN)) {
-            parseState = STATE_IN_BEANS;
-        } else if (parseState == STATE_IN_BEANS && name.equals(ENTERPRISE_BEANS)) {
-            parseState = STATE_IN_EJBJAR;
-        } else if (parseState == STATE_IN_EJBJAR && name.equals(EJB_JAR)) {
-            parseState = STATE_LOOKING_EJBJAR;
-        }
-    }
-
-    /**
-     * SAX parser call-back method invoked whenever characters are located within
-     * an element.  currentAttribute (modified by startElement and endElement)
-     * tells us whether we are in an interesting element (one of the up to four
-     * classes of an EJB).  If so then converts the classname from the format
-     * org.apache.tools.ant.Parser to the convention for storing such a class,
-     * org/apache/tools/ant/Parser.class.  This is then resolved into a file
-     * object under the srcdir which is stored in a Hashtable.
-     * @param ch A character array containing all the characters in
-     *        the element, and maybe others that should be ignored.
-     * @param start An integer marking the position in the char
-     *        array to start reading from.
-     * @param length An integer representing an offset into the
-     *        char array where the current data terminates.
-     */
-    public void characters(char[] ch, int start, int length)
-        throws SAXException {
-
-        currentText += new String(ch, start, length);
-    }
-
-
-    protected void processElement() {
-        if (inEJBRef || 
-            (parseState != STATE_IN_ENTITY && parseState != STATE_IN_SESSION && parseState != STATE_IN_MESSAGE)) {
-            return;
-        }
-
-        if (currentElement.equals(HOME_INTERFACE)   ||
-            currentElement.equals(REMOTE_INTERFACE) ||
-            currentElement.equals(LOCAL_INTERFACE) ||
-            currentElement.equals(LOCAL_HOME_INTERFACE) ||
-            currentElement.equals(BEAN_CLASS)       ||
-            currentElement.equals(PK_CLASS)) {
-
-            // Get the filename into a String object
-            File classFile = null;
-            String className = currentText.trim();
-
-            // If it's a primitive wrapper then we shouldn't try and put
-            // it into the jar, so ignore it.
-            if (!className.startsWith("java.") &&
-                !className.startsWith("javax.")) {
-                // Translate periods into path separators, add .class to the
-                // name, create the File object and add it to the Hashtable.
-                className = className.replace('.', File.separatorChar);
-                className += ".class";
-                classFile = new File(srcDir, className);
-                ejbFiles.put(className, classFile);
-            }
-        }
-
-    // Get the value of the <ejb-name> tag.  Only the first occurence.
-        if (currentElement.equals(EJB_NAME)) {
-            if (ejbName == null) {
-                ejbName = currentText.trim();
-            }
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/EJBDeploymentTool.java b/src/main/org/apache/tools/ant/taskdefs/optional/ejb/EJBDeploymentTool.java
deleted file mode 100644
index 3e9569f..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/EJBDeploymentTool.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.ejb;
-
-
-
-import javax.xml.parsers.SAXParser;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Task;
-
-
-public interface EJBDeploymentTool {
-    /**
-     * Process a deployment descriptor, generating the necessary vendor specific
-     * deployment files.
-     *
-     * @param descriptorFilename the name of the deployment descriptor
-     * @param saxParser a SAX parser which can be used to parse the deployment descriptor. 
-     */
-    void processDescriptor(String descriptorFilename, SAXParser saxParser) 
-        throws BuildException;
-    
-    /**
-     * Called to validate that the tool parameters have been configured.
-     *
-     */
-    void validateConfigured() throws BuildException;
-
-    /**
-     * Set the task which owns this tool
-     */
-    void setTask(Task task);
-    
-    /**
-     * Configure this tool for use in the ejbjar task.
-     */
-    void configure(EjbJar.Config config);     
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/EjbJar.java b/src/main/org/apache/tools/ant/taskdefs/optional/ejb/EjbJar.java
deleted file mode 100644
index 69d0c9f..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/EjbJar.java
+++ /dev/null
@@ -1,613 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.ejb;
-
-// Standard java imports
-import java.io.File;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Iterator;
-
-// XML imports
-import javax.xml.parsers.SAXParser;
-import javax.xml.parsers.SAXParserFactory;
-import javax.xml.parsers.ParserConfigurationException;
-import org.xml.sax.SAXException;
-
-// Apache/Ant imports
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.DirectoryScanner;
-import org.apache.tools.ant.taskdefs.MatchingTask;
-import org.apache.tools.ant.types.Path;
-import org.apache.tools.ant.types.EnumeratedAttribute;
-import org.apache.tools.ant.types.FileSet;
-
-/**
- * <p>
- * Provides automated ejb jar file creation for ant. Extends the
- * MatchingTask class provided in the default ant distribution to provide a
- * directory scanning EJB jarfile generator.
- * </p>
- *
- * <p>
- * The task works by taking the deployment descriptors one at a time and
- * parsing them to locate the names of the classes which should be placed in
- * the jar. The classnames are translated to java.io.Files by replacing
- * periods with File.separatorChar and resolving the generated filename as a
- * relative path under the srcDir attribute. All necessary files are then
- * assembled into a jarfile. One jarfile is constructed for each deployment
- * descriptor found. 
- * </p>
- *
- * @author <a href="mailto:tfennell@sapient.com">Tim Fennell</a>
- * @author Conor MacNeill
- */
-public class EjbJar extends MatchingTask {
-
-    /**
-     * Inner class used to record information about the location of a local DTD
-     */
-    public static class DTDLocation 
-        extends org.apache.tools.ant.types.DTDLocation {
-    }
-
-    /**
-     * A class which contains the configuration state of the ejbjar task.
-     * This state is passed to the deployment tools for configuration
-     */
-    static class Config {
-        /** 
-         * Stores a handle to the directory under which to search for class 
-         * files 
-         */
-        public File srcDir;
-
-        /**
-         * Stores a handle to the directory under which to search for
-         * deployment descriptors
-         */
-        public File descriptorDir;
-
-        /** Instance variable that marks the end of the 'basename' */
-        public String baseNameTerminator = "-";
-
-        /** Stores a handle to the destination EJB Jar file */
-        public String baseJarName;
-
-        /**
-         * Instance variable that determines whether to use a package structure
-         * of a flat directory as the destination for the jar files.
-         */
-        public boolean flatDestDir = false;
-
-        /**
-         * The classpath to use when loading classes
-         */
-        public Path classpath;
-
-        /**
-         * A Fileset of support classes
-         */
-        public List supportFileSets = new ArrayList();
-
-        /**
-         * The list of configured DTD locations
-         */
-        public ArrayList dtdLocations = new ArrayList();
-
-        /**
-         * The naming scheme used to determine the generated jar name
-         * from the descriptor information
-         */
-        public NamingScheme namingScheme;
-
-        /**
-         * The Manifest file
-         */
-        public File manifest;
-        
-        /**
-         * The dependency analyzer to use to add additional classes to the jar
-         */
-        public String analyzer;
-    }
-
-    /**
-     * An EnumeratedAttribute class for handling different EJB jar naming
-     * schemes
-     */
-    public static class NamingScheme extends EnumeratedAttribute {
-        /** 
-         * Naming scheme where generated jar is determined from the ejb-name in
-         * the deployment descripor 
-         */
-        public static final String EJB_NAME = "ejb-name";
-
-        /**
-         * Naming scheme where the generated jar name is based on the 
-         * name of the directory containing the deployment descriptor 
-         */
-        public static final String DIRECTORY = "directory";
-        
-        /** 
-         * Naming scheme where the generated jar name is based on the name of
-         * the deployment descriptor file
-         */
-        public static final String DESCRIPTOR = "descriptor";
-        
-        /** 
-         * Naming scheme where the generated jar is named by the basejarname 
-         * attribute 
-         */
-        public static final String BASEJARNAME = "basejarname";
-        
-        /**
-         * Gets the values of the NamingScheme
-         *
-         * @return an array of the values of this attribute class.
-         */
-        public String[] getValues() {
-            return new String[] {EJB_NAME, DIRECTORY, DESCRIPTOR, BASEJARNAME};
-        }
-    }
-
-    /**
-     * The config which is built by this task and used by the various deployment
-     * tools to access the configuration of the ejbjar task 
-     */
-    private Config config = new Config();
-
-
-    /**
-     * Stores a handle to the directory to put the Jar files in. This is
-     * only used by the generic deployment descriptor tool which is created
-     * if no other deployment descriptor tools are provided. Normally each
-     * deployment tool will specify the desitination dir itself.
-     */
-    private File destDir;
-
-    /** Instance variable that stores the suffix for the generated jarfile. */
-    private String genericJarSuffix = "-generic.jar";
-
-    /** The list of deployment tools we are going to run. */
-    private ArrayList deploymentTools = new ArrayList();
-
-    /**
-     * Create a weblogic nested element used to configure a
-     * deployment tool for Weblogic server.
-     *
-     * @return the deployment tool instance to be configured.
-     */
-    public WeblogicDeploymentTool createWeblogic() {
-        WeblogicDeploymentTool tool = new WeblogicDeploymentTool();
-        tool.setTask(this);
-        deploymentTools.add(tool);
-        return tool;
-    }
-
-    /**
-     * Create a websphere nested element used to configure a
-     * deployment tool for Websphere 4.0 server.
-     *
-     * @return the deployment tool instance to be configured.
-     */
-    public WebsphereDeploymentTool createWebsphere() {
-        WebsphereDeploymentTool tool = new WebsphereDeploymentTool();
-        tool.setTask(this);
-        deploymentTools.add(tool);
-        return tool;
-    }
-
-    /**
-     * Create a Borland nested element used to configure a
-     * deployment tool for Borland server.
-     *
-     * @return the deployment tool instance to be configured.
-     */
-    public BorlandDeploymentTool createBorland() {
-        log("Borland deployment tools",  Project.MSG_VERBOSE);
-
-        BorlandDeploymentTool tool = new BorlandDeploymentTool();
-        tool.setTask(this);
-        deploymentTools.add(tool);
-        return tool;
-    }
-
-    /**
-     * Create a nested element used to configure a deployment tool for iPlanet
-     * Application Server.
-     *
-     * @return the deployment tool instance to be configured.
-     */
-    public IPlanetDeploymentTool createIplanet() {
-        log("iPlanet Application Server deployment tools", Project.MSG_VERBOSE);
-
-        IPlanetDeploymentTool tool = new IPlanetDeploymentTool();
-        tool.setTask(this);
-        deploymentTools.add(tool);
-        return tool;
-    }
-
-    /**
-     * Create a jboss nested element used to configure a
-     * deployment tool for Jboss server.
-     *
-     * @return the deployment tool instance to be configured.
-     */
-    public JbossDeploymentTool createJboss() {
-        JbossDeploymentTool tool = new JbossDeploymentTool();
-        tool.setTask(this);
-        deploymentTools.add(tool);
-        return tool;
-    }
-
-    /**
-     * Create a jonas nested element used to configure a
-     * deployment tool for JOnAS server.
-     *
-     * @return the deployment tool instance to be configured.
-     */
-    public JonasDeploymentTool createJonas() {
-        log("JOnAS deployment tools",  Project.MSG_VERBOSE);
-        
-        JonasDeploymentTool tool = new JonasDeploymentTool();
-        tool.setTask(this);
-        deploymentTools.add(tool);
-        return tool;
-    }    
-    
-    /**
-     * Create a nested element for weblogic when using the Toplink
-     * Object- Relational mapping.
-     *
-     * @return the deployment tool instance to be configured.
-     */
-    public WeblogicTOPLinkDeploymentTool createWeblogictoplink() {
-        log("The <weblogictoplink> element is no longer required. Please use "
-            + "the <weblogic> element and set newCMP=\"true\"", 
-            Project.MSG_INFO); 
-        WeblogicTOPLinkDeploymentTool tool 
-            = new WeblogicTOPLinkDeploymentTool();
-        tool.setTask(this);
-        deploymentTools.add(tool);
-        return tool;
-    }
-
-    /**
-     * creates a nested classpath element.
-     *
-     * This classpath is used to locate the super classes and interfaces
-     * of the classes that will make up the EJB jar.
-     *
-     * @return the path to be configured.
-     */
-    public Path createClasspath() {
-        if (config.classpath == null) {
-            config.classpath = new Path(project);
-        }
-        return config.classpath.createPath();
-    }
-
-    /**
-     * Create a DTD location record. This stores the location of a DTD. The
-     * DTD is identified by its public Id. The location may either be a file
-     * location or a resource location.
-     *
-     * @return the DTD location object to be configured by Ant
-     */
-    public DTDLocation createDTD() {
-        DTDLocation dtdLocation = new DTDLocation();
-        config.dtdLocations.add(dtdLocation);
-
-        return dtdLocation;
-    }
-
-    /**
-     * Create a file set for support elements
-     *
-     * @return a fileset which can be populated with support files.
-     */
-    public FileSet createSupport() {
-        FileSet supportFileSet = new FileSet();
-        config.supportFileSets.add(supportFileSet);
-        return supportFileSet;
-    }
-
-
-    /**
-     * Set the Manifest file to use when jarring. As of EJB 1.1, manifest
-     * files are no longer used to configure the EJB. However, they still
-     * have a vital importance if the EJB is intended to be packaged in an
-     * EAR file. By adding "Class-Path" settings to a Manifest file, the EJB
-     * can look for classes inside the EAR file itself, allowing for easier
-     * deployment. This is outlined in the J2EE specification, and all J2EE
-     * components are meant to support it.
-     *
-     * @param manifest the manifest to be used in the EJB jar
-     */
-     public void setManifest(File manifest) {
-         config.manifest = manifest;
-     }
-
-    /**
-     * Set the srcdir attribute. The source directory is the directory that
-     * contains the classes that will be added to the EJB jar. Typically
-     * this will include the home and remote interfaces and the bean class.
-     *
-     * @param inDir the source directory.
-     */
-    public void setSrcdir(File inDir) {
-        config.srcDir = inDir;
-    }
-
-    /**
-     * Set the descriptor directory. The descriptor directory contains the
-     * EJB deployment descriptors. These are XML files that declare the
-     * properties of a bean in a particular deployment scenario. Such
-     * properties include, for example, the transactional nature of the bean
-     * and the security access control to the bean's methods.
-     *
-     * @param inDir the directory containing the deployment descriptors.
-     */
-    public void setDescriptordir(File inDir) {
-        config.descriptorDir = inDir;
-    }
-
-    /**
-     * Set the analyzer to use when adding in dependencies to the jar
-     *
-     * @param analyzer the name of the dependency analyzer or a class.
-     */
-    public void setDependency(String analyzer) {
-        config.analyzer = analyzer;
-    }
-    
-    /**
-     * Set the base name of the EJB jar that is to be created if it is not
-     * to be determined from the name of the deployment descriptor files.
-     *
-     * @param inValue the basename that will be used when writing the jar
-     *      file containing the EJB
-     */
-    public void setBasejarname(String inValue) {
-        config.baseJarName = inValue;
-        if (config.namingScheme == null) {
-            config.namingScheme = new NamingScheme();
-            config.namingScheme.setValue(NamingScheme.BASEJARNAME);
-        } else if (!config.namingScheme.getValue().equals(NamingScheme.BASEJARNAME)) {
-            throw new BuildException("The basejarname attribute is not compatible with the " +
-                                     config.namingScheme.getValue() + " naming scheme");
-        }
-    }
-
-    /**
-     * Set the naming scheme used to determine the name of the generated jars
-     * from the deployment descriptor
-     *
-     * @param namingScheme the naming scheme to be used
-     */
-    public void setNaming(NamingScheme namingScheme) {
-        config.namingScheme = namingScheme;
-        if (!config.namingScheme.getValue().equals(NamingScheme.BASEJARNAME) &&
-            config.baseJarName != null) {
-            throw new BuildException("The basejarname attribute is not compatible with the " +
-                                     config.namingScheme.getValue() + " naming scheme");
-        }
-    }
-
-
-    /**
-     * Set the destination directory. The EJB jar files will be written into
-     * this directory. The jar files that exist in this directory are also
-     * used when determining if the contents of the jar file have changed.
-     * Note that this parameter is only used if no deployment tools are
-     * specified. Typically each deployment tool will specify its own
-     * destination directory.
-     *
-     * @param inDir the destination directory in which to generate jars
-     */
-    public void setDestdir(File inDir) {
-        this.destDir = inDir;
-    }
-
-    /**
-     * Set the classpath to use when resolving classes for inclusion in the jar.
-     *
-     * @param classpath the classpath to use.
-     */
-    public void setClasspath(Path classpath) {
-        config.classpath = classpath;
-    }
-
-    /**
-     * Set the flat dest dir flag. This flag controls whether the
-     * destination jars are written out in the destination directory with
-     * the same hierarchal structure from which the deployment descriptors
-     * have been read. If this is set to true the generated EJB jars are
-     * written into the root of the destination directory, otherwise they
-     * are written out in the same relative position as the deployment
-     * descriptors in the descriptor directory.
-     *
-     * @param inValue the new value of the flatdestdir flag.
-     */
-    public void setFlatdestdir(boolean inValue) {
-        config.flatDestDir = inValue;
-    }
-
-    /**
-     * Set the suffix for the generated jar file. When generic jars are
-     * generated, they have a suffix which is appended to the the bean name
-     * to create the name of the jar file. Note that this suffix includes
-     * the extension fo te jar file and should therefore end with an
-     * appropriate extension such as .jar or .ear
-     *
-     * @param inString the string to use as the suffix.
-     */
-    public void setGenericjarsuffix(String inString) {
-        this.genericJarSuffix = inString;
-    }
-
-    /**
-     * Set the baseNameTerminator. The basename terminator is the string
-     * which terminates the bean name. The convention used by this task is
-     * that bean descriptors are named as the BeanName with some suffix. The
-     * baseNameTerminator string separates the bean name and the suffix and
-     * is used to determine the bean name.
-     *
-     * @param inValue a string which marks the end of the basename.
-     */
-    public void setBasenameterminator(String inValue) {
-        config.baseNameTerminator = inValue;
-    }
-
-    /**
-     * Validate the config that has been configured from the build file
-     *
-     * @throws BuildException if the config is not valid
-     */
-    private void validateConfig() throws BuildException {
-        if (config.srcDir == null) {
-            throw new BuildException("The srcDir attribute must be specified");
-        }
-
-        if (config.descriptorDir == null) {
-            config.descriptorDir = config.srcDir;
-        }
-
-        if (config.namingScheme == null) {
-            config.namingScheme = new NamingScheme();
-            config.namingScheme.setValue(NamingScheme.DESCRIPTOR);
-        } else if (config.namingScheme.getValue().equals(NamingScheme.BASEJARNAME) &&
-                 config.baseJarName == null) {
-            throw new BuildException("The basejarname attribute must be specified " +
-                                     "with the basejarname naming scheme");
-        }
-    }
-
-    /**
-     * Invoked by Ant after the task is prepared, when it is ready to execute
-     * this task.
-     *
-     * This will configure all of the nested deployment tools to allow them to
-     * process the jar. If no deployment tools have been configured a generic
-     * tool is created to handle the jar.
-     *
-     * A parser is configured and then each descriptor found is passed to all
-     * the deployment tool elements for processing.
-     *
-     * @exception BuildException thrown whenever a problem is
-     *            encountered that cannot be recovered from, to signal to ant
-     *            that a major problem occurred within this task.
-     */
-    public void execute() throws BuildException {
-        validateConfig();
-
-        if (deploymentTools.size() == 0) {
-            GenericDeploymentTool genericTool = new GenericDeploymentTool();
-            genericTool.setTask(this);
-            genericTool.setDestdir(destDir);
-            genericTool.setGenericJarSuffix(genericJarSuffix);
-            deploymentTools.add(genericTool);
-        }
-
-        for (Iterator i = deploymentTools.iterator(); i.hasNext();) {
-            EJBDeploymentTool tool = (EJBDeploymentTool) i.next();
-            tool.configure(config);
-            tool.validateConfigured();
-        }
-
-        try {
-            // Create the parser using whatever parser the system dictates
-            SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
-            saxParserFactory.setValidating(true);
-            SAXParser saxParser = saxParserFactory.newSAXParser();
-
-
-            DirectoryScanner ds = getDirectoryScanner(config.descriptorDir);
-            ds.scan();
-            String[] files = ds.getIncludedFiles();
-
-            log(files.length + " deployment descriptors located.",
-                Project.MSG_VERBOSE);
-
-            // Loop through the files. Each file represents one deployment
-            // descriptor, and hence one bean in our model.
-            for (int index = 0; index < files.length; ++index) {
-                // process the deployment descriptor in each tool
-                for (Iterator i = deploymentTools.iterator(); i.hasNext();) {
-                    EJBDeploymentTool tool = (EJBDeploymentTool) i.next();
-                    tool.processDescriptor(files[index], saxParser);
-                }
-            }
-        } catch (SAXException se) {
-            String msg = "SAXException while creating parser."
-                + "  Details: "
-                + se.getMessage();
-            throw new BuildException(msg, se);
-        } catch (ParserConfigurationException pce) {
-            String msg = "ParserConfigurationException while creating parser. "
-                       + "Details: " + pce.getMessage();
-            throw new BuildException(msg, pce);
-        }
-    } // end of execute()
-}
-
-
-
-
-
-
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/Ejbc.java b/src/main/org/apache/tools/ant/taskdefs/optional/ejb/Ejbc.java
deleted file mode 100644
index 8e2f1f5..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/Ejbc.java
+++ /dev/null
@@ -1,220 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000,2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.ejb;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.DirectoryScanner;
-import org.apache.tools.ant.taskdefs.MatchingTask;
-import org.apache.tools.ant.taskdefs.Java;
-import org.apache.tools.ant.types.Commandline;
-import org.apache.tools.ant.types.Path;
-
-import java.io.File;
-
-/**
- * Build EJB support classes using Weblogic's ejbc tool from a directory containing
- * a set of deployment descriptors.
- *
- *
- * @author Conor MacNeill, Cortex ebusiness Pty Limited
- */
-public class Ejbc extends MatchingTask {
-    /**
-     * The root directory of the tree containing the serialised deployment desciptors. The actual
-     * deployment descriptor files are selected using include and exclude constructs
-     * on the ejbc task provided by the MatchingTask superclass.
-     */
-    private File descriptorDirectory;
-
-    /**
-     * The directory where generated files are placed.
-     */
-    private File generatedFilesDirectory;
-
-    /**
-     * The name of the manifest file generated for the EJB jar.
-     */
-    private File generatedManifestFile;
-
-    /**
-     * The classpath to be used in the weblogic ejbc calls. It must contain the weblogic
-     * classes <b>and</b> the implementation classes of the home and remote interfaces.
-     */
-    private String classpath;
-
-    /**
-     * The source directory for the home and remote interfaces. This is used to determine if
-     * the generated deployment classes are out of date.
-     */
-    private File sourceDirectory;
-
-    public boolean keepgenerated;
-
-    /**
-     * Do the work.
-     *
-     * The work is actually done by creating a separate JVM to run a helper task.
-     * This approach allows the classpath of the helper task to be set. Since the
-     * weblogic tools require the class files of the project's home and remote
-     * interfaces to be available in the classpath, this also avoids having to
-     * start ant with the class path of the project it is building.
-     *
-     * @exception BuildException if someting goes wrong with the build
-     */
-    public void execute() throws BuildException {
-        if (descriptorDirectory == null ||
-            !descriptorDirectory.isDirectory()) {
-            throw new BuildException("descriptors directory " + descriptorDirectory.getPath() +
-                                     " is not valid");
-        }
-        if (generatedFilesDirectory == null ||
-            !generatedFilesDirectory.isDirectory()) {
-            throw new BuildException("dest directory " + generatedFilesDirectory.getPath() +
-                                     " is not valid");
-        }
-
-        if (sourceDirectory == null ||
-            !sourceDirectory.isDirectory()) {
-            throw new BuildException("src directory " + sourceDirectory.getPath() +
-                                     " is not valid");
-        }
-
-        String systemClassPath = System.getProperty("java.class.path");
-        String execClassPath = project.translatePath(systemClassPath + ":" + classpath +
-                                                         ":" + generatedFilesDirectory);
-        // get all the files in the descriptor directory
-        DirectoryScanner ds = super.getDirectoryScanner(descriptorDirectory);
-
-        String[] files = ds.getIncludedFiles();
-
-        Java helperTask = (Java) project.createTask("java");
-        helperTask.setTaskName(getTaskName());
-        helperTask.setFork(true);
-        helperTask.setClassname("org.apache.tools.ant.taskdefs.optional.ejb.EjbcHelper");
-        String args = "";
-        args += " " + descriptorDirectory;
-        args += " " + generatedFilesDirectory;
-        args += " " + sourceDirectory;
-        args += " " + generatedManifestFile;
-        args += " " + keepgenerated;
-
-        for (int i = 0; i < files.length; ++i) {
-            args += " " + files[i];
-        }
-
-        Commandline.Argument arguments = helperTask.createArg();
-        arguments.setLine(args);
-        helperTask.setClasspath(new Path(project, execClassPath));
-        if (helperTask.executeJava() != 0) {
-            throw new BuildException("Execution of ejbc helper failed");
-        }
-    }
-
-    public boolean getKeepgenerated() {
-        return keepgenerated;
-    }
-
-    /**
-     * Set the directory from where the serialised deployment descriptors are
-     * to be read.
-     *
-     * @param dirName the name of the directory containing the serialised deployment descriptors.
-     */
-    public void setDescriptors(String dirName) {
-        descriptorDirectory = new File(dirName);
-    }
-
-    /**
-     * Set the directory into which the support classes, RMI stubs, etc are to be written
-     *
-     * @param dirName the name of the directory into which code is generated
-     */
-    public void setDest(String dirName) {
-        generatedFilesDirectory = new File(dirName);
-    }
-
-    public void setKeepgenerated(String newKeepgenerated) {
-        keepgenerated = Boolean.valueOf(newKeepgenerated.trim()).booleanValue();
-
-    }
-
-    /**
-     * Set the generated manifest file.
-     *
-     * For each EJB that is processed an entry is created in this file. This can then be used
-     * to create a jar file for dploying the beans.
-     *
-     * @param manifestFilename the name of the manifest file to be generated.
-     */
-    public void setManifest(String manifestFilename) {
-        generatedManifestFile = new File(manifestFilename);
-    }
-
-    /**
-     * Set the classpath to be used for this compilation.
-     */
-    public void setClasspath(String s) {
-        this.classpath = project.translatePath(s);
-    }
-
-    /**
-     * Set the directory containing the source code for the home interface, remote interface
-     * and public key class definitions.
-     *
-     * @param dirName the directory containg the source tree for the EJB's interface classes.
-     */
-    public void setSrc(String dirName) {
-        sourceDirectory = new File(dirName);
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/EjbcHelper.java b/src/main/org/apache/tools/ant/taskdefs/optional/ejb/EjbcHelper.java
deleted file mode 100644
index 15a5c2d..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/EjbcHelper.java
+++ /dev/null
@@ -1,291 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights 
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.ejb;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.FileInputStream;
-import java.io.ObjectInputStream;
-import java.io.FileWriter;
-import java.io.PrintWriter;
-import java.util.Vector;
-
-import javax.ejb.deployment.EntityDescriptor;
-import javax.ejb.deployment.DeploymentDescriptor;
-
-
-/**
- * A helper class which performs the actual work of the ejbc task.
- *
- * This class is run with a classpath which includes the weblogic tools and the home and remote
- * interface class files referenced in the deployment descriptors being processed.
- *
- * @author Conor MacNeill, Cortex ebusiness Pty Limited
- */
-public class EjbcHelper {
-    /**
-     * The root directory of the tree containing the serialised deployment desciptors. 
-     */
-    private File descriptorDirectory;
-    
-    /**
-     * The directory where generated files are placed.
-     */
-    private File generatedFilesDirectory;
-    
-    /**
-     * The name of the manifest file generated for the EJB jar.
-     */
-    private File manifestFile;
-    
-    /**
-     * The classpath to be used in the weblogic ejbc calls. It must contain the weblogic
-     * classes <b>and</b> the implementation classes of the home and remote interfaces.
-     */
-    private String classpath;
-    
-    /**
-     * The source directory for the home and remote interfaces. This is used to determine if
-     * the generated deployment classes are out of date.
-     */
-    private File sourceDirectory;
-   
-    /**
-     * The names of the serialised deployment descriptors
-     */
-    String[] descriptors;
-
-    private boolean keepGenerated;
-
-    /**
-     * Command line interface for the ejbc helper task.
-     */    
-    public static void main(String[] args) throws Exception {
-        EjbcHelper helper = new EjbcHelper(args);
-        helper.process();
-    }
-    
-    /**
-     * Initialise the EjbcHelper by reading the command arguments.
-     */    
-    private EjbcHelper(String[] args) {
-        int index = 0;
-        descriptorDirectory = new File(args[index++]);
-        generatedFilesDirectory = new File(args[index++]);
-        sourceDirectory = new File(args[index++]);
-        manifestFile = new File(args[index++]);
-        keepGenerated = Boolean.valueOf(args[index++]).booleanValue();
-        
-        descriptors = new String[args.length - index];
-        for (int i = 0; index < args.length; ++i) {
-            descriptors[i] = args[index++];
-        }
-    }
-    
-    private String[] getCommandLine(boolean debug, File descriptorFile) {
-        Vector v = new Vector();
-        if (!debug) {
-            v.addElement("-noexit");
-        }
-        if (keepGenerated) {
-            v.addElement("-keepgenerated");        
-        }
-        v.addElement("-d");
-        v.addElement(generatedFilesDirectory.getPath());
-        v.addElement(descriptorFile.getPath());
-    
-        String[] args = new String[v.size()];
-        v.copyInto(args);
-        return args;
-    }
-
-    /**
-     * Determine if the weblogic EJB support classes need to be regenerated
-     * for a given deployment descriptor.
-     *
-     * This process attempts to determine if the support classes need to be
-     * rebuilt. It does this by examining only some of the support classes 
-     * which are typically generated. If the ejbc task is interrupted generating
-     * the support classes for a bean, all of the support classes should be removed
-     * to force regeneration of the support classes.
-     *
-     * @param descriptorFile the serialised deployment descriptor
-     *
-     * @return true if the support classes need to be regenerated.
-     *
-     * @throws IOException if the descriptor file cannot be closed.
-     */
-    private boolean isRegenRequired(File descriptorFile) throws IOException {
-        // read in the descriptor. Under weblogic, the descriptor is a weblogic
-        // specific subclass which has references to the implementation classes.
-        // These classes must, therefore, be in the classpath when the deployment
-        // descriptor is loaded from the .ser file
-        FileInputStream fis = null;
-        try {
-            fis = new FileInputStream(descriptorFile);
-            ObjectInputStream ois = new ObjectInputStream(fis);
-            DeploymentDescriptor dd = (DeploymentDescriptor) ois.readObject();
-            fis.close();
-            
-            String homeInterfacePath = dd.getHomeInterfaceClassName().replace('.', '/') + ".java";
-            String remoteInterfacePath = dd.getRemoteInterfaceClassName().replace('.', '/') + ".java";
-            String primaryKeyClassPath = null;
-            if (dd instanceof EntityDescriptor) {
-                primaryKeyClassPath = ((EntityDescriptor) dd).getPrimaryKeyClassName().replace('.', '/') + ".java";;
-            }
-        
-            File homeInterfaceSource = new File(sourceDirectory, homeInterfacePath);
-            File remoteInterfaceSource = new File(sourceDirectory, remoteInterfacePath);
-            File primaryKeyClassSource = null;
-            if (primaryKeyClassPath != null) {
-                primaryKeyClassSource = new File(sourceDirectory, remoteInterfacePath);
-            }
-            
-            // are any of the above out of date. 
-            // we find the implementation classes and see if they are older than any
-            // of the above or the .ser file itself.
-            String beanClassBase = dd.getEnterpriseBeanClassName().replace('.', '/');
-            File ejbImplentationClass 
-                = new File(generatedFilesDirectory, beanClassBase + "EOImpl.class");
-            File homeImplementationClass 
-                = new File(generatedFilesDirectory, beanClassBase + "HomeImpl.class");
-            File beanStubClass 
-                = new File(generatedFilesDirectory, beanClassBase + "EOImpl_WLStub.class");
-                
-            // if the implementation classes don;t exist regenerate                
-            if (!ejbImplentationClass.exists() || !homeImplementationClass.exists() ||
-                    !beanStubClass.exists()) {
-                return true;
-            }
-                
-            // Is the ser file or any of the source files newer then the class files.
-            // firstly find the oldest of the two class files.
-            long classModificationTime = ejbImplentationClass.lastModified();
-            if (homeImplementationClass.lastModified() < classModificationTime) {
-                classModificationTime = homeImplementationClass.lastModified();
-            }
-            if (beanStubClass.lastModified() < classModificationTime) {
-                classModificationTime = beanStubClass.lastModified();
-            }
-            
-            if (descriptorFile.lastModified() > classModificationTime ||
-                    homeInterfaceSource.lastModified() > classModificationTime ||
-                    remoteInterfaceSource.lastModified() > classModificationTime) {
-                return true;
-            }
-            
-            if (primaryKeyClassSource != null && 
-                    primaryKeyClassSource.lastModified() > classModificationTime) {
-                return true;
-            }
-        } catch (Throwable descriptorLoadException) {
-            System.out.println("Exception occurred reading " + descriptorFile.getName() + " - continuing");
-            // any problems - just regenerate
-            return true;
-        } finally {
-            if (fis != null) {
-                fis.close();
-            }
-        }
-        
-        return false;
-    }
-    
-    /**
-     * Process the descriptors in turn generating support classes for each and a manifest
-     * file for all of the beans.
-     */            
-    private void process() throws Exception {
-        String manifest = "Manifest-Version: 1.0\n\n";
-        for (int i = 0; i < descriptors.length; ++i) {
-            String descriptorName = descriptors[i];
-            File descriptorFile = new File(descriptorDirectory, descriptorName);
-            
-            if (isRegenRequired(descriptorFile)) {
-                System.out.println("Running ejbc for " + descriptorFile.getName());
-                regenerateSupportClasses(descriptorFile);
-            } else {
-                System.out.println(descriptorFile.getName() + " is up to date");
-            }
-            manifest += "Name: " + descriptorName.replace('\\', '/') + "\nEnterprise-Bean: True\n\n";
-        }
-        
-        FileWriter fw = new FileWriter(manifestFile);
-        PrintWriter pw = new PrintWriter(fw);
-        pw.print(manifest);
-        fw.flush();
-        fw.close();
-    }
-    
-    /**
-     * Perform the weblogic.ejbc call to regenerate the support classes.
-     *
-     * Note that this method relies on an undocumented -noexit option to the 
-     * ejbc tool to stop the ejbc tool exiting the VM altogether.
-     */
-    private void regenerateSupportClasses(File descriptorFile) throws Exception {
-        // create a Java task to do the rebuild
-
-        
-        String[] args = getCommandLine(false, descriptorFile);
-        
-        try {
-            weblogic.ejbc.main(args);
-        } catch (Exception e) {
-            // run with no exit for better reporting
-            String[] newArgs = getCommandLine(true, descriptorFile);
-            weblogic.ejbc.main(newArgs);
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/GenericDeploymentTool.java b/src/main/org/apache/tools/ant/taskdefs/optional/ejb/GenericDeploymentTool.java
deleted file mode 100644
index bc9839f..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/GenericDeploymentTool.java
+++ /dev/null
@@ -1,926 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.ejb;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.FileInputStream;
-import java.io.InputStream;
-import java.io.FileOutputStream;
-import java.util.Hashtable;
-import java.util.List;
-import java.util.Iterator;
-import java.util.ArrayList;
-import java.util.jar.JarOutputStream;
-import java.util.jar.Manifest;
-import java.util.zip.ZipEntry;
-import java.util.Enumeration;
-
-
-import javax.xml.parsers.SAXParser;
-import org.xml.sax.InputSource;
-import org.xml.sax.SAXException;
-
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Location;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.DirectoryScanner;
-import org.apache.tools.ant.AntClassLoader;
-import org.apache.tools.ant.types.Path;
-import org.apache.tools.ant.types.FileSet;
-import org.apache.tools.ant.util.depend.DependencyAnalyzer;
-
-
-/**
- * A deployment tool which creates generic EJB jars. Generic jars contains
- * only those classes and META-INF entries specified in the EJB 1.1 standard
- *
- * This class is also used as a framework for the creation of vendor specific
- * deployment tools. A number of template methods are provided through which the
- * vendor specific tool can hook into the EJB creation process.
- *
- * @author Conor MacNeill
- */
-public class GenericDeploymentTool implements EJBDeploymentTool {
-    /** The standard META-INF directory in jar files */
-    protected static final String META_DIR  = "META-INF/";
-
-    /** Name for EJB Deployment descriptor within EJB jars */
-    protected static final String EJB_DD    = "ejb-jar.xml";
-
-    /** A dependency analyzer name to find ancestor classes */
-    public static final String ANALYZER_SUPER = "super";
-    /** A dependency analyzer name to find all related classes */
-    public static final String ANALYZER_FULL = "full";
-    /** A dependency analyzer name for no analyzer */
-    public static final String ANALYZER_NONE = "none";
-
-    /** The default analyzer */
-    public static final String DEFAULT_ANALYZER = ANALYZER_SUPER;
-
-    /** The analyzer class for the super analyzer */    
-    public static final String ANALYZER_CLASS_SUPER
-        = "org.apache.tools.ant.util.depend.bcel.AncestorAnalyzer";
-    /** The analyzer class for the super analyzer */    
-    public static final String ANALYZER_CLASS_FULL
-        = "org.apache.tools.ant.util.depend.bcel.FullAnalyzer";
-
-    /**
-     * The configuration from the containing task. This config combined
-     * with the settings of the individual attributes here constitues the
-     * complete config for this deployment tool.
-     */
-    private EjbJar.Config config;
-
-    /** Stores a handle to the directory to put the Jar files in */
-    private File destDir;
-
-    /** The classpath to use with this deployment tool. This is appended to
-        any paths from the ejbjar task itself.*/
-    private Path classpath;
-
-    /** Instance variable that stores the suffix for the generated jarfile. */
-    private String genericJarSuffix = "-generic.jar";
-
-    /**
-     * The task to which this tool belongs. This is used to access services
-     * provided by the ant core, such as logging.
-     */
-    private Task task;
-
-    /**
-     * The classloader generated from the given classpath to load
-     * the super classes and super interfaces.
-     */
-    private ClassLoader classpathLoader = null;
-
-     /**
-     * List of files have been loaded into the EJB jar
-     */
-    private List addedfiles;
-
-    /**
-     * Handler used to parse the EJB XML descriptor
-     */
-    private DescriptorHandler handler;
-
-    /**
-     * Dependency analyzer used to collect class dependencies
-     */
-    private DependencyAnalyzer dependencyAnalyzer;
-
-    public GenericDeploymentTool() {
-    }
-
-
-    /**
-     * Setter used to store the value of destination directory prior to
-     * execute() being called.
-     * @param inDir the destination directory.
-     */
-    public void setDestdir(File inDir) {
-        this.destDir = inDir;
-    }
-
-    /**
-     * Get the destination directory.
-     *
-     * @return the destination directory into which EJB jars are to be written
-     */
-    protected File getDestDir() {
-        return destDir;
-    }
-
-
-    /**
-     * Set the task which owns this tool
-     *
-     * @param task the Task to which this deployment tool is associated.
-     */
-    public void setTask(Task task) {
-        this.task = task;
-    }
-
-    /**
-     * Get the task for this tool.
-     *
-     * @return the Task instance this tool is associated with.
-     */
-    protected Task getTask() {
-        return task;
-    }
-
-    /**
-     * Get the basename terminator.
-     *
-     * @return an ejbjar task configuration
-     */
-    protected EjbJar.Config getConfig() {
-        return config;
-    }
-
-    /**
-     * Indicate if this build is using the base jar name.
-     *
-     * @return true if the name of the generated jar is coming from the
-     *              basejarname attribute
-     */
-    protected boolean usingBaseJarName() {
-        return config.baseJarName != null;
-    }
-
-    /**
-     * Setter used to store the suffix for the generated jar file.
-     * @param inString the string to use as the suffix.
-     */
-    public void setGenericJarSuffix(String inString) {
-        this.genericJarSuffix = inString;
-    }
-
-    /**
-     * Add the classpath for the user classes
-     *
-     * @return a Path instance to be configured by Ant.
-     */
-    public Path createClasspath() {
-        if (classpath == null) {
-            classpath = new Path(task.getProject());
-        }
-        return classpath.createPath();
-    }
-
-    /**
-     * Set the classpath to be used for this compilation.
-     *
-     * @param classpath the classpath to be used for this build.
-     */
-    public void setClasspath(Path classpath) {
-        this.classpath = classpath;
-    }
-
-    /**
-     * Get the classpath by combining the one from the surrounding task, if any
-     * and the one from this tool.
-     *
-     * @return the combined classpath
-     */
-    protected Path getCombinedClasspath() {
-        Path combinedPath = classpath;
-        if (config.classpath != null) {
-            if (combinedPath == null) {
-                combinedPath = config.classpath;
-            } else {
-                combinedPath.append(config.classpath);
-            }
-        }
-
-        return combinedPath;
-    }
-
-    /**
-     * Log a message to the Ant output.
-     *
-     * @param message the message to be logged.
-     * @param level the severity of this message.
-     */
-    protected void log(String message, int level) {
-        getTask().log(message, level);
-    }
-
-    /**
-     * Get the build file location associated with this element's task.
-     *
-     * @return the task's location instance.
-     */
-    protected Location getLocation() {
-        return getTask().getLocation();
-    }
-
-    private void createAnalyzer() {
-        String analyzer = config.analyzer;
-        if (analyzer == null) {
-            analyzer = DEFAULT_ANALYZER;
-        }
-        
-        if (analyzer.equals(ANALYZER_NONE)) {
-            return;
-        }
-        
-        String analyzerClassName = null;
-        if (analyzer.equals(ANALYZER_SUPER)) {
-            analyzerClassName = ANALYZER_CLASS_SUPER;
-        } else if (analyzer.equals(ANALYZER_FULL)) {
-            analyzerClassName = ANALYZER_CLASS_FULL;
-        } else {
-            analyzerClassName = analyzer;
-        }
-        
-        try {
-            Class analyzerClass = Class.forName(analyzerClassName);
-            dependencyAnalyzer 
-                = (DependencyAnalyzer) analyzerClass.newInstance();
-            dependencyAnalyzer.addClassPath(new Path(task.getProject(),
-                config.srcDir.getPath()));
-            dependencyAnalyzer.addClassPath(config.classpath);
-        } catch (NoClassDefFoundError e) {
-            dependencyAnalyzer = null;
-            task.log("Unable to load dependency analyzer: " + analyzerClassName,
-                Project.MSG_WARN);
-        } catch (Exception e) {
-            dependencyAnalyzer = null;
-            task.log("Unable to load dependency analyzer: " + analyzerClassName,
-                Project.MSG_WARN);
-        }
-    }
-    
-    
-    /**
-     * Configure this tool for use in the ejbjar task.
-     *
-     * @param config the configuration from the surrounding ejbjar task.
-     */
-    public void configure(EjbJar.Config config) {
-        this.config = config;
-
-        createAnalyzer();
-        classpathLoader = null;
-    }
-
-    /**
-     * Utility method that encapsulates the logic of adding a file entry to
-     * a .jar file.  Used by execute() to add entries to the jar file as it is
-     * constructed.
-     * @param jStream A JarOutputStream into which to write the
-     *        jar entry.
-     * @param inputFile A File from which to read the
-     *        contents the file being added.
-     * @param logicalFilename A String representing the name, including
-     *        all relevant path information, that should be stored for the entry
-     *        being added.
-     */
-    protected void addFileToJar(JarOutputStream jStream,
-                                File inputFile,
-                                String logicalFilename)
-        throws BuildException {
-        FileInputStream iStream = null;
-        try {
-            if (!addedfiles.contains(logicalFilename)) {
-                iStream = new FileInputStream(inputFile);
-                // Create the zip entry and add it to the jar file
-                ZipEntry zipEntry = new ZipEntry(logicalFilename.replace('\\', '/'));
-                jStream.putNextEntry(zipEntry);
-
-                // Create the file input stream, and buffer everything over
-                // to the jar output stream
-                byte[] byteBuffer = new byte[2 * 1024];
-                int count = 0;
-                do {
-                    jStream.write(byteBuffer, 0, count);
-                    count = iStream.read(byteBuffer, 0, byteBuffer.length);
-                } while (count != -1);
-
-                //add it to list of files in jar
-                addedfiles.add(logicalFilename);
-           }
-        } catch (IOException ioe) {
-            log("WARNING: IOException while adding entry " +
-                logicalFilename + " to jarfile from " + inputFile.getPath() + " " +
-                ioe.getClass().getName() + "-" + ioe.getMessage(), Project.MSG_WARN);
-        } finally {
-            // Close up the file input stream for the class file
-            if (iStream != null) {
-                try {
-                    iStream.close();
-                } catch (IOException closeException) {}
-            }
-        }
-    }
-
-    protected DescriptorHandler getDescriptorHandler(File srcDir) {
-        DescriptorHandler handler = new DescriptorHandler(getTask(), srcDir);
-
-        registerKnownDTDs(handler);
-
-        // register any DTDs supplied by the user
-        for (Iterator i = getConfig().dtdLocations.iterator(); i.hasNext();) {
-            EjbJar.DTDLocation dtdLocation = (EjbJar.DTDLocation) i.next();
-            handler.registerDTD(dtdLocation.getPublicId(), dtdLocation.getLocation());
-        }
-        return handler;
-    }
-
-    /**
-     * Register the locations of all known DTDs.
-     *
-     * vendor-specific subclasses should override this method to define
-     * the vendor-specific locations of the EJB DTDs
-     */
-    protected void registerKnownDTDs(DescriptorHandler handler) {
-        // none to register for generic
-    }
-
-    public void processDescriptor(String descriptorFileName, SAXParser saxParser) {
-
-        checkConfiguration(descriptorFileName, saxParser);
-
-        try {
-            handler = getDescriptorHandler(config.srcDir);
-
-            // Retrive the files to be added to JAR from EJB descriptor
-            Hashtable ejbFiles = parseEjbFiles(descriptorFileName, saxParser);
-
-            // Add any support classes specified in the build file
-            addSupportClasses(ejbFiles);
-
-            // Determine the JAR filename (without filename extension)
-            String baseName = getJarBaseName(descriptorFileName);
-
-            String ddPrefix = getVendorDDPrefix(baseName, descriptorFileName);
-
-            // First the regular deployment descriptor
-            ejbFiles.put(META_DIR + EJB_DD,
-                         new File(config.descriptorDir, descriptorFileName));
-
-            // now the vendor specific files, if any
-            addVendorFiles(ejbFiles, ddPrefix);
-
-            // add any dependent files
-            checkAndAddDependants(ejbFiles);
-
-            // Lastly create File object for the Jar files. If we are using
-            // a flat destination dir, then we need to redefine baseName!
-            if (config.flatDestDir && baseName.length() != 0) {
-                int startName = baseName.lastIndexOf(File.separator);
-                if (startName == -1) {
-                    startName = 0;
-                }
-
-                int endName   = baseName.length();
-                baseName = baseName.substring(startName, endName);
-            }
-
-            File jarFile = getVendorOutputJarFile(baseName);
-
-
-            // Check to see if we need a build and start doing the work!
-            if (needToRebuild(ejbFiles, jarFile)) {
-                // Log that we are going to build...
-                log("building "
-                              + jarFile.getName()
-                              + " with "
-                              + String.valueOf(ejbFiles.size())
-                              + " files",
-                              Project.MSG_INFO);
-
-                // Use helper method to write the jarfile
-                String publicId = getPublicId();
-                writeJar(baseName, jarFile, ejbFiles, publicId);
-
-            } else {
-                // Log that the file is up to date...
-                log(jarFile.toString() + " is up to date.",
-                              Project.MSG_VERBOSE);
-            }
-
-        } catch (SAXException se) {
-            String msg = "SAXException while parsing '"
-                + descriptorFileName.toString()
-                + "'. This probably indicates badly-formed XML."
-                + "  Details: "
-                + se.getMessage();
-            throw new BuildException(msg, se);
-        } catch (IOException ioe) {
-            String msg = "IOException while parsing'"
-                + descriptorFileName.toString()
-                + "'.  This probably indicates that the descriptor"
-                + " doesn't exist. Details: "
-                + ioe.getMessage();
-            throw new BuildException(msg, ioe);
-        }
-    }
-
-    /**
-     * This method is called as the first step in the processDescriptor method
-     * to allow vendor-specific subclasses to validate the task configuration
-     * prior to processing the descriptor.  If the configuration is invalid,
-     * a BuildException should be thrown.
-     *
-     * @param descriptorFileName String representing the file name of an EJB
-     *                           descriptor to be processed
-     * @param saxParser          SAXParser which may be used to parse the XML
-     *                           descriptor
-     * @exception BuildException     Thrown if the configuration is invalid
-     */
-    protected void checkConfiguration(String descriptorFileName,
-                                    SAXParser saxParser) throws BuildException {
-
-        /*
-         * For the GenericDeploymentTool, do nothing.  Vendor specific
-         * subclasses should throw a BuildException if the configuration is
-         * invalid for their server.
-         */
-    }
-
-    /**
-     * This method returns a list of EJB files found when the specified EJB
-     * descriptor is parsed and processed.
-     *
-     * @param descriptorFileName String representing the file name of an EJB
-     *                           descriptor to be processed
-     * @param saxParser          SAXParser which may be used to parse the XML
-     *                           descriptor
-     * @return                   Hashtable of EJB class (and other) files to be
-     *                           added to the completed JAR file
-     * @throws SAXException      Any SAX exception, possibly wrapping another
-     *                           exception
-     * @throws IOException       An IOException from the parser, possibly from a
-     *                           the byte stream or character stream
-     */
-    protected Hashtable parseEjbFiles(String descriptorFileName, SAXParser saxParser)
-                            throws IOException, SAXException {
-        FileInputStream descriptorStream = null;
-        Hashtable ejbFiles = null;
-
-        try {
-
-            /* Parse the ejb deployment descriptor.  While it may not
-             * look like much, we use a SAXParser and an inner class to
-             * get hold of all the classfile names for the descriptor.
-             */
-            descriptorStream = new FileInputStream(new File(config.descriptorDir, descriptorFileName));
-            saxParser.parse(new InputSource(descriptorStream), handler);
-
-            ejbFiles = handler.getFiles();
-
-        } finally {
-            if (descriptorStream != null) {
-                try {
-                    descriptorStream.close();
-                } catch (IOException closeException) {}
-            }
-        }
-
-        return ejbFiles;
-    }
-
-    /**
-     * Adds any classes the user specifies using <i>support</i> nested elements
-     * to the <code>ejbFiles</code> Hashtable.
-     *
-     * @param ejbFiles Hashtable of EJB classes (and other) files that will be
-     *                 added to the completed JAR file
-     */
-    protected void addSupportClasses(Hashtable ejbFiles) {
-        // add in support classes if any
-        Project project = task.getProject();
-        for (Iterator i = config.supportFileSets.iterator(); i.hasNext();) {
-            FileSet supportFileSet = (FileSet) i.next();
-            File supportBaseDir = supportFileSet.getDir(project);
-            DirectoryScanner supportScanner = supportFileSet.getDirectoryScanner(project);
-            supportScanner.scan();
-            String[] supportFiles = supportScanner.getIncludedFiles();
-            for (int j = 0; j < supportFiles.length; ++j) {
-                ejbFiles.put(supportFiles[j], new File(supportBaseDir, supportFiles[j]));
-            }
-        }
-    }
-
-
-    /**
-     * Using the EJB descriptor file name passed from the <code>ejbjar</code>
-     * task, this method returns the "basename" which will be used to name the
-     * completed JAR file.
-     *
-     * @param descriptorFileName String representing the file name of an EJB
-     *                           descriptor to be processed
-     * @return                   The "basename" which will be used to name the
-     *                           completed JAR file
-     */
-    protected String getJarBaseName(String descriptorFileName) {
-
-        String baseName = "";
-
-        // Work out what the base name is
-        if (config.namingScheme.getValue().equals(EjbJar.NamingScheme.BASEJARNAME)) {
-            String canonicalDescriptor = descriptorFileName.replace('\\', '/');
-            int index = canonicalDescriptor.lastIndexOf('/');
-            if (index != -1) {
-                baseName = descriptorFileName.substring(0, index + 1);
-            }
-            baseName += config.baseJarName;
-        } else if (config.namingScheme.getValue().equals(EjbJar.NamingScheme.DESCRIPTOR)) {
-            int lastSeparatorIndex = descriptorFileName.lastIndexOf(File.separator);
-            int endBaseName = -1;
-            if (lastSeparatorIndex != -1) {
-                endBaseName = descriptorFileName.indexOf(config.baseNameTerminator,
-                                                            lastSeparatorIndex);
-            } else {
-                endBaseName = descriptorFileName.indexOf(config.baseNameTerminator);
-            }
-
-            if (endBaseName != -1) {
-                baseName = descriptorFileName.substring(0, endBaseName);
-            } else {
-                throw new BuildException("Unable to determine jar name " 
-                    + "from descriptor \"" + descriptorFileName + "\"");
-            }
-        } else if (config.namingScheme.getValue().equals(EjbJar.NamingScheme.DIRECTORY)) {
-            File descriptorFile = new File(config.descriptorDir, descriptorFileName);
-            String path = descriptorFile.getAbsolutePath();
-            int lastSeparatorIndex 
-                = path.lastIndexOf(File.separator);
-            if (lastSeparatorIndex == -1) {
-                throw new BuildException("Unable to determine directory name holding descriptor");
-            }
-            String dirName = path.substring(0, lastSeparatorIndex);
-            int dirSeparatorIndex = dirName.lastIndexOf(File.separator);
-            if (dirSeparatorIndex != -1) {
-                dirName = dirName.substring(dirSeparatorIndex + 1);
-            }
-
-            baseName = dirName;
-        } else if (config.namingScheme.getValue().equals(EjbJar.NamingScheme.EJB_NAME)) {
-            baseName = handler.getEjbName();
-        }
-        return baseName;
-    }
-
-    /**
-     * Get the prefix for vendor deployment descriptors.
-     *
-     * This will contain the path and the start of the descriptor name,
-     * depending on the naming scheme
-     */
-    public String getVendorDDPrefix(String baseName, String descriptorFileName) {
-        String ddPrefix = null;
-
-        if (config.namingScheme.getValue().equals(EjbJar.NamingScheme.DESCRIPTOR)) {
-            ddPrefix = baseName + config.baseNameTerminator;
-        } else if (config.namingScheme.getValue().equals(EjbJar.NamingScheme.BASEJARNAME) ||
-                   config.namingScheme.getValue().equals(EjbJar.NamingScheme.EJB_NAME) ||
-                   config.namingScheme.getValue().equals(EjbJar.NamingScheme.DIRECTORY)) {
-            String canonicalDescriptor = descriptorFileName.replace('\\', '/');
-            int index = canonicalDescriptor.lastIndexOf('/');
-            if (index == -1) {
-                ddPrefix = "";
-            } else {
-                ddPrefix = descriptorFileName.substring(0, index + 1);
-            }
-        }
-        return ddPrefix;
-    }
-
-    /**
-     * Add any vendor specific files which should be included in the
-     * EJB Jar.
-     */
-    protected void addVendorFiles(Hashtable ejbFiles, String ddPrefix) {
-        // nothing to add for generic tool.
-    }
-
-
-    /**
-     * Get the vendor specific name of the Jar that will be output. The modification date
-     * of this jar will be checked against the dependent bean classes.
-     */
-    File getVendorOutputJarFile(String baseName) {
-        return new File(destDir, baseName + genericJarSuffix);
-    }
-
-    /**
-     * This method checks the timestamp on each file listed in the <code>
-     * ejbFiles</code> and compares them to the timestamp on the <code>jarFile
-     * </code>.  If the <code>jarFile</code>'s timestamp is more recent than
-     * each EJB file, <code>true</code> is returned.  Otherwise, <code>false
-     * </code> is returned.
-     * TODO: find a way to check the manifest-file, that is found by naming convention
-     *
-     * @param ejbFiles Hashtable of EJB classes (and other) files that will be
-     *                 added to the completed JAR file
-     * @param jarFile  JAR file which will contain all of the EJB classes (and
-     *                 other) files
-     * @return         boolean indicating whether or not the <code>jarFile</code>
-     *                 is up to date
-     */
-    protected boolean needToRebuild(Hashtable ejbFiles, File jarFile) {
-        if (jarFile.exists()) {
-            long lastBuild = jarFile.lastModified();
-
-            if (config.manifest != null && config.manifest.exists() &&
-                config.manifest.lastModified() > lastBuild) {
-                log("Build needed because manifest " + config.manifest + " is out of date",
-                    Project.MSG_VERBOSE);
-                return true;
-            }
-
-
-            Iterator fileIter = ejbFiles.values().iterator();
-
-            // Loop through the files seeing if any has been touched
-            // more recently than the destination jar.
-            while (fileIter.hasNext()) {
-                File currentFile = (File) fileIter.next();
-                if (lastBuild < currentFile.lastModified()) {
-                    log("Build needed because " + currentFile.getPath() + " is out of date",
-                        Project.MSG_VERBOSE);
-                    return true;
-                }
-            }
-            return false;
-        }
-
-        return true;
-    }
-
-    /**
-     * Returns the Public ID of the DTD specified in the EJB descriptor.  Not
-     * every vendor-specific <code>DeploymentTool</code> will need to reference
-     * this value or may want to determine this value in a vendor-specific way.
-     *
-     * @return Public ID of the DTD specified in the EJB descriptor.
-     */
-    protected String getPublicId() {
-        return handler.getPublicId();
-    }
-
-    /**
-     * Method used to encapsulate the writing of the JAR file. Iterates over the
-     * filenames/java.io.Files in the Hashtable stored on the instance variable
-     * ejbFiles.
-     */
-    protected void writeJar(String baseName, File jarfile, Hashtable files,
-                            String publicId) throws BuildException{
-
-        JarOutputStream jarStream = null;
-        try {
-            // clean the addedfiles Vector
-            addedfiles = new ArrayList();
-
-            /* If the jarfile already exists then whack it and recreate it.
-             * Should probably think of a more elegant way to handle this
-             * so that in case of errors we don't leave people worse off
-             * than when we started =)
-             */
-            if (jarfile.exists()) {
-                jarfile.delete();
-            }
-            jarfile.getParentFile().mkdirs();
-            jarfile.createNewFile();
-
-            InputStream in = null;
-            Manifest manifest = null;
-            try {
-                File manifestFile = new File(getConfig().descriptorDir, baseName + "-manifest.mf");
-                if (manifestFile.exists()) {
-                    in = new FileInputStream(manifestFile);
-                } else if (config.manifest != null) {
-                    in = new FileInputStream(config.manifest);
-                    if (in == null) {
-                        throw new BuildException("Could not find manifest file: " + config.manifest,
-                                                  getLocation());
-                    }
-                } else {
-                    String defaultManifest = "/org/apache/tools/ant/defaultManifest.mf";
-                    in = this.getClass().getResourceAsStream(defaultManifest);
-                    if (in == null) {
-                        throw new BuildException("Could not find default manifest: " + defaultManifest,
-                                                  getLocation());
-                    }
-                }
-
-                manifest = new Manifest(in);
-            } catch (IOException e) {
-                throw new BuildException ("Unable to read manifest", e, getLocation());
-            } finally {
-                if (in != null) {
-                    in.close();
-                }
-            }
-
-            // Create the streams necessary to write the jarfile
-
-            jarStream = new JarOutputStream(new FileOutputStream(jarfile), manifest);
-            jarStream.setMethod(JarOutputStream.DEFLATED);
-
-            // Loop through all the class files found and add them to the jar
-            for (Iterator entryIterator = files.keySet().iterator(); entryIterator.hasNext();) {
-                String entryName = (String) entryIterator.next();
-                File entryFile = (File) files.get(entryName);
-
-                log("adding file '" + entryName + "'",
-                              Project.MSG_VERBOSE);
-
-                addFileToJar(jarStream, entryFile, entryName);
-
-                // See if there are any inner classes for this class and add them in if there are
-                InnerClassFilenameFilter flt = new InnerClassFilenameFilter(entryFile.getName());
-                File entryDir = entryFile.getParentFile();
-                String[] innerfiles = entryDir.list(flt);
-                if (innerfiles != null) {
-                    for (int i = 0, n = innerfiles.length; i < n; i++) {
-
-                        //get and clean up innerclass name
-                        int entryIndex = entryName.lastIndexOf(entryFile.getName()) - 1;
-                        if (entryIndex < 0) {
-                            entryName = innerfiles[i];
-                        } else {
-                            entryName = entryName.substring(0, entryIndex) + File.separatorChar + innerfiles[i];
-                        }
-                        // link the file
-                        entryFile = new File(config.srcDir, entryName);
-
-                        log("adding innerclass file '" + entryName + "'",
-                                Project.MSG_VERBOSE);
-
-                        addFileToJar(jarStream, entryFile, entryName);
-
-                    }
-                }
-            }
-        } catch (IOException ioe) {
-            String msg = "IOException while processing ejb-jar file '"
-                + jarfile.toString()
-                + "'. Details: "
-                + ioe.getMessage();
-            throw new BuildException(msg, ioe);
-        } finally {
-            if (jarStream != null) {
-                try {
-                    jarStream.close();
-                } catch (IOException closeException) {}
-            }
-        }
-    } // end of writeJar
-
-
-    /**
-     * Add all available classes, that depend on Remote, Home, Bean, PK
-     * @param checkEntries files, that are extracted from the deployment descriptor
-     */
-    protected void checkAndAddDependants(Hashtable checkEntries)
-        throws BuildException {
-
-        if (dependencyAnalyzer == null) {
-            return;
-        }
-        
-        dependencyAnalyzer.reset();
-
-        Iterator i = checkEntries.keySet().iterator();
-        while (i.hasNext()) {
-            String entryName = (String) i.next();
-            if (entryName.endsWith(".class")) {
-                String className = entryName.substring(0,
-                    entryName.length() - ".class".length());
-                className = className.replace(File.separatorChar, '/');
-                className = className.replace('/', '.');
-
-                dependencyAnalyzer.addRootClass(className);
-            }
-        }
-
-        Enumeration e = dependencyAnalyzer.getClassDependencies();
-
-        while (e.hasMoreElements()) {
-            String classname = (String) e.nextElement();
-            String location
-                = classname.replace('.', File.separatorChar) + ".class";
-            File classFile = new File(config.srcDir, location);
-            if (classFile.exists()) {
-                checkEntries.put(location, classFile);
-                log("dependent class: " + classname + " - " + classFile,
-                    Project.MSG_VERBOSE);
-            }
-        }
-    }
-
-
-    /**
-     * Returns a Classloader object which parses the passed in generic EjbJar classpath.
-     * The loader is used to dynamically load classes from javax.ejb.* and the classes
-     * being added to the jar.
-     *
-     */
-    protected ClassLoader getClassLoaderForBuild() {
-        if (classpathLoader != null) {
-            return classpathLoader;
-        }
-
-        Path combinedClasspath = getCombinedClasspath();
-
-        // only generate a new ClassLoader if we have a classpath
-        if (combinedClasspath == null) {
-            classpathLoader = getClass().getClassLoader();
-        } else {
-            classpathLoader = new AntClassLoader(getTask().getProject(), combinedClasspath);
-        }
-
-        return classpathLoader;
-    }
-
-    /**
-     * Called to validate that the tool parameters have been configured.
-     *
-     * @throws BuildException If the Deployment Tool's configuration isn't
-     *                        valid
-     */
-    public void validateConfigured() throws BuildException {
-        if ((destDir == null) || (!destDir.isDirectory())) {
-            String msg = "A valid destination directory must be specified "
-                            + "using the \"destdir\" attribute.";
-            throw new BuildException(msg, getLocation());
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/IPlanetDeploymentTool.java b/src/main/org/apache/tools/ant/taskdefs/optional/ejb/IPlanetDeploymentTool.java
deleted file mode 100644
index ea6b694..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/IPlanetDeploymentTool.java
+++ /dev/null
@@ -1,422 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.ejb;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.Hashtable;
-
-import javax.xml.parsers.SAXParser;
-import org.xml.sax.SAXException;
-
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.BuildException;
-
-/**
- * This class is used to generate iPlanet Application Server (iAS) 6.0 stubs and 
- * skeletons and build an EJB Jar file.  It is designed to be used with the Ant
- * <code>ejbjar</code> task.  If only stubs and skeletons need to be generated
- * (in other words, if no JAR file needs to be created), refer to the
- * <code>iplanet-ejbc</code> task and the <code>IPlanetEjbcTask</code> class.
- * <p>
- * The following attributes may be specified by the user:
- *   <ul>
- *     <li><i>destdir</i> -- The base directory into which the generated JAR
- *                           files will be written.  Each JAR file is written
- *                           in directories which correspond to their location
- *                           within the "descriptordir" namespace.  This is a
- *                           required attribute.
- *     <li><i>classpath</i> -- The classpath used when generating EJB stubs and
- *                             skeletons.  This is an optional attribute (if 
- *                             omitted, the classpath specified in the "ejbjar"
- *                             parent task will be used).  If specified, the
- *                             classpath elements will be prepended to the
- *                             classpath specified in the parent "ejbjar" task.
- *                             Note that nested "classpath" elements may also be
- *                             used.
- *     <li><i>keepgenerated</i> -- Indicates whether or not the Java source 
- *                                 files which are generated by ejbc will be 
- *                                 saved or automatically deleted.  If "yes", 
- *                                 the source files will be retained.  This is 
- *                                 an optional attribute (if omitted, it 
- *                                 defaults to "no").
- *     <li><i>debug</i> -- Indicates whether or not the ejbc utility should
- *                         log additional debugging statements to the standard
- *                         output.  If "yes", the additional debugging statements
- *                         will be generated (if omitted, it defaults to "no").
- *     <li><i>iashome</i> -- May be used to specify the "home" directory for
- *                           this iPlanet Application server installation.  This
- *                           is used to find the ejbc utility if it isn't 
- *                           included in the user's system path.  This is an 
- *                           optional attribute (if specified, it should refer  
- *                           to the <code>[install-location]/iplanet/ias6/ias
- *                           </code> directory).  If omitted, the ejbc utility 
- *                           must be on the user's system path.
- *     <li><i>suffix</i> -- String value appended to the JAR filename when 
- *                          creating each JAR.  This attribute is not required
- *                          (if omitted, it defaults to ".jar").
- *   </ul>
- * <p>
- * For each EJB descriptor found in the "ejbjar" parent task, this deployment
- * tool will locate the three classes that comprise the EJB.  If these class 
- * files cannot be located in the specified <code>srcdir</code> directory, the 
- * task will fail.  The task will also attempt to locate the EJB stubs and 
- * skeletons in this directory.  If found, the timestamps on the stubs and 
- * skeletons will be checked to ensure they are up to date.  Only if these files 
- * cannot be found or if they are out of date will ejbc be called.
- *
- * @see    IPlanetEjbc
- * @author Greg Nelson <a href="mailto:greg@netscape.com">greg@netscape.com</a>
- */
-public class IPlanetDeploymentTool extends GenericDeploymentTool {
-
-    /* Attributes set by the Ant build file */
-    private File    iashome;
-    private String  jarSuffix     = ".jar";
-    private boolean keepgenerated = false;
-    private boolean debug         = false;
-
-    /*
-     * Filenames of the standard EJB descriptor (which is passed to this class
-     * from the parent "ejbjar" task) and the iAS-specific EJB descriptor
-     * (whose name is determined by this class).  Both filenames are relative
-     * to the directory specified by the "srcdir" attribute in the ejbjar task. 
-     */
-    private String  descriptorName;
-    private String  iasDescriptorName;
-
-    /*
-     * The displayName variable stores the value of the "display-name" element
-     * from the standard EJB descriptor.  As a future enhancement to this task,
-     * we may determine the name of the EJB JAR file using this display-name,
-     * but this has not be implemented yet.
-     */
-    private String  displayName;
-
-    /*
-     * Regardless of the name of the iAS-specific EJB descriptor file, it will
-     * written in the completed JAR file as "ias-ejb-jar.xml".  This is the
-     * naming convention implemented by iAS.
-     */
-    private static final String IAS_DD = "ias-ejb-jar.xml";    
-
-    /**
-     * Setter method used to store the "home" directory of the user's iAS
-     * installation.  The directory specified should typically be
-     * <code>[install-location]/iplanet/ias6/ias</code>.
-     *
-     * @param iashome The home directory for the user's iAS installation.
-     */
-    public void setIashome(File iashome) {
-        this.iashome = iashome;
-    }
-
-    /**
-     * Setter method used to specify whether the Java source files generated by
-     * the ejbc utility should be saved or automatically deleted.
-     *
-     * @param keepgenerated boolean which, if <code>true</code>, indicates that
-     *                      Java source files generated by ejbc for the stubs
-     *                      and skeletons should be kept.
-     */
-    public void setKeepgenerated(boolean keepgenerated) {
-        this.keepgenerated = keepgenerated;
-    }
-
-    /**
-     * Sets whether or not debugging output will be generated when ejbc is
-     * executed.
-     *
-     * @param debug A boolean indicating if debugging output should be generated
-     */
-    public void setDebug(boolean debug) {
-        this.debug = debug;
-    }
-
-    /**
-     * Setter method used to specify the filename suffix (for example, ".jar")
-     * for the JAR files to be created.
-     *
-     * @param jarSuffix The string to use as the JAR filename suffix.
-     */
-    public void setSuffix(String jarSuffix) {
-        this.jarSuffix = jarSuffix;
-    }
-
-    /**
-     * Since iAS doesn't generate a "generic" JAR as part of its processing, 
-     * this attribute is ignored and a warning message is displayed to the user.
-     *
-     * @param inString the string to use as the suffix.  This parameter is
-     *                 ignored.
-     */
-    public void setGenericJarSuffix(String inString) {
-        log("Since a generic JAR file is not created during processing, the "
-                + "iPlanet Deployment Tool does not support the "
-                + "\"genericjarsuffix\" attribute.  It will be ignored.",
-            Project.MSG_WARN);
-    }
-
-    public void processDescriptor(String descriptorName, SAXParser saxParser) {
-        this.descriptorName = descriptorName;
-
-        log("iPlanet Deployment Tool processing: " + descriptorName + " (and " 
-                + getIasDescriptorName() + ")", Project.MSG_VERBOSE);
-
-        super.processDescriptor(descriptorName, saxParser);
-    }
-
-    /**
-     * Verifies that the user selections are valid.
-     *
-     * @param descriptorFileName String representing the file name of an EJB
-     *                           descriptor to be processed
-     * @param saxParser          SAXParser which may be used to parse the XML
-     *                           descriptor
-     * @throws BuildException If the user selections are invalid.
-     */
-    protected void checkConfiguration(String descriptorFileName, 
-                                    SAXParser saxParser) throws BuildException {
-
-        int startOfName = descriptorFileName.lastIndexOf(File.separatorChar) + 1;
-        String stdXml = descriptorFileName.substring(startOfName);
-        if (stdXml.equals(EJB_DD) && (getConfig().baseJarName == null)) {
-            String msg = "No name specified for the completed JAR file.  The EJB"
-                            + " descriptor should be prepended with the JAR "
-                            + "name or it should be specified using the "
-                            + "attribute \"basejarname\" in the \"ejbjar\" task.";
-            throw new BuildException(msg, getLocation());
-        }
-
-        File iasDescriptor = new File(getConfig().descriptorDir,
-                                        getIasDescriptorName());
-        if ((!iasDescriptor.exists()) || (!iasDescriptor.isFile())) {
-            String msg = "The iAS-specific EJB descriptor (" 
-                            + iasDescriptor + ") was not found.";
-            throw new BuildException(msg, getLocation());
-        }
-
-        if ((iashome != null) && (!iashome.isDirectory())) {
-            String msg = "If \"iashome\" is specified, it must be a valid "
-                            + "directory (it was set to " + iashome + ").";
-            throw new BuildException(msg, getLocation());
-        }
-    }
-
-    /**
-     * This method returns a list of EJB files found when the specified EJB
-     * descriptor is parsed and processed.
-     *
-     * @param descriptorFileName String representing the file name of an EJB
-     *                           descriptor to be processed
-     * @param saxParser          SAXParser which may be used to parse the XML
-     *                           descriptor
-     * @return                   Hashtable of EJB class (and other) files to be
-     *                           added to the completed JAR file
-     * @throws IOException       An IOException from the parser, possibly from 
-     *                           the byte stream or character stream 
-     * @throws SAXException      Any SAX exception, possibly wrapping another 
-     *                           exception
-     */
-    protected Hashtable parseEjbFiles(String descriptorFileName, 
-                         SAXParser saxParser) throws IOException, SAXException {
-
-        Hashtable files;
-
-        /* Build and populate an instance of the ejbc utility */
-        IPlanetEjbc ejbc = new IPlanetEjbc(
-                                    new File(getConfig().descriptorDir,
-                                                descriptorFileName),
-                                    new File(getConfig().descriptorDir,
-                                                getIasDescriptorName()),
-                                    getConfig().srcDir,
-                                    getCombinedClasspath().toString(),
-                                    saxParser);
-        ejbc.setRetainSource(keepgenerated);
-        ejbc.setDebugOutput(debug);
-        if (iashome != null) {
-            ejbc.setIasHomeDir(iashome);
-        }
-
-        /* Execute the ejbc utility -- stubs/skeletons are rebuilt, if needed */
-        try {
-            ejbc.execute();
-        } catch (IPlanetEjbc.EjbcException e) {
-            throw new BuildException("An error has occurred while trying to "
-                        + "execute the iAS ejbc utility", e, getLocation());
-        }
-
-        displayName    = ejbc.getDisplayName();
-        files          = ejbc.getEjbFiles();
-
-        /* Add CMP descriptors to the list of EJB files */
-        String[] cmpDescriptors = ejbc.getCmpDescriptors();
-        if (cmpDescriptors.length > 0) {
-            File baseDir = getConfig().descriptorDir;
-
-            int endOfPath = descriptorFileName.lastIndexOf(File.separator);
-            String relativePath = descriptorFileName.substring(0, endOfPath + 1);
-
-            for (int i = 0; i < cmpDescriptors.length; i++) {
-                int endOfCmp = cmpDescriptors[i].lastIndexOf('/');
-                String cmpDescriptor = cmpDescriptors[i].substring(endOfCmp + 1);
-
-                File   cmpFile = new File(baseDir, relativePath + cmpDescriptor);
-                if (!cmpFile.exists()) {
-                    throw new BuildException("The CMP descriptor file ("
-                            + cmpFile + ") could not be found.", getLocation());
-                }
-                files.put(cmpDescriptors[i], cmpFile);
-            }
-        }
-
-        return files;   
-    }
-
-    /**
-     * Add the iAS-specific EJB descriptor to the list of files which will be
-     * written to the JAR file.
-     *
-     * @param ejbFiles Hashtable of EJB class (and other) files to be added to
-     *                 the completed JAR file.
-     * @param baseName String name of the EJB JAR file to be written (without
-     *                 a filename extension).
-     */
-    protected void addVendorFiles(Hashtable ejbFiles, String ddPrefix) {
-        ejbFiles.put(META_DIR + IAS_DD, new File(getConfig().descriptorDir,
-                     getIasDescriptorName()));
-    }
-
-    /**
-     * Get the name of the Jar that will be written. The modification date
-     * of this jar will be checked against the dependent bean classes.
-     *
-     * @param baseName String name of the EJB JAR file to be written (without
-     *                 a filename extension).
-     *
-     * @return File representing the JAR file which will be written.
-     */
-    File getVendorOutputJarFile(String baseName) {
-        File jarFile = new File(getDestDir(), baseName + jarSuffix);
-        log("JAR file name: " + jarFile.toString(), Project.MSG_VERBOSE);
-        return jarFile;
-    }
-
-    /**
-     * The iAS ejbc utility doesn't require the Public ID of the descriptor's
-     * DTD for it to process correctly--this method always returns <code>null
-     * </code>.
-     *
-     * @return <code>null</code>.
-     */
-    protected String getPublicId() {
-        return null;
-    }
-
-    /**
-     * Determines the name of the iAS-specific EJB descriptor using the
-     * specified standard EJB descriptor name.  In general, the standard 
-     * descriptor will be named "[basename]-ejb-jar.xml", and this method will
-     * return "[basename]-ias-ejb-jar.xml".
-     *
-     * @return The name of the iAS-specific EJB descriptor file.
-     */
-    private String getIasDescriptorName() {
-        
-        /* Only calculate the descriptor name once */
-        if (iasDescriptorName != null) {
-            return iasDescriptorName;
-        }
-
-        String path = "";   // Directory path of the EJB descriptor
-        String basename;    // Filename appearing before name terminator
-        String remainder;   // Filename appearing after the name terminator
-
-        /* Find the end of the standard descriptor's relative path */
-        int startOfFileName = descriptorName.lastIndexOf(File.separatorChar);
-        if (startOfFileName != -1) {
-            path = descriptorName.substring(0, startOfFileName + 1);
-        }
-
-        /* Check to see if the standard name is used (there's no basename) */
-        if (descriptorName.substring(startOfFileName + 1).equals(EJB_DD)) {
-            basename = "";
-            remainder = EJB_DD;
-
-        } else {
-            int endOfBaseName = descriptorName.indexOf(
-                                                getConfig().baseNameTerminator,
-                                                startOfFileName);
-            /* 
-             * Check for the odd case where the terminator and/or filename
-             * extension aren't found.  These will ensure "ias-" appears at the
-             * end of the name and before the '.' (if present).
-             */
-            if (endOfBaseName < 0) {
-                endOfBaseName = descriptorName.lastIndexOf('.') - 1;
-                if (endOfBaseName < 0) {
-                    endOfBaseName = descriptorName.length() - 1;
-                }
-            }
-
-            basename = descriptorName.substring(startOfFileName + 1, 
-                                                endOfBaseName + 1);
-            remainder = descriptorName.substring(endOfBaseName + 1);
-        }
-
-        iasDescriptorName = path + basename + "ias-" + remainder;
-        return iasDescriptorName;
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/IPlanetEjbc.java b/src/main/org/apache/tools/ant/taskdefs/optional/ejb/IPlanetEjbc.java
deleted file mode 100644
index 7fd6d9f..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/IPlanetEjbc.java
+++ /dev/null
@@ -1,1526 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.ejb;
-
-import java.io.File;
-import java.io.InputStream;
-import java.io.FileInputStream;
-import java.io.InputStreamReader;
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.util.Map;
-import java.util.HashMap;
-import java.util.Hashtable;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.StringTokenizer;
-import java.util.Properties;
-import java.util.Date;
-
-
-
-import javax.xml.parsers.SAXParser;
-import javax.xml.parsers.SAXParserFactory;
-import org.xml.sax.HandlerBase;
-import org.xml.sax.SAXException;
-import org.xml.sax.InputSource;
-import org.xml.sax.AttributeList;
-
-/**
- * Utility class to compile EJB stubs and skeletons for the iPlanet Application
- * Server (iAS).  The class will read a standard EJB descriptor (as well as an
- * EJB descriptor specific to iPlanet Application Server) to identify one or
- * more EJBs to process.  It will search for EJB "source" classes (the remote
-; * interface, home interface, and EJB implementation class) and the EJB stubs
- * and skeletons in the specified destination directory.  Only if the stubs and
- * skeletons cannot be found or if they're out of date will the iPlanet
- * Application Server ejbc utility be run.
- * <p>
- * Because this class (and it's assorted inner classes) may be bundled into the
- * iPlanet Application Server distribution at some point (and removed from the
- * Ant distribution), the class has been written to be independent of all
- * Ant-specific classes.  It is also for this reason (and to avoid cluttering
- * the Apache Ant source files) that this utility has been packaged into a
- * single source file.
- * <p>
- * For more information on Ant Tasks for iPlanet Application Server, see the
- * <code>IPlanetDeploymentTool</code> and <code>IPlanetEjbcTask</code> classes.
- *
- * @see    IPlanetDeploymentTool
- * @see    IPlanetEjbcTask
- * @author Greg Nelson <a href="mailto:greg@netscape.com">greg@netscape.com</a>
- */
-public class IPlanetEjbc {
-
-    /* Constants used for the "beantype" attribute */
-    private static final String ENTITY_BEAN       = "entity";
-    private static final String STATELESS_SESSION = "stateless";
-    private static final String STATEFUL_SESSION  = "stateful";
-
-    /* Filenames of the standard EJB descriptor and the iAS-specific descriptor */
-    private File        stdDescriptor;
-    private File        iasDescriptor;
-
-    /*
-     * Directory where "source" EJB files are stored and where stubs and
-     * skeletons will also be written.
-     */
-    private File        destDirectory;
-
-    /* Classpath used when the iAS ejbc is called */
-    private String      classpath;
-    private String[]    classpathElements;
-
-    /* Options passed to the iAS ejbc */
-    private boolean     retainSource = false;
-    private boolean     debugOutput  = false;
-
-    /* iAS installation directory (used if ejbc isn't on user's PATH) */
-    private File        iasHomeDir;
-
-    /* Parser and handler used to process both EJB descriptor files */
-    private SAXParser   parser;
-    private EjbcHandler handler = new EjbcHandler();
-
-    /*
-     * This Hashtable maintains a list of EJB class files processed by the ejbc
-     * utility (both "source" class files as well as stubs and skeletons). The
-     * key for the Hashtable is a String representing the path to the class file
-     * (relative to the destination directory).  The value for the Hashtable is
-     * a File object which reference the actual class file.
-     */
-    private Hashtable   ejbFiles     = new Hashtable();
-
-    /* Value of the display-name element read from the standard EJB descriptor */
-    private String      displayName;
-
-    /**
-     * Constructs an instance which may be used to process EJB descriptors and
-     * generate EJB stubs and skeletons, if needed.
-     *
-     * @param stdDescriptor File referencing a standard EJB descriptor.
-     * @param iasDescriptor File referencing an iAS-specific EJB descriptor.
-     * @param destDirectory File referencing the base directory where both
-     *                      EJB "source" files are found and where stubs and
-     *                      skeletons will be written.
-     * @param classpath     String representation of the classpath to be used
-     *                      by the iAS ejbc utility.
-     * @param parser        SAXParser to be used to process both of the EJB
-     *                      descriptors.
-     */
-    public IPlanetEjbc(File stdDescriptor,
-                       File iasDescriptor,
-                       File destDirectory,
-                       String classpath,
-                       SAXParser parser) {
-        this.stdDescriptor = stdDescriptor;
-        this.iasDescriptor      = iasDescriptor;
-        this.destDirectory      = destDirectory;
-        this.classpath          = classpath;
-        this.parser             = parser;
-
-        /*
-         * Parse the classpath into it's individual elements and store the
-         * results in the "classpathElements" instance variable.
-         */
-        List elements = new ArrayList();
-        if (classpath != null) {
-            StringTokenizer st = new StringTokenizer(classpath,
-                                                        File.pathSeparator);
-            while (st.hasMoreTokens()) {
-                elements.add(st.nextToken());
-            }
-            classpathElements
-                    = (String[]) elements.toArray(new String[elements.size()]);
-        }
-    }
-
-    /**
-     * Sets whether or not the Java source files which are generated by the
-     * ejbc process should be retained or automatically deleted.
-     *
-     * @param retainsource A boolean indicating if the Java source files for
-     *                     the stubs and skeletons should be retained.
-     */
-    public void setRetainSource(boolean retainSource) {
-        this.retainSource = retainSource;
-    }
-
-    /**
-     * Sets whether or not debugging output will be generated when ejbc is
-     * executed.
-     *
-     * @param debugOutput A boolean indicating if debugging output should be
-     *                    generated
-     */
-    public void setDebugOutput(boolean debugOutput) {
-        this.debugOutput = debugOutput;
-    }
-
-    /**
-     * Registers the location of a local DTD file or resource.  By registering
-     * a local DTD, EJB descriptors can be parsed even when the remote servers
-     * which contain the "public" DTDs cannot be accessed.
-     *
-     * @param publicID The public DTD identifier found in an XML document.
-     * @param location The file or resource name for the appropriate DTD stored
-     *                 on the local machine.
-     */
-    public void registerDTD(String publicID, String location) {
-        handler.registerDTD(publicID, location);
-    }
-
-    /**
-     * Setter method used to store the "home" directory of the user's iAS
-     * installation.  The directory specified should typically be
-     * <code>[install-location]/iplanet/ias6/ias</code>.
-     *
-     * @param iashome The home directory for the user's iAS installation.
-     */
-    public void setIasHomeDir(File iasHomeDir) {
-        this.iasHomeDir = iasHomeDir;
-    }
-
-    /**
-     * Returns a Hashtable which contains a list of EJB class files processed by
-     * the ejbc utility (both "source" class files as well as stubs and
-     * skeletons). The key for the Hashtable is a String representing the path
-     * to the class file (relative to the destination directory).  The value for
-     * the Hashtable is a File object which reference the actual class file.
-     *
-     * @return The list of EJB files processed by the ejbc utility.
-     */
-    public Hashtable getEjbFiles() {
-        return ejbFiles;
-    }
-
-    /**
-     * Returns the display-name element read from the standard EJB descriptor.
-     *
-     * @return The EJB-JAR display name.
-     */
-    public String getDisplayName() {
-        return displayName;
-    }
-
-    /**
-     * Returns the list of CMP descriptors referenced in the EJB descriptors.
-     *
-     * @return An array of CMP descriptors.
-     */
-    public String[] getCmpDescriptors() {
-        List returnList = new ArrayList();
-
-        EjbInfo[] ejbs = handler.getEjbs();
-
-        for (int i = 0; i < ejbs.length ; i++) {
-            List descriptors = (List) ejbs[i].getCmpDescriptors();
-            returnList.addAll(descriptors);
-        }
-
-        return (String[]) returnList.toArray(new String[returnList.size()]);
-    }
-
-    /**
-     * Main application method for the iPlanet Application Server ejbc utility.
-     * If the application is run with no commandline arguments, a usage
-     * statement is printed for the user.
-     *
-     * @param args The commandline arguments passed to the application.
-     */
-    public static void main(String[] args) {
-        File        stdDescriptor;
-        File        iasDescriptor;
-        File        destDirectory = null;
-        String      classpath     = null;
-        SAXParser   parser        = null;
-        boolean     debug         = false;
-        boolean     retainSource  = false;
-        IPlanetEjbc ejbc;
-
-        if ((args.length < 2) || (args.length > 8)) {
-            usage();
-            return;
-        }
-
-        stdDescriptor = new File(args[args.length - 2]);
-        iasDescriptor = new File(args[args.length - 1]);
-
-        for (int i = 0; i < args.length - 2; i++) {
-            if (args[i].equals("-classpath")) {
-                classpath = args[++i];
-            } else if (args[i].equals("-d")) {
-                destDirectory = new File(args[++i]);
-            } else if (args[i].equals("-debug")) {
-                debug = true;
-            } else if (args[i].equals("-keepsource")) {
-                retainSource = true;
-            } else {
-                usage();
-                return;
-            }
-        }
-
-        /* If the -classpath flag isn't specified, use the system classpath */
-        if (classpath == null) {
-            Properties props = System.getProperties();
-            classpath = props.getProperty("java.class.path");
-        }
-
-        /*
-         * If the -d flag isn't specified, use the working directory as the
-         * destination directory
-         */
-        if (destDirectory == null) {
-            Properties props = System.getProperties();
-            destDirectory = new File(props.getProperty("user.dir"));
-        }
-
-        /* Construct a SAXParser used to process the descriptors */
-        SAXParserFactory parserFactory = SAXParserFactory.newInstance();
-        parserFactory.setValidating(true);
-        try {
-            parser = parserFactory.newSAXParser();
-        } catch (Exception e) {
-            // SAXException or ParserConfigurationException may be thrown
-            System.out.println("An exception was generated while trying to ");
-            System.out.println("create a new SAXParser.");
-            e.printStackTrace();
-            return;
-        }
-
-        /* Build and populate an instance of the ejbc utility */
-        ejbc = new IPlanetEjbc(stdDescriptor, iasDescriptor, destDirectory,
-                                classpath, parser);
-        ejbc.setDebugOutput(debug);
-        ejbc.setRetainSource(retainSource);
-
-        /* Execute the ejbc utility -- stubs/skeletons are rebuilt, if needed */
-        try {
-            ejbc.execute();
-        } catch (IOException e) {
-            System.out.println("An IOException has occurred while reading the "
-                    + "XML descriptors (" + e.getMessage() + ").");
-            return;
-        } catch (SAXException e) {
-            System.out.println("A SAXException has occurred while reading the "
-                    + "XML descriptors (" + e.getMessage() + ").");
-            return;
-        } catch (IPlanetEjbc.EjbcException e) {
-            System.out.println("An error has occurred while executing the ejbc "
-                    + "utility (" + e.getMessage() + ").");
-            return;
-        }
-    }
-
-    /**
-     * Print a usage statement.
-     */
-    private static void usage() {
-        System.out.println("java org.apache.tools.ant.taskdefs.optional.ejb.IPlanetEjbc \\");
-        System.out.println("  [OPTIONS] [EJB 1.1 descriptor] [iAS EJB descriptor]");
-        System.out.println("");
-        System.out.println("Where OPTIONS are:");
-        System.out.println("  -debug -- for additional debugging output");
-        System.out.println("  -keepsource -- to retain Java source files generated");
-        System.out.println("  -classpath [classpath] -- classpath used for compilation");
-        System.out.println("  -d [destination directory] -- directory for compiled classes");
-        System.out.println("");
-        System.out.println("If a classpath is not specified, the system classpath");
-        System.out.println("will be used.  If a destination directory is not specified,");
-        System.out.println("the current working directory will be used (classes will");
-        System.out.println("still be placed in subfolders which correspond to their");
-        System.out.println("package name).");
-        System.out.println("");
-        System.out.println("The EJB home interface, remote interface, and implementation");
-        System.out.println("class must be found in the destination directory.  In");
-        System.out.println("addition, the destination will look for the stubs and skeletons");
-        System.out.println("in the destination directory to ensure they are up to date.");
-    }
-
-    /**
-     * Compiles the stub and skeletons for the specified EJBs, if they need to
-     * be updated.
-     *
-     * @throws EjbcException If the ejbc utility cannot be correctly configured
-     *                       or if one or more of the EJB "source" classes
-     *                       cannot be found in the destination directory
-     * @throws IOException   If the parser encounters a problem reading the XML
-     *                       file
-     * @throws SAXException  If the parser encounters a problem processing the
-     *                       XML descriptor (it may wrap another exception)
-     */
-    public void execute() throws EjbcException, IOException, SAXException {
-
-        checkConfiguration();   // Throws EjbcException if unsuccessful
-
-        EjbInfo[] ejbs = getEjbs(); // Returns list of EJBs for processing
-
-        for (int i = 0; i < ejbs.length ; i++) {
-            log("EJBInfo...");
-            log(ejbs[i].toString());
-        }
-
-        for (int i = 0; i < ejbs.length; i++) {
-            EjbInfo ejb = ejbs[i];
-
-            ejb.checkConfiguration(destDirectory);  // Throws EjbcException
-
-            if (ejb.mustBeRecompiled(destDirectory)) {
-                log(ejb.getName() + " must be recompiled using ejbc.");
-
-                String[] arguments = buildArgumentList(ejb);
-                callEjbc(arguments);
-
-            } else {
-                log(ejb.getName() + " is up to date.");
-            }
-        }
-    }
-
-    /**
-     * Executes the iPlanet Application Server ejbc command-line utility.
-     *
-     * @param arguments Command line arguments to be passed to the ejbc utility.
-     */
-    private void callEjbc(String[] arguments) {
-
-        /* Concatenate all of the command line arguments into a single String */
-        StringBuffer args = new StringBuffer();
-        for (int i = 0; i < arguments.length; i++) {
-            args.append(arguments[i]).append(" ");
-        }
-
-        /* If an iAS home directory is specified, prepend it to the commmand */
-        String command;
-        if (iasHomeDir == null) {
-            command = "";
-        } else {
-            command = iasHomeDir.toString() + File.separator + "bin"
-                                                        + File.separator;
-        }
-        command += "ejbc ";
-
-        log(command + args);
-
-        /*
-         * Use the Runtime object to execute an external command.  Use the
-         * RedirectOutput inner class to direct the standard and error output
-         * from the command to the JRE's standard output
-         */
-        try {
-            Process p = Runtime.getRuntime().exec(command + args);
-            RedirectOutput output = new RedirectOutput(p.getInputStream());
-            RedirectOutput error  = new RedirectOutput(p.getErrorStream());
-            output.start();
-            error.start();
-            p.waitFor();
-            p.destroy();
-        } catch (IOException e) {
-            log("An IOException has occurred while trying to execute ejbc.");
-            e.printStackTrace();
-        } catch (InterruptedException e) {
-            // Do nothing
-        }
-    }
-
-    /**
-     * Verifies that the user selections are valid.
-     *
-     * @throws EjbcException If the user selections are invalid.
-     */
-    protected void checkConfiguration() throws EjbcException {
-
-        String msg = "";
-
-        if (stdDescriptor == null) {
-            msg += "A standard XML descriptor file must be specified.  ";
-        }
-        if (iasDescriptor == null) {
-            msg += "An iAS-specific XML descriptor file must be specified.  ";
-        }
-        if (classpath == null) {
-            msg += "A classpath must be specified.    ";
-        }
-        if (parser == null) {
-            msg += "An XML parser must be specified.    ";
-        }
-
-        if (destDirectory == null) {
-            msg += "A destination directory must be specified.  ";
-        } else if (!destDirectory.exists()) {
-            msg += "The destination directory specified does not exist.  ";
-        } else if (!destDirectory.isDirectory()) {
-            msg += "The destination specified is not a directory.  ";
-        }
-
-        if (msg.length() > 0) {
-            throw new EjbcException(msg);
-        }
-    }
-
-    /**
-     * Parses the EJB descriptors and returns a list of EJBs which may need to
-     * be compiled.
-     *
-     * @return               An array of objects which describe the EJBs to be
-     *                       processed.
-     * @throws IOException   If the parser encounters a problem reading the XML
-     *                       files
-     * @throws SAXException  If the parser encounters a problem processing the
-     *                       XML descriptor (it may wrap another exception)
-     */
-    private EjbInfo[] getEjbs() throws IOException, SAXException {
-        EjbInfo[] ejbs = null;
-
-        /*
-         * The EJB information is gathered from the standard XML EJB descriptor
-         * and the iAS-specific XML EJB descriptor using a SAX parser.
-         */
-
-        parser.parse(stdDescriptor, handler);
-        parser.parse(iasDescriptor, handler);
-        ejbs = handler.getEjbs();
-
-        return ejbs;
-    }
-
-    /**
-     * Based on this object's instance variables as well as the EJB to be
-     * processed, the correct flags and parameters are set for the ejbc
-     * command-line utility.
-     * @param ejb The EJB for which stubs and skeletons will be compiled.
-     * @return    An array of Strings which are the command-line parameters for
-     *            for the ejbc utility.
-     */
-    private String[] buildArgumentList(EjbInfo ejb) {
-
-        List arguments = new ArrayList();
-
-        /* OPTIONAL COMMAND LINE PARAMETERS */
-
-        if (debugOutput) {
-            arguments.add("-debug");
-        }
-
-        /* No beantype flag is needed for an entity bean */
-        if (ejb.getBeantype().equals(STATELESS_SESSION)) {
-            arguments.add("-sl");
-        } else if (ejb.getBeantype().equals(STATEFUL_SESSION)) {
-            arguments.add("-sf");
-        }
-
-        if (ejb.getIiop()) {
-            arguments.add("-iiop");
-        }
-
-        if (ejb.getCmp()) {
-            arguments.add("-cmp");
-        }
-
-        if (retainSource) {
-            arguments.add("-gs");
-        }
-
-        if (ejb.getHasession()) {
-            arguments.add("-fo");
-        }
-
-        /* REQUIRED COMMAND LINE PARAMETERS */
-
-        arguments.add("-classpath");
-        arguments.add(classpath);
-
-        arguments.add("-d");
-        arguments.add(destDirectory.toString());
-
-        arguments.add(ejb.getHome().getQualifiedClassName());
-        arguments.add(ejb.getRemote().getQualifiedClassName());
-        arguments.add(ejb.getImplementation().getQualifiedClassName());
-
-        /* Convert the List into an Array and return it */
-        return (String[]) arguments.toArray(new String[arguments.size()]);
-    }
-
-    /**
-     * Convenience method used to print messages to the user if debugging
-     * messages are enabled.
-     *
-     * @param msg The String to print to standard output.
-     */
-    private void log(String msg) {
-        if (debugOutput) {
-            System.out.println(msg);
-        }
-    }
-
-
-    /* Inner classes follow */
-
-
-    /**
-     * This inner class is used to signal any problems during the execution of
-     * the ejbc compiler.
-     *
-     * @author Greg Nelson
-     *         <a href="mailto:greg@netscape.com">greg@netscape.com</a>
-     */
-    public class EjbcException extends Exception {
-
-        /**
-         * Constructs an exception with the given descriptive message.
-         *
-         * @param msg Description of the exception which has occurred.
-         */
-        public EjbcException(String msg) {
-            super(msg);
-        }
-    }  // End of EjbcException inner class
-
-
-    /**
-     * This inner class is an XML document handler that can be used to parse EJB
-     * descriptors (both the standard EJB descriptor as well as the iAS-specific
-     * descriptor that stores additional values for iAS).  Once the descriptors
-     * have been processed, the list of EJBs found can be obtained by calling
-     * the <code>getEjbs()</code> method.
-     *
-     * @see    IPlanetEjbc.EjbInfo
-     * @author Greg Nelson
-     *         <a href="mailto:greg@netscape.com">greg@netscape.com</a>
-     */
-    private class EjbcHandler extends HandlerBase {
-
-        /*
-         * Two Maps are used to track local DTDs that will be used in case the
-         * remote copies of these DTDs cannot be accessed.  The key for the Map
-         * is the DTDs public ID and the value is the local location for the DTD
-         */
-        private Map       resourceDtds = new HashMap();
-        private Map       fileDtds = new HashMap();
-
-        private Map       ejbs = new HashMap();      // List of EJBs found in XML
-        private EjbInfo   currentEjb;             // One item within the Map
-        private boolean   iasDescriptor = false;  // Is doc iAS or EJB descriptor
-
-        private String    currentLoc = "";        // Tracks current element
-        private String    currentText;            // Tracks current text data
-        private String    ejbType;                // "session" or "entity"
-
-        /**
-         * Constructs a new instance of the handler and registers local copies
-         * of the standard EJB 1.1 descriptor DTD as well as iAS's EJB
-         * descriptor DTD.
-         */
-        public EjbcHandler() {
-            final String PUBLICID_EJB11 =
-                "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 1.1//EN";
-            final String PUBLICID_IPLANET_EJB_60 =
-                "-//Sun Microsystems, Inc.//DTD iAS Enterprise JavaBeans 1.0//EN";
-
-
-            final String DEFAULT_IAS60_EJB11_DTD_LOCATION =
-                "ejb-jar_1_1.dtd";
-            final String DEFAULT_IAS60_DTD_LOCATION =
-                "IASEjb_jar_1_0.dtd";
-
-            registerDTD(PUBLICID_EJB11, DEFAULT_IAS60_EJB11_DTD_LOCATION);
-            registerDTD(PUBLICID_IPLANET_EJB_60, DEFAULT_IAS60_DTD_LOCATION);
-        }
-
-        /**
-         * Returns the list of EJB objects found during the processing of the
-         * standard EJB 1.1 descriptor and iAS-specific EJB descriptor.
-         *
-         * @return An array of EJBs which were found during the descriptor
-         *         parsing.
-         */
-        public EjbInfo[] getEjbs() {
-            return (EjbInfo[]) ejbs.values().toArray(new EjbInfo[ejbs.size()]);
-        }
-
-        /**
-         * Returns the value of the display-name element found in the standard
-         * EJB 1.1 descriptor.
-         *
-         * @return String display-name value.
-         */
-        public String getDisplayName() {
-            return displayName;
-        }
-
-        /**
-         * Registers a local DTD that will be used when parsing an EJB
-         * descriptor.  When the DTD's public identifier is found in an XML
-         * document, the parser will reference the local DTD rather than the
-         * remote DTD.  This enables XML documents to be processed even when the
-         * public DTD isn't available.
-         *
-         * @param publicID The DTD's public identifier.
-         * @param location The location of the local DTD copy -- the location
-         *                 may either be a resource found on the classpath or a
-         *                 local file.
-         */
-        public void registerDTD(String publicID, String location) {
-            log("Registering: " + location);
-            if ((publicID == null) || (location == null)) {
-                return;
-            }
-
-            if (ClassLoader.getSystemResource(location) != null) {
-                log("Found resource: " + location);
-                resourceDtds.put(publicID, location);
-            } else {
-                File dtdFile = new File(location);
-                if (dtdFile.exists() && dtdFile.isFile()) {
-                    log("Found file: " + location);
-                    fileDtds.put(publicID, location);
-                }
-            }
-        }
-
-        /**
-         * Resolves an external entity found during XML processing.  If a public
-         * ID is found that has been registered with the handler, an <code>
-         * InputSource</code> will be returned which refers to the local copy.
-         * If the public ID hasn't been registered or if an error occurs, the
-         * superclass implementation is used.
-         *
-         * @param publicId The DTD's public identifier.
-         * @param systemId The location of the DTD, as found in the XML document.
-         */
-        public InputSource resolveEntity(String publicId, String systemId)
-                throws SAXException {
-            InputStream inputStream = null;
-
-
-            try {
-
-                /* Search the resource Map and (if not found) file Map */
-
-                String location = (String) resourceDtds.get(publicId);
-                if (location != null) {
-                    inputStream
-                        = ClassLoader.getSystemResource(location).openStream();
-                } else {
-                    location = (String) fileDtds.get(publicId);
-                    if (location != null) {
-                        inputStream = new FileInputStream(location);
-                    }
-                }
-            } catch (IOException e) {
-                return super.resolveEntity(publicId, systemId);
-            }
-
-            if (inputStream == null) {
-                return super.resolveEntity(publicId, systemId);
-            } else {
-                return new InputSource(inputStream);
-            }
-        }
-
-        /**
-         * Receive notification that the start of an XML element has been found.
-         *
-         * @param name String name of the element found.
-         * @param atts AttributeList of the attributes included with the element
-         *             (if any).
-         * @throws SAXException If the parser cannot process the document.
-         */
-        public void startElement(String name, AttributeList atts)
-                throws SAXException {
-
-            /*
-             * I need to "push" the element onto the String (currentLoc) which
-             * always represents the current location in the XML document.
-             */
-            currentLoc += "\\" + name;
-
-            /* A new element has started, so reset the text being captured */
-            currentText = "";
-
-            if (currentLoc.equals("\\ejb-jar")) {
-                iasDescriptor = false;
-            } else if (currentLoc.equals("\\ias-ejb-jar")) {
-                iasDescriptor = true;
-            }
-
-            if ((name.equals("session")) || (name.equals("entity"))) {
-                ejbType = name;
-            }
-        }
-
-        /**
-         * Receive notification that character data has been found in the XML
-         * document
-         *
-         * @param ch Array of characters which have been found in the document.
-         * @param start Starting index of the data found in the document.
-         * @param len The number of characters found in the document.
-         * @throws SAXException If the parser cannot process the document.
-         */
-        public void characters(char[] ch, int start, int len)
-                throws SAXException {
-
-            currentText += new String(ch).substring(start, start + len);
-        }
-
-        /**
-         * Receive notification that the end of an XML element has been found.
-         *
-         * @param name String name of the element.
-         * @throws SAXException If the parser cannot process the document.
-         */
-        public void endElement(String name) throws SAXException {
-
-            /*
-             * If this is a standard EJB 1.1 descriptor, we are looking for one
-             * set of data, while if this is an iAS-specific descriptor, we're
-             * looking for different set of data.  Hand the processing off to
-             * the appropriate method.
-             */
-            if (iasDescriptor) {
-                iasCharacters(currentText);
-            } else {
-                stdCharacters(currentText);
-            }
-
-            /*
-             * I need to "pop" the element off the String (currentLoc) which
-             * always represents my current location in the XML document.
-             */
-
-            int nameLength = name.length() + 1; // Add one for the "\"
-            int locLength  = currentLoc.length();
-
-            currentLoc = currentLoc.substring(0, locLength - nameLength);
-        }
-
-        /**
-         * Receive notification that character data has been found in a standard
-         * EJB 1.1 descriptor.  We're interested in retrieving the home
-         * interface, remote interface, implementation class, the type of bean,
-         * and if the bean uses CMP.
-         *
-         * @param value String data found in the XML document.
-         */
-        private void stdCharacters(String value) {
-
-            if (currentLoc.equals("\\ejb-jar\\display-name")) {
-                displayName = value;
-                return;
-            }
-
-            String base = "\\ejb-jar\\enterprise-beans\\" + ejbType;
-
-            if (currentLoc.equals(base + "\\ejb-name")) {
-                currentEjb = (EjbInfo) ejbs.get(value);
-                if (currentEjb == null) {
-                    currentEjb = new EjbInfo(value);
-                    ejbs.put(value, currentEjb);
-                }
-            } else if (currentLoc.equals(base + "\\home")) {
-                currentEjb.setHome(value);
-            } else if (currentLoc.equals(base + "\\remote")) {
-                currentEjb.setRemote(value);
-            } else if (currentLoc.equals(base + "\\ejb-class")) {
-                currentEjb.setImplementation(value);
-            } else if (currentLoc.equals(base + "\\prim-key-class")) {
-                currentEjb.setPrimaryKey(value);
-            } else if (currentLoc.equals(base + "\\session-type")) {
-                currentEjb.setBeantype(value);
-            } else if (currentLoc.equals(base + "\\persistence-type")) {
-                currentEjb.setCmp(value);
-            }
-        }
-
-        /**
-         * Receive notification that character data has been found in an
-         * iAS-specific descriptor.  We're interested in retrieving data
-         * indicating whether the bean must support RMI/IIOP access, whether
-         * the bean must provide highly available stubs and skeletons (in the
-         * case of stateful session beans), and if this bean uses additional
-         * CMP XML descriptors (in the case of entity beans with CMP).
-         *
-         * @param value String data found in the XML document.
-         */
-        private void iasCharacters(String value) {
-            String base = "\\ias-ejb-jar\\enterprise-beans\\" + ejbType;
-
-            if (currentLoc.equals(base + "\\ejb-name")) {
-                currentEjb = (EjbInfo) ejbs.get(value);
-                if (currentEjb == null) {
-                    currentEjb = new EjbInfo(value);
-                    ejbs.put(value, currentEjb);
-                }
-            } else if (currentLoc.equals(base + "\\iiop")) {
-                currentEjb.setIiop(value);
-            } else if (currentLoc.equals(base + "\\failover-required")) {
-                currentEjb.setHasession(value);
-            } else if (currentLoc.equals(base + "\\persistence-manager"
-                                              + "\\properties-file-location")) {
-                currentEjb.addCmpDescriptor(value);
-            }
-        }
-    }  // End of EjbcHandler inner class
-
-
-    /**
-     * This inner class represents an EJB that will be compiled using ejbc.
-     *
-     * @author Greg Nelson
-     *         <a href="mailto:greg@netscape.com">greg@netscape.com</a>
-     */
-    private class EjbInfo {
-        private String     name;              // EJB's display name
-        private Classname  home;              // EJB's home interface name
-        private Classname  remote;            // EJB's remote interface name
-        private Classname  implementation;      // EJB's implementation class
-        private Classname  primaryKey;        // EJB's primary key class
-        private String  beantype = "entity";  // or "stateful" or "stateless"
-        private boolean cmp       = false;      // Does this EJB support CMP?
-        private boolean iiop      = false;      // Does this EJB support IIOP?
-        private boolean hasession = false;      // Does this EJB require failover?
-        private List cmpDescriptors = new ArrayList();  // CMP descriptor list
-
-        /**
-         * Construct a new EJBInfo object with the given name.
-         *
-         * @param name The display name for the EJB.
-         */
-        public EjbInfo(String name) {
-            this.name = name;
-        }
-
-        /**
-         * Returns the display name of the EJB.  If a display name has not been
-         * set, it returns the EJB implementation classname (if the
-         * implementation class is not set, it returns "[unnamed]").
-         *
-         * @return The display name for the EJB.
-         */
-        public String getName() {
-            if (name == null) {
-                if (implementation == null) {
-                    return "[unnamed]";
-                } else {
-                    return implementation.getClassName();
-                }
-            }
-            return name;
-        }
-
-        /*
-         * Below are getter's and setter's for each of the instance variables.
-         * Note that (in addition to supporting setters with the same type as
-         * the instance variable) a setter is provided with takes a String
-         * argument -- this are provided so the XML document handler can set
-         * the EJB values using the Strings it parses.
-         */
-
-        public void setHome(String home) {
-            setHome(new Classname(home));
-        }
-
-        public void setHome(Classname home) {
-            this.home = home;
-        }
-
-        public Classname getHome() {
-            return home;
-        }
-
-        public void setRemote(String remote) {
-            setRemote(new Classname(remote));
-        }
-
-        public void setRemote(Classname remote) {
-            this.remote = remote;
-        }
-
-        public Classname getRemote() {
-            return remote;
-        }
-
-        public void setImplementation(String implementation) {
-            setImplementation(new Classname(implementation));
-        }
-
-        public void setImplementation(Classname implementation) {
-            this.implementation = implementation;
-        }
-
-        public Classname getImplementation() {
-            return implementation;
-        }
-
-        public void setPrimaryKey(String primaryKey) {
-            setPrimaryKey(new Classname(primaryKey));
-        }
-
-        public void setPrimaryKey(Classname primaryKey) {
-            this.primaryKey = primaryKey;
-        }
-
-        public Classname getPrimaryKey() {
-            return primaryKey;
-        }
-
-        public void setBeantype(String beantype) {
-            this.beantype = beantype.toLowerCase();
-        }
-
-        public String getBeantype() {
-            return beantype;
-        }
-
-        public void setCmp(boolean cmp) {
-            this.cmp = cmp;
-        }
-
-        public void setCmp(String cmp) {
-            setCmp(cmp.equals("Container"));
-        }
-
-        public boolean getCmp() {
-            return cmp;
-        }
-
-        public void setIiop(boolean iiop) {
-            this.iiop = iiop;
-        }
-
-        public void setIiop(String iiop) {
-            setIiop(iiop.equals("true"));
-        }
-
-        public boolean getIiop() {
-            return iiop;
-        }
-
-        public void setHasession(boolean hasession) {
-            this.hasession = hasession;
-        }
-
-        public void setHasession(String hasession) {
-            setHasession(hasession.equals("true"));
-        }
-
-        public boolean getHasession() {
-            return hasession;
-        }
-
-        public void addCmpDescriptor(String descriptor) {
-            cmpDescriptors.add(descriptor);
-        }
-
-        public List getCmpDescriptors() {
-            return cmpDescriptors;
-        }
-
-        /**
-         * Verifies that the EJB is valid--if it is invalid, an exception is
-         * thrown
-         *
-         *
-         * @param buildDir The directory where the EJB remote interface, home
-         *                 interface, and implementation class must be found.
-         * @throws EjbcException If the EJB is invalid.
-         */
-        private void checkConfiguration(File buildDir) throws EjbcException  {
-
-            /* Check that the specified instance variables are valid */
-            if (home == null) {
-                throw new EjbcException("A home interface was not found "
-                            + "for the " + name + " EJB.");
-            }
-            if (remote == null) {
-                throw new EjbcException("A remote interface was not found "
-                            + "for the " + name + " EJB.");
-            }
-            if (implementation == null) {
-                throw new EjbcException("An EJB implementation class was not "
-                            + "found for the " + name + " EJB.");
-            }
-
-            if ((!beantype.equals(ENTITY_BEAN))
-                        && (!beantype.equals(STATELESS_SESSION))
-                        && (!beantype.equals(STATEFUL_SESSION))) {
-                throw new EjbcException("The beantype found (" + beantype + ") "
-                            + "isn't valid in the " + name + " EJB.");
-            }
-
-            if (cmp && (!beantype.equals(ENTITY_BEAN))) {
-                System.out.println("CMP stubs and skeletons may not be generated"
-                    + " for a Session Bean -- the \"cmp\" attribute will be"
-                    + " ignoredfor the " + name + " EJB.");
-            }
-
-            if (hasession && (!beantype.equals(STATEFUL_SESSION))) {
-                System.out.println("Highly available stubs and skeletons may "
-                    + "only be generated for a Stateful Session Bean -- the "
-                    + "\"hasession\" attribute will be ignored for the "
-                    + name + " EJB.");
-            }
-
-            /* Check that the EJB "source" classes all exist */
-            if (!remote.getClassFile(buildDir).exists()) {
-                throw new EjbcException("The remote interface "
-                            + remote.getQualifiedClassName() + " could not be "
-                            + "found.");
-            }
-            if (!home.getClassFile(buildDir).exists()) {
-                throw new EjbcException("The home interface "
-                            + home.getQualifiedClassName() + " could not be "
-                            + "found.");
-            }
-            if (!implementation.getClassFile(buildDir).exists()) {
-                throw new EjbcException("The EJB implementation class "
-                            + implementation.getQualifiedClassName() + " could "
-                            + "not be found.");
-            }
-        }
-
-        /**
-         * Determines if the ejbc utility needs to be run or not.  If the stubs
-         * and skeletons can all be found in the destination directory AND all
-         * of their timestamps are more recent than the EJB source classes
-         * (home, remote, and implementation classes), the method returns
-         * <code>false</code>.  Otherwise, the method returns <code>true</code>.
-         *
-         * @param destDir The directory where the EJB source classes, stubs and
-         *                skeletons are located.
-         * @return A boolean indicating whether or not the ejbc utility needs to
-         *         be run to bring the stubs and skeletons up to date.
-         */
-        public boolean mustBeRecompiled(File destDir) {
-
-            long sourceModified = sourceClassesModified(destDir);
-
-            long destModified = destClassesModified(destDir);
-
-            return (destModified < sourceModified);
-        }
-
-        /**
-         * Examines each of the EJB source classes (home, remote, and
-         * implementation) and returns the modification timestamp for the
-         * "oldest" class.
-         *
-         * @param classpath The classpath to be used to find the source EJB
-         *                  classes.  If <code>null</code>, the system classpath
-         *                  is used.
-         * @return The modification timestamp for the "oldest" EJB source class.
-         * @throws BuildException If one of the EJB source classes cannot be
-         *                        found on the classpath.
-         */
-        private long sourceClassesModified(File buildDir) {
-            long latestModified; // The timestamp of the "newest" class
-            long modified;       // Timestamp for a given class
-            File remoteFile;     // File for the remote interface class
-            File homeFile;       // File for the home interface class
-            File implFile;       // File for the EJB implementation class
-            File pkFile;         // File for the EJB primary key class
-
-            /* Check the timestamp on the remote interface */
-            remoteFile = remote.getClassFile(buildDir);
-            modified = remoteFile.lastModified();
-            if (modified == -1) {
-                System.out.println("The class "
-                                + remote.getQualifiedClassName() + " couldn't "
-                                + "be found on the classpath");
-                return -1;
-            }
-            latestModified = modified;
-
-            /* Check the timestamp on the home interface */
-            homeFile = home.getClassFile(buildDir);
-            modified = homeFile.lastModified();
-            if (modified == -1) {
-                System.out.println("The class "
-                                + home.getQualifiedClassName() + " couldn't be "
-                                + "found on the classpath");
-                return -1;
-            }
-            latestModified = Math.max(latestModified, modified);
-
-            /* Check the timestamp of the primary key class */
-            if (primaryKey != null) {
-                pkFile = primaryKey.getClassFile(buildDir);
-                modified = pkFile.lastModified();
-                if (modified == -1) {
-                    System.out.println("The class "
-                                    + primaryKey.getQualifiedClassName() + "couldn't be "
-                                    + "found on the classpath");
-                    return -1;
-                }
-                latestModified = Math.max(latestModified, modified);
-            } else {
-                pkFile = null;
-            }
-
-            /* Check the timestamp on the EJB implementation class.
-             *
-             * Note that if ONLY the implementation class has changed, it's not
-             * necessary to rebuild the EJB stubs and skeletons.  For this
-             * reason, we ensure the file exists (using lastModified above), but
-             * we DON'T compare it's timestamp with the timestamps of the home
-             * and remote interfaces (because it's irrelevant in determining if
-             * ejbc must be run)
-             */
-            implFile = implementation.getClassFile(buildDir);
-            modified = implFile.lastModified();
-            if (modified == -1) {
-                System.out.println("The class "
-                                + implementation.getQualifiedClassName()
-                                + " couldn't be found on the classpath");
-                return -1;
-            }
-
-            String pathToFile = remote.getQualifiedClassName();
-            pathToFile = pathToFile.replace('.', File.separatorChar) + ".class";
-            ejbFiles.put(pathToFile, remoteFile);
-
-            pathToFile = home.getQualifiedClassName();
-            pathToFile = pathToFile.replace('.', File.separatorChar) + ".class";
-            ejbFiles.put(pathToFile, homeFile);
-
-            pathToFile = implementation.getQualifiedClassName();
-            pathToFile = pathToFile.replace('.', File.separatorChar) + ".class";
-            ejbFiles.put(pathToFile, implFile);
-
-            if (pkFile != null) {
-                pathToFile = primaryKey.getQualifiedClassName();
-                pathToFile = pathToFile.replace('.', File.separatorChar) + ".class";
-                ejbFiles.put(pathToFile, pkFile);
-            }
-
-            return latestModified;
-        }
-
-        /**
-         * Examines each of the EJB stubs and skeletons in the destination
-         * directory and returns the modification timestamp for the "oldest"
-         * class. If one of the stubs or skeletons cannot be found, <code>-1
-         * </code> is returned.
-         *
-         * @param dest The directory in which the EJB stubs and skeletons are
-         *             stored.
-         * @return The modification timestamp for the "oldest" EJB stub or
-         *         skeleton.  If one of the classes cannot be found, <code>-1
-         *         </code> is returned.
-         * @throws BuildException If the canonical path of the destination
-         *                        directory cannot be found.
-         */
-        private long destClassesModified(File destDir) {
-            String[] classnames = classesToGenerate(); // List of all stubs & skels
-            long destClassesModified = new Date().getTime(); // Earliest mod time
-            boolean allClassesFound  = true;           // Has each been found?
-
-            /*
-             * Loop through each stub/skeleton class that must be generated, and
-             * determine (if all exist) which file has the most recent timestamp
-             */
-            for (int i = 0; i < classnames.length; i++) {
-
-                String pathToClass =
-                        classnames[i].replace('.', File.separatorChar) + ".class";
-                File classFile = new File(destDir, pathToClass);
-
-                /*
-                 * Add each stub/skeleton class to the list of EJB files.  Note
-                 * that each class is added even if it doesn't exist now.
-                 */
-                ejbFiles.put(pathToClass, classFile);
-
-                allClassesFound = allClassesFound && classFile.exists();
-
-                if (allClassesFound) {
-                    long fileMod = classFile.lastModified();
-
-                    /* Keep track of the oldest modification timestamp */
-                    destClassesModified = Math.min(destClassesModified, fileMod);
-                }
-            }
-
-            return (allClassesFound) ? destClassesModified : -1;
-        }
-
-        /**
-         * Builds an array of class names which represent the stubs and
-         * skeletons which need to be generated for a given EJB.  The class
-         * names are fully qualified.  Nine classes are generated for all EJBs
-         * while an additional six classes are generated for beans requiring
-         * RMI/IIOP access.
-         *
-         * @return An array of Strings representing the fully-qualified class
-         *         names for the stubs and skeletons to be generated.
-         */
-        private String[] classesToGenerate() {
-            String[] classnames = (iiop) ? new String[15] : new String[9];
-
-            final String remotePkg     = remote.getPackageName() + ".";
-            final String remoteClass   = remote.getClassName();
-            final String homePkg       = home.getPackageName() + ".";
-            final String homeClass     = home.getClassName();
-            final String implPkg       = implementation.getPackageName() + ".";
-            final String implFullClass = implementation.getQualifiedWithUnderscores();
-            int index = 0;
-
-            String fullPath;
-
-            classnames[index++] = implPkg + "ejb_fac_" + implFullClass;
-            classnames[index++] = implPkg + "ejb_home_" + implFullClass;
-            classnames[index++] = implPkg + "ejb_skel_" + implFullClass;
-            classnames[index++] = remotePkg + "ejb_kcp_skel_" + remoteClass;
-            classnames[index++] = homePkg + "ejb_kcp_skel_" + homeClass;
-            classnames[index++] = remotePkg + "ejb_kcp_stub_" + remoteClass;
-            classnames[index++] = homePkg + "ejb_kcp_stub_" + homeClass;
-            classnames[index++] = remotePkg + "ejb_stub_" + remoteClass;
-            classnames[index++] = homePkg + "ejb_stub_" + homeClass;
-
-            if (!iiop) {
-                return classnames;
-            }
-
-            classnames[index++] = remotePkg + "_" + remoteClass + "_Stub";
-            classnames[index++] = homePkg + "_" + homeClass + "_Stub";
-            classnames[index++] = remotePkg + "_ejb_RmiCorbaBridge_"
-                                                        + remoteClass + "_Tie";
-            classnames[index++] = homePkg + "_ejb_RmiCorbaBridge_" + homeClass
-                                                        + "_Tie";
-            classnames[index++] = remotePkg + "ejb_RmiCorbaBridge_"
-                                                        + remoteClass;
-            classnames[index++] = homePkg + "ejb_RmiCorbaBridge_" + homeClass;
-
-            return classnames;
-        }
-
-        /**
-         * Convenience method which creates a String representation of all the
-         * instance variables of an EjbInfo object.
-         *
-         * @return A String representing the EjbInfo instance.
-         */
-        public String toString() {
-            String s = "EJB name: " + name
-                        + "\n\r              home:      " + home
-                        + "\n\r              remote:    " + remote
-                        + "\n\r              impl:      " + implementation
-                        + "\n\r              primaryKey: " + primaryKey
-                        + "\n\r              beantype:  " + beantype
-                        + "\n\r              cmp:       " + cmp
-                        + "\n\r              iiop:      " + iiop
-                        + "\n\r              hasession: " + hasession;
-
-            Iterator i = cmpDescriptors.iterator();
-            while (i.hasNext()) {
-                s += "\n\r              CMP Descriptor: " + i.next();
-            }
-
-            return s;
-        }
-
-    } // End of EjbInfo inner class
-
-    /**
-     * Convenience class used to represent the fully qualified name of a Java
-     * class.  It provides an easy way to retrieve components of the class name
-     * in a format that is convenient for building iAS stubs and skeletons.
-     *
-     * @author Greg Nelson <a href="mailto:greg@netscape.com">greg@netscape.com</a>
-     */
-    private class Classname {
-        private String qualifiedName;  // Fully qualified name of the Java class
-        private String packageName;    // Name of the package for this class
-        private String className;      // Name of the class without the package
-
-        /**
-         * This constructor builds an object which represents the name of a Java
-         * class.
-         *
-         * @param qualifiedName String representing the fully qualified class
-         *                      name of the Java class.
-         */
-        public Classname(String qualifiedName) {
-            if (qualifiedName == null) {
-                return;
-            }
-
-            this.qualifiedName = qualifiedName;
-
-            int index = qualifiedName.lastIndexOf('.');
-            if (index == -1) {
-                className = qualifiedName;
-                packageName = "";
-            } else {
-                packageName = qualifiedName.substring(0, index);
-                className   = qualifiedName.substring(index + 1);
-            }
-        }
-
-        /**
-         * Gets the fully qualified name of the Java class.
-         *
-         * @return String representing the fully qualified class name.
-         */
-        public String getQualifiedClassName() {
-            return qualifiedName;
-        }
-
-        /**
-         * Gets the package name for the Java class.
-         *
-         * @return String representing the package name for the class.
-         */
-        public String getPackageName() {
-            return packageName;
-        }
-
-        /**
-         * Gets the Java class name without the package structure.
-         *
-         * @return String representing the name for the class.
-         */
-        public String getClassName() {
-            return className;
-        }
-
-        /**
-         * Gets the fully qualified name of the Java class with underscores
-         * separating the components of the class name rather than periods.
-         * This format is used in naming some of the stub and skeleton classes
-         * for the iPlanet Application Server.
-         *
-         * @return String representing the fully qualified class name using
-         *         underscores instead of periods.
-         */
-        public String getQualifiedWithUnderscores() {
-            return qualifiedName.replace('.', '_');
-        }
-
-        /**
-         * Returns a File which references the class relative to the specified
-         * directory.  Note that the class file may or may not exist.
-         *
-         * @param  directory A File referencing the base directory containing
-         *                   class files.
-         * @return File referencing this class.
-         */
-        public File getClassFile(File directory) {
-            String pathToFile = qualifiedName.replace('.', File.separatorChar)
-                                            + ".class";
-            return new File(directory, pathToFile);
-        }
-
-        /**
-         * String representation of this class name.  It returns the fully
-         * qualified class name.
-         *
-         * @return String representing the fully qualified class name.
-         */
-        public String toString() {
-            return getQualifiedClassName();
-        }
-    }  // End of Classname inner class
-
-
-    /**
-     * Thread class used to redirect output from an <code>InputStream</code> to
-     * the JRE standard output.  This class may be used to redirect output from
-     * an external process to the standard output.
-     *
-     * @author Greg Nelson <a href="mailto:greg@netscape.com">greg@netscape.com</a>
-     */
-    private class RedirectOutput extends Thread {
-        InputStream stream;  // Stream to read and redirect to standard output
-
-        /**
-         * Constructs a new instance that will redirect output from the
-         * specified stream to the standard output.
-         *
-         * @param stream InputStream which will be read and redirected to the
-         *               standard output.
-         */
-        public RedirectOutput(InputStream stream) {
-            this.stream = stream;
-        }
-
-        /**
-         * Reads text from the input stream and redirects it to standard output
-         * using a separate thread.
-         */
-        public void run() {
-            BufferedReader reader = new BufferedReader(
-                                            new InputStreamReader(stream));
-            String text;
-            try {
-                while ((text = reader.readLine()) != null) {
-                    System.out.println(text);
-                }
-            } catch (IOException e) {
-                e.printStackTrace();
-            } finally {
-                try {
-                    reader.close();
-                } catch (IOException e) {
-                    // Do nothing
-                }
-            }
-        }
-    }  // End of RedirectOutput inner class
-
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/IPlanetEjbcTask.java b/src/main/org/apache/tools/ant/taskdefs/optional/ejb/IPlanetEjbcTask.java
deleted file mode 100644
index 247094b..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/IPlanetEjbcTask.java
+++ /dev/null
@@ -1,354 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.ejb;
-
-import java.io.File;
-import java.io.IOException;
-
-import javax.xml.parsers.SAXParserFactory;
-import javax.xml.parsers.SAXParser;
-import javax.xml.parsers.ParserConfigurationException;
-import org.xml.sax.SAXException;
-
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.types.Path;
-import org.apache.tools.ant.BuildException;
-
-/**
- * Task to compile EJB stubs and skeletons for the iPlanet Application Server.
- * The EJBs to be processed are specified by the EJB 1.1 standard XML
- * descriptor, and additional attributes are obtained from the iPlanet Application
- * Server-specific XML descriptor.  Since the XML descriptors can include
- * multiple EJBs, this is a convenient way of specifying many EJBs in a single
- * Ant task.  The following attributes are allowed:
- *   <ul>
- *     <li><i>ejbdescriptor</i> -- Standard EJB 1.1 XML descriptor (typically
- *                                 titled "ejb-jar.xml").  This attribute is
- *                                 required.
- *     <li><i>iasdescriptor</i> -- EJB XML descriptor for iPlanet Application
- *                                 Server (typically titled "ias-ejb-jar.xml).
- *                                 This attribute is required.
- *     <li><i>dest</i> -- The is the base directory where the RMI stubs and
- *                        skeletons are written.  In addition, the class files
- *                        for each bean (home interface, remote interface, and
- *                        EJB implementation) must be found in this directory.
- *                        This attribute is required.
- *     <li><i>classpath</i> -- The classpath used when generating EJB stubs and
- *                             skeletons.  This is an optional attribute (if
- *                             omitted, the classpath specified when Ant was
- *                             started will be used).  Nested "classpath"
- *                             elements may also be used.
- *     <li><i>keepgenerated</i> -- Indicates whether or not the Java source
- *                                 files which are generated by ejbc will be
- *                                 saved or automatically deleted.  If "yes",
- *                                 the source files will be retained.  This is
- *                                 an optional attribute (if omitted, it
- *                                 defaults to "no").
- *     <li><i>debug</i> -- Indicates whether or not the ejbc utility should
- *                         log additional debugging statements to the standard
- *                         output.  If "yes", the additional debugging statements
- *                         will be generated (if omitted, it defaults to "no").
- *     <li><i>iashome</i> -- May be used to specify the "home" directory for
- *                           this iPlanet Application Server installation.  This
- *                           is used to find the ejbc utility if it isn't
- *                           included in the user's system path.  This is an
- *                           optional attribute (if specified, it should refer
- *                           to the <code>[install-location]/iplanet/ias6/ias
- *                           </code> directory).  If omitted, the ejbc utility
- *                           must be on the user's system path.
- *   </ul>
- * <p>
- * For each EJB specified, this task will locate the three classes that comprise
- * the EJB.  If these class files cannot be located in the <code>dest</code>
- * directory, the task will fail.  The task will also attempt to locate the EJB
- * stubs and skeletons in this directory.  If found, the timestamps on the
- * stubs and skeletons will be checked to ensure they are up to date.  Only if
- * these files cannot be found or if they are out of date will ejbc be called
- * to generate new stubs and skeletons.
- *
- * @see    IPlanetEjbc
- * @author Greg Nelson <a href="mailto:greg@netscape.com">greg@netscape.com</a>
- *
- * @ant.task name="iplanet-ejbc" category="ejb"
- */
-public class IPlanetEjbcTask extends Task {
-
-    /* Attributes set by the Ant build file */
-    private File    ejbdescriptor;
-    private File    iasdescriptor;
-    private File    dest;
-    private Path    classpath;
-    private boolean keepgenerated = false;
-    private boolean debug         = false;
-    private File    iashome;
-
-    /**
-     * Sets the location of the standard XML EJB descriptor.  Typically, this
-     * file is named "ejb-jar.xml".
-     *
-     * @param ejbdescriptor The name and location of the EJB descriptor.
-     */
-    public void setEjbdescriptor(File ejbdescriptor) {
-        this.ejbdescriptor = ejbdescriptor;
-    }
-
-    /**
-     * Sets the location of the iAS-specific XML EJB descriptor.  Typically,
-     * this file is named "ias-ejb-jar.xml".
-     *
-     * @param iasdescriptor The name and location of the iAS-specific EJB
-     *                      descriptor.
-     */
-    public void setIasdescriptor (File iasdescriptor) {
-        this.iasdescriptor = iasdescriptor;
-    }
-
-    /**
-     * Sets the destination directory where the EJB "source" classes must exist
-     * and where the stubs and skeletons will be written.  The destination
-     * directory must exist before this task is executed.
-     *
-     * @param dest The directory where the compiled classes will be written.
-     */
-    public void setDest(File dest) {
-        this.dest = dest;
-    }
-
-    /**
-     * Sets the classpath to be used when compiling the EJB stubs and skeletons.
-     *
-     * @param classpath The classpath to be used.
-     */
-    public void setClasspath(Path classpath) {
-        if (this.classpath == null) {
-            this.classpath = classpath;
-        } else {
-            this.classpath.append(classpath);
-        }
-    }
-
-    /**
-     * Creates a nested classpath element.
-     */
-    public Path createClasspath() {
-        if (classpath == null) {
-            classpath = new Path(project);
-        }
-        return classpath.createPath();
-    }
-
-    /**
-     * Sets whether or not the Java source files which are generated by the
-     * ejbc process should be retained or automatically deleted.
-     *
-     * @param keepgenerated A boolean indicating if the Java source files for
-     *                      the stubs and skeletons should be retained.
-     */
-    public void setKeepgenerated(boolean keepgenerated) {
-        this.keepgenerated = keepgenerated;
-    }
-
-    /**
-     * Sets whether or not debugging output will be generated when ejbc is
-     * executed.
-     *
-     * @param debug A boolean indicating if debugging output should be generated
-     */
-    public void setDebug(boolean debug) {
-        this.debug = debug;
-    }
-
-    /**
-     * Setter method used to store the "home" directory of the user's iAS
-     * installation.  The directory specified should typically be
-     * <code>[install-location]/iplanet/ias6/ias</code>.
-     *
-     * @param iashome The home directory for the user's iAS installation.
-     */
-    public void setIashome(File iashome) {
-        this.iashome = iashome;
-    }
-
-    /**
-     * Does the work.
-     */
-    public void execute() throws BuildException {
-        checkConfiguration();
-
-        executeEjbc(getParser());
-    }
-
-    /**
-     * Verifies that the user selections are valid.
-     *
-     * @throws BuildException If the user selections are invalid.
-     */
-    private void checkConfiguration() throws BuildException {
-
-        if (ejbdescriptor == null) {
-            String msg = "The standard EJB descriptor must be specified using "
-                            + "the \"ejbdescriptor\" attribute.";
-            throw new BuildException(msg, location);
-        }
-        if ((!ejbdescriptor.exists()) || (!ejbdescriptor.isFile())) {
-            String msg = "The standard EJB descriptor (" + ejbdescriptor
-                            + ") was not found or isn't a file.";
-            throw new BuildException(msg, location);
-        }
-
-        if (iasdescriptor == null) {
-            String msg = "The iAS-speific XML descriptor must be specified using"
-                            + " the \"iasdescriptor\" attribute.";
-            throw new BuildException(msg, location);
-        }
-        if ((!iasdescriptor.exists()) || (!iasdescriptor.isFile())) {
-            String msg = "The iAS-specific XML descriptor (" + iasdescriptor
-                            + ") was not found or isn't a file.";
-            throw new BuildException(msg, location);
-        }
-
-        if (dest == null) {
-            String msg = "The destination directory must be specified using "
-                            + "the \"dest\" attribute.";
-            throw new BuildException(msg, location);
-        }
-        if ((!dest.exists()) || (!dest.isDirectory())) {
-            String msg = "The destination directory (" + dest + ") was not "
-                            + "found or isn't a directory.";
-            throw new BuildException(msg, location);
-        }
-
-        if ((iashome != null) && (!iashome.isDirectory())) {
-            String msg = "If \"iashome\" is specified, it must be a valid "
-                            + "directory (it was set to " + iashome + ").";
-            throw new BuildException(msg, getLocation());
-        }
-    }
-
-    /**
-     * Returns a SAXParser that may be used to process the XML descriptors.
-     *
-     * @return Parser which may be used to process the EJB descriptors.
-     * @throws BuildException If the parser cannot be created or configured.
-     */
-    private SAXParser getParser() throws BuildException {
-
-        SAXParser saxParser = null;
-        try {
-            SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
-            saxParserFactory.setValidating(true);
-            saxParser = saxParserFactory.newSAXParser();
-        } catch (SAXException e) {
-            String msg = "Unable to create a SAXParser: " + e.getMessage();
-            throw new BuildException(msg, e, location);
-        } catch (ParserConfigurationException e) {
-            String msg = "Unable to create a SAXParser: " + e.getMessage();
-            throw new BuildException(msg, e, location);
-        }
-
-        return saxParser;
-    }
-
-    /**
-     * Executes the EJBc utility using the SAXParser provided.
-     *
-     * @param saxParser SAXParser that may be used to process the EJB
-     *                  descriptors
-     * @throws BuildException If there is an error reading or parsing the XML
-     *                        descriptors
-     */
-    private void executeEjbc(SAXParser saxParser) throws BuildException {
-        IPlanetEjbc ejbc = new IPlanetEjbc(ejbdescriptor,
-                                            iasdescriptor,
-                                            dest,
-                                            getClasspath().toString(),
-                                            saxParser);
-        ejbc.setRetainSource(keepgenerated);
-        ejbc.setDebugOutput(debug);
-        if (iashome != null) {
-            ejbc.setIasHomeDir(iashome);
-        }
-
-        try {
-            ejbc.execute();
-        } catch (IOException e) {
-            String msg = "An IOException occurred while trying to read the XML "
-                            + "descriptor file: " + e.getMessage();
-            throw new BuildException(msg, e, location);
-        } catch (SAXException e) {
-            String msg = "A SAXException occurred while trying to read the XML "
-                            + "descriptor file: " + e.getMessage();
-            throw new BuildException(msg, e, location);
-        } catch (IPlanetEjbc.EjbcException e) {
-            String msg = "An exception occurred while trying to run the ejbc "
-                            + "utility: " + e.getMessage();
-            throw new BuildException(msg, e, location);
-        }
-    }
-
-    /**
-     * Returns the CLASSPATH to be used when calling EJBc.  If no user CLASSPATH
-     * is specified, the System classpath is returned instead.
-     *
-     * @return Path The classpath to be used for EJBc.
-     */
-    private Path getClasspath() {
-        if (classpath == null) {
-            classpath = Path.systemClasspath;
-        }
-
-        return classpath;
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/InnerClassFilenameFilter.java b/src/main/org/apache/tools/ant/taskdefs/optional/ejb/InnerClassFilenameFilter.java
deleted file mode 100644
index 93c4619..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/InnerClassFilenameFilter.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000,2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.ejb;
-
-import java.io.FilenameFilter;
-import java.io.File;
-
-public class InnerClassFilenameFilter implements FilenameFilter {
-    private String baseClassName;
-
-    InnerClassFilenameFilter(String baseclass){
-        int extidx = baseclass.lastIndexOf(".class");
-        if (extidx == -1) {
-            extidx = baseclass.length() - 1;
-        }
-        baseClassName = baseclass.substring(0, extidx);
-    }
-
-    public boolean accept (File Dir, String filename){
-        if ((filename.lastIndexOf(".") != filename.lastIndexOf(".class")) 
-            || (filename.indexOf(baseClassName + "$") != 0)) {
-            return false;
-        }
-        return true;
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/JbossDeploymentTool.java b/src/main/org/apache/tools/ant/taskdefs/optional/ejb/JbossDeploymentTool.java
deleted file mode 100644
index 5d8eff7..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/JbossDeploymentTool.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.ejb;
-
-import java.io.File;
-import java.util.Hashtable;
-import org.apache.tools.ant.Project;
-
-/**
- * The deployment tool to add the jboss specific deployment descriptor to the ejb jar file.
- * Jboss only requires one additional file jboss.xml and does not require any additional
- * compilation.
- *
- * @author <a href="mailto:p.austin@talk21.com">Paul Austin</a>
- * @version 1.0
- * @see EjbJar#createJboss
- */
-public class JbossDeploymentTool extends GenericDeploymentTool {
-    protected static final String JBOSS_DD = "jboss.xml";
-    protected static final String JBOSS_CMPD = "jaws.xml";
-
-    /** Instance variable that stores the suffix for the jboss jarfile. */
-    private String jarSuffix = ".jar";
-
-    /**
-     * Add any vendor specific files which should be included in the
-     * EJB Jar.
-     */
-    protected void addVendorFiles(Hashtable ejbFiles, String ddPrefix) {
-        File jbossDD = new File(getConfig().descriptorDir, ddPrefix + JBOSS_DD);
-        if (jbossDD.exists()) {
-            ejbFiles.put(META_DIR + JBOSS_DD, jbossDD);
-        } else {
-            log("Unable to locate jboss deployment descriptor. It was expected to be in " + jbossDD.getPath(), Project.MSG_WARN);
-            return;
-        }
-        
-        File jbossCMPD = new File(getConfig().descriptorDir, ddPrefix + JBOSS_CMPD);
-        if (jbossCMPD.exists()) {
-            ejbFiles.put(META_DIR + JBOSS_CMPD, jbossCMPD);
-        }
-    }
-
-    /**
-     * Get the vendor specific name of the Jar that will be output. The modification date
-     * of this jar will be checked against the dependent bean classes.
-     */
-    File getVendorOutputJarFile(String baseName) {
-        return new File(getDestDir(), baseName + jarSuffix);
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/JonasDeploymentTool.java b/src/main/org/apache/tools/ant/taskdefs/optional/ejb/JonasDeploymentTool.java
deleted file mode 100644
index a7aaebc..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/JonasDeploymentTool.java
+++ /dev/null
@@ -1,645 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.ejb;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.types.Path;
-import org.apache.tools.ant.taskdefs.Java;
-import org.apache.tools.ant.util.FileUtils;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.Hashtable;
-
-/**
- * The deployment tool to add the jonas specific deployment descriptors to the
- * ejb jar file. JONAS only requires one additional file jonas-ejb-jar.xml.
- *
- * @author <a href="cmorvan@ingenosya.com">Cyrille Morvan</a> , <a
- *      href="http://www.ingenosya.com">Ingenosya France</a>
- * @version 1.0
- * @see EjbJar#createJonas
- */
-public class JonasDeploymentTool extends GenericDeploymentTool {
-
-    protected static final String JONAS_DD = "jonas-ejb-jar.xml";
-
-    protected static final String GENIC_CLASS =
-        "org.objectweb.jonas_ejb.tools.GenWholeIC";
-
-    protected static final String OLD_GENIC_CLASS =
-        "org.objectweb.jonas_ejb.tools.GenIC";
-
-    protected static final String DEFAULT_ORB = "RMI";
-
-    /** Instance variable that stores the suffix for the jonas jarfile. */
-    private String jarSuffix = ".jar";
-
-    /**
-     * Instance variable that stores the fully qualified classname of the
-     * JOnAS GenIC compiler.
-     */
-    private String genicClass;
-
-    private String additionalArgs = "";
-
-    /**
-     * Instance variable that determines do not delete intermediate generated
-     * source files
-     */
-    private boolean keepgenerated = false;
-
-    /** as websphere and WebLogic taskes */
-    private boolean keepGeneric = false;
-
-    /** Instance variable that determines the JOnAS Root directory */
-    private File jonasroot;
-
-    /** Instance variable that determines if we could -secpropag */
-    private boolean secpropag = false;
-
-    /** Instance variable that determines the ouput directory */
-    private File ouputdirectory;
-
-    /** Instance variable that determines the path to the compiler to use */
-    private String compiler;
-
-    /** Instance variable that determines if GenIC is verbose */
-    private boolean verbose;
-
-    /** Instance variable that determines the ORB to use (RMI, JEREMIE, DAVID) */
-    private String orb;
-
-    /** clean the working directory after work * */
-    private boolean cleanWorkDir = false;
-
-    private boolean noGENIC = false;
-
-
-    /** set the name of the GenIC compiler class.  */
-    public void setGenicClass(final String inGenicClass) {
-        genicClass = inGenicClass;
-    }
-
-
-    /**
-     * Set the ORB to construct classpath.
-     *
-     * @param inValue RMI, JEREMIE, DAVID,...
-     */
-    public void setOrb(final String inValue) {
-        orb = inValue;
-    }
-
-
-    /** The compiler (switch <code>-javac</code>) to use.  */
-    public void setCompiler(final String inCompiler) {
-        compiler = inCompiler;
-    }
-
-
-    /**
-     * Setter used to store the value of keepGeneric
-     *
-     * @param inValue a string, either 'true' or 'false'.
-     */
-    public void setKeepgeneric(boolean inValue) {
-        this.keepGeneric = inValue;
-    }
-
-
-    /**
-     * GenIC verbose or not
-     *
-     * @param inValue either 'true' or 'false'
-     */
-    public void setVerbose(final boolean inValue) {
-        verbose = inValue;
-    }
-
-
-    /**
-     * GenIC run or not.
-     *
-     * @param inValue run or not
-     */
-    public void setNoGENIC(final boolean inValue) {
-        noGENIC = inValue;
-    }
-
-
-    /**
-     * Sets whether -keepgenerated is passed to GenIC (that is, the .java
-     * source files are kept).
-     *
-     * @param inValue either 'true' or 'false'
-     */
-    public void setKeepgenerated(final boolean inValue) {
-        keepgenerated = inValue;
-    }
-
-
-    /**
-     * set the jonas root directory (-Dinstall.root=).
-     *
-     * @throws BuildException if the file doesn't exist.
-     */
-    public void setJonasroot(final File inValue) {
-        jonasroot = inValue;
-    }
-
-
-    /**
-     * Modify the RMI Skeleton and Stub to implement the implicit propagation
-     * of the transactionnal context and security context. For JOnAS 2.4 and
-     * next.
-     */
-    public void setSecpropag(final boolean inValue) {
-        secpropag = inValue;
-    }
-
-
-    /**
-     * set the output directory (-d ...). <br>
-     * It's the GenIC working directory. It's not the DestDir, which is the
-     * 'jar' destination directory.
-     *
-     * @param inValue a file
-     */
-    public void setOuputdir(final File inValue) {
-        ouputdirectory = inValue;
-    }
-
-
-    /**
-     * set the output directory (-d ...). Same as setOuputdir(). <br>
-     * But do not override setDestDir()
-     */
-    public void setWorkdir(final File inValue) {
-        setOuputdir(inValue);
-    }
-
-
-    /**
-     * Clean the specified Work dir after work.
-     *
-     * @param inValue true : clean ; false : not clean
-     */
-    public void setCleanworkdir(final boolean inValue) {
-        cleanWorkDir = inValue;
-    }
-
-
-    /**
-     * Setter used to store the suffix for the generated JOnAS jar file.
-     *
-     * @param inString the string to use as the suffix.
-     */
-    public void setSuffix(String inString) {
-        this.jarSuffix = inString;
-    }
-
-
-    /** sets some additional args to send to GenIC.  */
-    public void setArgs(final String inArgs) {
-        additionalArgs = inArgs;
-    }
-
-
-    /**
-     * Add any vendor specific files which should be included in the EJB Jar.
-     *
-     * @param aDdPrefix MyDirectories/MyEjb- or MyDirectories/
-     */
-    protected void addVendorFiles(final Hashtable someEjbFiles,
-                                        final String aDdPrefix) {
-        // Use Ant Naming convention
-        File aJonasDD
-             = new File(getConfig().descriptorDir, aDdPrefix + JONAS_DD);
-
-        if (aJonasDD.exists()) {
-            someEjbFiles.put(META_DIR + JONAS_DD, aJonasDD);
-        } else {
-            // try with JOnAS Naming convention
-            if (!addJonasVendorFiles(someEjbFiles, aDdPrefix)) {
-                log("Unable to locate JOnAS deployment descriptor. It was "
-                     + "expected to be in " + aJonasDD.getPath()
-                     + ". Alternatively, please use JOnAS naming convention.",
-                    Project.MSG_WARN);
-            }
-        }
-    }
-
-
-    /**
-     * try to add JOnAS specific file, using JOnAS naming convention. For
-     * example : jonas-Account.xml or jonas-ejb-jar.xml
-     *
-     * @param aDdPrefix MyDirectories/MyEjb- or MyDirectories/
-     * @return true if Ok
-     */
-    private boolean addJonasVendorFiles(final Hashtable someEjbFiles,
-                                              final String aDdPrefix) {
-        // replace \ by /, remove the last letter ( a dash - )
-        final String aCanonicalDD
-             = aDdPrefix.replace('\\', '/').substring(0, aDdPrefix.length() - 1);
-        final int index = aCanonicalDD.lastIndexOf('/') + 1;
-        String anEjbJarName = aCanonicalDD.substring(index);
-
-        if ("ejb".equals(anEjbJarName)) {
-            anEjbJarName = "ejb-jar";
-        }
-        final String aNewDdPrefix =
-            aDdPrefix.substring(0, index) + "jonas-" + anEjbJarName + ".xml";
-        File aConventionNamingJonasDD
-             = new File(getConfig().descriptorDir, aNewDdPrefix);
-
-        log("look for jonas specific file using jonas naming convention "
-             + aConventionNamingJonasDD,
-            Project.MSG_VERBOSE);
-
-        if (aConventionNamingJonasDD.exists()) {
-            someEjbFiles.put(META_DIR + JONAS_DD, aConventionNamingJonasDD);
-            return true;
-        } else {
-            return false;
-        }
-    }
-
-    // include javadoc
-    // Determine the JAR filename (without filename extension)
-    protected String getJarBaseName(String aDescriptorFileName) {
-        String aBaseName = null;
-        EjbJar.Config aConfig = super.getConfig();
-
-        if (aConfig.namingScheme.getValue().equals(EjbJar.NamingScheme.DESCRIPTOR)) {
-            // try to find JOnAS specific convention name
-            // ??/MyEJB.xml ( I will find later the ??/jonas-MyEJB.xml file )
-            if (aDescriptorFileName.indexOf(aConfig.baseNameTerminator) == -1) {
-                String aCanonicalDescriptor = aDescriptorFileName.replace('\\', '/');
-                int lastSeparatorIndex = aCanonicalDescriptor.lastIndexOf('/');
-                int endBaseName;
-
-                if (lastSeparatorIndex != -1) {
-                    endBaseName = aDescriptorFileName.indexOf(".xml", lastSeparatorIndex);
-                } else {
-                    endBaseName = aDescriptorFileName.indexOf(".xml");
-                }
-
-                if (endBaseName != -1) {
-                    aBaseName = aDescriptorFileName.substring(0, endBaseName);
-                }
-            }
-        }
-
-        if (aBaseName == null) {
-            // else get standard BaseName
-            aBaseName = super.getJarBaseName(aDescriptorFileName);
-        }
-        return aBaseName;
-    }
-
-
-    /**
-     * Method used to encapsulate the writing of the JAR file. Iterates over
-     * the filenames/java.io.Files in the Hashtable stored on the instance
-     * variable ejbFiles.
-     */
-    protected void writeJar(String baseName, File jarFile, Hashtable files,
-                            String publicId) throws BuildException {
-        // need to create a generic jar first.
-        File genericJarFile = super.getVendorOutputJarFile(baseName);
-
-        super.writeJar(baseName, genericJarFile, files, publicId);
-
-        // todo ? if (alwaysRebuild || isRebuildRequired(genericJarFile, jarFile))
-        buildJOnASJar(baseName, genericJarFile, jarFile, files, publicId);
-
-        if (!keepGeneric) {
-            log("deleting generic jar " + genericJarFile.toString(),
-                Project.MSG_VERBOSE);
-            genericJarFile.delete();
-        }
-    }
-
-
-    /**
-     * Helper method invoked by execute() for each JOnAS jar to be built.
-     * Encapsulates the logic of constructing a java task for calling GenIC
-     * and executing it.
-     *
-     * @param inBaseName the base name of the jar
-     * @param inSourceJar java.io.File representing the source (EJB1.1)
-     *      jarfile.
-     * @param someFiles list of files in the jar. Add all the new genererated
-     *      files.
-     * @param inPublicId the link to DTD (to rewrite JAR).
-     */
-    private void buildJOnASJar(final String inBaseName,
-                                     final File inSourceJar, final File inDestJar,
-                                     final Hashtable someFiles, String inPublicId) {
-        org.apache.tools.ant.taskdefs.Java aJavaTask = null;
-        String aGenIcClassName = genicClass;
-        boolean isOldGenIC = false;
-        boolean isTempDirectory = false;
-        File anOutputDirectoryFile = null;
-
-        // do not call GenIC
-        // only copy file
-        if (noGENIC) {
-            try {
-                FileUtils.newFileUtils().copyFile(inSourceJar, inDestJar);
-                return;
-            } catch (IOException anIOException) {
-                throw new BuildException("Unable to write EJB jar", anIOException);
-            }
-        }
-
-        // call GenIC
-        try {
-            aJavaTask = (Java) getTask().getProject().createTask("java");
-            aJavaTask.setTaskName("genic");
-            if (aGenIcClassName == null) {
-                aGenIcClassName = GENIC_CLASS;
-            } else if (OLD_GENIC_CLASS.equals(aGenIcClassName)) {
-                isOldGenIC = true;
-            }
-            // ClassName
-            aJavaTask.setClassname(aGenIcClassName);
-
-            // JVM Args
-            if (jonasroot == null) {
-                throw new BuildException("Error : set the jonasroot parameter");
-            } else if (!jonasroot.isDirectory()) {
-                log("jonasroot attribut '" + jonasroot + "' is not a valid directory",
-                    Project.MSG_ERR);
-            }
-            aJavaTask.createJvmarg().setValue("-Dinstall.root=" + jonasroot);
-
-            File aJavaPolicyFile = new File(jonasroot, "config/java.policy");
-
-            if (aJavaPolicyFile.exists()) {
-                aJavaTask.createJvmarg().setValue("-Djava.security.policy="
-                     + aJavaPolicyFile.toString());
-            }
-
-            // Find output directory
-            if (ouputdirectory == null) {
-                anOutputDirectoryFile = createTempDir();
-                isTempDirectory = true;
-                log("Use temporary output directory : " +
-                    anOutputDirectoryFile, Project.MSG_VERBOSE);
-            } else {
-                anOutputDirectoryFile = ouputdirectory;
-                log("Use temporary specific output directory : " +
-                    anOutputDirectoryFile, Project.MSG_VERBOSE);
-            }
-            aJavaTask.createArg().setValue("-d");
-            aJavaTask.createArg().setFile(anOutputDirectoryFile);
-
-            // Additionnal args
-            aJavaTask.createArg().setLine(additionalArgs);
-            // KeepGenerated
-            if (keepgenerated) {
-                aJavaTask.createArg().setValue("-keepgenerated");
-            }
-
-            // Verbose
-            if (verbose) {
-                aJavaTask.createArg().setValue("-verbose");
-            }
-
-            // -secpropag
-            if (secpropag) {
-                aJavaTask.createArg().setValue("-secpropag");
-            }
-
-            // The compiler
-            if (compiler == null) {
-                // try to use the compiler specified by build.compiler. Right now we are just going
-                // to allow Jikes
-                String aBuildCompiler = getTask().getProject().getProperty("build.compiler");
-
-                if ("jikes".equals(aBuildCompiler)) {
-                    aJavaTask.createArg().setValue("-javac");
-                    aJavaTask.createArg().setValue("jikes");
-                }
-            } else {
-                if (!"default".equals(compiler)) {
-                    aJavaTask.createArg().setValue("-javac");
-                    aJavaTask.createArg().setLine(compiler);
-                }
-            }
-
-            if (!isOldGenIC) {
-                // the add in jar features is buggy...
-                aJavaTask.createArg().setValue("-noaddinjar");
-            }
-
-            aJavaTask.createArg().setValue(inSourceJar.getPath());
-
-            // try to create the classpath for the correct ORB
-            Path aClasspath = getCombinedClasspath();
-
-            if (aClasspath == null) {
-                aClasspath = new Path(getTask().getProject());
-            }
-            if (orb != null) {
-                String aOrbJar = new File(jonasroot, "lib/" + orb + "_jonas.jar").toString();
-                String aConfigDir = new File(jonasroot, "config/").toString();
-                Path aJOnASOrbPath = new Path(aClasspath.getProject(),
-                    aOrbJar + File.pathSeparator + aConfigDir);
-
-                aClasspath.append(aJOnASOrbPath);
-            } else {
-                log("No ORB propertie setup (RMI, JEREMIE, DAVID).", Project.MSG_WARN);
-            }
-
-            // append the output directory
-            aClasspath.append(new Path(aClasspath.getProject(), anOutputDirectoryFile.getPath()));
-            aJavaTask.setClasspath(aClasspath);
-
-            aJavaTask.setFork(true);
-
-            log("Calling " + aGenIcClassName + " for " + inSourceJar.toString(),
-                Project.MSG_VERBOSE);
-
-            if (aJavaTask.executeJava() != 0) {
-                throw new BuildException("GenIC reported an error");
-            }
-            // Update the list of files.
-            addAllFiles(anOutputDirectoryFile, "", someFiles);
-
-            // rewrite the jar with the new files
-            super.writeJar(inBaseName, inDestJar, someFiles, inPublicId);
-        } catch (BuildException aBuildException) {
-            throw aBuildException;
-        } catch (Exception e) {
-            // Have to catch this because of the semantics of calling main()
-            String msg = "Exception while calling " + aGenIcClassName + ". Details: " + e.toString();
-
-            throw new BuildException(msg, e);
-        } finally {
-            if (isTempDirectory && anOutputDirectoryFile != null) {
-                dellAllFiles(anOutputDirectoryFile);
-            } else if (cleanWorkDir && anOutputDirectoryFile != null) {
-                dellAllFilesInside(anOutputDirectoryFile);
-            }
-        }
-    }
-
-
-    /**
-     * Get the vendor specific name of the Jar that will be output. The
-     * modification date of this jar will be checked against the dependent
-     * bean classes.
-     */
-    File getVendorOutputJarFile(final String aBaseName) {
-        return new File(getDestDir(), aBaseName + jarSuffix);
-    }
-
-
-    /**
-     * Create a free tempory directory for GenIC output.
-     *
-     * @return directory file
-     * @throws BuildException if impossible to find a tempory directory
-     */
-    private File createTempDir() {
-        String theTempDir = System.getProperty("java.io.tmpdir");
-        int anIndice = 0;
-        File aFile = null;
-        // try 50 times to find a free tempory directory
-        while (anIndice < 50 && aFile == null) {
-            aFile = new File(theTempDir, "GenicTemp" + anIndice);
-            if (aFile.exists()) {
-                anIndice++;
-                aFile = null;
-            }
-        }
-
-        if (aFile == null) {
-            // problem in temp directory
-            throw new BuildException("Impossible to find a free temp directory for output.");
-        } else {
-            aFile.mkdirs();
-            return (aFile);
-        }
-    }
-
-
-    /**
-     * add all files in anOutputDir + ' / ' + aRootDir to the HashTable
-     * someFiles.
-     *
-     * @param anOutputDir - start directory
-     * @param aCurrentDirOrFile - a sub-directory to scan or a file to add.
-     * @param someFiles - where to add the files
-     */
-    private void addAllFiles(final File anOutputDir, String aCurrentDirOrFile, Hashtable someFiles) {
-        File aFile = new File(anOutputDir, aCurrentDirOrFile);
-
-        if (aFile.isDirectory()) {
-            String aCurrentDir = "";
-
-            if (aCurrentDirOrFile.length() > 0) {
-                aCurrentDir = aCurrentDirOrFile + '/';
-            }
-            File theFiles[] = aFile.listFiles();
-
-            for (int i = 0; i < theFiles.length; i++) {
-                addAllFiles(anOutputDir, aCurrentDir + theFiles[i].getName(), someFiles);
-            }
-        } else {
-            // is a file
-            someFiles.put(aCurrentDirOrFile, aFile);
-        }
-    }
-
-
-    /**
-     * Delete all the files in a directory
-     *
-     * @param aFile file to delete recursivly
-     */
-    private void dellAllFiles(File aFile) {
-        if (aFile.isDirectory()) {
-            File someFiles[] = aFile.listFiles();
-
-            for (int i = 0; i < someFiles.length; i++) {
-                dellAllFiles(someFiles[i]);
-            }
-        }
-        aFile.delete();
-    }
-
-
-    /**
-     * Delete all the files in a directory, but don't delete the directory
-     *
-     * @param aFile file to delete recursivly
-     */
-    private void dellAllFilesInside(File aFile) {
-        if (aFile.isDirectory()) {
-            File someFiles[] = aFile.listFiles();
-
-            for (int i = 0; i < someFiles.length; i++) {
-                dellAllFiles(someFiles[i]);
-            }
-        }
-    }
-
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/WLRun.java b/src/main/org/apache/tools/ant/taskdefs/optional/ejb/WLRun.java
deleted file mode 100644
index b6fddc8..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/WLRun.java
+++ /dev/null
@@ -1,435 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights 
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.ejb;
-
-
-import org.apache.tools.ant.BuildException;
-
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.taskdefs.Java;
-import org.apache.tools.ant.types.Path;
-
-import java.io.File;
-
-/**
- * Execute a Weblogic server.
- 
- *
- * @author Conor MacNeill, Cortex ebusiness Pty Limited
- */
-public class WLRun extends Task {
-    protected static final String DEFAULT_WL51_POLICY_FILE = "weblogic.policy";
-    protected static final String DEFAULT_WL60_POLICY_FILE = "lib/weblogic.policy";
-    protected static final String DEFAULT_PROPERTIES_FILE = "weblogic.properties";
-
-    /**
-     * The classpath to be used when running the Java VM. It must contain the weblogic
-     * classes <b>and</b> the implementation classes of the home and remote interfaces.
-     */
-    private Path classpath;
-
-    /**
-     * The weblogic classpath to the be used when running weblogic.
-     */
-    private Path weblogicClasspath;
-
-    private String weblogicMainClass = "weblogic.Server";
-    
-    /**
-     * Addional arguments to pass to the JVM used to run weblogic
-     */
-    private String additionalArgs = "";
-    
-    /**
-     * The security policy to use when running the weblogic server
-     */
-    private String securityPolicy;
-    
-    /**
-     * The weblogic system home directory
-     */
-    private File weblogicSystemHome;
-
-    /**
-     * The weblogic domain
-     */
-    private String weblogicDomainName;
-    
-    /**
-     * The name of the weblogic server - used to select the server's directory in the 
-     * weblogic home directory.
-     */
-    private String weblogicSystemName = "myserver";
-    
-    /**
-     * The file containing the weblogic properties for this server.
-     */
-    private String weblogicPropertiesFile = null;
-
-    /**
-     * additional args to pass to the spawned jvm
-     */
-    private String additionalJvmArgs = "";
-
-    /**
-     * The location of the BEA Home under which this server is run.
-     * WL6 only
-     */
-    private File beaHome = null;
-
-    /**
-     * The management username
-     */
-    private String managementUsername = "system";
-    
-    /**
-     * The management password
-     */
-    private String managementPassword = null;
-
-    /**
-     * The provate key password - used for SSL
-     */
-    private String pkPassword = null;
-
-    /**
-     * Add the classpath for the user classes
-     */
-    public Path createClasspath() {
-        if (classpath == null) {
-            classpath = new Path(project);
-        }
-        return classpath.createPath();
-    }
-
-    /**
-     * Get the classpath to the weblogic classpaths
-     */
-    public Path createWLClasspath() {
-        if (weblogicClasspath == null) {
-            weblogicClasspath = new Path(project);
-        }
-        return weblogicClasspath.createPath();
-    }
-
-    /**
-     * Do the work.
-     *
-     * The work is actually done by creating a separate JVM to run a helper task. 
-     * This approach allows the classpath of the helper task to be set. Since the 
-     * weblogic tools require the class files of the project's home and remote 
-     * interfaces to be available in the classpath, this also avoids having to 
-     * start ant with the class path of the project it is building.
-     *
-     * @exception BuildException if someting goes wrong with the build
-     */
-    public void execute() throws BuildException {
-        if (weblogicSystemHome == null) {
-            throw new BuildException("weblogic home must be set");
-        }
-        if (!weblogicSystemHome.isDirectory()) {
-            throw new BuildException("weblogic home directory " + weblogicSystemHome.getPath() + 
-                                     " is not valid");
-        }
-
-        if (beaHome != null) {
-            executeWLS6();
-        } else {
-            executeWLS();
-        }
-    }
-    
-    private File findSecurityPolicyFile(String defaultSecurityPolicy) {
-        String securityPolicy = this.securityPolicy;
-        if (securityPolicy == null) {
-            securityPolicy = defaultSecurityPolicy;
-        }
-        File securityPolicyFile = new File(weblogicSystemHome, securityPolicy);
-        // If an explicit securityPolicy file was specified, it maybe an
-        // absolute path.  Use the project to resolve it.
-        if (this.securityPolicy != null && !securityPolicyFile.exists()) {
-            securityPolicyFile = project.resolveFile(securityPolicy);
-        }
-        // If we still can't find it, complain
-        if (!securityPolicyFile.exists()) {
-            throw new BuildException("Security policy " + securityPolicy +
-                                     " was not found.");
-        }
-        return securityPolicyFile;
-    }
-    
-    private void executeWLS6() {
-        File securityPolicyFile 
-            = findSecurityPolicyFile(DEFAULT_WL60_POLICY_FILE);
-        if (!beaHome.isDirectory()) {
-            throw new BuildException("BEA home " + beaHome.getPath() + 
-                                     " is not valid");
-        }
-        
-        File configFile = new File(weblogicSystemHome, "config/" 
-            + weblogicDomainName + "/config.xml");
-        if (!configFile.exists()) {
-            throw new BuildException("Server config file " + configFile 
-                + " not found.");
-        }
-        
-        if (managementPassword == null) {
-            throw new BuildException("You must supply a management password to start the server");
-        }
-
-        Java weblogicServer = (Java) project.createTask("java");
-        weblogicServer.setTaskName(getTaskName());
-        weblogicServer.setFork(true);
-        weblogicServer.setDir(weblogicSystemHome);
-        weblogicServer.setClassname(weblogicMainClass);
-
-        String jvmArgs = additionalJvmArgs;
-        
-        jvmArgs += " -Dweblogic.Domain=" + weblogicDomainName;
-        jvmArgs += " -Dweblogic.Name=" + weblogicSystemName;
-        jvmArgs += " -Dweblogic.system.home=" + weblogicSystemHome;
-
-        jvmArgs += " -Dbea.home=" + beaHome;
-        jvmArgs += " -Djava.security.policy==" + securityPolicyFile;
-        
-        jvmArgs += " -Dweblogic.management.username=" + managementUsername;
-        jvmArgs += " -Dweblogic.management.password=" + managementPassword;
-        if (pkPassword != null) {
-            jvmArgs += " -Dweblogic.pkpassword=" + pkPassword;
-        }
-        
-
-        weblogicServer.createJvmarg().setLine(jvmArgs);
-        weblogicServer.createArg().setLine(additionalArgs);
-        
-        if (classpath != null) {
-            weblogicServer.setClasspath(classpath);                         
-        }
-            
-        if (weblogicServer.executeJava() != 0) {                         
-            throw new BuildException("Execution of weblogic server failed");
-        }
-     }
-    
-    private void executeWLS() {
-        File securityPolicyFile 
-            = findSecurityPolicyFile(DEFAULT_WL51_POLICY_FILE);
-        File propertiesFile = null;
-        
-
-        if (weblogicPropertiesFile == null) {
-            weblogicPropertiesFile = DEFAULT_PROPERTIES_FILE;
-        }
-        propertiesFile = new File(weblogicSystemHome, weblogicPropertiesFile);
-        if (!propertiesFile.exists()) {
-            // OK, properties file may be absolute
-            propertiesFile = project.resolveFile(weblogicPropertiesFile);
-            if (!propertiesFile.exists()) {
-                throw new BuildException("Properties file " + weblogicPropertiesFile +
-                                         " not found in weblogic home " + weblogicSystemHome +
-                                         " or as absolute file");
-            }                                         
-        }
-
-        Java weblogicServer = (Java) project.createTask("java");
-        weblogicServer.setTaskName(getTaskName());
-        weblogicServer.setFork(true);
-        weblogicServer.setClassname(weblogicMainClass);
-
-        String jvmArgs = additionalJvmArgs;
-        
-        if (weblogicClasspath != null) {
-            jvmArgs += " -Dweblogic.class.path=" + weblogicClasspath;
-        }
-            
-        jvmArgs += " -Djava.security.manager -Djava.security.policy==" + securityPolicyFile;
-        jvmArgs += " -Dweblogic.system.home=" + weblogicSystemHome;
-        jvmArgs += " -Dweblogic.system.name=" + weblogicSystemName;
-        jvmArgs += " -Dweblogic.system.propertiesFile=" + weblogicPropertiesFile;
-
-        weblogicServer.createJvmarg().setLine(jvmArgs);
-        weblogicServer.createArg().setLine(additionalArgs);
-        
-        if (classpath != null) {
-            weblogicServer.setClasspath(classpath);                         
-        }
-        if (weblogicServer.executeJava() != 0) {                         
-            throw new BuildException("Execution of weblogic server failed");
-        }
-    }
-
-    
-    /**
-     * Set the classpath to be used for this execution.
-     *
-     * @param s the classpath to use when executing the weblogic server.
-     */
-    public void setClasspath(Path classpath) {
-        this.classpath = classpath;
-    }
-    
-    /**
-     * Set the weblogic classpath.
-     *
-     * The weblogic classpath is used by weblogic to support dynamic class loading.
-     *
-     * @param weblogicClasspath the weblogic classpath
-     */
-    public void setWlclasspath(Path weblogicClasspath) {
-        this.weblogicClasspath = weblogicClasspath;
-    }
-    
-    /**
-     * Set the security policy for this invocation of weblogic.
-     *
-     * @param securityPolicy the security policy to use.
-     */
-    public void setPolicy(String securityPolicy) {
-        this.securityPolicy = securityPolicy;
-    }
-    
-    /**
-     * The location where weblogic lives.
-     *
-     * @param weblogicHome the home directory of weblogic.
-     *
-     */
-    public void setHome(File weblogicHome) {
-        weblogicSystemHome = weblogicHome;
-    }
-
-    /**
-     * The location of the BEA Home.
-     *
-     * @param beaHome the BEA Home directory.
-     *
-     */
-    public void setBEAHome(File beaHome) {
-        this.beaHome = beaHome;
-    }
-    
-    /**
-     * Set the name of the server to run
-     *
-     * @param systemName the name of the server.
-     */
-    public void setName(String serverName) {
-        this.weblogicSystemName = serverName;
-    }
-    
-    /**
-     * Set the Domain to run in
-     *
-     * @param domain the domain
-     */
-    public void setDomain(String domain) {
-        this.weblogicDomainName = domain;
-    }
-    
-    /**
-     * Set the properties file to use.
-     *
-     * The location of the properties file is relative to the weblogi system home
-     *
-     * @param propertiesFilename the properties file name
-     */
-    public void setProperties(String propertiesFilename) {
-        this.weblogicPropertiesFile = propertiesFilename;
-    }
-
-    /**
-     * Set the additional arguments to pass to the weblogic JVM
-     * @param args the arguments to be passed to the JVM
-     */
-    public void setJvmargs(String args) {
-        this.additionalJvmArgs = args;
-    }
-    
-    /**
-     * Set the management username to run the server
-     *
-     * @param username the management username of the server.
-     */
-    public void setUsername(String username) {
-        this.managementUsername = username;
-    }
-    
-
-    /**
-     * Set the management password of the server
-     *
-     * @param password the management pasword of the server.
-     */
-    public void setPassword(String password) {
-        this.managementPassword = password;
-    }
-    
-    /**
-     * Set the private key password so the server can decrypt the SSL private key file.
-     *
-     * @param pkpassword the private key password,
-     */
-    public void setPKPassword(String pkpassword) {
-        this.pkPassword = pkpassword;
-    }
-    
-    public void setArgs(String args) {
-        additionalArgs = args;
-    }
-
-    
-    public void setWeblogicMainClass(String c) {
-        weblogicMainClass = c;
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/WLStop.java b/src/main/org/apache/tools/ant/taskdefs/optional/ejb/WLStop.java
deleted file mode 100644
index d31a236..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/WLStop.java
+++ /dev/null
@@ -1,204 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.ejb;
-
-
-import java.io.File;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.taskdefs.Java;
-import org.apache.tools.ant.types.Path;
-
-/**
- * Shutdown a Weblogic server.
-
- *
- * @author Conor MacNeill, Cortex ebusiness Pty Limited
- */
-public class WLStop extends Task {
-    /**
-     * The classpath to be used. It must contains the weblogic.Admin class.
-     */
-    private Path classpath;
-
-    /**
-     * The weblogic username to use to request the shutdown.
-     */
-    private String username;
-
-    /**
-     * The password to use to shutdown the weblogic server.
-     */
-    private String password;
-
-    /**
-     * The URL which the weblogic server is listening on.
-     */
-    private String serverURL;
-
-    /**
-     * The delay (in seconds) to wait before shutting down.
-     */
-    private int delay = 0;
-
-    /**
-     * The location of the BEA Home under which this server is run.
-     * WL6 only
-     */
-    private File beaHome = null;
-
-    /**
-     * Do the work.
-     *
-     * The work is actually done by creating a separate JVM to run the weblogic admin task
-     * This approach allows the classpath of the helper task to be set.
-     *
-     * @exception BuildException if someting goes wrong with the build
-     */
-    public void execute() throws BuildException {
-        if (username == null || password == null) {
-            throw new BuildException("weblogic username and password must both be set");
-        }
-
-        if (serverURL == null) {
-            throw new BuildException("The url of the weblogic server must be provided.");
-        }
-
-        Java weblogicAdmin = (Java) project.createTask("java");
-        weblogicAdmin.setFork(true);
-        weblogicAdmin.setClassname("weblogic.Admin");
-        String args;
-
-        if (beaHome == null) {
-            args = serverURL + " SHUTDOWN " + username + " " + password + " " + delay;
-        } else {
-            args = " -url " + serverURL +
-                    " -username " + username +
-                    " -password " + password +
-                    " SHUTDOWN " + " " + delay;
-        }
-
-        weblogicAdmin.createArg().setLine(args);
-        weblogicAdmin.setClasspath(classpath);
-        weblogicAdmin.execute();
-    }
-
-    /**
-     * Set the classpath to be used for this compilation.
-     *
-     * @param s the classpath to use when executing the weblogic admin task.
-     */
-    public void setClasspath(Path path) {
-        this.classpath = path;
-    }
-
-    /**
-     * Add the classpath for the user classes
-     */
-    public Path createClasspath() {
-        if (classpath == null) {
-            classpath = new Path(project);
-        }
-        return classpath.createPath();
-    }
-
-    /**
-     * Set the username to use to request shutdown of the server.
-     *
-     * @param s the username.
-     */
-    public void setUser(String s) {
-        this.username = s;
-    }
-
-    /**
-     * Set the password to use to request shutdown of the server.
-     *
-     * @param s the password.
-     */
-    public void setPassword(String s) {
-        this.password = s;
-    }
-
-    /**
-     * Set the URL to which the weblogic server is listening.
-     *
-     * @param s the url.
-     */
-    public void setUrl(String s) {
-        this.serverURL = s;
-    }
-
-
-    /**
-     * Set the delay (in seconds) before shutting down the server.
-     *
-     * @param s the selay.
-     */
-    public void setDelay(String s) {
-        delay = Integer.parseInt(s);
-    }
-
-    /**
-     * The location of the BEA Home.
-     *
-     * @param beaHome the BEA Home directory.
-     *
-     */
-    public void setBEAHome(File beaHome) {
-        this.beaHome = beaHome;
-    }
-
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/WeblogicDeploymentTool.java b/src/main/org/apache/tools/ant/taskdefs/optional/ejb/WeblogicDeploymentTool.java
deleted file mode 100644
index 5f388bc..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/WeblogicDeploymentTool.java
+++ /dev/null
@@ -1,788 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.ejb;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.InputStream;
-import java.util.jar.JarFile;
-import java.util.jar.JarOutputStream;
-import java.util.jar.JarEntry;
-import java.util.Hashtable;
-import java.util.Iterator;
-import java.util.Enumeration;
-
-import javax.xml.parsers.SAXParserFactory;
-import javax.xml.parsers.SAXParser;
-import org.xml.sax.InputSource;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.AntClassLoader;
-import org.apache.tools.ant.types.Path;
-import org.apache.tools.ant.taskdefs.Java;
-import org.apache.tools.ant.util.FileUtils;
-
-public class WeblogicDeploymentTool extends GenericDeploymentTool {
-    public static final String PUBLICID_EJB11
-         = "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 1.1//EN";
-    public static final String PUBLICID_EJB20
-         = "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN";
-    public static final String PUBLICID_WEBLOGIC_EJB510
-         = "-//BEA Systems, Inc.//DTD WebLogic 5.1.0 EJB//EN";
-    public static final String PUBLICID_WEBLOGIC_EJB600
-         = "-//BEA Systems, Inc.//DTD WebLogic 6.0.0 EJB//EN";
-    public static final String PUBLICID_WEBLOGIC_EJB700
-         = "-//BEA Systems, Inc.//DTD WebLogic 7.0.0 EJB//EN";
-
-    protected static final String DEFAULT_WL51_EJB11_DTD_LOCATION
-         = "/weblogic/ejb/deployment/xml/ejb-jar.dtd";
-    protected static final String DEFAULT_WL60_EJB11_DTD_LOCATION
-         = "/weblogic/ejb20/dd/xml/ejb11-jar.dtd";
-    protected static final String DEFAULT_WL60_EJB20_DTD_LOCATION
-         = "/weblogic/ejb20/dd/xml/ejb20-jar.dtd";
-
-    protected static final String DEFAULT_WL51_DTD_LOCATION
-         = "/weblogic/ejb/deployment/xml/weblogic-ejb-jar.dtd";
-    protected static final String DEFAULT_WL60_51_DTD_LOCATION
-         = "/weblogic/ejb20/dd/xml/weblogic510-ejb-jar.dtd";
-    protected static final String DEFAULT_WL60_DTD_LOCATION
-         = "/weblogic/ejb20/dd/xml/weblogic600-ejb-jar.dtd";
-    protected static final String DEFAULT_WL70_DTD_LOCATION
-         = "/weblogic/ejb20/dd/xml/weblogic700-ejb-jar.dtd";
-
-    protected static final String DEFAULT_COMPILER = "default";
-
-    protected static final String WL_DD = "weblogic-ejb-jar.xml";
-    protected static final String WL_CMP_DD = "weblogic-cmp-rdbms-jar.xml";
-
-    protected static final String COMPILER_EJB11 = "weblogic.ejbc";
-    protected static final String COMPILER_EJB20 = "weblogic.ejbc20";
-
-    /** Instance variable that stores the suffix for the weblogic jarfile. */
-    private String jarSuffix = ".jar";
-
-    /** Instance variable that stores the location of the weblogic DTD file. */
-    private String weblogicDTD;
-
-    /** Instance variable that stores the location of the ejb 1.1 DTD file. */
-    private String ejb11DTD;
-
-    /** Instance variable that determines whether generic ejb jars are kept. */
-    private boolean keepgenerated = false;
-
-    /**
-     * Instance variable that stores the fully qualified classname of the
-     * weblogic EJBC compiler
-     */
-    private String ejbcClass = null;
-
-    private String additionalArgs = "";
-
-    private boolean keepGeneric = false;
-
-    private String compiler = null;
-
-    private boolean alwaysRebuild = true;
-
-    /** controls whether ejbc is run on the generated jar */
-    private boolean noEJBC = false;
-
-    /** Indicates if the old CMP location convention is to be used.  */
-    private boolean newCMP = false;
-
-    /** The classpath to the weblogic classes. */
-    private Path wlClasspath = null;
-
-    /**
-     * The weblogic.StdoutSeverityLevel to use when running the JVM that
-     * executes ejbc. Set to 16 to avoid the warnings about EJB Home and
-     * Remotes being in the classpath
-     */
-    private Integer jvmDebugLevel = null;
-
-    /** File utilities instance for copying jars */
-    private FileUtils fileUtils = FileUtils.newFileUtils();
-
-
-    /** Get the classpath to the weblogic classpaths  */
-    public Path createWLClasspath() {
-        if (wlClasspath == null) {
-            wlClasspath = new Path(getTask().getProject());
-        }
-        return wlClasspath.createPath();
-    }
-
-
-    public void setWLClasspath(Path wlClasspath) {
-        this.wlClasspath = wlClasspath;
-    }
-
-
-    /** The compiler (switch <code>-compiler</code>) to use  */
-    public void setCompiler(String compiler) {
-        this.compiler = compiler;
-    }
-
-
-    /**
-     * Set the rebuild flag to false to only update changes in the jar rather
-     * than rerunning ejbc
-     */
-    public void setRebuild(boolean rebuild) {
-        this.alwaysRebuild = rebuild;
-    }
-
-
-    /**
-     * Sets the weblogic.StdoutSeverityLevel to use when running the JVM that
-     * executes ejbc. Set to 16 to avoid the warnings about EJB Home and
-     * Remotes being in the classpath
-     */
-    public void setJvmDebugLevel(Integer jvmDebugLevel) {
-        this.jvmDebugLevel = jvmDebugLevel;
-    }
-
-
-    public Integer getJvmDebugLevel() {
-        return jvmDebugLevel;
-    }
-
-
-
-    /**
-     * Setter used to store the suffix for the generated weblogic jar file.
-     *
-     * @param inString the string to use as the suffix.
-     */
-    public void setSuffix(String inString) {
-        this.jarSuffix = inString;
-    }
-
-
-    /**
-     * Setter used to store the value of keepGeneric
-     *
-     * @param inValue a string, either 'true' or 'false'.
-     */
-    public void setKeepgeneric(boolean inValue) {
-        this.keepGeneric = inValue;
-    }
-
-
-    /**
-     * Sets whether -keepgenerated is passed to ejbc (that is, the .java
-     * source files are kept).
-     *
-     * @param inValue either 'true' or 'false'
-     */
-    public void setKeepgenerated(String inValue) {
-        this.keepgenerated = Boolean.valueOf(inValue).booleanValue();
-    }
-
-
-    /** sets some additional args to send to ejbc.  */
-    public void setArgs(String args) {
-        this.additionalArgs = args;
-    }
-
-
-    /** Set the classname of the ejbc compiler  */
-    public void setEjbcClass(String ejbcClass) {
-        this.ejbcClass = ejbcClass;
-    }
-
-
-    /** Get the ejbc compiler class  */
-    public String getEjbcClass() {
-        return ejbcClass;
-    }
-
-
-    /**
-     * Setter used to store the location of the ejb-jar DTD. This can be a
-     * file on the system or a resource on the classpath.
-     *
-     * @param inString the string to use as the DTD location.
-     */
-    public void setWeblogicdtd(String inString) {
-        setEJBdtd(inString);
-    }
-
-
-    /**
-     * Setter used to store the location of the weblogic DTD. This can be a
-     * file on the system or a resource on the classpath.
-     *
-     * @param inString the string to use as the DTD location.
-     */
-    public void setWLdtd(String inString) {
-        this.weblogicDTD = inString;
-    }
-
-
-    /**
-     * Setter used to store the location of the Sun's Generic EJB DTD. This
-     * can be a file on the system or a resource on the classpath.
-     *
-     * @param inString the string to use as the DTD location.
-     */
-    public void setEJBdtd(String inString) {
-        this.ejb11DTD = inString;
-    }
-
-
-    /**
-     * Set the value of the oldCMP scheme. This is an antonym for newCMP
-     */
-    public void setOldCMP(boolean oldCMP) {
-        this.newCMP = !oldCMP;
-    }
-
-
-    /**
-     * Set the value of the newCMP scheme. The old CMP scheme locates the
-     * weblogic CMP descriptor based on the naming convention where the
-     * weblogic CMP file is expected to be named with the bean name as the
-     * prefix. Under this scheme the name of the CMP descriptor does not match
-     * the name actually used in the main weblogic EJB descriptor. Also,
-     * descriptors which contain multiple CMP references could not be used.
-     */
-    public void setNewCMP(boolean newCMP) {
-        this.newCMP = newCMP;
-    }
-
-
-    /** Do not EJBC the jar after it has been put together.  */
-    public void setNoEJBC(boolean noEJBC) {
-        this.noEJBC = noEJBC;
-    }
-
-
-    protected void registerKnownDTDs(DescriptorHandler handler) {
-        // register all the known DTDs
-        handler.registerDTD(PUBLICID_EJB11, DEFAULT_WL51_EJB11_DTD_LOCATION);
-        handler.registerDTD(PUBLICID_EJB11, DEFAULT_WL60_EJB11_DTD_LOCATION);
-        handler.registerDTD(PUBLICID_EJB11, ejb11DTD);
-        handler.registerDTD(PUBLICID_EJB20, DEFAULT_WL60_EJB20_DTD_LOCATION);
-    }
-
-
-    protected DescriptorHandler getWeblogicDescriptorHandler(final File srcDir) {
-        DescriptorHandler handler =
-            new DescriptorHandler(getTask(), srcDir) {
-                protected void processElement() {
-                    if (currentElement.equals("type-storage")) {
-                        // Get the filename of vendor specific descriptor
-                        String fileNameWithMETA = currentText;
-                        //trim the META_INF\ off of the file name
-                        String fileName
-                             = fileNameWithMETA.substring(META_DIR.length(),
-                            fileNameWithMETA.length());
-                        File descriptorFile = new File(srcDir, fileName);
-
-                        ejbFiles.put(fileNameWithMETA, descriptorFile);
-                    }
-                }
-            };
-
-        handler.registerDTD(PUBLICID_WEBLOGIC_EJB510, DEFAULT_WL51_DTD_LOCATION);
-        handler.registerDTD(PUBLICID_WEBLOGIC_EJB510, DEFAULT_WL60_51_DTD_LOCATION);
-        handler.registerDTD(PUBLICID_WEBLOGIC_EJB600, DEFAULT_WL60_DTD_LOCATION);
-        handler.registerDTD(PUBLICID_WEBLOGIC_EJB700, DEFAULT_WL70_DTD_LOCATION);
-        handler.registerDTD(PUBLICID_WEBLOGIC_EJB510, weblogicDTD);
-        handler.registerDTD(PUBLICID_WEBLOGIC_EJB600, weblogicDTD);
-
-        for (Iterator i = getConfig().dtdLocations.iterator(); i.hasNext();) {
-            EjbJar.DTDLocation dtdLocation = (EjbJar.DTDLocation) i.next();
-
-            handler.registerDTD(dtdLocation.getPublicId(), dtdLocation.getLocation());
-        }
-        return handler;
-    }
-
-
-    /**
-     * Add any vendor specific files which should be included in the EJB Jar.
-     */
-    protected void addVendorFiles(Hashtable ejbFiles, String ddPrefix) {
-        File weblogicDD = new File(getConfig().descriptorDir, ddPrefix + WL_DD);
-
-        if (weblogicDD.exists()) {
-            ejbFiles.put(META_DIR + WL_DD,
-                weblogicDD);
-        } else {
-            log("Unable to locate weblogic deployment descriptor. It was expected to be in " +
-                weblogicDD.getPath(), Project.MSG_WARN);
-            return;
-        }
-
-        if (!newCMP) {
-            log("The old method for locating CMP files has been DEPRECATED.", Project.MSG_VERBOSE);
-            log("Please adjust your weblogic descriptor and set newCMP=\"true\" " +
-                "to use the new CMP descriptor inclusion mechanism. ", Project.MSG_VERBOSE);
-            // The the weblogic cmp deployment descriptor
-            File weblogicCMPDD = new File(getConfig().descriptorDir, ddPrefix + WL_CMP_DD);
-
-            if (weblogicCMPDD.exists()) {
-                ejbFiles.put(META_DIR + WL_CMP_DD,
-                    weblogicCMPDD);
-            }
-        } else {
-            // now that we have the weblogic descriptor, we parse the file
-            // to find other descriptors needed to deploy the bean.
-            // this could be the weblogic-cmp-rdbms.xml or any other O/R
-            // mapping tool descriptors.
-            try {
-                File ejbDescriptor = (File) ejbFiles.get(META_DIR + EJB_DD);
-                SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
-
-                saxParserFactory.setValidating(true);
-
-                SAXParser saxParser = saxParserFactory.newSAXParser();
-                DescriptorHandler handler = getWeblogicDescriptorHandler(ejbDescriptor.getParentFile());
-
-                saxParser.parse(new InputSource
-                    (new FileInputStream(weblogicDD)),
-                        handler);
-
-                Hashtable ht = handler.getFiles();
-                Enumeration e = ht.keys();
-
-                while (e.hasMoreElements()) {
-                    String key = (String) e.nextElement();
-
-                    ejbFiles.put(key, ht.get(key));
-                }
-            } catch (Exception e) {
-                String msg = "Exception while adding Vendor specific files: " + e.toString();
-
-                throw new BuildException(msg, e);
-            }
-        }
-    }
-
-
-    /**
-     * Get the vendor specific name of the Jar that will be output. The
-     * modification date of this jar will be checked against the dependent
-     * bean classes.
-     */
-    File getVendorOutputJarFile(String baseName) {
-        return new File(getDestDir(), baseName + jarSuffix);
-    }
-
-
-    /**
-     * Helper method invoked by execute() for each WebLogic jar to be built.
-     * Encapsulates the logic of constructing a java task for calling
-     * weblogic.ejbc and executing it.
-     *
-     * @param sourceJar java.io.File representing the source (EJB1.1) jarfile.
-     * @param destJar java.io.File representing the destination, WebLogic
-     *      jarfile.
-     */
-    private void buildWeblogicJar(File sourceJar, File destJar, String publicId) {
-        org.apache.tools.ant.taskdefs.Java javaTask = null;
-
-        if (noEJBC) {
-            try {
-                fileUtils.copyFile(sourceJar, destJar);
-                if (!keepgenerated) {
-                    sourceJar.delete();
-                }
-                return;
-            } catch (IOException e) {
-                throw new BuildException("Unable to write EJB jar", e);
-            }
-        }
-
-        String ejbcClassName = ejbcClass;
-
-        try {
-            javaTask = (Java) getTask().getProject().createTask("java");
-            javaTask.setTaskName("ejbc");
-
-            if (getJvmDebugLevel() != null) {
-                javaTask.createJvmarg().setLine(" -Dweblogic.StdoutSeverityLevel=" + jvmDebugLevel);
-            }
-
-            if (ejbcClassName == null) {
-                // try to determine it from publicId
-                if (PUBLICID_EJB11.equals(publicId)) {
-                    ejbcClassName = COMPILER_EJB11;
-                } else if (PUBLICID_EJB20.equals(publicId)) {
-                    ejbcClassName = COMPILER_EJB20;
-                } else {
-                    log("Unrecognized publicId " + publicId + " - using EJB 1.1 compiler", Project.MSG_WARN);
-                    ejbcClassName = COMPILER_EJB11;
-                }
-            }
-
-            javaTask.setClassname(ejbcClassName);
-            javaTask.createArg().setLine(additionalArgs);
-            if (keepgenerated) {
-                javaTask.createArg().setValue("-keepgenerated");
-            }
-            if (compiler == null) {
-                // try to use the compiler specified by build.compiler. Right now we are just going
-                // to allow Jikes
-                String buildCompiler = getTask().getProject().getProperty("build.compiler");
-
-                if (buildCompiler != null && buildCompiler.equals("jikes")) {
-                    javaTask.createArg().setValue("-compiler");
-                    javaTask.createArg().setValue("jikes");
-                }
-            } else {
-                if (!compiler.equals(DEFAULT_COMPILER)) {
-                    javaTask.createArg().setValue("-compiler");
-                    javaTask.createArg().setLine(compiler);
-                }
-            }
-            
-            javaTask.createArg().setValue("-classpath");
-            javaTask.createArg().setPath(getCombinedClasspath());
-            
-            javaTask.createArg().setValue(sourceJar.getPath());
-            javaTask.createArg().setValue(destJar.getPath());
-
-            Path classpath = wlClasspath;
-
-            if (classpath == null) {
-                classpath = getCombinedClasspath();
-            }
-
-            javaTask.setFork(true);
-            if (classpath != null) {
-                javaTask.setClasspath(classpath);
-            }
-
-            log("Calling " + ejbcClassName + " for " + sourceJar.toString(),
-                Project.MSG_VERBOSE);
-
-            if (javaTask.executeJava() != 0) {
-                throw new BuildException("Ejbc reported an error");
-            }
-        } catch (Exception e) {
-            // Have to catch this because of the semantics of calling main()
-            String msg = "Exception while calling " + ejbcClassName + ". Details: " + e.toString();
-
-            throw new BuildException(msg, e);
-        }
-    }
-
-
-    /**
-     * Method used to encapsulate the writing of the JAR file. Iterates over
-     * the filenames/java.io.Files in the Hashtable stored on the instance
-     * variable ejbFiles.
-     */
-    protected void writeJar(String baseName, File jarFile, Hashtable files,
-                            String publicId) throws BuildException {
-        // need to create a generic jar first.
-        File genericJarFile = super.getVendorOutputJarFile(baseName);
-
-        super.writeJar(baseName, genericJarFile, files, publicId);
-
-        if (alwaysRebuild || isRebuildRequired(genericJarFile, jarFile)) {
-            buildWeblogicJar(genericJarFile, jarFile, publicId);
-        }
-        if (!keepGeneric) {
-            log("deleting generic jar " + genericJarFile.toString(),
-                Project.MSG_VERBOSE);
-            genericJarFile.delete();
-        }
-    }
-
-
-    /**
-     * Called to validate that the tool parameters have been configured.
-     */
-    public void validateConfigured() throws BuildException {
-        super.validateConfigured();
-    }
-
-
-    /**
-     * Helper method to check to see if a weblogic EBJ1.1 jar needs to be
-     * rebuilt using ejbc. Called from writeJar it sees if the "Bean" classes
-     * are the only thing that needs to be updated and either updates the Jar
-     * with the Bean classfile or returns true, saying that the whole weblogic
-     * jar needs to be regened with ejbc. This allows faster build times for
-     * working developers. <p>
-     *
-     * The way weblogic ejbc works is it creates wrappers for the publicly
-     * defined methods as they are exposed in the remote interface. If the
-     * actual bean changes without changing the the method signatures then
-     * only the bean classfile needs to be updated and the rest of the
-     * weblogic jar file can remain the same. If the Interfaces, ie. the
-     * method signatures change or if the xml deployment dicriptors changed,
-     * the whole jar needs to be rebuilt with ejbc. This is not strictly true
-     * for the xml files. If the JNDI name changes then the jar doesnt have to
-     * be rebuild, but if the resources references change then it does. At
-     * this point the weblogic jar gets rebuilt if the xml files change at
-     * all.
-     *
-     * @param genericJarFile java.io.File The generic jar file.
-     * @param weblogicJarFile java.io.File The weblogic jar file to check to
-     *      see if it needs to be rebuilt.
-     */
-    protected boolean isRebuildRequired(File genericJarFile, File weblogicJarFile) {
-        boolean rebuild = false;
-
-        JarFile genericJar = null;
-        JarFile wlJar = null;
-        File newWLJarFile = null;
-        JarOutputStream newJarStream = null;
-
-        try {
-            log("Checking if weblogic Jar needs to be rebuilt for jar " + weblogicJarFile.getName(),
-                Project.MSG_VERBOSE);
-            // Only go forward if the generic and the weblogic file both exist
-            if (genericJarFile.exists() && genericJarFile.isFile()
-                 && weblogicJarFile.exists() && weblogicJarFile.isFile()) {
-                //open jar files
-                genericJar = new JarFile(genericJarFile);
-                wlJar = new JarFile(weblogicJarFile);
-
-                Hashtable genericEntries = new Hashtable();
-                Hashtable wlEntries = new Hashtable();
-                Hashtable replaceEntries = new Hashtable();
-
-                //get the list of generic jar entries
-                for (Enumeration e = genericJar.entries(); e.hasMoreElements();) {
-                    JarEntry je = (JarEntry) e.nextElement();
-
-                    genericEntries.put(je.getName().replace('\\', '/'), je);
-                }
-                //get the list of weblogic jar entries
-                for (Enumeration e = wlJar.entries(); e.hasMoreElements();) {
-                    JarEntry je = (JarEntry) e.nextElement();
-
-                    wlEntries.put(je.getName(), je);
-                }
-
-                //Cycle Through generic and make sure its in weblogic
-                ClassLoader genericLoader 
-                    = getClassLoaderFromJar(genericJarFile);
-
-                for (Enumeration e = genericEntries.keys(); e.hasMoreElements();) {
-                    String filepath = (String) e.nextElement();
-
-                    if (wlEntries.containsKey(filepath)) {// File name/path match
-
-                        // Check files see if same
-                        JarEntry genericEntry = (JarEntry) genericEntries.get(filepath);
-                        JarEntry wlEntry = (JarEntry) wlEntries.get(filepath);
-
-                        if ((genericEntry.getCrc() != wlEntry.getCrc()) || // Crc's Match
-                        (genericEntry.getSize() != wlEntry.getSize())) {// Size Match
-
-                            if (genericEntry.getName().endsWith(".class")) {
-                                //File are different see if its an object or an interface
-                                String classname = genericEntry.getName().replace(File.separatorChar, '.');
-
-                                classname = classname.substring(0, classname.lastIndexOf(".class"));
-
-                                Class genclass = genericLoader.loadClass(classname);
-
-                                if (genclass.isInterface()) {
-                                    //Interface changed   rebuild jar.
-                                    log("Interface " + genclass.getName() + " has changed", Project.MSG_VERBOSE);
-                                    rebuild = true;
-                                    break;
-                                } else {
-                                    //Object class Changed   update it.
-                                    replaceEntries.put(filepath, genericEntry);
-                                }
-                            } else {
-                                // is it the manifest. If so ignore it
-                                if (!genericEntry.getName().equals("META-INF/MANIFEST.MF")) {
-                                    //File other then class changed   rebuild
-                                    log("Non class file " + genericEntry.getName() + " has changed", Project.MSG_VERBOSE);
-                                    rebuild = true;
-                                    break;
-                                }
-                            }
-                        }
-                    } else {// a file doesnt exist rebuild
-
-                        log("File " + filepath + " not present in weblogic jar", Project.MSG_VERBOSE);
-                        rebuild = true;
-                        break;
-                    }
-                }
-
-                if (!rebuild) {
-                    log("No rebuild needed - updating jar", Project.MSG_VERBOSE);
-                    newWLJarFile = new File(weblogicJarFile.getAbsolutePath() + ".temp");
-                    if (newWLJarFile.exists()) {
-                        newWLJarFile.delete();
-                    }
-
-                    newJarStream = new JarOutputStream(new FileOutputStream(newWLJarFile));
-                    newJarStream.setLevel(0);
-
-                    //Copy files from old weblogic jar
-                    for (Enumeration e = wlEntries.elements(); e.hasMoreElements();) {
-                        byte[] buffer = new byte[1024];
-                        int bytesRead;
-                        InputStream is;
-                        JarEntry je = (JarEntry) e.nextElement();
-
-                        if (je.getCompressedSize() == -1 ||
-                            je.getCompressedSize() == je.getSize()) {
-                            newJarStream.setLevel(0);
-                        } else {
-                            newJarStream.setLevel(9);
-                        }
-
-                        // Update with changed Bean class
-                        if (replaceEntries.containsKey(je.getName())) {
-                            log("Updating Bean class from generic Jar " + je.getName(), Project.MSG_VERBOSE);
-                            // Use the entry from the generic jar
-                            je = (JarEntry) replaceEntries.get(je.getName());
-                            is = genericJar.getInputStream(je);
-                        } else {//use fle from original weblogic jar
-
-                            is = wlJar.getInputStream(je);
-                        }
-                        newJarStream.putNextEntry(new JarEntry(je.getName()));
-
-                        while ((bytesRead = is.read(buffer)) != -1) {
-                            newJarStream.write(buffer, 0, bytesRead);
-                        }
-                        is.close();
-                    }
-                } else {
-                    log("Weblogic Jar rebuild needed due to changed "
-                         + "interface or XML", Project.MSG_VERBOSE);
-                }
-                
-                if (genericLoader instanceof AntClassLoader) {
-                    AntClassLoader loader = (AntClassLoader)genericLoader;
-                    loader.cleanup();
-                }
-            } else {
-                rebuild = true;
-            }
-        } catch (ClassNotFoundException cnfe) {
-            String cnfmsg = "ClassNotFoundException while processing ejb-jar file"
-                 + ". Details: "
-                 + cnfe.getMessage();
-
-            throw new BuildException(cnfmsg, cnfe);
-        } catch (IOException ioe) {
-            String msg = "IOException while processing ejb-jar file "
-                 + ". Details: "
-                 + ioe.getMessage();
-
-            throw new BuildException(msg, ioe);
-        } finally {
-            // need to close files and perhaps rename output
-            if (genericJar != null) {
-                try {
-                    genericJar.close();
-                } catch (IOException closeException) {
-                }
-            }
-
-            if (wlJar != null) {
-                try {
-                    wlJar.close();
-                } catch (IOException closeException) {
-                }
-            }
-
-            if (newJarStream != null) {
-                try {
-                    newJarStream.close();
-                } catch (IOException closeException) {
-                }
-
-                weblogicJarFile.delete();
-                newWLJarFile.renameTo(weblogicJarFile);
-                if (!weblogicJarFile.exists()) {
-                    rebuild = true;
-                }
-            }
-        }
-
-        return rebuild;
-    }
-
-
-    /**
-     * Helper method invoked by isRebuildRequired to get a ClassLoader for a
-     * Jar File passed to it.
-     *
-     * @param classjar java.io.File representing jar file to get classes from.
-     */
-    protected ClassLoader getClassLoaderFromJar(File classjar) throws IOException {
-        Path lookupPath = new Path(getTask().getProject());
-
-        lookupPath.setLocation(classjar);
-
-        Path classpath = getCombinedClasspath();
-
-        if (classpath != null) {
-            lookupPath.append(classpath);
-        }
-
-        return new AntClassLoader(getTask().getProject(), lookupPath);
-    }
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/WeblogicTOPLinkDeploymentTool.java b/src/main/org/apache/tools/ant/taskdefs/optional/ejb/WeblogicTOPLinkDeploymentTool.java
deleted file mode 100644
index 87ece8c..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/WeblogicTOPLinkDeploymentTool.java
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.ejb;
-
-import java.io.File;
-import java.util.Hashtable;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-
-public class WeblogicTOPLinkDeploymentTool extends WeblogicDeploymentTool {
-
-    private static final String TL_DTD_LOC = "http://www.objectpeople.com/tlwl/dtd/toplink-cmp_2_5_1.dtd";
-
-    private String toplinkDescriptor;
-    private String toplinkDTD;
-    
-    /**
-     * Setter used to store the name of the toplink descriptor.
-     * @param inString the string to use as the descriptor name.
-     */
-    public void setToplinkdescriptor(String inString) {
-        this.toplinkDescriptor = inString;
-    }
-
-    /**
-     * Setter used to store the location of the toplink DTD file.
-     * This is expected to be an URL (file or otherwise). If running this on NT using a file URL, the safest 
-     * thing would be to not use a drive spec in the URL and make sure the file resides on the drive that 
-     * ANT is running from.  This will keep the setting in the build XML platform independent.
-     * @param inString the string to use as the DTD location.
-     */
-    public void setToplinkdtd(String inString) {
-        this.toplinkDTD = inString;
-    }
-
-    protected DescriptorHandler getDescriptorHandler(File srcDir) {
-        DescriptorHandler handler = super.getDescriptorHandler(srcDir);
-        if (toplinkDTD != null) {
-            handler.registerDTD("-//The Object People, Inc.//DTD TOPLink for WebLogic CMP 2.5.1//EN",
-                                toplinkDTD);
-        } else {
-            handler.registerDTD("-//The Object People, Inc.//DTD TOPLink for WebLogic CMP 2.5.1//EN",
-                                TL_DTD_LOC);
-        }
-        return handler;                                    
-    }
-
-    /**
-     * Add any vendor specific files which should be included in the 
-     * EJB Jar.
-     */
-    protected void addVendorFiles(Hashtable ejbFiles, String ddPrefix) {
-        super.addVendorFiles(ejbFiles, ddPrefix);
-        // Then the toplink deployment descriptor
-
-        // Setup a naming standard here?.
-
-
-        File toplinkDD = new File(getConfig().descriptorDir, ddPrefix + toplinkDescriptor);
-        
-        if (toplinkDD.exists()) {
-            ejbFiles.put(META_DIR + toplinkDescriptor,
-                         toplinkDD);
-        } else {
-            log("Unable to locate toplink deployment descriptor. It was expected to be in " + 
-                toplinkDD.getPath(), Project.MSG_WARN);
-        }                
-    }
-    
-    /**
-     * Called to validate that the tool parameters have been configured.
-     *
-     */
-    public void validateConfigured() throws BuildException {
-        super.validateConfigured();
-        if (toplinkDescriptor == null) {
-            throw new BuildException("The toplinkdescriptor attribute must " 
-                + "be specified");
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/WebsphereDeploymentTool.java b/src/main/org/apache/tools/ant/taskdefs/optional/ejb/WebsphereDeploymentTool.java
deleted file mode 100644
index 1d19876..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/WebsphereDeploymentTool.java
+++ /dev/null
@@ -1,896 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.ejb;
-
-import java.io.File;
-
-import java.io.IOException;
-
-import java.io.FileOutputStream;
-
-import java.io.InputStream;
-import java.util.jar.JarFile;
-
-import java.util.jar.JarOutputStream;
-
-import java.util.jar.JarEntry;
-import java.util.Iterator;
-
-import java.util.Hashtable;
-
-import java.util.Enumeration;
-
-
-import org.apache.tools.ant.Project;
-
-import org.apache.tools.ant.BuildException;
-
-import org.apache.tools.ant.AntClassLoader;
-import org.apache.tools.ant.taskdefs.Java;
-import org.apache.tools.ant.types.EnumeratedAttribute;
-
-import org.apache.tools.ant.types.Path;
-
-import org.apache.tools.ant.types.Environment;
-
-import org.apache.tools.ant.types.Commandline;
-
-/**
- * Websphere deployment tool that augments the ejbjar task.
- *
- * @author <a href="mailto:msahu@interkeel.com">Maneesh Sahu</a>
- */
-public class WebsphereDeploymentTool extends GenericDeploymentTool {
-    /**
-     * Enumerated attribute with the values for the database vendor types
-     *
-     * @author Conor MacNeill
-     */
-    public static class DBVendor extends EnumeratedAttribute {
-        public String[] getValues() {
-            return new String[]{
-                "SQL92", "SQL99", "DB2UDBWIN_V71", "DB2UDBOS390_V6", "DB2UDBAS400_V4R5",
-                "ORACLE_V8", "INFORMIX_V92", "SYBASE_V1192", "MSSQLSERVER_V7", "MYSQL_V323"
-                };
-        }
-    }
-
-
-    public static final String PUBLICID_EJB11
-         = "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 1.1//EN";
-    public static final String PUBLICID_EJB20
-         = "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN";
-    protected static final String SCHEMA_DIR = "Schema/";
-
-    protected static final String WAS_EXT = "ibm-ejb-jar-ext.xmi";
-    protected static final String WAS_BND = "ibm-ejb-jar-bnd.xmi";
-    protected static final String WAS_CMP_MAP = "Map.mapxmi";
-    protected static final String WAS_CMP_SCHEMA = "Schema.dbxmi";
-
-    /** Instance variable that stores the suffix for the websphere jarfile. */
-    private String jarSuffix = ".jar";
-
-    /** Instance variable that stores the location of the ejb 1.1 DTD file. */
-    private String ejb11DTD;
-
-    /** Instance variable that determines whether generic ejb jars are kept. */
-
-    private boolean keepgenerated = false;
-
-    private String additionalArgs = "";
-
-    private boolean keepGeneric = false;
-
-    private String compiler = null;
-
-    private boolean alwaysRebuild = true;
-
-    private boolean ejbdeploy = true;
-
-    /** Indicates if the old CMP location convention is to be used. */
-    private boolean newCMP = false;
-
-    /** The classpath to the websphere classes. */
-    private Path wasClasspath = null;
-
-    /** The DB Vendor name, the EJB is persisted against */
-    private String dbVendor;
-
-    /** The name of the database to create. (For top-down mapping only) */
-    private String dbName;
-
-    /** The name of the schema to create. (For top-down mappings only) */
-    private String dbSchema;
-
-    /** true - Only generate the deployment code, do not run RMIC or Javac */
-    private boolean codegen;
-
-    /** true - Only output error messages, suppress informational messages */
-    private boolean quiet = true;
-
-    /** true - Disable the validation steps */
-    private boolean novalidate;
-
-    /** true - Disable warning and informational messages */
-    private boolean nowarn;
-
-    /** true - Disable informational messages */
-    private boolean noinform;
-
-    /** true - Enable internal tracing */
-    private boolean trace;
-
-    /** Additional options for RMIC */
-    private String rmicOptions;
-
-    /** true- Use the WebSphere 3.5 compatible mapping rules */
-    private boolean use35MappingRules;
-
-    /** the scratchdir for the ejbdeploy operation */
-    private String tempdir = "_ejbdeploy_temp";
-
-
-    /** Get the classpath to the websphere classpaths */
-    public Path createWASClasspath() {
-        if (wasClasspath == null) {
-            wasClasspath = new Path(getTask().getProject());
-        }
-        return wasClasspath.createPath();
-    }
-
-
-    public void setWASClasspath(Path wasClasspath) {
-        this.wasClasspath = wasClasspath;
-    }
-
-
-    /** Sets the DB Vendor for the Entity Bean mapping */
-    public void setDbvendor(DBVendor dbvendor) {
-        this.dbVendor = dbvendor.getValue();
-    }
-
-
-    /**
-     * Sets the name of the Database to create
-     *
-     * @param String
-     */
-    public void setDbname(String dbName) {
-        this.dbName = dbName;
-    }
-
-
-    /**
-     * Sets the name of the schema to create
-     *
-     * @param String
-     */
-    public void setDbschema(String dbSchema) {
-        this.dbSchema = dbSchema;
-    }
-
-
-    /**
-     * (true) Only generate the deployment code, do not run RMIC or Javac
-     *
-     * @param boolean
-     */
-    public void setCodegen(boolean codegen) {
-        this.codegen = codegen;
-    }
-
-
-    /**
-     * (true) Only output error messages, suppress informational messages
-     *
-     * @param boolean
-     */
-    public void setQuiet(boolean quiet) {
-        this.quiet = quiet;
-    }
-
-
-    /**
-     * (true) Disable the validation steps
-     *
-     * @param boolean
-     */
-    public void setNovalidate(boolean novalidate) {
-        this.novalidate = novalidate;
-    }
-
-
-    /**
-     * (true) Disable warning and informational messages
-     *
-     * @param boolean
-     */
-    public void setNowarn(boolean nowarn) {
-        this.nowarn = nowarn;
-    }
-
-
-    /**
-     * (true) Disable informational messages
-     *
-     * @param boolean
-     */
-    public void setNoinform(boolean noinfom) {
-        this.noinform = noinform;
-    }
-
-
-    /**
-     * (true) Enable internal tracing
-     *
-     * @param boolean
-     */
-    public void setTrace(boolean trace) {
-        this.trace = trace;
-    }
-
-
-    /**
-     * (true) Use the WebSphere 3.5 compatible mapping rules
-     *
-     * @param boolean
-     */
-    public void setUse35(boolean attr) {
-        use35MappingRules = attr;
-    }
-
-
-    /** The compiler (switch <code>-compiler</code>) to use */
-    public void setCompiler(String compiler) {
-        this.compiler = compiler;
-    }
-
-
-    /**
-     * Set the rebuild flag to false to only update changes in the jar rather
-     * than rerunning ejbdeploy
-     */
-    public void setRebuild(boolean rebuild) {
-        this.alwaysRebuild = rebuild;
-    }
-
-
-    /**
-     * Setter used to store the suffix for the generated websphere jar file.
-     *
-     * @param inString the string to use as the suffix.
-     */
-    public void setSuffix(String inString) {
-        this.jarSuffix = inString;
-    }
-
-
-    /**
-     * Setter used to store the value of keepGeneric
-     *
-     * @param inValue a string, either 'true' or 'false'.
-     */
-    public void setKeepgeneric(boolean inValue) {
-        this.keepGeneric = inValue;
-    }
-
-
-    /**
-     * Sets whether -keepgenerated is passed to ejbdeploy (that is, the .java
-     * source files are kept).
-     *
-     * @param inValue either 'true' or 'false'
-     */
-    public void setKeepgenerated(String inValue) {
-        this.keepgenerated = Boolean.valueOf(inValue).booleanValue();
-    }
-
-
-    /**
-     * Decide, wether ejbdeploy should be called or not
-     *
-     * @param ejbdeploy
-     */
-    public void setEjbdeploy(boolean ejbdeploy) {
-        this.ejbdeploy = ejbdeploy;
-    }
-
-
-    /** sets some additional args to send to ejbdeploy. */
-    public void setArgs(String args) {
-        this.additionalArgs = args;
-    }
-
-
-    /**
-     * Setter used to store the location of the Sun's Generic EJB DTD. This
-     * can be a file on the system or a resource on the classpath.
-     *
-     * @param inString the string to use as the DTD location.
-     */
-    public void setEJBdtd(String inString) {
-        this.ejb11DTD = inString;
-    }
-
-
-    /**
-     * Set the value of the oldCMP scheme. This is an antonym for newCMP
-     */
-    public void setOldCMP(boolean oldCMP) {
-        this.newCMP = !oldCMP;
-    }
-
-
-    /**
-     * Set the value of the newCMP scheme. The old CMP scheme locates the
-     * websphere CMP descriptor based on the naming convention where the
-     * websphere CMP file is expected to be named with the bean name as the
-     * prefix. Under this scheme the name of the CMP descriptor does not match
-     * the name actually used in the main websphere EJB descriptor. Also,
-     * descriptors which contain multiple CMP references could not be used.
-     */
-    public void setNewCMP(boolean newCMP) {
-        this.newCMP = newCMP;
-    }
-
-
-    /** Sets the temporary directory for the ejbdeploy task */
-    public void setTempdir(String tempdir) {
-        this.tempdir = tempdir;
-    }
-
-
-    protected DescriptorHandler getDescriptorHandler(File srcDir) {
-        DescriptorHandler handler = new DescriptorHandler(getTask(), srcDir);
-        // register all the DTDs, both the ones that are known and
-        // any supplied by the user
-        handler.registerDTD(PUBLICID_EJB11, ejb11DTD);
-
-        for (Iterator i = getConfig().dtdLocations.iterator(); i.hasNext();) {
-            EjbJar.DTDLocation dtdLocation = (EjbJar.DTDLocation) i.next();
-
-            handler.registerDTD(dtdLocation.getPublicId(), dtdLocation.getLocation());
-        }
-
-        return handler;
-    }
-
-
-    protected DescriptorHandler getWebsphereDescriptorHandler(final File srcDir) {
-        DescriptorHandler handler =
-            new DescriptorHandler(getTask(), srcDir) {
-                protected void processElement() {
-                }
-            };
-
-        for (Iterator i = getConfig().dtdLocations.iterator(); i.hasNext();) {
-            EjbJar.DTDLocation dtdLocation = (EjbJar.DTDLocation) i.next();
-
-            handler.registerDTD(dtdLocation.getPublicId(), dtdLocation.getLocation());
-        }
-        return handler;
-    }
-
-
-    /**
-     * Add any vendor specific files which should be included in the EJB Jar.
-     */
-    protected void addVendorFiles(Hashtable ejbFiles, String baseName) {
-
-        String ddPrefix = (usingBaseJarName() ? "" : baseName);
-        String dbPrefix = (dbVendor == null) ? "" : dbVendor + "-";
-
-        // Get the Extensions document
-        File websphereEXT = new File(getConfig().descriptorDir, ddPrefix + WAS_EXT);
-
-        if (websphereEXT.exists()) {
-            ejbFiles.put(META_DIR + WAS_EXT,
-                websphereEXT);
-        } else {
-            log("Unable to locate websphere extensions. It was expected to be in " +
-                websphereEXT.getPath(), Project.MSG_VERBOSE);
-        }
-
-        File websphereBND = new File(getConfig().descriptorDir, ddPrefix + WAS_BND);
-
-        if (websphereBND.exists()) {
-            ejbFiles.put(META_DIR + WAS_BND,
-                websphereBND);
-        } else {
-            log("Unable to locate websphere bindings. It was expected to be in " +
-                websphereBND.getPath(), Project.MSG_VERBOSE);
-        }
-
-        if (!newCMP) {
-            log("The old method for locating CMP files has been DEPRECATED.", Project.MSG_VERBOSE);
-            log("Please adjust your websphere descriptor and set newCMP=\"true\" " +
-                "to use the new CMP descriptor inclusion mechanism. ", Project.MSG_VERBOSE);
-        } else {
-            // We attempt to put in the MAP and Schema files of CMP beans
-            try {
-                // Add the Map file
-                File websphereMAP = new File(getConfig().descriptorDir,
-                    ddPrefix + dbPrefix + WAS_CMP_MAP);
-
-                if (websphereMAP.exists()) {
-                    ejbFiles.put(META_DIR + WAS_CMP_MAP,
-                        websphereMAP);
-                } else {
-                    log("Unable to locate the websphere Map: " +
-                        websphereMAP.getPath(), Project.MSG_VERBOSE);
-                }
-
-                File websphereSchema = new File(getConfig().descriptorDir,
-                    ddPrefix + dbPrefix + WAS_CMP_SCHEMA);
-
-                if (websphereSchema.exists()) {
-                    ejbFiles.put(META_DIR + SCHEMA_DIR + WAS_CMP_SCHEMA,
-                        websphereSchema);
-                } else {
-                    log("Unable to locate the websphere Schema: " +
-                        websphereSchema.getPath(), Project.MSG_VERBOSE);
-                }
-                // Theres nothing else to see here...keep moving sonny
-            } catch (Exception e) {
-                String msg = "Exception while adding Vendor specific files: " +
-                    e.toString();
-
-                throw new BuildException(msg, e);
-            }
-        }
-    }
-
-
-    /**
-     * Get the vendor specific name of the Jar that will be output. The
-     * modification date of this jar will be checked against the dependent
-     * bean classes.
-     */
-    File getVendorOutputJarFile(String baseName) {
-        return new File(getDestDir(), baseName + jarSuffix);
-    }
-
-
-    /**
-     * Gets the options for the EJB Deploy operation
-     *
-     * @return String
-     */
-    protected String getOptions() {
-        // Set the options
-        StringBuffer options = new StringBuffer();
-
-        if (dbVendor != null) {
-            options.append(" -dbvendor ").append(dbVendor);
-        }
-        if (dbName != null) {
-            options.append(" -dbname \"").append(dbName).append("\"");
-        }
-
-        if (dbSchema != null) {
-            options.append(" -dbschema \"").append(dbSchema).append("\"");
-        }
-
-        if (codegen) {
-            options.append(" -codegen");
-        }
-
-        if (quiet) {
-            options.append(" -quiet");
-        }
-
-        if (novalidate) {
-            options.append(" -novalidate");
-        }
-
-        if (nowarn) {
-            options.append(" -nowarn");
-        }
-
-        if (noinform) {
-            options.append(" -noinform");
-        }
-
-        if (trace) {
-            options.append(" -trace");
-        }
-
-        if (use35MappingRules) {
-            options.append(" -35");
-        }
-
-        if (rmicOptions != null) {
-            options.append(" -rmic \"").append(rmicOptions).append("\"");
-        }
-
-        return options.toString();
-    }// end getOptions
-
-
-    /**
-     * Helper method invoked by execute() for each websphere jar to be built.
-     * Encapsulates the logic of constructing a java task for calling
-     * websphere.ejbdeploy and executing it.
-     *
-     * @param sourceJar java.io.File representing the source (EJB1.1) jarfile.
-     * @param destJar java.io.File representing the destination, websphere
-     *      jarfile.
-     */
-    private void buildWebsphereJar(File sourceJar, File destJar) {
-        try {
-            if (ejbdeploy) {
-                String args =
-                    " " + sourceJar.getPath() +
-                    " " + tempdir +
-                    " " + destJar.getPath() +
-                    " " + getOptions();
-
-                if (getCombinedClasspath() != null && getCombinedClasspath().toString().length() > 0) {
-                    args += " -cp " + getCombinedClasspath();
-                }
-
-                // Why do my ""'s get stripped away???
-                log("EJB Deploy Options: " + args, Project.MSG_VERBOSE);
-
-                Java javaTask = (Java) getTask().getProject().createTask("java");
-                // Set the JvmArgs
-                javaTask.createJvmarg().setValue("-Xms64m");
-                javaTask.createJvmarg().setValue("-Xmx128m");
-
-                // Set the Environment variable
-                Environment.Variable var = new Environment.Variable();
-
-                var.setKey("websphere.lib.dir");
-                var.setValue(getTask().getProject().getProperty("websphere.home") + "/lib");
-                javaTask.addSysproperty(var);
-
-                // Set the working directory
-                javaTask.setDir(new File(getTask().getProject().getProperty("websphere.home")));
-
-                // Set the Java class name
-                javaTask.setTaskName("ejbdeploy");
-                javaTask.setClassname("com.ibm.etools.ejbdeploy.EJBDeploy");
-
-                Commandline.Argument arguments = javaTask.createArg();
-
-                arguments.setLine(args);
-
-                Path classpath = wasClasspath;
-
-                if (classpath == null) {
-                    classpath = getCombinedClasspath();
-                }
-
-                if (classpath != null) {
-                    javaTask.setClasspath(classpath);
-                    javaTask.setFork(true);
-                } else {
-                    javaTask.setFork(true);
-                }
-
-                log("Calling websphere.ejbdeploy for " + sourceJar.toString(),
-                    Project.MSG_VERBOSE);
-
-                javaTask.execute();
-            }
-        } catch (Exception e) {
-            // Have to catch this because of the semantics of calling main()
-            String msg = "Exception while calling ejbdeploy. Details: " + e.toString();
-
-            throw new BuildException(msg, e);
-        }
-    }
-
-
-    /**
-     * Method used to encapsulate the writing of the JAR file. Iterates over
-     * the filenames/java.io.Files in the Hashtable stored on the instance
-     * variable ejbFiles.
-     */
-    protected void writeJar(String baseName, File jarFile, Hashtable files, String publicId)
-         throws BuildException {
-        if (ejbdeploy) {
-            // create the -generic.jar, if required
-            File genericJarFile = super.getVendorOutputJarFile(baseName);
-
-            super.writeJar(baseName, genericJarFile, files, publicId);
-
-            // create the output .jar, if required
-            if (alwaysRebuild || isRebuildRequired(genericJarFile, jarFile)) {
-                buildWebsphereJar(genericJarFile, jarFile);
-            }
-            if (!keepGeneric) {
-                log("deleting generic jar " + genericJarFile.toString(),
-                    Project.MSG_VERBOSE);
-                genericJarFile.delete();
-            }
-        } else {
-            // create the "undeployed" output .jar, if required
-            super.writeJar(baseName, jarFile, files, publicId);
-        }
-    }
-
-
-    /**
-     * Called to validate that the tool parameters have been configured.
-     */
-    public void validateConfigured() throws BuildException {
-        super.validateConfigured();
-    }
-
-
-    /**
-     * Helper method to check to see if a websphere EBJ1.1 jar needs to be
-     * rebuilt using ejbdeploy. Called from writeJar it sees if the "Bean"
-     * classes are the only thing that needs to be updated and either updates
-     * the Jar with the Bean classfile or returns true, saying that the whole
-     * websphere jar needs to be regened with ejbdeploy. This allows faster
-     * build times for working developers. <p>
-     *
-     * The way websphere ejbdeploy works is it creates wrappers for the
-     * publicly defined methods as they are exposed in the remote interface.
-     * If the actual bean changes without changing the the method signatures
-     * then only the bean classfile needs to be updated and the rest of the
-     * websphere jar file can remain the same. If the Interfaces, ie. the
-     * method signatures change or if the xml deployment dicriptors changed,
-     * the whole jar needs to be rebuilt with ejbdeploy. This is not strictly
-     * true for the xml files. If the JNDI name changes then the jar doesnt
-     * have to be rebuild, but if the resources references change then it
-     * does. At this point the websphere jar gets rebuilt if the xml files
-     * change at all.
-     *
-     * @param genericJarFile java.io.File The generic jar file.
-     * @param websphereJarFile java.io.File The websphere jar file to check to
-     *      see if it needs to be rebuilt.
-     */
-    protected boolean isRebuildRequired(File genericJarFile, File websphereJarFile) {
-        boolean rebuild = false;
-
-        JarFile genericJar = null;
-        JarFile wasJar = null;
-        File newwasJarFile = null;
-        JarOutputStream newJarStream = null;
-
-        try {
-            log("Checking if websphere Jar needs to be rebuilt for jar " + websphereJarFile.getName(),
-                Project.MSG_VERBOSE);
-            // Only go forward if the generic and the websphere file both exist
-            if (genericJarFile.exists() && genericJarFile.isFile()
-                 && websphereJarFile.exists() && websphereJarFile.isFile()) {
-                //open jar files
-                genericJar = new JarFile(genericJarFile);
-                wasJar = new JarFile(websphereJarFile);
-
-                Hashtable genericEntries = new Hashtable();
-                Hashtable wasEntries = new Hashtable();
-                Hashtable replaceEntries = new Hashtable();
-
-                //get the list of generic jar entries
-                for (Enumeration e = genericJar.entries(); e.hasMoreElements();) {
-                    JarEntry je = (JarEntry) e.nextElement();
-
-                    genericEntries.put(je.getName().replace('\\', '/'), je);
-                }
-                //get the list of websphere jar entries
-                for (Enumeration e = wasJar.entries(); e.hasMoreElements();) {
-                    JarEntry je = (JarEntry) e.nextElement();
-
-                    wasEntries.put(je.getName(), je);
-                }
-
-                //Cycle Through generic and make sure its in websphere
-                ClassLoader genericLoader = getClassLoaderFromJar(genericJarFile);
-
-                for (Enumeration e = genericEntries.keys(); e.hasMoreElements();) {
-                    String filepath = (String) e.nextElement();
-
-                    if (wasEntries.containsKey(filepath)) {
-                        // File name/path match
-                        // Check files see if same
-                        JarEntry genericEntry = (JarEntry) genericEntries.get(filepath);
-                        JarEntry wasEntry = (JarEntry) wasEntries.get(filepath);
-
-                        if ((genericEntry.getCrc() != wasEntry.getCrc()) ||
-                            (genericEntry.getSize() != wasEntry.getSize())) {
-
-                            if (genericEntry.getName().endsWith(".class")) {
-                                //File are different see if its an object or an interface
-                                String classname = genericEntry.getName().replace(File.separatorChar, '.');
-
-                                classname = classname.substring(0, classname.lastIndexOf(".class"));
-
-                                Class genclass = genericLoader.loadClass(classname);
-
-                                if (genclass.isInterface()) {
-                                    //Interface changed   rebuild jar.
-                                    log("Interface " + genclass.getName() + " has changed", Project.MSG_VERBOSE);
-                                    rebuild = true;
-                                    break;
-                                } else {
-                                    //Object class Changed   update it.
-                                    replaceEntries.put(filepath, genericEntry);
-                                }
-                            } else {
-                                // is it the manifest. If so ignore it
-                                if (!genericEntry.getName().equals("META-INF/MANIFEST.MF")) {
-                                    //File other then class changed   rebuild
-                                    log("Non class file " + genericEntry.getName() + " has changed", Project.MSG_VERBOSE);
-                                    rebuild = true;
-                                }
-                                break;
-                            }
-                        }
-                    } else {// a file doesnt exist rebuild
-
-                        log("File " + filepath + " not present in websphere jar", Project.MSG_VERBOSE);
-                        rebuild = true;
-                        break;
-                    }
-                }
-
-                if (!rebuild) {
-                    log("No rebuild needed - updating jar", Project.MSG_VERBOSE);
-                    newwasJarFile = new File(websphereJarFile.getAbsolutePath() + ".temp");
-                    if (newwasJarFile.exists()) {
-                        newwasJarFile.delete();
-                    }
-
-                    newJarStream = new JarOutputStream(new FileOutputStream(newwasJarFile));
-                    newJarStream.setLevel(0);
-
-                    //Copy files from old websphere jar
-                    for (Enumeration e = wasEntries.elements(); e.hasMoreElements();) {
-                        byte[] buffer = new byte[1024];
-                        int bytesRead;
-                        InputStream is;
-                        JarEntry je = (JarEntry) e.nextElement();
-
-                        if (je.getCompressedSize() == -1 ||
-                            je.getCompressedSize() == je.getSize()) {
-                            newJarStream.setLevel(0);
-                        } else {
-                            newJarStream.setLevel(9);
-                        }
-
-                        // Update with changed Bean class
-                        if (replaceEntries.containsKey(je.getName())) {
-                            log("Updating Bean class from generic Jar " + je.getName(),
-                                Project.MSG_VERBOSE);
-                            // Use the entry from the generic jar
-                            je = (JarEntry) replaceEntries.get(je.getName());
-                            is = genericJar.getInputStream(je);
-                        } else {//use fle from original websphere jar
-
-                            is = wasJar.getInputStream(je);
-                        }
-                        newJarStream.putNextEntry(new JarEntry(je.getName()));
-
-                        while ((bytesRead = is.read(buffer)) != -1) {
-                            newJarStream.write(buffer, 0, bytesRead);
-                        }
-                        is.close();
-                    }
-                } else {
-                    log("websphere Jar rebuild needed due to changed interface or XML", Project.MSG_VERBOSE);
-                }
-            } else {
-                rebuild = true;
-            }
-        } catch (ClassNotFoundException cnfe) {
-            String cnfmsg = "ClassNotFoundException while processing ejb-jar file"
-                 + ". Details: "
-                 + cnfe.getMessage();
-
-            throw new BuildException(cnfmsg, cnfe);
-        } catch (IOException ioe) {
-            String msg = "IOException while processing ejb-jar file "
-                 + ". Details: "
-                 + ioe.getMessage();
-
-            throw new BuildException(msg, ioe);
-        } finally {
-            // need to close files and perhaps rename output
-            if (genericJar != null) {
-                try {
-                    genericJar.close();
-                } catch (IOException closeException) {
-                }
-            }
-
-            if (wasJar != null) {
-                try {
-                    wasJar.close();
-                } catch (IOException closeException) {
-                }
-            }
-
-            if (newJarStream != null) {
-                try {
-                    newJarStream.close();
-                } catch (IOException closeException) {
-                }
-
-                websphereJarFile.delete();
-                newwasJarFile.renameTo(websphereJarFile);
-                if (!websphereJarFile.exists()) {
-                    rebuild = true;
-                }
-            }
-        }
-
-        return rebuild;
-    }
-
-
-    /**
-     * Helper method invoked by isRebuildRequired to get a ClassLoader for a
-     * Jar File passed to it.
-     *
-     * @param classjar java.io.File representing jar file to get classes from.
-     */
-    protected ClassLoader getClassLoaderFromJar(File classjar) throws IOException {
-        Path lookupPath = new Path(getTask().getProject());
-
-        lookupPath.setLocation(classjar);
-
-        Path classpath = getCombinedClasspath();
-
-        if (classpath != null) {
-            lookupPath.append(classpath);
-        }
-
-        return new AntClassLoader(getTask().getProject(), lookupPath);
-    }
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/extension/Compatability.java b/src/main/org/apache/tools/ant/taskdefs/optional/extension/Compatability.java
deleted file mode 100644
index 20286ed..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/extension/Compatability.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.extension;
-
-/**
- * Enum used in (@link Extension) to indicate the compatability
- * of one extension to another. See (@link Extension) for instances
- * of object.
- *
- * WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
- *  This file is from excalibur.extension package. Dont edit this file
- * directly as there is no unit tests to make sure it is operational
- * in ant. Edit file in excalibur and run tests there before changing
- * ants file.
- * WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
- *
- * @author <a href="mailto:peter@apache.org">Peter Donald</a>
- * @version $Revision$ $Date$
- * @see Extension
- */
-public final class Compatability
-{
-    /**
-     * A string representaiton of compatability level.
-     */
-    private final String m_name;
-
-    /**
-     * Create a compatability enum with specified name.
-     *
-     * @param name the name of compatability level
-     */
-    Compatability( final String name )
-    {
-        m_name = name;
-    }
-
-    /**
-     * Return name of compatability level.
-     *
-     * @return the name of compatability level
-     */
-    public String toString()
-    {
-        return m_name;
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/extension/DeweyDecimal.java b/src/main/org/apache/tools/ant/taskdefs/optional/extension/DeweyDecimal.java
deleted file mode 100644
index a72d0f5..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/extension/DeweyDecimal.java
+++ /dev/null
@@ -1,282 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.extension;
-
-import java.util.StringTokenizer;
-
-/**
- * Utility class to contain version numbers in "Dewey Decimal"
- * syntax.  Numbers in the "Dewey Decimal" syntax consist of positive
- * decimal integers separated by periods ".".  For example, "2.0" or
- * "1.2.3.4.5.6.7".  This allows an extensible number to be used to
- * represent major, minor, micro, etc versions.  The version number
- * must begin with a number.
- *
- * WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
- *  This file is from excalibur.extension package. Dont edit this file
- * directly as there is no unit tests to make sure it is operational
- * in ant. Edit file in excalibur and run tests there before changing
- * ants file.
- * WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
- *
- * @author <a href="mailto:peter@apache.org">Peter Donald</a>
- * @version $Revision$ $Date$
- */
-public final class DeweyDecimal
-{
-    ///Array of components that make up DeweyDecimal
-    private int[] m_components;
-
-    /**
-     * Construct a DeweyDecimal from an array of integer components.
-     *
-     * @param components an array of integer components.
-     */
-    public DeweyDecimal( final int[] components )
-    {
-        m_components = new int[ components.length ];
-
-        for( int i = 0; i < m_components.length; i++ )
-        {
-            m_components[ i ] = components[ i ];
-        }
-    }
-
-    /**
-     * Construct a DeweyDecimal from string in DeweyDecimal format.
-     *
-     * @param string the string in dewey decimal format
-     * @exception NumberFormatException if string is malformed
-     */
-    public DeweyDecimal( final String string )
-        throws NumberFormatException
-    {
-        final StringTokenizer tokenizer = new StringTokenizer( string, ".", true );
-        final int size = tokenizer.countTokens();
-
-        m_components = new int[ ( size + 1 ) / 2 ];
-
-        for( int i = 0; i < m_components.length; i++ )
-        {
-            final String component = tokenizer.nextToken();
-            if( component.equals( "" ) )
-            {
-                throw new NumberFormatException( "Empty component in string" );
-            }
-
-            m_components[ i ] = Integer.parseInt( component );
-
-            //Strip '.' token
-            if( tokenizer.hasMoreTokens() )
-            {
-                tokenizer.nextToken();
-
-                //If it ended in a dot, throw an exception
-                if( !tokenizer.hasMoreTokens() )
-                {
-                    throw new NumberFormatException( "DeweyDecimal ended in a '.'" );
-                }
-            }
-        }
-    }
-
-    /**
-     * Return number of components in <code>DeweyDecimal</code>.
-     *
-     * @return the number of components in dewey decimal
-     */
-    public int getSize()
-    {
-        return m_components.length;
-    }
-
-    /**
-     * Return the component at specified index.
-     *
-     * @param index the index of components
-     * @return the value of component at index
-     */
-    public int get( final int index )
-    {
-        return m_components[ index ];
-    }
-
-    /**
-     * Return <code>true</code> if this <code>DeweyDecimal</code> is
-     * equal to the other <code>DeweyDecimal</code>.
-     *
-     * @param other the other DeweyDecimal
-     * @return true if equal to other DeweyDecimal, false otherwise
-     */
-    public boolean isEqual( final DeweyDecimal other )
-    {
-        final int max = Math.max( other.m_components.length, m_components.length );
-
-        for( int i = 0; i < max; i++ )
-        {
-            final int component1 = ( i < m_components.length ) ? m_components[ i ] : 0;
-            final int component2 = ( i < other.m_components.length ) ? other.m_components[ i ] : 0;
-
-            if( component2 != component1 )
-            {
-                return false;
-            }
-        }
-
-        return true; // Exact match
-    }
-
-    /**
-     * Return <code>true</code> if this <code>DeweyDecimal</code> is
-     * less than the other <code>DeweyDecimal</code>.
-     *
-     * @param other the other DeweyDecimal
-     * @return true if less than other DeweyDecimal, false otherwise
-     */
-    public boolean isLessThan( final DeweyDecimal other )
-    {
-        return !isGreaterThanOrEqual( other );
-    }
-
-    /**
-     * Return <code>true</code> if this <code>DeweyDecimal</code> is
-     * less than or equal to the other <code>DeweyDecimal</code>.
-     *
-     * @param other the other DeweyDecimal
-     * @return true if less than or equal to other DeweyDecimal, false otherwise
-     */
-    public boolean isLessThanOrEqual( final DeweyDecimal other )
-    {
-        return !isGreaterThan( other );
-    }
-
-    /**
-     * Return <code>true</code> if this <code>DeweyDecimal</code> is
-     * greater than the other <code>DeweyDecimal</code>.
-     *
-     * @param other the other DeweyDecimal
-     * @return true if greater than other DeweyDecimal, false otherwise
-     */
-    public boolean isGreaterThan( final DeweyDecimal other )
-    {
-        final int max = Math.max( other.m_components.length, m_components.length );
-
-        for( int i = 0; i < max; i++ )
-        {
-            final int component1 = ( i < m_components.length ) ? m_components[ i ] : 0;
-            final int component2 = ( i < other.m_components.length ) ? other.m_components[ i ] : 0;
-
-            if( component2 > component1 )
-            {
-                return false;
-            }
-            if( component2 < component1 )
-            {
-                return true;
-            }
-        }
-
-        return false; // Exact match
-    }
-
-    /**
-     * Return <code>true</code> if this <code>DeweyDecimal</code> is
-     * greater than or equal to the other <code>DeweyDecimal</code>.
-     *
-     * @param other the other DeweyDecimal
-     * @return true if greater than or equal to other DeweyDecimal, false otherwise
-     */
-    public boolean isGreaterThanOrEqual( final DeweyDecimal other )
-    {
-        final int max = Math.max( other.m_components.length, m_components.length );
-
-        for( int i = 0; i < max; i++ )
-        {
-            final int component1 = ( i < m_components.length ) ? m_components[ i ] : 0;
-            final int component2 = ( i < other.m_components.length ) ? other.m_components[ i ] : 0;
-
-            if( component2 > component1 )
-            {
-                return false;
-            }
-            if( component2 < component1 )
-            {
-                return true;
-            }
-        }
-
-        return true; // Exact match
-    }
-
-    /**
-     * Return string representation of <code>DeweyDecimal</code>.
-     *
-     * @return the string representation of DeweyDecimal.
-     */
-    public String toString()
-    {
-        final StringBuffer sb = new StringBuffer();
-
-        for( int i = 0; i < m_components.length; i++ )
-        {
-            if( i != 0 )
-            {
-                sb.append( '.' );
-            }
-            sb.append( m_components[ i ] );
-        }
-
-        return sb.toString();
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/extension/Extension.java b/src/main/org/apache/tools/ant/taskdefs/optional/extension/Extension.java
deleted file mode 100644
index cb7fd4a..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/extension/Extension.java
+++ /dev/null
@@ -1,784 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.extension;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.StringTokenizer;
-import java.util.jar.Attributes;
-import java.util.jar.Manifest;
-
-/**
- * <p>Utility class that represents either an available "Optional Package"
- * (formerly known as "Standard Extension") as described in the manifest
- * of a JAR file, or the requirement for such an optional package.</p>
- *
- * <p>For more information about optional packages, see the document
- * <em>Optional Package Versioning</em> in the documentation bundle for your
- * Java2 Standard Edition package, in file
- * <code>guide/extensions/versioning.html</code>.</p>
- *
- * WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
- *  This file is from excalibur.extension package. Dont edit this file
- * directly as there is no unit tests to make sure it is operational
- * in ant. Edit file in excalibur and run tests there before changing
- * ants file.
- * WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
- *
- * @author <a href="mailto:craigmcc@apache.org">Craig R. McClanahan</a>
- * @author <a href="mailto:peter@apache.org">Peter Donald</a>
- * @version $Revision$ $Date$
- */
-public final class Extension
-{
-    /**
-     * Manifest Attribute Name object for EXTENSION_LIST.
-     * @see Attributes.Name#EXTENSION_LIST
-     */
-    public static final Attributes.Name EXTENSION_LIST = Attributes.Name.EXTENSION_LIST;
-
-    /**
-     * <code>Name</code> object for <code>Optional-Extension-List</code>
-     * manifest attribute used for declaring optional dependencies on
-     * installed extensions. Note that the dependencies declared by this method
-     * are not required for the library to operate but if present will be used.
-     * It is NOT part of the official "Optional Package" specification.
-     *
-     * @see <a href="http://java.sun.com/j2se/1.3/docs/guide/extensions/spec.html#dependnecy">
-     *      Installed extension dependency</a>
-     */
-    public static final Attributes.Name OPTIONAL_EXTENSION_LIST = new Attributes.Name( "Optional-Extension-List" );
-
-    /**
-     * Manifest Attribute Name object for EXTENSION_NAME.
-     * @see Attributes.Name#EXTENSION_NAME
-     */
-    public static final Attributes.Name EXTENSION_NAME = Attributes.Name.EXTENSION_NAME;
-
-    /**
-     * Manifest Attribute Name object for SPECIFICATION_VERSION.
-     * @see Attributes.Name#SPECIFICATION_VERSION
-     */
-    public static final Attributes.Name SPECIFICATION_VERSION = Attributes.Name.SPECIFICATION_VERSION;
-
-    /**
-     * Manifest Attribute Name object for SPECIFICATION_VENDOR.
-     * @see Attributes.Name#SPECIFICATION_VENDOR
-     */
-    public static final Attributes.Name SPECIFICATION_VENDOR = Attributes.Name.SPECIFICATION_VENDOR;
-
-    /**
-     * Manifest Attribute Name object for IMPLEMENTATION_VERSION.
-     * @see Attributes.Name#IMPLEMENTATION_VERSION
-     */
-    public static final Attributes.Name IMPLEMENTATION_VERSION = Attributes.Name.IMPLEMENTATION_VERSION;
-
-    /**
-     * Manifest Attribute Name object for IMPLEMENTATION_VENDOR.
-     * @see Attributes.Name#IMPLEMENTATION_VENDOR
-     */
-    public static final Attributes.Name IMPLEMENTATION_VENDOR = Attributes.Name.IMPLEMENTATION_VENDOR;
-
-    /**
-     * Manifest Attribute Name object for IMPLEMENTATION_URL.
-     * @see Attributes.Name#IMPLEMENTATION_URL
-     */
-    public static final Attributes.Name IMPLEMENTATION_URL = Attributes.Name.IMPLEMENTATION_URL;
-
-    /**
-     * Manifest Attribute Name object for IMPLEMENTATION_VENDOR_ID.
-     * @see Attributes.Name#IMPLEMENTATION_VENDOR_ID
-     */
-    public static final Attributes.Name IMPLEMENTATION_VENDOR_ID = Attributes.Name.IMPLEMENTATION_VENDOR_ID;
-
-    /**
-     * Enum indicating that extension is compatible with other extension.
-     */
-    public static final Compatability COMPATIBLE =
-        new Compatability( "COMPATIBLE" );
-
-    /**
-     * Enum indicating that extension requires an upgrade
-     * of specification to be compatible with other extension.
-     */
-    public static final Compatability REQUIRE_SPECIFICATION_UPGRADE =
-        new Compatability( "REQUIRE_SPECIFICATION_UPGRADE" );
-
-    /**
-     * Enum indicating that extension requires a vendor
-     * switch to be compatible with other extension.
-     */
-    public static final Compatability REQUIRE_VENDOR_SWITCH =
-        new Compatability( "REQUIRE_VENDOR_SWITCH" );
-
-    /**
-     * Enum indicating that extension requires an upgrade
-     * of implementation to be compatible with other extension.
-     */
-    public static final Compatability REQUIRE_IMPLEMENTATION_UPGRADE =
-        new Compatability( "REQUIRE_IMPLEMENTATION_UPGRADE" );
-
-    /**
-     * Enum indicating that extension is incompatible with
-     * other extension in ways other than other enums
-     * indicate). ie For example the other extension may have
-     * a different ID.
-     */
-    public static final Compatability INCOMPATIBLE =
-        new Compatability( "INCOMPATIBLE" );
-
-    /**
-     * The name of the optional package being made available, or required.
-     */
-    private String m_extensionName;
-
-    /**
-     * The version number (dotted decimal notation) of the specification
-     * to which this optional package conforms.
-     */
-    private DeweyDecimal m_specificationVersion;
-
-    /**
-     * The name of the company or organization that originated the
-     * specification to which this optional package conforms.
-     */
-    private String m_specificationVendor;
-
-    /**
-     * The unique identifier of the company that produced the optional
-     * package contained in this JAR file.
-     */
-    private String m_implementationVendorID;
-
-    /**
-     * The name of the company or organization that produced this
-     * implementation of this optional package.
-     */
-    private String m_implementationVendor;
-
-    /**
-     * The version number (dotted decimal notation) for this implementation
-     * of the optional package.
-     */
-    private DeweyDecimal m_implementationVersion;
-
-    /**
-     * The URL from which the most recent version of this optional package
-     * can be obtained if it is not already installed.
-     */
-    private String m_implementationURL;
-
-    /**
-     * Return an array of <code>Extension</code> objects representing optional
-     * packages that are available in the JAR file associated with the
-     * specified <code>Manifest</code>.  If there are no such optional
-     * packages, a zero-length array is returned.
-     *
-     * @param manifest Manifest to be parsed
-     * @return the "available" extensions in specified manifest
-     */
-    public static Extension[] getAvailable( final Manifest manifest )
-    {
-        if( null == manifest )
-        {
-            return new Extension[ 0 ];
-        }
-
-        final ArrayList results = new ArrayList();
-
-        final Attributes mainAttributes = manifest.getMainAttributes();
-        if( null != mainAttributes )
-        {
-            final Extension extension = getExtension( "", mainAttributes );
-            if( null != extension )
-            {
-                results.add( extension );
-            }
-        }
-
-        final Map entries = manifest.getEntries();
-        final Iterator keys = entries.keySet().iterator();
-        while( keys.hasNext() )
-        {
-            final String key = (String)keys.next();
-            final Attributes attributes = (Attributes)entries.get( key );
-            final Extension extension = getExtension( "", attributes );
-            if( null != extension )
-            {
-                results.add( extension );
-            }
-        }
-
-        return (Extension[])results.toArray( new Extension[ 0 ] );
-    }
-
-    /**
-     * Return the set of <code>Extension</code> objects representing optional
-     * packages that are required by the application contained in the JAR
-     * file associated with the specified <code>Manifest</code>.  If there
-     * are no such optional packages, a zero-length list is returned.
-     *
-     * @param manifest Manifest to be parsed
-     * @return the dependencies that are specified in manifes
-     */
-    public static Extension[] getRequired( final Manifest manifest )
-    {
-        return getListed( manifest, EXTENSION_LIST );
-    }
-
-    /**
-     * Return the set of <code>Extension</code> objects representing "Optional
-     * Packages" that the application declares they will use if present. If
-     * there are no such optional packages, a zero-length list is returned.
-     *
-     * @param manifest Manifest to be parsed
-     * @return the optional dependencies that are specified in manifest
-     */
-    public static Extension[] getOptions( final Manifest manifest )
-    {
-        return getListed( manifest, OPTIONAL_EXTENSION_LIST );
-    }
-
-    /**
-     * Add Extension to the specified manifest Attributes.
-     *
-     * @param attributes the attributes of manifest to add to
-     * @param extension the extension
-     */
-    public static void addExtension( final Extension extension,
-                                     final Attributes attributes )
-    {
-        addExtension( extension, "", attributes );
-    }
-
-    /**
-     * Add Extension to the specified manifest Attributes.
-     * Use the specified prefix so that dependencies can added
-     * with a prefix such as "java3d-" etc.
-     *
-     * @param attributes the attributes of manifest to add to
-     * @param extension the extension
-     * @param prefix the name to prefix to extension
-     */
-    public static void addExtension( final Extension extension,
-                                     final String prefix,
-                                     final Attributes attributes )
-    {
-        attributes.putValue( prefix + EXTENSION_NAME,
-                             extension.getExtensionName() );
-
-        final String specificationVendor = extension.getSpecificationVendor();
-        if( null != specificationVendor )
-        {
-            attributes.putValue( prefix + SPECIFICATION_VENDOR,
-                                 specificationVendor );
-        }
-
-        final DeweyDecimal specificationVersion = extension.getSpecificationVersion();
-        if( null != specificationVersion )
-        {
-            attributes.putValue( prefix + SPECIFICATION_VERSION,
-                                 specificationVersion.toString() );
-        }
-
-        final String implementationVendorID = extension.getImplementationVendorID();
-        if( null != implementationVendorID )
-        {
-            attributes.putValue( prefix + IMPLEMENTATION_VENDOR_ID,
-                                 implementationVendorID );
-        }
-
-        final String implementationVendor = extension.getImplementationVendor();
-        if( null != implementationVendor )
-        {
-            attributes.putValue( prefix + IMPLEMENTATION_VENDOR,
-                                 implementationVendor );
-        }
-
-        final DeweyDecimal implementationVersion = extension.getImplementationVersion();
-        if( null != implementationVersion )
-        {
-            attributes.putValue( prefix + IMPLEMENTATION_VERSION,
-                                 implementationVersion.toString() );
-        }
-
-        final String implementationURL = extension.getImplementationURL();
-        if( null != implementationURL )
-        {
-            attributes.putValue( prefix + IMPLEMENTATION_URL,
-                                 implementationURL );
-        }
-    }
-
-    /**
-     * The constructor to create Extension object.
-     * Note that every component is allowed to be specified
-     * but only the extensionName is mandatory.
-     *
-     * @param extensionName the name of extension.
-     * @param specificationVersion the specification Version of extension.
-     * @param specificationVendor the specification Vendor of extension.
-     * @param implementationVersion the implementation Version of extension.
-     * @param implementationVendor the implementation Vendor of extension.
-     * @param implementationVendorId the implementation VendorId of extension.
-     * @param implementationURL the implementation URL of extension.
-     */
-    public Extension( final String extensionName,
-                      final String specificationVersion,
-                      final String specificationVendor,
-                      final String implementationVersion,
-                      final String implementationVendor,
-                      final String implementationVendorId,
-                      final String implementationURL )
-    {
-        m_extensionName = extensionName;
-        m_specificationVendor = specificationVendor;
-
-        if( null != specificationVersion )
-        {
-            try
-            {
-                m_specificationVersion = new DeweyDecimal( specificationVersion );
-            }
-            catch( final NumberFormatException nfe )
-            {
-                final String error = "Bad specification version format '" + specificationVersion +
-                    "' in '" + extensionName + "'. (Reason: " + nfe + ")";
-                throw new IllegalArgumentException( error );
-            }
-        }
-
-        m_implementationURL = implementationURL;
-        m_implementationVendor = implementationVendor;
-        m_implementationVendorID = implementationVendorId;
-
-        if( null != implementationVersion )
-        {
-            try
-            {
-                m_implementationVersion = new DeweyDecimal( implementationVersion );
-            }
-            catch( final NumberFormatException nfe )
-            {
-                final String error = "Bad implementation version format '" + implementationVersion +
-                    "' in '" + extensionName + "'. (Reason: " + nfe + ")";
-                throw new IllegalArgumentException( error );
-            }
-        }
-
-        if( null == m_extensionName )
-        {
-            throw new NullPointerException( "extensionName property is null" );
-        }
-    }
-
-    /**
-     * Get the name of the extension.
-     *
-     * @return the name of the extension
-     */
-    public String getExtensionName()
-    {
-        return m_extensionName;
-    }
-
-    /**
-     * Get the vendor of the extensions specification.
-     *
-     * @return the vendor of the extensions specification.
-     */
-    public String getSpecificationVendor()
-    {
-        return m_specificationVendor;
-    }
-
-    /**
-     * Get the version of the extensions specification.
-     *
-     * @return the version of the extensions specification.
-     */
-    public DeweyDecimal getSpecificationVersion()
-    {
-        return m_specificationVersion;
-    }
-
-    /**
-     * Get the url of the extensions implementation.
-     *
-     * @return the url of the extensions implementation.
-     */
-    public String getImplementationURL()
-    {
-        return m_implementationURL;
-    }
-
-    /**
-     * Get the vendor of the extensions implementation.
-     *
-     * @return the vendor of the extensions implementation.
-     */
-    public String getImplementationVendor()
-    {
-        return m_implementationVendor;
-    }
-
-    /**
-     * Get the vendorID of the extensions implementation.
-     *
-     * @return the vendorID of the extensions implementation.
-     */
-    public String getImplementationVendorID()
-    {
-        return m_implementationVendorID;
-    }
-
-    /**
-     * Get the version of the extensions implementation.
-     *
-     * @return the version of the extensions implementation.
-     */
-    public DeweyDecimal getImplementationVersion()
-    {
-        return m_implementationVersion;
-    }
-
-    /**
-     * Return a Compatibility enum indicating the relationship of this
-     * <code>Extension</code> with the specified <code>Extension</code>.
-     *
-     * @param required Description of the required optional package
-     * @return the enum indicating the compatability (or lack thereof)
-     *         of specifed extension
-     */
-    public Compatability getCompatibilityWith( final Extension required )
-    {
-        // Extension Name must match
-        if( !m_extensionName.equals( required.getExtensionName() ) )
-        {
-            return INCOMPATIBLE;
-        }
-
-        // Available specification version must be >= required
-        final DeweyDecimal specificationVersion = required.getSpecificationVersion();
-        if( null != specificationVersion )
-        {
-            if( null == m_specificationVersion ||
-                !isCompatible( m_specificationVersion, specificationVersion ) )
-            {
-                return REQUIRE_SPECIFICATION_UPGRADE;
-            }
-        }
-
-        // Implementation Vendor ID must match
-        final String implementationVendorId = required.getImplementationVendorID();
-        if( null != implementationVendorId )
-        {
-            if( null == m_implementationVendorID ||
-                !m_implementationVendorID.equals( implementationVendorId ) )
-            {
-                return REQUIRE_VENDOR_SWITCH;
-            }
-        }
-
-        // Implementation version must be >= required
-        final DeweyDecimal implementationVersion = required.getImplementationVersion();
-        if( null != implementationVersion )
-        {
-            if( null == m_implementationVersion ||
-                !isCompatible( m_implementationVersion, implementationVersion ) )
-            {
-                return REQUIRE_IMPLEMENTATION_UPGRADE;
-            }
-        }
-
-        // This available optional package satisfies the requirements
-        return COMPATIBLE;
-    }
-
-    /**
-     * Return <code>true</code> if the specified <code>Extension</code>
-     * (which represents an optional package required by an application)
-     * is satisfied by this <code>Extension</code> (which represents an
-     * optional package that is already installed.  Otherwise, return
-     * <code>false</code>.
-     *
-     * @param required Description of the required optional package
-     * @return true if the specified extension is compatible with this extension
-     */
-    public boolean isCompatibleWith( final Extension required )
-    {
-        return ( COMPATIBLE == getCompatibilityWith( required ) );
-    }
-
-    /**
-     * Return a String representation of this object.
-     *
-     * @return string representation of object.
-     */
-    public String toString()
-    {
-        final String lineSeparator = System.getProperty( "line.separator" );
-        final String brace = ": ";
-
-        final StringBuffer sb = new StringBuffer( EXTENSION_NAME.toString() );
-        sb.append( brace );
-        sb.append( m_extensionName );
-        sb.append( lineSeparator );
-
-        if( null != m_specificationVersion )
-        {
-            sb.append( SPECIFICATION_VERSION );
-            sb.append( brace );
-            sb.append( m_specificationVersion );
-            sb.append( lineSeparator );
-        }
-
-        if( null != m_specificationVendor )
-        {
-            sb.append( SPECIFICATION_VENDOR );
-            sb.append( brace );
-            sb.append( m_specificationVendor );
-            sb.append( lineSeparator );
-        }
-
-        if( null != m_implementationVersion )
-        {
-            sb.append( IMPLEMENTATION_VERSION );
-            sb.append( brace );
-            sb.append( m_implementationVersion );
-            sb.append( lineSeparator );
-        }
-
-        if( null != m_implementationVendorID )
-        {
-            sb.append( IMPLEMENTATION_VENDOR_ID );
-            sb.append( brace );
-            sb.append( m_implementationVendorID );
-            sb.append( lineSeparator );
-        }
-
-        if( null != m_implementationVendor )
-        {
-            sb.append( IMPLEMENTATION_VENDOR );
-            sb.append( brace );
-            sb.append( m_implementationVendor );
-            sb.append( lineSeparator );
-        }
-
-        if( null != m_implementationURL )
-        {
-            sb.append( IMPLEMENTATION_URL );
-            sb.append( brace );
-            sb.append( m_implementationURL );
-            sb.append( lineSeparator );
-        }
-
-        return sb.toString();
-    }
-
-    /**
-     * Return <code>true</code> if the first version number is greater than
-     * or equal to the second; otherwise return <code>false</code>.
-     *
-     * @param first First version number (dotted decimal)
-     * @param second Second version number (dotted decimal)
-     */
-    private boolean isCompatible( final DeweyDecimal first, final DeweyDecimal second )
-    {
-        return first.isGreaterThanOrEqual( second );
-    }
-
-    /**
-     * Retrieve all the extensions listed under a particular key
-     * (Usually EXTENSION_LIST or OPTIONAL_EXTENSION_LIST).
-     *
-     * @param manifest the manifest to extract extensions from
-     * @param listKey the key used to get list (Usually
-     *        EXTENSION_LIST or OPTIONAL_EXTENSION_LIST)
-     * @return the list of listed extensions
-     */
-    private static Extension[] getListed( final Manifest manifest,
-                                          final Attributes.Name listKey )
-    {
-        final ArrayList results = new ArrayList();
-        final Attributes mainAttributes = manifest.getMainAttributes();
-
-        if( null != mainAttributes )
-        {
-            getExtension( mainAttributes, results, listKey );
-        }
-
-        final Map entries = manifest.getEntries();
-        final Iterator keys = entries.keySet().iterator();
-        while( keys.hasNext() )
-        {
-            final String key = (String)keys.next();
-            final Attributes attributes = (Attributes)entries.get( key );
-            getExtension( attributes, results, listKey );
-        }
-
-        return (Extension[])results.toArray( new Extension[ 0 ] );
-    }
-
-    /**
-     * Add required optional packages defined in the specified attributes entry, if any.
-     *
-     * @param attributes Attributes to be parsed
-     * @param required list to add required optional packages to
-     * @param listKey the key to use to lookup list, usually EXTENSION_LIST
-     *    or OPTIONAL_EXTENSION_LIST
-     */
-    private static void getExtension( final Attributes attributes,
-                                     final ArrayList required,
-                                     final Attributes.Name listKey )
-    {
-        final String names = attributes.getValue( listKey );
-        if( null == names )
-        {
-            return;
-        }
-
-        final String[] extentions = split( names, " " );
-        for( int i = 0; i < extentions.length; i++ )
-        {
-            final String prefix = extentions[ i ] + "-";
-            final Extension extension = getExtension( prefix, attributes );
-
-            if( null != extension )
-            {
-                required.add( extension );
-            }
-        }
-    }
-
-    /**
-     * Splits the string on every token into an array of strings.
-     *
-     * @param string the string
-     * @param onToken the token
-     * @return the resultant array
-     */
-    private static final String[] split( final String string, final String onToken )
-    {
-        final StringTokenizer tokenizer = new StringTokenizer( string, onToken );
-        final String[] result = new String[ tokenizer.countTokens() ];
-
-        for( int i = 0; i < result.length; i++ )
-        {
-            result[ i ] = tokenizer.nextToken();
-        }
-
-        return result;
-    }
-
-    /**
-     * Extract an Extension from Attributes.
-     * Prefix indicates the prefix checked for each string.
-     * Usually the prefix is <em>"&lt;extension&gt;-"</em> if looking for a
-     * <b>Required</b> extension. If you are looking for an <b>Available</b> extension
-     * then the prefix is <em>""</em>.
-     *
-     * @param prefix the prefix for each attribute name
-     * @param attributes Attributes to searched
-     * @return the new Extension object, or null
-     */
-    private static Extension getExtension( final String prefix, final Attributes attributes )
-    {
-        //WARNING: We trim the values of all the attributes because
-        //Some extension declarations are badly defined (ie have spaces
-        //after version or vendorID)
-        final String nameKey = prefix + EXTENSION_NAME;
-        final String name = getTrimmedString( attributes.getValue( nameKey ) );
-        if( null == name )
-        {
-            return null;
-        }
-
-        final String specVendorKey = prefix + SPECIFICATION_VENDOR;
-        final String specVendor = getTrimmedString( attributes.getValue( specVendorKey ) );
-        final String specVersionKey = prefix + SPECIFICATION_VERSION;
-        final String specVersion = getTrimmedString( attributes.getValue( specVersionKey ) );
-
-        final String impVersionKey = prefix + IMPLEMENTATION_VERSION;
-        final String impVersion = getTrimmedString( attributes.getValue( impVersionKey ) );
-        final String impVendorKey = prefix + IMPLEMENTATION_VENDOR;
-        final String impVendor = getTrimmedString( attributes.getValue( impVendorKey ) );
-        final String impVendorIDKey = prefix + IMPLEMENTATION_VENDOR_ID;
-        final String impVendorId = getTrimmedString( attributes.getValue( impVendorIDKey ) );
-        final String impURLKey = prefix + IMPLEMENTATION_URL;
-        final String impURL = getTrimmedString( attributes.getValue( impURLKey ) );
-
-        return new Extension( name, specVersion, specVendor, impVersion,
-                              impVendor, impVendorId, impURL );
-    }
-
-    /**
-     * Trim the supplied string if the string is non-null
-     *
-     * @param value the string to trim or null
-     * @return the trimmed string or null
-     */
-    private static String getTrimmedString( final String value )
-    {
-        if( null == value )
-        {
-            return null;
-        }
-        else
-        {
-            return value.trim();
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/extension/ExtensionAdapter.java b/src/main/org/apache/tools/ant/taskdefs/optional/extension/ExtensionAdapter.java
deleted file mode 100644
index a6ff6d2..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/extension/ExtensionAdapter.java
+++ /dev/null
@@ -1,281 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.extension;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.types.DataType;
-import org.apache.tools.ant.types.Reference;
-
-/**
- * Simple class that represents an Extension and conforms to Ants
- * patterns.
- *
- * @author <a href="mailto:peter@apache.org">Peter Donald</a>
- * @version $Revision$ $Date$
- * @ant.data-type name="extension"
- */
-public class ExtensionAdapter
-    extends DataType
-{
-    /**
-     * The name of the optional package being made available, or required.
-     */
-    private String m_extensionName;
-
-    /**
-     * The version number (dotted decimal notation) of the specification
-     * to which this optional package conforms.
-     */
-    private DeweyDecimal m_specificationVersion;
-
-    /**
-     * The name of the company or organization that originated the
-     * specification to which this optional package conforms.
-     */
-    private String m_specificationVendor;
-
-    /**
-     * The unique identifier of the company that produced the optional
-     * package contained in this JAR file.
-     */
-    private String m_implementationVendorID;
-
-    /**
-     * The name of the company or organization that produced this
-     * implementation of this optional package.
-     */
-    private String m_implementationVendor;
-
-    /**
-     * The version number (dotted decimal notation) for this implementation
-     * of the optional package.
-     */
-    private DeweyDecimal m_implementationVersion;
-
-    /**
-     * The URL from which the most recent version of this optional package
-     * can be obtained if it is not already installed.
-     */
-    private String m_implementationURL;
-
-    /**
-     * Set the name of extension.
-     *
-     * @param extensionName the name of extension
-     */
-    public void setExtensionName( final String extensionName )
-    {
-        verifyNotAReference();
-        m_extensionName = extensionName;
-    }
-
-    /**
-     * Set the specificationVersion of extension.
-     *
-     * @param specificationVersion the specificationVersion of extension
-     */
-    public void setSpecificationVersion( final String specificationVersion )
-    {
-        verifyNotAReference();
-        m_specificationVersion = new DeweyDecimal( specificationVersion );
-    }
-
-    /**
-     * Set the specificationVendor of extension.
-     *
-     * @param specificationVendor the specificationVendor of extension
-     */
-    public void setSpecificationVendor( final String specificationVendor )
-    {
-        verifyNotAReference();
-        m_specificationVendor = specificationVendor;
-    }
-
-    /**
-     * Set the implementationVendorID of extension.
-     *
-     * @param implementationVendorID the implementationVendorID of extension
-     */
-    public void setImplementationVendorId( final String implementationVendorID )
-    {
-        verifyNotAReference();
-        m_implementationVendorID = implementationVendorID;
-    }
-
-    /**
-     * Set the implementationVendor of extension.
-     *
-     * @param implementationVendor the implementationVendor of extension
-     */
-    public void setImplementationVendor( final String implementationVendor )
-    {
-        verifyNotAReference();
-        m_implementationVendor = implementationVendor;
-    }
-
-    /**
-     * Set the implementationVersion of extension.
-     *
-     * @param implementationVersion the implementationVersion of extension
-     */
-    public void setImplementationVersion( final String implementationVersion )
-    {
-        verifyNotAReference();
-        m_implementationVersion = new DeweyDecimal( implementationVersion );
-    }
-
-    /**
-     * Set the implementationURL of extension.
-     *
-     * @param implementationURL the implementationURL of extension
-     */
-    public void setImplementationUrl( final String implementationURL )
-    {
-        verifyNotAReference();
-        m_implementationURL = implementationURL;
-    }
-
-    /**
-     * Makes this instance in effect a reference to another ExtensionAdapter
-     * instance.
-     *
-     * <p>You must not set another attribute or nest elements inside
-     * this element if you make it a reference.</p>
-     *
-     * @param reference the reference to which this instance is associated
-     * @exception BuildException if this instance already has been configured.
-     */
-    public void setRefid( final Reference reference )
-        throws BuildException
-    {
-        if( null != m_extensionName ||
-            null != m_specificationVersion ||
-            null != m_specificationVendor ||
-            null != m_implementationVersion ||
-            null != m_implementationVendorID ||
-            null != m_implementationVendor ||
-            null != m_implementationURL )
-        {
-            throw tooManyAttributes();
-        }
-        // change this to get the objects from the other reference
-        Object o = reference.getReferencedObject( getProject() );
-        if( o instanceof ExtensionAdapter )
-        {
-            final ExtensionAdapter other = (ExtensionAdapter)o;
-            m_extensionName = other.m_extensionName;
-            m_specificationVersion = other.m_specificationVersion;
-            m_specificationVendor = other.m_specificationVendor;
-            m_implementationVersion = other.m_implementationVersion;
-            m_implementationVendorID = other.m_implementationVendorID;
-            m_implementationVendor = other.m_implementationVendor;
-            m_implementationURL = other.m_implementationURL;
-        }
-        else
-        {
-            final String message =
-                reference.getRefId() + " doesn\'t refer to a Extension";
-            throw new BuildException( message );
-        }
-
-        super.setRefid( reference );
-    }
-
-    private void verifyNotAReference()
-        throws BuildException
-    {
-        if( isReference() )
-        {
-            throw tooManyAttributes();
-        }
-    }
-
-    /**
-     * Convert this adpater object into an extension object.
-     *
-     * @return the extension object
-     */
-    Extension toExtension()
-        throws BuildException
-    {
-        if( null == m_extensionName )
-        {
-            final String message = "Extension is missing name.";
-            throw new BuildException( message );
-        }
-
-        String specificationVersion = null;
-        if( null != m_specificationVersion )
-        {
-            specificationVersion = m_specificationVersion.toString();
-        }
-        String implementationVersion = null;
-        if( null != m_implementationVersion )
-        {
-            implementationVersion = m_implementationVersion.toString();
-        }
-        return new Extension( m_extensionName,
-                              specificationVersion,
-                              m_specificationVendor,
-                              implementationVersion,
-                              m_implementationVendorID,
-                              m_implementationVendor,
-                              m_implementationURL );
-    }
-
-    public String toString()
-    {
-        return "{" + toExtension().toString() + "}";
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/extension/ExtensionResolver.java b/src/main/org/apache/tools/ant/taskdefs/optional/extension/ExtensionResolver.java
deleted file mode 100644
index e9214b2..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/extension/ExtensionResolver.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.extension;
-
-import java.io.File;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-
-/**
- * Interface to locate a File that satisfies extension.
- *
- * @author <a href="mailto:peter@apache.org">Peter Donald</a>
- * @version $Revision$ $Date$
- */
-public interface ExtensionResolver
-{
-    /**
-     * Attempt to locate File that satisfies
-     * extension via resolver.
-     *
-     * @param extension the extension
-     * @return the File satisfying extension, null
-     *         if can not resolve extension
-     * @throws BuildException if error occurs attempting to
-     *         resolve extension
-     */
-    File resolve( Extension extension, Project project )
-        throws BuildException;
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/extension/ExtensionSet.java b/src/main/org/apache/tools/ant/taskdefs/optional/extension/ExtensionSet.java
deleted file mode 100644
index f21dc9b..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/extension/ExtensionSet.java
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.extension;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.types.DataType;
-import org.apache.tools.ant.types.Reference;
-import org.apache.tools.ant.types.FileSet;
-
-/**
- * The Extension set lists a set of "Optional Packages" /
- * "Extensions".
- *
- * @author <a href="mailto:peter@apache.org">Peter Donald</a>
- * @version $Revision$ $Date$
- * @ant.data-type name="extension-set"
- */
-public class ExtensionSet
-    extends DataType
-{
-    /**
-     * ExtensionAdapter objects representing extensions.
-     */
-    private final ArrayList m_extensions = new ArrayList();
-
-    /**
-     * Filesets specifying all the extensions wanted.
-     */
-    private final ArrayList m_extensionsFilesets = new ArrayList();
-
-    /**
-     * Adds an extension that this library requires.
-     *
-     * @param extensionAdapter an extension that this library requires.
-     */
-    public void addExtension( final ExtensionAdapter extensionAdapter )
-    {
-        m_extensions.add( extensionAdapter );
-    }
-
-    /**
-     * Adds a set of files about which extensions data will be extracted.
-     *
-     * @param fileSet a set of files about which extensions data will be extracted.
-     */
-    public void addLibfileset( final LibFileSet fileSet )
-    {
-        m_extensionsFilesets.add( fileSet );
-    }
-
-    /**
-     * Adds a set of files about which extensions data will be extracted.
-     *
-     * @param fileSet a set of files about which extensions data will be extracted.
-     */
-    public void addFileset( final FileSet fileSet )
-    {
-        m_extensionsFilesets.add( fileSet );
-    }
-
-    /**
-     * Extract a set of Extension objects from the ExtensionSet.
-     *
-     * @throws BuildException if an error occurs
-     */
-    public Extension[] toExtensions( final Project project )
-        throws BuildException
-    {
-        final ArrayList extensions = ExtensionUtil.toExtensions( m_extensions );
-        ExtensionUtil.extractExtensions( project, extensions, m_extensionsFilesets );
-        return (Extension[])extensions.toArray( new Extension[ extensions.size() ] );
-    }
-
-    /**
-     * Makes this instance in effect a reference to another ExtensionSet
-     * instance.
-     *
-     * <p>You must not set another attribute or nest elements inside
-     * this element if you make it a reference.</p>
-     *
-     * @param reference the reference to which this instance is associated
-     * @exception BuildException if this instance already has been configured.
-     */
-    public void setRefid( final Reference reference )
-        throws BuildException
-    {
-        if( !m_extensions.isEmpty() ||
-            !m_extensionsFilesets.isEmpty() )
-        {
-            throw tooManyAttributes();
-        }
-        // change this to get the objects from the other reference
-        final Object object =
-            reference.getReferencedObject( getProject() );
-        if( object instanceof ExtensionSet )
-        {
-            final ExtensionSet other = (ExtensionSet)object;
-            m_extensions.addAll( other.m_extensions );
-            m_extensionsFilesets.addAll( other.m_extensionsFilesets );
-        }
-        else
-        {
-            final String message =
-                reference.getRefId() + " doesn\'t refer to a ExtensionSet";
-            throw new BuildException( message );
-        }
-
-        super.setRefid( reference );
-    }
-
-    public String toString()
-    {
-        return "ExtensionSet" + Arrays.asList( toExtensions( getProject() ) );
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/extension/ExtensionUtil.java b/src/main/org/apache/tools/ant/taskdefs/optional/extension/ExtensionUtil.java
deleted file mode 100644
index 22d1576..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/extension/ExtensionUtil.java
+++ /dev/null
@@ -1,262 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.extension;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.jar.JarFile;
-import java.util.jar.Manifest;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.DirectoryScanner;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.types.FileSet;
-
-/**
- * A set of useful methods relating to extensions.
- *
- * @author <a href="mailto:peter@apache.org">Peter Donald</a>
- * @version $Revision$ $Date$
- */
-public class ExtensionUtil
-{
-    /**
-     * Convert a list of extensionAdapter objects to extensions.
-     *
-     * @param adapters the list of ExtensionAdapterss to add to convert
-     * @throws BuildException if an error occurs
-     */
-    static ArrayList toExtensions( final ArrayList adapters )
-        throws BuildException
-    {
-        final ArrayList results = new ArrayList();
-
-        final int size = adapters.size();
-        for( int i = 0; i < size; i++ )
-        {
-            final ExtensionAdapter adapter =
-                (ExtensionAdapter)adapters.get( i );
-            final Extension extension = adapter.toExtension();
-            results.add( extension );
-        }
-
-        return results;
-    }
-
-    /**
-     * Generate a list of extensions from a specified fileset.
-     *
-     * @param librarys the list to add extensions to
-     * @param fileset the filesets containing librarys
-     * @throws BuildException if an error occurs
-     */
-    static void extractExtensions( final Project project,
-                                   final ArrayList librarys,
-                                   final ArrayList fileset )
-        throws BuildException
-    {
-        if( !fileset.isEmpty() )
-        {
-            final Extension[] extensions = getExtensions( project,
-                                                          fileset );
-            for( int i = 0; i < extensions.length; i++ )
-            {
-                librarys.add( extensions[ i ] );
-            }
-        }
-    }
-
-    /**
-     * Retrieve extensions from the specified librarys.
-     *
-     * @param librarys the filesets for librarys
-     * @return the extensions contained in librarys
-     * @throws BuildException if failing to scan librarys
-     */
-    private static Extension[] getExtensions( final Project project,
-                                              final ArrayList librarys )
-        throws BuildException
-    {
-        final ArrayList extensions = new ArrayList();
-        final Iterator iterator = librarys.iterator();
-        while( iterator.hasNext() )
-        {
-            final FileSet fileSet = (FileSet)iterator.next();
-
-            boolean includeImpl = true;
-            boolean includeURL = true;
-
-            if( fileSet instanceof LibFileSet )
-            {
-                LibFileSet libFileSet = (LibFileSet)fileSet;
-                includeImpl = libFileSet.isIncludeImpl();
-                includeURL = libFileSet.isIncludeURL();
-            }
-
-            final DirectoryScanner scanner = fileSet.getDirectoryScanner( project );
-            final File basedir = scanner.getBasedir();
-            final String[] files = scanner.getIncludedFiles();
-            for( int i = 0; i < files.length; i++ )
-            {
-                final File file = new File( basedir, files[ i ] );
-                loadExtensions( file, extensions, includeImpl, includeURL );
-            }
-        }
-        return (Extension[])extensions.toArray( new Extension[ extensions.size() ] );
-    }
-
-    /**
-     * Load list of available extensions from specified file.
-     *
-     * @param file the file
-     * @param extensionList the list to add available extensions to
-     * @throws BuildException if there is an error
-     */
-    private static void loadExtensions( final File file,
-                                        final ArrayList extensionList,
-                                        final boolean includeImpl,
-                                        final boolean includeURL )
-        throws BuildException
-    {
-        try
-        {
-            final JarFile jarFile = new JarFile( file );
-            final Extension[] extensions =
-                Extension.getAvailable( jarFile.getManifest() );
-            for( int i = 0; i < extensions.length; i++ )
-            {
-                final Extension extension = extensions[ i ];
-                addExtension( extensionList, extension, includeImpl, includeURL );
-            }
-        }
-        catch( final Exception e )
-        {
-            throw new BuildException( e.getMessage(), e );
-        }
-    }
-
-    /**
-     * Add extension to list.
-     * If extension should not have implementation details but
-     * does strip them. If extension should not have url but does
-     * then strip it.
-     *
-     * @param extensionList the list of extensions to add to
-     * @param originalExtension the extension
-     * @param includeImpl false to exclude implementation details
-     * @param includeURL false to exclude implementation URL
-     */
-    private static void addExtension( final ArrayList extensionList,
-                                      final Extension originalExtension,
-                                      final boolean includeImpl,
-                                      final boolean includeURL )
-    {
-        Extension extension = originalExtension;
-        if( !includeURL &&
-            null != extension.getImplementationURL() )
-        {
-            extension =
-                new Extension( extension.getExtensionName(),
-                               extension.getSpecificationVersion().toString(),
-                               extension.getSpecificationVendor(),
-                               extension.getImplementationVersion().toString(),
-                               extension.getImplementationVendor(),
-                               extension.getImplementationVendorID(),
-                               null );
-        }
-
-        final boolean hasImplAttributes =
-            null != extension.getImplementationURL() ||
-            null != extension.getImplementationVersion() ||
-            null != extension.getImplementationVendorID() ||
-            null != extension.getImplementationVendor();
-
-        if( !includeImpl && hasImplAttributes )
-        {
-            extension =
-                new Extension( extension.getExtensionName(),
-                               extension.getSpecificationVersion().toString(),
-                               extension.getSpecificationVendor(),
-                               null,
-                               null,
-                               null,
-                               extension.getImplementationURL() );
-        }
-
-        extensionList.add( extension );
-    }
-
-    /**
-     * retrieve manifest for specified file.
-     *
-     * @param file the file
-     * @return the manifest
-     * @throws BuildException if errror occurs (file not exist,
-     *         file not a jar, manifest not exist in file)
-     */
-    static Manifest getManifest( final File file )
-        throws BuildException
-    {
-        try
-        {
-            final JarFile jarFile = new JarFile( file );
-            return jarFile.getManifest();
-        }
-        catch( final IOException ioe )
-        {
-            throw new BuildException( ioe.getMessage(), ioe );
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/extension/ExtraAttribute.java b/src/main/org/apache/tools/ant/taskdefs/optional/extension/ExtraAttribute.java
deleted file mode 100644
index ceac781..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/extension/ExtraAttribute.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.extension;
-
-import org.apache.tools.ant.BuildException;
-
-/**
- * Simple holder for extra attributes in main section of manifest.
- *
- * @author <a href="mailto:peter@apache.org">Peter Donald</a>
- * @version $Revision$ $Date$
- * @todo Refactor this and all the other parameter, sysproperty,
- *   property etc into a single class in framework
- */
-public class ExtraAttribute
-{
-    private String m_name;
-    private String m_value;
-
-    /**
-     * Set the name of the parameter.
-     *
-     * @param name the name of parameter
-     */
-    public void setName( final String name )
-    {
-        m_name = name;
-    }
-
-    /**
-     * Set the value of the parameter.
-     *
-     * @param value the parameter value
-     */
-    public void setValue( final String value )
-    {
-        m_value = value;
-    }
-
-    /**
-     * Retrieve name of parameter.
-     *
-     * @return the name of parameter.
-     */
-    String getName()
-    {
-        return m_name;
-    }
-
-    /**
-     * Retrieve the value of parameter.
-     *
-     * @return the value of parameter.
-     */
-    String getValue()
-    {
-        return m_value;
-    }
-
-    /**
-     * Make sure that neither the name or the value
-     * is null.
-     */
-    public void validate()
-        throws BuildException
-    {
-        if( null == m_name )
-        {
-            final String message = "Missing name from parameter.";
-            throw new BuildException( message );
-        }
-        else if( null == m_value )
-        {
-            final String message = "Missing value from parameter " + m_name + ".";
-            throw new BuildException( message );
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/extension/JarLibAvailableTask.java b/src/main/org/apache/tools/ant/taskdefs/optional/extension/JarLibAvailableTask.java
deleted file mode 100644
index 393b5bc..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/extension/JarLibAvailableTask.java
+++ /dev/null
@@ -1,210 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.extension;
-
-import java.io.File;
-import java.util.Iterator;
-import java.util.Vector;
-import java.util.jar.Manifest;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Task;
-
-/**
- * Check whether an extension is present in a fileset or an extensionSet.
- *
- * @author <a href="mailto:peter@apache.org">Peter Donald</a>
- * @ant.task name="jarlib-available"
- */
-public class JarLibAvailableTask
-    extends Task
-{
-    /**
-     * The library to display information about.
-     */
-    private File m_file;
-
-    /**
-     * Filesets specifying all the librarys
-     * to display information about.
-     */
-    private final Vector m_extensionSets = new Vector();
-
-    /**
-     * The name of the property to set if extension is available.
-     */
-    private String m_property;
-
-    /**
-     * The extension that is required.
-     */
-    private ExtensionAdapter m_extension;
-
-    /**
-     * The name of property to set if extensions is available.
-     *
-     * @param property The name of property to set if extensions is available.
-     */
-    public void setProperty( final String property )
-    {
-        m_property = property;
-    }
-
-    /**
-     * The jar library to display information for.
-     *
-     * @param file The jar library to display information for.
-     */
-    public void setFile( final File file )
-    {
-        m_file = file;
-    }
-
-    /**
-     * Set the Extension looking for.
-     *
-     * @param extension Set the Extension looking for.
-     */
-    public void addConfiguredExtension( final ExtensionAdapter extension )
-    {
-        if( null != m_extension )
-        {
-            final String message = "Can not specify extension to " +
-                "search for multiple times.";
-            throw new BuildException( message );
-        }
-        m_extension = extension;
-    }
-
-    /**
-     * Adds a set of extensions to search in.
-     *
-     * @param extensionSet a set of extensions to search in.
-     */
-    public void addConfiguredExtensionSet( final ExtensionSet extensionSet )
-    {
-        m_extensionSets.addElement( extensionSet );
-    }
-
-    public void execute()
-        throws BuildException
-    {
-        validate();
-
-        final Extension test = m_extension.toExtension();
-
-        // Check if list of files to check has been specified
-        if( !m_extensionSets.isEmpty() )
-        {
-            final Iterator iterator = m_extensionSets.iterator();
-            while( iterator.hasNext() )
-            {
-                final ExtensionSet extensionSet = (ExtensionSet)iterator.next();
-                final Extension[] extensions =
-                    extensionSet.toExtensions( getProject() );
-                for( int i = 0; i < extensions.length; i++ )
-                {
-                    final Extension extension = extensions[ i ];
-                    if( extension.isCompatibleWith( test ) )
-                    {
-                        getProject().setNewProperty( m_property, "true" );
-                    }
-                }
-            }
-        }
-        else
-        {
-            final Manifest manifest = ExtensionUtil.getManifest( m_file );
-            final Extension[] extensions = Extension.getAvailable( manifest );
-            for( int i = 0; i < extensions.length; i++ )
-            {
-                final Extension extension = extensions[ i ];
-                if( extension.isCompatibleWith( test ) )
-                {
-                    getProject().setNewProperty( m_property, "true" );
-                }
-            }
-        }
-    }
-
-    /**
-     * Validate the tasks parameters.
-     *
-     * @throws BuildException if invalid parameters found
-     */
-    private void validate()
-        throws BuildException
-    {
-        if( null == m_extension )
-        {
-            final String message = "Extension element must be specified.";
-            throw new BuildException( message );
-        }
-
-        if( null == m_file && m_extensionSets.isEmpty() )
-        {
-            final String message = "File attribute not specified.";
-            throw new BuildException( message );
-        }
-        if( null != m_file && !m_file.exists() )
-        {
-            final String message = "File '" + m_file + "' does not exist.";
-            throw new BuildException( message );
-        }
-        if( null != m_file && !m_file.isFile() )
-        {
-            final String message = "\'" + m_file + "\' is not a file.";
-            throw new BuildException( message );
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/extension/JarLibDisplayTask.java b/src/main/org/apache/tools/ant/taskdefs/optional/extension/JarLibDisplayTask.java
deleted file mode 100644
index be5382b..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/extension/JarLibDisplayTask.java
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.extension;
-
-import java.io.File;
-import java.util.Iterator;
-import java.util.Vector;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.DirectoryScanner;
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.types.FileSet;
-
-/**
- * Display the "Optional Package" and "Package Specification" information
- * contained within the specified jars.
- *
- * <p>Prior to JDK1.3, an "Optional Package" was known as an Extension.
- * The specification for this mechanism is available in the JDK1.3
- * documentation in the directory
- * $JDK_HOME/docs/guide/extensions/versioning.html. Alternatively it is
- * available online at <a href="http://java.sun.com/j2se/1.3/docs/guide/extensions/versioning.html">
- * http://java.sun.com/j2se/1.3/docs/guide/extensions/versioning.html</a>.</p>
- *
- * @author <a href="mailto:peter@apache.org">Peter Donald</a>
- * @ant.task name="jarlib-display"
- */
-public class JarLibDisplayTask
-    extends Task
-{
-    /**
-     * The library to display information about.
-     */
-    private File m_file;
-
-    /**
-     * Filesets specifying all the librarys
-     * to display information about.
-     */
-    private final Vector m_filesets = new Vector();
-
-    /**
-     * The jar library to display information for.
-     *
-     * @param file The jar library to display information for.
-     */
-    public void setFile( final File file )
-    {
-        m_file = file;
-    }
-
-    /**
-     * Adds a set of files about which library data will be displayed.
-     *
-     * @param fileSet a set of files about which library data will be displayed.
-     */
-    public void addFileset( final FileSet fileSet )
-    {
-        m_filesets.addElement( fileSet );
-    }
-
-    public void execute()
-        throws BuildException
-    {
-        validate();
-
-        final LibraryDisplayer displayer = new LibraryDisplayer();
-        // Check if list of files to check has been specified
-        if( !m_filesets.isEmpty() )
-        {
-            final Iterator iterator = m_filesets.iterator();
-            while( iterator.hasNext() )
-            {
-                final FileSet fileSet = (FileSet)iterator.next();
-                final DirectoryScanner scanner = fileSet.getDirectoryScanner( getProject() );
-                final File basedir = scanner.getBasedir();
-                final String[] files = scanner.getIncludedFiles();
-                for( int i = 0; i < files.length; i++ )
-                {
-                    final File file = new File( basedir, files[ i ] );
-                    displayer.displayLibrary( file );
-                }
-            }
-        }
-        else
-        {
-            displayer.displayLibrary( m_file );
-        }
-    }
-
-    /**
-     * Validate the tasks parameters.
-     *
-     * @throws BuildException if invalid parameters found
-     */
-    private void validate()
-        throws BuildException
-    {
-        if( null == m_file && m_filesets.isEmpty() )
-        {
-            final String message = "File attribute not specified.";
-            throw new BuildException( message );
-        }
-        if( null != m_file && !m_file.exists() )
-        {
-            final String message = "File '" + m_file + "' does not exist.";
-            throw new BuildException( message );
-        }
-        if( null != m_file && !m_file.isFile() )
-        {
-            final String message = "\'" + m_file + "\' is not a file.";
-            throw new BuildException( message );
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/extension/JarLibManifestTask.java b/src/main/org/apache/tools/ant/taskdefs/optional/extension/JarLibManifestTask.java
deleted file mode 100644
index 7f485a9..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/extension/JarLibManifestTask.java
+++ /dev/null
@@ -1,378 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.extension;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.jar.Attributes;
-import java.util.jar.Manifest;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.Project;
-
-/**
- * Task to generate a manifest that declares all the dependencies
- * in manifest. The dependencies are determined by looking in the
- * specified path and searching for Extension / "Optional Package"
- * specifications in the manifests of the jars.
- *
- * <p>Prior to JDK1.3, an "Optional Package" was known as an Extension.
- * The specification for this mechanism is available in the JDK1.3
- * documentation in the directory
- * $JDK_HOME/docs/guide/extensions/versioning.html. Alternatively it is
- * available online at <a href="http://java.sun.com/j2se/1.3/docs/guide/extensions/versioning.html">
- * http://java.sun.com/j2se/1.3/docs/guide/extensions/versioning.html</a>.</p>
- *
- * @author <a href="mailto:peter@apache.org">Peter Donald</a>
- * @ant.task name="jarlib-manifest"
- */
-public final class JarLibManifestTask
-    extends Task
-{
-    /**
-     * Version of manifest spec that task generates.
-     */
-    private static final String MANIFEST_VERSION = "1.0";
-
-    /**
-     * "Created-By" string used when creating manifest.
-     */
-    private static final String CREATED_BY = "Created-By";
-
-    /**
-     * The library to display information about.
-     */
-    private File m_destfile;
-
-    /**
-     * The extension supported by this library (if any).
-     */
-    private Extension m_extension;
-
-    /**
-     * ExtensionAdapter objects representing
-     * dependencies required by library.
-     */
-    private final ArrayList m_dependencies = new ArrayList();
-
-    /**
-     * ExtensionAdapter objects representing optional
-     * dependencies required by library.
-     */
-    private final ArrayList m_optionals = new ArrayList();
-
-    /**
-     * Extra attributes the user specifies for main section
-     * in manifest.
-     */
-    private final ArrayList m_extraAttributes = new ArrayList();
-
-    /**
-     * The location where generated manifest is placed.
-     *
-     * @param destfile The location where generated manifest is placed.
-     */
-    public void setDestfile( final File destfile )
-    {
-        m_destfile = destfile;
-    }
-
-    /**
-     * Adds an extension that this library implements.
-     *
-     * @param extensionAdapter an extension that this library implements.
-     */
-    public void addConfiguredExtension( final ExtensionAdapter extensionAdapter )
-        throws BuildException
-    {
-        if( null != m_extension )
-        {
-            final String message =
-                "Can not have multiple extensions defined in one library.";
-            throw new BuildException( message );
-        }
-        else
-        {
-            m_extension = extensionAdapter.toExtension();
-        }
-    }
-
-    /**
-     * Adds a set of extensions that this library requires.
-     *
-     * @param extensionSet a set of extensions that this library requires.
-     */
-    public void addConfiguredDepends( final ExtensionSet extensionSet )
-    {
-        m_dependencies.add( extensionSet );
-    }
-
-    /**
-     * Adds a set of extensions that this library optionally requires.
-     *
-     * @param extensionSet a set of extensions that this library optionally requires.
-     */
-    public void addConfiguredOptions( final ExtensionSet extensionSet )
-    {
-        m_optionals.add( extensionSet );
-    }
-
-    /**
-     * Adds an attribute that is to be put in main section of manifest.
-     *
-     * @param attribute an attribute that is to be put in main section of manifest.
-     */
-    public void addConfiguredAttribute( final ExtraAttribute attribute )
-    {
-        m_extraAttributes.add( attribute );
-    }
-
-    public void execute()
-        throws BuildException
-    {
-        validate();
-
-        final Manifest manifest = new Manifest();
-        final Attributes attributes = manifest.getMainAttributes();
-
-        attributes.put( Attributes.Name.MANIFEST_VERSION, MANIFEST_VERSION );
-        final String createdBy = "Apache Ant " + getProject().getProperty( "ant.version" );
-        attributes.putValue( CREATED_BY, createdBy );
-
-        appendExtraAttributes( attributes );
-
-        if( null != m_extension )
-        {
-            Extension.addExtension( m_extension, attributes );
-        }
-
-        //Add all the dependency data to manifest for dependencies
-        final ArrayList depends = toExtensions( m_dependencies );
-        appendExtensionList( attributes,
-                             Extension.EXTENSION_LIST,
-                             "lib",
-                             depends.size() );
-        appendLibraryList( attributes, "lib", depends );
-
-        //Add all the dependency data to manifest for "optional"
-        //dependencies
-        final ArrayList option = toExtensions( m_optionals );
-        appendExtensionList( attributes,
-                             Extension.OPTIONAL_EXTENSION_LIST,
-                             "opt",
-                             option.size() );
-        appendLibraryList( attributes, "opt", option );
-
-        try
-        {
-            final String message = "Generating manifest " + m_destfile.getAbsoluteFile();
-            log( message, Project.MSG_INFO );
-            writeManifest( manifest );
-        }
-        catch( final IOException ioe )
-        {
-            throw new BuildException( ioe.getMessage(), ioe );
-        }
-    }
-
-    /**
-     * Validate the tasks parameters.
-     *
-     * @throws BuildException if invalid parameters found
-     */
-    private void validate()
-        throws BuildException
-    {
-        if( null == m_destfile )
-        {
-            final String message = "Destfile attribute not specified.";
-            throw new BuildException( message );
-        }
-        if( m_destfile.exists() && !m_destfile.isFile() )
-        {
-            final String message = m_destfile + " is not a file.";
-            throw new BuildException( message );
-        }
-    }
-
-    /**
-     * Add any extra attributes to the manifest.
-     *
-     * @param attributes the manifest section to write
-     *        attributes to
-     */
-    private void appendExtraAttributes( final Attributes attributes )
-    {
-        final Iterator iterator = m_extraAttributes.iterator();
-        while( iterator.hasNext() )
-        {
-            final ExtraAttribute attribute =
-                (ExtraAttribute)iterator.next();
-            attributes.putValue( attribute.getName(),
-                                 attribute.getValue() );
-        }
-    }
-
-    /**
-     * Write out manifest to destfile.
-     *
-     * @param manifest the manifest
-     * @throws IOException if error writing file
-     */
-    private void writeManifest( final Manifest manifest )
-        throws IOException
-    {
-        FileOutputStream output = null;
-        try
-        {
-            output = new FileOutputStream( m_destfile );
-            manifest.write( output );
-            output.flush();
-        }
-        finally
-        {
-            if( null != output )
-            {
-                try
-                {
-                    output.close();
-                }
-                catch( IOException e )
-                {
-                }
-            }
-        }
-    }
-
-    /**
-     * Append specified extensions to specified attributes.
-     * Use the extensionKey to list the extensions, usually "Extension-List:"
-     * for required dependencies and "Optional-Extension-List:" for optional
-     * dependencies. NOTE: "Optional" dependencies are not part of the
-     * specification.
-     *
-     * @param attributes the attributes to add extensions to
-     * @param extensions the list of extensions
-     * @throws BuildException if an error occurs
-     */
-    private void appendLibraryList( final Attributes attributes,
-                                    final String listPrefix,
-                                    final ArrayList extensions )
-        throws BuildException
-    {
-        final int size = extensions.size();
-        for( int i = 0; i < size; i++ )
-        {
-            final Extension extension = (Extension)extensions.get( i );
-            final String prefix = listPrefix + i + "-";
-            Extension.addExtension( extension, prefix, attributes );
-        }
-    }
-
-    /**
-     * Append an attribute such as "Extension-List: lib0 lib1 lib2"
-     * using specified prefix and counting up to specified size.
-     * Also use specified extensionKey so that can generate list of
-     * optional dependencies aswell.
-     *
-     * @param size the number of librarys to list
-     * @param listPrefix the prefix for all librarys
-     * @param attributes the attributes to add key-value to
-     * @param extensionKey the key to use
-     */
-    private void appendExtensionList( final Attributes attributes,
-                                      final Attributes.Name extensionKey,
-                                      final String listPrefix,
-                                      final int size )
-    {
-        final StringBuffer sb = new StringBuffer();
-        for( int i = 0; i < size; i++ )
-        {
-            sb.append( listPrefix + i );
-            sb.append( ' ' );
-        }
-
-        //add in something like
-        //"Extension-List: javahelp java3d"
-        attributes.put( extensionKey, sb.toString() );
-    }
-
-    /**
-     * Convert a list of ExtensionSet objects to extensions.
-     *
-     * @param extensionSets the list of ExtensionSets to add to list
-     * @throws BuildException if an error occurs
-     */
-    private ArrayList toExtensions( final ArrayList extensionSets )
-        throws BuildException
-    {
-        final ArrayList results = new ArrayList();
-
-        final int size = extensionSets.size();
-        for( int i = 0; i < size; i++ )
-        {
-            final ExtensionSet set = (ExtensionSet)extensionSets.get( i );
-            final Extension[] extensions = set.toExtensions( getProject() );
-            for( int j = 0; j < extensions.length; j++ )
-            {
-                results.add( extensions[ j ] );
-            }
-        }
-
-        return results;
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/extension/JarLibResolveTask.java b/src/main/org/apache/tools/ant/taskdefs/optional/extension/JarLibResolveTask.java
deleted file mode 100644
index d4845da..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/extension/JarLibResolveTask.java
+++ /dev/null
@@ -1,328 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.extension;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.jar.Manifest;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.taskdefs.optional.extension.resolvers.LocationResolver;
-import org.apache.tools.ant.taskdefs.optional.extension.resolvers.URLResolver;
-
-/**
- * Try to locate a jar to satisfy an extension and place
- * location of jar into property.
- *
- * @author <a href="mailto:peter@apache.org">Peter Donald</a>
- * @ant.task name="jarlib-resolver"
- */
-public class JarLibResolveTask
-    extends Task
-{
-    /**
-     * The name of the property in which the location of
-     * library is stored.
-     */
-    private String m_property;
-
-    /**
-     * The extension that is required.
-     */
-    private Extension m_extension;
-
-    /**
-     * The set of resolvers to use to attempt to locate library.
-     */
-    private final ArrayList m_resolvers = new ArrayList();
-
-    /**
-     * Flag to indicate that you should check that
-     * the librarys resolved actually contain
-     * extension and if they don't then raise
-     * an exception.
-     */
-    private boolean m_checkExtension = true;
-
-    /**
-     * Flag indicating whether or not you should
-     * throw a BuildException if you cannot resolve
-     * library.
-     */
-    private boolean m_failOnError = true;
-
-    /**
-     * The name of the property in which the location of
-     * library is stored.
-     *
-     * @param property The name of the property in which the location of
-     *                 library is stored.
-     */
-    public void setProperty( final String property )
-    {
-        m_property = property;
-    }
-
-    public void setCheckExtension( final boolean checkExtension )
-    {
-        m_checkExtension = checkExtension;
-    }
-
-    public void setFailOnError( final boolean failOnError )
-    {
-        m_failOnError = failOnError;
-    }
-
-    public void addConfiguredLocation( final LocationResolver location )
-    {
-        m_resolvers.add( location );
-    }
-
-    public void addConfiguredUrl( final URLResolver url )
-    {
-        m_resolvers.add( url );
-    }
-
-    /**
-     * Set the Extension looking for.
-     *
-     * @param extension Set the Extension looking for.
-     */
-    public void addConfiguredExtension( final ExtensionAdapter extension )
-    {
-        if( null != m_extension )
-        {
-            final String message = "Can not specify extension to " +
-                "resolve multiple times.";
-            throw new BuildException( message );
-        }
-        m_extension = extension.toExtension();
-    }
-
-    public void execute()
-        throws BuildException
-    {
-        validate();
-
-        getProject().log( "Resolving extension: " + m_extension,
-                          Project.MSG_VERBOSE );
-
-        String candidate =
-            getProject().getProperty( m_property );
-
-        if( null != candidate )
-        {
-            final String message = "Property Already set to: " + candidate;
-            if( m_failOnError )
-            {
-                throw new BuildException( message );
-            }
-            else
-            {
-                getProject().log( message, Project.MSG_ERR );
-                return;
-            }
-        }
-
-        final int size = m_resolvers.size();
-        for( int i = 0; i < size; i++ )
-        {
-            final ExtensionResolver resolver =
-                (ExtensionResolver)m_resolvers.get( i );
-
-            getProject().log( "Searching for extension using Resolver:" + resolver,
-                              Project.MSG_VERBOSE );
-
-            try
-            {
-                final File file =
-                    resolver.resolve( m_extension, getProject() );
-                try
-                {
-                    checkExtension( file );
-                    return;
-                }
-                catch( final BuildException be )
-                {
-                    final String message =
-                        "File " + file + " returned by resolver failed " +
-                        "to satisfy extension due to: " + be.getMessage();
-                    getProject().log( message, Project.MSG_WARN );
-                }
-            }
-            catch( final BuildException be )
-            {
-                final String message =
-                    "Failed to resolve extension to file " +
-                    "using resolver " + resolver + " due to: " + be;
-                getProject().log( message, Project.MSG_WARN );
-            }
-        }
-
-        missingExtension();
-    }
-
-    /**
-     * Utility method that will throw a {@link BuildException}
-     * if {@link #m_failOnError} is true else it just displays
-     * a warning.
-     */
-    private void missingExtension()
-    {
-        final String message =
-            "Unable to resolve extension to a file";
-        if( m_failOnError )
-        {
-            throw new BuildException( message );
-        }
-        else
-        {
-            getProject().log( message, Project.MSG_ERR );
-        }
-    }
-
-    /**
-     * Check if specified file satisfies extension.
-     * If it does then set the relevent property
-     * else throw a BuildException.
-     *
-     * @param file the candidate library
-     * @throws BuildException if library does not satisfy extension
-     */
-    private void checkExtension( final File file )
-    {
-        if( !file.exists() )
-        {
-            final String message =
-                "File " + file + " does not exist";
-            throw new BuildException( message );
-        }
-        if( !file.isFile() )
-        {
-            final String message =
-                "File " + file + " is not a file";
-            throw new BuildException( message );
-        }
-
-        if( !m_checkExtension )
-        {
-            final String message = "Setting property to " +
-                file + " without verifying library satisfies extension";
-            getProject().log( message, Project.MSG_VERBOSE );
-            setLibraryProperty( file );
-        }
-        else
-        {
-            getProject().log( "Checking file " + file +
-                              " to see if it satisfies extension",
-                              Project.MSG_VERBOSE );
-            final Manifest manifest =
-                ExtensionUtil.getManifest( file );
-            final Extension[] extensions =
-                Extension.getAvailable( manifest );
-            for( int i = 0; i < extensions.length; i++ )
-            {
-                final Extension extension = extensions[ i ];
-                if( extension.isCompatibleWith( m_extension ) )
-                {
-                    setLibraryProperty( file );
-                    return;
-                }
-            }
-
-            getProject().log( "File " + file + " skipped as it " +
-                              "does not satisfy extension",
-                              Project.MSG_VERBOSE );
-
-            final String message =
-                "File " + file + " does not satisfy extension";
-            throw new BuildException( message );
-        }
-    }
-
-    /**
-     * Utility method to set the appropriate property
-     * to indicate that specified file satisfies library
-     * requirements.
-     *
-     * @param file the library
-     */
-    private void setLibraryProperty( final File file )
-    {
-        getProject().setNewProperty( m_property,
-                                     file.getAbsolutePath() );
-    }
-
-    /**
-     * Validate the tasks parameters.
-     *
-     * @throws BuildException if invalid parameters found
-     */
-    private void validate()
-        throws BuildException
-    {
-        if( null == m_property )
-        {
-            final String message = "Property attribute must be specified.";
-            throw new BuildException( message );
-        }
-
-        if( null == m_extension )
-        {
-            final String message = "Extension element must be specified.";
-            throw new BuildException( message );
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/extension/LibFileSet.java b/src/main/org/apache/tools/ant/taskdefs/optional/extension/LibFileSet.java
deleted file mode 100644
index edbc86c..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/extension/LibFileSet.java
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.extension;
-
-import org.apache.tools.ant.types.FileSet;
-
-/**
- * LibFileSet represents a fileset containing libraries.
- * Asociated with the libraries is data pertaining to
- * how they are to be handled when building manifests.
- *
- * @author <a href="mailto:peter@apache.org">Peter Donald</a>
- * @version $Revision$ $Date$
- */
-public class LibFileSet
-    extends FileSet
-{
-    /**
-     * Flag indicating whether should include the
-     * "Implementation-URL" attribute in manifest.
-     * Defaults to false.
-     */
-    private boolean m_includeURL;
-
-    /**
-     * Flag indicating whether should include the
-     * "Implementation-*" attributes in manifest.
-     * Defaults to false.
-     */
-    private boolean m_includeImpl;
-
-    /**
-     * String that is the base URL for the librarys
-     * when constructing the "Implementation-URL"
-     * attribute. For instance setting the base to
-     * "http://jakarta.apache.org/avalon/libs/" and then
-     * including the library "excalibur-cli-1.0.jar" in the
-     * fileset will result in the "Implementation-URL" attribute
-     * being set to "http://jakarta.apache.org/avalon/libs/excalibur-cli-1.0.jar"
-     *
-     * Note this is only used if the library does not define
-     * "Implementation-URL" itself.
-     *
-     * Note that this also implies includeURL=true
-     */
-    private String m_urlBase;
-
-    /**
-     * Flag indicating whether should include the
-     * "Implementation-URL" attribute in manifest.
-     * Defaults to false.
-     *
-     * @param includeURL the flag
-     * @see #m_includeURL
-     */
-    public void setIncludeUrl( boolean includeURL )
-    {
-        m_includeURL = includeURL;
-    }
-
-    /**
-     * Flag indicating whether should include the
-     * "Implementation-*" attributes in manifest.
-     * Defaults to false.
-     *
-     * @param includeImpl the flag
-     * @see #m_includeImpl
-     */
-    public void setIncludeImpl( boolean includeImpl )
-    {
-        m_includeImpl = includeImpl;
-    }
-
-    /**
-     * Set the url base for fileset.
-     *
-     * @param urlBase the base url
-     * @see #m_urlBase
-     */
-    public void setUrlBase( String urlBase )
-    {
-        m_urlBase = urlBase;
-    }
-
-    /**
-     * Get the includeURL flag.
-     *
-     * @return the includeURL flag.
-     */
-    boolean isIncludeURL()
-    {
-        return m_includeURL;
-    }
-
-    /**
-     * Get the includeImpl flag.
-     *
-     * @return the includeImpl flag.
-     */
-    boolean isIncludeImpl()
-    {
-        return m_includeImpl;
-    }
-
-    /**
-     * Get the urlbase.
-     *
-     * @return the urlbase.
-     */
-    String getUrlBase()
-    {
-        return m_urlBase;
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/extension/LibraryDisplayer.java b/src/main/org/apache/tools/ant/taskdefs/optional/extension/LibraryDisplayer.java
deleted file mode 100644
index 6077658..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/extension/LibraryDisplayer.java
+++ /dev/null
@@ -1,210 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.extension;
-
-import java.io.File;
-import java.text.ParseException;
-import java.util.jar.Manifest;
-import org.apache.tools.ant.BuildException;
-
-/**
- * Utility class to output the information in a jar relating
- * to "Optional Packages" (formely known as "Extensions")
- * and Package Specifications.
- *
- * @author <a href="mailto:peter@apache.org">Peter Donald</a>
- * @version $Revision$ $Date$
- */
-class LibraryDisplayer
-{
-    /**
-     * Display the extensions and specifications contained
-     * within specified file.
-     *
-     * @param file the file
-     * @throws BuildException if fail to read file
-     */
-    void displayLibrary( final File file )
-        throws BuildException
-    {
-        final Manifest manifest = ExtensionUtil.getManifest( file );
-        displayLibrary( file, manifest );
-    }
-
-    /**
-     * Display the extensions and specifications contained
-     * within specified file.
-     *
-     * @param file the file to use while reporting
-     * @param manifest the manifest of file
-     * @throws BuildException if fail to read file
-     */
-    void displayLibrary( final File file,
-                         final Manifest manifest )
-        throws BuildException
-    {
-        final Extension[] available = Extension.getAvailable( manifest );
-        final Extension[] required = Extension.getRequired( manifest );
-        final Extension[] options = Extension.getOptions( manifest );
-        final Specification[] specifications = getSpecifications( manifest );
-
-        if( 0 == available.length &&
-            0 == required.length &&
-            0 == options.length &&
-            0 == specifications.length )
-        {
-            return;
-        }
-
-        final String message = "File: " + file;
-        final int size = message.length();
-        printLine( size );
-        System.out.println( message );
-        printLine( size );
-        if( 0 != available.length )
-        {
-            System.out.println( "Extensions Supported By Library:" );
-            for( int i = 0; i < available.length; i++ )
-            {
-                final Extension extension = available[ i ];
-                System.out.println( extension.toString() );
-            }
-        }
-
-        if( 0 != required.length )
-        {
-            System.out.println( "Extensions Required By Library:" );
-            for( int i = 0; i < required.length; i++ )
-            {
-                final Extension extension = required[ i ];
-                System.out.println( extension.toString() );
-            }
-        }
-
-        if( 0 != options.length )
-        {
-            System.out.println( "Extensions that will be used by Library if present:" );
-            for( int i = 0; i < options.length; i++ )
-            {
-                final Extension extension = options[ i ];
-                System.out.println( extension.toString() );
-            }
-        }
-
-        if( 0 != specifications.length )
-        {
-            System.out.println( "Specifications Supported By Library:" );
-            for( int i = 0; i < specifications.length; i++ )
-            {
-                final Specification specification = specifications[ i ];
-                displaySpecification( specification );
-            }
-        }
-    }
-
-    /**
-     * Print out a line of '-'s equal to specified size.
-     *
-     * @param size the number of dashes to printout
-     */
-    private void printLine( final int size )
-    {
-        for( int i = 0; i < size; i++ )
-        {
-            System.out.print( "-" );
-        }
-        System.out.println();
-    }
-
-    /**
-     * Get specifications from manifest.
-     *
-     * @param manifest the manifest
-     * @return the specifications or null if none
-     * @throws BuildException if malformed specification sections
-     */
-    private Specification[] getSpecifications( final Manifest manifest )
-        throws BuildException
-    {
-        try
-        {
-            return Specification.getSpecifications( manifest );
-        }
-        catch( final ParseException pe )
-        {
-            throw new BuildException( pe.getMessage(), pe );
-        }
-    }
-
-    /**
-     * Print out specification details.
-     *
-     * @param specification the specification
-     */
-    private void displaySpecification( final Specification specification )
-    {
-        final String[] sections = specification.getSections();
-        if( null != sections )
-        {
-            final StringBuffer sb = new StringBuffer( "Sections: " );
-            for( int i = 0; i < sections.length; i++ )
-            {
-                sb.append( " " );
-                sb.append( sections[ i ] );
-            }
-            System.out.println( sb );
-        }
-        System.out.println( specification.toString() );
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/extension/Specification.java b/src/main/org/apache/tools/ant/taskdefs/optional/extension/Specification.java
deleted file mode 100644
index 0d27709..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/extension/Specification.java
+++ /dev/null
@@ -1,694 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.extension;
-
-import java.text.ParseException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.jar.Attributes;
-import java.util.jar.Manifest;
-
-/**
- * <p>Utility class that represents either an available "Optional Package"
- * (formerly known as "Standard Extension") as described in the manifest
- * of a JAR file, or the requirement for such an optional package.</p>
- *
- * <p>For more information about optional packages, see the document
- * <em>Optional Package Versioning</em> in the documentation bundle for your
- * Java2 Standard Edition package, in file
- * <code>guide/extensions/versioning.html</code>.</p>
- *
- * WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
- *  This file is from excalibur.extension package. Dont edit this file
- * directly as there is no unit tests to make sure it is operational
- * in ant. Edit file in excalibur and run tests there before changing
- * ants file.
- * WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
- *
- * @author <a href="mailto:peter@apache.org">Peter Donald</a>
- * @version $Revision$ $Date$
- */
-public final class Specification
-{
-    /**
-     * Manifest Attribute Name object for SPECIFICATION_TITLE.
-     * @see Attributes.Name#SPECIFICATION_TITLE
-     */
-    public static final Attributes.Name SPECIFICATION_TITLE = Attributes.Name.SPECIFICATION_TITLE;
-
-    /**
-     * Manifest Attribute Name object for SPECIFICATION_VERSION.
-     * @see Attributes.Name#SPECIFICATION_VERSION
-     */
-    public static final Attributes.Name SPECIFICATION_VERSION = Attributes.Name.SPECIFICATION_VERSION;
-
-    /**
-     * Manifest Attribute Name object for SPECIFICATION_VENDOR.
-     * @see Attributes.Name#SPECIFICATION_VENDOR
-     */
-    public static final Attributes.Name SPECIFICATION_VENDOR = Attributes.Name.SPECIFICATION_VENDOR;
-
-    /**
-     * Manifest Attribute Name object for IMPLEMENTATION_TITLE.
-     * @see Attributes.Name#IMPLEMENTATION_TITLE
-     */
-    public static final Attributes.Name IMPLEMENTATION_TITLE = Attributes.Name.IMPLEMENTATION_TITLE;
-
-    /**
-     * Manifest Attribute Name object for IMPLEMENTATION_VERSION.
-     * @see Attributes.Name#IMPLEMENTATION_VERSION
-     */
-    public static final Attributes.Name IMPLEMENTATION_VERSION = Attributes.Name.IMPLEMENTATION_VERSION;
-
-    /**
-     * Manifest Attribute Name object for IMPLEMENTATION_VENDOR.
-     * @see Attributes.Name#IMPLEMENTATION_VENDOR
-     */
-    public static final Attributes.Name IMPLEMENTATION_VENDOR = Attributes.Name.IMPLEMENTATION_VENDOR;
-
-    /**
-     * Enum indicating that extension is compatible with other Package
-     * Specification.
-     */
-    public static final Compatability COMPATIBLE =
-        new Compatability( "COMPATIBLE" );
-
-    /**
-     * Enum indicating that extension requires an upgrade
-     * of specification to be compatible with other Package Specification.
-     */
-    public static final Compatability REQUIRE_SPECIFICATION_UPGRADE =
-        new Compatability( "REQUIRE_SPECIFICATION_UPGRADE" );
-
-    /**
-     * Enum indicating that extension requires a vendor
-     * switch to be compatible with other Package Specification.
-     */
-    public static final Compatability REQUIRE_VENDOR_SWITCH =
-        new Compatability( "REQUIRE_VENDOR_SWITCH" );
-
-    /**
-     * Enum indicating that extension requires an upgrade
-     * of implementation to be compatible with other Package Specification.
-     */
-    public static final Compatability REQUIRE_IMPLEMENTATION_CHANGE =
-        new Compatability( "REQUIRE_IMPLEMENTATION_CHANGE" );
-
-    /**
-     * Enum indicating that extension is incompatible with
-     * other Package Specification in ways other than other enums
-     * indicate). ie For example the other Package Specification
-     * may have a different ID.
-     */
-    public static final Compatability INCOMPATIBLE =
-        new Compatability( "INCOMPATIBLE" );
-
-    /**
-     * The name of the Package Specification.
-     */
-    private String m_specificationTitle;
-
-    /**
-     * The version number (dotted decimal notation) of the specification
-     * to which this optional package conforms.
-     */
-    private DeweyDecimal m_specificationVersion;
-
-    /**
-     * The name of the company or organization that originated the
-     * specification to which this specification conforms.
-     */
-    private String m_specificationVendor;
-
-    /**
-     * The title of implementation.
-     */
-    private String m_implementationTitle;
-
-    /**
-     * The name of the company or organization that produced this
-     * implementation of this specification.
-     */
-    private String m_implementationVendor;
-
-    /**
-     * The version string for implementation. The version string is
-     * opaque.
-     */
-    private String m_implementationVersion;
-
-    /**
-     * The sections of jar that the specification applies to.
-     */
-    private String[] m_sections;
-
-    /**
-     * Return an array of <code>Package Specification</code> objects.
-     * If there are no such optional packages, a zero-length array is returned.
-     *
-     * @param manifest Manifest to be parsed
-     * @return the Package Specifications extensions in specified manifest
-     */
-    public static Specification[] getSpecifications( final Manifest manifest )
-        throws ParseException
-    {
-        if( null == manifest )
-        {
-            return new Specification[ 0 ];
-        }
-
-        final ArrayList results = new ArrayList();
-
-        final Map entries = manifest.getEntries();
-        final Iterator keys = entries.keySet().iterator();
-        while( keys.hasNext() )
-        {
-            final String key = (String)keys.next();
-            final Attributes attributes = (Attributes)entries.get( key );
-            final Specification specification = getSpecification( key, attributes );
-            if( null != specification )
-            {
-                results.add( specification );
-            }
-        }
-
-        final ArrayList trimmedResults = removeDuplicates( results );
-        return (Specification[])trimmedResults.toArray( new Specification[ 0 ] );
-    }
-
-    /**
-     * The constructor to create Package Specification object.
-     * Note that every component is allowed to be specified
-     * but only the specificationTitle is mandatory.
-     *
-     * @param specificationTitle the name of specification.
-     * @param specificationVersion the specification Version.
-     * @param specificationVendor the specification Vendor.
-     * @param implementationTitle the title of implementation.
-     * @param implementationVersion the implementation Version.
-     * @param implementationVendor the implementation Vendor.
-     */
-    public Specification( final String specificationTitle,
-                          final String specificationVersion,
-                          final String specificationVendor,
-                          final String implementationTitle,
-                          final String implementationVersion,
-                          final String implementationVendor )
-    {
-        this( specificationTitle, specificationVersion, specificationVendor,
-              implementationTitle, implementationVersion, implementationVendor,
-              null );
-    }
-
-    /**
-     * The constructor to create Package Specification object.
-     * Note that every component is allowed to be specified
-     * but only the specificationTitle is mandatory.
-     *
-     * @param specificationTitle the name of specification.
-     * @param specificationVersion the specification Version.
-     * @param specificationVendor the specification Vendor.
-     * @param implementationTitle the title of implementation.
-     * @param implementationVersion the implementation Version.
-     * @param implementationVendor the implementation Vendor.
-     * @param sections the sections/packages that Specification applies to.
-     */
-    public Specification( final String specificationTitle,
-                          final String specificationVersion,
-                          final String specificationVendor,
-                          final String implementationTitle,
-                          final String implementationVersion,
-                          final String implementationVendor,
-                          final String[] sections )
-    {
-        m_specificationTitle = specificationTitle;
-        m_specificationVendor = specificationVendor;
-
-        if( null != specificationVersion )
-        {
-            try
-            {
-                m_specificationVersion = new DeweyDecimal( specificationVersion );
-            }
-            catch( final NumberFormatException nfe )
-            {
-                final String error = "Bad specification version format '" + specificationVersion +
-                    "' in '" + specificationTitle + "'. (Reason: " + nfe + ")";
-                throw new IllegalArgumentException( error );
-            }
-        }
-
-        m_implementationTitle = implementationTitle;
-        m_implementationVendor = implementationVendor;
-        m_implementationVersion = implementationVersion;
-
-        if( null == m_specificationTitle )
-        {
-            throw new NullPointerException( "specificationTitle" );
-        }
-
-        String[] copy = null;
-        if( null != sections )
-        {
-            copy = new String[ sections.length ];
-            System.arraycopy( sections, 0, copy, 0, sections.length );
-        }
-        m_sections = copy;
-    }
-
-    /**
-     * Get the title of the specification.
-     *
-     * @return the title of speciication
-     */
-    public String getSpecificationTitle()
-    {
-        return m_specificationTitle;
-    }
-
-    /**
-     * Get the vendor of the specification.
-     *
-     * @return the vendor of the specification.
-     */
-    public String getSpecificationVendor()
-    {
-        return m_specificationVendor;
-    }
-
-    /**
-     * Get the title of the specification.
-     *
-     * @return the title of the specification.
-     */
-    public String getImplementationTitle()
-    {
-        return m_implementationTitle;
-    }
-
-    /**
-     * Get the version of the specification.
-     *
-     * @return the version of the specification.
-     */
-    public DeweyDecimal getSpecificationVersion()
-    {
-        return m_specificationVersion;
-    }
-
-    /**
-     * Get the vendor of the extensions implementation.
-     *
-     * @return the vendor of the extensions implementation.
-     */
-    public String getImplementationVendor()
-    {
-        return m_implementationVendor;
-    }
-
-    /**
-     * Get the version of the implementation.
-     *
-     * @return the version of the implementation.
-     */
-    public String getImplementationVersion()
-    {
-        return m_implementationVersion;
-    }
-
-    /**
-     * Return an array containing sections to which specification applies
-     * or null if relevent to no sections.
-     *
-     * @return an array containing sections to which specification applies
-     *         or null if relevent to no sections.
-     */
-    public String[] getSections()
-    {
-        if( null == m_sections )
-        {
-            return null;
-        }
-        else
-        {
-            final String[] sections = new String[ m_sections.length ];
-            System.arraycopy( m_sections, 0, sections, 0, m_sections.length );
-            return sections;
-        }
-    }
-
-    /**
-     * Return a Compatibility enum indicating the relationship of this
-     * <code>Package Specification</code> with the specified <code>Extension</code>.
-     *
-     * @param other the other specification
-     * @return the enum indicating the compatability (or lack thereof)
-     *         of specifed Package Specification
-     */
-    public Compatability getCompatibilityWith( final Specification other )
-    {
-        // Specification Name must match
-        if( !m_specificationTitle.equals( other.getSpecificationTitle() ) )
-        {
-            return INCOMPATIBLE;
-        }
-
-        // Available specification version must be >= required
-        final DeweyDecimal specificationVersion = other.getSpecificationVersion();
-        if( null != specificationVersion )
-        {
-            if( null == m_specificationVersion ||
-                !isCompatible( m_specificationVersion, specificationVersion ) )
-            {
-                return REQUIRE_SPECIFICATION_UPGRADE;
-            }
-        }
-
-        // Implementation Vendor ID must match
-        final String implementationVendor = other.getImplementationVendor();
-        if( null != implementationVendor )
-        {
-            if( null == m_implementationVendor ||
-                !m_implementationVendor.equals( implementationVendor ) )
-            {
-                return REQUIRE_VENDOR_SWITCH;
-            }
-        }
-
-        // Implementation version must be >= required
-        final String implementationVersion = other.getImplementationVersion();
-        if( null != implementationVersion )
-        {
-            if( null == m_implementationVersion ||
-                !m_implementationVersion.equals( implementationVersion ) )
-            {
-                return REQUIRE_IMPLEMENTATION_CHANGE;
-            }
-        }
-
-        // This available optional package satisfies the requirements
-        return COMPATIBLE;
-    }
-
-    /**
-     * Return <code>true</code> if the specified <code>package</code>
-     * is satisfied by this <code>Specification</code>. Otherwise, return
-     * <code>false</code>.
-     *
-     * @param other the specification
-     * @return true if the specification is compatible with this specification
-     */
-    public boolean isCompatibleWith( final Specification other )
-    {
-        return ( COMPATIBLE == getCompatibilityWith( other ) );
-    }
-
-    /**
-     * Return a String representation of this object.
-     *
-     * @return string representation of object.
-     */
-    public String toString()
-    {
-        final String lineSeparator = System.getProperty( "line.separator" );
-        final String brace = ": ";
-
-        final StringBuffer sb = new StringBuffer( SPECIFICATION_TITLE.toString() );
-        sb.append( brace );
-        sb.append( m_specificationTitle );
-        sb.append( lineSeparator );
-
-        if( null != m_specificationVersion )
-        {
-            sb.append( SPECIFICATION_VERSION );
-            sb.append( brace );
-            sb.append( m_specificationVersion );
-            sb.append( lineSeparator );
-        }
-
-        if( null != m_specificationVendor )
-        {
-            sb.append( SPECIFICATION_VENDOR );
-            sb.append( brace );
-            sb.append( m_specificationVendor );
-            sb.append( lineSeparator );
-        }
-
-        if( null != m_implementationTitle )
-        {
-            sb.append( IMPLEMENTATION_TITLE );
-            sb.append( brace );
-            sb.append( m_implementationTitle );
-            sb.append( lineSeparator );
-        }
-
-        if( null != m_implementationVersion )
-        {
-            sb.append( IMPLEMENTATION_VERSION );
-            sb.append( brace );
-            sb.append( m_implementationVersion );
-            sb.append( lineSeparator );
-        }
-
-        if( null != m_implementationVendor )
-        {
-            sb.append( IMPLEMENTATION_VENDOR );
-            sb.append( brace );
-            sb.append( m_implementationVendor );
-            sb.append( lineSeparator );
-        }
-
-        return sb.toString();
-    }
-
-    /**
-     * Return <code>true</code> if the first version number is greater than
-     * or equal to the second; otherwise return <code>false</code>.
-     *
-     * @param first First version number (dotted decimal)
-     * @param second Second version number (dotted decimal)
-     */
-    private boolean isCompatible( final DeweyDecimal first, final DeweyDecimal second )
-    {
-        return first.isGreaterThanOrEqual( second );
-    }
-
-    /**
-     * Combine all specifications objects that are identical except
-     * for the sections.
-     *
-     * <p>Note this is very inefficent and should probably be fixed
-     * in the future.</p>
-     *
-     * @param list the array of results to trim
-     * @return an array list with all duplicates removed
-     */
-    private static ArrayList removeDuplicates( final ArrayList list )
-    {
-        final ArrayList results = new ArrayList();
-        final ArrayList sections = new ArrayList();
-        while( list.size() > 0 )
-        {
-            final Specification specification = (Specification)list.remove( 0 );
-            final Iterator iterator = list.iterator();
-            while( iterator.hasNext() )
-            {
-                final Specification other = (Specification)iterator.next();
-                if( isEqual( specification, other ) )
-                {
-                    final String[] otherSections = other.getSections();
-                    if( null != sections )
-                    {
-                        sections.addAll( Arrays.asList( otherSections ) );
-                    }
-                    iterator.remove();
-                }
-            }
-
-            final Specification merged =
-                mergeInSections( specification, sections );
-            results.add( merged );
-            //Reset list of sections
-            sections.clear();
-        }
-
-        return results;
-    }
-
-    /**
-     * Test if two specifications are equal except for their sections.
-     *
-     * @param specification one specificaiton
-     * @param other the ohter specification
-     * @return true if two specifications are equal except for their
-     *         sections, else false
-     */
-    private static boolean isEqual( final Specification specification,
-                                    final Specification other )
-    {
-        return
-            specification.getSpecificationTitle().equals( other.getSpecificationTitle() ) &&
-            specification.getSpecificationVersion().isEqual( other.getSpecificationVersion() ) &&
-            specification.getSpecificationVendor().equals( other.getSpecificationVendor() ) &&
-            specification.getImplementationTitle().equals( other.getImplementationTitle() ) &&
-            specification.getImplementationVersion().equals( other.getImplementationVersion() ) &&
-            specification.getImplementationVendor().equals( other.getImplementationVendor() );
-    }
-
-    /**
-     * Merge the specified sections into specified section and return result.
-     * If no sections to be added then just return original specification.
-     *
-     * @param specification the specification
-     * @param sectionsToAdd the list of sections to merge
-     * @return the merged specification
-     */
-    private static Specification mergeInSections( final Specification specification,
-                                                  final ArrayList sectionsToAdd )
-    {
-        if( 0 == sectionsToAdd.size() )
-        {
-            return specification;
-        }
-        else
-        {
-            sectionsToAdd.addAll( Arrays.asList( specification.getSections() ) );
-
-            final String[] sections =
-                (String[])sectionsToAdd.toArray( new String[ sectionsToAdd.size() ] );
-
-            return new Specification( specification.getSpecificationTitle(),
-                                      specification.getSpecificationVersion().toString(),
-                                      specification.getSpecificationVendor(),
-                                      specification.getImplementationTitle(),
-                                      specification.getImplementationVersion(),
-                                      specification.getImplementationVendor(),
-                                      sections );
-        }
-    }
-
-    /**
-     * Trim the supplied string if the string is non-null
-     *
-     * @param value the string to trim or null
-     * @return the trimmed string or null
-     */
-    private static String getTrimmedString( final String value )
-    {
-        if( null == value )
-        {
-            return null;
-        }
-        else
-        {
-            return value.trim();
-        }
-    }
-
-    /**
-     * Extract an Package Specification from Attributes.
-     *
-     * @param attributes Attributes to searched
-     * @return the new Specification object, or null
-     */
-    private static Specification getSpecification( final String section,
-                                                   final Attributes attributes )
-        throws ParseException
-    {
-        //WARNING: We trim the values of all the attributes because
-        //Some extension declarations are badly defined (ie have spaces
-        //after version or vendor)
-        final String name = getTrimmedString( attributes.getValue( SPECIFICATION_TITLE ) );
-        if( null == name )
-        {
-            return null;
-        }
-
-        final String specVendor = getTrimmedString( attributes.getValue( SPECIFICATION_VENDOR ) );
-        if( null == specVendor )
-        {
-            throw new ParseException( "Missing " + SPECIFICATION_VENDOR, 0 );
-        }
-
-        final String specVersion = getTrimmedString( attributes.getValue( SPECIFICATION_VERSION ) );
-        if( null == specVersion )
-        {
-            throw new ParseException( "Missing " + SPECIFICATION_VERSION, 0 );
-        }
-
-        final String impTitle = getTrimmedString( attributes.getValue( IMPLEMENTATION_TITLE ) );
-        if( null == impTitle )
-        {
-            throw new ParseException( "Missing " + IMPLEMENTATION_TITLE, 0 );
-        }
-
-        final String impVersion = getTrimmedString( attributes.getValue( IMPLEMENTATION_VERSION ) );
-        if( null == impVersion )
-        {
-            throw new ParseException( "Missing " + IMPLEMENTATION_VERSION, 0 );
-        }
-
-        final String impVendor = getTrimmedString( attributes.getValue( IMPLEMENTATION_VENDOR ) );
-        if( null == impVendor )
-        {
-            throw new ParseException( "Missing " + IMPLEMENTATION_VENDOR, 0 );
-        }
-
-        return new Specification( name, specVersion, specVendor,
-                                  impTitle, impVersion, impVendor,
-                                  new String[]{section} );
-    }
-}
\ No newline at end of file
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/extension/resolvers/LocationResolver.java b/src/main/org/apache/tools/ant/taskdefs/optional/extension/resolvers/LocationResolver.java
deleted file mode 100644
index 119679d..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/extension/resolvers/LocationResolver.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.extension.resolvers;
-
-import java.io.File;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.taskdefs.optional.extension.Extension;
-import org.apache.tools.ant.taskdefs.optional.extension.ExtensionResolver;
-
-/**
- * Resolver that just returns s specified location.
- *
- * @author <a href="mailto:peter@apache.org">Peter Donald</a>
- * @version $Revision$ $Date$
- */
-public class LocationResolver
-    implements ExtensionResolver
-{
-    private String m_location;
-
-    public void setLocation( final String location )
-    {
-        m_location = location;
-    }
-
-    public File resolve( final Extension extension,
-                         final Project project )
-        throws BuildException
-    {
-        if( null == m_location )
-        {
-            final String message = "No location specified for resolver";
-            throw new BuildException( message );
-        }
-
-        return project.resolveFile( m_location );
-    }
-
-    public String toString()
-    {
-        return "Location[" + m_location + "]";
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/extension/resolvers/URLResolver.java b/src/main/org/apache/tools/ant/taskdefs/optional/extension/resolvers/URLResolver.java
deleted file mode 100644
index b3d2047..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/extension/resolvers/URLResolver.java
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.extension.resolvers;
-
-import java.io.File;
-import java.net.URL;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.taskdefs.Get;
-import org.apache.tools.ant.taskdefs.optional.extension.Extension;
-import org.apache.tools.ant.taskdefs.optional.extension.ExtensionResolver;
-
-/**
- * Resolver that just returns s specified location.
- *
- * @author <a href="mailto:peter@apache.org">Peter Donald</a>
- * @version $Revision$ $Date$
- */
-public class URLResolver
-    implements ExtensionResolver
-{
-    private File m_destfile;
-    private File m_destdir;
-    private URL m_url;
-
-    public void setUrl( final URL url )
-    {
-        m_url = url;
-    }
-
-    public void setDestfile( final File destfile )
-    {
-        m_destfile = destfile;
-    }
-
-    public void setDestdir( final File destdir )
-    {
-        m_destdir = destdir;
-    }
-
-    public File resolve( final Extension extension,
-                         final Project project )
-        throws BuildException
-    {
-        validate();
-
-        final File file = getDest();
-
-        final Get get = (Get)project.createTask( "get" );
-        get.setDest( file );
-        get.setSrc( m_url );
-        get.execute();
-
-        return file;
-    }
-
-    private File getDest()
-    {
-        if( null != m_destfile )
-        {
-            return m_destfile;
-        }
-        else
-        {
-            final String file = m_url.getFile();
-            String filename = null;
-            if( null == file || file.length() <= 1 )
-            {
-                filename = "default.file";
-            }
-            else
-            {
-                int index = file.lastIndexOf( '/' );
-                if( -1 == index )
-                {
-                    index = 0;
-                }
-                filename = file.substring( index );
-            }
-
-            return new File( m_destdir, filename );
-        }
-    }
-
-    private void validate()
-    {
-        if( null == m_url )
-        {
-            final String message = "Must specify URL";
-            throw new BuildException( message );
-        }
-
-        if( null == m_destdir && null == m_destfile )
-        {
-            final String message = "Must specify destination file or directory";
-            throw new BuildException( message );
-        }
-        else if( null != m_destdir && null != m_destfile )
-        {
-            final String message = "Must not specify both destination file or directory";
-            throw new BuildException( message );
-        }
-    }
-
-    public String toString()
-    {
-        return "URL[" + m_url + "]";
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/i18n/Translate.java b/src/main/org/apache/tools/ant/taskdefs/optional/i18n/Translate.java
deleted file mode 100644
index 9b12561..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/i18n/Translate.java
+++ /dev/null
@@ -1,590 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.i18n;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.BufferedReader;
-import java.io.InputStreamReader;
-import java.io.FileOutputStream;
-import java.io.BufferedWriter;
-import java.io.OutputStreamWriter;
-import java.util.Vector;
-import java.util.Hashtable;
-import java.util.Locale;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.DirectoryScanner;
-import org.apache.tools.ant.types.FileSet;
-import org.apache.tools.ant.util.FileUtils;
-import org.apache.tools.ant.taskdefs.MatchingTask;
-
-/**
- * Translates text embedded in files using Resource Bundle files.
- *
- * @author <a href="mailto:umagesh@rediffmail.com">Magesh Umasankar</a>
- */
-public class Translate extends MatchingTask {
-
-    /**
-     * Family name of resource bundle
-     */
-    private String bundle;
-    /**
-     * Locale specific language of the resource bundle
-     */
-    private String bundleLanguage;
-    /**
-     * Locale specific country of the resource bundle
-     */
-    private String bundleCountry;
-    /**
-     * Locale specific variant of the resource bundle
-     */
-    private String bundleVariant;
-    /**
-     * Destination directory
-     */
-    private File toDir;
-    /**
-     * Source file encoding scheme
-     */
-    private String srcEncoding;
-    /**
-     * Destination file encoding scheme
-     */
-    private String destEncoding;
-    /**
-     * Resource Bundle file encoding scheme, defaults to srcEncoding
-     */
-    private String bundleEncoding;
-    /**
-     * Starting token to identify keys
-     */
-    private String startToken;
-    /**
-     * Ending token to identify keys
-     */
-    private String endToken;
-    /**
-     * Whether or not to create a new destination file.
-     * Defaults to <code>false</code>.
-     */
-    private boolean forceOverwrite;
-    /**
-     * Vector to hold source file sets.
-     */
-    private Vector filesets = new Vector();
-    /**
-     * Holds key value pairs loaded from resource bundle file
-     */
-    private Hashtable resourceMap = new Hashtable();
-    /**
-     * Generated locale based on user attributes
-     */
-    private Locale locale;
-    /**
-     * Used to resolve file names.
-     */
-    private FileUtils fileUtils = FileUtils.newFileUtils();
-    /**
-     * Last Modified Timestamp of resource bundle file being used.
-     */
-    private long[] bundleLastModified = new long[7];
-    /**
-     * Last Modified Timestamp of source file being used.
-     */
-    private long srcLastModified;
-    /**
-     * Last Modified Timestamp of destination file being used.
-     */
-    private long destLastModified;
-    /**
-     * Has at least one file from the bundle been loaded?
-     */
-    private boolean loaded = false;
-
-    /**
-     * Sets Family name of resource bundle
-     */
-    public void setBundle(String bundle) {
-        this.bundle = bundle;
-    }
-
-    /**
-     * Sets locale specific language of resource bundle
-     */
-    public void setBundleLanguage(String bundleLanguage) {
-        this.bundleLanguage = bundleLanguage;
-    }
-
-    /**
-     * Sets locale specific country of resource bundle
-     */
-    public void setBundleCountry(String bundleCountry) {
-        this.bundleCountry = bundleCountry;
-    }
-
-    /**
-     * Sets locale specific variant of resource bundle
-     */
-    public void setBundleVariant(String bundleVariant) {
-        this.bundleVariant = bundleVariant;
-    }
-
-    /**
-     * Sets Destination directory
-     */
-    public void setToDir(File toDir) {
-        this.toDir = toDir;
-    }
-
-    /**
-     * Sets starting token to identify keys
-     */
-    public void setStartToken(String startToken) {
-        this.startToken = startToken;
-    }
-
-    /**
-     * Sets ending token to identify keys
-     */
-    public void setEndToken(String endToken) {
-        this.endToken = endToken;
-    }
-
-    /**
-     * Sets source file encoding scheme
-     */
-    public void setSrcEncoding(String srcEncoding) {
-        this.srcEncoding = srcEncoding;
-    }
-
-    /**
-     * Sets destination file encoding scheme.  Defaults to source file
-     * encoding
-     */
-    public void setDestEncoding(String destEncoding) {
-        this.destEncoding = destEncoding;
-    }
-
-    /**
-     * Sets Resource Bundle file encoding scheme
-     */
-    public void setBundleEncoding(String bundleEncoding) {
-        this.bundleEncoding = bundleEncoding;
-    }
-
-    /**
-     * Whether or not to overwrite existing file irrespective of 
-     * whether it is newer than the source file as well as the 
-     * resource bundle file.
-     * Defaults to false.
-     */
-    public void setForceOverwrite(boolean forceOverwrite) {
-        this.forceOverwrite = forceOverwrite;
-    }
-
-    /**
-     * Adds a set of files (nested fileset attribute).
-     */
-    public void addFileset(FileSet set) {
-        filesets.addElement(set);
-    }
-
-    /**
-     * Check attributes values, load resource map and translate
-     */
-    public void execute() throws BuildException {
-        if (bundle == null) {
-            throw new BuildException("The bundle attribute must be set.",
-                                     location);
-        }
-
-        if (startToken == null) {
-            throw new BuildException("The starttoken attribute must be set.",
-                                     location);
-        }
-
-        if (startToken.length() != 1) {
-            throw new BuildException(
-                "The starttoken attribute must be a single character.",
-                                         location);
-        }
-
-        if (endToken == null) {
-            throw new BuildException("The endtoken attribute must be set.",
-                                     location);
-        }
-
-        if (endToken.length() != 1) {
-            throw new BuildException(
-                "The endtoken attribute must be a single character.",
-                                         location);
-        }
-
-        if (bundleLanguage == null) {
-            Locale l = Locale.getDefault();
-            bundleLanguage  = l.getLanguage();
-        }
-
-        if (bundleCountry == null) {
-            bundleCountry = Locale.getDefault().getCountry();
-        }
-
-        locale = new Locale(bundleLanguage, bundleCountry);
-
-        if (bundleVariant == null) {
-            Locale l = new Locale(bundleLanguage, bundleCountry);
-            bundleVariant = l.getVariant();
-        }
-
-        if (toDir == null) {
-            throw new BuildException("The todir attribute must be set.",
-                                     location);
-        }
-
-        if (!toDir.exists()) {
-            toDir.mkdirs();
-        } else {
-            if (toDir.isFile()) {
-                throw new BuildException(toDir + " is not a directory");
-            }
-        }
-
-        if (srcEncoding == null) {
-            srcEncoding = System.getProperty("file.encoding");
-        }
-
-        if (destEncoding == null) {
-            destEncoding = srcEncoding;
-        }
-
-        if (bundleEncoding == null) {
-            bundleEncoding = srcEncoding;
-        }
-
-        loadResourceMaps();
-
-        translate();
-    }
-
-    /**
-     * Load resource maps based on resource bundle encoding scheme.
-     * The resource bundle lookup searches for resource files with various
-     * suffixes on the basis of (1) the desired locale and (2) the default
-     * locale (basebundlename), in the following order from lower-level
-     * (more specific) to parent-level (less specific):
-     *
-     * basebundlename + "_" + language1 + "_" + country1 + "_" + variant1
-     * basebundlename + "_" + language1 + "_" + country1
-     * basebundlename + "_" + language1
-     * basebundlename
-     * basebundlename + "_" + language2 + "_" + country2 + "_" + variant2
-     * basebundlename + "_" + language2 + "_" + country2
-     * basebundlename + "_" + language2
-     *
-     * To the generated name, a ".properties" string is appeneded and
-     * once this file is located, it is treated just like a properties file
-     * but with bundle encoding also considered while loading.
-     */
-    private void loadResourceMaps() throws BuildException {
-        Locale locale = new Locale(bundleLanguage,
-                                   bundleCountry,
-                                   bundleVariant);
-        String language = locale.getLanguage().length() > 0 ?
-            "_" + locale.getLanguage() :
-            "";
-        String country = locale.getCountry().length() > 0 ?
-            "_" + locale.getCountry() :
-            "";
-        String variant = locale.getVariant().length() > 0 ?
-            "_" + locale.getVariant() :
-            "";
-        String bundleFile = bundle + language + country + variant;
-        processBundle(bundleFile, 0, false);
-
-        bundleFile = bundle + language + country;
-        processBundle(bundleFile, 1, false);
-
-        bundleFile = bundle + language;
-        processBundle(bundleFile, 2, false);
-
-        bundleFile = bundle;
-        processBundle(bundleFile, 3, false);
-
-        //Load default locale bundle files
-        //using default file encoding scheme.
-        locale = Locale.getDefault();
-
-        language = locale.getLanguage().length() > 0 ?
-            "_" + locale.getLanguage() :
-            "";
-        country = locale.getCountry().length() > 0 ?
-            "_" + locale.getCountry() :
-            "";
-        variant = locale.getVariant().length() > 0 ?
-            "_" + locale.getVariant() :
-            "";
-        bundleEncoding = System.getProperty("file.encoding");
-
-        bundleFile = bundle + language + country + variant;
-        processBundle(bundleFile, 4, false);
-
-        bundleFile = bundle + language + country;
-        processBundle(bundleFile, 5, false);
-
-        bundleFile = bundle + language;
-        processBundle(bundleFile, 6, true);
-    }
-
-    /**
-     * Process each file that makes up this bundle.
-     */
-    private void processBundle(final String bundleFile, final int i,
-                               final boolean checkLoaded) throws BuildException {
-        final File propsFile = new File(bundleFile + ".properties");
-        FileInputStream ins = null;
-        try {
-            ins = new FileInputStream(propsFile);
-            loaded = true;
-            bundleLastModified[i] = propsFile.lastModified();
-            log("Using " + propsFile, Project.MSG_DEBUG);
-            loadResourceMap(ins);
-        } catch (IOException ioe) {
-            log(propsFile + " not found.", Project.MSG_DEBUG);
-            //if all resource files associated with this bundle
-            //have been scanned for and still not able to
-            //find a single resrouce file, throw exception
-            if (!loaded && checkLoaded) {
-                throw new BuildException(ioe.getMessage(), location);
-            }
-        }
-    }
-
-    /**
-     * Load resourceMap with key value pairs.  Values of existing keys
-     * are not overwritten.  Bundle's encoding scheme is used.
-     */
-    private void loadResourceMap(FileInputStream ins) throws BuildException {
-        try {
-            BufferedReader in = null;
-            InputStreamReader isr = new InputStreamReader(ins, bundleEncoding);
-            in = new BufferedReader(isr);
-            String line = null;
-            while ((line = in.readLine()) != null) {
-                //So long as the line isn't empty and isn't a comment...
-                if (line.trim().length() > 1 &&
-                   ('#' != line.charAt(0) || '!' != line.charAt(0))) {
-                    //Legal Key-Value separators are :, = and white space.
-                    int sepIndex = line.indexOf('=');
-                    if (-1 == sepIndex) {
-                        sepIndex = line.indexOf(':');
-                    }
-                    if (-1 == sepIndex) {
-                        for (int k = 0; k < line.length(); k++) {
-                            if (Character.isSpaceChar(line.charAt(k))) {
-                                sepIndex = k;
-                                break;
-                            }
-                        }
-                    }
-                    //Only if we do have a key is there going to be a value
-                    if (-1 != sepIndex) {
-                        String key = line.substring(0, sepIndex).trim();
-                        String value = line.substring(sepIndex + 1).trim();
-                        //Handle line continuations, if any
-                        while (value.endsWith("\\")) {
-                            value = value.substring(0, value.length() - 1);
-                            if ((line = in.readLine()) != null) {
-                                value = value + line.trim();
-                            } else {
-                                break;
-                            }
-                        }
-                        if (key.length() > 0) {
-                            //Has key already been loaded into resourceMap?
-                            if (resourceMap.get(key) == null) {
-                                resourceMap.put(key, value);
-                            }
-                        }
-                    }
-                }
-            }
-            if (in != null) {
-                in.close();
-            }
-        } catch (IOException ioe) {
-            throw new BuildException(ioe.getMessage(), location);
-        }
-    }
-
-    /**
-     * Reads source file line by line using the source encoding and
-     * searches for keys that are sandwiched between the startToken
-     * and endToken.  The values for these keys are looked up from
-     * the hashtable and substituted.  If the hashtable doesn't
-     * contain the key, they key itself is used as the value.
-     * Detination files and directories are created as needed.
-     * The destination file is overwritten only if
-     * the forceoverwritten attribute is set to true if
-     * the source file or any associated bundle resource file is
-     * newer than the destination file.
-     */
-    private void translate() throws BuildException {
-        for (int i = 0; i < filesets.size(); i++) {
-            FileSet fs = (FileSet) filesets.elementAt(i);
-            DirectoryScanner ds = fs.getDirectoryScanner(project);
-            String[] srcFiles = ds.getIncludedFiles();
-            for (int j = 0; j < srcFiles.length; j++) {
-                try {
-                    File dest = fileUtils.resolveFile(toDir, srcFiles[j]);
-                    //Make sure parent dirs exist, else, create them.
-                    try {
-                        File destDir = new File(dest.getParent());
-                        if (!destDir.exists()) {
-                            destDir.mkdirs();
-                        }
-                    } catch (Exception e) {
-                        log("Exception occured while trying to check/create "
-                            + " parent directory.  " + e.getMessage(),
-                            Project.MSG_DEBUG);
-                    }
-                    destLastModified = dest.lastModified();
-                    srcLastModified = new File(srcFiles[i]).lastModified();
-                    //Check to see if dest file has to be recreated
-                    if (forceOverwrite
-                        || destLastModified < srcLastModified
-                        || destLastModified < bundleLastModified[0]
-                        || destLastModified < bundleLastModified[1]
-                        || destLastModified < bundleLastModified[2]
-                        || destLastModified < bundleLastModified[3]
-                        || destLastModified < bundleLastModified[4]
-                        || destLastModified < bundleLastModified[5]
-                        || destLastModified < bundleLastModified[6]) {
-                        log("Processing " + srcFiles[j],
-                            Project.MSG_DEBUG);
-                        FileOutputStream fos = new FileOutputStream(dest);
-                        BufferedWriter out 
-                            = new BufferedWriter(new OutputStreamWriter(fos, destEncoding));
-                        FileInputStream fis = new FileInputStream(srcFiles[j]);
-                        BufferedReader in 
-                            = new BufferedReader(new InputStreamReader(fis, srcEncoding));
-                        String line;
-                        while ((line = in.readLine()) != null) {
-                            int startIndex = -1;
-                            int endIndex = -1;
-outer:                      while (true) {
-                                startIndex = line.indexOf(startToken, endIndex + 1);
-                                if (startIndex < 0 ||
-                                    startIndex + 1 >= line.length()) {
-                                    break;
-                                }
-                                endIndex = line.indexOf(endToken, startIndex + 1);
-                                if (endIndex < 0) {
-                                    break;
-                                }
-                                String matches = line.substring(startIndex + 1,
-                                                                endIndex);
-                                    //If there is a white space or = or :, then
-                                    //it isn't to be treated as a valid key.
-                                for (int k = 0; k < matches.length(); k++) {
-                                    char c = matches.charAt(k);
-                                    if (c == ':' ||
-                                        c == '=' ||
-                                        Character.isSpaceChar(c)) {
-                                        endIndex = endIndex - 1;
-                                        continue outer;
-                                    }
-                                }
-                                String replace = null;
-                                replace = (String) resourceMap.get(matches);
-                                    //If the key hasn't been loaded into resourceMap,
-                                    //use the key itself as the value also.
-                                if (replace == null) {
-                                    log("Warning: The key: " + matches
-                                        + " hasn't been defined.",
-                                        Project.MSG_DEBUG);
-                                    replace = matches;
-                                }
-                                line = line.substring(0, startIndex)
-                                    + replace
-                                    + line.substring(endIndex + 1);
-                                endIndex = startIndex + replace.length() + 1;
-                                if (endIndex + 1 >= line.length()) {
-                                    break;
-                                }
-                            }
-                            out.write(line);
-                            out.newLine();
-                        }
-                        if (in != null) {
-                            in.close();
-                        }
-                        if (out != null) {
-                            out.close();
-                        }
-                    } else {
-                        log("Skipping " + srcFiles[j] +
-                            " as destination file is up to date",
-                            Project.MSG_VERBOSE);
-                    }
-                } catch (IOException ioe) {
-                    throw new BuildException(ioe.getMessage(), location);
-                }
-            }
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJAntTool.java b/src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJAntTool.java
deleted file mode 100644
index dc09ca0..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJAntTool.java
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.ide;
-
-
-import com.ibm.ivj.util.base.Project;
-import com.ibm.ivj.util.base.ToolData;
-
-import org.apache.tools.ant.BuildException;
-
-
-/**
- * This class is the equivalent to org.apache.tools.ant.Main for the
- * VAJ tool environment. It's main is called when the user selects
- * Tools->Ant Build from the VAJ project menu.
- * Additionally this class provides methods to save build info for
- * a project in the repository and load it from the repository
- *
- * @author Wolf Siberski
- */
-public class VAJAntTool {
-    private static final String TOOL_DATA_KEY = "AntTool";
-
-
-    /**
-     * Loads the BuildInfo for the specified VAJ project from the
-     * tool data for this project.
-     * If there is no build info stored for that project, a new
-     * default BuildInfo is returned
-     *
-     * @return BuildInfo buildInfo build info for the specified project
-     * @param projectName String project name
-     */
-    public static VAJBuildInfo loadBuildData(String projectName) {
-        VAJBuildInfo result = null;
-        try {
-            Project project =
-                VAJLocalUtil.getWorkspace().loadedProjectNamed(projectName);
-            if (project.testToolRepositoryData(TOOL_DATA_KEY)) {
-                ToolData td = project.getToolRepositoryData(TOOL_DATA_KEY);
-                String data = (String) td.getData();
-                result = VAJBuildInfo.parse(data);
-            } else {
-                result = new VAJBuildInfo();
-            }
-            result.setVAJProjectName(projectName);
-        } catch (Throwable t) {
-            throw new BuildException("BuildInfo for Project "
-                                     + projectName + " could not be loaded" + t);
-        }
-        return result;
-    }
-
-
-    /**
-     * Starts the application.
-     *
-     * @param args an array of command-line arguments. VAJ puts the
-     *             VAJ project name into args[1] when starting the
-     *             tool from the project context menu
-     */
-    public static void main(java.lang.String[] args) {
-        try {
-            VAJBuildInfo info;
-            if (args.length >= 2 && args[1] instanceof String) {
-                String projectName = (String) args[1];
-                info = loadBuildData(projectName);
-            } else {
-                info = new VAJBuildInfo();
-            }
-
-            VAJAntToolGUI mainFrame = new VAJAntToolGUI(info);
-            mainFrame.show();
-        } catch (Throwable t) {
-            // if all error handling fails, output at least
-            // something on the console
-            t.printStackTrace();
-        }
-    }
-
-
-    /**
-     * Saves the BuildInfo for a project in the VAJ repository.
-     *
-     * @param info BuildInfo build info to save
-     */
-    public static void saveBuildData(VAJBuildInfo info) {
-        String data = info.asDataString();
-        try {
-            ToolData td = new ToolData(TOOL_DATA_KEY, data);
-            VAJLocalUtil.getWorkspace().loadedProjectNamed(
-                                                           info.getVAJProjectName()).setToolRepositoryData(td);
-        } catch (Throwable t) {
-            throw new BuildException("BuildInfo for Project "
-                                     + info.getVAJProjectName() + " could not be saved", t);
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJAntToolGUI.java b/src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJAntToolGUI.java
deleted file mode 100644
index d871e7f..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJAntToolGUI.java
+++ /dev/null
@@ -1,1400 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.ide;
-
-
-import java.util.Vector;
-import java.awt.Frame;
-import java.awt.Dialog;
-import java.awt.Panel;
-import java.awt.MenuBar;
-import java.awt.Menu;
-import java.awt.MenuItem;
-import java.awt.Label;
-import java.awt.TextField;
-import java.awt.TextArea;
-import java.awt.List;
-import java.awt.Choice;
-import java.awt.Button;
-import java.awt.FileDialog;
-import java.awt.FlowLayout;
-import java.awt.BorderLayout;
-import java.awt.GridBagLayout;
-import java.awt.GridBagConstraints;
-import java.awt.Insets;
-import java.awt.Toolkit;
-import java.awt.Font;
-import java.awt.SystemColor;
-import java.awt.event.ActionListener;
-import java.awt.event.ItemListener;
-import java.awt.event.TextListener;
-import java.awt.event.WindowListener;
-import java.awt.event.ActionEvent;
-import java.awt.event.ItemEvent;
-import java.awt.event.TextEvent;
-import java.awt.event.WindowEvent;
-
-import java.beans.PropertyChangeListener;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.BuildListener;
-import org.apache.tools.ant.BuildEvent;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.util.StringUtils;
-import org.apache.tools.ant.util.DateUtils;
-
-/**
- * This is a simple grafical user interface to provide the information needed
- * by ANT and to start the build-process within IBM VisualAge for Java.
- * <p>
- * I was using AWT to make it independent from the JDK-version. Please don't
- * ask me for a Swing-version:I am very familiar with Swing and I really think
- * that it's not necessary for such a simple gui!
- * <p>
- * It is completely developed in VAJ using the visual composition editor.
- * About 90% of the code is generated by VAJ,
- * but in fact I did a lot of <i>code-beautification</i> ;-).
- * <p>
- * @version 1.0 h
- * @author Christoph Wilhelms, TUI Infotec GmbH
- */
-public class VAJAntToolGUI extends Frame {
-    /**
-     * Members
-     */
-    private VAJBuildLogger logger = new VAJBuildLogger();
-    private static final String lineSeparator = "\r\n";
-    private PrivateEventHandler iEventHandler = new PrivateEventHandler();
-
-    /**
-     * Members of the main-window
-     */
-    // main model
-    private VAJBuildInfo iBuildInfo = null;
-    // Menue
-    private MenuBar iAntMakeMenuBar = null;
-    private Menu iFileMenu = null;
-    private MenuItem iSaveMenuItem = null;
-    private MenuItem iMenuSeparator = null;
-    private MenuItem iShowLogMenuItem = null;
-    private Menu iHelpMenu = null;
-    private MenuItem iAboutMenuItem = null;
-    // Container
-    private Panel iContentsPane = null;
-    private Panel iOptionenPanel = null;
-    private Panel iCommandButtonPanel = null;
-    private FlowLayout iCommandButtonPanelFlowLayout = null;
-    // Project name
-    private Label iProjectLabel = null;
-    private Label iProjectText = null;
-    // XML-file
-    private Label iBuildFileLabel = null;
-    private TextField iBuildFileTextField = null;
-    private boolean iConnPtoP2Aligning = false;
-    private Button iBrowseButton = null;
-    private FileDialog iFileDialog = null;
-    // Options
-    private Choice iMessageOutputLevelChoice = null;
-    private Label iMessageOutputLevelLabel = null;
-    private Label iTargetLabel = null;
-    private List iTargetList = null;
-    // Command-buttons
-    private Button iBuildButton = null;
-    private Button iReloadButton = null;
-    private Button iCloseButton = null;
-    /**
-     * log-Window
-     */
-    // Container
-    private Frame iMessageFrame = null;
-    private Panel iMessageCommandPanel = null;
-    private Panel iMessageContentPanel = null;
-    // Components
-    private TextArea iMessageTextArea = null;
-    private Button iMessageOkButton = null;
-    private Button iMessageClearLogButton = null;
-    /**
-     * About-dialog
-     */
-    // Container
-    private Dialog iAboutDialog = null;
-    private Panel iAboutDialogContentPanel = null;
-    private Panel iAboutInfoPanel = null;
-    private Panel iAboutCommandPanel = null;
-    // Labels
-    private Label iAboutTitleLabel = null;
-    private Label iAboutDevLabel = null;
-    private Label iAboutContactLabel = null;
-    // Buttons
-    private Button iAboutOkButton = null;
-
-    /**
-     * This internal BuildLogger, to be honest, is just a BuildListener.
-     * It does nearly the same as the DefaultLogger, but uses the Loggin-Window for output.
-     */
-    private class VAJBuildLogger implements BuildListener {
-        private long startTime = System.currentTimeMillis();
-
-        /**
-         * VAJBuildLogger constructor comment.
-         */
-        public VAJBuildLogger() {
-            super();
-        }
-
-        /**
-         *  Fired after the last target has finished. This event
-         *  will still be thrown if an error occured during the build.
-         *
-         *  @see BuildEvent#getException()
-         */
-        public void buildFinished(BuildEvent event) {
-            getStopButton().setEnabled(false);
-            getBuildButton().setEnabled(true);
-            getBuildButton().requestFocus();
-
-            Throwable error = event.getException();
-
-            if (error == null) {
-                getMessageTextArea().append(lineSeparator + "BUILD SUCCESSFUL");
-            } else {
-                logException(error);
-            }
-
-            getMessageTextArea().append(lineSeparator + "Total time: " 
-                + DateUtils.formatElapsedTime(System.currentTimeMillis() - startTime));
-        }
-
-
-        /**
-         *  Outputs an exception.
-         */
-        public void logException(Throwable error) {
-            getMessageTextArea().append(lineSeparator + "BUILD FAILED" + lineSeparator);
-
-            if (error instanceof BuildException) {
-                getMessageTextArea().append(error.toString());
-
-                Throwable nested = ((BuildException) error).getException();
-                if (nested != null) {
-                    nested.printStackTrace(System.err);
-                }
-            } else {
-                error.printStackTrace(System.err);
-            }
-        }
-
-        /**
-         *  Fired before any targets are started.
-         */
-        public void buildStarted(BuildEvent event) {
-            getStopButton().setEnabled(true);
-            getBuildButton().setEnabled(false);
-            getStopButton().requestFocus();
-
-            startTime = System.currentTimeMillis();
-            getMessageTextArea().append(lineSeparator);
-        }
-
-        /**
-         *  Fired whenever a message is logged.
-         *
-         *  @see BuildEvent#getMessage()
-         *  @see BuildEvent#getPriority()
-         */
-        public void messageLogged(BuildEvent event) {
-            if (event.getPriority() <= getBuildInfo().getOutputMessageLevel()) {
-                String msg = "";
-                if (event.getTask() != null) {
-                    msg = "[" + event.getTask().getTaskName() + "] ";
-                }
-                getMessageTextArea().append(lineSeparator + msg + event.getMessage());
-            }
-        }
-
-        /**
-         *  Fired when a target has finished. This event will
-         *  still be thrown if an error occured during the build.
-         *
-         *  @see BuildEvent#getException()
-         */
-        public void targetFinished(BuildEvent event) {
-        }
-
-        /**
-         *  Fired when a target is started.
-         *
-         *  @see BuildEvent#getTarget()
-         */
-        public void targetStarted(BuildEvent event) {
-            if (getBuildInfo().getOutputMessageLevel() <= Project.MSG_INFO) {
-                getMessageTextArea().append(lineSeparator + event.getTarget().getName() + ":");
-            }
-        }
-
-        /**
-         *  Fired when a task has finished. This event will still
-         *  be throw if an error occured during the build.
-         *
-         *  @see BuildEvent#getException()
-         */
-        public void taskFinished(BuildEvent event) {
-        }
-
-        /**
-         *  Fired when a task is started.
-         *
-         *  @see BuildEvent#getTask()
-         */
-        public void taskStarted(BuildEvent event) {
-        }
-    }
-
-    /**
-     * Eventhandler to handle all AWT-events
-     */
-    private class PrivateEventHandler implements ActionListener, ItemListener, TextListener, WindowListener, PropertyChangeListener {
-        /**
-         * ActionListener method
-         */
-        public void actionPerformed(ActionEvent e) {
-            try {
-                /* #### Main App-Frame #### */
-                // browse XML-File with filechooser
-                if (e.getSource() == VAJAntToolGUI.this.getBrowseButton()) {
-                    getFileDialog().setDirectory(getBuildFileTextField().getText().substring(0, getBuildFileTextField().getText().lastIndexOf('\\') + 1));
-                    getFileDialog().setFile("*.xml");
-                    getFileDialog().show();
-                    if (!getFileDialog().getFile().equals("")) {
-                        getBuildFileTextField().setText(getFileDialog().getDirectory() + getFileDialog().getFile());
-                    }
-                }
-                // dispose and exit application
-                if (e.getSource() == VAJAntToolGUI.this.getCloseButton()) {
-                    dispose();
-                    System.exit(0);
-                }
-                // start build-process
-                if (e.getSource() == VAJAntToolGUI.this.getBuildButton()) {
-                    executeTarget();
-                }
-                if (e.getSource() == VAJAntToolGUI.this.getStopButton()) {
-                    getBuildInfo().cancelBuild();
-                }
-                if (e.getSource() == VAJAntToolGUI.this.getReloadButton()) {
-                    try {
-                        getBuildInfo().updateTargetList();
-                        fillList();
-                    } catch (Throwable fileNotFound) {
-                        handleException(fileNotFound);
-                        getTargetList().removeAll();
-                        getBuildButton().setEnabled(false);
-                    }
-                }
-                // MenuItems
-                if (e.getSource() == VAJAntToolGUI.this.getSaveMenuItem()) {
-                    saveBuildInfo();
-                }
-                if (e.getSource() == VAJAntToolGUI.this.getAboutMenuItem()) {
-                    getAboutDialog().show();
-                }
-                if (e.getSource() == VAJAntToolGUI.this.getShowLogMenuItem()) {
-                    getMessageFrame().show();
-                }
-                /* #### About dialog #### */
-                if (e.getSource() == VAJAntToolGUI.this.getAboutOkButton()) {
-                    getAboutDialog().dispose();
-                }
-                /* #### Log frame #### */
-                if (e.getSource() == VAJAntToolGUI.this.getMessageOkButton()) {
-                    getMessageFrame().dispose();
-                }
-                if (e.getSource() == VAJAntToolGUI.this.getMessageClearLogButton()) {
-                    getMessageTextArea().setText("");
-                }
-                if (e.getSource() == VAJAntToolGUI.this.getMessageOkButton()) {
-                    getMessageFrame().dispose();
-                }
-            } catch (Throwable exc) {
-                handleException(exc);
-            }
-        }
-
-        /**
-         * ItemListener method
-         */
-        public void itemStateChanged(ItemEvent e) {
-            try {
-                if (e.getSource() == VAJAntToolGUI.this.getTargetList()) {
-                    getBuildButton().setEnabled(true);
-                }
-                if (e.getSource() == VAJAntToolGUI.this.getMessageOutputLevelChoice()) {
-                    getBuildInfo().setOutputMessageLevel(getMessageOutputLevelChoice().getSelectedIndex());
-                }
-                if (e.getSource() == VAJAntToolGUI.this.getTargetList()) {
-                    getBuildInfo().setTarget(getTargetList().getSelectedItem());
-                }
-            } catch (Throwable exc) {
-                handleException(exc);
-            }
-        }
-
-        /**
-         * PropertyChangeListener method
-         */
-        public void propertyChange(java.beans.PropertyChangeEvent evt) {
-            if (evt.getSource() == VAJAntToolGUI.this.getBuildInfo() && (evt.getPropertyName().equals("projectName"))) {
-                connectProjectNameToLabel();
-            }
-            if (evt.getSource() == VAJAntToolGUI.this.getBuildInfo() && (evt.getPropertyName().equals("buildFileName"))) {
-                connectBuildFileNameToTextField();
-            }
-        }
-
-        /**
-         * TextListener method
-         */
-        public void textValueChanged(TextEvent e) {
-            if (e.getSource() == VAJAntToolGUI.this.getBuildFileTextField()) {
-                connectTextFieldToBuildFileName();
-            }
-        }
-
-        /**
-         * WindowListener methods
-         */
-        public void windowClosing(WindowEvent e) {
-            try {
-                if (e.getSource() == VAJAntToolGUI.this) {
-                    dispose();
-                    System.exit(0);
-                }
-                if (e.getSource() == VAJAntToolGUI.this.getAboutDialog()) {
-                    getAboutDialog().dispose();
-                }
-                if (e.getSource() == VAJAntToolGUI.this.getMessageFrame()) {
-                    getMessageFrame().dispose();
-                }
-            } catch (Throwable exc) {
-                handleException(exc);
-            }
-        }
-        public void windowActivated(WindowEvent e) {};
-        public void windowClosed(WindowEvent e) {};
-        public void windowDeactivated(WindowEvent e) {};
-        public void windowDeiconified(WindowEvent e) {};
-        public void windowIconified(WindowEvent e) {};
-        public void windowOpened(WindowEvent e) {};
-    }
-
-    /**
-     * AntMake default-constructor.
-     */
-    private VAJAntToolGUI() {
-        super();
-        initialize();
-    }
-    /**
-     * AntMake constructor called by VAJAntTool integration.
-     * @param buildInfo VAJBuildInfo
-     */
-
-    public VAJAntToolGUI(VAJBuildInfo newBuildInfo) {
-        super();
-        setBuildInfo(newBuildInfo);
-        initialize();
-    }
-    /**
-     * This method is used to center dialogs.
-     */
-    public static void centerDialog(Dialog dialog) {
-        dialog.setLocation((Toolkit.getDefaultToolkit().getScreenSize().width / 2) - (dialog.getSize().width / 2), (java.awt.Toolkit.getDefaultToolkit().getScreenSize().height / 2) - (dialog.getSize().height / 2));
-    }
-    /**
-     * connectBuildFileNameToTextField:  (BuildInfo.buildFileName <--> BuildFileTextField.text)
-     */
-    private void connectBuildFileNameToTextField() {
-        /* Set the target from the source */
-        try {
-            if (iConnPtoP2Aligning == false) {
-                iConnPtoP2Aligning = true;
-                if ((getBuildInfo() != null)) {
-                    getBuildFileTextField().setText(getBuildInfo().getBuildFileName());
-                }
-                iConnPtoP2Aligning = false;
-            }
-        } catch (Throwable iExc) {
-            iConnPtoP2Aligning = false;
-            handleException(iExc);
-        }
-    }
-    /**
-     * connectProjectNameToLabel:  (BuildInfo.vajProjectName <--> ProjectText.text)
-     */
-    private void connectProjectNameToLabel() {
-        /* Set the target from the source */
-        try {
-            if ((getBuildInfo() != null)) {
-                getProjectText().setText(getBuildInfo().getVAJProjectName());
-            }
-        } catch (Throwable iExc) {
-            handleException(iExc);
-        }
-    }
-    /**
-     * connectTextFieldToBuildFileName:  (BuildInfo.buildFileName <--> BuildFileTextField.text)
-     */
-    private void connectTextFieldToBuildFileName() {
-        /* Set the source from the target */
-        try {
-            if (iConnPtoP2Aligning == false) {
-                iConnPtoP2Aligning = true;
-                if ((getBuildInfo() != null)) {
-                    getBuildInfo().setBuildFileName(getBuildFileTextField().getText());
-                }
-                iConnPtoP2Aligning = false;
-            }
-        } catch (Throwable iExc) {
-            iConnPtoP2Aligning = false;
-            handleException(iExc);
-        }
-    }
-    /**
-     * external build of a .jar-file
-     */
-    private void executeTarget() {
-        try {
-            getMessageFrame().show();
-            getBuildInfo().executeProject(logger);
-        } catch (Throwable exc) {
-            logger.logException(exc);
-        }
-        return;
-    }
-    /**
-     * Fills the taget-list with project-targets
-     */
-    private void fillList() {
-        getTargetList().removeAll();
-        Vector targets = getBuildInfo().getProjectTargets();
-        for (int i = 0; i < targets.size(); i++) {
-            getTargetList().add(targets.elementAt(i).toString());
-        }
-        getTargetList().select(iBuildInfo.getProjectTargets().indexOf(iBuildInfo.getTarget()));
-        if (getTargetList().getSelectedIndex() >= 0) {
-            getBuildButton().setEnabled(true);
-        }
-    }
-
-    /**
-     * Return the AboutCommandPanel property value.
-     * @return java.awt.Panel
-     */
-    private Panel getAboutCommandPanel() {
-        if (iAboutCommandPanel == null) {
-            try {
-                iAboutCommandPanel = new Panel();
-                iAboutCommandPanel.setName("AboutCommandPanel");
-                iAboutCommandPanel.setLayout(new java.awt.FlowLayout());
-                getAboutCommandPanel().add(getAboutOkButton(), getAboutOkButton().getName());
-            } catch (Throwable iExc) {
-                handleException(iExc);
-            }
-        }
-        return iAboutCommandPanel;
-    }
-    /**
-     * Return the AboutContactLabel property value.
-     * @return java.awt.Label
-     */
-    private Label getAboutContactLabel() {
-        if (iAboutContactLabel == null) {
-            try {
-                iAboutContactLabel = new Label();
-                iAboutContactLabel.setName("AboutContactLabel");
-                iAboutContactLabel.setAlignment(java.awt.Label.CENTER);
-                iAboutContactLabel.setText("contact: wolf.siberski@tui.de or christoph.wilhelms@tui.de");
-            } catch (Throwable iExc) {
-                handleException(iExc);
-            }
-        }
-        return iAboutContactLabel;
-    }
-    /**
-     * Return the AboutDevLabel property value.
-     * @return java.awt.Label
-     */
-    private Label getAboutDevLabel() {
-        if (iAboutDevLabel == null) {
-            try {
-                iAboutDevLabel = new Label();
-                iAboutDevLabel.setName("AboutDevLabel");
-                iAboutDevLabel.setAlignment(java.awt.Label.CENTER);
-                iAboutDevLabel.setText("developed by Wolf Siberski & Christoph Wilhelms");
-            } catch (Throwable iExc) {
-                handleException(iExc);
-            }
-        }
-        return iAboutDevLabel;
-    }
-    /**
-     * Return the AboutDialog property value.
-     * @return java.awt.Dialog
-     */
-    private Dialog getAboutDialog() {
-        if (iAboutDialog == null) {
-            try {
-                iAboutDialog = new Dialog(this);
-                iAboutDialog.setName("AboutDialog");
-                iAboutDialog.setResizable(false);
-                iAboutDialog.setLayout(new java.awt.BorderLayout());
-                iAboutDialog.setBounds(550, 14, 383, 142);
-                iAboutDialog.setModal(true);
-                iAboutDialog.setTitle("About...");
-                getAboutDialog().add(getAboutDialogContentPanel(), "Center");
-                iAboutDialog.pack();
-                centerDialog(iAboutDialog);
-            } catch (Throwable iExc) {
-                handleException(iExc);
-            }
-        }
-        return iAboutDialog;
-    }
-    /**
-     * Return the AboutDialogContentPanel property value.
-     * @return java.awt.Panel
-     */
-    private Panel getAboutDialogContentPanel() {
-        if (iAboutDialogContentPanel == null) {
-            try {
-                iAboutDialogContentPanel = new Panel();
-                iAboutDialogContentPanel.setName("AboutDialogContentPanel");
-                iAboutDialogContentPanel.setLayout(new java.awt.BorderLayout());
-                getAboutDialogContentPanel().add(getAboutCommandPanel(), "South");
-                getAboutDialogContentPanel().add(getAboutInfoPanel(), "Center");
-            } catch (Throwable iExc) {
-                handleException(iExc);
-            }
-        }
-        return iAboutDialogContentPanel;
-    }
-    /**
-     * Return the AboutInfoPanel property value.
-     * @return java.awt.Panel
-     */
-    private Panel getAboutInfoPanel() {
-        if (iAboutInfoPanel == null) {
-            try {
-                iAboutInfoPanel = new Panel();
-                iAboutInfoPanel.setName("AboutInfoPanel");
-                iAboutInfoPanel.setLayout(new GridBagLayout());
-
-                GridBagConstraints constraintsAboutTitleLabel = new GridBagConstraints();
-                constraintsAboutTitleLabel.gridx = 0; constraintsAboutTitleLabel.gridy = 0;
-                constraintsAboutTitleLabel.fill = GridBagConstraints.HORIZONTAL;
-                constraintsAboutTitleLabel.weightx = 1.0;
-                constraintsAboutTitleLabel.weighty = 1.0;
-                constraintsAboutTitleLabel.insets = new Insets(4, 0, 4, 0);
-                getAboutInfoPanel().add(getAboutTitleLabel(), constraintsAboutTitleLabel);
-
-                GridBagConstraints constraintsAboutDevLabel = new GridBagConstraints();
-                constraintsAboutDevLabel.gridx = 0; constraintsAboutDevLabel.gridy = 1;
-                constraintsAboutDevLabel.fill = GridBagConstraints.HORIZONTAL;
-                constraintsAboutDevLabel.weightx = 1.0;
-                constraintsAboutDevLabel.insets = new Insets(4, 0, 0, 0);
-                getAboutInfoPanel().add(getAboutDevLabel(), constraintsAboutDevLabel);
-
-                GridBagConstraints constraintsAboutContactLabel = new GridBagConstraints();
-                constraintsAboutContactLabel.gridx = 0; constraintsAboutContactLabel.gridy = 2;
-                constraintsAboutContactLabel.fill = GridBagConstraints.HORIZONTAL;
-                constraintsAboutContactLabel.weightx = 1.0;
-                constraintsAboutContactLabel.insets = new Insets(2, 0, 4, 0);
-                getAboutInfoPanel().add(getAboutContactLabel(), constraintsAboutContactLabel);
-            } catch (Throwable iExc) {
-                handleException(iExc);
-            }
-        }
-        return iAboutInfoPanel;
-    }
-    /**
-     * Return the AboutMenuItem property value.
-     * @return java.awt.MenuItem
-     */
-    private MenuItem getAboutMenuItem() {
-        if (iAboutMenuItem == null) {
-            try {
-                iAboutMenuItem = new MenuItem();
-                iAboutMenuItem.setLabel("About...");
-            } catch (Throwable iExc) {
-                handleException(iExc);
-            }
-        }
-        return iAboutMenuItem;
-    }
-    /**
-     * Return the AboutOkButton property value.
-     * @return java.awt.Button
-     */
-    private Button getAboutOkButton() {
-        if (iAboutOkButton == null) {
-            try {
-                iAboutOkButton = new Button();
-                iAboutOkButton.setName("AboutOkButton");
-                iAboutOkButton.setLabel("OK");
-            } catch (Throwable iExc) {
-                handleException(iExc);
-            }
-        }
-        return iAboutOkButton;
-    }
-    /**
-     * Return the AboutTitleLabel property value.
-     * @return java.awt.Label
-     */
-    private Label getAboutTitleLabel() {
-        if (iAboutTitleLabel == null) {
-            try {
-                iAboutTitleLabel = new Label();
-                iAboutTitleLabel.setName("AboutTitleLabel");
-                iAboutTitleLabel.setFont(new Font("Arial", 1, 12));
-                iAboutTitleLabel.setAlignment(Label.CENTER);
-                iAboutTitleLabel.setText("Ant VisualAge for Java Tool-Integration");
-            } catch (Throwable iExc) {
-                handleException(iExc);
-            }
-        }
-        return iAboutTitleLabel;
-    }
-    /**
-     * Return the AntMakeMenuBar property value.
-     * @return java.awt.MenuBar
-     */
-    private MenuBar getAntMakeMenuBar() {
-        if (iAntMakeMenuBar == null) {
-            try {
-                iAntMakeMenuBar = new MenuBar();
-                iAntMakeMenuBar.add(getFileMenu());
-                iAntMakeMenuBar.add(getHelpMenu());
-            } catch (Throwable iExc) {
-                handleException(iExc);
-            }
-        }
-        return iAntMakeMenuBar;
-    }
-    /**
-     * Return the BrowseButton property value.
-     * @return Button
-     */
-    private Button getBrowseButton() {
-        if (iBrowseButton == null) {
-            try {
-                iBrowseButton = new Button();
-                iBrowseButton.setName("BrowseButton");
-                iBrowseButton.setLabel("...");
-            } catch (Throwable iExc) {
-                handleException(iExc);
-            }
-        }
-        return iBrowseButton;
-    }
-    /**
-     * Return the BuildButton property value.
-     * @return java.awt.Button
-     */
-    private Button getBuildButton() {
-        if (iBuildButton == null) {
-            try {
-                iBuildButton = new Button();
-                iBuildButton.setName("BuildButton");
-                iBuildButton.setLabel("Execute");
-            } catch (Throwable iExc) {
-                handleException(iExc);
-            }
-        }
-        return iBuildButton;
-    }
-    /**
-     * Return the BuildFileLabel property value.
-     * @return java.awt.Label
-     */
-    private Label getBuildFileLabel() {
-        if (iBuildFileLabel == null) {
-            try {
-                iBuildFileLabel = new Label();
-                iBuildFileLabel.setName("BuildFileLabel");
-                iBuildFileLabel.setText("Ant-Buildfile:");
-            } catch (Throwable iExc) {
-                handleException(iExc);
-            }
-        }
-        return iBuildFileLabel;
-    }
-    /**
-     * Return the BuildFileTextField property value.
-     * @return java.awt.TextField
-     */
-    private TextField getBuildFileTextField() {
-        if (iBuildFileTextField == null) {
-            try {
-                iBuildFileTextField = new TextField();
-                iBuildFileTextField.setName("BuildFileTextField");
-                iBuildFileTextField.setBackground(SystemColor.textHighlightText);
-            } catch (Throwable iExc) {
-                handleException(iExc);
-            }
-        }
-        return iBuildFileTextField;
-    }
-    /**
-     * Return the BuildInfo property value.
-     * @return org.apache.tools.ant.taskdefs.optional.ide.VAJBuildInfo
-     */
-    private VAJBuildInfo getBuildInfo() {
-        return iBuildInfo;
-    }
-    /**
-     * Return the CloseButton property value.
-     * @return java.awt.Button
-     */
-    private Button getCloseButton() {
-        if (iCloseButton == null) {
-            try {
-                iCloseButton = new Button();
-                iCloseButton.setName("CloseButton");
-                iCloseButton.setLabel("Close");
-            } catch (Throwable iExc) {
-                handleException(iExc);
-            }
-        }
-        return iCloseButton;
-    }
-    /**
-     * Return the CommandButtonPanel property value.
-     * @return java.awt.Panel
-     */
-    private Panel getCommandButtonPanel() {
-        if (iCommandButtonPanel == null) {
-            try {
-                iCommandButtonPanel = new Panel();
-                iCommandButtonPanel.setName("CommandButtonPanel");
-                iCommandButtonPanel.setLayout(getCommandButtonPanelFlowLayout());
-                iCommandButtonPanel.setBackground(SystemColor.control);
-                iCommandButtonPanel.add(getReloadButton());
-                iCommandButtonPanel.add(getBuildButton());
-                iCommandButtonPanel.add(getStopButton());
-                iCommandButtonPanel.add(getCloseButton());
-            } catch (Throwable iExc) {
-                handleException(iExc);
-            }
-        }
-        return iCommandButtonPanel;
-    }
-    /**
-     * Return the CommandButtonPanelFlowLayout property value.
-     * @return java.awt.FlowLayout
-     */
-    private FlowLayout getCommandButtonPanelFlowLayout() {
-        FlowLayout iCommandButtonPanelFlowLayout = null;
-        try {
-            /* Create part */
-            iCommandButtonPanelFlowLayout = new FlowLayout();
-            iCommandButtonPanelFlowLayout.setAlignment(FlowLayout.RIGHT);
-        } catch (Throwable iExc) {
-            handleException(iExc);
-        };
-        return iCommandButtonPanelFlowLayout;
-    }
-    /**
-     * Return the ContentsPane property value.
-     * @return java.awt.Panel
-     */
-    private Panel getContentsPane() {
-        if (iContentsPane == null) {
-            try {
-                iContentsPane = new Panel();
-                iContentsPane.setName("ContentsPane");
-                iContentsPane.setLayout(new BorderLayout());
-                getContentsPane().add(getCommandButtonPanel(), "South");
-                getContentsPane().add(getOptionenPanel(), "Center");
-            } catch (Throwable iExc) {
-                handleException(iExc);
-            }
-        }
-        return iContentsPane;
-    }
-    /**
-     * Return the FileDialog property value.
-     * @return java.awt.FileDialog
-     */
-    private FileDialog getFileDialog() {
-        if (iFileDialog == null) {
-            try {
-                iFileDialog = new FileDialog(this);
-                iFileDialog.setName("FileDialog");
-                iFileDialog.setLayout(null);
-                centerDialog(iFileDialog);
-            } catch (Throwable iExc) {
-                handleException(iExc);
-            }
-        }
-        return iFileDialog;
-    }
-    /**
-     * Return the FileMenu property value.
-     * @return java.awt.Menu
-     */
-    private Menu getFileMenu() {
-        if (iFileMenu == null) {
-            try {
-                iFileMenu = new Menu();
-                iFileMenu.setLabel("File");
-                iFileMenu.add(getSaveMenuItem());
-                iFileMenu.add(getMenuSeparator());
-                iFileMenu.add(getShowLogMenuItem());
-            } catch (Throwable iExc) {
-                handleException(iExc);
-            }
-        }
-        return iFileMenu;
-    }
-    /**
-     * Return the HelpMenu property value.
-     * @return java.awt.Menu
-     */
-    private Menu getHelpMenu() {
-        if (iHelpMenu == null) {
-            try {
-                iHelpMenu = new Menu();
-                iHelpMenu.setLabel("Help");
-                iHelpMenu.add(getAboutMenuItem());
-            } catch (Throwable iExc) {
-                handleException(iExc);
-            }
-        }
-        return iHelpMenu;
-    }
-    /**
-     * Return the MenuSeparator1 property value.
-     * @return java.awt.MenuItem
-     */
-    private MenuItem getMenuSeparator() {
-        if (iMenuSeparator == null) {
-            try {
-                iMenuSeparator = new MenuItem();
-                iMenuSeparator.setLabel("-");
-            } catch (Throwable iExc) {
-                handleException(iExc);
-            }
-        }
-        return iMenuSeparator;
-    }
-    /**
-     * Return the MessageClearLogButton property value.
-     * @return java.awt.Button
-     */
-    private Button getMessageClearLogButton() {
-        if (iMessageClearLogButton == null) {
-            try {
-                iMessageClearLogButton = new Button();
-                iMessageClearLogButton.setName("MessageClearLogButton");
-                iMessageClearLogButton.setLabel("Clear Log");
-            } catch (Throwable iExc) {
-                handleException(iExc);
-            }
-        }
-        return iMessageClearLogButton;
-    }
-    /**
-     * Return the MessageCommandPanel property value.
-     * @return java.awt.Panel
-     */
-    private Panel getMessageCommandPanel() {
-        if (iMessageCommandPanel == null) {
-            try {
-                iMessageCommandPanel = new Panel();
-                iMessageCommandPanel.setName("MessageCommandPanel");
-                iMessageCommandPanel.setLayout(new FlowLayout());
-                getMessageCommandPanel().add(getMessageClearLogButton(), getMessageClearLogButton().getName());
-                getMessageCommandPanel().add(getMessageOkButton(), getMessageOkButton().getName());
-            } catch (Throwable iExc) {
-                handleException(iExc);
-            }
-        }
-        return iMessageCommandPanel;
-    }
-    /**
-     * Return the MessageContentPanel property value.
-     * @return java.awt.Panel
-     */
-    private Panel getMessageContentPanel() {
-        if (iMessageContentPanel == null) {
-            try {
-                iMessageContentPanel = new Panel();
-                iMessageContentPanel.setName("MessageContentPanel");
-                iMessageContentPanel.setLayout(new BorderLayout());
-                iMessageContentPanel.setBackground(SystemColor.control);
-                getMessageContentPanel().add(getMessageTextArea(), "Center");
-                getMessageContentPanel().add(getMessageCommandPanel(), "South");
-            } catch (Throwable iExc) {
-                handleException(iExc);
-            }
-        }
-        return iMessageContentPanel;
-    }
-    /**
-     * Return the MessageFrame property value.
-     * @return java.awt.Frame
-     */
-    private Frame getMessageFrame() {
-        if (iMessageFrame == null) {
-            try {
-                iMessageFrame = new Frame();
-                iMessageFrame.setName("MessageFrame");
-                iMessageFrame.setLayout(new BorderLayout());
-                iMessageFrame.setBounds(0, 0, 750, 250);
-                iMessageFrame.setTitle("Message Log");
-                iMessageFrame.add(getMessageContentPanel(), "Center");
-                iMessageFrame.setLocation((Toolkit.getDefaultToolkit().getScreenSize().width / 2) - (iMessageFrame.getSize().width / 2), (java.awt.Toolkit.getDefaultToolkit().getScreenSize().height / 2));
-            } catch (Throwable iExc) {
-                handleException(iExc);
-            }
-        }
-        return iMessageFrame;
-    }
-    /**
-     * Return the MessageOkButton property value.
-     * @return java.awt.Button
-     */
-    private Button getMessageOkButton() {
-        if (iMessageOkButton == null) {
-            try {
-                iMessageOkButton = new Button();
-                iMessageOkButton.setName("MessageOkButton");
-                iMessageOkButton.setLabel("Close");
-            } catch (Throwable iExc) {
-                handleException(iExc);
-            }
-        }
-        return iMessageOkButton;
-    }
-    /**
-     * Return the MessageOutputLevelChoice property value.
-     * @return java.awt.Choice
-     */
-    private Choice getMessageOutputLevelChoice() {
-        if (iMessageOutputLevelChoice == null) {
-            try {
-                iMessageOutputLevelChoice = new Choice();
-                iMessageOutputLevelChoice.setName("MessageOutputLevelChoice");
-                iMessageOutputLevelChoice.add("Error");
-                iMessageOutputLevelChoice.add("Warning");
-                iMessageOutputLevelChoice.add("Info");
-                iMessageOutputLevelChoice.add("Verbose");
-                iMessageOutputLevelChoice.add("Debug");
-                iMessageOutputLevelChoice.select(2);
-            } catch (Throwable iExc) {
-                handleException(iExc);
-            }
-        }
-        return iMessageOutputLevelChoice;
-    }
-    /**
-     * Return the MessageOutputLevelLabel property value.
-     * @return java.awt.Label
-     */
-    private Label getMessageOutputLevelLabel() {
-        if (iMessageOutputLevelLabel == null) {
-            try {
-                iMessageOutputLevelLabel = new Label();
-                iMessageOutputLevelLabel.setName("MessageOutputLevelLabel");
-                iMessageOutputLevelLabel.setText("Message Level:");
-            } catch (Throwable iExc) {
-                handleException(iExc);
-            }
-        }
-        return iMessageOutputLevelLabel;
-    }
-    /**
-     * Return the MessageTextArea property value.
-     * @return java.awt.TextArea
-     */
-    private TextArea getMessageTextArea() {
-        if (iMessageTextArea == null) {
-            try {
-                iMessageTextArea = new TextArea();
-                iMessageTextArea.setName("MessageTextArea");
-                iMessageTextArea.setFont(new Font("monospaced", 0, 12));
-                iMessageTextArea.setText("");
-                iMessageTextArea.setEditable(false);
-                iMessageTextArea.setEnabled(true);
-            } catch (Throwable iExc) {
-                handleException(iExc);
-            }
-        }
-        return iMessageTextArea;
-    }
-    /**
-     * Return the Panel1 property value.
-     * @return java.awt.Panel
-     */
-    private Panel getOptionenPanel() {
-        if (iOptionenPanel == null) {
-            try {
-                iOptionenPanel = new Panel();
-                iOptionenPanel.setName("OptionenPanel");
-                iOptionenPanel.setLayout(new GridBagLayout());
-                iOptionenPanel.setBackground(SystemColor.control);
-
-                GridBagConstraints constraintsProjectLabel = new GridBagConstraints();
-                constraintsProjectLabel.gridx = 0; constraintsProjectLabel.gridy = 0;
-                constraintsProjectLabel.anchor = GridBagConstraints.WEST;
-                constraintsProjectLabel.insets = new Insets(4, 4, 4, 4);
-                getOptionenPanel().add(getProjectLabel(), constraintsProjectLabel);
-
-                GridBagConstraints constraintsBuildFileLabel = new GridBagConstraints();
-                constraintsBuildFileLabel.gridx = 0; constraintsBuildFileLabel.gridy = 1;
-                constraintsBuildFileLabel.anchor = GridBagConstraints.WEST;
-                constraintsBuildFileLabel.insets = new Insets(4, 4, 4, 4);
-                getOptionenPanel().add(getBuildFileLabel(), constraintsBuildFileLabel);
-
-                GridBagConstraints constraintsTargetLabel = new GridBagConstraints();
-                constraintsTargetLabel.gridx = 0; constraintsTargetLabel.gridy = 2;
-                constraintsTargetLabel.anchor = GridBagConstraints.NORTHWEST;
-                constraintsTargetLabel.insets = new Insets(4, 4, 4, 4);
-                getOptionenPanel().add(getTargetLabel(), constraintsTargetLabel);
-
-                GridBagConstraints constraintsProjectText = new GridBagConstraints();
-                constraintsProjectText.gridx = 1; constraintsProjectText.gridy = 0;
-                constraintsProjectText.gridwidth = 2;
-                constraintsProjectText.fill = GridBagConstraints.HORIZONTAL;
-                constraintsProjectText.anchor = GridBagConstraints.WEST;
-                constraintsProjectText.insets = new Insets(4, 4, 4, 4);
-                getOptionenPanel().add(getProjectText(), constraintsProjectText);
-
-                GridBagConstraints constraintsBuildFileTextField = new GridBagConstraints();
-                constraintsBuildFileTextField.gridx = 1; constraintsBuildFileTextField.gridy = 1;
-                constraintsBuildFileTextField.fill = GridBagConstraints.HORIZONTAL;
-                constraintsBuildFileTextField.anchor = GridBagConstraints.WEST;
-                constraintsBuildFileTextField.weightx = 1.0;
-                constraintsBuildFileTextField.insets = new Insets(4, 4, 4, 4);
-                getOptionenPanel().add(getBuildFileTextField(), constraintsBuildFileTextField);
-
-                GridBagConstraints constraintsBrowseButton = new GridBagConstraints();
-                constraintsBrowseButton.gridx = 2; constraintsBrowseButton.gridy = 1;
-                constraintsBrowseButton.insets = new Insets(4, 4, 4, 4);
-                getOptionenPanel().add(getBrowseButton(), constraintsBrowseButton);
-
-                GridBagConstraints constraintsTargetList = new GridBagConstraints();
-                constraintsTargetList.gridx = 1; constraintsTargetList.gridy = 2;
-                constraintsTargetList.gridheight = 2;
-                constraintsTargetList.fill = GridBagConstraints.BOTH;
-                constraintsTargetList.weightx = 1.0;
-                constraintsTargetList.weighty = 1.0;
-                constraintsTargetList.insets = new Insets(4, 4, 4, 4);
-                getOptionenPanel().add(getTargetList(), constraintsTargetList);
-
-                GridBagConstraints constraintsMessageOutputLevelLabel = new GridBagConstraints();
-                constraintsMessageOutputLevelLabel.gridx = 0; constraintsMessageOutputLevelLabel.gridy = 4;
-                constraintsMessageOutputLevelLabel.anchor = GridBagConstraints.WEST;
-                constraintsMessageOutputLevelLabel.insets = new Insets(4, 4, 4, 4);
-                getOptionenPanel().add(getMessageOutputLevelLabel(), constraintsMessageOutputLevelLabel);
-
-                GridBagConstraints constraintsMessageOutputLevelChoice = new GridBagConstraints();
-                constraintsMessageOutputLevelChoice.gridx = 1; constraintsMessageOutputLevelChoice.gridy = 4;
-                constraintsMessageOutputLevelChoice.fill = GridBagConstraints.HORIZONTAL;
-                constraintsMessageOutputLevelChoice.anchor = GridBagConstraints.WEST;
-                constraintsMessageOutputLevelChoice.weightx = 1.0;
-                constraintsMessageOutputLevelChoice.insets = new Insets(4, 4, 4, 4);
-                getOptionenPanel().add(getMessageOutputLevelChoice(), constraintsMessageOutputLevelChoice);
-            } catch (Throwable iExc) {
-                handleException(iExc);
-            }
-        }
-        return iOptionenPanel;
-    }
-    /**
-     * Return the ProjectLabel property value.
-     * @return java.awt.Label
-     */
-    private Label getProjectLabel() {
-        if (iProjectLabel == null) {
-            try {
-                iProjectLabel = new Label();
-                iProjectLabel.setName("ProjectLabel");
-                iProjectLabel.setText("Projectname:");
-            } catch (Throwable iExc) {
-                handleException(iExc);
-            }
-        }
-        return iProjectLabel;
-    }
-    /**
-     * Return the ProjectText property value.
-     * @return java.awt.Label
-     */
-    private Label getProjectText() {
-        if (iProjectText == null) {
-            try {
-                iProjectText = new Label();
-                iProjectText.setName("ProjectText");
-                iProjectText.setText(" ");
-            } catch (Throwable iExc) {
-                handleException(iExc);
-            }
-        }
-        return iProjectText;
-    }
-    /**
-     * Return the ReloadButton property value.
-     * @return java.awt.Button
-     */
-    private Button getReloadButton() {
-        if (iReloadButton == null) {
-            try {
-                iReloadButton = new Button();
-                iReloadButton.setName("ReloadButton");
-                iReloadButton.setLabel("(Re)Load");
-            } catch (Throwable iExc) {
-                handleException(iExc);
-            }
-        }
-        return iReloadButton;
-    }
-    /**
-     * Return the SaveMenuItem property value.
-     * @return java.awt.MenuItem
-     */
-    private MenuItem getSaveMenuItem() {
-        if (iSaveMenuItem == null) {
-            try {
-                iSaveMenuItem = new MenuItem();
-                iSaveMenuItem.setLabel("Save BuildInfo To Repository");
-            } catch (Throwable iExc) {
-                handleException(iExc);
-            }
-        }
-        return iSaveMenuItem;
-    }
-    /**
-     * Return the ShowLogMenuItem property value.
-     * @return java.awt.MenuItem
-     */
-    private MenuItem getShowLogMenuItem() {
-        if (iShowLogMenuItem == null) {
-            try {
-                iShowLogMenuItem = new MenuItem();
-                iShowLogMenuItem.setLabel("Log");
-            } catch (Throwable iExc) {
-                handleException(iExc);
-            }
-        }
-        return iShowLogMenuItem;
-    }
-    /**
-     * Return the TargetLabel property value.
-     * @return java.awt.Label
-     */
-    private Label getTargetLabel() {
-        if (iTargetLabel == null) {
-            try {
-                iTargetLabel = new Label();
-                iTargetLabel.setName("TargetLabel");
-                iTargetLabel.setText("Target:");
-                iTargetLabel.setEnabled(true);
-            } catch (Throwable iExc) {
-                handleException(iExc);
-            }
-        }
-        return iTargetLabel;
-    }
-    /**
-     * Return the TargetList property value.
-     * @return java.awt.List
-     */
-    private List getTargetList() {
-        if (iTargetList == null) {
-            try {
-                iTargetList = new List();
-                iTargetList.setName("TargetList");
-                iTargetList.setEnabled(true);
-            } catch (Throwable iExc) {
-                handleException(iExc);
-            }
-        }
-        return iTargetList;
-    }
-    /**
-     * Called whenever the part throws an exception.
-     * @param exception Throwable
-     */
-    private void handleException(Throwable exception) {
-        // Write exceptions to the log-window
-        String trace = StringUtils.getStackTrace(exception);
-
-        getMessageTextArea().append(lineSeparator + lineSeparator + trace);
-        getMessageFrame().show();
-
-    }
-    /**
-     * Initializes connections
-     * @exception Exception The exception description.
-     */
-    private void initConnections() throws Exception {
-        this.addWindowListener(iEventHandler);
-        getBrowseButton().addActionListener(iEventHandler);
-        getCloseButton().addActionListener(iEventHandler);
-        getBuildButton().addActionListener(iEventHandler);
-        getStopButton().addActionListener(iEventHandler);
-        getSaveMenuItem().addActionListener(iEventHandler);
-        getAboutOkButton().addActionListener(iEventHandler);
-        getAboutMenuItem().addActionListener(iEventHandler);
-        getMessageOkButton().addActionListener(iEventHandler);
-        getMessageClearLogButton().addActionListener(iEventHandler);
-        getMessageOkButton().addActionListener(iEventHandler);
-        getShowLogMenuItem().addActionListener(iEventHandler);
-        getAboutDialog().addWindowListener(iEventHandler);
-        getMessageFrame().addWindowListener(iEventHandler);
-        getReloadButton().addActionListener(iEventHandler);
-        getTargetList().addItemListener(iEventHandler);
-        getMessageOutputLevelChoice().addItemListener(iEventHandler);
-        getBuildFileTextField().addTextListener(iEventHandler);
-        connectProjectNameToLabel();
-        connectBuildFileNameToTextField();
-    }
-    /**
-     * Initialize the class.
-     */
-    private void initialize() {
-        try {
-            setName("AntMake");
-            setMenuBar(getAntMakeMenuBar());
-            setLayout(new java.awt.BorderLayout());
-            setSize(389, 222);
-            setTitle("Ant VisualAge for Java Tool-Integration");
-            add(getContentsPane(), "Center");
-            initConnections();
-        } catch (Throwable iExc) {
-            handleException(iExc);
-        }
-        setLocation((Toolkit.getDefaultToolkit().getScreenSize().width / 2) - (getSize().width / 2), (java.awt.Toolkit.getDefaultToolkit().getScreenSize().height / 2) - (getSize().height));
-        if ((getTargetList().getItemCount() == 0) || (getTargetList().getSelectedIndex() < 0)) {
-            getBuildButton().setEnabled(false);
-        }
-    }
-    /**
-     * Saves the build-informations to repository
-     */
-    private void saveBuildInfo() {
-        try {
-            VAJAntTool.saveBuildData(getBuildInfo());
-        } catch (Throwable exc) {
-            // This Exception occurs when you try to write into a versioned project
-            handleException(exc);
-        }
-        return;
-    }
-    /**
-     * Set the BuildInfo to a new value.
-     * @param newValue org.apache.tools.ant.taskdefs.optional.vaj.VAJBuildInfo
-     */
-    private void setBuildInfo(VAJBuildInfo newValue) {
-        if (iBuildInfo != newValue) {
-            try {
-                /* Stop listening for events from the current object */
-                if (iBuildInfo != null) {
-                    iBuildInfo.removePropertyChangeListener(iEventHandler);
-                }
-                iBuildInfo = newValue;
-
-                /* Listen for events from the new object */
-                if (iBuildInfo != null) {
-                    iBuildInfo.addPropertyChangeListener(iEventHandler);
-                }
-                connectProjectNameToLabel();
-                connectBuildFileNameToTextField();
-
-                // Select the log-level given by BuildInfo
-                getMessageOutputLevelChoice().select(iBuildInfo.getOutputMessageLevel());
-                fillList();
-                // BuildInfo can conly be saved to a VAJ project if tool API is called via the projects context-menu
-                if ((iBuildInfo.getVAJProjectName() == null) || (iBuildInfo.getVAJProjectName().equals(""))) {
-                    getSaveMenuItem().setEnabled(false);
-                }
-            } catch (Throwable iExc) {
-                handleException(iExc);
-            }
-        }
-    }
-
-    private Button iStopButton = null;
-
-    /**
-     * Return the StopButton property value.
-     * @return java.awt.Button
-     */
-    private Button getStopButton() {
-        if (iStopButton == null) {
-            try {
-                iStopButton = new Button();
-                iStopButton.setName("StopButton");
-                iStopButton.setLabel("Stop");
-                iStopButton.setEnabled(false);
-            } catch (Throwable iExc) {
-                handleException(iExc);
-            }
-        }
-        return iStopButton;
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJBuildInfo.java b/src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJBuildInfo.java
deleted file mode 100644
index 5927196..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJBuildInfo.java
+++ /dev/null
@@ -1,519 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.ide;
-
-
-import java.util.Vector;
-import java.util.Enumeration;
-import java.util.StringTokenizer;
-import java.io.File;
-import java.beans.PropertyChangeSupport;
-import java.beans.PropertyChangeListener;
-
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.ProjectHelper;
-import org.apache.tools.ant.Target;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.BuildListener;
-import org.apache.tools.ant.BuildEvent;
-
-/**
- * This class wraps the Ant project information needed to
- * start Ant from Visual Age.
- * It serves the following purposes:
- * - acts as model for AntMakeFrame
- * - converts itself to/from String (to store the information
- *   as ToolData in the VA repository)
- * - wraps Project functions for the GUI (get target list,
- *   execute target)
- * - manages a seperate thread for Ant project execution
- *   this allows interrupting a running build from a GUI
- *
- * @author Wolf Siberski, TUI Infotec GmbH
- */
-
-class VAJBuildInfo implements Runnable {
-    /**
-     * This exception is thrown when a build is interrupted
-     */
-    public static class BuildInterruptedException extends BuildException {
-        public String toString() {
-            return "BUILD INTERRUPTED";
-        }
-    }
-
-    /**
-     * BuildListener which checks for interruption and throws Exception
-     * if build process is interrupted. This class is a wrapper around
-     * a 'real' listener.
-     */
-    private class InterruptedChecker implements BuildListener {
-        // the real listener
-        BuildListener wrappedListener;
-
-        /**
-         * Can only be constructed as wrapper around a real listener
-         * @param listener the real listener
-         */
-        public InterruptedChecker(BuildListener listener) {
-            super();
-            wrappedListener = listener;
-        }
-
-        /**
-         * checks if the thread was interrupted. When an
-         * interrupt occured, throw an Exception to stop
-         * the execution.
-         */
-        protected void checkInterrupted() {
-            if (buildThread.isInterrupted()) {
-                throw new BuildInterruptedException();
-            }
-        }
-
-        /**
-         *  Fired after the last target has finished. This event
-         *  will still be thrown if an error occured during the build.
-         */
-        public void buildFinished(BuildEvent event) {
-            wrappedListener.buildFinished(event);
-            checkInterrupted();
-        }
-
-        /**
-         *  Fired before any targets are started.
-         */
-        public void buildStarted(BuildEvent event) {
-            wrappedListener.buildStarted(event);
-            checkInterrupted();
-        }
-
-        /**
-         *  Fired whenever a message is logged.
-         */
-        public void messageLogged(BuildEvent event) {
-            wrappedListener.messageLogged(event);
-            checkInterrupted();
-        }
-
-        /**
-         *  Fired when a target has finished. This event will
-         *  still be thrown if an error occured during the build.
-         */
-        public void targetFinished(BuildEvent event) {
-            wrappedListener.targetFinished(event);
-            checkInterrupted();
-        }
-
-        /**
-         *  Fired when a target is started.
-         */
-        public void targetStarted(BuildEvent event) {
-            wrappedListener.targetStarted(event);
-            checkInterrupted();
-        }
-
-        /**
-         *  Fired when a task has finished. This event will still
-         *  be throw if an error occured during the build.
-         */
-        public void taskFinished(BuildEvent event) {
-            wrappedListener.taskFinished(event);
-            checkInterrupted();
-        }
-
-        /**
-         *  Fired when a task is started.
-         */
-        public void taskStarted(BuildEvent event) {
-            wrappedListener.taskStarted(event);
-            checkInterrupted();
-        }
-    }
-
-    // name of the VA project this BuildInfo belongs to
-    private String vajProjectName = "";
-
-    // name of the Ant build file
-    private String buildFileName = "";
-
-    // main targets found in the build file
-    private Vector projectTargets = new Vector();
-
-    // target selected for execution
-    private java.lang.String target = "";
-
-    // log level
-    private int outputMessageLevel = Project.MSG_INFO;
-
-    // Ant Project created from build file
-    private transient Project project;
-
-    // is true if Project initialization was successful
-    private transient boolean projectInitialized = false;
-
-    // Support for bound properties
-    protected transient PropertyChangeSupport propertyChange;
-
-    // thread for Ant build execution
-    private Thread buildThread;
-
-    // the listener used to log output.
-    private BuildListener projectLogger;
-
-
-    /**
-     * The addPropertyChangeListener method was generated to support the
-     * propertyChange field.
-     */
-    public synchronized void addPropertyChangeListener(PropertyChangeListener listener) {
-        getPropertyChange().addPropertyChangeListener(listener);
-    }
-
-    /**
-     * Returns the BuildInfo information as String. The BuildInfo can
-     * be rebuilt from that String by calling parse().
-     * @return java.lang.String
-     */
-    public String asDataString() {
-        String result = getOutputMessageLevel() + "|" + getBuildFileName()
-            + "|" + getTarget();
-        for (Enumeration e = getProjectTargets().elements();
-              e.hasMoreElements();) {
-            result = result + "|" + e.nextElement();
-        }
-
-        return result;
-    }
-
-    /**
-     * Search for the insert position to keep names a sorted list of Strings
-     * This method has been copied from org.apache.tools.ant.Main
-     */
-    private static int findTargetPosition(Vector names, String name) {
-        int res = names.size();
-        for (int i = 0; i < names.size() && res == names.size(); i++) {
-            if (name.compareTo((String) names.elementAt(i)) < 0) {
-                res = i;
-            }
-        }
-        return res;
-    }
-
-    /**
-     * The firePropertyChange method was generated to support the propertyChange field.
-     */
-    public void firePropertyChange(java.lang.String propertyName, java.lang.Object oldValue, java.lang.Object newValue) {
-        getPropertyChange().firePropertyChange(propertyName, oldValue, newValue);
-    }
-
-    /**
-     * Returns the build file name.
-     * @return build file name.
-     */
-    public String getBuildFileName() {
-        return buildFileName;
-    }
-
-    /**
-     * Returns the log level
-     * @return log level.
-     */
-    public int getOutputMessageLevel() {
-        return outputMessageLevel;
-    }
-
-    /**
-     * Returns the Ant project
-     * @return org.apache.tools.ant.Project
-     */
-    private Project getProject() {
-        if (project == null) {
-            project = new Project();
-        }
-        return project;
-    }
-
-    /**
-     * return a list of all targets in the current buildfile
-     */
-    public Vector getProjectTargets() {
-        return projectTargets;
-    }
-
-    /**
-     * Accessor for the propertyChange field.
-     */
-    protected PropertyChangeSupport getPropertyChange() {
-        if (propertyChange == null) {
-            propertyChange = new PropertyChangeSupport(this);
-        }
-        return propertyChange;
-    }
-
-    /**
-     * returns the selected target.
-     */
-    public java.lang.String getTarget() {
-        return target;
-    }
-
-    /**
-     * returns the VA project name
-     */
-    public String getVAJProjectName() {
-        return vajProjectName;
-    }
-
-    /**
-     * Initializes the Ant project. Assumes that the
-     * project attribute is already set.
-     */
-    private void initProject() {
-        try {
-            project.init();
-            File buildFile = new File(getBuildFileName());
-            project.setUserProperty("ant.file", buildFile.getAbsolutePath());
-            ProjectHelper.configureProject(project, buildFile);
-            setProjectInitialized(true);
-        } catch (RuntimeException exc) {
-            setProjectInitialized(false);
-            throw exc;
-        } catch (Error err) {
-            setProjectInitialized(false);
-            throw err;
-        }
-    }
-
-    /**
-     * Returns true, if the Ant project is initialized.
-     * (i.e., if the buildfile loaded).
-     */
-    public boolean isProjectInitialized() {
-        return projectInitialized;
-    }
-
-    /**
-     * Creates a BuildInfo object from a String
-     * The String must be in the format
-     * outputMessageLevel'|'buildFileName'|'defaultTarget'|'(project target'|')*
-     *
-     * @return org.apache.tools.ant.taskdefs.optional.vaj.BuildInfo
-     * @param data java.lang.String
-     */
-    public static VAJBuildInfo parse(String data) {
-        VAJBuildInfo result = new VAJBuildInfo();
-
-        try {
-            StringTokenizer tok = new StringTokenizer(data, "|");
-            result.setOutputMessageLevel(tok.nextToken());
-            result.setBuildFileName(tok.nextToken());
-            result.setTarget(tok.nextToken());
-            while (tok.hasMoreTokens()) {
-                result.projectTargets.addElement(tok.nextToken());
-            }
-        } catch (Throwable t) {
-            // if parsing the info fails, just return
-            // an empty VAJBuildInfo
-        }
-        return result;
-    }
-
-    /**
-     * The removePropertyChangeListener method was generated
-     * to support the propertyChange field.
-     */
-    public synchronized void removePropertyChangeListener(PropertyChangeListener listener) {
-        getPropertyChange().removePropertyChangeListener(listener);
-    }
-
-    /**
-     * Sets the build file name
-     * @param buildFileName build file name
-     */
-    public void setBuildFileName(String newBuildFileName) {
-        String oldValue = buildFileName;
-        buildFileName = newBuildFileName;
-        setProjectInitialized(false);
-        firePropertyChange("buildFileName", oldValue, buildFileName);
-    }
-
-    /**
-     * Sets the log level (value must be one of the constants in Project)
-     * @param outputMessageLevel log level.
-     */
-    public void setOutputMessageLevel(int newOutputMessageLevel) {
-        int oldValue = outputMessageLevel;
-        outputMessageLevel = newOutputMessageLevel;
-        firePropertyChange("outputMessageLevel",
-                           new Integer(oldValue), new Integer(outputMessageLevel));
-    }
-
-    /**
-     * Sets the log level (value must be one of the constants in Project)
-     * @param outputMessageLevel log level as String.
-     */
-    private void setOutputMessageLevel(String outputMessageLevel) {
-        int level = Integer.parseInt(outputMessageLevel);
-        setOutputMessageLevel(level);
-    }
-
-    /**
-     * sets the initialized flag
-     */
-    private void setProjectInitialized(boolean initialized) {
-        Boolean oldValue = new Boolean(projectInitialized);
-        projectInitialized = initialized;
-        firePropertyChange("projectInitialized", oldValue, new Boolean(projectInitialized));
-    }
-
-    /**
-     * Sets the target to execute when executeBuild is called
-     * @param newTarget build target
-     */
-    public void setTarget(String newTarget) {
-        String oldValue = target;
-        target = newTarget;
-        firePropertyChange("target", oldValue, target);
-    }
-
-    /**
-     * Sets the name of the Visual Age for Java project where
-     * this BuildInfo belongs to
-     * @param newProjectName VAJ project
-     */
-    public void setVAJProjectName(String newVAJProjectName) {
-        String oldValue = vajProjectName;
-        vajProjectName = newVAJProjectName;
-        firePropertyChange("VAJProjectName", oldValue, vajProjectName);
-    }
-
-    /**
-     * reloads the build file and updates the target list
-     */
-    public void updateTargetList() {
-        project = new Project();
-        initProject();
-        projectTargets.removeAllElements();
-        Enumeration ptargets = project.getTargets().elements();
-        while (ptargets.hasMoreElements()) {
-            Target currentTarget = (Target) ptargets.nextElement();
-            if (currentTarget.getDescription() != null) {
-                String targetName = currentTarget.getName();
-                int pos = findTargetPosition(projectTargets, targetName);
-                projectTargets.insertElementAt(targetName, pos);
-            }
-        }
-    }
-
-
-    /**
-     * cancels a build.
-     */
-    public void cancelBuild() {
-        buildThread.interrupt();
-    }
-
-    /**
-     * Executes the target set by setTarget().
-     * @param listener  BuildListener for the output of the build
-     */
-    public void executeProject(BuildListener logger) {
-        Throwable error;
-        projectLogger = logger;
-        try {
-            buildThread = new Thread(this);
-            buildThread.setPriority(Thread.MIN_PRIORITY);
-            buildThread.start();
-        } catch (RuntimeException exc) {
-            error = exc;
-            throw exc;
-        } catch (Error err) {
-            error = err;
-            throw err;
-        }
-    }
-
-    /**
-     * Executes a build. This method is executed by
-     * the Ant execution thread
-     */
-    public void run() {
-        try {
-            InterruptedChecker ic = new InterruptedChecker(projectLogger);
-            BuildEvent e = new BuildEvent(getProject());
-            try {
-                ic.buildStarted(e);
-
-                if (!isProjectInitialized()) {
-                    initProject();
-                }
-
-                project.addBuildListener(ic);
-                project.executeTarget(target);
-
-                ic.buildFinished(e);
-            } catch (Throwable t) {
-                e.setException(t);
-                ic.buildFinished(e);
-            } finally {
-                project.removeBuildListener(ic);
-            }
-        } catch (Throwable t2) {
-            System.out.println("unexpected exception!");
-            t2.printStackTrace();
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJExport.java b/src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJExport.java
deleted file mode 100644
index 8075a71..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJExport.java
+++ /dev/null
@@ -1,212 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.ide;
-
-
-import java.io.File;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.types.PatternSet;
-
-/**
- * Export packages from the Visual Age for Java workspace.
- * The packages are specified similar to all other MatchingTasks.
- * Since the VA Workspace is not file based, this task is simulating
- * a directory hierarchy for the workspace:
- * The 'root' contains all project 'dir's, and the projects contain
- * their respective package 'dir's.
- * Example:
- * <blockquote>
- * &lt;vajexport destdir="C:/builddir/source">
- * &nbsp;&lt;include name="/MyVAProject/org/foo/subsystem1/**" />
- * &nbsp;&lt;exclude name="/MyVAProject/org/foo/subsystem1/test/**"/>
- * &lt;/vajexport>
- * </blockquote>
- * exports all packages in the project MyVAProject which start with
- * 'org.foo.subsystem1' except of these starting with
- * 'org.foo.subsystem1.test'.
- *
- * There are flags to choose which items to export:
- * exportSources:   export Java sources
- * exportResources: export project resources
- * exportClasses:   export class files
- * exportDebugInfo: export class files with debug info (use with exportClasses)
- * default is exporting Java files and resources.
- *
- * @author Wolf Siberski, TUI Infotec GmbH
- */
-
-public class VAJExport extends VAJTask {
-    //set set... method comments for description
-    protected File destDir;
-    protected boolean exportSources = true;
-    protected boolean exportResources = true;
-    protected boolean exportClasses = false;
-    protected boolean exportDebugInfo = false;
-    protected boolean useDefaultExcludes = true;
-    protected boolean overwrite = true;
-
-    protected PatternSet patternSet = new PatternSet();
-
-    /**
-     * add a name entry on the exclude list
-     */
-    public PatternSet.NameEntry createExclude() {
-        return patternSet.createExclude();
-    }
-
-    /**
-     * add a name entry on the include list
-     */
-    public PatternSet.NameEntry createInclude() {
-        return patternSet.createInclude();
-    }
-
-    /**
-     * do the export
-     */
-    public void execute() throws BuildException {
-        // first off, make sure that we've got a destdir
-        if (destDir == null) {
-            throw new BuildException("destdir attribute must be set!");
-        }
-
-        // delegate the export to the VAJUtil object.
-        getUtil().exportPackages(destDir,
-            patternSet.getIncludePatterns(getProject()),
-            patternSet.getExcludePatterns(getProject()),
-            exportClasses, exportDebugInfo,
-            exportResources, exportSources,
-            useDefaultExcludes, overwrite);
-    }
-
-    /**
-     * Sets whether default exclusions should be used or not.
-     *
-     * @param useDefaultExcludes "true"|"on"|"yes" when default exclusions
-     *                           should be used, "false"|"off"|"no" when they
-     *                           shouldn't be used.
-     */
-    public void setDefaultexcludes(boolean useDefaultExcludes) {
-        this.useDefaultExcludes = useDefaultExcludes;
-    }
-
-    /**
-     * Set the destination directory into which the selected
-     * items should be exported
-     */
-    public void setDestdir(File destDir) {
-        this.destDir = destDir;
-    }
-
-    /**
-     * Sets the set of exclude patterns. Patterns may be separated by a comma
-     * or a space. Currently only patterns denoting packages are
-     * supported
-     *
-     * @param excludes the string containing the exclude patterns
-     */
-    public void setExcludes(String excludes) {
-        patternSet.setExcludes(excludes);
-    }
-
-    /**
-     * if exportClasses is set, class files are exported
-     */
-    public void setExportClasses(boolean doExport) {
-        exportClasses = doExport;
-    }
-
-    /**
-     * if exportDebugInfo is set, the exported class files contain
-     * debug info
-     */
-    public void setExportDebugInfo(boolean doExport) {
-        exportDebugInfo = doExport;
-    }
-
-    /**
-     * if exportResources is set, resource file will be exported
-     */
-    public void setExportResources(boolean doExport) {
-        exportResources = doExport;
-    }
-
-    /**
-     * if exportSources is set, java files will be exported
-     */
-    public void setExportSources(boolean doExport) {
-        exportSources = doExport;
-    }
-
-    /**
-     * Sets the set of include patterns. Patterns may be separated by a comma
-     * or a space.Currently only patterns denoting packages are
-     * supported
-     *
-     * @param includes the string containing the include patterns
-     */
-    public void setIncludes(String includes) {
-        patternSet.setIncludes(includes);
-    }
-
-    /**
-     * if Overwrite is set, files will be overwritten during export
-     */
-    public void setOverwrite(boolean doOverwrite) {
-        overwrite = doOverwrite;
-    }
-
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJExportServlet.java b/src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJExportServlet.java
deleted file mode 100644
index 8166d98..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJExportServlet.java
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.ide;
-
-
-import java.io.File;
-
-/**
- * A Remote Access to Tools Servlet to extract package
- * sets from the Workbench to the local file system.
- * The following table describes the servlet parameters.
- *
- * <table border="1">
- *   <tr>
- *     <td><strong>Parameter</strong></td>
- *     <td><strong>Values</strong></td>
- *     <td><strong>Description</strong></td>
- *   </tr>
- *   <tr>
- *     <td>dir</td>
- *     <td>Any valid directory name on the server.</td>
- *     <td>The directory to export the files to on the machine 
- *         where the servlet is being run.  If the directory 
- *         doesn't exist, it will be created.<p>
- *         Relative paths are relative to 
- *         IBMVJava/ide/tools/com-ibm-ivj-toolserver, 
- *         where IBMVJava is the VisualAge for Java installation 
- *         directory.</td>
- *   </tr>
- *   <tr>
- *     <td>include</td>
- *     <td>See below.</td>
- *     <td>The pattern used to indicate which projects and 
- *         packages to export.</td>
- *   </tr>
- *   <tr>
- *     <td>exclude</td>
- *     <td>See below</td>
- *     <td>The pattern used to indicate which projects and 
- *         packages <em>not</em> to export.</td>
- *   </tr>
- *   <tr>
- *     <td>cls</td>
- *     <td>"yes" or "no" (without the quotes)</td>
- *     <td>Export class files.  Defaults to "no".</td>
- *   </tr>
- *   <tr>
- *     <td>src</td>
- *     <td>"yes" or "no" (without the quotes)</td>
- *     <td>Export source files.  Defaults to "yes".</td>
- *   </tr>
- *   <tr>
- *     <td>res</td>
- *     <td>"yes" or "no" (without the quotes)</td>
- *     <td>Export resource files associated with the included project(s).
- *         Defaults to "yes".</td>
- *   </tr>
- *   <tr>
- *     <td>dex</td>
- *     <td>"yes" or "no" (without the quotes)</td>
- *     <td>Use the default exclusion patterns.  Defaults to "yes".  
- *         See below for an explanation of default excludes.</td>
- *   </tr>
- *   <tr>
- *     <td>owr</td>
- *     <td>"yes" or "no" (without the quotes)</td>
- *     <td>Overwrite any existing files.  Defaults to "yes".</td>
- *   </tr>
- * </table>
- *
- * <p>The vajexport servlet uses include and exclude parameters to form 
- *    the criteria for selecting packages to export. The parameter is 
- *    broken up into ProjectName/packageNameSegments, where ProjectName 
- *    is what you expect, and packageNameSegments is a partial (or complete) 
- *    package name, separated by forward slashes, rather than periods.  
- *    Each packageNameSegment can have wildcard characters.</p>
- *
- * <table border="1">
- *   <tr>
- *     <td><strong>Wildcard Characters</strong></td>
- *     <td><strong>Description</strong></td>
- *   </tr>
- *   <tr>
- *     <td>*</td>
- *     <td>Match zero or more characters in that segment.</td>
- *   </tr>
- *   <tr>
- *     <td>?</td>
- *     <td>Match one character in that segment.</td>
- *   </tr>
- *   <tr>
- *     <td>**</td>
- *     <td>Matches all characters in zero or more segments.</td>
- *   </tr>
- * </table>
- *
- * @author Wolf Siberski, based on servlets written by Glenn McAllister
- */
-public class VAJExportServlet extends VAJToolsServlet {
-    // constants for servlet param names
-    public static final String WITH_DEBUG_INFO = "deb";
-    public static final String OVERWRITE_PARAM = "owr";
-
-    /**
-     * Respond to a request to export packages from the Workbench.
-     */
-    protected void executeRequest() {
-        getUtil().exportPackages(
-                         new File(getFirstParamValueString(DIR_PARAM)),
-                         getParamValues(INCLUDE_PARAM),
-                         getParamValues(EXCLUDE_PARAM),
-                         getBooleanParam(CLASSES_PARAM, false),
-                         getBooleanParam(WITH_DEBUG_INFO, false),
-                         getBooleanParam(RESOURCES_PARAM, true),
-                         getBooleanParam(SOURCES_PARAM, true),
-                         getBooleanParam(DEFAULT_EXCLUDES_PARAM, true),
-                         getBooleanParam(OVERWRITE_PARAM, true));
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJImport.java b/src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJImport.java
deleted file mode 100644
index 4f55cf9..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJImport.java
+++ /dev/null
@@ -1,232 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.ide;
-
-
-import java.util.Enumeration;
-import java.util.Vector;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.DirectoryScanner;
-
-import org.apache.tools.ant.types.FileSet;
-
-import java.lang.reflect.Field;
-
-/**
- * Import source, class files, and resources to the Visual Age for Java
- * workspace using FileSets.
- * <p>
- * Example:
- * <pre>
- * &lt;vajimport project="MyVAProject"&gt;
- *   &lt;fileset dir="src"&gt;
- *     &lt;include name="org/foo/subsystem1/**" /&gt;
- *     &lt;exclude name="/org/foo/subsystem1/test/**" /&gt;
- *  &lt;/fileset&gt;
- * &lt;/vajexport&gt;
- * </pre>
- * import all source and resource files from the "src" directory
- * which start with 'org.foo.subsystem1', except of these starting with
- * 'org.foo.subsystem1.test' into the project MyVAProject.
- * </p>
- * <p>If MyVAProject isn't loaded into the Workspace, a new edition is
- * created in the repository and automatically loaded into the Workspace.
- * There has to be at least one nested FileSet element.
- * </p>
- * <p>There are attributes to choose which items to export:
- * <table border="1" cellpadding="2" cellspacing="0">
- * <tr>
- *   <td valign="top"><b>Attribute</b></td>
- *   <td valign="top"><b>Description</b></td>
- *   <td align="center" valign="top"><b>Required</b></td>
- * </tr>
- * <tr>
- *   <td valign="top">project</td>
- *   <td valign="top">the name of the Project to import to</td>
- *   <td align="center" valign="top">Yes</td>
- * </tr>
- * <tr>
- *   <td valign="top">importSources</td>
- *   <td valign="top">import Java sources, defaults to "yes"</td>
- *   <td align="center" valign="top">No</td>
- * </tr>
- * <tr>
- *   <td valign="top">importResources</td>
- *   <td valign="top">import resource files (anything that doesn't
- *                    end with .java or .class), defaults to "yes"</td>
- *   <td align="center" valign="top">No</td>
- * </tr>
- * <tr>
- *   <td valign="top">importClasses</td>
- *   <td valign="top">import class files, defaults to "no"</td>
- *   <td align="center" valign="top">No</td>
- * </tr>
- * </table>
- *
- * @author Glenn McAllister, inspired by a similar task written by Peter Kelley
- */
-public class VAJImport extends VAJTask {
-    protected Vector filesets = new Vector();
-    protected boolean importSources = true;
-    protected boolean importResources = true;
-    protected boolean importClasses = false;
-    protected String importProject = null;
-    protected boolean useDefaultExcludes = true;
-
-
-    /**
-     * The VisualAge for Java Project name to import into.
-     */
-    public void setProject(String projectName) {
-        this.importProject = projectName;
-    }
-
-    /**
-     * Adds a set of files (nested fileset attribute).
-     */
-    public void addFileset(FileSet set) {
-        filesets.addElement(set);
-    }
-
-    /**
-     * Import .class files.
-     */
-    public void setImportClasses(boolean importClasses) {
-        this.importClasses = importClasses;
-    }
-
-    /**
-     * Import resource files (anything that doesn't end in
-     * .class or .java)
-     */
-    public void setImportResources(boolean importResources) {
-        this.importResources = importResources;
-    }
-
-    /**
-     * Import .java files
-     */
-    public void setImportSources(boolean importSources) {
-        this.importSources = importSources;
-    }
-
-    /**
-     * Sets whether default exclusions should be used or not.
-     *
-     * @param useDefaultExcludes "true"|"on"|"yes" when default exclusions
-     *                           should be used, "false"|"off"|"no" when they
-     *                           shouldn't be used.
-     */
-    public void setDefaultexcludes(boolean useDefaultExcludes) {
-        this.useDefaultExcludes = useDefaultExcludes;
-    }
-
-    /**
-     * Do the import.
-     */
-    public void execute() throws BuildException {
-        if (filesets.size() == 0) {
-            throw new BuildException("At least one fileset is required!");
-        }
-
-        if (importProject == null || "".equals(importProject)) {
-            throw new BuildException("The VisualAge for Java Project name is required!");
-        }
-
-        for (Enumeration e = filesets.elements(); e.hasMoreElements();) {
-            importFileset((FileSet) e.nextElement());
-        }
-    }
-
-    /**
-     * Import all files from the fileset into the Project in the
-     * Workspace.
-     */
-    protected void importFileset(FileSet fileset) {
-        DirectoryScanner ds = fileset.getDirectoryScanner(this.project);
-        if (ds.getIncludedFiles().length == 0) {
-            return;
-        }
-
-        String[] includes = null;
-        String[] excludes = null;
-
-        // Hack to get includes and excludes. We could also use getIncludedFiles,
-        // but that would result in very long HTTP-requests.
-        // Therefore we want to send the patterns only to the remote tool server
-        // and let him figure out the files.
-        try {
-            Class directoryScanner = ds.getClass();
-
-            Field includesField = directoryScanner.getDeclaredField("includes");
-            includesField.setAccessible(true);
-            includes = (String[]) includesField.get(ds);
-
-            Field excludesField = directoryScanner.getDeclaredField("excludes");
-            excludesField.setAccessible(true);
-            excludes = (String[]) excludesField.get(ds);
-        } catch (NoSuchFieldException nsfe) {
-            throw new BuildException(
-                "DirectoryScanner.includes or .excludes missing" + nsfe.getMessage());
-        } catch (IllegalAccessException iae) {
-            throw new BuildException(
-                "Access to DirectoryScanner.includes or .excludes not allowed");
-        }
-
-        getUtil().importFiles(importProject, ds.getBasedir(),
-                includes, excludes,
-                importClasses, importResources, importSources,
-                useDefaultExcludes);
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJImportServlet.java b/src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJImportServlet.java
deleted file mode 100644
index 5e23c19..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJImportServlet.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.ide;
-
-import java.io.File;
-
-
-/**
- * A Remote Access to Tools Servlet to import a Project
- * from files into the Repository. The following
- * table describes the servlet parameters.
- *
- * <table>
- *   <tr>
- *     <td>Parameter</td>
- *     <td>Description</td>
- *   </tr>
- *   <tr>
- *     <td>project</td>
- *     <td>The name of the project where you want the imported
- *         items to go.
- *     </td>
- *   </tr>
- *   <tr>
- *     <td>dir</td>
- *     <td>The directory you want to import from.</td>
- *   </tr>
- * </table>
- *
- * @author Wolf Siberski, based on servlets written by Glenn McAllister
- */
-public class VAJImportServlet extends VAJToolsServlet {
-    /**
-     * Respond to a request to import files to the Repository
-     */
-    protected void executeRequest() {
-        getUtil().importFiles(
-                      getFirstParamValueString(PROJECT_NAME_PARAM),
-                      new File(getFirstParamValueString(DIR_PARAM)),
-                      getParamValues(INCLUDE_PARAM),
-                      getParamValues(EXCLUDE_PARAM),
-                      getBooleanParam(CLASSES_PARAM, false),
-                      getBooleanParam(RESOURCES_PARAM, true),
-                      getBooleanParam(SOURCES_PARAM, true),
-                      false); 
-        // no default excludes, because they
-        // are already added on client side
-        // getBooleanParam(DEFAULT_EXCLUDES_PARAM, true)
-                      
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJLoad.java b/src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJLoad.java
deleted file mode 100644
index a929b94..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJLoad.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights 
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.ide;
-
-
-import java.util.Vector;
-
-/**
- * Load specific project versions into the Visual Age for Java workspace.
- * Each project and version name has to be specified completely.
- * Example:  
- * <blockquote> 
- * &lt;vajload>
- * &nbsp;&lt;project name="MyVAProject" version="2.1"/>
- * &nbsp;&lt;project name="Apache Xerces" version="1.2.0"/>
- * &lt;/vajload>
- * </blockquote>
- *
- * @author Wolf Siberski, TUI Infotec GmbH
- */
-
-public class VAJLoad extends VAJTask {
-    Vector projectDescriptions = new Vector();
-
-    /**
-     * Load specified projects.
-     */
-    public void execute() {
-        getUtil().loadProjects(projectDescriptions);
-    }
-
-    /**
-     * Add a project description entry on the project list.
-     */
-    public VAJProjectDescription createVAJProject() {
-        VAJProjectDescription d = new VAJProjectDescription();
-        projectDescriptions.addElement(d);
-        return d;
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJLoadProjects.java b/src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJLoadProjects.java
deleted file mode 100644
index 0d12471..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJLoadProjects.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights 
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.ide;
-
-
-
-
-
-
-
-
-
-
-/**
- * This is only there for backward compatibility with the default task list
- * and will be removed soon
- *
- * @author Wolf Siberski, TUI Infotec GmbH
- */
-
-public class VAJLoadProjects extends VAJLoad {
-}
-
-
-
-    
-
-
-
-
-
-
-
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJLoadServlet.java b/src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJLoadServlet.java
deleted file mode 100644
index 3b8a0aa..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJLoadServlet.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.ide;
-
-import java.util.Vector;
-
-/**
- * A Remote Access to Tools Servlet to load a Project
- * from the Repository into the Workbench. The following 
- * table describes the servlet parameters.
- *
- * <table>
- *   <tr>
- *     <td>Parameter</td>
- *     <td>Description</td>
- *   </tr>
- *   <tr>
- *     <td>project</td>
- *     <td>The name of the Project you want to load into
- *         the Workbench.</td>
- *   </tr>
- *   <tr>
- *     <td>version</td>
- *     <td>The version of the package you want to load into
- *         the Workbench.</td>
- *   </tr>
- * </table>
- * 
- * @author Wolf Siberski, based on servlets written by Glenn McAllister
- */
-public class VAJLoadServlet extends VAJToolsServlet {
-
-    // constants for servlet param names
-    public static final String VERSION_PARAM = "version";
-
-    /**
-     * Respond to a request to load a project from the Repository
-     * into the Workbench.
-     */
-    protected void executeRequest() {
-        String[] projectNames = getParamValues(PROJECT_NAME_PARAM);
-        String[] versionNames = getParamValues(VERSION_PARAM);
-
-        Vector projectDescriptions = new Vector(projectNames.length);
-        for (int i = 0; i < projectNames.length && i < versionNames.length; i++) {
-            VAJProjectDescription desc = new VAJProjectDescription();
-            desc.setName(projectNames[i]);
-            desc.setVersion(versionNames[i]);
-            projectDescriptions.addElement(desc);
-        }
-
-        util.loadProjects(projectDescriptions);
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJLocalUtil.java b/src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJLocalUtil.java
deleted file mode 100644
index 1668ab9..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJLocalUtil.java
+++ /dev/null
@@ -1,468 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.ide;
-
-import java.util.Vector;
-import java.util.Enumeration;
-import java.io.File;
-
-import com.ibm.ivj.util.base.Package;
-import com.ibm.ivj.util.base.IvjException;
-import com.ibm.ivj.util.base.Workspace;
-import com.ibm.ivj.util.base.ToolEnv;
-import com.ibm.ivj.util.base.ExportCodeSpec;
-import com.ibm.ivj.util.base.ProjectEdition;
-import com.ibm.ivj.util.base.ImportCodeSpec;
-import com.ibm.ivj.util.base.Type;
-import com.ibm.ivj.util.base.Project;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.DirectoryScanner;
-
-
-/**
- * Helper class for VAJ tasks. Holds Workspace singleton and
- * wraps IvjExceptions into BuildExceptions
- *
- * @author Wolf Siberski, TUI Infotec GmbH
- */
-abstract class VAJLocalUtil implements VAJUtil{
-    // singleton containing the VAJ workspace
-    private static Workspace workspace;
-
-    /**
-     * Wraps IvjException into a BuildException
-     *
-     * @return org.apache.tools.ant.BuildException
-     * @param errMsg Additional error message
-     * @param e IvjException which is wrapped
-     */
-    static BuildException createBuildException(
-                                               String errMsg, IvjException e) {
-        errMsg = errMsg + "\n" + e.getMessage();
-        String[] errors = e.getErrors();
-        if (errors != null) {
-            for (int i = 0; i < errors.length; i++) {
-                errMsg = errMsg + "\n" + errors[i];
-            }
-        }
-        return new BuildException(errMsg, e);
-    }
-
-    /**
-     * returns the current VAJ workspace.
-     * @return com.ibm.ivj.util.base.Workspace
-     */
-    static Workspace getWorkspace() {
-        if (workspace == null) {
-            workspace = ToolEnv.connectToWorkspace();
-            if (workspace == null) {
-                throw new BuildException(
-                                         "Unable to connect to Workspace! "
-                                         + "Make sure you are running in VisualAge for Java.");
-            }
-        }
-
-        return workspace;
-    }
-
-
-    //-----------------------------------------------------------
-    // export
-    //-----------------------------------------------------------
-
-    /**
-     * export packages
-     */
-    public void exportPackages(
-                               File dest,
-                               String[] includePatterns, String[] excludePatterns,
-                               boolean exportClasses, boolean exportDebugInfo,
-                               boolean exportResources, boolean exportSources,
-                               boolean useDefaultExcludes,    boolean overwrite) {
-        if (includePatterns == null || includePatterns.length == 0) {
-            log("You must specify at least one include attribute. "
-                + "Not exporting", MSG_ERR);
-        } else {
-            try {
-                VAJWorkspaceScanner scanner = new VAJWorkspaceScanner();
-                scanner.setIncludes(includePatterns);
-                scanner.setExcludes(excludePatterns);
-                if (useDefaultExcludes) {
-                    scanner.addDefaultExcludes();
-                }
-                scanner.scan();
-
-                Package[] packages = scanner.getIncludedPackages();
-
-                log("Exporting " + packages.length + " package(s) to "
-                    + dest, MSG_INFO);
-                for (int i = 0; i < packages.length; i++) {
-                    log("    " + packages[i].getName(), MSG_VERBOSE);
-                }
-
-                ExportCodeSpec exportSpec = new ExportCodeSpec();
-                exportSpec.setPackages(packages);
-                exportSpec.includeJava(exportSources);
-                exportSpec.includeClass(exportClasses);
-                exportSpec.includeResources(exportResources);
-                exportSpec.includeClassDebugInfo(exportDebugInfo);
-                exportSpec.useSubdirectories(true);
-                exportSpec.overwriteFiles(overwrite);
-                exportSpec.setExportDirectory(dest.getAbsolutePath());
-
-                getWorkspace().exportData(exportSpec);
-            } catch (IvjException ex) {
-                throw createBuildException("Exporting failed!", ex);
-            }
-        }
-    }
-
-
-    //-----------------------------------------------------------
-    // load
-    //-----------------------------------------------------------
-
-    /**
-     * Load specified projects.
-     */
-    public void loadProjects(Vector projectDescriptions) {
-        Vector expandedDescs = getExpandedDescriptions(projectDescriptions);
-
-        // output warnings for projects not found
-        for (Enumeration e = projectDescriptions.elements(); e.hasMoreElements();) {
-            VAJProjectDescription d = (VAJProjectDescription) e.nextElement();
-            if (!d.projectFound()) {
-                log("No Projects match the name " + d.getName(), MSG_WARN);
-            }
-        }
-
-        log("Loading " + expandedDescs.size()
-            + " project(s) into workspace", MSG_INFO);
-
-        for (Enumeration e = expandedDescs.elements();
-             e.hasMoreElements();) {
-            VAJProjectDescription d = (VAJProjectDescription) e.nextElement();
-
-            ProjectEdition pe = findProjectEdition(d.getName(), d.getVersion());
-            try {
-                log("Loading '" + d.getName() + "', Version '" + d.getVersion()
-                    + "', into Workspace", MSG_VERBOSE);
-                pe.loadIntoWorkspace();
-            } catch (IvjException ex) {
-                throw createBuildException("Project '" + d.getName()
-                                            + "' could not be loaded.", ex);
-            }
-        }
-    }
-
-    /**
-     * returns a list of project names matching the given pattern
-     */
-    private Vector findMatchingProjects(String pattern) {
-        String[] projectNames;
-        try {
-            projectNames = getWorkspace().getRepository().getProjectNames();
-        } catch (IvjException e) {
-            throw createBuildException("VA Exception occured: ", e);
-        }
-
-        Vector matchingProjects = new Vector();
-        for (int i = 0; i < projectNames.length; i++) {
-            if (VAJWorkspaceScanner.match(pattern, projectNames[i])) {
-                matchingProjects.addElement(projectNames[i]);
-            }
-        }
-
-        return matchingProjects;
-    }
-
-
-    /**
-     * return project descriptions containing full project names instead
-     * of patterns with wildcards.
-     */
-    private Vector getExpandedDescriptions(Vector projectDescs) {
-        Vector expandedDescs = new Vector(projectDescs.size());
-        try {
-            String[] projectNames =
-                getWorkspace().getRepository().getProjectNames();
-            for (int i = 0; i < projectNames.length; i++) {
-                for (Enumeration e = projectDescs.elements();
-                     e.hasMoreElements();) {
-                    VAJProjectDescription d = (VAJProjectDescription) e.nextElement();
-                    String pattern = d.getName();
-                    if (VAJWorkspaceScanner.match(pattern, projectNames[i])) {
-                        d.setProjectFound();
-                        expandedDescs.addElement(new VAJProjectDescription(
-                                                                           projectNames[i], d.getVersion()));
-                        break;
-                    }
-                }
-            }
-        } catch (IvjException e) {
-            throw createBuildException("VA Exception occured: ", e);
-        }
-
-        return expandedDescs;
-    }
-
-    /**
-     * Finds a specific project edition in the repository.
-     *
-     * @param name project name
-     * @param versionName project version name
-     * @return com.ibm.ivj.util.base.ProjectEdition the specified edition
-     */
-    private ProjectEdition findProjectEdition(
-                                              String name, String versionName) {
-        try {
-            ProjectEdition[] editions = null;
-            editions = getWorkspace().getRepository().getProjectEditions(name);
-
-            if (editions == null) {
-                throw new BuildException("Project " + name + " doesn't exist");
-            }
-
-            ProjectEdition pe = null;
-            for (int i = 0; i < editions.length && pe == null; i++) {
-                if (versionName.equals(editions[i].getVersionName())) {
-                    pe = editions[i];
-                }
-            }
-            if (pe == null) {
-                throw new BuildException("Version " + versionName
-                    + " of Project " + name + " doesn't exist");
-            }
-            return pe;
-
-        } catch (IvjException e) {
-            throw createBuildException("VA Exception occured: ", e);
-        }
-
-    }
-
-
-
-    //-----------------------------------------------------------
-    // import
-    //-----------------------------------------------------------
-
-
-    /**
-     * Do the import.
-     */
-    public void importFiles(
-                            String importProject, File srcDir,
-                            String[] includePatterns, String[] excludePatterns,
-                            boolean importClasses, boolean importResources,
-                            boolean importSources, boolean useDefaultExcludes)
-        throws BuildException {
-
-        if (importProject == null || "".equals(importProject)) {
-            throw new BuildException("The VisualAge for Java project "
-                                     + "name is required!");
-        }
-
-        ImportCodeSpec importSpec = new ImportCodeSpec();
-        importSpec.setDefaultProject(getVAJProject(importProject));
-
-        DirectoryScanner ds = new DirectoryScanner();
-        ds.setBasedir(srcDir);
-        ds.setIncludes(includePatterns);
-        ds.setExcludes(excludePatterns);
-        if (useDefaultExcludes) {
-            ds.addDefaultExcludes();
-        }
-        ds.scan();
-
-        Vector classes = new Vector();
-        Vector sources = new Vector();
-        Vector resources = new Vector();
-
-        scanForImport(srcDir, ds.getIncludedFiles(), classes, sources, resources);
-
-        StringBuffer summaryLog = new StringBuffer("Importing ");
-        addFilesToImport(importSpec, importClasses, classes, "Class", summaryLog);
-        addFilesToImport(importSpec, importSources, sources, "Java", summaryLog);
-        addFilesToImport(importSpec, importResources, resources, "Resource", summaryLog);
-        importSpec.setResourcePath(srcDir.getAbsolutePath());
-
-        summaryLog.append(" into the project '");
-        summaryLog.append(importProject);
-        summaryLog.append("'.");
-
-        log(summaryLog.toString(), MSG_INFO);
-
-        try {
-            Type[] importedTypes = getWorkspace().importData(importSpec);
-            if (importedTypes == null) {
-                throw new BuildException("Unable to import into Workspace!");
-            } else {
-                log(importedTypes.length + " types imported", MSG_DEBUG);
-                for (int i = 0; i < importedTypes.length; i++) {
-                    log(importedTypes[i].getPackage().getName()
-                        + "." + importedTypes[i].getName()
-                        + " into " + importedTypes[i].getProject().getName(),
-                        MSG_DEBUG);
-                }
-            }
-        } catch (IvjException ivje) {
-            throw createBuildException("Error while importing into workspace: ",
-                                       ivje);
-        }
-    }
-
-    /**
-     * get a project from the Workspace.
-     */
-    static Project getVAJProject(String importProject) {
-        Project found = null;
-        Project[] currentProjects = getWorkspace().getProjects();
-
-        for (int i = 0; i < currentProjects.length; i++) {
-            Project p = currentProjects[i];
-            if (p.getName().equals(importProject)) {
-                found = p;
-                break;
-            }
-        }
-
-
-        if (found == null) {
-            try {
-                found = getWorkspace().createProject(importProject, true);
-            } catch (IvjException e) {
-                throw createBuildException("Error while creating Project "
-                                           + importProject + ": ", e);
-            }
-        }
-
-        return found;
-    }
-
-
-    /**
-     * Sort the files into classes, sources, and resources.
-     */
-    private void scanForImport(
-                               File dir,
-                               String[] files,
-                               Vector classes,
-                               Vector sources,
-                               Vector resources) {
-        for (int i = 0; i < files.length; i++) {
-            String file = (new File(dir, files[i])).getAbsolutePath();
-            if (file.endsWith(".java") || file.endsWith(".JAVA")) {
-                sources.addElement(file);
-            } else
-                if (file.endsWith(".class") || file.endsWith(".CLASS")) {
-                    classes.addElement(file);
-                } else {
-                    // for resources VA expects the path relative to the resource path
-                    resources.addElement(files[i]);
-                }
-        }
-    }
-
-    /**
-     * Adds files to an import specification. Helper method
-     * for importFiles()
-     *
-     * @param spec       import specification
-     * @param doImport   only add files if doImport is true
-     * @param files      the files to add
-     * @param fileType   type of files (Source/Class/Resource)
-     * @param summaryLog buffer for logging
-     */
-    private void addFilesToImport(ImportCodeSpec spec, boolean doImport,
-                                  Vector files, String fileType,
-                                  StringBuffer summaryLog) {
-
-        if (doImport) {
-            String[] fileArr = new String[files.size()];
-            files.copyInto(fileArr);
-            try {
-                // here it is assumed that fileType is one of the
-                // following strings: // "Java", "Class", "Resource"
-                String methodName = "set" + fileType + "Files";
-                Class[] methodParams = new Class[]{fileArr.getClass()};
-                java.lang.reflect.Method method =
-                    spec.getClass().getDeclaredMethod(methodName, methodParams);
-                method.invoke(spec, new Object[]{fileArr});
-            } catch (Exception e) {
-                throw new BuildException(e);
-            }
-            if (files.size() > 0) {
-                logFiles(files, fileType);
-                summaryLog.append(files.size());
-                summaryLog.append(" " + fileType.toLowerCase() + " file");
-                summaryLog.append(files.size() > 1 ? "s, " : ", ");
-            }
-        }
-    }
-
-    /**
-     * Logs a list of file names to the message log
-     * @param fileNames java.util.Vector file names to be logged
-     * @param type java.lang.String file type
-     */
-    private void logFiles(Vector fileNames, String fileType) {
-        log(fileType + " files found for import:", MSG_VERBOSE);
-        for (Enumeration e = fileNames.elements(); e.hasMoreElements();) {
-            log("    " + e.nextElement(), MSG_VERBOSE);
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJProjectDescription.java b/src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJProjectDescription.java
deleted file mode 100644
index 76de6f9..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJProjectDescription.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.ide;
-
-import org.apache.tools.ant.BuildException;
-
-/**
- * Type class. Holds information about a project edition.
- * @author Wolf Siberski
- */
-public class VAJProjectDescription {
-    private String name;
-    private String version;
-    private boolean projectFound;
-
-    public VAJProjectDescription() {
-    }
-
-    public VAJProjectDescription(String n, String v) {
-        name = n;
-        version = v;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public String getVersion() {
-        return version;
-    }
-
-    public boolean projectFound() {
-        return projectFound;
-    }
-
-    public void setName(String newName) {
-        if (newName == null || newName.equals("")) {
-            throw new BuildException("name attribute must be set");
-        }
-        name = newName;
-    }
-
-    public void setVersion(String newVersion) {
-        if (newVersion == null || newVersion.equals("")) {
-            throw new BuildException("version attribute must be set");
-        }
-        version = newVersion;
-    }
-
-    public void setProjectFound() {
-        projectFound = true;
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJRemoteUtil.java b/src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJRemoteUtil.java
deleted file mode 100644
index bca2321..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJRemoteUtil.java
+++ /dev/null
@@ -1,250 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.ide;
-
-import java.util.Vector;
-
-import java.net.HttpURLConnection;
-import java.util.Enumeration;
-import java.net.URL;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Task;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.InputStream;
-import java.io.File;
-
-/**
- * Helper class for VAJ tasks. Holds Workspace singleton and
- * wraps IvjExceptions into BuildExceptions
- *
- * @author Wolf Siberski, TUI Infotec GmbH
- */
-class VAJRemoteUtil implements VAJUtil{
-    // calling task
-    Task caller;
-
-    // VAJ remote tool server
-    String remoteServer;
-
-    public VAJRemoteUtil(Task caller, String remote) {
-        this.caller = caller;
-        this.remoteServer = remote;
-    }
-
-    /**
-     * export the array of Packages
-     */
-    public void exportPackages(File destDir,
-                               String[] includePatterns, String[] excludePatterns,
-                               boolean exportClasses, boolean exportDebugInfo, boolean exportResources,
-                               boolean exportSources, boolean useDefaultExcludes, boolean overwrite) {
-        try {
-            String request = "http://" + remoteServer + "/servlet/vajexport?"
-                + VAJExportServlet.WITH_DEBUG_INFO + "=" + exportDebugInfo + "&"
-                + VAJExportServlet.OVERWRITE_PARAM + "=" + overwrite + "&"
-                + assembleImportExportParams(destDir,
-                                              includePatterns, excludePatterns,
-                                              exportClasses, exportResources,
-                                              exportSources, useDefaultExcludes);
-            sendRequest(request);
-        } catch (Exception ex) {
-            throw new BuildException(ex);
-        }
-    }
-
-    /**
-     * Do the import.
-     */
-    public void importFiles(
-                            String importProject, File srcDir,
-                            String[] includePatterns, String[] excludePatterns,
-                            boolean importClasses, boolean importResources,
-                            boolean importSources, boolean useDefaultExcludes) {
-        try {
-            String request = "http://" + remoteServer + "/servlet/vajimport?"
-                + VAJImportServlet.PROJECT_NAME_PARAM + "="
-                + importProject + "&"
-                + assembleImportExportParams(srcDir,
-                                              includePatterns, excludePatterns,
-                                              importClasses, importResources,
-                                              importSources, useDefaultExcludes);
-            sendRequest(request);
-        } catch (Exception ex) {
-            throw new BuildException(ex);
-        }
-
-    }
-
-    /**
-     * Assemble string for parameters common for import and export
-     * Helper method to remove double code.
-     */
-    private String assembleImportExportParams(
-                                              File dir,
-                                              String[] includePatterns, String[] excludePatterns,
-                                              boolean includeClasses, boolean includeResources,
-                                              boolean includeSources, boolean useDefaultExcludes) {
-        String result =
-            VAJToolsServlet.DIR_PARAM + "="
-            + dir.getAbsolutePath().replace('\\', '/') + "&"
-            + VAJToolsServlet.CLASSES_PARAM + "=" + includeClasses + "&"
-            + VAJToolsServlet.RESOURCES_PARAM + "=" + includeResources + "&"
-            + VAJToolsServlet.SOURCES_PARAM + "=" + includeSources + "&"
-            + VAJToolsServlet.DEFAULT_EXCLUDES_PARAM + "=" + useDefaultExcludes;
-
-        if (includePatterns != null) {
-            for (int i = 0; i < includePatterns.length; i++){
-                result = result + "&" + VAJExportServlet.INCLUDE_PARAM + "="
-                    + includePatterns[i].replace(' ', '+').replace('\\', '/');
-            }
-        }
-        if (excludePatterns != null) {
-            for (int i = 0; i < excludePatterns.length; i++){
-                result = result + "&" + VAJExportServlet.EXCLUDE_PARAM + "="
-                    + excludePatterns[i].replace(' ', '+').replace('\\', '/');
-            }
-        }
-
-        return result;
-    }
-
-    /**
-     * Load specified projects.
-     */
-    public void loadProjects(Vector projectDescriptions) {
-        try {
-            String request = "http://" + remoteServer + "/servlet/vajload?";
-            String delimiter = "";
-            for (Enumeration e = projectDescriptions.elements(); e.hasMoreElements();) {
-                VAJProjectDescription pd = (VAJProjectDescription) e.nextElement();
-                request = request
-                    + delimiter + VAJLoadServlet.PROJECT_NAME_PARAM
-                    + "=" + pd.getName().replace(' ', '+')
-                    + "&" + VAJLoadServlet.VERSION_PARAM
-                    + "=" + pd.getVersion().replace(' ', '+');
-                //the first param needs no delimiter, but all other
-                delimiter = "&";
-            }
-            sendRequest(request);
-        } catch (Exception ex) {
-            throw new BuildException(ex);
-        }
-    }
-
-    /**
-     * logs a message.
-     */
-    public void log(String msg, int level) {
-        caller.log(msg, level);
-    }
-
-    /**
-     * Sends a servlet request.
-     */
-    private void sendRequest(String request) {
-        boolean requestFailed = false;
-        try {
-            log("Request: " + request, MSG_DEBUG);
-
-            //must be HTTP connection
-            URL requestUrl = new URL(request);
-            HttpURLConnection connection =
-                (HttpURLConnection) requestUrl.openConnection();
-
-            InputStream is = null;
-            // retry three times
-            for (int i = 0; i < 3; i++) {
-                try {
-                    is = connection.getInputStream();
-                    break;
-                } catch (IOException ex) {
-                }
-            }
-            if (is == null) {
-                log("Can't get " + request, MSG_ERR);
-                throw new BuildException("Couldn't execute " + request);
-            }
-
-            // log the response
-            BufferedReader br = new BufferedReader(new InputStreamReader(is));
-            String line = br.readLine();
-            while (line != null) {
-                int level = MSG_ERR;
-                try {
-                    // the first char of each line contains the log level
-                    level = Integer.parseInt(line.substring(0, 1));
-                    if (level == MSG_ERR) {
-                        requestFailed = true;
-                    }
-                } catch (Exception e) {
-                    log("Response line doesn't contain log level!", MSG_ERR);
-                }
-                log(line.substring(2), level);
-                line = br.readLine();
-            }
-
-        } catch (IOException ex) {
-            log("Error sending tool request to VAJ" + ex, MSG_ERR);
-            throw new BuildException("Couldn't execute " + request);
-        }
-        if (requestFailed) {
-            throw new BuildException("VAJ tool request failed");
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJTask.java b/src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJTask.java
deleted file mode 100644
index 50eb56e..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJTask.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.ide;
-
-/**
- * Super class for all VAJ tasks. Contains common
- * attributes (remoteServer) and util methods
- *
- * @author: Wolf Siberski
- */
-import org.apache.tools.ant.Task;
-
-
-public class VAJTask extends Task {
-    /**
-     * Adaption of VAJLocalUtil to Task context.
-     */
-    class VAJLocalToolUtil extends VAJLocalUtil {
-        public void log(String msg, int level) {
-            VAJTask.this.log(msg, level);
-        }
-    }
-
-    // server name / port of VAJ remote tool api server
-    protected String remoteServer = null;
-
-    // holds the appropriate VAJUtil implementation
-    private VAJUtil util = null;
-
-
-    /**
-     * returns the VAJUtil implementation
-     */
-    protected VAJUtil getUtil() {
-        if (util == null) {
-            if (remoteServer == null) {
-                util = new VAJLocalToolUtil();
-            } else {
-                util = new VAJRemoteUtil(this, remoteServer);
-            }
-        }
-        return util;
-    }
-
-    /**
-     * Set remote server attribute
-     */
-    public void setRemote(String remoteServer) {
-        this.remoteServer = remoteServer;
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJToolsServlet.java b/src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJToolsServlet.java
deleted file mode 100644
index 0b34cb6..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJToolsServlet.java
+++ /dev/null
@@ -1,226 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.ide;
-
-
-
-import java.io.IOException;
-
-
-
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.ServletException;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.util.StringUtils;
-
-/**
- * Abstract base class to provide common services for the
- * VAJ tool API servlets
- *
- * @author Wolf Siberski, based on servlets written by Glenn McAllister
- */
-public abstract class VAJToolsServlet extends HttpServlet {
-    /**
-     * Adaptation of VAJUtil for servlet context.
-     */
-    class VAJLocalServletUtil extends VAJLocalUtil {
-        public void log(String msg, int level) {
-            try {
-                if (msg != null) {
-                    msg = msg.replace('\r', ' ');
-                    int i = 0;
-                    while (i < msg.length()) {
-                        int nlPos = msg.indexOf('\n', i);
-                        if (nlPos == -1) {
-                            nlPos = msg.length();
-                        }
-                        response.getWriter().println(Integer.toString(level)
-                                                     + " " + msg.substring(i, nlPos));
-                        i = nlPos + 1;
-                    }
-                }
-            } catch (IOException e) {
-                throw new BuildException("logging failed. msg was: "
-                                         + e.getMessage());
-            }
-        }
-    }
-
-    // constants for servlet param names
-    public static final String DIR_PARAM = "dir";
-    public static final String INCLUDE_PARAM = "include";
-    public static final String EXCLUDE_PARAM = "exclude";
-    public static final String CLASSES_PARAM = "cls";
-    public static final String SOURCES_PARAM = "src";
-    public static final String RESOURCES_PARAM = "res";
-    public static final String DEFAULT_EXCLUDES_PARAM = "dex";
-    public static final String PROJECT_NAME_PARAM = "project";
-
-
-    // current request
-    HttpServletRequest  request;
-
-    // response to current request
-    HttpServletResponse response;
-
-    // implementation of VAJUtil used by the servlet
-    VAJUtil util;
-
-
-    /**
-     * Execute the request by calling the appropriate
-     * VAJ tool API methods. This method must be implemented
-     * by the concrete servlets
-     */
-    protected abstract void executeRequest();
-
-    /**
-     * Respond to a HTTP request. This method initializes
-     * the servlet and handles errors.
-     * The real work is done in the abstract method executeRequest()
-     */
-    public void doGet(HttpServletRequest req, HttpServletResponse res)
-        throws ServletException, IOException {
-        try {
-            response = res;
-            request = req;
-            initRequest();
-            executeRequest();
-        } catch (BuildException e) {
-            util.log("Error occured: " + e.getMessage(), VAJUtil.MSG_ERR);
-        } catch (Exception e) {
-            try {
-                if (!(e instanceof BuildException)) {
-                    String trace = StringUtils.getStackTrace(e);
-                    util.log("Program error in " + this.getClass().getName()
-                             + ":\n" + trace, VAJUtil.MSG_ERR);
-                }
-            } catch (Throwable t) {
-                t.printStackTrace();
-            } finally {
-                if (!(e instanceof BuildException)) {
-                    throw new ServletException(e.getMessage());
-                }
-            }
-        }
-    }
-
-    /**
-     * initialize the servlet.
-     */
-    protected void initRequest() throws IOException {
-        response.setContentType("text/ascii");
-        if (util == null) {
-            util = new VAJLocalServletUtil();
-        }
-    }
-
-    /**
-     * Get the VAJUtil implementation
-     */
-    VAJUtil getUtil() {
-        return util;
-    }
-
-    /**
-     * Get the boolean value of a parameter.
-     */
-    protected boolean getBooleanParam(String param) {
-        return getBooleanParam(param, false);
-    }
-
-    /**
-     * Get the boolean value of a parameter, with a default value if
-     * the parameter hasn't been passed to the servlet.
-     */
-    protected boolean getBooleanParam(String param, boolean defaultValue) {
-        String value = getFirstParamValueString(param);
-        if (value != null) {
-            return toBoolean(value);
-        } else {
-            return defaultValue;
-        }
-    }
-
-    /**
-     * Returns the first encountered value for a parameter.
-     */
-    protected String getFirstParamValueString(String param) {
-        String[] paramValuesArray = request.getParameterValues(param);
-        if (paramValuesArray == null) {
-            return null;
-        }
-        return paramValuesArray[0];
-    }
-
-    /**
-     * Returns all values for a parameter.
-     */
-    protected String[] getParamValues(String param) {
-        return request.getParameterValues(param);
-    }
-
-    /**
-     * A utility method to translate the strings "yes", "true", and "ok"
-     * to boolean true, and everything else to false.
-     */
-    protected boolean toBoolean(String string) {
-        String lower = string.toLowerCase();
-        return (lower.equals("yes") || lower.equals("true") || lower.equals("ok"));
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJUtil.java b/src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJUtil.java
deleted file mode 100644
index a92f259..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJUtil.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.ide;
-
-import java.util.Vector;
-import java.io.File;
-
-/**
- * Helper interface for VAJ tasks. Encapsulates
- * the interface to the VAJ tool API.
- *
- * @author Wolf Siberski, TUI Infotec GmbH
- */
-interface VAJUtil {
-    // log levels
-    public static final int MSG_DEBUG = 4;
-    public static final int MSG_ERR = 0;
-    public static final int MSG_INFO = 2;
-    public static final int MSG_VERBOSE = 3;
-    public static final int MSG_WARN = 1;
-
-    /**
-     * export the array of Packages
-     */
-    void exportPackages(
-        File dest,
-        String[] includePatterns, String[] excludePatterns,
-        boolean exportClasses, boolean exportDebugInfo,
-        boolean exportResources, boolean exportSources,
-        boolean useDefaultExcludes, boolean overwrite);
-
-    /**
-     * Do the import.
-     */
-    void importFiles(
-        String importProject, File srcDir,
-        String[] includePatterns, String[] excludePatterns,
-        boolean importClasses, boolean importResources,
-        boolean importSources, boolean useDefaultExcludes);
-
-    /**
-     * Load specified projects.
-     */
-    void loadProjects(Vector projectDescriptions);
-
-    /**
-     * Logs a message with the specified log level.
-     */
-    void log(String msg, int level);
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJWorkspaceScanner.java b/src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJWorkspaceScanner.java
deleted file mode 100644
index 17e4929..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJWorkspaceScanner.java
+++ /dev/null
@@ -1,226 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.ide;
-
-import com.ibm.ivj.util.base.IvjException;
-import com.ibm.ivj.util.base.Package;
-import com.ibm.ivj.util.base.Project;
-import java.io.File;
-import java.util.Enumeration;
-import java.util.StringTokenizer;
-import java.util.Vector;
-import org.apache.tools.ant.DirectoryScanner;
-
-/**
- * Class for scanning a Visual Age for Java workspace for packages matching
- * a certain criteria.
- * <p>
- * These criteria consist of a set of include and exclude patterns. With these
- * patterns, you can select which packages you want to have included, and which
- * packages you want to have excluded.  You can add patterns to be excluded by
- * default with the addDefaultExcludes method.  The patters that are excluded
- * by default include
- * <ul>
- *   <li>IBM*\**</li>
- *   <li>Java class libraries\**</li>
- *   <li>Sun class libraries*\**</li>
- *   <li>JSP Page Compile Generated Code\**</li>
- *   <li>VisualAge*\**</li>
- * </ul>
- * <p>
- * This class works like DirectoryScanner.
- *
- * @see org.apache.tools.ant.DirectoryScanner
- *
- * @author Wolf Siberski, TUI Infotec (based on Arnout J. Kuipers DirectoryScanner)
- */
-class VAJWorkspaceScanner extends DirectoryScanner {
-
-    // Patterns that should be excluded by default.
-    private static final String[] DEFAULTEXCLUDES =
-    {
-        "IBM*/**",
-        "Java class libraries/**",
-        "Sun class libraries*/**",
-        "JSP Page Compile Generated Code/**",
-        "VisualAge*/**",
-    };
-
-    // The packages that where found and matched at least
-    // one includes, and matched no excludes.
-    private Vector packagesIncluded = new Vector();
-
-    /**
-     * Adds the array with default exclusions to the current exclusions set.
-     */
-    public void addDefaultExcludes() {
-        int excludesLength = excludes == null ? 0 : excludes.length;
-        String[] newExcludes;
-        newExcludes = new String[excludesLength + DEFAULTEXCLUDES.length];
-        if (excludesLength > 0) {
-            System.arraycopy(excludes, 0, newExcludes, 0, excludesLength);
-        }
-        for (int i = 0; i < DEFAULTEXCLUDES.length; i++) {
-            newExcludes[i + excludesLength] = DEFAULTEXCLUDES[i].
-                replace('/', File.separatorChar).
-                replace('\\', File.separatorChar);
-        }
-        excludes = newExcludes;
-    }
-
-    /**
-     * Finds all Projects specified in include patterns.
-     *
-     * @return the projects
-     */
-    public Vector findMatchingProjects() {
-        Project[] projects = VAJLocalUtil.getWorkspace().getProjects();
-
-        Vector matchingProjects = new Vector();
-
-        boolean allProjectsMatch = false;
-        for (int i = 0; i < projects.length; i++) {
-            Project project = projects[i];
-            for (int j = 0; j < includes.length && !allProjectsMatch; j++) {
-                StringTokenizer tok =
-                    new StringTokenizer(includes[j], File.separator);
-                String projectNamePattern = tok.nextToken();
-                if (projectNamePattern.equals("**")) {
-                    // if an include pattern starts with '**',
-                    // all projects match
-                    allProjectsMatch = true;
-                } else
-                    if (match(projectNamePattern, project.getName())) {
-                        matchingProjects.addElement(project);
-                        break;
-                    }
-            }
-        }
-
-        if (allProjectsMatch) {
-            matchingProjects = new Vector();
-            for (int i = 0; i < projects.length; i++) {
-                matchingProjects.addElement(projects[i]);
-            }
-        }
-
-        return matchingProjects;
-    }
-
-    /**
-     * Get the names of the packages that matched at least one of the include
-     * patterns, and didn't match one of the exclude patterns.
-     *
-     * @return the matching packages
-     */
-    public Package[] getIncludedPackages() {
-        int count = packagesIncluded.size();
-        Package[] packages = new Package[count];
-        for (int i = 0; i < count; i++) {
-            packages[i] = (Package) packagesIncluded.elementAt(i);
-        }
-        return packages;
-    }
-
-    /**
-     * Scans the workspace for packages that match at least one include
-     * pattern, and don't match any exclude patterns.
-     *
-     */
-    public void scan() {
-        if (includes == null) {
-            // No includes supplied, so set it to 'matches all'
-            includes = new String[1];
-            includes[0] = "**";
-        }
-        if (excludes == null) {
-            excludes = new String[0];
-        }
-
-        // only scan projects which are included in at least one include pattern
-        Vector matchingProjects = findMatchingProjects();
-        for (Enumeration e = matchingProjects.elements(); e.hasMoreElements();) {
-            Project project = (Project) e.nextElement();
-            scanProject(project);
-        }
-    }
-
-    /**
-     * Scans a project for packages that match at least one include
-     * pattern, and don't match any exclude patterns.
-     *
-     */
-    public void scanProject(Project project) {
-        try {
-            Package[] packages = project.getPackages();
-            if (packages != null) {
-                for (int i = 0; i < packages.length; i++) {
-                    Package item = packages[i];
-                    // replace '.' by file seperator because the patterns are
-                    // using file seperator syntax (and we can use the match
-                    // methods this way).
-                    String name =
-                        project.getName()
-                        + File.separator
-                        + item.getName().replace('.', File.separatorChar);
-                    if (isIncluded(name) && !isExcluded(name)) {
-                        packagesIncluded.addElement(item);
-                    }
-                }
-            }
-        } catch (IvjException e) {
-            throw VAJLocalUtil.createBuildException("VA Exception occured: ", e);
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/ide/default.ini b/src/main/org/apache/tools/ant/taskdefs/optional/ide/default.ini
deleted file mode 100644
index 1ccb894..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/ide/default.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-Name=Ant
-Version=0.1
-Help-Item=Ant Help,doc/VAJAntTool.html
-Menu-Items=Ant Build,org.apache.tools.ant.taskdefs.optional.ide.VAJAntTool,-P;
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/j2ee/AbstractHotDeploymentTool.java b/src/main/org/apache/tools/ant/taskdefs/optional/j2ee/AbstractHotDeploymentTool.java
deleted file mode 100644
index 0f46124..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/j2ee/AbstractHotDeploymentTool.java
+++ /dev/null
@@ -1,230 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.j2ee;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.types.Path;
-
-/**
- *  Abstract class to support vendor-specific hot deployment tools.
- *  This class will validate boilerplate attributes.
- *
- *  Subclassing this class for a vendor specific tool involves the
- *  following.
- *  <ol><li>Implement the <code>isActionValid()<code> method to insure the
- *  action supplied as the "action" attribute of ServerDeploy is valid.
- *  <li>Implement the <code>validateAttributes()</code> method to insure
- *  all required attributes are supplied, and are in the correct format.
- *  <li>Add a <code>add&lt;TOOL&gt;</code> method to the ServerDeploy
- *  class.  This method will be called when Ant encounters a
- *  <code>add&lt;TOOL&gt;</code> task nested in the
- *  <code>serverdeploy</code> task.
- *  <li>Define the <code>deploy</code> method.  This method should perform
- *  whatever task it takes to hot-deploy the component.  IE: spawn a JVM and
- *  run class, exec a native executable, run Java code...
- *
- *  @author Christopher A. Longo - cal@cloud9.net
- *
- *  @see org.apache.tools.ant.taskdefs.optional.j2ee.HotDeploymentTool
- *  @see org.apache.tools.ant.taskdefs.optional.j2ee.ServerDeploy
- */
-public abstract class AbstractHotDeploymentTool implements HotDeploymentTool {
-    /** The parent task **/
-    private ServerDeploy task;
-
-    /** The classpath passed to the JVM on execution. **/
-    private Path classpath;
-
-    /** The username for the deployment server. **/
-    private String userName;
-
-    /** The password for the deployment server. **/
-    private String password;
-
-    /** The address of the deployment server **/
-    private String server;
-
-    /**
-     *  Add a classpath.  Used to handle the nested classpath
-     *  element.
-     *  @return A Path object representing the classpath to be used.
-     */
-    public Path createClasspath() {
-        if (classpath == null)
-            classpath = new Path(task.getProject());
-
-        return classpath.createPath();
-    }
-
-    /**
-     *  Determines if the "action" attribute defines a valid action.
-     *  <p>Subclasses should determine if the action passed in is
-     *  supported by the vendor's deployment tool.
-     *  <p>Actions may by "deploy", "delete", etc... It all depends
-     *  on the tool.
-     *  @return true if the "action" attribute is valid, false if not.
-     */
-    protected abstract boolean isActionValid();
-
-    /**
-     *  Validates the passed in attributes.
-     *  Subclasses should chain to this super-method to insure
-     *  validation of boilerplate attributes.
-     *  <p>Only the "action" attribute is required in the
-     *  base class.  Subclasses should check attributes accordingly.
-     *  @exception org.apache.tools.ant.BuildException if the attributes are invalid or incomplete.
-     */
-    public void validateAttributes() throws BuildException {
-        if (task.getAction() == null)
-            throw new BuildException("The \"action\" attribute must be set");
-
-        if (!isActionValid())
-            throw new BuildException("Invalid action \"" + task.getAction() + "\" passed");
-
-        if (classpath == null)
-            throw new BuildException("The classpath attribute must be set");
-    }
-
-    /**
-     *  Perform the actual deployment.
-     *  It's up to the subclasses to implement the actual behavior.
-     *  @exception org.apache.tools.ant.BuildException if the attributes are invalid or incomplete.
-     */
-    public abstract void deploy() throws BuildException;
-
-    /**
-     *  Sets the parent task.
-     *  @param task a ServerDeploy object representing the parent task.
-     */
-    public void setTask(ServerDeploy task) {
-        this.task = task;
-    }
-
-    /**
-     *  Returns the task field, a ServerDeploy object.
-     *  @return An ServerDeploy representing the parent task.
-     */
-    protected ServerDeploy getTask() {
-        return task;
-    }
-
-    /**
-     *  gets the classpath field.
-     *  @return A Path representing the "classpath" attribute.
-     */
-    public Path getClasspath() {
-        return classpath;
-    }
-
-    /**
-     *  Sets the classpath field.
-     *  This is a required attribute.
-     *  @param classpath A Path object representing the "classpath" attribute.
-     */
-    public void setClasspath(Path classpath) {
-        this.classpath = classpath;
-    }
-
-    /**
-     *  Returns the userName field.
-     *  @return A String representing the "userName" attribute.
-     */
-    public String getUserName() {
-        return userName;
-    }
-
-    /**
-     *  Sets the userName field.
-     *  This is a  <b>not</b> required attribute.
-     *  @param userName A String representing the "userName" attribute.
-     */
-    public void setUserName(String userName) {
-        this.userName = userName;
-    }
-
-    /**
-     *  Returns the password field.
-     *  @return A String representing the "password" attribute.
-     */
-    public String getPassword() {
-        return password;
-    }
-
-    /**
-     *  Set the password field.
-     *  This is a  <b>not</b> required attribute.
-     *  @param password A String representing the "password" attribute.
-     */
-    public void setPassword(String password) {
-        this.password = password;
-    }
-
-    /**
-     *  Returns the server field.
-     *  @return A String representing the "server" attribute.
-     */
-    public String getServer() {
-        return server;
-    }
-
-    /**
-     *  Sets the server field.
-     *  This is  <b>not</b> a required attribute.
-     *  @param server A String representing the "server" attribute.
-     */
-    public void setServer(String server) {
-        this.server = server;
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/j2ee/GenericHotDeploymentTool.java b/src/main/org/apache/tools/ant/taskdefs/optional/j2ee/GenericHotDeploymentTool.java
deleted file mode 100644
index c846217..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/j2ee/GenericHotDeploymentTool.java
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.j2ee;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.types.Commandline;
-import org.apache.tools.ant.taskdefs.Java;
-
-/**
- *  A generic tool for J2EE server hot deployment.
- *  <p>The simple implementation spawns a JVM with the supplied
- *  class name, jvm args, and arguments.
- *
- *  @author Christopher A. Longo - cal@cloud9.net
- *
- *  @see org.apache.tools.ant.taskdefs.optional.j2ee.HotDeploymentTool
- *  @see org.apache.tools.ant.taskdefs.optional.j2ee.AbstractHotDeploymentTool
- *  @see org.apache.tools.ant.taskdefs.optional.j2ee.ServerDeploy
- */
-public class GenericHotDeploymentTool extends AbstractHotDeploymentTool {
-    /** A Java task used to run the deployment tool **/
-    private Java java;
-
-    /** The fully qualified class name of the deployment tool **/
-    private String className;
-
-    /** List of valid actions **/
-    private static final String[] VALID_ACTIONS = { ACTION_DEPLOY };
-
-    /**
-     *  Creates a nested arg element.
-     *  @return A Commandline.Argument object representing the
-     *  command line argument being passed when the deployment
-     *  tool is run.  IE: "-user=mark", "-password=venture"...
-     */
-    public Commandline.Argument createArg() {
-        return java.createArg();
-    }
-
-    /**
-     *  Creates a nested jvmarg element.
-     *  Creates a nested arg element.
-     *  @return A Commandline.Argument object representing the
-     *  JVM command line argument being passed when the deployment
-     *  tool is run.  IE: "-ms64m", "-mx128m"...
-     */
-    public Commandline.Argument createJvmarg() {
-        return java.createJvmarg();
-    }
-
-    /**
-     *  Determines if the "action" attribute defines a valid action.
-     *  <p>Subclasses should determine if the action passed in is
-     *  supported by the vendor's deployment tool.
-     *  For this generic implementation, the only valid action is "deploy"
-     *  @return true if the "action" attribute is valid, false if not.
-     */
-    protected boolean isActionValid() {
-        return (getTask().getAction().equals(VALID_ACTIONS[0]));
-    }
-
-    /**
-     *  Sets the parent task.
-     *  @param task An ServerDeploy object representing the parent task.
-     */
-    public void setTask(ServerDeploy task) {
-        super.setTask(task);
-        java = (Java) task.getProject().createTask("java");
-    }
-
-    /**
-     *  Perform the actual deployment.
-     *  For this generic implementation, a JVM is spawned using the
-     *  supplied classpath, classname, JVM args, and command line arguments.
-     *  @exception org.apache.tools.ant.BuildException if the attributes are invalid or incomplete.
-     */
-    public void deploy() throws BuildException {
-        java.setClassname(className);
-        java.setClasspath(getClasspath());
-        java.setFork(true);
-        java.setFailonerror(true);
-        java.execute();
-    }
-
-    /**
-     *  Validates the passed in attributes.
-     *  Ensures the className and arguments attribute have been set.
-     *  @exception org.apache.tools.ant.BuildException if the attributes are invalid or incomplete.
-     */
-    public void validateAttributes() throws BuildException {
-        super.validateAttributes();
-
-        if (className == null)
-            throw new BuildException("The classname attribute must be set");
-    }
-
-    /**
-     *  Sets the className field.
-     *  <p>The className is the name of the class to execute to perfom
-     *  deployment.  IE: "com.foobar.tools.deploy.DeployTool"
-     *  This is a required attribute.
-     *  @param className The fully qualified class name of the class
-     *  to perform deployment.
-     */
-    public void setClassName(String className) {
-        this.className = className;
-    }
-    
-    /**
-     *
-     */
-    public Java getJava() {
-        return java;
-    }
-    
-    public String getClassName() {
-        return className;
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/j2ee/HotDeploymentTool.java b/src/main/org/apache/tools/ant/taskdefs/optional/j2ee/HotDeploymentTool.java
deleted file mode 100644
index 0c71de6..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/j2ee/HotDeploymentTool.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.j2ee;
-
-import org.apache.tools.ant.BuildException;
-
-/**
- *  An interface for vendor-specific "hot" deployment tools.
- *
- *  @author Christopher A. Longo - cal@cloud9.net
- *
- *  @see org.apache.tools.ant.taskdefs.optional.j2ee.AbstractHotDeploymentTool
- *  @see org.apache.tools.ant.taskdefs.optional.j2ee.ServerDeploy
- */
-public interface HotDeploymentTool {
-    /** The delete action String **/
-    public static final String ACTION_DELETE = "delete";
-
-    /** The deploy action String **/
-    public static final String ACTION_DEPLOY = "deploy";
-
-    /** The list action String **/
-    public static final String ACTION_LIST = "list";
-
-    /** The undeploy action String **/
-    public static final String ACTION_UNDEPLOY = "undeploy";
-
-    /** The update action String **/
-    public static final String ACTION_UPDATE = "update";
-
-    /**
-     *  Validates the passed in attributes.
-     *  @exception org.apache.tools.ant.BuildException if the attributes are invalid or incomplete.
-     */
-    public void validateAttributes() throws BuildException;
-
-    /**
-     *  Perform the actual deployment.
-     *  @exception org.apache.tools.ant.BuildException if the attributes are invalid or incomplete.
-     */
-    public void deploy() throws BuildException;
-
-    /**
-     *  Sets the parent task.
-     *  @param task A ServerDeploy object representing the parent task.
-     */
-    public void setTask(ServerDeploy task);
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/j2ee/JonasHotDeploymentTool.java b/src/main/org/apache/tools/ant/taskdefs/optional/j2ee/JonasHotDeploymentTool.java
deleted file mode 100644
index 58adff5..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/j2ee/JonasHotDeploymentTool.java
+++ /dev/null
@@ -1,275 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.j2ee;
-
-import java.io.File;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.taskdefs.Java;
-import org.apache.tools.ant.types.Path;
-
-/**
- *  An Ant wrapper task for the weblogic.deploy tool. This is used
- *  to hot-deploy J2EE applications to a running WebLogic server.
- *  This is <b>not</b> the same as creating the application
- *  archive. This task assumes the archive (EAR, JAR, or WAR) file
- *  has been assembled and is supplied as the "source" attribute.
- *  <p>
- *
- *  In the end, this task assembles the commadline parameters and
- *  runs the weblogic.deploy tool in a seperate JVM.
- *
- *@author Cyrille Morvan
- *@see org.apache.tools.ant.taskdefs.optional.j2ee.HotDeploymentTool
- *@see org.apache.tools.ant.taskdefs.optional.j2ee.AbstractHotDeploymentTool
- *@see org.apache.tools.ant.taskdefs.optional.j2ee.ServerDeploy
- */
-public class JonasHotDeploymentTool extends GenericHotDeploymentTool implements HotDeploymentTool {
-
-    /**
-     *  Description of the Field
-     */
-    protected static final String DEFAULT_ORB = "RMI";
-
-    /**
-     *  The classname of the tool to run *
-     */
-    private static final String JONAS_DEPLOY_CLASS_NAME = "org.objectweb.jonas.adm.JonasAdmin";
-
-    /**
-     *  All the valid actions that weblogic.deploy permits *
-     */
-    private static final String[] VALID_ACTIONS =
-            {ACTION_DELETE, ACTION_DEPLOY, ACTION_LIST, ACTION_UNDEPLOY, ACTION_UPDATE};
-
-    /**
-     *  Description of the Field
-     */
-    private File jonasroot;
-    
-    /**
-     *  Description of the Field
-     */
-    private String orb = null;
-
-    /**
-     *  Description of the Field
-     */
-    private String davidHost;
-    
-    /**
-     *  Description of the Field
-     */
-    private int davidPort;
-
-
-    /**
-     *  Set the host for the David ORB.
-     *
-     *@param  inValue  The new davidhost value
-     */
-    public void setDavidhost(final String inValue) {
-        davidHost = inValue;
-    }
-
-
-    /**
-     *  Set the port for the David ORB.
-     *
-     *@param  inValue  The new davidport value
-     */
-    public void setDavidport(final int inValue) {
-        davidPort = inValue;
-    }
-
-
-    /**
-     *  set the jonas root directory (-Dinstall.root=). This
-     *  element is required.
-     *
-     *@param  inValue  The new jonasroot value
-     */
-    public void setJonasroot(final File inValue) {
-        jonasroot = inValue;
-    }
-
-
-    /**
-     *  Set the ORB to construct classpath.
-     *
-     *@param  inValue  RMI, JEREMIE, DAVID,...
-     */
-    public void setOrb(final String inValue) {
-        orb = inValue;
-    }
-
-
-    /**
-     *  gets the classpath field.
-     *
-     *@return    A Path representing the "classpath" attribute.
-     */
-    public Path getClasspath() {
-
-        Path aClassPath = super.getClasspath();
-
-        if (aClassPath == null) {
-            aClassPath = new Path(getTask().getProject());
-        }
-        if (orb != null) {
-            String aOrbJar = new File(jonasroot, "lib/" + orb + "_jonas.jar").toString();
-            String aConfigDir = new File(jonasroot, "config/").toString();
-            Path aJOnASOrbPath = new Path(aClassPath.getProject(),
-                    aOrbJar + File.pathSeparator + aConfigDir);
-            aClassPath.append(aJOnASOrbPath);
-        }
-        return aClassPath;
-    }
-
-
-    /**
-     *  Validates the passed in attributes. <p>
-     *
-     *  The rules are:
-     *  <ol>
-     *    <li> If action is "deploy" or "update" the "application"
-     *    and "source" attributes must be supplied.
-     *    <li> If action is "delete" or "undeploy" the
-     *    "application" attribute must be supplied.
-     *
-     *@exception  BuildException                       Description
-     *      of Exception
-     */
-    public void validateAttributes() throws BuildException {
-        // super.validateAttributes(); // don't want to call this method
-
-        Java java = getJava();
-
-        String action = getTask().getAction();
-        if (action == null) {
-            throw new BuildException("The \"action\" attribute must be set");
-        }
-
-        if (!isActionValid()) {
-            throw new BuildException("Invalid action \"" + action + "\" passed");
-        }
-
-        if (getClassName() == null) {
-            setClassName(JONAS_DEPLOY_CLASS_NAME);
-        }
-
-        if (jonasroot == null || jonasroot.isDirectory()) {
-            java.createJvmarg().setValue("-Dinstall.root=" + jonasroot);
-            java.createJvmarg().setValue("-Djava.security.policy=" + jonasroot + "/config/java.policy");
-
-            if ("DAVID".equals(orb)) {
-                java.createJvmarg().setValue("-Dorg.omg.CORBA.ORBClass=org.objectweb.david.libs.binding.orbs.iiop.IIOPORB");
-                java.createJvmarg().setValue("-Dorg.omg.CORBA.ORBSingletonClass=org.objectweb.david.libs.binding.orbs.ORBSingletonClass");
-                java.createJvmarg().setValue("-Djavax.rmi.CORBA.StubClass=org.objectweb.david.libs.stub_factories.rmi.StubDelegate");
-                java.createJvmarg().setValue("-Djavax.rmi.CORBA.PortableRemoteObjectClass=org.objectweb.david.libs.binding.rmi.ORBPortableRemoteObjectDelegate");
-                java.createJvmarg().setValue("-Djavax.rmi.CORBA.UtilClass=org.objectweb.david.libs.helpers.RMIUtilDelegate");
-                java.createJvmarg().setValue("-Ddavid.CosNaming.default_method=0");
-                java.createJvmarg().setValue("-Ddavid.rmi.ValueHandlerClass=com.sun.corba.se.internal.io.ValueHandlerImpl");
-                if (davidHost != null) {
-                    java.createJvmarg().setValue("-Ddavid.CosNaming.default_host=" + davidHost);
-                }
-                if (davidPort != 0) {
-                    java.createJvmarg().setValue("-Ddavid.CosNaming.default_port=" + davidPort);
-                }
-            }
-        }
-
-        String anAction = getTask().getAction();
-
-        if (getServer() != null) {
-            java.createArg().setLine("-n " + getServer());
-        }
-
-        if (action.equals(ACTION_DEPLOY) ||
-                action.equals(ACTION_UPDATE) ||
-                action.equals("redeploy")) {
-            java.createArg().setLine("-a " + getTask().getSource());
-        } else if (action.equals(ACTION_DELETE) || action.equals(ACTION_UNDEPLOY)) {
-            java.createArg().setLine("-r " + getTask().getSource());
-        } else if (action.equals(ACTION_LIST)) {
-            java.createArg().setValue("-l");
-        }
-    }
-
-
-    /**
-     *  Determines if the action supplied is valid. <p>
-     *
-     *  Valid actions are contained in the static array
-     *  VALID_ACTIONS
-     *
-     *@return    true if the action attribute is valid, false if
-     *      not.
-     */
-    protected boolean isActionValid() {
-        boolean valid = false;
-
-        String action = getTask().getAction();
-
-        for (int i = 0; i < VALID_ACTIONS.length; i++) {
-            if (action.equals(VALID_ACTIONS[i])) {
-                valid = true;
-                break;
-            }
-        }
-
-        return valid;
-    }
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/j2ee/ServerDeploy.java b/src/main/org/apache/tools/ant/taskdefs/optional/j2ee/ServerDeploy.java
deleted file mode 100644
index dae14f7..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/j2ee/ServerDeploy.java
+++ /dev/null
@@ -1,192 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.j2ee;
-
-import java.io.File;
-import java.util.Vector;
-import java.util.Enumeration;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Task;
-
-/**
- *  A task to support hot deployment tools for J2EE servers.
- *
- *  This class is used as a framework for the creation of vendor specific
- *  hot deployment tools.
- *
- *  @author Christopher A. Longo - cal@cloud9.net
- *
- *  @see org.apache.tools.ant.taskdefs.optional.j2ee.HotDeploymentTool
- *  @see org.apache.tools.ant.taskdefs.optional.j2ee.AbstractHotDeploymentTool
- *  @see org.apache.tools.ant.taskdefs.optional.j2ee.GenericHotDeploymentTool
- *  @see org.apache.tools.ant.taskdefs.optional.j2ee.WebLogicHotDeploymentTool
- */
-public class ServerDeploy extends Task {
-    /** The action to be performed.  IE: "deploy", "delete", etc... **/
-    private String action;
-
-    /** The source (fully-qualified path) to the component being deployed **/
-    private File source;
-
-    /** The vendor specific tool for deploying the component **/
-    private Vector vendorTools = new Vector();
-
-    ///////////////////////////////////////////////////////////////////////////
-    //
-    // Place vendor specific tool creations here.
-    //
-    ///////////////////////////////////////////////////////////////////////////
-
-    /**
-     *  Creates a generic deployment tool.
-     *  <p>Ant calls this method on creation to handle embedded "generic" elements
-     *  in the ServerDeploy task.
-     *  @param tool An instance of GenericHotDeployment tool, passed in by Ant.
-     */
-    public void addGeneric(GenericHotDeploymentTool tool) {
-        tool.setTask(this);
-        vendorTools.addElement(tool);
-    }
-
-    /**
-     *  Creates a WebLogic deployment tool, for deployment to WebLogic servers.
-     *  <p>Ant calls this method on creation to handle embedded "weblogic" elements
-     *  in the ServerDeploy task.
-     *  @param tool An instance of WebLogicHotDeployment tool, passed in by Ant.
-     */
-    public void addWeblogic(WebLogicHotDeploymentTool tool) {
-        tool.setTask(this);
-        vendorTools.addElement(tool);
-    }
-
-    /**
-     *  Creates a JOnAS deployment tool, for deployment to JOnAS servers.
-     *  <p>Ant calls this method on creation to handle embedded "jonas" elements
-     *  in the ServerDeploy task.
-     *  @param tool An instance of JonasHotDeployment tool, passed in by Ant.
-     */
-    public void addJonas(JonasHotDeploymentTool tool) {
-        tool.setTask(this);
-        vendorTools.addElement(tool);
-    }
-
-
-    ///////////////////////////////////////////////////////////////////////////
-    //
-    // Execute method
-    //
-    ///////////////////////////////////////////////////////////////////////////
-
-    /**
-     *  Execute the task.
-     *  <p>This method calls the deploy() method on each of the vendor-specific tools
-     *  in the <code>vendorTools</code> collection.  This performs the actual
-     *  process of deployment on each tool.
-     *  @exception org.apache.tools.ant.BuildException if the attributes are invalid or incomplete, or
-     *  a failure occurs in the deployment process.
-     */
-    public void execute() throws BuildException {
-        for (Enumeration enum = vendorTools.elements(); 
-             enum.hasMoreElements();) {
-            HotDeploymentTool tool = (HotDeploymentTool) enum.nextElement();
-            tool.validateAttributes();
-            tool.deploy();
-        }
-    }
-
-    ///////////////////////////////////////////////////////////////////////////
-    //
-    // Set/get methods
-    //
-    ///////////////////////////////////////////////////////////////////////////
-
-    /**
-     *  Returns the action field.
-     *  @return A string representing the "action" attribute.
-     */
-    public String getAction() {
-        return action;
-    }
-
-    /**
-     *  Sets the action field.
-     *  This is a required attribute.
-     *  @param action A String representing the "action" attribute.
-     */
-    public void setAction(String action) {
-        this.action = action;
-    }
-
-    /**
-     *  Returns the source field (the path/filename of the component to be
-     *  deployed.
-     *  @return A File object representing the "source" attribute.
-     */
-    public File getSource() {
-        return source;
-    }
-
-    /**
-     *  Sets the source field (the path/filename of the component to be
-     *  deployed.
-     *  This is  <b>not</b> a required attribute.
-     *  @param source String representing the "source" attribute.
-     */
-    public void setSource(File source) {
-        this.source = source;
-    }
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/j2ee/WebLogicHotDeploymentTool.java b/src/main/org/apache/tools/ant/taskdefs/optional/j2ee/WebLogicHotDeploymentTool.java
deleted file mode 100644
index 28284c8..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/j2ee/WebLogicHotDeploymentTool.java
+++ /dev/null
@@ -1,278 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.j2ee;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.taskdefs.Java;
-
-/**
- *  An Ant wrapper task for the weblogic.deploy tool.  This is used to
- *  hot-deploy J2EE applications to a running WebLogic server.
- *  This is <b>not</b> the same as creating the application archive.
- *  This task assumes the archive (EAR, JAR, or WAR) file has been
- *  assembled and is supplied as the "source" attribute.
- *  <p>In the end, this task assembles the commadline parameters
- *  and runs the weblogic.deploy tool in a seperate JVM.
- *
- *  @author Christopher A. Longo - cal@cloud9.net
- *
- *  @see org.apache.tools.ant.taskdefs.optional.j2ee.HotDeploymentTool
- *  @see org.apache.tools.ant.taskdefs.optional.j2ee.AbstractHotDeploymentTool
- *  @see org.apache.tools.ant.taskdefs.optional.j2ee.ServerDeploy
- */
-public class WebLogicHotDeploymentTool extends AbstractHotDeploymentTool implements HotDeploymentTool
-{
-    /** The classname of the tool to run **/
-    private static final String WEBLOGIC_DEPLOY_CLASS_NAME = "weblogic.deploy";
-
-    /** All the valid actions that weblogic.deploy permits **/
-    private static final String[] VALID_ACTIONS =
-            {ACTION_DELETE, ACTION_DEPLOY, ACTION_LIST, ACTION_UNDEPLOY, ACTION_UPDATE};
-
-    /** Represents the "-debug" flag from weblogic.deploy **/
-    private boolean debug;
-
-    /** The application name that is being deployed **/
-    private String application;
-
-    /** The component name:target(s) for the "-component" argument of weblogic.deploy **/
-    private String component;
-
-    /**
-     *  Perform the actual deployment.
-     *  For this implementation, a JVM is spawned and the weblogic.deploy
-     *  tools is executed.
-     *  @exception org.apache.tools.ant.BuildException if the attributes are invalid or incomplete.
-     */
-    public void deploy() {
-        Java java = (Java) getTask().getProject().createTask("java");
-        java.setFork(true);
-        java.setFailonerror(true);
-        java.setClasspath(getClasspath());
-
-        java.setClassname(WEBLOGIC_DEPLOY_CLASS_NAME);
-        java.createArg().setLine(getArguments());
-        java.execute();
-    }
-
-    /**
-     *  Validates the passed in attributes.
-     *  <p>The rules are:
-     *  <ol><li>If action is "deploy" or "update" the "application" and "source"
-     *  attributes must be supplied.
-     *  <li>If action is "delete" or "undeploy" the "application" attribute must
-     *  be supplied.
-     *  @exception org.apache.tools.ant.BuildException if the attributes are invalid or incomplete
-     */
-    public void validateAttributes() throws BuildException {
-        super.validateAttributes();
-
-        String action = getTask().getAction();
-
-        // check that the password has been set
-        if ((getPassword() == null))
-            throw new BuildException("The password attribute must be set.");
-
-        // check for missing application on deploy & update
-        if ((action.equals(ACTION_DEPLOY) || action.equals(ACTION_UPDATE)) 
-            && application == null)
-            throw new BuildException("The application attribute must be set " 
-                + "if action = " + action);
-
-        // check for missing source on deploy & update
-        if ((action.equals(ACTION_DEPLOY) || action.equals(ACTION_UPDATE)) 
-            && getTask().getSource() == null)
-            throw new BuildException("The source attribute must be set if " 
-                + "action = " + action);
-
-        // check for missing application on delete & undeploy
-        if ((action.equals(ACTION_DELETE) || action.equals(ACTION_UNDEPLOY)) 
-            && application == null)
-            throw new BuildException("The application attribute must be set if " 
-                + "action = " + action);
-    }
-
-    /**
-     *  Builds the arguments to pass to weblogic.deploy according to the
-     *  supplied action.
-     *  @return A String containing the arguments for the weblogic.deploy tool.
-     */
-    public String getArguments() throws BuildException {
-        String action = getTask().getAction();
-        String args = null;
-
-        if (action.equals(ACTION_DEPLOY) || action.equals(ACTION_UPDATE))
-            args = buildDeployArgs();
-        else if (action.equals(ACTION_DELETE) || action.equals(ACTION_UNDEPLOY))
-            args = buildUndeployArgs();
-        else if (action.equals(ACTION_LIST))
-            args = buildListArgs();
-
-        return args;
-    }
-
-    /**
-     *  Determines if the action supplied is valid.
-     *  <p>Valid actions are contained in the static array VALID_ACTIONS
-     *  @return true if the action attribute is valid, false if not.
-     */
-    protected boolean isActionValid() {
-        boolean valid = false;
-
-        String action = getTask().getAction();
-
-        for (int i = 0; i < VALID_ACTIONS.length; i++) {
-            if (action.equals(VALID_ACTIONS[i])) {
-                valid = true;
-                break;
-            }
-        }
-
-        return valid;
-    }
-
-    /**
-     *  Builds the prefix arguments to pass to weblogic.deploy.
-     *  These arguments are generic across all actions.
-     *  @return A StringBuffer containing the prefix arguments.
-     *  The action-specific build methods will append to this StringBuffer.
-     */
-    protected StringBuffer buildArgsPrefix() {
-        ServerDeploy task = getTask();
-        // constructs the "-url <url> -debug <action> <password>" portion
-        // of the commmand line
-        return new StringBuffer(1024)
-                .append((getServer() != null)
-                    ? "-url " + getServer()
-                    : "")
-                .append(" ")
-                .append(debug ? "-debug " : "")
-                .append((getUserName() != null)
-                    ? "-username " + getUserName()
-                    : "")
-                .append(" ")
-                .append(task.getAction()).append(" ")
-                .append(getPassword()).append(" ");
-    }
-
-    /**
-     *  Builds the arguments to pass to weblogic.deploy for deployment actions
-     *  ("deploy" and "update").
-     *  @return A String containing the full argument string for weblogic.deploy.
-     */
-    protected String buildDeployArgs() {
-        String args = buildArgsPrefix()
-                .append(application).append(" ")
-                .append(getTask().getSource())
-                .toString();
-
-        if (component != null) {
-            args = "-component " + component + " " + args;
-        }
-        
-        return args;
-    }
-
-    /**
-     *  Builds the arguments to pass to weblogic.deploy for undeployment actions
-     *  ("undeploy" and "delete").
-     *  @return A String containing the full argument string for weblogic.deploy.
-     */
-    protected String buildUndeployArgs() {
-        return buildArgsPrefix()
-                .append(application).append(" ")
-                .toString();
-    }
-
-    /**
-     *  Builds the arguments to pass to weblogic.deploy for the list action
-     *  @return A String containing the full argument string for weblogic.deploy.
-     */
-    protected String buildListArgs() {
-        return buildArgsPrefix()
-                .toString();
-    }
-
-    /**
-     *  Sets the debug field.
-     *  <p>This is not a required attribute.
-     *  @param debug A boolean representing weblogic.deploy "-debug" flag.
-     */
-    public void setDebug(boolean debug) {
-        this.debug = debug;
-    }
-
-    /**
-     *  Sets the application field.
-     *  <p>This is a required attribute.
-     *  @param application A String representing the application portion of the
-     *  weblogic.deploy command line.
-     */
-    public void setApplication(String application) {
-        this.application = application;
-    }
-
-    /**
-     *  Sets the component attribute.
-     *  <p>This attribute is not a required attribute.
-     *  @param component A String representing the value of the "-component"
-     *  argument of the weblogic.deploy command line argument.<br>
-     *  This string should be in the format of
-     *  &lt;<i>componentName</i>&gt;:&lt<i>target1</i>&gt;,&lt<i>target2</i>&gt;...
-     */
-    public void setComponent(String component) {
-        this.component = component;
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/javacc/JJTree.java b/src/main/org/apache/tools/ant/taskdefs/optional/javacc/JJTree.java
deleted file mode 100644
index def2ea4..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/javacc/JJTree.java
+++ /dev/null
@@ -1,226 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.javacc;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.taskdefs.Execute;
-import org.apache.tools.ant.taskdefs.LogStreamHandler;
-import org.apache.tools.ant.types.Commandline;
-import org.apache.tools.ant.types.CommandlineJava;
-import org.apache.tools.ant.types.Path;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.Hashtable;
-import java.util.Enumeration;
-
-/**
- * Taskdef for the JJTree compiler compiler.
- *
- * @author thomas.haas@softwired-inc.com
- * @author Michael Saunders <a href="mailto:michael@amtec.com">michael@amtec.com</a>
- */
-public class JJTree extends Task {
-
-    // keys to optional attributes
-    private static final String BUILD_NODE_FILES  = "BUILD_NODE_FILES";
-    private static final String MULTI             = "MULTI";
-    private static final String NODE_DEFAULT_VOID = "NODE_DEFAULT_VOID";
-    private static final String NODE_FACTORY      = "NODE_FACTORY";
-    private static final String NODE_SCOPE_HOOK   = "NODE_SCOPE_HOOK";
-    private static final String NODE_USES_PARSER  = "NODE_USES_PARSER";
-    private static final String STATIC            = "STATIC";
-    private static final String VISITOR           = "VISITOR";
-
-    private static final String NODE_PACKAGE      = "NODE_PACKAGE";
-    private static final String VISITOR_EXCEPTION = "VISITOR_EXCEPTION";
-    private static final String NODE_PREFIX       = "NODE_PREFIX";
-
-    private final Hashtable optionalAttrs = new Hashtable();
-
-    // required attributes
-    private File outputDirectory = null;
-    private File target          = null;
-    private File javaccHome      = null;
-
-    private CommandlineJava cmdl = new CommandlineJava();
-
-
-    public void setBuildnodefiles(boolean buildNodeFiles) {
-        optionalAttrs.put(BUILD_NODE_FILES, new Boolean(buildNodeFiles));
-    }
-
-    public void setMulti(boolean multi) {
-        optionalAttrs.put(MULTI, new Boolean(multi));
-    }
-
-    public void setNodedefaultvoid(boolean nodeDefaultVoid) {
-        optionalAttrs.put(NODE_DEFAULT_VOID, new Boolean(nodeDefaultVoid));
-    }
-
-    public void setNodefactory(boolean nodeFactory) {
-        optionalAttrs.put(NODE_FACTORY, new Boolean(nodeFactory));
-    }
-
-    public void setNodescopehook(boolean nodeScopeHook) {
-        optionalAttrs.put(NODE_SCOPE_HOOK, new Boolean(nodeScopeHook));
-    }
-
-    public void setNodeusesparser(boolean nodeUsesParser) {
-        optionalAttrs.put(NODE_USES_PARSER, new Boolean(nodeUsesParser));
-    }
-
-    public void setStatic(boolean staticParser) {
-        optionalAttrs.put(STATIC, new Boolean(staticParser));
-    }
-
-    public void setVisitor(boolean visitor) {
-        optionalAttrs.put(VISITOR, new Boolean(visitor));
-    }
-
-    public void setNodepackage(String nodePackage) {
-        optionalAttrs.put(NODE_PACKAGE, new String(nodePackage));
-    }
-
-    public void setVisitorException(String visitorException) {
-        optionalAttrs.put(VISITOR_EXCEPTION, new String(visitorException));
-    }
-
-    public void setNodeprefix(String nodePrefix) {
-        optionalAttrs.put(NODE_PREFIX, new String(nodePrefix));
-    }
-
-    public void setOutputdirectory(File outputDirectory) {
-        this.outputDirectory = outputDirectory;
-    }
-
-    public void setTarget(File target) {
-        this.target = target;
-    }
-
-    public void setJavacchome(File javaccHome) {
-        this.javaccHome = javaccHome;
-    }
-
-    public JJTree() {
-        cmdl.setVm("java");
-        cmdl.setClassname("COM.sun.labs.jjtree.Main");
-    }
-
-    public void execute() throws BuildException {
-
-        // load command line with optional attributes
-        Enumeration iter = optionalAttrs.keys();
-        while (iter.hasMoreElements()) {
-            String name  = (String) iter.nextElement();
-            Object value = optionalAttrs.get(name);
-            cmdl.createArgument().setValue("-" + name + ":" + value.toString());
-        }
-
-        if (target == null || !target.isFile()) {
-            throw new BuildException("Invalid target: " + target);
-        }
-        
-        // use the directory containing the target as the output directory
-        if (outputDirectory == null) {
-            outputDirectory = new File(target.getParent());
-        }        
-        if (!outputDirectory.isDirectory()) {
-            throw new BuildException("'outputdirectory' " + outputDirectory 
-                + " is not a directory.");
-        }
-        // convert backslashes to slashes, otherwise jjtree will put this as
-        // comments and this seems to confuse javacc
-        cmdl.createArgument().setValue("-OUTPUT_DIRECTORY:" 
-            + outputDirectory.getAbsolutePath().replace('\\', '/'));
-        
-        String targetName = target.getName();
-        final File javaFile = new File(outputDirectory,
-            targetName.substring(0, targetName.indexOf(".jjt")) + ".jj");
-        if (javaFile.exists() 
-             && target.lastModified() < javaFile.lastModified()) {
-            project.log("Target is already built - skipping (" + target + ")");
-            return;
-        }
-        cmdl.createArgument().setValue(target.getAbsolutePath());
-
-        final Path classpath = cmdl.createClasspath(project);
-        final File javaccJar = JavaCC.getArchiveFile(javaccHome);
-        classpath.createPathElement().setPath(javaccJar.getAbsolutePath());
-        classpath.addJavaRuntime();
-
-        final Commandline.Argument arg = cmdl.createVmArgument();
-        arg.setValue("-mx140M");
-        arg.setValue("-Dinstall.root=" + javaccHome.getAbsolutePath());
-
-        final Execute process =
-            new Execute(new LogStreamHandler(this,
-                                             Project.MSG_INFO,
-                                             Project.MSG_INFO),
-                        null);
-        log(cmdl.describeCommand(), Project.MSG_VERBOSE);
-        process.setCommandline(cmdl.getCommandline());
-
-        try {
-            if (process.execute() != 0) {
-                throw new BuildException("JJTree failed.");
-            }
-        } catch (IOException e) {
-            throw new BuildException("Failed to launch JJTree", e);
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/javacc/JavaCC.java b/src/main/org/apache/tools/ant/taskdefs/optional/javacc/JavaCC.java
deleted file mode 100644
index dc1435e..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/javacc/JavaCC.java
+++ /dev/null
@@ -1,307 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.javacc;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.taskdefs.Execute;
-
-import org.apache.tools.ant.types.Commandline;
-import org.apache.tools.ant.types.CommandlineJava;
-import org.apache.tools.ant.types.Path;
-
-import java.io.File;
-
-import java.util.Hashtable;
-import java.util.Enumeration;
-
-/**
- * Taskdef for the JavaCC compiler compiler.
- *
- * @author thomas.haas@softwired-inc.com
- * @author Michael Saunders <a href="mailto:michael@amtec.com">michael@amtec.com</a>
- */
-public class JavaCC extends Task {
-
-    // keys to optional attributes
-    private static final String LOOKAHEAD              = "LOOKAHEAD";
-    private static final String CHOICE_AMBIGUITY_CHECK = "CHOICE_AMBIGUITY_CHECK";
-    private static final String OTHER_AMBIGUITY_CHECK  = "OTHER_AMBIGUITY_CHECK";
-
-    private static final String STATIC                 = "STATIC";
-    private static final String DEBUG_PARSER           = "DEBUG_PARSER";
-    private static final String DEBUG_LOOKAHEAD        = "DEBUG_LOOKAHEAD";
-    private static final String DEBUG_TOKEN_MANAGER    = "DEBUG_TOKEN_MANAGER";
-    private static final String OPTIMIZE_TOKEN_MANAGER = "OPTIMIZE_TOKEN_MANAGER";
-    private static final String ERROR_REPORTING        = "ERROR_REPORTING";
-    private static final String JAVA_UNICODE_ESCAPE    = "JAVA_UNICODE_ESCAPE";
-    private static final String UNICODE_INPUT          = "UNICODE_INPUT";
-    private static final String IGNORE_CASE            = "IGNORE_CASE";
-    private static final String COMMON_TOKEN_ACTION    = "COMMON_TOKEN_ACTION";
-    private static final String USER_TOKEN_MANAGER     = "USER_TOKEN_MANAGER";
-    private static final String USER_CHAR_STREAM       = "USER_CHAR_STREAM";
-    private static final String BUILD_PARSER           = "BUILD_PARSER";
-    private static final String BUILD_TOKEN_MANAGER    = "BUILD_TOKEN_MANAGER";
-    private static final String SANITY_CHECK           = "SANITY_CHECK";
-    private static final String FORCE_LA_CHECK         = "FORCE_LA_CHECK";
-    private static final String CACHE_TOKENS           = "CACHE_TOKENS";
-
-    private final Hashtable optionalAttrs = new Hashtable();
-
-    // required attributes
-    private File outputDirectory = null;
-    private File target          = null;
-    private File javaccHome      = null;
-
-    private CommandlineJava cmdl = new CommandlineJava();
-
-
-    public void setLookahead(int lookahead) {
-        optionalAttrs.put(LOOKAHEAD, new Integer(lookahead));
-    }
-
-    public void setChoiceambiguitycheck(int choiceAmbiguityCheck) {
-        optionalAttrs.put(CHOICE_AMBIGUITY_CHECK, new Integer(choiceAmbiguityCheck));
-    }
-
-    public void setOtherambiguityCheck(int otherAmbiguityCheck) {
-        optionalAttrs.put(OTHER_AMBIGUITY_CHECK, new Integer(otherAmbiguityCheck));
-    }
-
-    public void setStatic(boolean staticParser) {
-        optionalAttrs.put(STATIC, new Boolean(staticParser));
-    }
-
-    public void setDebugparser(boolean debugParser) {
-        optionalAttrs.put(DEBUG_PARSER, new Boolean(debugParser));
-    }
-
-    public void setDebuglookahead(boolean debugLookahead) {
-        optionalAttrs.put(DEBUG_LOOKAHEAD, new Boolean(debugLookahead));
-    }
-
-    public void setDebugtokenmanager(boolean debugTokenManager) {
-        optionalAttrs.put(DEBUG_TOKEN_MANAGER, new Boolean(debugTokenManager));
-    }
-
-    public void setOptimizetokenmanager(boolean optimizeTokenManager) {
-        optionalAttrs.put(OPTIMIZE_TOKEN_MANAGER, new Boolean(optimizeTokenManager));
-    }
-
-    public void setErrorreporting(boolean errorReporting) {
-        optionalAttrs.put(ERROR_REPORTING, new Boolean(errorReporting));
-    }
-
-    public void setJavaunicodeescape(boolean javaUnicodeEscape) {
-        optionalAttrs.put(JAVA_UNICODE_ESCAPE, new Boolean(javaUnicodeEscape));
-    }
-
-    public void setUnicodeinput(boolean unicodeInput) {
-        optionalAttrs.put(UNICODE_INPUT, new Boolean(unicodeInput));
-    }
-
-    public void setIgnorecase(boolean ignoreCase) {
-        optionalAttrs.put(IGNORE_CASE, new Boolean(ignoreCase));
-    }
-
-    public void setCommontokenaction(boolean commonTokenAction) {
-        optionalAttrs.put(COMMON_TOKEN_ACTION, new Boolean(commonTokenAction));
-    }
-
-    public void setUsertokenmanager(boolean userTokenManager) {
-        optionalAttrs.put(USER_TOKEN_MANAGER, new Boolean(userTokenManager));
-    }
-
-    public void setUsercharstream(boolean userCharStream) {
-        optionalAttrs.put(USER_CHAR_STREAM, new Boolean(userCharStream));
-    }
-
-    public void setBuildparser(boolean buildParser) {
-        optionalAttrs.put(BUILD_PARSER, new Boolean(buildParser));
-    }
-
-    public void setBuildtokenmanager(boolean buildTokenManager) {
-        optionalAttrs.put(BUILD_TOKEN_MANAGER, new Boolean(buildTokenManager));
-    }
-
-    public void setSanitycheck(boolean sanityCheck) {
-        optionalAttrs.put(SANITY_CHECK, new Boolean(sanityCheck));
-    }
-
-    public void setForcelacheck(boolean forceLACheck) {
-        optionalAttrs.put(FORCE_LA_CHECK, new Boolean(forceLACheck));
-    }
-
-    public void setCachetokens(boolean cacheTokens) {
-        optionalAttrs.put(CACHE_TOKENS, new Boolean(cacheTokens));
-    }
-
-    public void setOutputdirectory(File outputDirectory) {
-        this.outputDirectory = outputDirectory;
-    }
-
-    public void setTarget(File target) {
-        this.target = target;
-    }
-
-    public void setJavacchome(File javaccHome) {
-        this.javaccHome = javaccHome;
-    }
-
-    public JavaCC() {
-        cmdl.setVm("java");
-        cmdl.setClassname("COM.sun.labs.javacc.Main");
-    }
-
-    public void execute() throws BuildException {
-
-        // load command line with optional attributes
-        Enumeration iter = optionalAttrs.keys();
-        while (iter.hasMoreElements()) {
-            String name  = (String) iter.nextElement();
-            Object value = optionalAttrs.get(name);
-            cmdl.createArgument().setValue("-" + name + ":" + value.toString());
-        }
-
-        // check the target is a file
-        if (target == null || !target.isFile()) {
-            throw new BuildException("Invalid target: " + target);
-        }
-
-        // use the directory containing the target as the output directory
-        if (outputDirectory == null) {
-            outputDirectory = new File(target.getParent());
-        } else if (!outputDirectory.isDirectory()) {
-            throw new BuildException("Outputdir not a directory.");
-        }
-        cmdl.createArgument().setValue("-OUTPUT_DIRECTORY:"
-            + outputDirectory.getAbsolutePath());
-
-        // determine if the generated java file is up-to-date
-        final File javaFile = getOutputJavaFile(outputDirectory, target);
-        if (javaFile.exists() && target.lastModified() < javaFile.lastModified()) {
-            log("Target is already built - skipping (" + target + ")", Project.MSG_VERBOSE);
-            return;
-        }
-        cmdl.createArgument().setValue(target.getAbsolutePath());
-
-        final Path classpath = cmdl.createClasspath(project);
-        final File javaccJar = JavaCC.getArchiveFile(javaccHome);
-        classpath.createPathElement().setPath(javaccJar.getAbsolutePath());
-        classpath.addJavaRuntime();
-
-        final Commandline.Argument arg = cmdl.createVmArgument();
-        arg.setValue("-mx140M");
-        arg.setValue("-Dinstall.root=" + javaccHome.getAbsolutePath());
-
-        Execute.runCommand(this, cmdl.getCommandline());
-    }
-
-    /**
-     * Helper class to retrieve the path used to store the JavaCC.zip which is
-     * different from versions.
-     * @param home the javacc home path directory.
-     * @throws BuildException thrown if the home directory is invalid or if the archive
-     * could not be found despite attemps to do so.
-     * @return the file object pointing to the JavaCC archive.
-     */
-    protected static File getArchiveFile(File home) throws BuildException {
-        if (home == null || !home.isDirectory()) {
-            throw new BuildException("JavaCC home must be a valid directory.");
-        }
-        // javacc prior to 2.0
-        File f = new File(home, "JavaCC.zip");
-        if (f.exists()){
-          return f;
-        }
-        // javacc install 2.0+
-        f = new File(home, "bin/lib/JavaCC.zip");
-        if (f.exists()){
-          return f;
-        }
-        throw new BuildException("Could not find a path to JavaCC.zip from '" + home + "'.");
-    }
-
-    /**
-     * Determines the output Java file to be generated by the given grammar
-     * file.
-     * 
-     */
-    private File getOutputJavaFile(File outputdir, File srcfile) {
-        String path = srcfile.getPath();
-
-        // Extract file's base-name
-        int startBasename = path.lastIndexOf(File.separator);
-        if (startBasename != -1) {
-            path = path.substring(startBasename + 1);
-        }
-
-        // Replace the file's extension with '.java'
-        int startExtn = path.lastIndexOf('.');
-        if (startExtn != -1) {
-            path = path.substring(0, startExtn) + ".java";
-        } else {
-            path += ".java";
-        }
-
-        // Change the directory
-        if (outputdir != null) {
-            path = outputdir + File.separator + path;
-        }
-
-        return new File(path);
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/jdepend/JDependTask.java b/src/main/org/apache/tools/ant/taskdefs/optional/jdepend/JDependTask.java
deleted file mode 100644
index 92377b7..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/jdepend/JDependTask.java
+++ /dev/null
@@ -1,435 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.jdepend;
-
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.PrintWriter;
-
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.PathTokenizer;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.taskdefs.Execute;
-import org.apache.tools.ant.taskdefs.ExecuteWatchdog;
-import org.apache.tools.ant.taskdefs.LogStreamHandler;
-import org.apache.tools.ant.types.Commandline;
-import org.apache.tools.ant.types.CommandlineJava;
-import org.apache.tools.ant.types.Path;
-import org.apache.tools.ant.types.Reference;
-import org.apache.tools.ant.types.EnumeratedAttribute;
-
-/**
- * Ant task to run JDepend tests.
- *
- * <p>JDepend is a tool to generate design quality metrics for each Java package.
- * It has been initially created by Mike Clark. JDepend can be found at <a
- * href="http://www.clarkware.com/software/JDepend.html">http://www.clarkware.com/software/JDepend.html</a>.
- *
- * The current implementation spawn a new Java VM.
- *
- * @author <a href="mailto:Jerome@jeromelacoste.com">Jerome Lacoste</a>
- * @author <a href="mailto:roxspring@yahoo.com">Rob Oxspring</a>
- */
-public class JDependTask extends Task {
-    //private CommandlineJava commandline = new CommandlineJava();
-
-    // required attributes
-    private Path _sourcesPath;
-
-    // optional attributes
-    private File _outputFile;
-    private File _dir;
-    private Path _compileClasspath;
-    private boolean _haltonerror = false;
-    private boolean _fork = false;
-    //private Integer _timeout = null;
-
-    private String _jvm = null;
-    private String format = "text";
-
-    public JDependTask() {
-
-    }
-
-/*
-    public void setTimeout(Integer value) {
-        _timeout = value;
-    }
-
-    public Integer getTimeout() {
-        return _timeout;
-    }
-*/
-
-    public void setOutputFile(File outputFile) {
-        _outputFile = outputFile;
-    }
-
-    public File getOutputFile() {
-        return _outputFile;
-    }
-
-    /**
-     * Whether or not to halt on failure. Default: false.
-     */
-    public void setHaltonerror(boolean value) {
-        _haltonerror = value;
-    }
-
-    public boolean getHaltonerror() {
-        return _haltonerror;
-    }
-
-    /**
-     * Tells whether a JVM should be forked for the task. Default: false.
-     * @param   value   <tt>true</tt> if a JVM should be forked, otherwise <tt>false<tt>
-     */
-    public void setFork(boolean value) {
-        _fork = value;
-    }
-
-    public boolean getFork() {
-        return _fork;
-    }
-
-    /**
-     * Set a new VM to execute the task. Default is <tt>java</tt>. Ignored if no JVM is forked.
-     * @param   value   the new VM to use instead of <tt>java</tt>
-     * @see #setFork(boolean)
-     */
-    public void setJvm(String value) {
-        _jvm = value;
-
-    }
-
-    /**
-     * Maybe creates a nested classpath element.
-     */
-    public Path createSourcespath() {
-        if (_sourcesPath == null) {
-            _sourcesPath = new Path(project);
-        }
-        return _sourcesPath.createPath();
-    }
-
-    /** Gets the sourcepath. */
-    public Path getSourcespath() {
-        return _sourcesPath;
-    }
-
-    /**
-     * The directory to invoke the VM in. Ignored if no JVM is forked.
-     * @param   dir     the directory to invoke the JVM from.
-     * @see #setFork(boolean)
-     */
-    public void setDir(File dir) {
-        _dir = dir;
-    }
-
-    public File getDir() {
-        return _dir;
-    }
-
-    /**
-     * Set the classpath to be used for this compilation.
-     */
-    public void setClasspath(Path classpath) {
-        if (_compileClasspath == null) {
-            _compileClasspath = classpath;
-        } else {
-            _compileClasspath.append(classpath);
-        }
-    }
-
-    /** Gets the classpath to be used for this compilation. */
-    public Path getClasspath() {
-        return _compileClasspath;
-    }
-
-    /**
-     * Maybe creates a nested classpath element.
-     */
-    public Path createClasspath() {
-        if (_compileClasspath == null) {
-            _compileClasspath = new Path(project);
-        }
-        return _compileClasspath.createPath();
-    }
-
-    /**
-     * Create a new JVM argument. Ignored if no JVM is forked.
-     * @return  create a new JVM argument so that any argument can be passed to the JVM.
-     * @see #setFork(boolean)
-     */
-    public Commandline.Argument createJvmarg(CommandlineJava commandline) {
-        return commandline.createVmArgument();
-    }
-
-    /**
-     * Adds a reference to a CLASSPATH defined elsewhere.
-     */
-    public void setClasspathRef(Reference r) {
-        createClasspath().setRefid(r);
-    }
-
-
-    public void setFormat(FormatAttribute ea) {
-        format = ea.getValue();
-    }
-
-    public static class FormatAttribute extends EnumeratedAttribute {
-        private String [] formats = new String[]{"xml", "text"};
-
-        public String[] getValues() {
-            return formats;
-        }
-    }
-
-
-    /**
-     * No problems with this test.
-     */
-    private static final int SUCCESS = 0;
-    /**
-     * An error occured.
-     */
-    private static final int ERRORS = 1;
-
-    public void execute() throws BuildException {
-
-        CommandlineJava commandline = new CommandlineJava();
-
-        if ("text".equals(format)) {
-            commandline.setClassname("jdepend.textui.JDepend");
-        } else
-        if ("xml".equals(format)) {
-            commandline.setClassname("jdepend.xmlui.JDepend");
-        }
-
-        if (_jvm != null) {
-            commandline.setVm(_jvm);
-        }
-
-        if (getSourcespath() == null) {
-            throw new BuildException("Missing Sourcepath required argument");
-        }
-
-        // execute the test and get the return code
-        int exitValue = JDependTask.ERRORS;
-        boolean wasKilled = false;
-        if (!getFork()) {
-            exitValue = executeInVM(commandline);
-        } else {
-            ExecuteWatchdog watchdog = createWatchdog();
-            exitValue = executeAsForked(commandline, watchdog);
-            // null watchdog means no timeout, you'd better not check with null
-            if (watchdog != null) {
-                //info will be used in later version do nothing for now
-                //wasKilled = watchdog.killedProcess();
-            }
-        }
-
-        // if there is an error/failure and that it should halt, stop 
-        // everything otherwise just log a statement
-        boolean errorOccurred = exitValue == JDependTask.ERRORS;
-
-        if (errorOccurred) {
-            if  (getHaltonerror()) {
-                throw new BuildException("JDepend failed",
-                                         location);
-            } else {
-                log("JDepend FAILED", Project.MSG_ERR);
-            }
-        }
-    }
-
-
-
-    // this comment extract from JUnit Task may also apply here
-    // "in VM is not very nice since it could probably hang the
-    // whole build. IMHO this method should be avoided and it would be best
-    // to remove it in future versions. TBD. (SBa)"
-
-    /**
-     * Execute inside VM.
-     */
-    public int executeInVM(CommandlineJava commandline) throws BuildException {
-        jdepend.textui.JDepend jdepend;
-
-        if ("xml".equals(format)) {
-            jdepend = new jdepend.xmlui.JDepend();
-        } else {
-            jdepend = new jdepend.textui.JDepend();
-        }
-
-        if (getOutputFile() != null) {
-            FileWriter fw;
-            try {
-                fw = new FileWriter(getOutputFile().getPath());
-            } catch (IOException e) {
-                String msg = "JDepend Failed when creating the output file: " 
-                    + e.getMessage();
-                log(msg);
-                throw new BuildException(msg);
-            }
-            jdepend.setWriter(new PrintWriter(fw));
-            log("Output to be stored in " + getOutputFile().getPath());
-        }
-
-        PathTokenizer sourcesPath 
-            = new PathTokenizer(getSourcespath().toString());
-        while (sourcesPath.hasMoreTokens()) {
-            File f = new File(sourcesPath.nextToken());
-
-            // not necessary as JDepend would fail, but why loose some time?
-            if (!f.exists() || !f.isDirectory()) {
-                String msg = "\"" + f.getPath() + "\" does not represent a valid" 
-                    + " directory. JDepend would fail.";
-                log(msg);
-                throw new BuildException(msg);
-            }
-            try {
-                jdepend.addDirectory(f.getPath());
-            } catch (IOException e) {
-                String msg = "JDepend Failed when adding a source directory: " 
-                    + e.getMessage();
-                log(msg);
-                throw new BuildException(msg);
-            }
-        }
-        jdepend.analyze();
-        return SUCCESS;
-    }
-
-
-    /**
-     * Execute the task by forking a new JVM. The command will block until
-     * it finishes. To know if the process was destroyed or not, use the
-     * <tt>killedProcess()</tt> method of the watchdog class.
-     * @param  watchdog   the watchdog in charge of cancelling the test if it
-     * exceeds a certain amount of time. Can be <tt>null</tt>, in this case
-     * the test could probably hang forever.
-     */
-    // JL: comment extracted from JUnitTask (and slightly modified)
-    public int executeAsForked(CommandlineJava commandline,
-                               ExecuteWatchdog watchdog) throws BuildException {
-        // if not set, auto-create the ClassPath from the project
-        createClasspath();
-
-        // not sure whether this test is needed but cost nothing to put.
-        // hope it will be reviewed by anybody competent
-        if (getClasspath().toString().length() > 0) {
-            createJvmarg(commandline).setValue("-classpath");
-            createJvmarg(commandline).setValue(getClasspath().toString());
-        }
-
-        if (getOutputFile() != null) {
-            // having a space between the file and its path causes commandline 
-            // to add quotes around the argument thus making JDepend not taking 
-            // it into account. Thus we split it in two
-            commandline.createArgument().setValue("-file");
-            commandline.createArgument().setValue(_outputFile.getPath());
-            // we have to find a cleaner way to put this output
-        }
-
-        PathTokenizer sourcesPath 
-            = new PathTokenizer(getSourcespath().toString());
-        while (sourcesPath.hasMoreTokens()) {
-            File f = new File(sourcesPath.nextToken());
-
-            // not necessary as JDepend would fail, but why loose some time?
-            if (!f.exists() || !f.isDirectory()) {
-                throw new BuildException("\"" + f.getPath() + "\" does not " 
-                    + "represent a valid directory. JDepend would fail.");
-            }
-            commandline.createArgument().setValue(f.getPath());
-        }
-
-        Execute execute = new Execute(new LogStreamHandler(this, Project.MSG_INFO, Project.MSG_WARN), watchdog);
-        execute.setCommandline(commandline.getCommandline());
-        if (getDir() != null) {
-            execute.setWorkingDirectory(getDir());
-            execute.setAntRun(project);
-        }
-
-        if (getOutputFile() != null) {
-            log("Output to be stored in " + getOutputFile().getPath());
-        }
-        log(commandline.describeCommand(), Project.MSG_VERBOSE);
-        try {
-            return execute.execute();
-        } catch (IOException e) {
-            throw new BuildException("Process fork failed.", e, location);
-        }
-    }
-
-    /**
-     * @return <tt>null</tt> if there is a timeout value, otherwise the
-     * watchdog instance.
-     */
-    protected ExecuteWatchdog createWatchdog() throws BuildException {
-
-        return null;
-        /*
-          if (getTimeout() == null){
-          return null;
-          }
-          return new ExecuteWatchdog(getTimeout().intValue());
-        */
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/jlink/ClassNameReader.java b/src/main/org/apache/tools/ant/taskdefs/optional/jlink/ClassNameReader.java
deleted file mode 100644
index 7bc24e5..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/jlink/ClassNameReader.java
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000,2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.jlink;
-
-import java.io.IOException;
-import java.io.DataInput;
-import java.io.InputStream;
-import java.io.DataInputStream;
-
-/**
- * Reads just enough of a class file to determine the class' full name.
- *
- * <p>Extremely minimal constant pool implementation, mainly to support extracting
- * strings from a class file.
- * @author <a href="mailto:beard@netscape.com">Patrick C. Beard</a>.
- */
-class ConstantPool {
-
-    static final 
-        byte UTF8 = 1, UNUSED = 2, INTEGER = 3, FLOAT = 4, LONG = 5, DOUBLE = 6,
-        CLASS = 7, STRING = 8, FIELDREF = 9, METHODREF = 10,
-        INTERFACEMETHODREF = 11, NAMEANDTYPE = 12;
-
-    byte[] types;
-
-    Object[] values;
-
-    ConstantPool(DataInput data) throws IOException {
-        super();
-
-        int count = data.readUnsignedShort();
-        types = new byte [ count ];
-        values = new Object [ count ];
-        // read in all constant pool entries.
-        for (int i = 1; i < count; i++) {
-            byte type = data.readByte();
-            types[i] = type;
-            switch (type) {
-            case UTF8 :
-                values[i] = data.readUTF();
-                break;
-                                
-            case UNUSED :
-                break;
-                                
-            case INTEGER :
-                values[i] = new Integer(data.readInt());
-                break;
-                                
-            case FLOAT :
-                values[i] = new Float(data.readFloat());
-                break;
-                                
-            case LONG :
-                values[i] = new Long(data.readLong());
-                ++i;
-                break;
-                                
-            case DOUBLE :
-                values[i] = new Double(data.readDouble());
-                ++i;
-                break;
-                                
-            case CLASS :
-            case STRING :
-                values[i] = new Integer(data.readUnsignedShort());
-                break;
-                                
-            case FIELDREF :
-            case METHODREF :
-            case INTERFACEMETHODREF :
-            case NAMEANDTYPE :
-                values[i] = new Integer(data.readInt());
-                break;
-            }
-        }
-    }
-}
-
-/**
- * Provides a quick and dirty way to determine the true name of a class
- * given just an InputStream. Reads in just enough to perform this
- * minimal task only.
- */
-public class ClassNameReader extends Object {
-
-    public static String getClassName(InputStream input) throws IOException {
-        DataInputStream data = new DataInputStream(input);
-        // verify this is a valid class file.
-        int cookie = data.readInt();
-        if (cookie != 0xCAFEBABE) {
-            return null;
-        }
-        int version = data.readInt();
-        // read the constant pool.
-        ConstantPool constants = new ConstantPool(data);
-        Object[] values = constants.values;
-        // read access flags and class index.
-        int accessFlags = data.readUnsignedShort();
-        int classIndex = data.readUnsignedShort();
-        Integer stringIndex = (Integer) values[classIndex];
-        String className = (String) values[stringIndex.intValue()];
-        return className;
-    }
-
-
-}
-
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/jlink/JlinkTask.java b/src/main/org/apache/tools/ant/taskdefs/optional/jlink/JlinkTask.java
deleted file mode 100644
index 09ad63a..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/jlink/JlinkTask.java
+++ /dev/null
@@ -1,212 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000,2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.jlink;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.taskdefs.MatchingTask;
-import org.apache.tools.ant.types.Path;
-import java.io.File;
-
-/**
- * This class defines objects that can link together various jar and
- * zip files. 
- *
- * <p>It is basically a wrapper for the jlink code written originally
- * by <a href="mailto:beard@netscape.com">Patrick Beard</a>.  The
- * classes org.apache.tools.ant.taskdefs.optional.jlink.Jlink and
- * org.apache.tools.ant.taskdefs.optional.jlink.ClassNameReader
- * support this class.</p>
- *
- * <p>For example:
- * <code>
- * <pre>
- * &lt;jlink compress=&quot;false&quot; outfile=&quot;out.jar&quot;/&gt;
- *   &lt;mergefiles&gt;
- *     &lt;pathelement path=&quot;${build.dir}/mergefoo.jar&quot;/&gt;
- *     &lt;pathelement path=&quot;${build.dir}/mergebar.jar&quot;/&gt;
- *   &lt;/mergefiles&gt;
- *   &lt;addfiles&gt;
- *     &lt;pathelement path=&quot;${build.dir}/mac.jar&quot;/&gt;
- *     &lt;pathelement path=&quot;${build.dir}/pc.zip&quot;/&gt;
- *   &lt;/addfiles&gt;
- * &lt;/jlink&gt;
- * </pre>
- * </code>
- *
- * @author <a href="mailto:matthew.k.heun@gaerospace.com">Matthew Kuperus Heun</a> */
-public class JlinkTask extends MatchingTask {
-
-    /**
-     * The output file for this run of jlink. Usually a jar or zip file.
-     */
-    public  void setOutfile(File outfile) {
-        this.outfile = outfile;
-    }
-
-    /**
-     * Establishes the object that contains the files to
-     * be merged into the output.
-     */
-    public  Path createMergefiles() {
-        if (this.mergefiles == null) {
-            this.mergefiles = new Path(getProject());
-        }
-        return this.mergefiles.createPath();
-    }
-
-    /**
-     * Sets the files to be merged into the output.
-     */
-    public  void setMergefiles(Path mergefiles) {
-        if (this.mergefiles == null) {
-            this.mergefiles = mergefiles;
-        } else {
-            this.mergefiles.append(mergefiles);
-        }
-    }
-
-    /**
-     * Establishes the object that contains the files to
-     * be added to the output.
-     */
-    public  Path createAddfiles() {
-        if (this.addfiles == null) {
-            this.addfiles = new Path(getProject());
-        }
-        return this.addfiles.createPath();
-    }
-
-    /**
-     * Sets the files to be added into the output.
-     */
-    public  void setAddfiles(Path addfiles) {
-        if (this.addfiles == null) {
-            this.addfiles = addfiles;
-        } else {
-            this.addfiles.append(addfiles);
-        }
-    }
-
-    /**
-     * Defines whether or not the output should be compacted.
-     */
-    public  void setCompress(boolean compress) {
-        this.compress = compress;
-    }
-
-    /**
-     * Does the adding and merging.
-     */
-    public  void execute() throws BuildException {
-        //Be sure everything has been set.
-        if (outfile == null) {
-            throw new BuildException("outfile attribute is required! " 
-                + "Please set.");
-        }
-        if (!haveAddFiles() && !haveMergeFiles()) {
-            throw new BuildException("addfiles or mergefiles required! " 
-                + "Please set.");
-        }
-        log("linking:     " + outfile.getPath());
-        log("compression: " + compress, Project.MSG_VERBOSE);
-        jlink linker = new jlink();
-        linker.setOutfile(outfile.getPath());
-        linker.setCompression(compress);
-        if (haveMergeFiles()) {
-            log("merge files: " + mergefiles.toString(), Project.MSG_VERBOSE);
-            linker.addMergeFiles(mergefiles.list());
-        }
-        if (haveAddFiles()) {
-            log("add files: " + addfiles.toString(), Project.MSG_VERBOSE);
-            linker.addAddFiles(addfiles.list());
-        }
-        try  {
-            linker.link();
-        } catch (Exception ex) {
-            throw new BuildException(ex, location);
-        }
-    }
-
-    private boolean haveAddFiles(){
-        return haveEntries(addfiles);
-    }
-
-    private boolean haveMergeFiles(){
-        return haveEntries(mergefiles);
-    }
-
-    private boolean haveEntries(Path p){
-        if (p == null){
-            return false;
-        }
-        if (p.size() > 0){
-            return true;
-        }
-        return false;
-    }
-
-    private  File outfile = null;
-
-    private  Path mergefiles = null;
-
-    private  Path addfiles = null;
-
-    private  boolean compress = false;
-
-    private  String ps = System.getProperty("path.separator");
-
-}
-
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/jlink/jlink.java b/src/main/org/apache/tools/ant/taskdefs/optional/jlink/jlink.java
deleted file mode 100644
index 99a534b..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/jlink/jlink.java
+++ /dev/null
@@ -1,455 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000,2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-/**
- * jlink.java links together multiple .jar files Original code by Patrick
- * Beard. Modifications to work with ANT by Matthew Kuperus Heun.
- *
- * @author <a href="mailto:beard@netscape.com>Patrick C. Beard</a> .
- * @author <a href="mailto:matthew.k.heun@gaerospace.com>Matthew Kuperus Heun
- *      </a>
- */
-package org.apache.tools.ant.taskdefs.optional.jlink;
-
-import java.io.FileOutputStream;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.FileInputStream;
-import java.io.BufferedInputStream;
-import java.util.Enumeration;
-import java.util.Vector;
-import java.util.zip.ZipOutputStream;
-import java.util.zip.Deflater;
-import java.util.zip.ZipFile;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipException;
-import java.util.zip.CRC32;
-
-public class jlink extends Object {
-
-    /** The file that will be created by this instance of jlink.  */
-    public void setOutfile(String outfile) {
-        if (outfile == null) {
-            return;
-        }
-        this.outfile = outfile;
-    }
-
-
-    /** Adds a file to be merged into the output.  */
-    public void addMergeFile(String mergefile) {
-        if (mergefile == null) {
-            return;
-        }
-        mergefiles.addElement(mergefile);
-    }
-
-
-    /** Adds a file to be added into the output.  */
-    public void addAddFile(String addfile) {
-        if (addfile == null) {
-            return;
-        }
-        addfiles.addElement(addfile);
-    }
-
-
-    /** Adds several files to be merged into the output.  */
-    public void addMergeFiles(String[] mergefiles) {
-        if (mergefiles == null) {
-            return;
-        }
-        for (int i = 0; i < mergefiles.length; i++) {
-            addMergeFile(mergefiles[i]);
-        }
-    }
-
-
-    /** Adds several file to be added into the output.  */
-    public void addAddFiles(String[] addfiles) {
-        if (addfiles == null) {
-            return;
-        }
-        for (int i = 0; i < addfiles.length; i++) {
-            addAddFile(addfiles[i]);
-        }
-    }
-
-
-    /** Determines whether output will be compressed.  */
-    public void setCompression(boolean compress) {
-        this.compression = compress;
-    }
-
-
-    /**
-     * Performs the linking of files. Addfiles are added to the output as-is.
-     * For example, a jar file is added to the output as a jar file. However,
-     * mergefiles are first examined for their type. If it is a jar or zip
-     * file, the contents will be extracted from the mergefile and entered
-     * into the output. If a zip or jar file is encountered in a subdirectory
-     * it will be added, not merged. If a directory is encountered, it becomes
-     * the root entry of all the files below it. Thus, you can provide
-     * multiple, disjoint directories, as addfiles: they will all be added in
-     * a rational manner to outfile.
-     */
-    public void link() throws Exception {
-        ZipOutputStream output = new ZipOutputStream(new FileOutputStream(outfile));
-
-        if (compression) {
-            output.setMethod(ZipOutputStream.DEFLATED);
-            output.setLevel(Deflater.DEFAULT_COMPRESSION);
-        } else {
-            output.setMethod(ZipOutputStream.STORED);
-        }
-
-        Enumeration merges = mergefiles.elements();
-
-        while (merges.hasMoreElements()) {
-            String path = (String) merges.nextElement();
-            File f = new File(path);
-
-            if (f.getName().endsWith(".jar") || f.getName().endsWith(".zip")) {
-                //Do the merge
-                mergeZipJarContents(output, f);
-            } else {
-                //Add this file to the addfiles Vector and add it
-                //later at the top level of the output file.
-                addAddFile(path);
-            }
-        }
-
-        Enumeration adds = addfiles.elements();
-
-        while (adds.hasMoreElements()) {
-            String name = (String) adds.nextElement();
-            File f = new File(name);
-
-            if (f.isDirectory()) {
-                //System.out.println("in jlink: adding directory contents of " + f.getPath());
-                addDirContents(output, f, f.getName() + '/', compression);
-            } else {
-                addFile(output, f, "", compression);
-            }
-        }
-        if (output != null) {
-            try {
-                output.close();
-            } catch (IOException ioe) {
-            }
-        }
-    }
-
-
-    public static void main(String[] args) {
-        // jlink output input1 ... inputN
-        if (args.length < 2) {
-            System.out.println("usage: jlink output input1 ... inputN");
-            System.exit(1);
-        }
-        jlink linker = new jlink();
-
-        linker.setOutfile(args[0]);
-        //To maintain compatibility with the command-line version, we will only add files to be merged.
-        for (int i = 1; i < args.length; i++) {
-            linker.addMergeFile(args[i]);
-        }
-        try {
-            linker.link();
-        } catch (Exception ex) {
-            System.err.print(ex.getMessage());
-        }
-    }
-
-
-    /*
-     * Actually performs the merging of f into the output.
-     * f should be a zip or jar file.
-     */
-    private void mergeZipJarContents(ZipOutputStream output, File f) throws IOException {
-        //Check to see that the file with name "name" exists.
-        if (!f.exists()) {
-            return;
-        }
-        ZipFile zipf = new ZipFile(f);
-        Enumeration entries = zipf.entries();
-
-        while (entries.hasMoreElements()) {
-            ZipEntry inputEntry = (ZipEntry) entries.nextElement();
-            //Ignore manifest entries.  They're bound to cause conflicts between
-            //files that are being merged.  User should supply their own
-            //manifest file when doing the merge.
-            String inputEntryName = inputEntry.getName();
-            int index = inputEntryName.indexOf("META-INF");
-
-            if (index < 0) {
-                //META-INF not found in the name of the entry. Go ahead and process it.
-                try {
-                    output.putNextEntry(processEntry(zipf, inputEntry));
-                } catch (ZipException ex) {
-                    //If we get here, it could be because we are trying to put a
-                    //directory entry that already exists.
-                    //For example, we're trying to write "com", but a previous
-                    //entry from another mergefile was called "com".
-                    //In that case, just ignore the error and go on to the
-                    //next entry.
-                    String mess = ex.getMessage();
-
-                    if (mess.indexOf("duplicate") >= 0) {
-                        //It was the duplicate entry.
-                        continue;
-                    } else {
-                        //I hate to admit it, but we don't know what happened here.  Throw the Exception.
-                        throw ex;
-                    }
-                }
-
-                InputStream in = zipf.getInputStream(inputEntry);
-                int len = buffer.length;
-                int count = -1;
-
-                while ((count = in.read(buffer, 0, len)) > 0) {
-                    output.write(buffer, 0, count);
-                }
-                in.close();
-                output.closeEntry();
-            }
-        }
-        zipf.close();
-    }
-
-
-    /*
-     * Adds contents of a directory to the output.
-     */
-    private void addDirContents(ZipOutputStream output, File dir, String prefix, boolean compress) throws IOException {
-        String[] contents = dir.list();
-
-        for (int i = 0; i < contents.length; ++i) {
-            String name = contents[i];
-            File file = new File(dir, name);
-
-            if (file.isDirectory()) {
-                addDirContents(output, file, prefix + name + '/', compress);
-            } else {
-                addFile(output, file, prefix, compress);
-            }
-        }
-    }
-
-
-    /*
-     * Gets the name of an entry in the file.  This is the real name
-     * which for a class is the name of the package with the class
-     * name appended.
-     */
-    private String getEntryName(File file, String prefix) {
-        String name = file.getName();
-
-        if (!name.endsWith(".class")) {
-            // see if the file is in fact a .class file, and determine its actual name.
-            try {
-                InputStream input = new FileInputStream(file);
-                String className = ClassNameReader.getClassName(input);
-
-                input.close();
-                if (className != null) {
-                    return className.replace('.', '/') + ".class";
-                }
-            } catch (IOException ioe) {
-            }
-        }
-        System.out.println("From " + file.getPath() + " and prefix " + prefix + ", creating entry " + prefix + name);
-        return (prefix + name);
-    }
-
-
-    /*
-     * Adds a file to the output stream.
-     */
-    private void addFile(ZipOutputStream output, File file, String prefix, boolean compress) throws IOException {
-        //Make sure file exists
-        long checksum = 0;
-
-        if (!file.exists()) {
-            return;
-        }
-        ZipEntry entry = new ZipEntry(getEntryName(file, prefix));
-
-        entry.setTime(file.lastModified());
-        entry.setSize(file.length());
-        if (!compress) {
-            entry.setCrc(calcChecksum(file));
-        }
-        FileInputStream input = new FileInputStream(file);
-
-        addToOutputStream(output, input, entry);
-    }
-
-
-    /*
-     * A convenience method that several other methods might call.
-     */
-    private void addToOutputStream(ZipOutputStream output, InputStream input, ZipEntry ze) throws IOException {
-        try {
-            output.putNextEntry(ze);
-        } catch (ZipException zipEx) {
-            //This entry already exists. So, go with the first one.
-            input.close();
-            return;
-        }
-
-        int numBytes = -1;
-
-        while ((numBytes = input.read(buffer)) > 0) {
-            output.write(buffer, 0, numBytes);
-        }
-        output.closeEntry();
-        input.close();
-    }
-
-
-    /*
-     * A method that does the work on a given entry in a mergefile.
-     * The big deal is to set the right parameters in the ZipEntry
-     * on the output stream.
-     */
-    private ZipEntry processEntry(ZipFile zip, ZipEntry inputEntry) throws IOException {
-        /*
-          First, some notes.
-          On MRJ 2.2.2, getting the size, compressed size, and CRC32 from the
-          ZipInputStream does not work for compressed (deflated) files.  Those calls return -1.
-          For uncompressed (stored) files, those calls do work.
-          However, using ZipFile.getEntries() works for both compressed and
-          uncompressed files.
-
-          Now, from some simple testing I did, it seems that the value of CRC-32 is
-          independent of the compression setting. So, it should be easy to pass this
-          information on to the output entry.
-        */
-        String name = inputEntry.getName();
-
-        if (!(inputEntry.isDirectory() || name.endsWith(".class"))) {
-            try {
-                InputStream input = zip.getInputStream(zip.getEntry(name));
-                String className = ClassNameReader.getClassName(input);
-
-                input.close();
-                if (className != null) {
-                    name = className.replace('.', '/') + ".class";
-                }
-            } catch (IOException ioe) {
-            }
-        }
-        ZipEntry outputEntry = new ZipEntry(name);
-
-        outputEntry.setTime(inputEntry.getTime());
-        outputEntry.setExtra(inputEntry.getExtra());
-        outputEntry.setComment(inputEntry.getComment());
-        outputEntry.setTime(inputEntry.getTime());
-        if (compression) {
-            outputEntry.setMethod(ZipEntry.DEFLATED);
-            //Note, don't need to specify size or crc for compressed files.
-        } else {
-            outputEntry.setMethod(ZipEntry.STORED);
-            outputEntry.setCrc(inputEntry.getCrc());
-            outputEntry.setSize(inputEntry.getSize());
-        }
-        return outputEntry;
-    }
-
-
-    /*
-     * Necessary in the case where you add a entry that
-     * is not compressed.
-     */
-    private long calcChecksum(File f) throws IOException {
-        BufferedInputStream in = new BufferedInputStream(new FileInputStream(f));
-
-        return calcChecksum(in, f.length());
-    }
-
-
-    /*
-     * Necessary in the case where you add a entry that
-     * is not compressed.
-     */
-    private long calcChecksum(InputStream in, long size) throws IOException {
-        CRC32 crc = new CRC32();
-        int len = buffer.length;
-        int count = -1;
-        int haveRead = 0;
-
-        while ((count = in.read(buffer, 0, len)) > 0) {
-            haveRead += count;
-            crc.update(buffer, 0, count);
-        }
-        in.close();
-        return crc.getValue();
-    }
-
-
-    private String outfile = null;
-
-    private Vector mergefiles = new Vector(10);
-
-    private Vector addfiles = new Vector(10);
-
-    private boolean compression = false;
-
-    byte[] buffer = new byte[8192];
-
-}
-
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/jsp/JspC.java b/src/main/org/apache/tools/ant/taskdefs/optional/jsp/JspC.java
deleted file mode 100644
index 78668ed..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/jsp/JspC.java
+++ /dev/null
@@ -1,608 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.jsp;
-
-import java.io.File;
-import java.util.Date;
-
-import java.util.Vector;
-import java.util.Enumeration;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.DirectoryScanner;
-import org.apache.tools.ant.Project;
-
-import org.apache.tools.ant.taskdefs.MatchingTask;
-import org.apache.tools.ant.taskdefs.optional.jsp.compilers.JspCompilerAdapter;
-import org.apache.tools.ant.taskdefs.optional.jsp.compilers.JspCompilerAdapterFactory;
-
-import org.apache.tools.ant.types.Path;
-import org.apache.tools.ant.types.Reference;
-
-/** Ant task to run the jsp compiler.
- * <p> This task takes the given jsp files and compiles them into java
- * files. It is then up to the user to compile the java files into classes.
- *
- * <p> The task requires the srcdir and destdir attributes to be
- * set. This Task is a MatchingTask, so the files to be compiled can be
- * specified using includes/excludes attributes or nested include/exclude
- * elements. Optional attributes are verbose (set the verbosity level passed
- * to jasper), package (name of the destination package for generated java
- * classes and classpath (the classpath to use when running the jsp
- * compiler).
- * <p> This task supports the nested elements classpath (A Path) and
- * classpathref (A Reference) which can be used in preference to the
- * attribute classpath, if the jsp compiler is not already in the ant
- * classpath.
- *
- * <p><h4>Notes</h4>
- * <p> At present, this task only supports the jasper compiler. In future,
- other compilers will be supported by setting the jsp.compiler property.
- *
- * <p><h4>Usage</h4>
- * <pre>
- * &lt;jspc srcdir="${basedir}/src/war"
- *       destdir="${basedir}/gensrc"
- *       package="com.i3sp.jsp"
- *       verbose="9"&gt;
- *   &lt;include name="**\/*.jsp" /&gt;
- * &lt;/jspc&gt;
- * </pre>
- *
- * @author Steve Loughran
- * @author <a href="mailto:mattw@i3sp.com">Matthew Watson</a>
- * <p> Large Amount of cutting and pasting from the Javac task...
- * @author James Davidson <a href="mailto:duncan@x180.com">duncan@x180.com</a>
- * @author Robin Green <a href="mailto:greenrd@hotmail.com">greenrd@hotmail.com</a>
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- * @author <a href="mailto:jayglanville@home.com">J D Glanville</a>
- * @since 1.5
- */
-public class JspC extends MatchingTask {
-    /* ------------------------------------------------------------ */
-    private Path classpath;
-    private Path src;
-    private File destDir;
-    private String packageName ;
-    /** name of the compiler to use */
-    private String compilerName = "jasper";
-
-    /**
-     *  -ieplugin <clsid>Java Plugin classid for Internet Explorer
-     */
-    private String iepluginid ;
-    private boolean mapped ;
-    private int verbose = 0;
-    protected Vector compileList = new Vector();
-    Vector javaFiles = new Vector();
-
-    /**
-     *  flag to control action on execution trouble
-     */
-    protected boolean failOnError = true;
-        
-    /**
-     *  -uribase <dir>The uri directory compilations should be relative to
-     *  (Default is "/")
-     */
-
-    private File uribase;
-
-    /**
-     *  -uriroot <dir>The root directory that uri files should be resolved
-     *  against, 
-     */
-    private File uriroot;
-
-    /**
-     *  -webinc <file>Creates partial servlet mappings for the -webapp option
-     */
-    private File webinc;
-
-    /**
-     *  -webxml <file>Creates a complete web.xml when using the -webapp option.
-     */
-
-    private File webxml;
-
-    /**
-     *  web apps
-     */
-    protected WebAppParameter webApp;
-
-
-        
-    private static final String FAIL_MSG
-        = "Compile failed, messages should have been provided.";
-    /* ------------------------------------------------------------ */
-    /**
-     * Set the source dirs to find the source JSP files.
-     */
-    public void setSrcdir(Path srcDir) {
-        if (src == null) {
-            src = srcDir;
-        } else {
-            src.append(srcDir);
-        }
-    }
-    public Path getSrcDir(){
-        return src;
-    }
-    /* ------------------------------------------------------------ */
-    /**
-     * Set the destination directory into which the JSP source
-     * files should be compiled.
-     */
-    public void setDestdir(File destDir) {
-        this.destDir = destDir;
-    }
-    public File getDestdir(){
-        return destDir;
-    }
-    /* ------------------------------------------------------------ */
-    /**
-     * Set the name of the package the compiled jsp files should be in
-     */
-    public void setPackage(String pkg){
-        this.packageName = pkg;
-    }
-    public String getPackage(){
-        return packageName;
-    }
-    /* ------------------------------------------------------------ */
-    /**
-     * Set the verbose level of the compiler
-     */
-    public void setVerbose(int i){
-        verbose = i;
-    }
-    public int getVerbose(){
-        return verbose;
-    }
-    /* ------------------------------------------------------------ */
-    /**
-     * Throw a BuildException if compilation fails
-     */
-    public void setFailonerror(boolean fail) {
-        failOnError = fail;
-    }
-    /**
-     * Gets the failonerror flag.
-     */
-    public boolean getFailonerror() {
-        return failOnError;
-    }
-    /* ------------------------------------------------------------ */
-    public String getIeplugin() {
-        return iepluginid;
-    }
-    /** Set the ieplugin id */
-    public void setIeplugin(String iepluginid_) {
-        iepluginid = iepluginid_;
-    }
-    /* ------------------------------------------------------------ */
-    public boolean isMapped() {
-        return mapped;
-    }
-    /** set the mapped flag */
-    public void setMapped(boolean mapped_) {
-        mapped = mapped_;
-    }
-        
-    /**
-     * The -uribase option. The uri context of relative URI 
-     * references in the JSP pages. If it does not 
-     * exist then it is derived from the location of the file
-     * relative to the declared or derived value of -uriroot. 
-     *
-     * @param  uribase  The new Uribase value
-     */
-    public void setUribase(File uribase) {
-        this.uribase = uribase;
-    }
-
-    public File getUribase() {
-        return uriroot;
-    }
-
-    /**
-     *  The -uriroot option.
-     * <p>The root directory that uri files should be resolved
-     *  against, (Default is the directory jspc is invoked from)
-     *
-     * @param  uriroot  The new Uribase value
-     */
-    public void setUriroot(File uriroot) {
-        this.uriroot = uriroot;
-    }
-
-    public File getUriroot() {
-        return uriroot;
-    }
-        
-        
-    /* ------------------------------------------------------------ */
-    /** Set the classpath to be used for this compilation */
-    public void setClasspath(Path cp) {
-        if (classpath == null) {
-            classpath = cp;
-        } else {
-            classpath.append(cp);
-        }
-    }
-    /** Maybe creates a nested classpath element. */
-    public Path createClasspath() {
-        if (classpath == null) {
-            classpath = new Path(project);
-        }
-        return classpath.createPath();
-    }
-    /** Adds a reference to a CLASSPATH defined elsewhere */
-    public void setClasspathRef(Reference r) {
-        createClasspath().setRefid(r);
-    }
-    public Path getClasspath(){
-        return classpath;
-    }
-
-    /**
-     *  -webxml <file>Creates a complete web.xml when using the -webapp option.
-     *
-     * @param  webxml  The new Webxml value
-     */
-    public void setWebxml(File webxml) {
-        this.webxml = webxml;
-    }
-
-    public File getWebxml() {
-        return this.webxml;
-    }
- 
-    /**
-     *  name output file for the fraction of web.xml that lists
-     *  servlets
-     * @param  webinc  The new Webinc value
-     */
-    public void setWebinc(File webinc) {
-        this.webinc = webinc;
-    }
-    
-    public File getWebinc() {
-        return this.webinc;
-    }
-    
-    /**
-     * Web apps parameter. Only one is allowed.
-     *
-     * @param  fs  add a web app fileset
-     */
-    public void addWebApp(WebAppParameter webappParam) 
-        throws BuildException {
-        //demand create vector of filesets
-        if (webApp == null) {
-            webApp = webappParam;
-        } else {
-            throw new BuildException("Only one webapp can be specified");
-        }
-    }
-
-    public WebAppParameter getWebApp() {
-        return webApp;
-    }
-
-    /**
-     * Sets the compiler to use. Optional: default=jasper
-     */
-    public void setCompiler(String compiler) {
-        this.compilerName = compiler;
-    }
-
-    /**
-    * get the list of files to compile
-    */
-    public Vector getCompileList(){
-        return compileList;
-    }
-    
-    /**
-     * execute by building up a list of files that
-     * have changed and hand them off to a jsp compiler
-     */
-    public void execute()
-        throws BuildException {
-        // first off, make sure that we've got a srcdir
-        if (src == null) {
-            throw new BuildException("srcdir attribute must be set!",
-                                     location);
-        }
-        String [] list = src.list();
-        if (list.length == 0) {
-            throw new BuildException("srcdir attribute must be set!",
-                                     location);
-        }
-
-        if (destDir != null && !destDir.isDirectory()) {
-            throw new
-                BuildException("destination directory \"" + destDir +
-                               "\" does not exist or is not a directory",
-                               location);
-        }
-
-        File dest = getActualDestDir();
-
-        //bind to a compiler
-        JspCompilerAdapter compiler =
-            JspCompilerAdapterFactory.getCompiler(compilerName, this);
-
-        // if the compiler does its own dependency stuff, we just call it right now
-        if (compiler.implementsOwnDependencyChecking()) {
-            doCompilation(compiler);
-            return;
-        }
-
-        //the remainder of this method is only for compilers that need their dependency work done
-        JspMangler mangler = compiler.createMangler();
-
-        // scan source directories and dest directory to build up both copy
-        // lists and compile lists
-        resetFileLists();
-        int filecount = 0;
-        for (int i = 0; i < list.length; i++) {
-            File srcDir = (File) project.resolveFile(list[i]);
-            if (!srcDir.exists()) {
-                throw new BuildException("srcdir \"" + srcDir.getPath() +
-                                         "\" does not exist!", location);
-            }
-            DirectoryScanner ds = this.getDirectoryScanner(srcDir);
-            String[] files = ds.getIncludedFiles();
-            filecount = files.length;
-            scanDir(srcDir, dest, mangler, files);
-        }
-
-        // compile the source files
-
-        log("compiling " + compileList.size() + " files", Project.MSG_VERBOSE);
-
-        if (compileList.size() > 0) {
-
-            log("Compiling " + compileList.size() +
-                " source file"
-                + (compileList.size() == 1 ? "" : "s")
-                + dest);
-            doCompilation(compiler);
-
-        } else {
-            if (filecount == 0) {
-                log("there were no files to compile", Project.MSG_INFO);
-            } else {
-                log("all files are up to date", Project.MSG_VERBOSE);
-            }
-        }
-    }
-
-    /**
-     * calculate where the files will end up:
-     * this is destDir or it id destDir + the package name
-     */
-    private File getActualDestDir() {
-        File dest = null;
-        if (packageName == null) {
-            dest = destDir;
-        } else {
-            String path = destDir.getPath() + File.separatorChar +
-                packageName.replace('.', File.separatorChar);
-            dest = new File(path);
-        }
-        return dest;
-    }
-
-    /**
-     * do the compile
-     */
-    private void doCompilation(JspCompilerAdapter compiler)
-            throws BuildException {
-        // now we need to populate the compiler adapter
-        compiler.setJspc(this);
-
-        // finally, lets execute the compiler!!
-        if (!compiler.execute()) {
-            if (failOnError) {
-                throw new BuildException(FAIL_MSG, location);
-            } else {
-                log(FAIL_MSG, Project.MSG_ERR);
-            }
-        }
-    }
-
-    /* ------------------------------------------------------------ */
-    /**
-     * Clear the list of files to be compiled and copied..
-     */
-    protected void resetFileLists() {
-        compileList.removeAllElements();
-    }
-
-    /* ------------------------------------------------------------ */
-    /**
-     * Scans the directory looking for source files to be compiled.
-     * The results are returned in the class variable compileList
-     */
-    protected void scanDir(File srcDir, File dest, JspMangler mangler, String files[]) {
-
-        long now = (new Date()).getTime();
-
-        for (int i = 0; i < files.length; i++) {
-            String filename = files[i];
-            File srcFile = new File(srcDir, filename);
-            File javaFile = mapToJavaFile(mangler, srcFile, srcDir, dest);
-
-            if (srcFile.lastModified() > now) {
-                log("Warning: file modified in the future: " + filename,
-                        Project.MSG_WARN);
-            }
-            boolean shouldCompile = false;
-            shouldCompile = isCompileNeeded(srcFile, javaFile);
-            if (shouldCompile) {
-               compileList.addElement(srcFile.getAbsolutePath());
-               javaFiles.addElement(javaFile);
-            }
-        }
-    }
-
-    /**
-     * Test whether or not compilation is needed. A return value of 
-     * <code>true<code> means yes, <code>false</code> means
-     * our tests do not indicate this, but as the TLDs are
-     * not used for dependency checking this is not guaranteed.
-     * The current tests are
-     * <ol>
-     * <li>no dest file
-     * <li>dest file out of date w.r.t source
-     * <li>dest file zero bytes long
-     * </ol>
-     * @param srcFile JSP source file
-     * @param javaFile JSP dest file
-     * @return true if a compile is definately needed.
-     *
-     */
-    private boolean isCompileNeeded(File srcFile, File javaFile) {
-        boolean shouldCompile = false;
-        if (!javaFile.exists()) {
-            shouldCompile = true;
-            log("Compiling " + srcFile.getPath() 
-                + " because java file " + javaFile.getPath() 
-                + " does not exist", Project.MSG_VERBOSE);
-            } else {
-                if (srcFile.lastModified() > javaFile.lastModified()) {
-                    shouldCompile = true;
-                    log("Compiling " + srcFile.getPath() 
-                        + " because it is out of date with respect to " 
-                        + javaFile.getPath(),
-                        Project.MSG_VERBOSE);
-                } else {
-                    if (javaFile.length() == 0) {
-                        shouldCompile = true;
-                        log("Compiling " + srcFile.getPath() 
-                            + " because java file " + javaFile.getPath()
-                            + " is empty", Project.MSG_VERBOSE);
-                    }
-                }
-        }
-        return shouldCompile;
-    }
-
-
-    /**
-     * get a filename from our jsp file
-     * @todo support packages and subdirs
-     */
-    protected File mapToJavaFile(JspMangler mangler, File srcFile, File srcDir, File dest) {
-        if (!srcFile.getName().endsWith(".jsp")) {
-            return null;
-        }
-        String javaFileName = mangler.mapJspToJavaName(srcFile);
-//        String srcFileDir=srcFile.getParent();
-        String packageNameIn = srcFile.getAbsolutePath();
-        return new File(dest, javaFileName);
-    }
-
-    /**
-     * delete any java output files that are empty
-     * this is to get around a little defect in jasper: when it
-     * fails, it leaves incomplete files around.
-     */
-    public void deleteEmptyJavaFiles() {
-        if (javaFiles != null) {
-            Enumeration enum = javaFiles.elements();
-            while (enum.hasMoreElements()) {
-                File file = (File) enum.nextElement();
-                if (file.exists() && file.length() == 0) {
-                    log("deleting empty output file " + file);
-                    file.delete();
-                }
-            }
-        }
-    }
-
-    /**
-     * static inner class used as a parameter element
-     */
-    public static class WebAppParameter {
-        
-        /**
-         * the sole option
-         */
-        private File directory;
-
-        /**
-         * query current directory
-         */
-         
-        public File getDirectory() {
-            return directory;
-        }
-        
-    /**
-     * set directory; alternate syntax
-     */
-        public void setBaseDir(File directory) {
-            this.directory = directory;
-        }
-    //end inner class    
-    }
-
-
-//end class
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/jsp/JspMangler.java b/src/main/org/apache/tools/ant/taskdefs/optional/jsp/JspMangler.java
deleted file mode 100644
index 0c7712f..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/jsp/JspMangler.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.jsp;
-
-import java.io.File;
-
-/**
- * This is an interface to the Mangler service that jspc needs to map
- * JSP file names to java files.
- * Note the complete lack of correlation
- * with Jasper's mangler interface.
- */
-public interface JspMangler {
-
-
-    /**
-     * map from a jsp file to a java filename; does not do packages
-     *
-     * @param jspFile file
-     * @return java filename
-     */
-    String mapJspToJavaName(File jspFile);
-
-    /**
-     * taking in the substring representing the path relative to the source dir
-     * return a new string representing the destination path
-     */
-    String mapPath(String path);
-
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/jsp/JspNameMangler.java b/src/main/org/apache/tools/ant/taskdefs/optional/jsp/JspNameMangler.java
deleted file mode 100644
index d511cf7..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/jsp/JspNameMangler.java
+++ /dev/null
@@ -1,192 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.jsp;
-import java.io.File;
-
-/**
- * This is a class derived from the Jasper code 
- * (org.apache.jasper.compiler.CommandLineCompiler) to map from a JSP filename
- * to a valid Java classname.
- *
- * @author Steve Loughran
- * @author Danno Ferrin
- */
-public class JspNameMangler implements JspMangler {
-
-    /**
-     * this is the list of keywords which can not be used as classnames
-     */
-    public static String[] keywords = {
-            "assert",
-            "abstract", "boolean", "break", "byte",
-            "case", "catch", "char", "class",
-            "const", "continue", "default", "do",
-            "double", "else", "extends", "final",
-            "finally", "float", "for", "goto",
-            "if", "implements", "import",
-            "instanceof", "int", "interface",
-            "long", "native", "new", "package",
-            "private", "protected", "public",
-            "return", "short", "static", "super",
-            "switch", "synchronized", "this",
-            "throw", "throws", "transient",
-            "try", "void", "volatile", "while"
-            };
-
-
-    /**
-     * map from a jsp file to a java filename; does not do packages
-     *
-     * @param jspFile file
-     * @return java filename
-     */
-    public String mapJspToJavaName(File jspFile) {
-        return mapJspToBaseName(jspFile) + ".java";
-    }
-
-
-    /**
-     * map from a jsp file to a base name; does not deal with extensions
-     *
-     * @param jspFile jspFile file
-     * @return exensionless potentially remapped name
-     */
-    private String mapJspToBaseName(File jspFile) {
-        String className;
-        className = stripExtension(jspFile);
-
-        // since we don't mangle extensions like the servlet does,
-        // we need to check for keywords as class names
-        for (int i = 0; i < keywords.length; ++i) {
-            if (className.equals(keywords[i])) {
-                className += "%";
-                break;
-            }
-        }
-
-        // Fix for invalid characters. If you think of more add to the list.
-        StringBuffer modifiedClassName = new StringBuffer(className.length());
-        // first char is more restrictive than the rest
-        char firstChar = className.charAt(0);
-        if (Character.isJavaIdentifierStart(firstChar)) {
-            modifiedClassName.append(firstChar);
-        } else {
-            modifiedClassName.append(mangleChar(firstChar));
-        }
-        // this is the rest
-        for (int i = 1; i < className.length(); i++) {
-            char subChar = className.charAt(i);
-            if (Character.isJavaIdentifierPart(subChar)) {
-                modifiedClassName.append(subChar);
-            } else {
-                modifiedClassName.append(mangleChar(subChar));
-            }
-        }
-        return modifiedClassName.toString();
-    }
-
-
-    /**
-     * get short filename from file
-     *
-     * @param jspFile file in
-     * @return file without any jsp extension
-     */
-    private String stripExtension(File jspFile) {
-        String className;
-        String filename = jspFile.getName();
-        if (filename.endsWith(".jsp")) {
-            className = filename.substring(0, filename.length() - 4);
-        } else {
-            className = filename;
-        }
-        return className;
-    }
-
-
-    /**
-     * definition of the char escaping algorithm
-     *
-     * @param ch char to mangle
-     * @return mangled string; 5 digit hex value 
-     */
-    private static final String mangleChar(char ch) {
-
-        if (ch == File.separatorChar) {
-            ch = '/';
-        }
-        String s = Integer.toHexString(ch);
-        int nzeros = 5 - s.length();
-        char[] result = new char[6];
-        result[0] = '_';
-        for (int i = 1; i <= nzeros; ++i) {
-            result[i] = '0';
-        }
-        int resultIndex = 0;
-        for (int i = nzeros + 1; i < 6; ++i) {
-            result[i] = s.charAt(resultIndex++);
-        }
-        return new String(result);
-    }
-
-    /**
-     * taking in the substring representing the path relative to the source dir
-     * return a new string representing the destination path
-     * @todo
-     */
-    public String mapPath(String path) {
-        return null;
-    }
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/jsp/WLJspc.java b/src/main/org/apache/tools/ant/taskdefs/optional/jsp/WLJspc.java
deleted file mode 100644
index 6a44bfc..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/jsp/WLJspc.java
+++ /dev/null
@@ -1,347 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000,2002 The Apache Software Foundation.  All rights 
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.jsp;
-
-//apache/ant imports
-import org.apache.tools.ant.taskdefs.MatchingTask;
-import org.apache.tools.ant.DirectoryScanner;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.taskdefs.Java;
-import org.apache.tools.ant.types.Path;
-import org.apache.tools.ant.Project;
-
-
-//java imports
-import java.io.File;
-import java.util.Vector;
-import java.util.Date;
-import java.util.StringTokenizer;
-
-/**
- * Class to precompile JSP's using weblogic's jsp compiler (weblogic.jspc)
- * 
- * @author <a href="mailto:avik@aviksengupta.com">Avik Sengupta</a> http://www.webteksoftware.com
- * 
- * Tested only on Weblogic 4.5.1 - NT4.0 and Solaris 5.7
- * 
- * required attributes
- *      src : root of source tree for JSP, ie, the document root for your weblogic server
- *      dest : root of destination directory, what you have set as WorkingDir in the weblogic properties
- *      package : start package name under which your JSP's would be compiled
- * 
- * other attributes
- *     classpath
- * 
- * A classpath should be set which contains the weblogic classes as well as all application classes
- * referenced by the JSP. The system classpath is also appended when the jspc is called, so you may 
- * choose to put everything in the classpath while calling Ant. However, since presumably the JSP's will reference
- * classes being build by Ant, it would be better to explicitly add the classpath in the task
- * 
- * The task checks timestamps on the JSP's and the generated classes, and compiles
- * only those files that have changed. 
- * 
- * It follows the weblogic naming convention of putting classes in 
- *  <b> _dirName/_fileName.class for dirname/fileName.jsp   </b>
- * 
- * Limitation: It compiles the files thru the Classic compiler only. 
- * Limitation: Since it is my experience that weblogic jspc throws out of memory error on being given too
- *             many files at one go, it is called multiple times with one jsp file each. 
- * 
- * <pre>
- * example
- * &lt;target name="jspcompile" depends="compile"&gt;
- *   &lt;wljspc src="c:\\weblogic\\myserver\\public_html" dest="c:\\weblogic\\myserver\\serverclasses" package="myapp.jsp"&gt;
- *   &lt;classpath&gt;
- *          &lt;pathelement location="${weblogic.classpath}" /&gt;
- *           &lt;pathelement path="${compile.dest}" /&gt;
- *      &lt;/classpath&gt;
- * 
- *   &lt;/wljspc&gt;
- * &lt;/target&gt;
- * </pre>
- * 
- */
-
-public class WLJspc extends MatchingTask {
-    //TODO Test on other versions of weblogic
-    //TODO add more attributes to the task, to take care of all jspc options
-    //TODO Test on Unix
-    
-    private File destinationDirectory; //root of compiled files tree
-    private File sourceDirectory; // root of source files tree
-    private String destinationPackage; //package under which resultant classes will reside
-    private Path compileClasspath; //classpath used to compile the jsp files. 
-    //private String compilerPath; //fully qualified name for the compiler executable
-    
-    private String pathToPackage = "";
-    private Vector filesToDo = new Vector();
-    
-    public void execute() throws BuildException {
-        if (!destinationDirectory.isDirectory()) {
-            throw new BuildException("destination directory " + destinationDirectory.getPath() + 
-                                     " is not valid");
-        }
-                               
-        if (!sourceDirectory.isDirectory()) {
-            throw new BuildException("src directory " + sourceDirectory.getPath() + 
-                                     " is not valid");
-        }
-
-        if (destinationPackage == null) {
-            throw new BuildException("package attribute must be present.", location);
-        }
-        
-        
-        String systemClassPath = System.getProperty("java.class.path");
-        
-        pathToPackage 
-            = this.destinationPackage.replace('.', File.separatorChar);
-        // get all the files in the sourceDirectory
-        DirectoryScanner ds = super.getDirectoryScanner(sourceDirectory);
-
-        //use the systemclasspath as well, to include the ant jar
-        if (compileClasspath == null) {
-            compileClasspath = new Path(project);
-        }
-        
-        compileClasspath.append(Path.systemClasspath);
-        String[] files = ds.getIncludedFiles();
-        
-        //Weblogic.jspc calls System.exit() ... have to fork
-        // Therefore, takes loads of time 
-        // Can pass directories at a time (*.jsp) but easily runs out of memory on hefty dirs 
-        // (even on  a Sun)
-        Java helperTask = (Java) project.createTask("java");
-        helperTask.setFork(true);
-        helperTask.setClassname("weblogic.jspc");
-        helperTask.setTaskName(getTaskName());
-        String[] args = new String[12];
-        
-        File jspFile = null;
-        String parents = "";
-        String arg = "";
-        int j = 0;
-        //XXX  this array stuff is a remnant of prev trials.. gotta remove. 
-        args[j++] = "-d";
-        args[j++] = destinationDirectory.getAbsolutePath().trim(); 
-        args[j++] = "-docroot";
-        args[j++] = sourceDirectory.getAbsolutePath().trim();
-        args[j++] = "-keepgenerated";  //TODO: Parameterise ??
-        //Call compiler as class... dont want to fork again 
-        //Use classic compiler -- can be parameterised?
-        args[j++] =  "-compilerclass";
-        args[j++] = "sun.tools.javac.Main";
-        //Weblogic jspc does not seem to work unless u explicitly set this...
-        // Does not take the classpath from the env....
-        // Am i missing something about the Java task??
-        args[j++] = "-classpath";
-        args[j++] = compileClasspath.toString();
-            
-        this.scanDir(files);
-        log("Compiling " + filesToDo.size() + " JSP files");
-            
-        for (int i = 0; i < filesToDo.size(); i++) {
-            //XXX
-            // All this to get package according to weblogic standards
-            // Can be written better... this is too hacky! 
-            // Careful.. similar code in scanDir , but slightly different!!
-            jspFile = new File((String) filesToDo.elementAt(i));
-            args[j] = "-package";
-            parents = jspFile.getParent();
-            if ((parents != null)  && (!("").equals(parents))) {
-                parents =  this.replaceString(parents, File.separator, "_.");
-                args[j + 1] = destinationPackage + "." + "_" + parents;
-            } else {
-                args[j + 1] = destinationPackage;
-            }
-            
-            
-            args[j + 2] =  sourceDirectory + File.separator 
-                + (String) filesToDo.elementAt(i);
-            arg = "";
-            
-            for (int x = 0; x < 12; x++) {
-                arg += " " + args[x];
-            }
-            
-            System.out.println("arg = " + arg);
-            
-            helperTask.clearArgs();
-            helperTask.setArgs(arg);
-            helperTask.setClasspath(compileClasspath);
-            if (helperTask.executeJava() != 0) {                         
-                log(files[i] + " failed to compile", Project.MSG_WARN);
-            }
-        }
-    }
-
-    
-    
-    /**
-     * Set the classpath to be used for this compilation.
-     * 
-     */
-    public void setClasspath(Path classpath) {
-        if (compileClasspath == null) {
-            compileClasspath = classpath;
-        } else {
-            compileClasspath.append(classpath);
-        }
-    }
-
-    /**
-     * Maybe creates a nested classpath element.
-     */
-    public Path createClasspath() {
-        if (compileClasspath == null) {
-            compileClasspath = new Path(project);
-        }
-        return compileClasspath;
-    }
-
-    /**
-     * Set the directory containing the source jsp's
-     * 
-     *
-     * @param dirName the directory containg the source jsp's
-     */
-    public void setSrc(File dirName) {
-        
-        sourceDirectory = dirName;
-    }
-    
-     /**
-     * Set the directory containing the source jsp's
-     * 
-     *
-     * @param dirName the directory containg the source jsp's
-     */
-    public void setDest(File dirName) {
-        
-        destinationDirectory = dirName;
-    }
-    
-    /**
-     * Set the package under which the compiled classes go
-     * 
-     * @param packageName the package name for the clases
-     */
-    public void setPackage(String packageName) {
-        
-        destinationPackage = packageName; 
-    }
-    
-    
-    
-    protected void scanDir(String files[]) {
-
-        long now = (new Date()).getTime();
-        File jspFile = null;
-        String parents = null;
-        String pack = "";
-        for (int i = 0; i < files.length; i++) {
-            File srcFile = new File(this.sourceDirectory, files[i]);
-            //XXX
-            // All this to convert source to destination directory according to weblogic standards
-            // Can be written better... this is too hacky!
-            jspFile = new File(files[i]);
-            parents = jspFile.getParent();
-            int loc = 0;
-            
-            if ((parents != null)  && (!("").equals(parents))) {
-                parents =  this.replaceString(parents, File.separator, "_/");
-                pack = pathToPackage + File.separator + "_" + parents;
-            } else {
-                pack = pathToPackage;
-            }
-            
-            String filePath = pack + File.separator + "_";
-            int startingIndex 
-                = files[i].lastIndexOf(File.separator) != -1 ? files[i].lastIndexOf(File.separator) + 1 : 0;
-            int endingIndex = files[i].indexOf(".jsp");
-            if (endingIndex == -1) {
-                break;
-            }
-            
-            filePath += files[i].substring(startingIndex, endingIndex);
-            filePath += ".class";
-            File classFile = new File(this.destinationDirectory, filePath);
-
-            if (srcFile.lastModified() > now) {
-                log("Warning: file modified in the future: " +
-                    files[i], Project.MSG_WARN);
-            }
-            if (srcFile.lastModified() > classFile.lastModified()) {
-               //log("Files are" + srcFile.getAbsolutePath()+" " +classFile.getAbsolutePath());
-                filesToDo.addElement(files[i]);
-                log("Recompiling File " + files[i], Project.MSG_VERBOSE);
-            }
-        }
-    }
-    
-    
-    protected String replaceString(String inpString, String escapeChars,
-                                   String replaceChars) {
-        String localString = "";
-        int numTokens = 0;
-        StringTokenizer st = new StringTokenizer(inpString, escapeChars, true);
-        numTokens = st.countTokens();
-        for (int i = 0; i < numTokens; i++) {
-            String test = st.nextToken();
-            test = (test.equals(escapeChars) ? replaceChars : test);
-            localString += test;
-        }
-        return localString;
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/jsp/compilers/DefaultJspCompilerAdapter.java b/src/main/org/apache/tools/ant/taskdefs/optional/jsp/compilers/DefaultJspCompilerAdapter.java
deleted file mode 100644
index 2b11f75..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/jsp/compilers/DefaultJspCompilerAdapter.java
+++ /dev/null
@@ -1,175 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.jsp.compilers;
-
-import org.apache.tools.ant.Project;
-
-import org.apache.tools.ant.taskdefs.optional.jsp.JspC;
-import org.apache.tools.ant.types.Commandline;
-
-import java.util.Vector;
-import java.util.Enumeration;
-import java.io.File;
-
-/**
- * This is the default implementation for the JspCompilerAdapter interface.
- * This is currently very light on the ground since only one compiler type is
- * supported.
- *
- * @author Matthew Watson <a href="mailto:mattw@i3sp.com">mattw@i3sp.com</a>
- */
-public abstract class DefaultJspCompilerAdapter
-    implements JspCompilerAdapter {
-
-    /* ------------------------------------------------------------ */
-    private static String lSep = System.getProperty("line.separator");
-
-    /* ------------------------------------------------------------ */
-    /**
-     * Logs the compilation parameters, adds the files to compile and logs the 
-     * &quot;niceSourceList&quot;
-     */
-    protected void logAndAddFilesToCompile(JspC jspc,
-                                           Vector compileList,
-                                           Commandline cmd) {
-        jspc.log("Compilation " + cmd.describeArguments(), 
-                 Project.MSG_VERBOSE);
-
-        StringBuffer niceSourceList = new StringBuffer("File");
-        if (compileList.size() != 1) {
-            niceSourceList.append("s");
-        }
-        niceSourceList.append(" to be compiled:");
-
-        niceSourceList.append(lSep);
-
-        Enumeration enum = compileList.elements();
-        while (enum.hasMoreElements()) {
-            String arg = (String) enum.nextElement();
-            cmd.createArgument().setValue(arg);
-            niceSourceList.append("    " + arg + lSep);
-        }
-
-        jspc.log(niceSourceList.toString(), Project.MSG_VERBOSE);
-    }
-
-    /**
-     * our owner
-     */
-    protected JspC owner;
-
-    /**
-     * set the owner
-     */
-    public void setJspc(JspC owner) {
-        this.owner = owner;
-    }
-
-    /** get the owner
-     * @return the owner; should never be null
-     */
-    public JspC getJspc() {
-        return owner;
-    }
-
-    
-    /**
-     *  add an argument oneple to the argument list, if the value aint null
-     *
-     * @param  argument  The argument
-     */
-    protected void addArg(Commandline cmd, String argument) {
-        if (argument != null && argument.length() != 0) {
-           cmd.createArgument().setValue(argument);
-        }
-    }
-
-
-    /**
-     *  add an argument tuple to the argument list, if the value aint null
-     *
-     * @param  argument  The argument
-     * @param  value     the parameter
-     */
-    protected void addArg(Commandline cmd, String argument, String value) {
-        if (value != null) {
-            cmd.createArgument().setValue(argument);
-            cmd.createArgument().setValue(value);
-        }
-    }
-
-    /**
-     *  add an argument tuple to the arg list, if the file parameter aint null
-     *
-     * @param  argument  The argument
-     * @param  file     the parameter
-     */
-    protected void addArg(Commandline cmd, String argument, File file) {
-        if (file != null) {
-            cmd.createArgument().setValue(argument);
-            cmd.createArgument().setFile(file);
-        }
-    }
-
-    /**
-     * ask if compiler can sort out its own dependencies
-     * @return true if the compiler wants to do its own
-     * depends
-     */
-    public boolean implementsOwnDependencyChecking() {
-        return false;
-    }
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/jsp/compilers/JasperC.java b/src/main/org/apache/tools/ant/taskdefs/optional/jsp/compilers/JasperC.java
deleted file mode 100644
index 78a233f..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/jsp/compilers/JasperC.java
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.jsp.compilers;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.types.Commandline;
-import org.apache.tools.ant.types.Path;
-import org.apache.tools.ant.taskdefs.optional.jsp.JspC;
-import org.apache.tools.ant.taskdefs.optional.jsp.JspMangler;
-import org.apache.tools.ant.taskdefs.optional.jsp.JspNameMangler;
-import org.apache.tools.ant.taskdefs.Java;
-
-import java.io.File;
-
-/**
- * The implementation of the jasper compiler.
- * This is a cut-and-paste of the original Jspc task.
- *
- * @author Matthew Watson <a href="mailto:mattw@i3sp.com">mattw@i3sp.com</a>
- * @author steve loughran
- * @since ant1.5
- */
-public class JasperC extends DefaultJspCompilerAdapter {
-    /**
-     * our execute method
-     */
-    public boolean execute()
-        throws BuildException {
-        getJspc().log("Using jasper compiler", Project.MSG_VERBOSE);
-        Commandline cmd = setupJasperCommand();
-
-        try {
-            // Create an instance of the compiler, redirecting output to
-            // the project log
-            // REVISIT. ugly. 
-            Java java = (Java) (getJspc().getProject()).createTask("java");
-            if (getJspc().getClasspath() != null) {
-                java.setClasspath(getJspc().getClasspath());
-            } else {
-                java.setClasspath(Path.systemClasspath);
-            }
-            java.setClassname("org.apache.jasper.JspC");
-            String args[] = cmd.getArguments();
-            for (int i = 0; i < args.length; i++) {
-                java.createArg().setValue(args[i]);
-            }
-            java.setFailonerror(getJspc().getFailonerror());
-            //we are forking here to be sure that if JspC calls
-            //System.exit() it doesn't halt the build
-            java.setFork(true);
-            java.execute();
-            return true;
-        } catch (Exception ex) {
-            //@todo implement failonerror support here?
-            if (ex instanceof BuildException) {
-                throw (BuildException) ex;
-            } else {
-                throw new BuildException("Error running jsp compiler: ",
-                                         ex, getJspc().getLocation());
-            }
-        } finally {
-            getJspc().deleteEmptyJavaFiles();
-        }
-    }
-    
-
-    
-    /**
-     * build up a command line
-     * @return a command line for jasper
-     */
-    private Commandline setupJasperCommand() {
-        Commandline cmd = new Commandline();
-        JspC jspc = getJspc();
-        addArg(cmd, "-d", jspc.getDestdir());
-        addArg(cmd, "-p", jspc.getPackage());
-        addArg(cmd, "-v" + jspc.getVerbose());
-        addArg(cmd, "-uriroot", jspc.getUriroot());
-        addArg(cmd, "-uribase", jspc.getUribase());
-        addArg(cmd, "-ieplugin", jspc.getIeplugin());
-        addArg(cmd, "-die9");
-
-        if (jspc.isMapped()){
-            addArg(cmd, "-mapped");
-        }       
-        if (jspc.getWebApp() != null) {
-            File dir = jspc.getWebApp().getDirectory();
-            addArg(cmd, "-webapp", dir);
-        }
-        logAndAddFilesToCompile(getJspc(), getJspc().getCompileList(), cmd);
-        return cmd;
-    }
-
-    /**
-     * @return an instance of the mangler this compiler uses
-     */
-
-    public JspMangler createMangler() {
-        return new JspNameMangler();
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/jsp/compilers/JspCompilerAdapter.java b/src/main/org/apache/tools/ant/taskdefs/optional/jsp/compilers/JspCompilerAdapter.java
deleted file mode 100644
index c0ba387..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/jsp/compilers/JspCompilerAdapter.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.jsp.compilers;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.taskdefs.optional.jsp.JspC;
-import org.apache.tools.ant.taskdefs.optional.jsp.JspMangler;
-
-/**
- * The interface that all jsp compiler adapters must adher to.  
- *
- * <p>A compiler adapter is an adapter that interprets the jspc's
- * parameters in preperation to be passed off to the compier this
- * adapter represents.  As all the necessary values are stored in the
- * Jspc task itself, the only thing all adapters need is the jsp
- * task, the execute command and a parameterless constructor (for
- * reflection).</p>
- *
- * @author Jay Dickon Glanville <a href="mailto:jayglanville@home.com">jayglanville@home.com</a>
- * @author Matthew Watson <a href="mailto:mattw@i3sp.com">mattw@i3sp.com</a>
- */
-
-public interface JspCompilerAdapter {
-
-    /**
-     * Sets the compiler attributes, which are stored in the Jspc task.
-     */
-    void setJspc(JspC attributes);
-
-    /**
-     * Executes the task.
-     *
-     * @return has the compilation been successful
-     */
-    boolean execute() throws BuildException;
-
-    /**
-     * @return an instance of the mangler this compiler uses
-     */
-
-    JspMangler createMangler();
-
-    /**
-     * ask if compiler can sort out its own dependencies
-     * @return true if the compiler wants to do its own
-     * depends
-     */
-    boolean implementsOwnDependencyChecking();
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/jsp/compilers/JspCompilerAdapterFactory.java b/src/main/org/apache/tools/ant/taskdefs/optional/jsp/compilers/JspCompilerAdapterFactory.java
deleted file mode 100644
index 4717ed0..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/jsp/compilers/JspCompilerAdapterFactory.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.jsp.compilers;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Task;
-
-
-/**
- * Creates the necessary compiler adapter, given basic criteria.
- *
- * @author <a href="mailto:jayglanville@home.com">J D Glanville</a>
- * @author Matthew Watson <a href="mailto:mattw@i3sp.com">mattw@i3sp.com</a>
- */
-public class JspCompilerAdapterFactory {
-
-    /** This is a singleton -- can't create instances!! */
-    private JspCompilerAdapterFactory() {
-    }
-
-    /**
-     * Based on the parameter passed in, this method creates the necessary
-     * factory desired.
-     *
-     * The current mapping for compiler names are as follows:
-     * <ul><li>jasper = jasper compiler (the default)
-     * <li><i>a fully quallified classname</i> = the name of a jsp compiler
-     * adapter
-     * </ul>
-     *
-     * @param compilerType either the name of the desired compiler, or the
-     * full classname of the compiler's adapter.
-     * @param task a task to log through.
-     * @throws BuildException if the compiler type could not be resolved into
-     * a compiler adapter.
-     */
-    public static JspCompilerAdapter getCompiler(String compilerType, Task task)
-        throws BuildException {
-        /* If I've done things right, this should be the extent of the
-         * conditional statements required.
-         */
-        if (compilerType.equalsIgnoreCase("jasper")) {
-            return new JasperC();
-        }
-        return resolveClassName(compilerType);
-    }
-
-    /**
-     * Tries to resolve the given classname into a compiler adapter.
-     * Throws a fit if it can't.
-     *
-     * @param className The fully qualified classname to be created.
-     * @throws BuildException This is the fit that is thrown if className
-     * isn't an instance of JspCompilerAdapter.
-     */
-    private static JspCompilerAdapter resolveClassName(String className)
-        throws BuildException {
-        try {
-            Class c = Class.forName(className);
-            Object o = c.newInstance();
-            return (JspCompilerAdapter) o;
-        } catch (ClassNotFoundException cnfe) {
-            throw new BuildException(className + " can\'t be found.", cnfe);
-        } catch (ClassCastException cce) {
-            throw new BuildException(className + " isn\'t the classname of "
-                                     + "a compiler adapter.", cce);
-        } catch (Throwable t) {
-            // for all other possibilities
-            throw new BuildException(className + " caused an interesting "
-                                     + "exception.", t);
-        }
-    }
-
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/junit/AggregateTransformer.java b/src/main/org/apache/tools/ant/taskdefs/optional/junit/AggregateTransformer.java
deleted file mode 100644
index 2d85bfc..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/junit/AggregateTransformer.java
+++ /dev/null
@@ -1,236 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.junit;
-
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.types.EnumeratedAttribute;
-
-import java.io.File;
-import java.io.InputStream;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.FileNotFoundException;
-
-
-
-import java.net.URL;
-
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.DocumentBuilder;
-
-import org.w3c.dom.Document;
-
-/**
- * Transform a JUnit xml report.
- * The default transformation generates an html report in either framed or non-framed
- * style. The non-framed style is convenient to have a concise report via mail, the
- * framed report is much more convenient if you want to browse into different
- * packages or testcases since it is a Javadoc like report.
- *
- * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
- */
-public class AggregateTransformer {
-
-    public static final String FRAMES = "frames";
-
-    public static final String NOFRAMES = "noframes";
-
-    public static class Format extends EnumeratedAttribute {
-        public String[] getValues(){
-            return new String[]{FRAMES, NOFRAMES};
-        }
-    }
-
-    /** Task */
-    protected Task task;
-
-    /** the xml document to process */
-    protected Document document;
-
-    /** the style directory. XSLs should be read from here if necessary */
-    protected File styleDir;
-
-    /** the destination directory, this is the root from where html should be generated */
-    protected File toDir;
-
-    /** the format to use for the report. Must be <tt>FRAMES</tt> or <tt>NOFRAMES</tt> */
-    protected String format;
-
-    /** XML Parser factory */
-    private static DocumentBuilderFactory privateDBFactory;
-    
-    /** XML Parser factory accessible to subclasses */
-    protected static DocumentBuilderFactory dbfactory;
-    
-    static {
-       privateDBFactory = DocumentBuilderFactory.newInstance();
-       dbfactory = privateDBFactory;
-    }
-
-    public AggregateTransformer(Task task){
-        this.task = task;
-    }
-
-    /**
-     * Get the Document Builder Factory
-     *
-     * @return the DocumentBuilderFactory instance in use
-     */
-    protected static DocumentBuilderFactory getDocumentBuilderFactory() {
-        return privateDBFactory;
-    }
-    
-    public void setFormat(Format format){
-        this.format = format.getValue();
-    }
-
-    public void setXmlDocument(Document doc){
-        this.document = doc;
-    }
-
-    /**
-     * Set the xml file to be processed. This is a helper if you want
-     * to set the file directly. Much more for testing purposes.
-     * @param xmlfile xml file to be processed
-     */
-    protected void setXmlfile(File xmlfile) throws BuildException {
-        try {
-            DocumentBuilder builder = privateDBFactory.newDocumentBuilder();
-            InputStream in = new FileInputStream(xmlfile);
-            try {
-                Document doc = builder.parse(in);
-                setXmlDocument(doc);
-            } finally {
-                in.close();
-            }
-        } catch (Exception e){
-            throw new BuildException("Error while parsing document: " + xmlfile, e);
-        }
-    }
-
-    /**
-     * set the style directory. It is optional and will override the
-     * default xsl used.
-     * @param styledir  the directory containing the xsl files if the user
-     * would like to override with its own style.
-     */
-    public void setStyledir(File styledir){
-        this.styleDir = styledir;
-    }
-
-    /** set the destination directory */
-    public void setTodir(File todir){
-        this.toDir = todir;
-    }
-
-    /** set the extension of the output files */
-    public void setExtension(String ext){
-        task.log("extension is not used anymore", Project.MSG_WARN);
-    }
-
-    public void transform() throws BuildException {
-        checkOptions();
-        final long t0 = System.currentTimeMillis();
-        try {
-            XalanExecutor executor = XalanExecutor.newInstance(this);
-            executor.execute();
-        } catch (Exception e){
-            throw new BuildException("Errors while applying transformations", e);
-        }
-        final long dt = System.currentTimeMillis() - t0;
-        task.log("Transform time: " + dt + "ms");
-    }
-
-    /** check for invalid options */
-    protected void checkOptions() throws BuildException {
-        // set the destination directory relative from the project if needed.
-        if (toDir == null) {
-            toDir = task.getProject().resolveFile(".");
-        } else if (!toDir.isAbsolute()) {
-            toDir = task.getProject().resolveFile(toDir.getPath());
-        }
-    }
-
-    /**
-     * Get the systemid of the appropriate stylesheet based on its
-     * name and styledir. If no styledir is defined it will load
-     * it as a java resource in the xsl child package, otherwise it
-     * will get it from the given directory.
-     * @throws IOException thrown if the requested stylesheet does
-     * not exist.
-     */
-    protected String getStylesheetSystemId() throws IOException {
-        String xslname = "junit-frames.xsl";
-        if (NOFRAMES.equals(format)){
-            xslname = "junit-noframes.xsl";
-        }
-        URL url = null;
-        if (styleDir == null){
-            url = getClass().getResource("xsl/" + xslname);
-            if (url == null){
-                throw new FileNotFoundException("Could not find jar resource " + xslname);
-            }
-        } else {
-            File file = new File(styleDir, xslname);
-            if (!file.exists()){
-                throw new FileNotFoundException("Could not find file '" + file + "'");
-            }
-            url = new URL("file", "", file.getAbsolutePath());
-        }
-        return url.toExternalForm();
-    }
-
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/junit/BaseTest.java b/src/main/org/apache/tools/ant/taskdefs/optional/junit/BaseTest.java
deleted file mode 100644
index 7fe14cc..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/junit/BaseTest.java
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.junit;
-
-import java.io.File;
-import java.util.Vector;
-
-/**
- * Baseclass for BatchTest and JUnitTest.
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> 
- * @author <a href="mailto:sbailliez@imediation.com">Stephane Bailliez</a>
- */
-public abstract class BaseTest {
-    protected boolean haltOnError = false;
-    protected boolean haltOnFail = false;
-    protected boolean filtertrace = true;
-    protected boolean fork = false;
-    protected String ifProperty = null;
-    protected String unlessProperty = null;
-    protected Vector formatters = new Vector();
-    /** destination directory */
-    protected File destDir = null;
-
-    protected String failureProperty;
-    protected String errorProperty;
-
-    public void setFiltertrace(boolean value) {
-        filtertrace = value;
-    }
-
-    public boolean getFiltertrace() {
-        return filtertrace;
-    }
-    
-    public void setFork(boolean value) {
-        fork = value;
-    }
-
-    public boolean getFork() {
-        return fork;
-    }
-
-    public void setHaltonerror(boolean value) {
-        haltOnError = value;
-    }
-
-    public void setHaltonfailure(boolean value) {
-        haltOnFail = value;
-    }
-
-    public boolean getHaltonerror() {
-        return haltOnError;
-    }
-
-    public boolean getHaltonfailure() {
-        return haltOnFail;
-    }
-
-    public void setIf(String propertyName) {
-        ifProperty = propertyName;
-    }
-
-    public void setUnless(String propertyName) {
-        unlessProperty = propertyName;
-    }
-
-    public void addFormatter(FormatterElement elem) {
-        formatters.addElement(elem);
-    }
-
-    /**
-     * Sets the destination directory.
-     */
-    public void setTodir(File destDir) {
-        this.destDir = destDir; 
-    }
-
-    /**
-     * @return the destination directory as an absolute path if it exists
-     *         otherwise return <tt>null</tt>
-     */
-    public String getTodir(){
-        if (destDir != null){
-            return destDir.getAbsolutePath();
-        }
-        return null;
-    }
-
-    public java.lang.String getFailureProperty() {
-        return failureProperty;
-    }
-    
-    public void setFailureProperty(String failureProperty) {
-        this.failureProperty = failureProperty;
-    }
-    
-    public java.lang.String getErrorProperty() {
-        return errorProperty;
-    }
-    
-    public void setErrorProperty(String errorProperty) {
-        this.errorProperty = errorProperty;
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/junit/BatchTest.java b/src/main/org/apache/tools/ant/taskdefs/optional/junit/BatchTest.java
deleted file mode 100644
index ca79616..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/junit/BatchTest.java
+++ /dev/null
@@ -1,216 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.junit;
-
-
-import org.apache.tools.ant.DirectoryScanner;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.types.FileSet;
-
-
-import java.util.Enumeration;
-import java.util.Vector;
-import java.io.File;
-
-/**
- * <p> Create then run <code>JUnitTest</code>'s based on the list of files given by the fileset attribute.
- *
- * <p> Every <code>.java</code> or <code>.class</code> file in the fileset is 
- * assumed to be a testcase. 
- * A <code>JUnitTest</code> is created for each of these named classes with basic setup
- * inherited from the parent <code>BatchTest</code>.
- *
- * @author <a href="mailto:jeff.martin@synamic.co.uk">Jeff Martin</a>
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- * @author <a href="mailto:sbailliez@imediation.com">Stephane Bailliez</a>
- *
- * @see JUnitTest
- */
-public final class BatchTest extends BaseTest {
-
-    /** the reference to the project */
-    private Project project;
-
-    /** the list of filesets containing the testcase filename rules */
-    private Vector filesets = new Vector();
-
-    /**
-     * create a new batchtest instance
-     * @param project     the project it depends on.
-     */
-    public BatchTest(Project project){
-        this.project = project;
-    }
-
-    /**
-     * Add a new fileset instance to this batchtest. Whatever the fileset is,
-     * only filename that are <tt>.java</tt> or <tt>.class</tt> will be
-     * considered as 'candidates'.
-     * @param     fs the new fileset containing the rules to get the testcases.
-     */
-    public void addFileSet(FileSet fs) {
-        filesets.addElement(fs);
-    }
-
-    /**
-     * Return all <tt>JUnitTest</tt> instances obtain by applying the fileset rules.
-     * @return  an enumeration of all elements of this batchtest that are
-     * a <tt>JUnitTest</tt> instance.
-     */
-    public final Enumeration elements(){
-        JUnitTest[] tests = createAllJUnitTest();
-        return Enumerations.fromArray(tests);
-    }
-
-    /**
-     * Convenient method to merge the <tt>JUnitTest</tt>s of this batchtest
-     * to a <tt>Vector</tt>.
-     * @param v the vector to which should be added all individual tests of this
-     * batch test.
-     */
-    final void addTestsTo(Vector v){
-        JUnitTest[] tests = createAllJUnitTest();
-        v.ensureCapacity(v.size() + tests.length);
-        for (int i = 0; i < tests.length; i++) {
-            v.addElement(tests[i]);
-        }
-    }
-
-    /**
-     * Create all <tt>JUnitTest</tt>s based on the filesets. Each instance
-     * is configured to match this instance properties.
-     * @return the array of all <tt>JUnitTest</tt>s that belongs to this batch.
-     */
-    private JUnitTest[] createAllJUnitTest(){
-        String[] filenames = getFilenames();
-        JUnitTest[] tests = new JUnitTest[filenames.length];
-        for (int i = 0; i < tests.length; i++) {
-            String classname = javaToClass(filenames[i]);
-            tests[i] = createJUnitTest(classname);
-        }
-        return tests;
-    }
-
-    /**
-     * Iterate over all filesets and return the filename of all files
-     * that end with <tt>.java</tt> or <tt>.class</tt>. This is to avoid
-     * wrapping a <tt>JUnitTest</tt> over an xml file for example. A Testcase
-     * is obviously a java file (compiled or not).
-     * @return an array of filenames without their extension. As they should
-     * normally be taken from their root, filenames should match their fully
-     * qualified class name (If it is not the case it will fail when running the test).
-     * For the class <tt>org/apache/Whatever.class</tt> it will return <tt>org/apache/Whatever</tt>.
-     */
-    private String[] getFilenames(){
-        Vector v = new Vector();
-        final int size = this.filesets.size();
-        for (int j = 0; j < size; j++) {
-            FileSet fs = (FileSet) filesets.elementAt(j);
-            DirectoryScanner ds = fs.getDirectoryScanner(project);
-            ds.scan();
-            String[] f = ds.getIncludedFiles();
-            for (int k = 0; k < f.length; k++) {
-                String pathname = f[k];
-                if (pathname.endsWith(".java")) {
-                    v.addElement(pathname.substring(0, pathname.length() - ".java".length()));
-                } else if (pathname.endsWith(".class")) {
-                    v.addElement(pathname.substring(0, pathname.length() - ".class".length()));
-                }
-            }
-        }
-
-        String[] files = new String[v.size()];
-        v.copyInto(files);
-        return files;
-    }
-
-    /**
-     * Convenient method to convert a pathname without extension to a
-     * fully qualified classname. For example <tt>org/apache/Whatever</tt> will
-     * be converted to <tt>org.apache.Whatever</tt>
-     * @param filename the filename to "convert" to a classname.
-     * @return the classname matching the filename.
-     */
-    public static final String javaToClass(String filename){
-        return filename.replace(File.separatorChar, '.');
-    }
-
-    /**
-     * Create a <tt>JUnitTest</tt> that has the same property as this
-     * <tt>BatchTest</tt> instance.
-     * @param classname the name of the class that should be run as a
-     * <tt>JUnitTest</tt>. It must be a fully qualified name.
-     * @return the <tt>JUnitTest</tt> over the given classname.
-     */
-    private JUnitTest createJUnitTest(String classname){
-        JUnitTest test = new JUnitTest();
-        test.setName(classname);
-        test.setHaltonerror(this.haltOnError);
-        test.setHaltonfailure(this.haltOnFail);
-        test.setFiltertrace(this.filtertrace);
-        test.setFork(this.fork);
-        test.setIf(this.ifProperty);
-        test.setUnless(this.unlessProperty);
-        test.setTodir(this.destDir);
-        test.setFailureProperty(failureProperty);
-        test.setErrorProperty(errorProperty);
-        Enumeration list = this.formatters.elements();
-        while (list.hasMoreElements()) {
-            test.addFormatter((FormatterElement) list.nextElement());
-        }
-        return test;
-    }
-
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/junit/BriefJUnitResultFormatter.java b/src/main/org/apache/tools/ant/taskdefs/optional/junit/BriefJUnitResultFormatter.java
deleted file mode 100644
index 32104ab..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/junit/BriefJUnitResultFormatter.java
+++ /dev/null
@@ -1,260 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.junit;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.text.NumberFormat;
-
-import junit.framework.AssertionFailedError;
-import junit.framework.Test;
-
-import org.apache.tools.ant.BuildException;
-
-/**
- * Prints plain text output of the test to a specified Writer.
- * Inspired by the PlainJUnitResultFormatter.
- *
- * @author <a href="mailto:robertdw@bigpond.net.au">Robert Watkins</a>
- *
- * @see FormatterElement
- * @see PlainJUnitResultFormatter
- */
-public class BriefJUnitResultFormatter implements JUnitResultFormatter {
-
-    /**
-     * Where to write the log to.
-     */
-    private OutputStream out;
-
-    /**
-     * Used for writing the results.
-     */
-    private PrintWriter output;
-
-    /**
-     * Used as part of formatting the results.
-     */
-    private StringWriter results;
-
-    /**
-     * Used for writing formatted results to.
-     */
-    private PrintWriter resultWriter;
-
-    /**
-     * Formatter for timings.
-     */
-    private NumberFormat numberFormat = NumberFormat.getInstance();
-
-    /**
-     * Output suite has written to System.out
-     */
-    private String systemOutput = null;
-
-    /**
-     * Output suite has written to System.err
-     */
-    private String systemError = null;
-
-    public BriefJUnitResultFormatter() {
-        results = new StringWriter();
-        resultWriter = new PrintWriter(results);
-    }
-
-    /**
-     * Sets the stream the formatter is supposed to write its results to.
-     */
-    public void setOutput(OutputStream out) {
-        this.out = out;
-        output = new PrintWriter(out);
-    }
-
-    public void setSystemOutput(String out) {
-        systemOutput = out;
-    }
-
-    public void setSystemError(String err) {
-        systemError = err;
-    }
-
-
-    /**
-     * The whole testsuite started.
-     */
-    public void startTestSuite(JUnitTest suite) throws BuildException {
-    }
-
-    /**
-     * The whole testsuite ended.
-     */
-    public void endTestSuite(JUnitTest suite) throws BuildException {
-        String newLine = System.getProperty("line.separator");
-        StringBuffer sb = new StringBuffer("Testsuite: ");
-        sb.append(suite.getName());
-        sb.append(newLine);
-        sb.append("Tests run: ");
-        sb.append(suite.runCount());
-        sb.append(", Failures: ");
-        sb.append(suite.failureCount());
-        sb.append(", Errors: ");
-        sb.append(suite.errorCount());
-        sb.append(", Time elapsed: ");
-        sb.append(numberFormat.format(suite.getRunTime() / 1000.0));
-        sb.append(" sec");
-        sb.append(newLine);
-        sb.append(newLine);
-
-        // append the err and output streams to the log
-        if (systemOutput != null && systemOutput.length() > 0) {
-            sb.append("------------- Standard Output ---------------")
-                    .append(newLine)
-                    .append(systemOutput)
-                    .append("------------- ---------------- ---------------")
-                    .append(newLine);
-        }
-
-        if (systemError != null && systemError.length() > 0) {
-            sb.append("------------- Standard Error -----------------")
-                    .append(newLine)
-                    .append(systemError)
-                    .append("------------- ---------------- ---------------")
-                    .append(newLine);
-        }
-
-        if (output != null) {
-            try {
-                output.write(sb.toString());
-                resultWriter.close();
-                output.write(results.toString());
-                output.flush();
-            } finally {
-                if (out != System.out &&
-                        out != System.err) {
-                    try {
-                        out.close();
-                    } catch (IOException e) {
-                    }
-                }
-            }
-        }
-    }
-
-    /**
-     * A test started.
-     */
-    public void startTest(Test test) {
-    }
-
-    /**
-     * A test ended.
-     */
-    public void endTest(Test test) {
-    }
-
-    /**
-     * Interface TestListener for JUnit &lt;= 3.4.
-     *
-     * <p>A Test failed.
-     */
-    public void addFailure(Test test, Throwable t) {
-        formatError("\tFAILED", test, t);
-    }
-
-    /**
-     * Interface TestListener for JUnit &gt; 3.4.
-     *
-     * <p>A Test failed.
-     */
-    public void addFailure(Test test, AssertionFailedError t) {
-        addFailure(test, (Throwable) t);
-    }
-
-    /**
-     * A test caused an error.
-     */
-    public void addError(Test test, Throwable error) {
-        formatError("\tCaused an ERROR", test, error);
-    }
-
-    /**
-     * Format the test for printing..
-     */
-    protected String formatTest(Test test) {
-        if (test == null) {
-            return "Null Test: ";
-        } else {
-            return "Testcase: " + test.toString() + ":";
-        }
-    }
-
-    /**
-     * Format an error and print it.
-     */
-    protected synchronized void formatError(String type, Test test,
-                                            Throwable error) {
-        if (test != null) {
-            endTest(test);
-        }
-
-        resultWriter.println(formatTest(test) + type);
-        resultWriter.println(error.getMessage());
-        String strace = JUnitTestRunner.getFilteredTrace(error);
-        resultWriter.println(strace);
-        resultWriter.println();
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/junit/DOMUtil.java b/src/main/org/apache/tools/ant/taskdefs/optional/junit/DOMUtil.java
deleted file mode 100644
index 95fd7f1..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/junit/DOMUtil.java
+++ /dev/null
@@ -1,253 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.junit;
-
-import org.w3c.dom.Node;
-import org.w3c.dom.Document;
-import org.w3c.dom.CDATASection;
-import org.w3c.dom.Comment;
-import org.w3c.dom.Element;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Attr;
-
-import org.w3c.dom.ProcessingInstruction;
-import org.w3c.dom.Text;
-import org.w3c.dom.NodeList;
-import org.w3c.dom.DOMException;
-
-import java.util.Vector;
-
-/**
- * Some utilities that might be useful when manipulating DOM trees.
- *
- * @author <a href="bailliez@noos.fr">Stephane Bailliez</a>
- */
-public final class DOMUtil {
-
-    /** unused constructor */
-    private DOMUtil(){
-    }
-
-    /**
-     * Filter interface to be applied when iterating over a DOM tree.
-     * Just think of it like a <tt>FileFilter</tt> clone.
-     */
-    public interface NodeFilter {
-        /**
-         * @param       node    the node to check for acceptance.
-         * @return      <tt>true</tt> if the node is accepted by this filter,
-         *                      otherwise <tt>false</tt>
-         */
-        boolean accept(Node node);
-    }
-
-    /**
-     * list a set of node that match a specific filter. The list can be made
-     * recursively or not.
-     * @param   parent  the parent node to search from
-     * @param   filter  the filter that children should match.
-     * @param   recurse <tt>true</tt> if you want the list to be made recursively
-     *                  otherwise <tt>false</tt>.
-     */
-    public static NodeList listChildNodes(Node parent, NodeFilter filter, boolean recurse){
-        NodeListImpl matches = new NodeListImpl();
-        NodeList children = parent.getChildNodes();
-        if (children != null) {
-            final int len = children.getLength();
-            for (int i = 0; i < len; i++) {
-                Node child = children.item(i);
-                if (filter.accept(child)) {
-                    matches.addElement(child);
-                }
-                if (recurse) {
-                    NodeList recmatches = listChildNodes(child, filter, recurse);
-                    final int reclength = matches.getLength();
-                    for (int j = 0; j < reclength; j++) {
-                        matches.addElement(recmatches.item(i));
-                    }
-                }
-            }
-        }
-        return matches;
-    }
-
-    /** custom implementation of a nodelist */
-    public static class NodeListImpl extends Vector implements NodeList {
-        public int getLength(){
-            return size();
-        }
-        public Node item(int i){
-            try {
-                return (Node) elementAt(i);
-            } catch (ArrayIndexOutOfBoundsException e){
-                return null; // conforming to NodeList interface
-            }
-        }
-    }
-
-    /**
-     * return the attribute value of an element.
-     * @param node the node to get the attribute from.
-     * @param name the name of the attribute we are looking for the value.
-     * @return the value of the requested attribute or <tt>null</tt> if the
-     *         attribute was not found or if <tt>node</tt> is not an <tt>Element</tt>.
-     */
-    public static String getNodeAttribute(Node node, String name) {
-        if (node instanceof Element) {
-            Element element = (Element) node;
-            return element.getAttribute(name);
-        }
-        return null;
-    }
-
-
-    /**
-     * Iterate over the children of a given node and return the first node
-     * that has a specific name.
-     * @param   parent  the node to search child from. Can be <tt>null</tt>.
-     * @param   tagname the child name we are looking for. Cannot be <tt>null</tt>.
-     * @return  the first child that matches the given name or <tt>null</tt> if
-     *                  the parent is <tt>null</tt> or if a child does not match the
-     *                  given name.
-     */
-    public static Element getChildByTagName (Node parent, String tagname) {
-        if (parent == null){
-            return null;
-        }
-        NodeList childList = parent.getChildNodes();
-        final int len = childList.getLength();
-        for (int i = 0; i < len; i++) {
-            Node child = childList.item(i);
-            if (child != null && child.getNodeType() == Node.ELEMENT_NODE &&
-                 child.getNodeName().equals(tagname)) {
-                return (Element) child;
-            }
-        }
-        return null;
-    }
-
-    /**
-     * Simple tree walker that will clone recursively a node. This is to
-     * avoid using parser-specific API such as Sun's <tt>changeNodeOwner</tt>
-     * when we are dealing with DOM L1 implementations since <tt>cloneNode(boolean)</tt>
-     * will not change the owner document.
-     * <tt>changeNodeOwner</tt> is much faster and avoid the costly cloning process.
-     * <tt>importNode</tt> is in the DOM L2 interface.
-     * @param   parent  the node parent to which we should do the import to.
-     * @param   child   the node to clone recursively. Its clone will be
-     *              appended to <tt>parent</tt>.
-     * @return  the cloned node that is appended to <tt>parent</tt>
-     */
-    public static final Node importNode(Node parent, Node child){
-        Node copy = null;
-        final Document doc = parent.getOwnerDocument();
-
-        switch (child.getNodeType()) {
-        case Node.CDATA_SECTION_NODE:
-            copy = doc.createCDATASection(((CDATASection) child).getData());
-            break;
-        case Node.COMMENT_NODE:
-            copy = doc.createComment(((Comment) child).getData());
-            break;
-        case Node.DOCUMENT_FRAGMENT_NODE:
-            copy = doc.createDocumentFragment();
-            break;
-        case Node.ELEMENT_NODE:
-            final Element elem = doc.createElement(((Element) child).getTagName());
-            copy = elem;
-            final NamedNodeMap attributes = child.getAttributes();
-            if (attributes != null) {
-                final int size = attributes.getLength();
-                for (int i = 0; i < size; i++) {
-                    final Attr attr = (Attr) attributes.item(i);
-                    elem.setAttribute(attr.getName(), attr.getValue());
-                }
-            }
-            break;
-        case Node.ENTITY_REFERENCE_NODE:
-            copy = doc.createEntityReference(child.getNodeName());
-            break;
-        case Node.PROCESSING_INSTRUCTION_NODE:
-            final ProcessingInstruction pi = (ProcessingInstruction) child;
-            copy = doc.createProcessingInstruction(pi.getTarget(), pi.getData());
-            break;
-        case Node.TEXT_NODE:
-            copy = doc.createTextNode(((Text) child).getData());
-            break;
-        default:
-            // this should never happen
-            throw new IllegalStateException("Invalid node type: " + child.getNodeType());
-        }
-
-        // okay we have a copy of the child, now the child becomes the parent
-        // and we are iterating recursively over its children.
-        try {
-            final NodeList children = child.getChildNodes();
-            if (children != null) {
-                final int size = children.getLength();
-                for (int i = 0; i < size; i++) {
-                    final Node newChild = children.item(i);
-                    if (newChild != null) {
-                        importNode(copy, newChild);
-                    }
-                }
-            }
-        } catch (DOMException ignored) {
-        }
-
-        // bingo append it. (this should normally not be done here)
-        parent.appendChild(copy);
-        return copy;
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/junit/Enumerations.java b/src/main/org/apache/tools/ant/taskdefs/optional/junit/Enumerations.java
deleted file mode 100644
index 93715df..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/junit/Enumerations.java
+++ /dev/null
@@ -1,216 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.junit;
-
-import java.util.Enumeration;
-import java.util.NoSuchElementException;
-
-/**
- * A couple of methods related to enumerations that might be useful.
- * This class should probably disappear once the required JDK is set to 1.2
- * instead of 1.1.
- *
- * @author <a href="mailto:sbailliez@imediation.com">Stephane Bailliez</a>
- */
-public final class Enumerations {
-        
-        private Enumerations(){
-        }
-
-        /**
-         * creates an enumeration from an array of objects.
-         * @param       array   the array of object to enumerate.
-         * @return the enumeration over the array of objects.
-         */
-        public static Enumeration fromArray(Object[] array){
-                return new ArrayEnumeration(array);
-        }
-
-        /**
-        * creates an enumeration from an array of enumeration. The created enumeration
-        * will sequentially enumerate over all elements of each enumeration and skip
-        * <tt>null</tt> enumeration elements in the array.
-        * @param        enums   the array of enumerations.
-        * @return the enumeration over the array of enumerations.
-         */
-        public static Enumeration fromCompound(Enumeration[] enums){
-                return new CompoundEnumeration(enums);
-        }
-
-}
-
-
-/**
- * Convenient enumeration over an array of objects.
- * @author <a href="mailto:sbailliez@imediation.com">Stephane Bailliez</a>
- */
-class ArrayEnumeration implements Enumeration {
-        
-        /** object array */
-        private Object[] array;
-        
-        /** current index */
-        private int pos;
-        
-        /**
-         * Initialize a new enumeration that wraps an array.
-         * @param       array   the array of object to enumerate.
-         */
-        public ArrayEnumeration(Object[] array){
-                this.array = array;
-                this.pos = 0;
-        }
-        /**
-         * Tests if this enumeration contains more elements.
-         *
-         * @return  <code>true</code> if and only if this enumeration object
-         *           contains at least one more element to provide;
-         *          <code>false</code> otherwise.
-         */
-        public boolean hasMoreElements() {
-                return (pos < array.length);
-        }
-
-        /**
-         * Returns the next element of this enumeration if this enumeration
-         * object has at least one more element to provide.
-         *
-         * @return     the next element of this enumeration.
-         * @throws  NoSuchElementException  if no more elements exist.
-         */
-        public Object nextElement() throws NoSuchElementException {
-                if (hasMoreElements()) {
-                        Object o = array[pos];
-                        pos++;
-                        return o;
-                }
-                throw new NoSuchElementException();
-        }
-}
-/**
- * Convenient enumeration over an array of enumeration. For example:
- * <pre>
- * Enumeration e1 = v1.elements();
- * while (e1.hasMoreElements()){
- *    // do something
- * }
- * Enumeration e2 = v2.elements();
- * while (e2.hasMoreElements()){
- *    // do the same thing
- * }
- * </pre>
- * can be written as:
- * <pre>
- * Enumeration[] enums = { v1.elements(), v2.elements() };
- * Enumeration e = Enumerations.fromCompound(enums);
- * while (e.hasMoreElements()){
- *    // do something
- * }
- * </pre>
- * Note that the enumeration will skip null elements in the array. The following is
- * thus possible:
- * <pre>
- * Enumeration[] enums = { v1.elements(), null, v2.elements() }; // a null enumeration in the array
- * Enumeration e = Enumerations.fromCompound(enums);
- * while (e.hasMoreElements()){
- *    // do something
- * }
- * </pre>
- * @author <a href="mailto:sbailliez@imediation.com">Stephane Bailliez</a>
- */
- class CompoundEnumeration implements Enumeration {
-        
-        /** enumeration array */
-        private Enumeration[] enumArray;
-        
-        /** index in the enums array */
-        private int index = 0;
-
-    public CompoundEnumeration(Enumeration[] enumarray) {
-                this.enumArray = enumarray;
-    }
-
-        /**
-         * Tests if this enumeration contains more elements.
-         *
-         * @return  <code>true</code> if and only if this enumeration object
-         *           contains at least one more element to provide;
-         *          <code>false</code> otherwise.
-         */
-    public boolean hasMoreElements() {
-                while (index < enumArray.length) {
-                        if (enumArray[index] != null && enumArray[index].hasMoreElements()) {
-                                return true;
-                        }
-                        index++;
-                }
-                return false;
-    }
-
-        /**
-         * Returns the next element of this enumeration if this enumeration
-         * object has at least one more element to provide.
-         *
-         * @return     the next element of this enumeration.
-         * @throws  NoSuchElementException  if no more elements exist.
-         */
-    public Object nextElement() throws NoSuchElementException {
-                if (hasMoreElements()) {
-                        return enumArray[index].nextElement();
-                }
-                throw new NoSuchElementException();
-    }
-}
-
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/junit/FormatterElement.java b/src/main/org/apache/tools/ant/taskdefs/optional/junit/FormatterElement.java
deleted file mode 100644
index 3d6655e..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/junit/FormatterElement.java
+++ /dev/null
@@ -1,225 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.junit;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.types.EnumeratedAttribute;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.OutputStream;
-
-/**
- * <p> A wrapper for the implementations of <code>JUnitResultFormatter</code>.
- * In particular, used as a nested <code>&lt;formatter&gt;</code> element in a <code>&lt;junit&gt;</code> task.
- * <p> For example, 
- * <code><pre>
- *       &lt;junit printsummary="no" haltonfailure="yes" fork="false"&gt;
- *           &lt;formatter type="plain" usefile="false" /&gt;
- *           &lt;test name="org.apache.ecs.InternationalCharTest" /&gt;
- *       &lt;/junit&gt;</pre></code>
- * adds a <code>plain</code> type implementation (<code>PlainJUnitResultFormatter</code>) to display the results of the test.
- *
- * <p> Either the <code>type</code> or the <code>classname</code> attribute
- * must be set. 
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- *
- * @see JUnitTask
- * @see XMLJUnitResultFormatter
- * @see BriefJUnitResultFormatter
- * @see PlainJUnitResultFormatter
- * @see JUnitResultFormatter
- */
-public class FormatterElement {
-
-    private String classname;
-    private String extension;
-    private OutputStream out = System.out;
-    private File outFile;
-    private boolean useFile = true;
-
-    /**
-     * <p> Quick way to use a standard formatter.
-     *
-     * <p> At the moment, there are three supported standard formatters.
-     * <ul>
-     * <li> The <code>xml</code> type uses a <code>XMLJUnitResultFormatter</code>.
-     * <li> The <code>brief</code> type uses a <code>BriefJUnitResultFormatter</code>.
-     * <li> The <code>plain</code> type (the default) uses a <code>PlainJUnitResultFormatter</code>.
-     * </ul>
-     *
-     * <p> Sets <code>classname</code> attribute - so you can't use that attribute if you use this one.
-     */
-    public void setType(TypeAttribute type) {
-        if ("xml".equals(type.getValue())) {
-            setClassname("org.apache.tools.ant.taskdefs.optional.junit.XMLJUnitResultFormatter");
-            setExtension(".xml");
-        } else {
-            if ("brief".equals(type.getValue())) {
-                setClassname("org.apache.tools.ant.taskdefs.optional.junit.BriefJUnitResultFormatter");
-            } else { // must be plain, ensured by TypeAttribute
-                setClassname("org.apache.tools.ant.taskdefs.optional.junit.PlainJUnitResultFormatter");
-            }
-            setExtension(".txt");
-        }
-    }
-
-    /**
-     * <p> Set name of class to be used as the formatter.
-     *
-     * <p> This class must implement <code>JUnitResultFormatter</code>
-     */
-    public void setClassname(String classname) {
-        this.classname = classname;
-    }
-
-    /**
-     * Get name of class to be used as the formatter.
-     */
-    public String getClassname() {
-        return classname;
-    }
-
-    public void setExtension(String ext) {
-        this.extension = ext;
-    }
-
-    public String getExtension() {
-        return extension;
-    }
-
-    /**
-     * <p> Set the file which the formatte should log to.
-     *
-     * <p> Note that logging to file must be enabled .
-     */
-    void setOutfile(File out) {
-        this.outFile = out;
-    }
-
-    /**
-     * <p> Set output stream for formatter to use.
-     *
-     * <p> Defaults to standard out.
-     */
-    public void setOutput(OutputStream out) {
-        this.out = out;
-    }
-
-    /**
-     * Set whether the formatter should log to file.
-     */
-    public void setUseFile(boolean useFile) {
-        this.useFile = useFile;
-    }
-
-    /**
-     * Get whether the formatter should log to file.
-     */
-    boolean getUseFile() {
-        return useFile;
-    }
-
-    JUnitResultFormatter createFormatter() throws BuildException {
-        if (classname == null) {
-            throw new BuildException("you must specify type or classname");
-        }
-        
-        Class f = null;
-        try {
-            f = Class.forName(classname);
-        } catch (ClassNotFoundException e) {
-            throw new BuildException(e);
-        }
-
-        Object o = null;
-        try {
-            o = f.newInstance();
-        } catch (InstantiationException e) {
-            throw new BuildException(e);
-        } catch (IllegalAccessException e) {
-            throw new BuildException(e);
-        }
-
-        if (!(o instanceof JUnitResultFormatter)) {
-            throw new BuildException(classname 
-                + " is not a JUnitResultFormatter");
-        }
-
-        JUnitResultFormatter r = (JUnitResultFormatter) o;
-
-        if (useFile && outFile != null) {
-            try {
-                out = new FileOutputStream(outFile);
-            } catch (java.io.IOException e) {
-                throw new BuildException(e);
-            }
-        }
-        r.setOutput(out);
-        return r;
-    }
-
-    /**
-     * <p> Enumerated attribute with the values "plain", "xml" and "brief".
-     * 
-     * <p> Use to enumerate options for <code>type</code> attribute.
-     */
-    public static class TypeAttribute extends EnumeratedAttribute {
-        public String[] getValues() {
-            return new String[] {"plain", "xml", "brief"};
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitResultFormatter.java b/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitResultFormatter.java
deleted file mode 100644
index f8a859e..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitResultFormatter.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.junit;
-
-import java.io.OutputStream;
-import org.apache.tools.ant.BuildException;
-import junit.framework.TestListener;
-
-/**
- * This Interface describes classes that format the results of a JUnit
- * testrun.
- * 
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- */
-public interface JUnitResultFormatter extends TestListener {
-    /**
-     * The whole testsuite started.
-     */
-    void startTestSuite(JUnitTest suite) throws BuildException;
-    
-    /**
-     * The whole testsuite ended.
-     */
-    void endTestSuite(JUnitTest suite) throws BuildException;
-
-    /**
-     * Sets the stream the formatter is supposed to write its results to.
-     */
-    void setOutput(OutputStream out);
-
-    /**
-     * This is what the test has written to System.out
-     */
-    void setSystemOutput(String out);
-
-    /**
-     * This is what the test has written to System.err
-     */
-    void setSystemError(String err);
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTask.java b/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTask.java
deleted file mode 100644
index 59e2928..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTask.java
+++ /dev/null
@@ -1,919 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.junit;
-
-import org.apache.tools.ant.AntClassLoader;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.taskdefs.Execute;
-import org.apache.tools.ant.taskdefs.LogStreamHandler;
-import org.apache.tools.ant.taskdefs.ExecuteWatchdog;
-import org.apache.tools.ant.taskdefs.LogOutputStream;
-import org.apache.tools.ant.types.Commandline;
-import org.apache.tools.ant.types.Environment;
-import org.apache.tools.ant.types.CommandlineJava;
-import org.apache.tools.ant.types.Path;
-import org.apache.tools.ant.types.EnumeratedAttribute;
-import org.apache.tools.ant.util.FileUtils;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-
-import java.util.Enumeration;
-import java.util.Hashtable;
-import java.util.Properties;
-import java.util.Vector;
-
-import java.net.URL;
-
-/**
- * Ant task to run JUnit tests.
- *
- * <p> JUnit is a framework to create unit test. It has been initially
- * created by Erich Gamma and Kent Beck.  JUnit can be found at <a
- * href="http://www.junit.org">http://www.junit.org</a>.
- *
- * <p> <code>JUnitTask</code> can run a single specific
- * <code>JUnitTest</code> using the <code>test</code> element.</p>
- * For example, the following target <code><pre>
- *   &lt;target name="test-int-chars" depends="jar-test"&gt;
- *       &lt;echo message="testing international characters"/&gt;
- *       &lt;junit printsummary="no" haltonfailure="yes" fork="false"&gt;
- *           &lt;classpath refid="classpath"/&gt;
- *           &lt;formatter type="plain" usefile="false" /&gt;
- *           &lt;test name="org.apache.ecs.InternationalCharTest" /&gt;
- *       &lt;/junit&gt;
- *   &lt;/target&gt;
- * </pre></code>
- * <p>runs a single junit test
- * (<code>org.apache.ecs.InternationalCharTest</code>) in the current
- * VM using the path with id <code>classpath</code> as classpath and
- * presents the results formatted using the standard
- * <code>plain</code> formatter on the command line.</p>
- *
- * <p> This task can also run batches of tests.  The
- * <code>batchtest</code> element creates a <code>BatchTest</code>
- * based on a fileset.  This allows, for example, all classes found in
- * directory to be run as testcases.</p>
- *
- * <p>For example,</p><code><pre>
- * &lt;target name="run-tests" depends="dump-info,compile-tests" if="junit.present"&gt;
- *   &lt;junit printsummary="no" haltonfailure="yes" fork="${junit.fork}"&gt;
- *     &lt;jvmarg value="-classic"/&gt;
- *     &lt;classpath refid="tests-classpath"/&gt;
- *     &lt;sysproperty key="build.tests" value="${build.tests}"/&gt;
- *     &lt;formatter type="brief" usefile="false" /&gt;
- *     &lt;batchtest&gt;
- *       &lt;fileset dir="${tests.dir}"&gt;
- *         &lt;include name="**&#047;*Test*" /&gt;
- *       &lt;/fileset&gt;
- *     &lt;/batchtest&gt;
- *   &lt;/junit&gt;
- * &lt;/target&gt;
- * </pre></code>
- * <p>this target finds any classes with a <code>test</code> directory
- * anywhere in their path (under the top <code>${tests.dir}</code>, of
- * course) and creates <code>JUnitTest</code>'s for each one.</p>
- *
- * <p> Of course, <code>&lt;junit&gt;</code> and
- * <code>&lt;batch&gt;</code> elements can be combined for more
- * complex tests. For an example, see the ant <code>build.xml</code>
- * target <code>run-tests</code> (the second example is an edited
- * version).</p>
- *
- * <p> To spawn a new Java VM to prevent interferences between
- * different testcases, you need to enable <code>fork</code>.  A
- * number of attributes and elements allow you to set up how this JVM
- * runs.
- * @author Thomas Haas
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- * @author <a href="mailto:sbailliez@imediation.com">Stephane Bailliez</a>
- * @author <a href="mailto:Gerrit.Riessen@web.de">Gerrit Riessen</a>
- * @author <a href="mailto:ehatcher@apache.org">Erik Hatcher</a>
- *
- * @version $Revision$
- *
- * @since Ant 1.2
- *
- * @see JUnitTest
- * @see BatchTest
- */
-public class JUnitTask extends Task {
-
-    private CommandlineJava commandline = new CommandlineJava();
-    private Vector tests = new Vector();
-    private Vector batchTests = new Vector();
-    private Vector formatters = new Vector();
-    private File dir = null;
-
-    private Integer timeout = null;
-    private boolean summary = false;
-    private String summaryValue = "";
-    private JUnitTestRunner runner = null;
-
-    private boolean newEnvironment = false;
-    private Environment env = new Environment();
-
-    private boolean includeAntRuntime = true;
-    private Path antRuntimeClasses = null;
-
-    private boolean showOutput = false;
-
-    /**
-     * Tells this task whether to smartly filter the stack frames of
-     * JUnit testcase errors and failures before reporting them.
-     *
-     * <p>This property is applied on all BatchTest (batchtest) and
-     * JUnitTest (test) however it can possibly be overridden by their
-     * own properties.</p>
-     * @param value <tt>false</tt> if it should not filter, otherwise
-     * <tt>true<tt>
-     *
-     * @since Ant 1.5
-     */
-    public void setFiltertrace(boolean value) {
-        Enumeration enum = allTests();
-        while (enum.hasMoreElements()) {
-            BaseTest test = (BaseTest) enum.nextElement();
-            test.setFiltertrace(value);
-        }
-    }
-
-    /**
-     * Tells this task to halt when there is an error in a test.  this
-     * property is applied on all BatchTest (batchtest) and JUnitTest
-     * (test) however it can possibly be overridden by their own
-     * properties.
-     * @param value <tt>true</tt> if it should halt, otherwise
-     * <tt>false</tt>
-     *
-     * @since Ant 1.2
-     */
-    public void setHaltonerror(boolean value) {
-        Enumeration enum = allTests();
-        while (enum.hasMoreElements()) {
-            BaseTest test = (BaseTest) enum.nextElement();
-            test.setHaltonerror(value);
-        }
-    }
-
-    /**
-     * Tells this task to set the named property to "true" when there
-     * is a error in a test.
-     *
-     * <p>This property is applied on all BatchTest (batchtest) and
-     * JUnitTest (test), however, it can possibly be overriden by
-     * their own properties.</p>
-     * @param propertyName the name of the property to set in the
-     * event of an error.
-     *
-     * @since Ant 1.4
-     */
-    public void setErrorProperty(String propertyName) {
-        Enumeration enum = allTests();
-        while (enum.hasMoreElements()) {
-            BaseTest test = (BaseTest) enum.nextElement();
-            test.setErrorProperty(propertyName);
-        }
-    }
-
-    /**
-     * Tells this task to halt when there is a failure in a test.
-     * this property is applied on all BatchTest (batchtest) and
-     * JUnitTest (test) however it can possibly be overridden by their
-     * own properties.
-     * @param value <tt>true</tt> if it should halt, otherwise
-     * <tt>false</tt>
-     *
-     * @since Ant 1.2
-     */
-    public void setHaltonfailure(boolean value) {
-        Enumeration enum = allTests();
-        while (enum.hasMoreElements()) {
-            BaseTest test = (BaseTest) enum.nextElement();
-            test.setHaltonfailure(value);
-        }
-    }
-
-    /**
-     * Tells this task to set the named property to "true" when there
-     * is a failure in a test.  
-     *
-     * <p>This property is applied on all BatchTest (batchtest) and
-     * JUnitTest (test), however, it can possibly be overriden by
-     * their own properties.</p>
-     * @param propertyName the name of the property to set in the
-     * event of an failure.
-     *
-     * @since Ant 1.4
-     */
-    public void setFailureProperty(String propertyName) {
-        Enumeration enum = allTests();
-        while (enum.hasMoreElements()) {
-            BaseTest test = (BaseTest) enum.nextElement();
-            test.setFailureProperty(propertyName);
-        }
-    }
-
-    /**
-     * Tells whether a JVM should be forked for each testcase.
-     *
-     * <p>It avoids interference between testcases and possibly avoids
-     * hanging the build.  this property is applied on all BatchTest
-     * (batchtest) and JUnitTest (test) however it can possibly be
-     * overridden by their own properties.</p>
-     * @param value <tt>true</tt> if a JVM should be forked, otherwise
-     * <tt>false</tt>
-     * @see #setTimeout
-     *
-     * @since Ant 1.2
-     */
-    public void setFork(boolean value) {
-        Enumeration enum = allTests();
-        while (enum.hasMoreElements()) {
-            BaseTest test = (BaseTest) enum.nextElement();
-            test.setFork(value);
-        }
-    }
-
-    /**
-     * Tells whether the task should print a short summary of the
-     * task.
-     * @param value <tt>true</tt> to print a summary,
-     * <tt>withOutAndErr</tt> to include the test&apos;s output as
-     * well, <tt>false</tt> otherwise.
-     * @see SummaryJUnitResultFormatter
-     *
-     * @since Ant 1.2
-     */
-    public void setPrintsummary(SummaryAttribute value) {
-        summaryValue = value.getValue();
-        summary = value.asBoolean();
-    }
-
-    /**
-     * Print summary enumeration values.
-     */
-    public static class SummaryAttribute extends EnumeratedAttribute {
-        public String[] getValues() {
-            return new String[] {"true", "yes", "false", "no",
-                                 "on", "off", "withOutAndErr"};
-        }
-
-        public boolean asBoolean() {
-            String value = getValue();
-            return "true".equals(value)
-                || "on".equals(value)
-                || "yes".equals(value)
-                || "withOutAndErr".equals(value);
-        }
-    }
-
-    /**
-     * Set the timeout value (in milliseconds).
-     *
-     * <p>If the test is running for more than this value, the test
-     * will be canceled. (works only when in 'fork' mode).</p>
-     * @param value the maximum time (in milliseconds) allowed before
-     * declaring the test as 'timed-out'
-     * @see #setFork(boolean)
-     *
-     * @since Ant 1.2
-     */
-    public void setTimeout(Integer value) {
-        timeout = value;
-    }
-
-    /**
-     * Set the maximum memory to be used by all forked JVMs.
-     * @param   max     the value as defined by <tt>-mx</tt> or <tt>-Xmx</tt>
-     *                  in the java command line options.
-     *
-     * @since Ant 1.2
-     */
-    public void setMaxmemory(String max) {
-        commandline.setMaxmemory(max);
-    }
-
-    /**
-     * Set a new VM to execute the testcase. Default is
-     * <tt>java</tt>. Ignored if no JVM is forked.
-     * @param   value   the new VM to use instead of <tt>java</tt>
-     * @see #setFork(boolean)
-     *
-     * @since Ant 1.2
-     */
-    public void setJvm(String value) {
-        commandline.setVm(value);
-    }
-
-    /**
-     * Create a new JVM argument. Ignored if no JVM is forked.
-     * @return create a new JVM argument so that any argument can be
-     * passed to the JVM.
-     * @see #setFork(boolean)
-     *
-     * @since Ant 1.2
-     */
-    public Commandline.Argument createJvmarg() {
-        return commandline.createVmArgument();
-    }
-
-    /**
-     * The directory to invoke the VM in. Ignored if no JVM is forked.
-     * @param   dir     the directory to invoke the JVM from.
-     * @see #setFork(boolean)
-     *
-     * @since Ant 1.2
-     */
-    public void setDir(File dir) {
-        this.dir = dir;
-    }
-
-    /**
-     * Add a nested sysproperty element. This might be useful to tranfer
-     * Ant properties to the testcases when JVM forking is not enabled.
-     *
-     * @since Ant 1.3
-     */
-    public void addSysproperty(Environment.Variable sysp) {
-        commandline.addSysproperty(sysp);
-    }
-
-    /**
-     * <code>&lt;classpath&gt;</code> allows classpath to be set for tests.
-     *
-     * @since Ant 1.2
-     */
-    public Path createClasspath() {
-        return commandline.createClasspath(project).createPath();
-    }
-
-    /**
-     * Add a nested env element - an environment variable.
-     *
-     * <p>Will be ignored if we are not forking a new VM.</p>
-     *
-     * @since Ant 1.5
-     */
-    public void addEnv(Environment.Variable var) {
-        env.addVariable(var);
-    }
-
-    /**
-     * Use a completely new environment.
-     *
-     * <p>Will be ignored if we are not forking a new VM.</p>
-     *
-     * @since Ant 1.5
-     */
-    public void setNewenvironment(boolean newenv) {
-        newEnvironment = newenv;
-    }
-
-    /**
-     * Add a new single testcase.
-     * @param   test    a new single testcase
-     * @see JUnitTest
-     *
-     * @since Ant 1.2
-     */
-    public void addTest(JUnitTest test) {
-        tests.addElement(test);
-    }
-
-    /**
-     * Create a new set of testcases (also called ..batchtest) and add
-     * it to the list.
-     * @return  a new instance of a batch test.
-     * @see BatchTest
-     *
-     * @since Ant 1.2
-     */
-    public BatchTest createBatchTest() {
-        BatchTest test = new BatchTest(project);
-        batchTests.addElement(test);
-        return test;
-    }
-
-    /**
-     * Add a new formatter to all tests of this task.
-     *
-     * @since Ant 1.2
-     */
-    public void addFormatter(FormatterElement fe) {
-        formatters.addElement(fe);
-    }
-
-    /**
-     * Whether to include ant.jar, optional.jar and junit.jar in the forked VM.
-     *
-     * @since Ant 1.5
-     */
-    public void setIncludeantruntime(boolean b) {
-        includeAntRuntime = b;
-    }
-
-    /**
-     * Whether to send output of the testcases to Ant's logging system or not.
-     *
-     * <p>Output will always be passed to the formatters and not by
-     * shown by default.  This option should for example be set for
-     * tests that are interactive and prompt the user to do
-     * something.</p>
-     *
-     * @since Ant 1.5
-     */
-    public void setShowOutput(boolean showOutput) {
-        this.showOutput = showOutput;
-    }
-
-    /**
-     * Creates a new JUnitRunner and enables fork of a new Java VM.
-     *
-     * @since Ant 1.2
-     */
-    public JUnitTask() throws Exception {
-        commandline
-            .setClassname("org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner");
-    }
-
-    /**
-     * Adds the jars or directories containing Ant, this task and
-     * JUnit to the classpath - this should make the forked JVM work
-     * without having to specify them directly.
-     *
-     * @since Ant 1.4
-     */
-    public void init() {
-        antRuntimeClasses = new Path(getProject());
-        addClasspathEntry("/junit/framework/TestCase.class");
-        addClasspathEntry("/org/apache/tools/ant/Task.class");
-        addClasspathEntry("/org/apache/tools/ant/taskdefs/optional/junit/JUnitTestRunner.class");
-    }
-
-    /**
-     * Runs the testcase.
-     *
-     * @since Ant 1.2
-     */
-    public void execute() throws BuildException {
-        Enumeration list = getIndividualTests();
-        while (list.hasMoreElements()) {
-            JUnitTest test = (JUnitTest) list.nextElement();
-            if (test.shouldRun(project)) {
-                execute(test);
-            }
-        }
-    }
-
-    /**
-     * Run the tests.
-     */
-    protected void execute(JUnitTest arg) throws BuildException {
-        JUnitTest test = (JUnitTest) arg.clone();
-        // set the default values if not specified
-        //@todo should be moved to the test class instead.
-        if (test.getTodir() == null) {
-            test.setTodir(project.resolveFile("."));
-        }
-
-        if (test.getOutfile() == null) {
-            test.setOutfile("TEST-" + test.getName());
-        }
-
-        // execute the test and get the return code
-        int exitValue = JUnitTestRunner.ERRORS;
-        boolean wasKilled = false;
-        if (!test.getFork()) {
-            exitValue = executeInVM(test);
-        } else {
-            ExecuteWatchdog watchdog = createWatchdog();
-            exitValue = executeAsForked(test, watchdog);
-            // null watchdog means no timeout, you'd better not check with null
-            if (watchdog != null) {
-                wasKilled = watchdog.killedProcess();
-            }
-        }
-
-        // if there is an error/failure and that it should halt, stop
-        // everything otherwise just log a statement
-        boolean errorOccurredHere = exitValue == JUnitTestRunner.ERRORS;
-        boolean failureOccurredHere = exitValue != JUnitTestRunner.SUCCESS;
-        if (errorOccurredHere || failureOccurredHere) {
-            if ((errorOccurredHere && test.getHaltonerror())
-                || (failureOccurredHere && test.getHaltonfailure())) {
-                throw new BuildException("Test " + test.getName() + " failed"
-                    + (wasKilled ? " (timeout)" : ""), location);
-            } else {
-                log("TEST " + test.getName() + " FAILED"
-                    + (wasKilled ? " (timeout)" : ""), Project.MSG_ERR);
-                if (errorOccurredHere && test.getErrorProperty() != null) {
-                    project.setNewProperty(test.getErrorProperty(), "true");
-                }
-                if (failureOccurredHere && test.getFailureProperty() != null) {
-                    project.setNewProperty(test.getFailureProperty(), "true");
-                }
-            }
-        }
-    }
-
-    /**
-     * Execute a testcase by forking a new JVM. The command will block until
-     * it finishes. To know if the process was destroyed or not, use the
-     * <tt>killedProcess()</tt> method of the watchdog class.
-     * @param  test       the testcase to execute.
-     * @param  watchdog   the watchdog in charge of cancelling the test if it
-     * exceeds a certain amount of time. Can be <tt>null</tt>, in this case
-     * the test could probably hang forever.
-     */
-    private int executeAsForked(JUnitTest test, ExecuteWatchdog watchdog) 
-        throws BuildException {
-
-        CommandlineJava cmd = (CommandlineJava) commandline.clone();
-
-        cmd.setClassname("org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner");
-        cmd.createArgument().setValue(test.getName());
-        cmd.createArgument().setValue("filtertrace=" + test.getFiltertrace());
-        cmd.createArgument().setValue("haltOnError=" + test.getHaltonerror());
-        cmd.createArgument().setValue("haltOnFailure=" 
-                                      + test.getHaltonfailure());
-        if (includeAntRuntime) {
-            log("Implicitly adding " + antRuntimeClasses + " to CLASSPATH",
-                Project.MSG_VERBOSE);
-            cmd.createClasspath(getProject()).createPath()
-                .append(antRuntimeClasses);
-        }
-
-        if (summary) {
-            log("Running " + test.getName(), Project.MSG_INFO);
-            cmd.createArgument()
-                .setValue("formatter=org.apache.tools.ant.taskdefs.optional.junit.SummaryJUnitResultFormatter");
-        }
-
-        cmd.createArgument().setValue("showoutput=" 
-                                      + String.valueOf(showOutput));
-
-        StringBuffer formatterArg = new StringBuffer(128);
-        final FormatterElement[] feArray = mergeFormatters(test);
-        for (int i = 0; i < feArray.length; i++) {
-            FormatterElement fe = feArray[i];
-            formatterArg.append("formatter=");
-            formatterArg.append(fe.getClassname());
-            File outFile = getOutput(fe, test);
-            if (outFile != null) {
-                formatterArg.append(",");
-                formatterArg.append(outFile);
-            }
-            cmd.createArgument().setValue(formatterArg.toString());
-            formatterArg.setLength(0);
-        }
-
-        // Create a temporary file to pass the Ant properties to the
-        // forked test
-        File propsFile = 
-            FileUtils.newFileUtils().createTempFile("junit", ".properties",
-                                                    project.getBaseDir());
-        cmd.createArgument().setValue("propsfile=" 
-                                      + propsFile.getAbsolutePath());
-        Hashtable p = project.getProperties();
-        Properties props = new Properties();
-        for (Enumeration enum = p.keys(); enum.hasMoreElements();) {
-            Object key = enum.nextElement();
-            props.put(key, p.get(key));
-        }
-        try {
-            FileOutputStream outstream = new FileOutputStream(propsFile);
-            props.save(outstream, "Ant JUnitTask generated properties file");
-            outstream.close();
-        } catch (java.io.IOException e) {
-            propsFile.delete();
-            throw new BuildException("Error creating temporary properties "
-                                     + "file.", e, location);
-        }
-
-        Execute execute = new Execute(new LogStreamHandler(this, 
-                                                           Project.MSG_INFO, 
-                                                           Project.MSG_WARN),
-                                      watchdog);
-        execute.setCommandline(cmd.getCommandline());
-        execute.setAntRun(project);
-        if (dir != null) {
-            execute.setWorkingDirectory(dir);
-        }
-
-        String[] environment = env.getVariables();
-        if (environment != null) {
-            for (int i = 0; i < environment.length; i++) {
-                log("Setting environment variable: " + environment[i],
-                    Project.MSG_VERBOSE);
-            }
-        }
-        execute.setNewenvironment(newEnvironment);
-        execute.setEnvironment(environment);
-
-        log(cmd.describeCommand(), Project.MSG_VERBOSE);
-        int retVal;
-        try {
-            retVal = execute.execute();
-        } catch (IOException e) {
-            throw new BuildException("Process fork failed.", e, location);
-        } finally {
-            if (!propsFile.delete()) {
-                throw new BuildException("Could not delete temporary "
-                                         + "properties file.");
-            }
-        }
-
-        return retVal;
-    }
-
-
-    /**
-     * Pass output sent to System.out to the TestRunner so it can
-     * collect ot for the formatters.
-     *
-     * @since Ant 1.5
-     */
-    protected void handleOutput(String line) {
-        if (runner != null) {
-            runner.handleOutput(line);
-            if (showOutput) {
-                super.handleOutput(line);
-            }
-        } else {
-            super.handleOutput(line);
-        }
-    }
-
-    /**
-     * Pass output sent to System.err to the TestRunner so it can
-     * collect ot for the formatters.
-     *
-     * @since Ant 1.5
-     */
-    protected void handleErrorOutput(String line) {
-        if (runner != null) {
-            runner.handleErrorOutput(line);
-            if (showOutput) {
-                super.handleErrorOutput(line);
-            }
-        } else {
-            super.handleErrorOutput(line);
-        }
-    }
-
-    // in VM is not very nice since it could probably hang the
-    // whole build. IMHO this method should be avoided and it would be best
-    // to remove it in future versions. TBD. (SBa)
-
-    /**
-     * Execute inside VM.
-     */
-    private int executeInVM(JUnitTest arg) throws BuildException {
-        JUnitTest test = (JUnitTest) arg.clone();
-        test.setProperties(project.getProperties());
-        if (dir != null) {
-            log("dir attribute ignored if running in the same VM", 
-                Project.MSG_WARN);
-        }
-
-        if (newEnvironment || null != env.getVariables()) {
-            log("Changes to environment variables are ignored if running in "
-                + "the same VM.", Project.MSG_WARN);
-        }
-
-        CommandlineJava.SysProperties sysProperties = 
-            commandline.getSystemProperties();
-        if (sysProperties != null) {
-            sysProperties.setSystem();
-        }
-        AntClassLoader cl = null;
-        try {
-            log("Using System properties " + System.getProperties(), 
-                Project.MSG_VERBOSE);
-            Path userClasspath = commandline.getClasspath();
-            Path classpath = userClasspath == null 
-                                              ? null 
-                                              : (Path) userClasspath.clone();
-            if (classpath != null) {
-                if (includeAntRuntime) {
-                    log("Implicitly adding " + antRuntimeClasses 
-                        + " to CLASSPATH", Project.MSG_VERBOSE);
-                    classpath.append(antRuntimeClasses);
-                }
-
-                cl = new AntClassLoader(null, project, classpath, false);
-                log("Using CLASSPATH " + cl.getClasspath(),
-                    Project.MSG_VERBOSE);
-
-                // make sure the test will be accepted as a TestCase
-                cl.addSystemPackageRoot("junit");
-                // will cause trouble in JDK 1.1 if omitted
-                cl.addSystemPackageRoot("org.apache.tools.ant");
-                cl.setThreadContextLoader();
-            }
-            runner = new JUnitTestRunner(test, test.getHaltonerror(), 
-                                         test.getFiltertrace(), 
-                                         test.getHaltonfailure(), cl);
-            if (summary) {
-                log("Running " + test.getName(), Project.MSG_INFO);
-
-                SummaryJUnitResultFormatter f = 
-                    new SummaryJUnitResultFormatter();
-                f.setWithOutAndErr("withoutanderr"
-                                   .equalsIgnoreCase(summaryValue));
-                f.setOutput(getDefaultOutput());
-                runner.addFormatter(f);
-            }
-
-            final FormatterElement[] feArray = mergeFormatters(test);
-            for (int i = 0; i < feArray.length; i++) {
-                FormatterElement fe = feArray[i];
-                File outFile = getOutput(fe, test);
-                if (outFile != null) {
-                    fe.setOutfile(outFile);
-                } else {
-                    fe.setOutput(getDefaultOutput());
-                }
-                runner.addFormatter(fe.createFormatter());
-            }
-
-            runner.run();
-            return runner.getRetCode();
-        } finally{
-            if (sysProperties != null) {
-                sysProperties.restoreSystem();
-            }
-            if (cl != null) {
-                cl.resetThreadContextLoader();
-            }
-        }
-    }
-
-    /**
-     * @return <tt>null</tt> if there is a timeout value, otherwise the
-     * watchdog instance.
-     *
-     * @since Ant 1.2
-     */
-    protected ExecuteWatchdog createWatchdog() throws BuildException {
-        if (timeout == null){
-            return null;
-        }
-        return new ExecuteWatchdog(timeout.intValue());
-    }
-
-    /**
-     * Get the default output for a formatter.
-     *
-     * @since Ant 1.3
-     */
-    protected OutputStream getDefaultOutput(){
-        return new LogOutputStream(this, Project.MSG_INFO);
-    }
-
-    /**
-     * Merge all individual tests from the batchtest with all individual tests
-     * and return an enumeration over all <tt>JUnitTest</tt>.
-     *
-     * @since Ant 1.3
-     */
-    protected Enumeration getIndividualTests(){
-        final int count = batchTests.size();
-        final Enumeration[] enums = new Enumeration[ count + 1];
-        for (int i = 0; i < count; i++) {
-            BatchTest batchtest = (BatchTest) batchTests.elementAt(i);
-            enums[i] = batchtest.elements();
-        }
-        enums[enums.length - 1] = tests.elements();
-        return Enumerations.fromCompound(enums);
-    }
-
-    /**
-     * @since Ant 1.3
-     */
-    protected Enumeration allTests() {
-        Enumeration[] enums = { tests.elements(), batchTests.elements() };
-        return Enumerations.fromCompound(enums);
-    }
-
-    /**
-     * @since Ant 1.3
-     */
-    private FormatterElement[] mergeFormatters(JUnitTest test){
-        Vector feVector = (Vector) formatters.clone();
-        test.addFormattersTo(feVector);
-        FormatterElement[] feArray = new FormatterElement[feVector.size()];
-        feVector.copyInto(feArray);
-        return feArray;
-    }
-
-    /** 
-     * If the formatter sends output to a file, return that file.
-     * null otherwise.
-     *
-     * @since Ant 1.3
-     */
-    protected File getOutput(FormatterElement fe, JUnitTest test){
-        if (fe.getUseFile()) {
-            String filename = test.getOutfile() + fe.getExtension();
-            File destFile = new File(test.getTodir(), filename);
-            String absFilename = destFile.getAbsolutePath();
-            return project.resolveFile(absFilename);
-        }
-        return null;
-    }
-
-    /**
-     * Search for the given resource and add the directory or archive
-     * that contains it to the classpath.
-     *
-     * <p>Doesn't work for archives in JDK 1.1 as the URL returned by
-     * getResource doesn't contain the name of the archive.</p>
-     *
-     * @since Ant 1.4
-     */
-    protected void addClasspathEntry(String resource) {
-        URL url = getClass().getResource(resource);
-        if (url != null) {
-            String u = url.toString();
-            if (u.startsWith("jar:file:")) {
-                int pling = u.indexOf("!");
-                String jarName = u.substring(9, pling);
-                log("Found " + jarName, Project.MSG_DEBUG);
-                antRuntimeClasses.createPath()
-                    .setLocation(new File((new File(jarName))
-                                          .getAbsolutePath()));
-            } else if (u.startsWith("file:")) {
-                int tail = u.indexOf(resource);
-                String dirName = u.substring(5, tail);
-                log("Found " + dirName, Project.MSG_DEBUG);
-                antRuntimeClasses.createPath()
-                    .setLocation(new File((new File(dirName))
-                                          .getAbsolutePath()));
-            } else {
-                log("Don\'t know how to handle resource URL " + u,
-                    Project.MSG_DEBUG);
-            }
-        } else {
-            log("Couldn\'t find " + resource, Project.MSG_DEBUG);
-        }
-    }
-
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTest.java b/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTest.java
deleted file mode 100644
index d429b8f..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTest.java
+++ /dev/null
@@ -1,220 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.junit;
-
-import org.apache.tools.ant.Project;
-
-import java.util.Enumeration;
-import java.util.Hashtable;
-import java.util.Properties;
-import java.util.Vector;
-
-/**
- * <p> Run a single JUnit test.
- *
- * <p> The JUnit test is actually run by {@link JUnitTestRunner}.
- * So read the doc comments for that class :)
- *
- * @author Thomas Haas
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>,
- * @author <a href="mailto:sbailliez@imediation.com">Stephane Bailliez</a>
- *
- * @since Ant 1.2
- *
- * @see JUnitTask
- * @see JUnitTestRunner
- */
-public class JUnitTest extends BaseTest implements Cloneable {
-    
-    /** the name of the test case */
-    private String name = null;
-    
-    /** the name of the result file */
-    private String outfile = null;
-
-    // @todo this is duplicating TestResult information. Only the time is not
-    // part of the result. So we'd better derive a new class from TestResult
-    // and deal with it. (SB)
-    private long runs, failures, errors;
-    private long runTime;
-
-    // Snapshot of the system properties
-    private Properties props = null;
-
-    public JUnitTest() {
-    }
-
-    public JUnitTest(String name) {
-        this.name  = name;
-    }
-
-    public JUnitTest(String name, boolean haltOnError, boolean haltOnFailure, 
-                     boolean filtertrace) {
-        this.name  = name;
-        this.haltOnError = haltOnError;
-        this.haltOnFail = haltOnFailure;
-        this.filtertrace = filtertrace;
-    }
-
-    /** 
-     * Set the name of the test class.
-     */
-    public void setName(String value) {
-        name = value;
-    }
-
-    /**
-     * Set the name of the output file.
-     */
-    public void setOutfile(String value) {
-        outfile = value;
-    }
-
-    /** 
-     * Get the name of the test class.
-     */
-    public String getName() {
-        return name;
-    }
-
-    /**
-     * Get the name of the output file
-     * 
-     * @return the name of the output file.
-     */
-    public String getOutfile() {
-        return outfile;
-    }
-
-    public void setCounts(long runs, long failures, long errors) {
-        this.runs = runs;
-        this.failures = failures;
-        this.errors = errors;
-    }
-
-    public void setRunTime(long runTime) {
-        this.runTime = runTime;
-    }
-
-    public long runCount() {
-        return runs;
-    }
-    
-    public long failureCount() {
-        return failures;
-    }
-    
-    public long errorCount() {
-        return errors;
-    }
-    
-    public long getRunTime() {
-        return runTime;
-    }
-
-    public Properties getProperties() {
-        return props;
-    }
-    
-    public void setProperties(Hashtable p) { 
-        props = new Properties();  
-        for (Enumeration enum = p.keys(); enum.hasMoreElements();) {
-            Object key = enum.nextElement();
-            props.put(key, p.get(key));
-        }
-    }
-
-    public boolean shouldRun(Project p) {
-        if (ifProperty != null && p.getProperty(ifProperty) == null) {
-            return false;
-        } else if (unlessProperty != null && 
-                   p.getProperty(unlessProperty) != null) {
-            return false;
-        }
-
-        return true;
-    }
-
-    public FormatterElement[] getFormatters() {
-        FormatterElement[] fes = new FormatterElement[formatters.size()];
-        formatters.copyInto(fes);
-        return fes;
-    }
-
-    /**
-     * Convenient method to add formatters to a vector
-     */
-    void addFormattersTo(Vector v){
-        final int count = formatters.size();
-        for (int i = 0; i < count; i++){
-            v.addElement(formatters.elementAt(i));
-        }
-    }
-
-    /**
-     * @since Ant 1.5
-     */
-    public Object clone() {
-        try {
-            JUnitTest t = (JUnitTest) super.clone();
-            t.props = props == null ? null : (Properties) props.clone();
-            t.formatters = (Vector) formatters.clone();
-            return t;
-        } catch (CloneNotSupportedException e) {
-            // plain impossible
-            return this;
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTestRunner.java b/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTestRunner.java
deleted file mode 100644
index 2d71184..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTestRunner.java
+++ /dev/null
@@ -1,618 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.junit;
-
-import org.apache.tools.ant.AntClassLoader;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.util.StringUtils;
-
-import junit.framework.TestListener;
-import junit.framework.TestResult;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-import junit.framework.AssertionFailedError;
-import java.lang.reflect.Method;
-
-import java.io.BufferedReader;
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.PrintStream;
-import java.io.PrintWriter;
-import java.io.StringReader;
-import java.io.StringWriter;
-import java.util.Enumeration;
-import java.util.Hashtable;
-import java.util.Properties;
-import java.util.Vector;
-
-/**
- * Simple Testrunner for JUnit that runs all tests of a testsuite.
- *
- * <p>This TestRunner expects a name of a TestCase class as its
- * argument. If this class provides a static suite() method it will be
- * called and the resulting Test will be run. So, the signature should be 
- * <pre><code>
- *     public static junit.framework.Test suite()
- * </code></pre>
- *
- * <p> If no such method exists, all public methods starting with
- * "test" and taking no argument will be run.
- *
- * <p> Summary output is generated at the end. 
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- * @author <a href="mailto:ehatcher@apache.org">Erik Hatcher</a>
- *
- * @since Ant 1.2
- */
-
-public class JUnitTestRunner implements TestListener {
-
-    /**
-     * No problems with this test.
-     */
-    public static final int SUCCESS = 0;
-
-    /**
-     * Some tests failed.
-     */
-    public static final int FAILURES = 1;
-
-    /**
-     * An error occured.
-     */
-    public static final int ERRORS = 2;
-
-    /**
-     * Holds the registered formatters.
-     */
-    private Vector formatters = new Vector();
-
-    /**
-     * Collects TestResults.
-     */
-    private TestResult res;
-
-    /**
-     * Do we filter junit.*.* stack frames out of failure and error exceptions.
-     */
-    private static boolean filtertrace = true;
-    
-    /**
-     * Do we send output to System.out/.err in addition to the formatters?
-     */
-    private boolean showOutput = false;
-
-    private static final String[] DEFAULT_TRACE_FILTERS = new String[] {
-                "junit.framework.TestCase",
-                "junit.framework.TestResult",
-                "junit.framework.TestSuite",
-                "junit.framework.Assert.", // don't filter AssertionFailure
-                "junit.swingui.TestRunner",
-                "junit.awtui.TestRunner",
-                "junit.textui.TestRunner",
-                "java.lang.reflect.Method.invoke(",
-                "org.apache.tools.ant."
-        };
-
-    
-    /**
-     * Do we stop on errors.
-     */
-    private boolean haltOnError = false;
-
-    /**
-     * Do we stop on test failures.
-     */
-    private boolean haltOnFailure = false;
-
-    /**
-     * The corresponding testsuite.
-     */
-    private Test suite = null;
-
-    /**
-     * Exception caught in constructor.
-     */
-    private Exception exception;
-
-    /**
-     * Returncode
-     */
-    private int retCode = SUCCESS;
-
-    /**
-     * The TestSuite we are currently running.
-     */
-    private JUnitTest junitTest;
-
-    /** output written during the test */
-    private PrintStream systemError;
-    
-    /** Error output during the test */
-    private PrintStream systemOut;    
-    
-    /** is this runner running in forked mode? */
-    private boolean forked = false;
-
-    /**
-     * Constructor for fork=true or when the user hasn't specified a
-     * classpath.  
-     */
-    public JUnitTestRunner(JUnitTest test, boolean haltOnError, 
-                           boolean filtertrace, boolean haltOnFailure) {
-        this(test, haltOnError, filtertrace, haltOnFailure, false);
-    }
-
-    /**
-     * Constructor for fork=true or when the user hasn't specified a
-     * classpath.  
-     */
-    public JUnitTestRunner(JUnitTest test, boolean haltOnError, 
-                           boolean filtertrace, boolean haltOnFailure,
-                           boolean showOutput) {
-        this(test, haltOnError, filtertrace, haltOnFailure, showOutput, null);
-    }
-
-    /**
-     * Constructor to use when the user has specified a classpath.
-     */
-    public JUnitTestRunner(JUnitTest test, boolean haltOnError, 
-                           boolean filtertrace, boolean haltOnFailure, 
-                           ClassLoader loader) {
-        this(test, haltOnError, filtertrace, haltOnFailure, false, loader);
-    }
-
-    /**
-     * Constructor to use when the user has specified a classpath.
-     */
-    public JUnitTestRunner(JUnitTest test, boolean haltOnError, 
-                           boolean filtertrace, boolean haltOnFailure, 
-                           boolean showOutput, ClassLoader loader) {
-        this.filtertrace = filtertrace;
-        this.junitTest = test;
-        this.haltOnError = haltOnError;
-        this.haltOnFailure = haltOnFailure;
-        this.showOutput = showOutput;
-
-        try {
-            Class testClass = null;
-            if (loader == null) {
-                testClass = Class.forName(test.getName());
-            } else {
-                testClass = loader.loadClass(test.getName());
-                AntClassLoader.initializeClass(testClass);
-            }
-            
-            Method suiteMethod = null;
-            try {
-                // check if there is a suite method
-                suiteMethod = testClass.getMethod("suite", new Class[0]);
-            } catch (Exception e) {
-                // no appropriate suite method found. We don't report any
-                // error here since it might be perfectly normal. We don't
-                // know exactly what is the cause, but we're doing exactly
-                // the same as JUnit TestRunner do. We swallow the exceptions.
-            }
-            if (suiteMethod != null){
-                // if there is a suite method available, then try
-                // to extract the suite from it. If there is an error
-                // here it will be caught below and reported.
-                suite = (Test) suiteMethod.invoke(null, new Class[0]);
-            } else {
-                // try to extract a test suite automatically
-                // this will generate warnings if the class is no suitable Test
-                suite = new TestSuite(testClass);
-            }
-            
-        } catch (Exception e) {
-            retCode = ERRORS;
-            exception = e;
-        }
-    }
-
-    public void run() {
-        res = new TestResult();
-        res.addListener(this);
-        for (int i = 0; i < formatters.size(); i++) {
-            res.addListener((TestListener) formatters.elementAt(i));
-        }
-
-        long start = System.currentTimeMillis();
-
-        fireStartTestSuite();
-        if (exception != null) { // had an exception in the constructor
-            for (int i = 0; i < formatters.size(); i++) {
-                ((TestListener) formatters.elementAt(i)).addError(null, 
-                                                                 exception);
-            }
-            junitTest.setCounts(1, 0, 1);
-            junitTest.setRunTime(0);
-        } else {
-
-
-            ByteArrayOutputStream errStrm = new ByteArrayOutputStream();
-            systemError = new PrintStream(errStrm);
-            
-            ByteArrayOutputStream outStrm = new ByteArrayOutputStream();
-            systemOut = new PrintStream(outStrm);
-
-            PrintStream savedOut = null;
-            PrintStream savedErr = null;
-
-            if (forked) {
-                savedOut = System.out;
-                savedErr = System.err;
-                if (!showOutput) {
-                    System.setOut(systemOut);
-                    System.setErr(systemError);
-                } else {
-                    System.setOut(new PrintStream(
-                                      new TeeOutputStream(
-                                          new OutputStream[] {savedOut, 
-                                                              systemOut}
-                                          )
-                                      )
-                                  );
-                    System.setErr(new PrintStream(
-                                      new TeeOutputStream(
-                                          new OutputStream[] {savedErr, 
-                                                              systemError}
-                                          )
-                                      )
-                                  );
-                }
-            }
-            
-
-            try {
-                suite.run(res);
-            } finally {
-                if (savedOut != null) {
-                    System.setOut(savedOut);
-                }
-                if (savedErr != null) {
-                    System.setErr(savedOut);
-                }
-                
-                systemError.close();
-                systemError = null;
-                systemOut.close();
-                systemOut = null;
-                sendOutAndErr(new String(outStrm.toByteArray()),
-                              new String(errStrm.toByteArray()));
-
-                junitTest.setCounts(res.runCount(), res.failureCount(), 
-                                    res.errorCount());
-                junitTest.setRunTime(System.currentTimeMillis() - start);
-            }
-        }
-        fireEndTestSuite();
-
-        if (retCode != SUCCESS || res.errorCount() != 0) {
-            retCode = ERRORS;
-        } else if (res.failureCount() != 0) {
-            retCode = FAILURES;
-        }
-    }
-
-    /**
-     * Returns what System.exit() would return in the standalone version.
-     *
-     * @return 2 if errors occurred, 1 if tests failed else 0.
-     */
-    public int getRetCode() {
-        return retCode;
-    }
-
-    /**
-     * Interface TestListener.
-     *
-     * <p>A new Test is started.
-     */
-    public void startTest(Test t) {}
-
-    /**
-     * Interface TestListener.
-     *
-     * <p>A Test is finished.
-     */
-    public void endTest(Test test) {}
-
-    /**
-     * Interface TestListener for JUnit &lt;= 3.4.
-     *
-     * <p>A Test failed.
-     */
-    public void addFailure(Test test, Throwable t) {
-        if (haltOnFailure) {
-            res.stop();
-        }
-    }
-
-    /**
-     * Interface TestListener for JUnit &gt; 3.4.
-     *
-     * <p>A Test failed.
-     */
-    public void addFailure(Test test, AssertionFailedError t) {
-        addFailure(test, (Throwable) t);
-    }
-
-    /**
-     * Interface TestListener.
-     *
-     * <p>An error occured while running the test.
-     */
-    public void addError(Test test, Throwable t) {
-        if (haltOnError) {
-            res.stop();
-        }
-    }
-
-    protected void handleOutput(String line) {
-        if (systemOut != null) {
-            systemOut.println(line);
-        }
-    }
-    
-    protected void handleErrorOutput(String line) {
-        if (systemError != null) {
-            systemError.println(line);
-        }
-    }
-    
-    private void sendOutAndErr(String out, String err) {
-        for (int i = 0; i < formatters.size(); i++) {
-            JUnitResultFormatter formatter = 
-                ((JUnitResultFormatter) formatters.elementAt(i));
-            
-            formatter.setSystemOutput(out);
-            formatter.setSystemError(err);
-        }
-    }
-
-    private void fireStartTestSuite() {
-        for (int i = 0; i < formatters.size(); i++) {
-            ((JUnitResultFormatter) formatters.elementAt(i))
-                .startTestSuite(junitTest);
-        }
-    }
-
-    private void fireEndTestSuite() {
-        for (int i = 0; i < formatters.size(); i++) {
-            ((JUnitResultFormatter) formatters.elementAt(i))
-                .endTestSuite(junitTest);
-        }
-    }
-
-    public void addFormatter(JUnitResultFormatter f) {
-        formatters.addElement(f);
-    }
-
-    /**
-     * Entry point for standalone (forked) mode.
-     *
-     * Parameters: testcaseclassname plus parameters in the format
-     * key=value, none of which is required.
-     *
-     * <table cols="4" border="1">
-     * <tr><th>key</th><th>description</th><th>default value</th></tr>
-     *
-     * <tr><td>haltOnError</td><td>halt test on
-     * errors?</td><td>false</td></tr>
-     *
-     * <tr><td>haltOnFailure</td><td>halt test on
-     * failures?</td><td>false</td></tr>
-     *
-     * <tr><td>formatter</td><td>A JUnitResultFormatter given as
-     * classname,filename. If filename is ommitted, System.out is
-     * assumed.</td><td>none</td></tr>
-     *
-     * <tr><td>showoutput</td><td>send output to System.err/.out as
-     * well as to the formatters?</td><td>false</td></tr>
-     *
-     * </table> 
-     */
-    public static void main(String[] args) throws IOException {
-        boolean exitAtEnd = true;
-        boolean haltError = false;
-        boolean haltFail = false;
-        boolean stackfilter = true;
-        Properties props = new Properties();
-        boolean showOut = false;
-
-        if (args.length == 0) {
-            System.err.println("required argument TestClassName missing");
-            System.exit(ERRORS);
-        }
-
-        for (int i = 1; i < args.length; i++) {
-            if (args[i].startsWith("haltOnError=")) {
-                haltError = Project.toBoolean(args[i].substring(12));
-            } else if (args[i].startsWith("haltOnFailure=")) {
-                haltFail = Project.toBoolean(args[i].substring(14));
-            } else if (args[i].startsWith("filtertrace=")) {
-                stackfilter = Project.toBoolean(args[i].substring(12));
-            } else if (args[i].startsWith("formatter=")) {
-                try {
-                    createAndStoreFormatter(args[i].substring(10));
-                } catch (BuildException be) {
-                    System.err.println(be.getMessage());
-                    System.exit(ERRORS);
-                }
-            } else if (args[i].startsWith("propsfile=")) {
-                FileInputStream in = new FileInputStream(args[i]
-                                                         .substring(10));
-                props.load(in);
-                in.close();
-            } else if (args[i].startsWith("showoutput=")) {
-                showOut = Project.toBoolean(args[i].substring(11));
-            }
-        }
-        
-        JUnitTest t = new JUnitTest(args[0]);
-        
-        // Add/overlay system properties on the properties from the Ant project
-        Hashtable p = System.getProperties();
-        for (Enumeration enum = p.keys(); enum.hasMoreElements();) {
-            Object key = enum.nextElement();
-            props.put(key, p.get(key));
-        }
-        t.setProperties(props);
-
-        JUnitTestRunner runner = new JUnitTestRunner(t, haltError, stackfilter,
-                                                     haltFail, showOut);
-        runner.forked = true;
-        transferFormatters(runner);
-        runner.run();
-        System.exit(runner.getRetCode());
-    }
-
-    private static Vector fromCmdLine = new Vector();
-
-    private static void transferFormatters(JUnitTestRunner runner) {
-        for (int i = 0; i < fromCmdLine.size(); i++) {
-            runner.addFormatter((JUnitResultFormatter) fromCmdLine
-                                .elementAt(i));
-        }
-    }
-
-    /**
-     * Line format is: formatter=<classname>(,<pathname>)?
-     */
-    private static void createAndStoreFormatter(String line)
-        throws BuildException {
-        FormatterElement fe = new FormatterElement();
-        int pos = line.indexOf(',');
-        if (pos == -1) {
-            fe.setClassname(line);
-        } else {
-            fe.setClassname(line.substring(0, pos));
-            fe.setOutfile(new File(line.substring(pos + 1)));
-        }
-        fromCmdLine.addElement(fe.createFormatter());
-    }
-    
-    /**
-     * Returns a filtered stack trace.
-     * This is ripped out of junit.runner.BaseTestRunner.
-     * Scott M. Stirling.
-     */
-    public static String getFilteredTrace(Throwable t) {
-        String trace = StringUtils.getStackTrace(t);
-        return JUnitTestRunner.filterStack(trace);
-    }
-
-    /**
-     * Filters stack frames from internal JUnit and Ant classes
-     */
-    public static String filterStack(String stack) {
-        if (!filtertrace) {
-            return stack;
-        }
-        StringWriter sw = new StringWriter();
-        PrintWriter pw = new PrintWriter(sw);
-        StringReader sr = new StringReader(stack);
-        BufferedReader br = new BufferedReader(sr);
-
-        String line;
-        try {
-            while ((line = br.readLine()) != null) {
-                if (!filterLine(line)) {
-                    pw.println(line);
-                }
-            }
-        } catch (Exception IOException) {
-            return stack; // return the stack unfiltered
-        }
-        return sw.toString();
-    }
-
-    private static boolean filterLine(String line) {
-        for (int i = 0; i < DEFAULT_TRACE_FILTERS.length; i++) {
-            if (line.indexOf(DEFAULT_TRACE_FILTERS[i]) > 0) {
-                return true;
-            }
-        }
-        return false;
-    }
-    
-    /**
-     * Helper class that sends output sent to multiple streams.
-     *
-     * @since Ant 1.5
-     */
-    private class TeeOutputStream extends OutputStream {
-
-        private OutputStream[] outs;
-
-        private TeeOutputStream(OutputStream[] outs) {
-            this.outs = outs;
-        }
-
-        public void write(int b) throws IOException {
-            for (int i = 0; i  < outs.length; i++) {
-                outs[i].write(b);
-            }
-        }
-
-    }
-
-} // JUnitTestRunner
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitVersionHelper.java b/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitVersionHelper.java
deleted file mode 100644
index f76561b..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitVersionHelper.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.junit;
-
-import java.lang.reflect.Method;
-
-import junit.framework.Test;
-import junit.framework.TestCase;
-
-/**
- * Work around for some changes to the public JUnit API between
- * different JUnit releases.
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- * @version $Revision$
- */
-public class JUnitVersionHelper {
-
-    private static Method testCaseName = null;
-    static {
-        try {
-            testCaseName = TestCase.class.getMethod("getName", new Class[0]);
-        } catch (NoSuchMethodException e) {
-            // pre JUnit 3.7
-            try {
-                testCaseName = TestCase.class.getMethod("name", new Class[0]);
-            } catch (NoSuchMethodException e2) {}
-        }
-    }
-
-    /**
-     * JUnit 3.7 introduces TestCase.getName() and subsequent versions
-     * of JUnit remove the old name() method.  This method provides
-     * access to the name of a TestCase via reflection that is
-     * supposed to work with version before and after JUnit 3.7.
-     */
-    public static String getTestCaseName(Test t) {
-        if (t instanceof TestCase && testCaseName != null) {
-            try {
-                return (String) testCaseName.invoke(t, new Object[0]);
-            } catch (Throwable e) {}
-        }
-        return "unknown";
-    }
-
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/junit/PlainJUnitResultFormatter.java b/src/main/org/apache/tools/ant/taskdefs/optional/junit/PlainJUnitResultFormatter.java
deleted file mode 100644
index a87c5f4..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/junit/PlainJUnitResultFormatter.java
+++ /dev/null
@@ -1,257 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.junit;
-
-import org.apache.tools.ant.BuildException;
-
-import java.io.OutputStream;
-import java.io.StringWriter;
-import java.io.PrintWriter;
-import java.io.IOException;
-import java.text.NumberFormat;
-import java.util.Hashtable;
-
-import junit.framework.AssertionFailedError;
-import junit.framework.Test;
-
-
-/**
- * Prints plain text output of the test to a specified Writer.
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- */
-
-public class PlainJUnitResultFormatter implements JUnitResultFormatter {
-
-    /**
-     * Formatter for timings.
-     */
-    private NumberFormat nf = NumberFormat.getInstance();
-    /**
-     * Timing helper.
-     */
-    private Hashtable testStarts = new Hashtable();
-    /**
-     * Where to write the log to.
-     */
-    private OutputStream out;
-    /**
-     * Helper to store intermediate output.
-     */
-    private StringWriter inner;
-    /**
-     * Convenience layer on top of {@link #inner inner}.
-     */
-    private PrintWriter wri;
-    /**
-     * Suppress endTest if testcase failed.
-     */
-    private Hashtable failed = new Hashtable();
-
-    private String systemOutput = null;
-    private String systemError = null;
-
-    public PlainJUnitResultFormatter() {
-        inner = new StringWriter();
-        wri = new PrintWriter(inner);
-    }
-
-    public void setOutput(OutputStream out) {
-        this.out = out;
-    }
-
-    public void setSystemOutput(String out) {
-        systemOutput = out;
-    }
-
-    public void setSystemError(String err) {
-        systemError = err;
-    }
-
-    /**
-     * Empty.
-     */
-    public void startTestSuite(JUnitTest suite) {
-    }
-
-    /**
-     * The whole testsuite ended.
-     */
-    public void endTestSuite(JUnitTest suite) throws BuildException {
-        String newLine = System.getProperty("line.separator");
-        StringBuffer sb = new StringBuffer("Testsuite: ");
-        sb.append(suite.getName());
-        sb.append(newLine);
-        sb.append("Tests run: ");
-        sb.append(suite.runCount());
-        sb.append(", Failures: ");
-        sb.append(suite.failureCount());
-        sb.append(", Errors: ");
-        sb.append(suite.errorCount());
-        sb.append(", Time elapsed: ");
-        sb.append(nf.format(suite.getRunTime() / 1000.0));
-        sb.append(" sec");
-        sb.append(newLine);
-        
-        // append the err and output streams to the log
-        if (systemOutput != null && systemOutput.length() > 0) {
-            sb.append("------------- Standard Output ---------------")
-                .append(newLine)
-                .append(systemOutput)
-                .append("------------- ---------------- ---------------")
-                .append(newLine);
-        }
-        
-        if (systemError != null && systemError.length() > 0) {
-            sb.append("------------- Standard Error -----------------")
-                .append(newLine)
-                .append(systemError)
-                .append("------------- ---------------- ---------------")
-                .append(newLine);
-        }
-
-        sb.append(newLine);
-
-        if (out != null) {
-            try {
-                out.write(sb.toString().getBytes());
-                wri.close();
-                out.write(inner.toString().getBytes());
-                out.flush();
-            } catch (IOException ioex) {
-                throw new BuildException("Unable to write output", ioex);
-            } finally {
-                if (out != System.out && out != System.err) {
-                    try {
-                        out.close();
-                    } catch (IOException e) {}
-                }
-            }
-        }
-    }
-
-    /**
-     * Interface TestListener.
-     *
-     * <p>A new Test is started.
-     */
-    public void startTest(Test t) {
-        testStarts.put(t, new Long(System.currentTimeMillis()));
-        failed.put(t, Boolean.FALSE);
-    }
-
-    /**
-     * Interface TestListener.
-     *
-     * <p>A Test is finished.
-     */
-    public void endTest(Test test) {
-        synchronized (wri) {
-            wri.print("Testcase: " 
-                      + JUnitVersionHelper.getTestCaseName(test));
-            if (Boolean.TRUE.equals(failed.get(test))) {
-                return;
-            }
-            Long l = (Long) testStarts.get(test);
-            wri.println(" took " 
-                        + nf.format((System.currentTimeMillis() - l.longValue())
-                                    / 1000.0)
-                        + " sec");
-        }
-    }
-
-    /**
-     * Interface TestListener for JUnit &lt;= 3.4.
-     *
-     * <p>A Test failed.
-     */
-    public void addFailure(Test test, Throwable t) {
-        formatError("\tFAILED", test, t);
-    }
-
-    /**
-     * Interface TestListener for JUnit &gt; 3.4.
-     *
-     * <p>A Test failed.
-     */
-    public void addFailure(Test test, AssertionFailedError t) {
-        addFailure(test, (Throwable) t);
-    }
-
-    /**
-     * Interface TestListener.
-     *
-     * <p>An error occured while running the test.
-     */
-    public void addError(Test test, Throwable t) {
-        formatError("\tCaused an ERROR", test, t);
-    }
-
-    private void formatError(String type, Test test, Throwable t) {
-        synchronized (wri) {
-            if (test != null) {
-                endTest(test);
-                failed.put(test, Boolean.TRUE);
-            }
-
-            wri.println(type);
-            wri.println(t.getMessage());
-            String strace = JUnitTestRunner.getFilteredTrace(t);
-            wri.print(strace);
-            wri.println("");
-        }
-    }
-    
-} // PlainJUnitResultFormatter
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/junit/SummaryJUnitResultFormatter.java b/src/main/org/apache/tools/ant/taskdefs/optional/junit/SummaryJUnitResultFormatter.java
deleted file mode 100644
index d3da0fa..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/junit/SummaryJUnitResultFormatter.java
+++ /dev/null
@@ -1,180 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.junit;
-
-import java.text.NumberFormat;
-import java.io.IOException;
-import java.io.OutputStream;
-import junit.framework.AssertionFailedError;
-import junit.framework.Test;
-
-import org.apache.tools.ant.BuildException;
-
-/**
- * Prints short summary output of the test to Ant's logging system.
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- */
- 
-public class SummaryJUnitResultFormatter implements JUnitResultFormatter {
-
-    /**
-     * Formatter for timings.
-     */
-    private NumberFormat nf = NumberFormat.getInstance();
-    /**
-     * OutputStream to write to.
-     */
-    private OutputStream out;
-
-    private boolean withOutAndErr = false;
-    private String systemOutput = null;
-    private String systemError = null;
-
-    /**
-     * Empty
-     */
-    public SummaryJUnitResultFormatter() {}
-    /**
-     * Empty
-     */
-    public void startTestSuite(JUnitTest suite) {}
-    /**
-     * Empty
-     */
-    public void startTest(Test t) {}
-    /**
-     * Empty
-     */
-    public void endTest(Test test) {}
-    /**
-     * Empty
-     */
-    public void addFailure(Test test, Throwable t) {}
-    /**
-     * Interface TestListener for JUnit &gt; 3.4.
-     *
-     * <p>A Test failed.
-     */
-    public void addFailure(Test test, AssertionFailedError t) {
-        addFailure(test, (Throwable) t);
-    }
-    /**
-     * Empty
-     */
-    public void addError(Test test, Throwable t) {}
-    
-    public void setOutput(OutputStream out) {
-        this.out = out;
-    }
-
-    public void setSystemOutput(String out) {
-        systemOutput = out;
-    }
-
-    public void setSystemError(String err) {
-        systemError = err;
-    }
-
-    /**
-     * Should the output to System.out and System.err be written to
-     * the summary.
-     */
-    public void setWithOutAndErr(boolean value) {
-        withOutAndErr = value;
-    }
-
-    /**
-     * The whole testsuite ended.
-     */
-    public void endTestSuite(JUnitTest suite) throws BuildException {
-        String newLine = System.getProperty("line.separator");
-        StringBuffer sb = new StringBuffer("Tests run: ");
-        sb.append(suite.runCount());
-        sb.append(", Failures: ");
-        sb.append(suite.failureCount());
-        sb.append(", Errors: ");
-        sb.append(suite.errorCount());
-        sb.append(", Time elapsed: ");
-        sb.append(nf.format(suite.getRunTime() / 1000.0));
-        sb.append(" sec");
-        sb.append(newLine);
-
-        if (withOutAndErr) {
-            if (systemOutput != null && systemOutput.length() > 0) {
-                sb.append("Output:").append(newLine).append(systemOutput)
-                    .append(newLine);
-            }
-            
-            if (systemError != null && systemError.length() > 0) {
-                sb.append("Error: ").append(newLine).append(systemError)
-                    .append(newLine);
-            }
-        }
-
-        try {
-            out.write(sb.toString().getBytes());
-            out.flush();
-        } catch (IOException ioex) {
-            throw new BuildException("Unable to write summary output", ioex);
-        } finally {
-            if (out != System.out && out != System.err) {
-                try {
-                    out.close();
-                } catch (IOException e) {}
-            }
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/junit/XMLConstants.java b/src/main/org/apache/tools/ant/taskdefs/optional/junit/XMLConstants.java
deleted file mode 100644
index 4e62e91..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/junit/XMLConstants.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.junit;
-
-/**
- * <p> Interface groups XML constants.
- * Interface that groups all constants used throughout the <tt>XML</tt>
- * documents that are generated by the <tt>XMLJUnitResultFormatter</tt>
- * As of now the DTD is:
- * <code><pre>
- * <----------------- @todo describe DTDs ---------------------->
- *
- * </pre></code>
- * @author <a href="mailto:sbailliez@imediation.com">Stephane Bailliez</a>
- * @see XMLJUnitResultFormatter
- * @see XMLResultAggregator
- */
-public interface XMLConstants {
-    /** the testsuites element for the aggregate document */
-    String TESTSUITES = "testsuites";
-
-    /** the testsuite element */
-    String TESTSUITE = "testsuite";
-
-    /** the testcase element */
-    String TESTCASE = "testcase";
-
-    /** the error element */
-    String ERROR = "error";
-
-    /** the failure element */
-    String FAILURE = "failure";
-
-    /** the system-err element */
-    String SYSTEM_ERR = "system-err";
-
-    /** the system-out element */
-    String SYSTEM_OUT = "system-out";
-
-    /** package attribute for the aggregate document */
-    String ATTR_PACKAGE = "package";
-
-    /** name attribute for property, testcase and testsuite elements */
-    String ATTR_NAME = "name";
-
-    /** time attribute for testcase and testsuite elements */
-    String ATTR_TIME = "time";
-
-    /** errors attribute for testsuite elements */
-    String ATTR_ERRORS = "errors";
-
-    /** failures attribute for testsuite elements */
-    String ATTR_FAILURES = "failures";
-
-    /** tests attribute for testsuite elements */
-    String ATTR_TESTS = "tests";
-
-    /** type attribute for failure and error elements */
-    String ATTR_TYPE = "type";
-
-    /** message attribute for failure elements */
-    String ATTR_MESSAGE = "message";
-
-    /** the properties element */
-    String PROPERTIES = "properties";
-
-    /** the property element */
-    String PROPERTY = "property";
-
-    /** value attribute for property elements */
-    String ATTR_VALUE = "value";
-
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/junit/XMLJUnitResultFormatter.java b/src/main/org/apache/tools/ant/taskdefs/optional/junit/XMLJUnitResultFormatter.java
deleted file mode 100644
index 4fc0b8f..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/junit/XMLJUnitResultFormatter.java
+++ /dev/null
@@ -1,282 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.junit;
-
-import java.io.OutputStream;
-import java.io.Writer;
-import java.io.OutputStreamWriter;
-import java.io.IOException;
-
-
-
-
-import java.util.Properties;
-import java.util.Enumeration;
-import java.util.Hashtable;
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.Text;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.util.DOMElementWriter;
-
-import junit.framework.AssertionFailedError;
-import junit.framework.Test;
-
-
-/**
- * Prints XML output of the test to a specified Writer.
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- * @author <a href="mailto:ehatcher@apache.org">Erik Hatcher</a>
- *
- * @see FormatterElement 
- */
-
-public class XMLJUnitResultFormatter implements JUnitResultFormatter, XMLConstants {
-
-    private static DocumentBuilder getDocumentBuilder() {
-        try {
-            return DocumentBuilderFactory.newInstance().newDocumentBuilder();
-        } catch (Exception exc) {
-            throw new ExceptionInInitializerError(exc);
-        }
-    }
-
-    /**
-     * The XML document.
-     */
-    private Document doc;
-    /**
-     * The wrapper for the whole testsuite.
-     */
-    private Element rootElement;
-    /**
-     * Element for the current test.
-     */
-    private Hashtable testElements = new Hashtable();
-    /**
-     * Timing helper.
-     */
-    private Hashtable testStarts = new Hashtable();
-    /**
-     * Where to write the log to.
-     */
-    private OutputStream out;
-
-    public XMLJUnitResultFormatter() {}
-
-    public void setOutput(OutputStream out) {
-        this.out = out;
-    }
-
-    public void setSystemOutput(String out) {
-        formatOutput(SYSTEM_OUT, out);
-    }
-
-    public void setSystemError(String out) {
-        formatOutput(SYSTEM_ERR, out);
-    }
-
-    /**
-     * The whole testsuite started.
-     */
-    public void startTestSuite(JUnitTest suite) {
-        doc = getDocumentBuilder().newDocument();
-        rootElement = doc.createElement(TESTSUITE);
-        rootElement.setAttribute(ATTR_NAME, suite.getName());
-
-        // Output properties
-        Element propsElement = doc.createElement(PROPERTIES);
-        rootElement.appendChild(propsElement);
-        Properties props = suite.getProperties();
-        if (props != null) {
-            Enumeration e = props.propertyNames();
-            while (e.hasMoreElements()) {
-                String name = (String) e.nextElement();
-                Element propElement = doc.createElement(PROPERTY);
-                propElement.setAttribute(ATTR_NAME, name);
-                propElement.setAttribute(ATTR_VALUE, props.getProperty(name));
-                propsElement.appendChild(propElement);
-            }
-        }
-    }
-
-    /**
-     * The whole testsuite ended.
-     */
-    public void endTestSuite(JUnitTest suite) throws BuildException {
-        rootElement.setAttribute(ATTR_TESTS, "" + suite.runCount());
-        rootElement.setAttribute(ATTR_FAILURES, "" + suite.failureCount());
-        rootElement.setAttribute(ATTR_ERRORS, "" + suite.errorCount());
-        rootElement.setAttribute(ATTR_TIME, "" + (suite.getRunTime() / 1000.0));
-        if (out != null) {
-            Writer wri = null;
-            try {
-                wri = new OutputStreamWriter(out, "UTF8");
-                wri.write("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n");
-                (new DOMElementWriter()).write(rootElement, wri, 0, "  ");
-                wri.flush();
-            } catch (IOException exc) {
-                throw new BuildException("Unable to write log file", exc);
-            } finally {
-                if (out != System.out && out != System.err) {
-                    if (wri != null) {
-                        try {
-                            wri.close();
-                        } catch (IOException e) {}
-                    }
-                }
-            }
-        }
-    }
-
-    /**
-     * Interface TestListener.
-     *
-     * <p>A new Test is started.
-     */
-    public void startTest(Test t) {
-        testStarts.put(t, new Long(System.currentTimeMillis()));
-
-        Element currentTest = doc.createElement(TESTCASE);
-        currentTest.setAttribute(ATTR_NAME, 
-                                 JUnitVersionHelper.getTestCaseName(t));
-        rootElement.appendChild(currentTest);
-        testElements.put(t, currentTest);
-    }
-
-    /**
-     * Interface TestListener.
-     *
-     * <p>A Test is finished.
-     */
-    public void endTest(Test test) {
-        Element currentTest = (Element) testElements.get(test);
-        
-        // Fix for bug #5637 - if a junit.extensions.TestSetup is
-        // used and throws an exception during setUp then startTest
-        // would never have been called
-        if (currentTest == null) {
-            startTest(test);
-            currentTest = (Element) testElements.get(test);
-        }
-        
-        Long l = (Long) testStarts.get(test);
-        currentTest.setAttribute(ATTR_TIME,
-            "" + ((System.currentTimeMillis() - l.longValue()) / 1000.0));
-    }
-
-    /**
-     * Interface TestListener for JUnit &lt;= 3.4.
-     *
-     * <p>A Test failed.
-     */
-    public void addFailure(Test test, Throwable t) {
-        formatError(FAILURE, test, t);
-    }
-
-    /**
-     * Interface TestListener for JUnit &gt; 3.4.
-     *
-     * <p>A Test failed.
-     */
-    public void addFailure(Test test, AssertionFailedError t) {
-        addFailure(test, (Throwable) t);
-    }
-
-    /**
-     * Interface TestListener.
-     *
-     * <p>An error occured while running the test.
-     */
-    public void addError(Test test, Throwable t) {
-        formatError(ERROR, test, t);
-    }
-
-    private void formatError(String type, Test test, Throwable t) {
-        if (test != null) {
-            endTest(test);
-        }
-
-        Element nested = doc.createElement(type);
-        Element currentTest = null;
-        if (test != null) {
-            currentTest = (Element) testElements.get(test);
-        } else {
-            currentTest = rootElement;
-        }
-
-        currentTest.appendChild(nested);
-
-        String message = t.getMessage();
-        if (message != null && message.length() > 0) {
-            nested.setAttribute(ATTR_MESSAGE, t.getMessage());
-        }
-        nested.setAttribute(ATTR_TYPE, t.getClass().getName());
-
-        String strace = JUnitTestRunner.getFilteredTrace(t);
-        Text trace = doc.createTextNode(strace);
-        nested.appendChild(trace);
-    }
-
-    private void formatOutput(String type, String output) {
-        Element nested = doc.createElement(type);
-        rootElement.appendChild(nested);
-        nested.appendChild(doc.createCDATASection(output));
-    }
-
-} // XMLJUnitResultFormatter
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/junit/XMLResultAggregator.java b/src/main/org/apache/tools/ant/taskdefs/optional/junit/XMLResultAggregator.java
deleted file mode 100644
index 9c3f32f..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/junit/XMLResultAggregator.java
+++ /dev/null
@@ -1,335 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.junit;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.OutputStreamWriter;
-import java.io.PrintWriter;
-
-import java.io.FileOutputStream;
-import java.util.Enumeration;
-import java.util.Vector;
-
-import org.w3c.dom.Element;
-import org.w3c.dom.Document;
-
-
-import org.xml.sax.SAXException;
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.DirectoryScanner;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.types.FileSet;
-import org.apache.tools.ant.util.DOMElementWriter;
-import org.apache.tools.ant.util.StringUtils;
-
-
-/**
- * <p> This is an helper class that will aggregate all testsuites under a specific
- * directory and create a new single document. It is not particulary clean but
- * should be helpful while I am thinking about another technique.
- *
- * <p> The main problem is due to the fact that a JVM can be forked for a testcase
- * thus making it impossible to aggregate all testcases since the listener is
- * (obviously) in the forked JVM. A solution could be to write a
- * TestListener that will receive events from the TestRunner via sockets. This
- * is IMHO the simplest way to do it to avoid this file hacking thing.
- *
- * @author <a href="mailto:sbailliez@imediation.com">Stephane Bailliez</a>
- *
- * @ant.task name="junitreport" category="testing"
- */
-public class XMLResultAggregator extends Task implements XMLConstants {
-
-    /** the list of all filesets, that should contains the xml to aggregate */
-    protected Vector filesets = new Vector();
-
-    /** the name of the result file */
-    protected String toFile;
-
-    /** the directory to write the file to */
-    protected File toDir;
-
-    protected Vector transformers = new Vector();
-
-    /** The default directory: <tt>&#046;</tt>. It is resolved from the project directory */
-    public static final String DEFAULT_DIR = ".";
-
-    /** the default file name: <tt>TESTS-TestSuites.xml</tt> */
-    public static final String DEFAULT_FILENAME = "TESTS-TestSuites.xml";
-
-
-    public AggregateTransformer createReport(){
-        AggregateTransformer transformer = new AggregateTransformer(this);
-        transformers.addElement(transformer);
-        return transformer;
-    }
-
-    /**
-     * Set the name of the file aggregating the results. It must be relative
-     * from the <tt>todir</tt> attribute. If not set it will use {@link #DEFAULT_FILENAME}
-     * @param  value   the name of the file.
-     * @see #setTodir(File)
-     */
-    public void setTofile(String value){
-        toFile = value;
-    }
-
-    /**
-     * Set the destination directory where the results should be written. If not
-     * set if will use {@link #DEFAULT_DIR}. When given a relative directory
-     * it will resolve it from the project directory.
-     * @param value    the directory where to write the results, absolute or
-     * relative.
-     */
-    public void setTodir(File value){
-        toDir = value;
-    }
-
-    /**
-     * Add a new fileset containing the xml results to aggregate
-     * @param    fs      the new fileset of xml results.
-     */
-    public void addFileSet(FileSet fs) {
-        filesets.addElement(fs);
-    }
-
-    /**
-     * Aggregate all testsuites into a single document and write it to the
-     * specified directory and file.
-     * @throws  BuildException  thrown if there is a serious error while writing
-     *          the document.
-     */
-    public void execute() throws BuildException {
-        Element rootElement = createDocument();
-        File destFile = getDestinationFile();
-        // write the document
-        try {
-            writeDOMTree(rootElement.getOwnerDocument(), destFile);
-        } catch (IOException e){
-            throw new BuildException("Unable to write test aggregate to '" + destFile + "'", e);
-        }
-        // apply transformation
-        Enumeration enum = transformers.elements();
-        while (enum.hasMoreElements()) {
-            AggregateTransformer transformer =
-                (AggregateTransformer) enum.nextElement();
-            transformer.setXmlDocument(rootElement.getOwnerDocument());
-            transformer.transform();
-        }
-    }
-
-    /**
-     * Get the full destination file where to write the result. It is made of
-     * the <tt>todir</tt> and <tt>tofile</tt> attributes.
-     * @return the destination file where should be written the result file.
-     */
-    protected File getDestinationFile(){
-        if (toFile == null){
-            toFile = DEFAULT_FILENAME;
-        }
-        if (toDir == null){
-            toDir = project.resolveFile(DEFAULT_DIR);
-        }
-        return new File(toDir, toFile);
-    }
-
-    /**
-     * Get all <code>.xml</code> files in the fileset.
-     *
-     * @return all files in the fileset that end with a '.xml'.
-     */
-    protected File[] getFiles() {
-        Vector v = new Vector();
-        final int size = filesets.size();
-        for (int i = 0; i < size; i++) {
-            FileSet fs = (FileSet) filesets.elementAt(i);
-            DirectoryScanner ds = fs.getDirectoryScanner(project);
-            ds.scan();
-            String[] f = ds.getIncludedFiles();
-            for (int j = 0; j < f.length; j++) {
-                String pathname = f[j];
-                if (pathname.endsWith(".xml")) {
-                    File file = new File(ds.getBasedir(), pathname);
-                    file = project.resolveFile(file.getPath());
-                    v.addElement(file);
-                }
-            }
-        }
-
-        File[] files = new File[v.size()];
-        v.copyInto(files);
-        return files;
-    }
-
-    //----- from now, the methods are all related to DOM tree manipulation
-
-    /**
-     * Write the DOM tree to a file.
-     * @param doc the XML document to dump to disk.
-     * @param file the filename to write the document to. Should obviouslly be a .xml file.
-     * @throws IOException thrown if there is an error while writing the content.
-     */
-    protected void writeDOMTree(Document doc, File file) throws IOException {
-        OutputStream out = null;
-        PrintWriter wri = null;
-        try {
-            out = new FileOutputStream(file);
-            wri = new PrintWriter(new OutputStreamWriter(out, "UTF8"));
-            wri.write("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n");
-            (new DOMElementWriter()).write(doc.getDocumentElement(), wri, 0, "  ");
-            wri.flush();
-            // writers do not throw exceptions, so check for them.
-            if (wri.checkError()){
-                throw new IOException("Error while writing DOM content");
-            }
-        } finally {
-            if (wri != null) {
-                wri.close();
-                out = null;
-            }
-            if (out != null) {
-                out.close();
-            }
-        }
-    }
-
-    /**
-     * <p> Create a DOM tree.
-     * Has 'testsuites' as firstchild and aggregates all
-     * testsuite results that exists in the base directory.
-     * @return  the root element of DOM tree that aggregates all testsuites.
-     */
-    protected Element createDocument() {
-        // create the dom tree
-        DocumentBuilder builder = getDocumentBuilder();
-        Document doc = builder.newDocument();
-        Element rootElement = doc.createElement(TESTSUITES);
-        doc.appendChild(rootElement);
-
-        // get all files and add them to the document
-        File[] files = getFiles();
-        for (int i = 0; i < files.length; i++) {
-            try {
-                log("Parsing file: '" + files[i] + "'", Project.MSG_VERBOSE);
-                //XXX there seems to be a bug in xerces 1.3.0 that doesn't like file object
-                // will investigate later. It does not use the given directory but
-                // the vm dir instead ? Works fine with crimson.
-                Document testsuiteDoc 
-                    = builder.parse("file:///" + files[i].getAbsolutePath());
-                Element elem = testsuiteDoc.getDocumentElement();
-                // make sure that this is REALLY a testsuite.
-                if (TESTSUITE.equals(elem.getNodeName())) {
-                    addTestSuite(rootElement, elem);
-                } else {
-                    // issue a warning.
-                    log("the file " + files[i] + " is not a valid testsuite XML document", Project.MSG_WARN);
-                }
-            } catch (SAXException e){
-                // a testcase might have failed and write a zero-length document,
-                // It has already failed, but hey.... mm. just put a warning
-                log("The file " + files[i] + " is not a valid XML document. It is possibly corrupted.", Project.MSG_WARN);
-                log(StringUtils.getStackTrace(e), Project.MSG_DEBUG);
-            } catch (IOException e){
-                log("Error while accessing file " + files[i] + ": " + e.getMessage(), Project.MSG_ERR);
-            }
-        }
-        return rootElement;
-    }
-
-    /**
-     * <p> Add a new testsuite node to the document.
-     * The main difference is that it
-     * split the previous fully qualified name into a package and a name.
-     * <p> For example: <tt>org.apache.Whatever</tt> will be split into
-     * <tt>org.apache</tt> and <tt>Whatever</tt>.
-     * @param root the root element to which the <tt>testsuite</tt> node should
-     *        be appended.
-     * @param testsuite the element to append to the given root. It will slightly
-     *        modify the original node to change the name attribute and add
-     *        a package one.
-     */
-    protected void addTestSuite(Element root, Element testsuite){
-        String fullclassname = testsuite.getAttribute(ATTR_NAME);
-        int pos = fullclassname.lastIndexOf('.');
-
-        // a missing . might imply no package at all. Don't get fooled.
-        String pkgName = (pos == -1) ? "" : fullclassname.substring(0, pos);
-        String classname = (pos == -1) ? fullclassname : fullclassname.substring(pos + 1);
-        Element copy = (Element) DOMUtil.importNode(root, testsuite);
-
-        // modify the name attribute and set the package
-        copy.setAttribute(ATTR_NAME, classname);
-        copy.setAttribute(ATTR_PACKAGE, pkgName);
-    }
-
-    /**
-     * Create a new document builder. Will issue an <tt>ExceptionInitializerError</tt>
-     * if something is going wrong. It is fatal anyway.
-     * @todo factorize this somewhere else. It is duplicated code.
-     * @return a new document builder to create a DOM
-     */
-    private static DocumentBuilder getDocumentBuilder() {
-        try {
-            return DocumentBuilderFactory.newInstance().newDocumentBuilder();
-        } catch (Exception exc) {
-            throw new ExceptionInInitializerError(exc);
-        }
-    }
-
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/junit/Xalan1Executor.java b/src/main/org/apache/tools/ant/taskdefs/optional/junit/Xalan1Executor.java
deleted file mode 100644
index 63fb138..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/junit/Xalan1Executor.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.junit;
-
-import java.io.OutputStream;
-
-import org.apache.xalan.xslt.XSLTProcessorFactory;
-import org.apache.xalan.xslt.XSLTProcessor;
-import org.apache.xalan.xslt.XSLTInputSource;
-import org.apache.xalan.xslt.XSLTResultTarget;
-
-/**
- * Xalan 1 executor. It will need a lot of things in the classpath:
- * xerces for the serialization, xalan and bsf for the extension.
- * @todo do everything via reflection to avoid compile problems ?
- *
- * @ant.task ignore="true"
- */
-public class Xalan1Executor extends XalanExecutor {
-    void execute() throws Exception {
-        XSLTProcessor processor = XSLTProcessorFactory.getProcessor();
-        // need to quote otherwise it breaks because of "extra illegal tokens"
-        processor.setStylesheetParam("output.dir", "'" + caller.toDir.getAbsolutePath() + "'");
-        XSLTInputSource xml_src = new XSLTInputSource(caller.document);
-        String system_id = caller.getStylesheetSystemId();
-        XSLTInputSource xsl_src = new XSLTInputSource(system_id);
-        OutputStream os = getOutputStream();
-        try {
-            XSLTResultTarget target = new XSLTResultTarget(os);
-            processor.process(xml_src, xsl_src, target);
-        } finally {
-            os.close();
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/junit/Xalan2Executor.java b/src/main/org/apache/tools/ant/taskdefs/optional/junit/Xalan2Executor.java
deleted file mode 100644
index 9ab2c58..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/junit/Xalan2Executor.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.junit;
-
-import java.io.OutputStream;
-
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.Source;
-import javax.xml.transform.Result;
-import javax.xml.transform.dom.DOMSource;
-import javax.xml.transform.stream.StreamSource;
-import javax.xml.transform.stream.StreamResult;
-
-/**
- * Xalan executor via JAXP. Nothing special must exists in the classpath
- * besides of course, a parser, jaxp and xalan.
- *
- * @ant.task ignore="true"
- */
-public class Xalan2Executor extends XalanExecutor {
-    void execute() throws Exception {
-        TransformerFactory tfactory = TransformerFactory.newInstance();
-        String system_id = caller.getStylesheetSystemId();
-        Source xsl_src = new StreamSource(system_id);
-        Transformer tformer = tfactory.newTransformer(xsl_src);
-        Source xml_src = new DOMSource(caller.document);
-        OutputStream os = getOutputStream();
-        try {
-            tformer.setParameter("output.dir", caller.toDir.getAbsolutePath());
-            Result result = new StreamResult(os);
-            tformer.transform(xml_src, result);
-        } finally {
-            os.close();
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/junit/XalanExecutor.java b/src/main/org/apache/tools/ant/taskdefs/optional/junit/XalanExecutor.java
deleted file mode 100644
index d793fcf..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/junit/XalanExecutor.java
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.junit;
-
-import org.apache.tools.ant.BuildException;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.FileOutputStream;
-
-import java.lang.reflect.Field;
-
-/**
- * Command class that encapsulate specific behavior for each
- * Xalan version. The right executor will be instantiated at
- * runtime via class lookup. For instance, it will check first
- * for Xalan2, then for Xalan1.
- */
-abstract class XalanExecutor {
-    /** the transformer caller */
-    protected AggregateTransformer caller;
-
-    /** set the caller for this object. */
-    private final void setCaller(AggregateTransformer caller){
-        this.caller = caller;
-    }
-
-    /** get the appropriate stream based on the format (frames/noframes) */
-    protected OutputStream getOutputStream() throws IOException {
-        if (caller.FRAMES.equals(caller.format)){
-            // dummy output for the framed report
-            // it's all done by extension...
-            return new ByteArrayOutputStream();
-        } else {
-            return new FileOutputStream(new File(caller.toDir, "junit-noframes.html"));
-        }
-    }
-
-    /** override to perform transformation */
-    abstract void execute() throws Exception;
-
-    /**
-     * Create a valid Xalan executor. It checks first if Xalan2 is
-     * present, if not it checks for xalan1. If none is available, it
-     * fails.
-     * @param caller object containing the transformation information.
-     * @throws BuildException thrown if it could not find a valid xalan
-     * executor.
-     */
-    static XalanExecutor newInstance(AggregateTransformer caller) throws BuildException {
-        Class procVersion = null;
-        XalanExecutor executor = null;
-        try {
-            procVersion = Class.forName("org.apache.xalan.processor.XSLProcessorVersion");
-            executor = (XalanExecutor) Class.forName(
-                "org.apache.tools.ant.taskdefs.optional.junit.Xalan2Executor").newInstance();
-        } catch (Exception xalan2missing){
-            try {
-                procVersion = Class.forName("org.apache.xalan.xslt.XSLProcessorVersion");
-                executor = (XalanExecutor) Class.forName(
-                    "org.apache.tools.ant.taskdefs.optional.junit.Xalan1Executor").newInstance();
-            } catch (Exception xalan1missing){
-                throw new BuildException("Could not find xalan2 nor xalan1 in the classpath. Check http://xml.apache.org/xalan-j");
-            }
-        }
-        String version = getXalanVersion(procVersion);
-        caller.task.log("Using Xalan version: " + version);
-        executor.setCaller(caller);
-        return executor;
-    }
-
-    /** pretty useful data (Xalan version information) to display. */
-    private static String getXalanVersion(Class procVersion) {
-        try {
-            Field f = procVersion.getField("S_VERSION");
-            return f.get(null).toString();
-        } catch (Exception e){
-            return "?";
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/metamata/AbstractMetamataTask.java b/src/main/org/apache/tools/ant/taskdefs/optional/metamata/AbstractMetamataTask.java
deleted file mode 100644
index 386bc83..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/metamata/AbstractMetamataTask.java
+++ /dev/null
@@ -1,351 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.metamata;
-
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.util.Enumeration;
-import java.util.Hashtable;
-import java.util.Vector;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.DirectoryScanner;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.taskdefs.Execute;
-import org.apache.tools.ant.taskdefs.ExecuteStreamHandler;
-import org.apache.tools.ant.types.Commandline;
-import org.apache.tools.ant.types.CommandlineJava;
-import org.apache.tools.ant.types.FileSet;
-import org.apache.tools.ant.types.Path;
-import org.apache.tools.ant.util.FileUtils;
-
-/**
- * Somewhat abstract framework to be used for other metama 2.0 tasks.
- * This should include, audit, metrics, cover and mparse.
- *
- * For more information, visit the website at
- * <a href="http://www.metamata.com">www.metamata.com</a>
- *
- * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
- */
-public abstract class AbstractMetamataTask extends Task {
-
-    /**
-     * The user classpath to be provided. It matches the -classpath of the
-     * command line. The classpath must includes both the <tt>.class</tt> and the
-     * <tt>.java</tt> files for accurate audit.
-     */
-    protected Path classPath = null;
-
-    /** the path to the source file */
-    protected Path sourcePath = null;
-
-    /**
-     * Metamata home directory. It will be passed as a <tt>metamata.home</tt> property
-     * and should normally matches the environment property <tt>META_HOME</tt>
-     * set by the Metamata installer.
-     */
-    protected File metamataHome = null;
-
-    /** the command line used to run MAudit */
-    protected CommandlineJava cmdl = new CommandlineJava();
-
-    /** the set of files to be audited */
-    protected Vector fileSets = new Vector();
-
-    /** the options file where are stored the command line options */
-    protected File optionsFile = null;
-
-    // this is used to keep track of which files were included. It will
-    // be set when calling scanFileSets();
-    protected Hashtable includedFiles = null;
-
-    public AbstractMetamataTask() {
-    }
-
-    /** initialize the task with the classname of the task to run */
-    protected AbstractMetamataTask(String className) {
-        cmdl.setVm("java");
-        cmdl.setClassname(className);
-    }
-
-    /** the metamata.home property to run all tasks. */
-    public void setHome(final File value) {
-        this.metamataHome = value;
-    }
-
-    public void setMetamatahome(final File value) {
-        setHome(value);
-    }
-
-    /** user classpath */
-    public Path createClasspath() {
-        if (classPath == null) {
-            classPath = new Path(project);
-        }
-        return classPath;
-    }
-
-    /** create the source path for this task */
-    public Path createSourcepath() {
-        if (sourcePath == null) {
-            sourcePath = new Path(project);
-        }
-        return sourcePath;
-    }
-
-    /** Creates a nested jvmarg element. */
-    public Commandline.Argument createJvmarg() {
-        return cmdl.createVmArgument();
-    }
-
-    /**  -mx or -Xmx depending on VM version */
-    public void setMaxmemory(String max) {
-        cmdl.setMaxmemory(max);
-    }
-
-
-    /** The java files or directory to be audited */
-    public void addFileSet(FileSet fs) {
-        fileSets.addElement(fs);
-    }
-
-    /** execute the command line */
-    public void execute() throws BuildException {
-        try {
-            setUp();
-            ExecuteStreamHandler handler = createStreamHandler();
-            execute0(handler);
-        } finally {
-            cleanUp();
-        }
-    }
-
-    /** check the options and build the command line */
-    protected void setUp() throws BuildException {
-        checkOptions();
-
-        // set the classpath as the jar file
-        File jar = getMetamataJar(metamataHome);
-        final Path classPath = cmdl.createClasspath(project);
-        classPath.createPathElement().setLocation(jar);
-
-        // set the metamata.home property
-        final Commandline.Argument vmArgs = cmdl.createVmArgument();
-        vmArgs.setValue("-Dmetamata.home=" + metamataHome.getAbsolutePath());
-
-        // retrieve all the files we want to scan
-        includedFiles = scanSources(new Hashtable());
-        //String[] entries = sourcePath.list();
-        //includedFiles = scanSources(new Hashtable(), entries);
-        log(includedFiles.size() + " files added for audit", Project.MSG_VERBOSE);
-
-        // write all the options to a temp file and use it ro run the process
-        Vector options = getOptions();
-        optionsFile = createTmpFile();
-        generateOptionsFile(optionsFile, options);
-        Commandline.Argument args = cmdl.createArgument();
-        args.setLine("-arguments " + optionsFile.getAbsolutePath());
-    }
-
-    /**
-     * create a stream handler that will be used to get the output since
-     * metamata tools do not report with convenient files such as XML.
-     */
-    protected abstract ExecuteStreamHandler createStreamHandler();
-
-
-    /** execute the process with a specific handler */
-    protected void execute0(ExecuteStreamHandler handler) throws BuildException {
-        final Execute process = new Execute(handler);
-        log(cmdl.describeCommand(), Project.MSG_VERBOSE);
-        process.setCommandline(cmdl.getCommandline());
-        try {
-            if (process.execute() != 0) {
-                throw new BuildException("Metamata task failed.");
-            }
-        } catch (IOException e) {
-            throw new BuildException("Failed to launch Metamata task", e);
-        }
-    }
-
-    /** clean up all the mess that we did with temporary objects */
-    protected void cleanUp() {
-        if (optionsFile != null) {
-            optionsFile.delete();
-            optionsFile = null;
-        }
-    }
-
-    /** return the location of the jar file used to run */
-    protected final File getMetamataJar(File home) {
-        return new File(home, "lib/metamata.jar");
-    }
-
-    /** validate options set */
-    protected void checkOptions() throws BuildException {
-        // do some validation first
-        if (metamataHome == null || !metamataHome.exists()) {
-            throw new BuildException("'home' must point to Metamata home directory.");
-        }
-        File jar = getMetamataJar(metamataHome);
-        if (!jar.exists()) {
-            throw new BuildException(jar + " does not exist. Check your metamata installation.");
-        }
-    }
-
-    /** return all options of the command line as string elements */
-    protected abstract Vector getOptions();
-
-
-    protected void generateOptionsFile(File tofile, Vector options) throws BuildException {
-        FileWriter fw = null;
-        try {
-            fw = new FileWriter(tofile);
-            PrintWriter pw = new PrintWriter(fw);
-            final int size = options.size();
-            for (int i = 0; i < size; i++) {
-                pw.println(options.elementAt(i));
-            }
-            pw.flush();
-        } catch (IOException e) {
-            throw new BuildException("Error while writing options file " + tofile, e);
-        } finally {
-            if (fw != null) {
-                try {
-                    fw.close();
-                } catch (IOException ignored) {
-                }
-            }
-        }
-    }
-
-
-    protected Hashtable getFileMapping() {
-        return includedFiles;
-    }
-
-    /**
-     * convenient method for JDK 1.1. Will copy all elements from src to dest
-     */
-    protected static final void addAllVector(Vector dest, Enumeration files) {
-        while (files.hasMoreElements()) {
-            dest.addElement(files.nextElement());
-        }
-    }
-
-    protected final File createTmpFile() {
-        return FileUtils.newFileUtils().createTempFile("metamata", ".tmp", getProject().getBaseDir());
-    }
-
-    /**
-     * @return the list of .java files (as their absolute path) that should
-     *         be audited.
-     */
-
-    protected Hashtable scanSources(Hashtable map) {
-        Hashtable files = new Hashtable();
-        for (int i = 0; i < fileSets.size(); i++) {
-            FileSet fs = (FileSet) fileSets.elementAt(i);
-            DirectoryScanner ds = fs.getDirectoryScanner(project);
-            ds.scan();
-            String[] f = ds.getIncludedFiles();
-            log(i + ") Adding " + f.length + " files from directory " + ds.getBasedir(), Project.MSG_VERBOSE);
-            for (int j = 0; j < f.length; j++) {
-                String pathname = f[j];
-                if (pathname.endsWith(".java")) {
-                    File file = new File(ds.getBasedir(), pathname);
-//                  file = project.resolveFile(file.getAbsolutePath());
-                    String classname = pathname.substring(0, pathname.length() - ".java".length());
-                    classname = classname.replace(File.separatorChar, '.');
-                    files.put(file.getAbsolutePath(), classname); // it's a java file, add it.
-                }
-            }
-        }
-        return files;
-    }
-
-    protected Hashtable scanSources(final Hashtable mapping, final String[] entries) {
-        final Vector javaFiles = new Vector(512);
-        for (int i = 0; i < entries.length; i++) {
-            final File f = new File(entries[i]);
-            if (f.isDirectory()) {
-                DirectoryScanner ds = new DirectoryScanner();
-                ds.setBasedir(f);
-                ds.setIncludes(new String[]{"**/*.java"});
-                ds.scan();
-                String[] included = ds.getIncludedFiles();
-                for (int j = 0; j < included.length; j++) {
-                    javaFiles.addElement(new File(f, included[j]));
-                }
-            } else if (entries[i].endsWith(".java")) {
-                javaFiles.addElement(f);
-            }
-        }
-        // do the mapping paths/classname
-        final int count = javaFiles.size();
-        for (int i = 0; i < count; i++) {
-            File file = (File) javaFiles.elementAt(i);
-            String pathname = Path.translateFile(file.getAbsolutePath());
-            String classname = pathname.substring(0, pathname.length() - ".java".length());
-            classname = classname.replace(File.separatorChar, '.');
-            mapping.put(pathname, classname);
-        }
-        return mapping;
-    }
-
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/metamata/MAudit.java b/src/main/org/apache/tools/ant/taskdefs/optional/metamata/MAudit.java
deleted file mode 100644
index 9a62526..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/metamata/MAudit.java
+++ /dev/null
@@ -1,311 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.metamata;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.util.Vector;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.taskdefs.ExecuteStreamHandler;
-import org.apache.tools.ant.taskdefs.LogStreamHandler;
-import org.apache.tools.ant.types.FileSet;
-import org.apache.tools.ant.types.Path;
-
-/**
- * Metamata Audit evaluates Java code for programming errors, weaknesses, and
- * style violation.
- * <p>
- * Metamata Audit exists in three versions:
- * <ul>
- *  <li>The Lite version evaluates about 15 built-in rules.</li>
- *  <li>The Pro version evaluates about 50 built-in rules.</li>
- *  <li>The Enterprise version allows you to add your own customized rules via the API.</li>
- * <ul>
- * For more information, visit the website at
- * <a href="http://www.metamata.com">www.metamata.com</a>
- *
- * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
- */
-public class MAudit extends AbstractMetamataTask {
-
-    /* As of Metamata 2.0, the command line of MAudit is as follows:
-    Usage
-        maudit <option>... <path>... [-unused <search-path>...]
-
-    Parameters
-        path               File or directory to audit.
-        search-path        File or directory to search for declaration uses.
-
-    Options
-        -arguments  -A     <file>     Includes command line arguments from file.
-        -classpath  -cp    <path>     Sets class path (also source path unless one
-                                      explicitly set). Overrides METAPATH/CLASSPATH.
-        -exit       -x                Exits after the first error.
-        -fix        -f                Automatically fixes certain errors.
-        -fullpath                     Prints full path for locations.
-        -help       -h                Prints help and exits.
-        -list       -l                Creates listing file for each audited file.
-        -offsets    -off              Offset and length for locations.
-        -output     -o     <file>     Prints output to file.
-        -quiet      -q                Suppresses copyright and summary messages.
-        -sourcepath        <path>     Sets source path. Overrides SOURCEPATH.
-        -tab        -t                Prints a tab character after first argument.
-        -unused     -u                Finds declarations unused in search paths.
-        -verbose    -v                Prints all messages.
-        -version    -V                Prints version and exits.
-    */
-
-    //---------------------- PUBLIC METHODS ------------------------------------
-
-    /** pattern used by maudit to report the error for a file */
-    /** RE does not seems to support regexp pattern with comments so i'm stripping it*/
-    // (?:file:)?((?#filepath).+):((?#line)\\d+)\\s*:\\s+((?#message).*)
-    static final String AUDIT_PATTERN = "(?:file:)?(.+):(\\d+)\\s*:\\s+(.*)";
-
-    private File outFile = null;
-
-    private Path searchPath = null;
-
-    private Path rulesPath = null;
-
-    private boolean fix = false;
-
-    private boolean list = false;
-
-    private boolean unused = false;
-
-//  add a bunch of undocumented options for the task
-    private boolean quiet = false;
-    private boolean exit = false;
-    private boolean offsets = false;
-    private boolean verbose = false;
-    private boolean fullsemanticize = false;
-
-    /** default constructor */
-    public MAudit() {
-        super("com.metamata.gui.rc.MAudit");
-    }
-
-    /** set the destination file which should be an xml file */
-    public void setTofile(File outFile) {
-        this.outFile = outFile;
-    }
-
-    public void setFix(boolean flag) {
-        this.fix = flag;
-    }
-
-    public void setList(boolean flag) {
-        this.list = flag;
-    }
-
-    public void setUnused(boolean flag) {
-        this.unused = flag;
-    }
-
-    public void setQuiet(boolean flag) {
-        this.quiet = flag;
-    }
-
-    public void setExit(boolean flag) {
-        this.exit = flag;
-    }
-
-    public void setOffsets(boolean flag) {
-        this.offsets = flag;
-    }
-
-    public void setVerbose(boolean flag) {
-        this.verbose = flag;
-    }
-
-    public void setFullsemanticize(boolean flag) {
-        this.fullsemanticize = flag;
-    }
-
-    /** one or more path for rules that must be placed before metamata.jar !! */
-    public Path createRulespath() {
-        if (rulesPath == null) {
-            rulesPath = new Path(getProject());
-        }
-        return rulesPath;
-    }
-
-    /** search path to use for unused global declarations */
-    public Path createSearchpath() {
-        if (searchPath == null) {
-            searchPath = new Path(getProject());
-        }
-        return searchPath;
-    }
-
-    protected Vector getOptions() {
-        Vector options = new Vector(512);
-        // add the source path automatically from the fileset.
-        // to avoid redundancy...
-        for (int i = 0; i < fileSets.size(); i++) {
-            FileSet fs = (FileSet) fileSets.elementAt(i);
-            Path path = createSourcepath();
-            File dir = fs.getDir(getProject());
-            path.setLocation(dir);
-        }
-
-        // there is a bug in Metamata 2.0 build 37. The sourcepath argument does
-        // not work. So we will use the sourcepath prepended to classpath. (order
-        // is important since Metamata looks at .class and .java)
-        if (sourcePath != null) {
-            sourcePath.append(classPath); // srcpath is prepended
-            classPath = sourcePath;
-            sourcePath = null; // prevent from using -sourcepath
-        }
-
-        // don't forget to modify the pattern if you change the options reporting
-        if (classPath != null) {
-            options.addElement("-classpath");
-            options.addElement(classPath.toString());
-        }
-        // suppress copyright msg when running, we will let it so that this
-        // will be the only output to the console if in xml mode
-        if (quiet) {
-            options.addElement("-quiet");
-        }
-        if (fullsemanticize) {
-            options.addElement("-full-semanticize");
-        }
-        if (verbose) {
-            options.addElement("-verbose");
-        }
-        if (offsets) {
-            options.addElement("-offsets");
-        }
-        if (exit) {
-            options.addElement("-exit");
-        }
-        if (fix) {
-            options.addElement("-fix");
-        }
-        options.addElement("-fullpath");
-
-        // generate .maudit files much more detailed than the report
-        // I don't like it very much, I think it could be interesting
-        // to get all .maudit files and include them in the XML.
-        if (list) {
-            options.addElement("-list");
-        }
-        if (sourcePath != null) {
-            options.addElement("-sourcepath");
-            options.addElement(sourcePath.toString());
-        }
-        addAllVector(options, includedFiles.keys());
-        if (unused) {
-            options.addElement("-unused");
-            options.addElement(searchPath.toString());
-        }
-        return options;
-    }
-
-    protected void checkOptions() throws BuildException {
-        super.checkOptions();
-        if (unused && searchPath == null) {
-            throw new BuildException("'searchpath' element must be set when looking for 'unused' declarations.");
-        }
-        if (!unused && searchPath != null) {
-            log("'searchpath' element ignored. 'unused' attribute is disabled.", Project.MSG_WARN);
-        }
-        if (rulesPath != null) {
-            cmdl.createClasspath(getProject()).addExisting(rulesPath);
-        }
-    }
-
-    protected ExecuteStreamHandler createStreamHandler() throws BuildException {
-        // if we didn't specify a file, then use a screen report
-        if (outFile == null) {
-            return new LogStreamHandler(this, Project.MSG_INFO, Project.MSG_ERR);
-        }
-        ExecuteStreamHandler handler = null;
-        OutputStream out = null;
-        try {
-            out = new FileOutputStream(outFile);
-            handler = new MAuditStreamHandler(this, out);
-        } catch (IOException e) {
-            throw new BuildException(e);
-        } finally {
-            if (out == null){
-                try {
-                    out.close();
-                } catch (IOException e){
-                }
-            }
-        }
-        return handler;
-    }
-
-    protected void cleanUp() throws BuildException {
-        super.cleanUp();
-        // at this point if -list is used, we should move
-        // the .maudit file since we cannot choose their location :(
-        // the .maudit files match the .java files
-        // we'll use includedFiles to get the .maudit files.
-
-        /*if (out != null){
-            // close it if not closed by the handler...
-        }*/
-    }
-
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/metamata/MAuditParser.java b/src/main/org/apache/tools/ant/taskdefs/optional/metamata/MAuditParser.java
deleted file mode 100644
index aca6ff9..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/metamata/MAuditParser.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.metamata;
-
-import java.util.Vector;
-import java.io.File;
-
-import org.apache.tools.ant.util.regexp.RegexpMatcher;
-import org.apache.tools.ant.util.regexp.RegexpMatcherFactory;
-import org.apache.tools.ant.util.StringUtils;
-
-/**
- * Parser that will parse an output line of MAudit and return an
- * interpreted violation if any.
- *
- * <p>
- * MAudit is supposed to be configured with -fullpath so that it can
- * correctly locate the file and attribute violation to the appropriate
- * file (there might be several classes with the same name in
- * different packages)
- * </p>
- *
- * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
- */
-final class MAuditParser {
-
-    /** pattern used by maudit to report the error for a file */
-    /** RE does not seems to support regexp pattern with comments so i'm stripping it*/
-    // (?:file:)?((?#filepath).+):((?#line)\\d+)\\s*:\\s+((?#message).*)
-    private static final String AUDIT_PATTERN = "(?:file:)?(.+):(\\d+)\\s*:\\s+(.*)";
-
-    /** matcher that will be used to extract the info from the line */
-    private final RegexpMatcher matcher;
-
-    MAuditParser(){
-        /** the matcher should be the Oro one. I don't know about the other one */
-        matcher = (new RegexpMatcherFactory()).newRegexpMatcher();
-        matcher.setPattern(AUDIT_PATTERN);
-    }
-
-    /**
-     * Parse a line obtained from MAudit.
-     * @param line a line obtained from the MAudit output.
-     * @return the violation corresponding to the displayed line
-     * or <tt>null</tt> if it could not parse it. (might be a
-     * message info or copyright or summary).
-     */
-    Violation parseLine(String line){
-        Vector matches = matcher.getGroups(line);
-        if (matches == null){
-            return null;
-        }
-        final String file = (String) matches.elementAt(1);
-        Violation violation = new Violation();
-        violation.file = file;
-        violation.line = (String) matches.elementAt(2);
-        violation.error = (String) matches.elementAt(3);
-        // remove the pathname from any messages and let the classname only.
-        final int pos = file.lastIndexOf(File.separatorChar);
-        if ((pos != -1) && (pos != file.length() - 1)) {
-            String filename = file.substring(pos + 1);
-            violation.error = StringUtils.replace(violation.error,
-                    "file:" + file, filename);
-        }
-        return violation;
-    }
-
-    /** the inner class used to report violation information */
-    static final class Violation {
-        String file;
-        String line;
-        String error;
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/metamata/MAuditStreamHandler.java b/src/main/org/apache/tools/ant/taskdefs/optional/metamata/MAuditStreamHandler.java
deleted file mode 100644
index ca2a51f..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/metamata/MAuditStreamHandler.java
+++ /dev/null
@@ -1,260 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.metamata;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.OutputStream;
-import java.util.Date;
-import java.util.Enumeration;
-import java.util.Hashtable;
-import java.util.Vector;
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.taskdefs.ExecuteStreamHandler;
-import org.apache.tools.ant.taskdefs.LogOutputStream;
-import org.apache.tools.ant.taskdefs.StreamPumper;
-import org.apache.tools.ant.util.DOMElementWriter;
-import org.apache.tools.ant.util.DateUtils;
-
-/**
- * This is a very bad stream handler for the MAudit task.
- * All report to stdout that does not match a specific report pattern is dumped
- * to the Ant output as warn level. The report that match the pattern is stored
- * in a map with the key being the filepath that caused the error report.
- * <p>
- * The limitation with the choosen implementation is clear:
- * <ul>
- * <li>it does not handle multiline report( message that has \n ). the part until
- * the \n will be stored and the other part (which will not match the pattern)
- * will go to Ant output in Warn level.
- * <li>it does not report error that goes to stderr.
- * </ul>
- *
- * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
- */
-class MAuditStreamHandler implements ExecuteStreamHandler {
-
-    /** parent task */
-    private MAudit task;
-
-    /** reader for stdout */
-    private BufferedReader br;
-
-    /**
-     * this is where the XML output will go, should mostly be a file
-     * the caller is responsible for flushing and closing this stream
-     */
-    private OutputStream xmlOut = null;
-
-    /** error stream, might be useful to spit out error messages */
-    private OutputStream errStream;
-
-    /** thread pumping out error stream */
-    private Thread errThread;
-
-    /**
-     * the multimap. The key in the map is the filepath that caused the audit
-     * error and the value is a vector of MAudit.Violation entries.
-     */
-    private Hashtable auditedFiles = new Hashtable();
-
-    /** program start timestamp for reporting purpose */
-    private Date program_start;
-
-    MAuditStreamHandler(MAudit task, OutputStream xmlOut) {
-        this.task = task;
-        this.xmlOut = xmlOut;
-    }
-
-    /** Ignore. */
-    public void setProcessInputStream(OutputStream os) {
-    }
-
-    /** Ignore. */
-    public void setProcessErrorStream(InputStream is) {
-        errStream = new LogOutputStream(task, Project.MSG_ERR);
-        errThread = createPump(is, errStream);
-    }
-
-    /** Set the inputstream */
-    public void setProcessOutputStream(InputStream is) throws IOException {
-        br = new BufferedReader(new InputStreamReader(is));
-    }
-
-    /** Invokes parseOutput. This will block until the end :-(*/
-    public void start() throws IOException {
-        program_start = new Date();
-        errThread.start();
-        parseOutput(br);
-    }
-
-    /**
-     * Pretty dangerous business here. It serializes what was extracted from
-     * the MAudit output and write it to the output.
-     */
-    public void stop() {
-        // make sure to flush err stream
-        try {
-            errThread.join();
-        } catch (InterruptedException e) {
-        }
-        try {
-            errStream.flush();
-        } catch (IOException e) {
-        }
-        // serialize the content as XML, move this to another method
-        // this is the only code that could be needed to be overriden
-        Document doc = getDocumentBuilder().newDocument();
-        Element rootElement = doc.createElement("classes");
-        Enumeration keys = auditedFiles.keys();
-        Hashtable filemapping = task.getFileMapping();
-        final Date now = new Date();
-        rootElement.setAttribute("snapshot_created", DateUtils.format(now, DateUtils.ISO8601_DATETIME_PATTERN));
-        rootElement.setAttribute("elapsed_time", String.valueOf(now.getTime() - program_start.getTime()));
-        rootElement.setAttribute("program_start", DateUtils.format(now, DateUtils.ISO8601_DATETIME_PATTERN));
-        rootElement.setAttribute("audited", String.valueOf(filemapping.size()));
-        rootElement.setAttribute("reported", String.valueOf(auditedFiles.size()));
-        int errors = 0;
-        while (keys.hasMoreElements()) {
-            String filepath = (String) keys.nextElement();
-            Vector v = (Vector) auditedFiles.get(filepath);
-            String fullclassname = (String) filemapping.get(filepath);
-            if (fullclassname == null) {
-                task.getProject().log("Could not find class mapping for " + filepath, Project.MSG_WARN);
-                continue;
-            }
-            int pos = fullclassname.lastIndexOf('.');
-            String pkg = (pos == -1) ? "" : fullclassname.substring(0, pos);
-            String clazzname = (pos == -1) ? fullclassname : fullclassname.substring(pos + 1);
-            Element clazz = doc.createElement("class");
-            clazz.setAttribute("package", pkg);
-            clazz.setAttribute("name", clazzname);
-            final int violationCount = v.size();
-            clazz.setAttribute("violations", String.valueOf(violationCount));
-            errors += violationCount;
-            for (int i = 0; i < violationCount; i++) {
-                MAuditParser.Violation violation = (MAuditParser.Violation) v.elementAt(i);
-                Element error = doc.createElement("violation");
-                error.setAttribute("line", violation.line);
-                error.setAttribute("message", violation.error);
-                clazz.appendChild(error);
-            }
-            rootElement.appendChild(clazz);
-        }
-        rootElement.setAttribute("violations", String.valueOf(errors));
-
-        // now write it to the outputstream, not very nice code
-        DOMElementWriter domWriter = new DOMElementWriter();
-        try {
-            domWriter.write(rootElement, xmlOut);
-        } catch (IOException e){
-            throw new BuildException(e);
-        }
-    }
-
-    protected static DocumentBuilder getDocumentBuilder() {
-        try {
-            return DocumentBuilderFactory.newInstance().newDocumentBuilder();
-        } catch (Exception exc) {
-            throw new ExceptionInInitializerError(exc);
-        }
-    }
-
-    /**
-     * Creates a stream pumper to copy the given input stream to the given output stream.
-     */
-    protected Thread createPump(InputStream is, OutputStream os) {
-        final Thread result = new Thread(new StreamPumper(is, os));
-        result.setDaemon(true);
-        return result;
-    }
-
-
-    /** read each line and process it */
-    protected void parseOutput(BufferedReader br) throws IOException {
-        String line = null;
-        final MAuditParser parser = new MAuditParser();
-        while ((line = br.readLine()) != null) {
-            final MAuditParser.Violation violation = parser.parseLine(line);
-            if (violation != null) {
-                addViolation(violation.file, violation);
-            } else {
-                // this doesn't match..report it as info, it could be
-                // either the copyright, summary or a multiline message (damn !)
-                task.log(line, Project.MSG_INFO);
-            }
-        }
-    }
-
-    /** add a violation entry for the file */
-    private void addViolation(String file, MAuditParser.Violation entry) {
-        Vector violations = (Vector) auditedFiles.get(file);
-        // if there is no decl for this file yet, create it.
-        if (violations == null) {
-            violations = new Vector();
-            auditedFiles.put(file, violations);
-        }
-        violations.addElement(entry);
-    }
-
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/metamata/MMetrics.java b/src/main/org/apache/tools/ant/taskdefs/optional/metamata/MMetrics.java
deleted file mode 100644
index 9a4c8c2..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/metamata/MMetrics.java
+++ /dev/null
@@ -1,301 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.metamata;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.util.Vector;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.taskdefs.ExecuteStreamHandler;
-import org.apache.tools.ant.taskdefs.LogStreamHandler;
-import org.apache.tools.ant.types.EnumeratedAttribute;
-import org.apache.tools.ant.types.Path;
-
-/**
- * Calculates global complexity and quality metrics on Java source code.
- *
- * You will not be able to use this task with the evaluation version since
- * as of Metamata 2.0, Metrics does not support command line :-(
- *
- * For more information, visit the website at
- * <a href="http://www.metamata.com">www.metamata.com</a>
- *
- * @author <a href="mailto:sbailliez@imediation.com">Stephane Bailliez</a>
- */
-public class MMetrics extends AbstractMetamataTask {
-/*
-    The command line options as of Metamata 2.0 are as follows:
-
-Usage
-    mmetrics <option>... <path>...
-
-Parameters
-    path              File or directory to measure.
-
-Options
-    -arguments   -A   <file>      Includes command line arguments from file.
-    -classpath   -cp  <path>      Sets class path (also source path unless one
-                                  explicitly set). Overrides METAPATH/CLASSPATH.
-    -compilation-units            Measure compilation units.
-    -files                        Measure compilation units.
-    -format      -f   <format>    Sets output format, default output file type.
-    -help        -h               Prints help and exits.
-    -indent      -i   <string>    Sets string used to indent labels one level.
-    -methods                      Measure methods, types, and compilation units.
-    -output      -o   <file>      Sets output file name.
-    -quiet       -q               Suppresses copyright message.
-    -sourcepath       <path>      Sets source path. Overrides SOURCEPATH.
-    -types                        Measure types and compilation units.
-    -verbose     -v               Prints all messages.
-    -version     -V               Prints version and exits.
-
-Format Options
-    comma csv                     Format output as comma-separated text.
-    html htm                      Format output as an HTML table.
-    tab tab-separated tsv         Format output as tab-separated text.
-    text txt                      Format output as space-aligned text.
-*/
-
-    /** the granularity mode. Should be one of 'files', 'methods' and 'types'. */
-    private String granularity = null;
-
-    /** the XML output file */
-    private File outFile = null;
-
-    /** the location of the temporary txt report */
-    private File tmpFile;
-
-    private Path path = null;
-
-    //--------------------------- PUBLIC METHODS -------------------------------
-
-    /** default constructor */
-    public MMetrics() {
-        super("com.metamata.sc.MMetrics");
-    }
-
-    /**
-     * Attributes for granularity.
-     */
-    public static class GranularityAttribute extends EnumeratedAttribute {
-        public String[] getValues() {
-            return new String[]{"compilation-units", "files", "methods", "types", "packages"};
-        }
-    }
-
-    /**
-     * set the granularity of the audit. Should be one of 'files', 'methods'
-     * or 'types'.
-     * @param granularity   the audit reporting mode.
-     */
-    public void setGranularity(GranularityAttribute granularity) {
-        this.granularity = granularity.getValue();
-    }
-
-    /**
-     * Set the output XML file
-     * @param file the xml file to write the XML report to.
-     */
-    public void setTofile(File file) {
-        this.outFile = file;
-    }
-
-    /**
-     * Set a new path (directory) to measure metrics from.
-     * @return the path instance to use.
-     */
-    public Path createPath() {
-        if (path == null) {
-            path = new Path(project);
-        }
-        return path;
-
-    }
-
-    //------------------- PROTECTED / PRIVATE METHODS --------------------------
-
-
-    // check for existing options and outfile, all other are optional
-    protected void checkOptions() throws BuildException {
-        super.checkOptions();
-
-        if (outFile == null) {
-            throw new BuildException("Output XML file must be set via 'tofile' attribute.");
-        }
-        if (path == null && fileSets.size() == 0) {
-            throw new BuildException("Must set either paths (path element) or files (fileset element)");
-        }
-        // I don't accept dirs and files at the same time, I cannot recognize the semantic in the result
-        if (path != null && fileSets.size() > 0) {
-            throw new BuildException("Cannot set paths (path element) and files (fileset element) at the same time");
-        }
-        tmpFile = createTmpFile();
-    }
-
-    protected void execute0(ExecuteStreamHandler handler) throws BuildException {
-        super.execute0(handler);
-        transformFile();
-    }
-
-    /**
-     * transform the generated file via the handler
-     * This function can either be called if the result is written to the output
-     * file via -output or we could use the handler directly on stdout if not.
-     * @see #createStreamHandler()
-     */
-    protected void transformFile() throws BuildException {
-        FileInputStream tmpStream = null;
-        try {
-            tmpStream = new FileInputStream(tmpFile);
-        } catch (IOException e) {
-            throw new BuildException("Error reading temporary file: " + tmpFile, e);
-        }
-        FileOutputStream xmlStream = null;
-        try {
-            xmlStream = new FileOutputStream(outFile);
-            ExecuteStreamHandler xmlHandler = new MMetricsStreamHandler(this, xmlStream);
-            xmlHandler.setProcessOutputStream(tmpStream);
-            xmlHandler.start();
-            xmlHandler.stop();
-        } catch (IOException e) {
-            throw new BuildException("Error creating output file: " + outFile, e);
-        } finally {
-            if (xmlStream != null) {
-                try {
-                    xmlStream.close();
-                } catch (IOException ignored) {
-                }
-            }
-            if (tmpStream != null) {
-                try {
-                    tmpStream.close();
-                } catch (IOException ignored) {
-                }
-            }
-        }
-    }
-
-
-    /** cleanup the temporary txt report */
-    protected void cleanUp() throws BuildException {
-        try {
-            super.cleanUp();
-        } finally {
-            if (tmpFile != null) {
-                tmpFile.delete();
-                tmpFile = null;
-            }
-        }
-    }
-
-    /**
-     * if the report is transform via a temporary txt file we should use a
-     * a normal logger here, otherwise we could use the metrics handler
-     * directly to capture and transform the output on stdout to XML.
-     */
-    protected ExecuteStreamHandler createStreamHandler() {
-        // write the report directtly to an XML stream
-        // return new MMetricsStreamHandler(this, xmlStream);
-        return new LogStreamHandler(this, Project.MSG_INFO, Project.MSG_INFO);
-    }
-
-
-    protected Vector getOptions() {
-        Vector options = new Vector(512);
-        // there is a bug in Metamata 2.0 build 37. The sourcepath argument does
-        // not work. So we will use the sourcepath prepended to classpath. (order
-        // is important since Metamata looks at .class and .java)
-        if (sourcePath != null) {
-            sourcePath.append(classPath); // srcpath is prepended
-            classPath = sourcePath;
-            sourcePath = null; // prevent from using -sourcepath
-        }
-
-        // don't forget to modify the pattern if you change the options reporting
-        if (classPath != null) {
-            options.addElement("-classpath");
-            options.addElement(classPath.toString());
-        }
-        options.addElement("-output");
-        options.addElement(tmpFile.toString());
-
-        options.addElement("-" + granularity);
-
-        // display the metamata copyright
-        // options.addElement( "-quiet");
-        options.addElement("-format");
-
-        // need this because that's what the handler is using, it's
-        // way easier to process than any other separator
-        options.addElement("tab");
-
-        // specify a / as the indent character, used by the handler.
-        options.addElement("-i");
-        options.addElement("/");
-
-        // directories
-        String[] dirs = path.list();
-        for (int i = 0; i < dirs.length; i++) {
-            options.addElement(dirs[i]);
-        }
-        // files next.
-        addAllVector(options, includedFiles.keys());
-        return options;
-    }
-
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/metamata/MMetricsStreamHandler.java b/src/main/org/apache/tools/ant/taskdefs/optional/metamata/MMetricsStreamHandler.java
deleted file mode 100644
index 09378f7..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/metamata/MMetricsStreamHandler.java
+++ /dev/null
@@ -1,447 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.metamata;
-
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.OutputStream;
-import java.io.OutputStreamWriter;
-import java.text.DecimalFormat;
-import java.text.NumberFormat;
-import java.text.ParseException;
-import java.util.Date;
-import java.util.EmptyStackException;
-import java.util.Enumeration;
-import java.util.Stack;
-import java.util.Vector;
-import javax.xml.transform.OutputKeys;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.sax.SAXTransformerFactory;
-import javax.xml.transform.sax.TransformerHandler;
-import javax.xml.transform.stream.StreamResult;
-
-import org.xml.sax.Attributes;
-import org.xml.sax.SAXException;
-import org.xml.sax.helpers.AttributesImpl;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.taskdefs.ExecuteStreamHandler;
-import org.apache.tools.ant.util.DateUtils;
-
-/**
- * A handy metrics handler. Most of this code was done only with the
- * screenshots on the documentation since the evaluation version as
- * of this writing does not allow to save metrics or to run it via
- * command line.
- * <p>
- * This class can be used to transform a text file or to process the
- * output stream directly.
- *
- * @author  <a href="mailto:sbailliez@imediation.com">Stephane Bailliez</a>
- */
-public class MMetricsStreamHandler implements ExecuteStreamHandler {
-
-    /** CLASS construct, it should be named something like 'MyClass' */
-    private static final String CLASS = "class";
-
-    /** package construct, it should be look like 'com.mycompany.something' */
-    private static final String PACKAGE = "package";
-
-    /** FILE construct, it should look like something 'MyClass.java' or 'MyClass.class' */
-    private static final String FILE = "file";
-
-    /** METHOD construct, it should looke like something 'doSomething(...)' or 'doSomething()' */
-    private static final String METHOD = "method";
-
-    private static final String[] ATTRIBUTES = {
-        "name", "vg", "loc", "dit", "noa", "nrm", "nlm", "wmc",
-        "rfc", "dac", "fanout", "cbo", "lcom", "nocl"};
-
-    /** reader for stdout */
-    private InputStream metricsOutput;
-
-    /**
-     * this is where the XML output will go, should mostly be a file
-     * the caller is responsible for flushing and closing this stream
-     */
-    private OutputStream xmlOutputStream;
-
-    /** metrics handler */
-    private TransformerHandler metricsHandler;
-
-    /** the task */
-    private Task task;
-
-    /**
-     * the stack where are stored the metrics element so that they we can
-     * know if we have to close an element or not.
-     */
-    private Stack stack = new Stack();
-
-    /** initialize this handler */
-    MMetricsStreamHandler(Task task, OutputStream xmlOut) {
-        this.task = task;
-        this.xmlOutputStream = xmlOut;
-    }
-
-    /** Ignore. */
-    public void setProcessInputStream(OutputStream p1) throws IOException {
-    }
-
-    /** Ignore. */
-    public void setProcessErrorStream(InputStream p1) throws IOException {
-    }
-
-    /** Set the inputstream */
-    public void setProcessOutputStream(InputStream is) throws IOException {
-        metricsOutput = is;
-    }
-
-    public void start() throws IOException {
-        // create the transformer handler that will be used to serialize
-        // the output.
-        TransformerFactory factory = TransformerFactory.newInstance();
-        if (!factory.getFeature(SAXTransformerFactory.FEATURE)) {
-            throw new IllegalStateException("Invalid Transformer factory feature");
-        }
-        try {
-            metricsHandler = ((SAXTransformerFactory) factory).newTransformerHandler();
-            metricsHandler.setResult(new StreamResult(new OutputStreamWriter(xmlOutputStream, "UTF-8")));
-            Transformer transformer = metricsHandler.getTransformer();
-            transformer.setOutputProperty(OutputKeys.INDENT, "yes");
-
-            // start the document with a 'metrics' root
-            final Date now = new Date();
-            metricsHandler.startDocument();
-            AttributesImpl attr = new AttributesImpl();
-            attr.addAttribute("", "company", "company", "CDATA", "metamata");
-            attr.addAttribute("", "snapshot_created", "snapshot_created", "CDATA",
-                    DateUtils.format(now, DateUtils.ISO8601_DATETIME_PATTERN));
-//            attr.addAttribute("", "elapsed_time", "elapsed_time", "CDATA", String.valueOf(now.getTime() - program_start.getTime()));
-            attr.addAttribute("", "program_start", "program_start", "CDATA",
-                    DateUtils.format(new Date(), DateUtils.ISO8601_DATETIME_PATTERN));
-            metricsHandler.startElement("", "metrics", "metrics", attr);
-
-            // now parse the whole thing
-            parseOutput();
-
-        } catch (Exception e) {
-            throw new BuildException(e);
-        }
-    }
-
-    /**
-     * Pretty dangerous business here.
-     */
-    public void stop() {
-        try {
-            // we need to pop everything and close elements that have not been
-            // closed yet.
-            while (stack.size() > 0) {
-                ElementEntry elem = (ElementEntry) stack.pop();
-                metricsHandler.endElement("", elem.getType(), elem.getType());
-            }
-            // close the root
-            metricsHandler.endElement("", "metrics", "metrics");
-            // document is finished for good
-            metricsHandler.endDocument();
-        } catch (SAXException e) {
-            e.printStackTrace();
-            throw new IllegalStateException(e.getMessage());
-        }
-    }
-
-    /** read each line and process it */
-    protected void parseOutput() throws IOException, SAXException {
-        BufferedReader br = new BufferedReader(new InputStreamReader(metricsOutput));
-        String line = null;
-        while ((line = br.readLine()) != null) {
-            processLine(line);
-        }
-    }
-
-    /**
-     * Process a metrics line. If the metrics is invalid and that this is not
-     * the header line, it is display as info.
-     * @param line the line to process, it is normally a line full of metrics.
-     */
-    protected void processLine(String line) throws SAXException {
-        if (line.startsWith("Construct\tV(G)\tLOC\tDIT\tNOA\tNRM\tNLM\tWMC\tRFC\tDAC\tFANOUT\tCBO\tLCOM\tNOCL")) {
-            return;
-        }
-        try {
-            MetricsElement elem = MetricsElement.parse(line);
-            startElement(elem);
-        } catch (ParseException e) {
-            //e.printStackTrace();
-            // invalid lines are sent to the output as information, it might be anything,
-            task.log(line, Project.MSG_INFO);
-        }
-    }
-
-    /**
-     * Start a new construct. Elements are popped until we are on the same
-     * parent node, then the element type is guessed and pushed on the
-     * stack.
-     * @param elem the element to process.
-     * @throws SAXException thrown if there is a problem when sending SAX events.
-     */
-    protected void startElement(MetricsElement elem) throws SAXException {
-        // if there are elements in the stack we possibly need to close one or
-        // more elements previous to this one until we got its parent
-        int indent = elem.getIndent();
-        if (stack.size() > 0) {
-            ElementEntry previous = (ElementEntry) stack.peek();
-            // close nodes until you got the parent.
-            try {
-                while (indent <= previous.getIndent() && stack.size() > 0) {
-                    stack.pop();
-                    metricsHandler.endElement("", previous.getType(), previous.getType());
-                    previous = (ElementEntry) stack.peek();
-                }
-            } catch (EmptyStackException ignored) {
-            }
-        }
-
-        // ok, now start the new construct
-        String type = getConstructType(elem);
-        Attributes attrs = createAttributes(elem);
-        metricsHandler.startElement("", type, type, attrs);
-
-        // make sure we keep track of what we did, that's history
-        stack.push(new ElementEntry(type, indent));
-    }
-
-    /**
-     * return the construct type of the element. We can hardly recognize the
-     * type of a metrics element, so we are kind of forced to do some black
-     * magic based on the name and indentation to recognize the type.
-     * @param elem  the metrics element to guess for its type.
-     * @return the type of the metrics element, either PACKAGE, FILE, CLASS or
-     * METHOD.
-     */
-    protected String getConstructType(MetricsElement elem) {
-        // ok no doubt, it's a file
-        if (elem.isCompilationUnit()) {
-            return FILE;
-        }
-
-        // same, we're sure it's a method
-        if (elem.isMethod()) {
-            return METHOD;
-        }
-
-        // if it's empty, and none of the above it should be a package
-        if (stack.size() == 0) {
-            return PACKAGE;
-        }
-
-        // ok, this is now black magic time, we will guess the type based on
-        // the previous type and its indent...
-        final ElementEntry previous = (ElementEntry) stack.peek();
-        final String prevType = previous.getType();
-        final int prevIndent = previous.getIndent();
-        final int indent = elem.getIndent();
-        // we're just under a file with a bigger indent so it's a class
-        if (prevType.equals(FILE) && indent > prevIndent) {
-            return CLASS;
-        }
-
-        // we're just under a class with a greater or equals indent, it's a class
-        // (there might be several classes in a compilation unit and inner classes as well)
-        if (prevType.equals(CLASS) && indent >= prevIndent) {
-            return CLASS;
-        }
-
-        // we assume the other are package
-        return PACKAGE;
-    }
-
-
-    /**
-     * Create all attributes of a MetricsElement skipping those who have an
-     * empty string
-     */
-    protected Attributes createAttributes(MetricsElement elem) {
-        AttributesImpl impl = new AttributesImpl();
-        int i = 0;
-        String name = ATTRIBUTES[i++];
-        impl.addAttribute("", name, name, "CDATA", elem.getName());
-        Enumeration metrics = elem.getMetrics();
-        for (; metrics.hasMoreElements(); i++) {
-            String value = (String) metrics.nextElement();
-            if (value.length() > 0) {
-                name = ATTRIBUTES[i];
-                impl.addAttribute("", name, name, "CDATA", value);
-            }
-        }
-        return impl;
-    }
-
-    /**
-     * helper class to keep track of elements via its type and indent
-     * that's all we need to guess a type.
-     */
-    private static final class ElementEntry {
-        private String type;
-        private int indent;
-
-        ElementEntry(String type, int indent) {
-            this.type = type;
-            this.indent = indent;
-        }
-
-        public String getType() {
-            return type;
-        }
-
-        public int getIndent() {
-            return indent;
-        }
-    }
-}
-
-class MetricsElement {
-
-    private static final NumberFormat METAMATA_NF;
-
-    private static final NumberFormat NEUTRAL_NF;
-
-    static {
-        METAMATA_NF = NumberFormat.getInstance();
-        METAMATA_NF.setMaximumFractionDigits(1);
-        NEUTRAL_NF = NumberFormat.getInstance();
-        if (NEUTRAL_NF instanceof DecimalFormat) {
-            ((DecimalFormat) NEUTRAL_NF).applyPattern("###0.###;-###0.###");
-        }
-        NEUTRAL_NF.setMaximumFractionDigits(1);
-    }
-
-    private int indent;
-
-    private String construct;
-
-    private Vector metrics;
-
-    MetricsElement(int indent, String construct, Vector metrics) {
-        this.indent = indent;
-        this.construct = construct;
-        this.metrics = metrics;
-    }
-
-    public int getIndent() {
-        return indent;
-    }
-
-    public String getName() {
-        return construct;
-    }
-
-    public Enumeration getMetrics() {
-        return metrics.elements();
-    }
-
-    public boolean isCompilationUnit() {
-        return (construct.endsWith(".java") || construct.endsWith(".class"));
-    }
-
-    public boolean isMethod() {
-        return (construct.endsWith("(...)") || construct.endsWith("()"));
-    }
-
-    public static MetricsElement parse(String line) throws ParseException {
-        final Vector metrics = new Vector();
-        int pos;
-
-        // i'm using indexOf since I need to know if there are empty strings
-        // between tabs and I find it easier than with StringTokenizer
-        while ((pos = line.indexOf('\t')) != -1) {
-            String token = line.substring(0, pos);
-            // only parse what coudl be a valid number. ie not constructs nor no value
-            /*if (metrics.size() != 0 || token.length() != 0){
-                Number num = METAMATA_NF.parse(token); // parse with Metamata NF
-                token = NEUTRAL_NF.format(num.doubleValue()); // and format with a neutral NF
-            }*/
-            metrics.addElement(token);
-            line = line.substring(pos + 1);
-        }
-        metrics.addElement(line);
-
-        // there should be exactly 14 tokens (1 name + 13 metrics), if not, there is a problem !
-        if (metrics.size() != 14) {
-            throw new ParseException("Could not parse the following line as a metrics: -->" + line + "<--", -1);
-        }
-
-        // remove the first token it's made of the indentation string and the
-        // construct name, we'll need all this to figure out what type of
-        // construct it is since we lost all semantics :(
-        // (#indent[/]*)(#construct.*)
-        String name = (String) metrics.elementAt(0);
-        metrics.removeElementAt(0);
-        int indent = 0;
-        pos = name.lastIndexOf('/');
-        if (pos != -1) {
-            name = name.substring(pos + 1);
-            indent = pos + 1; // indentation is last position of token + 1
-        }
-        return new MetricsElement(indent, name, metrics);
-    }
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/metamata/MParse.java b/src/main/org/apache/tools/ant/taskdefs/optional/metamata/MParse.java
deleted file mode 100644
index b0cc90a..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/metamata/MParse.java
+++ /dev/null
@@ -1,355 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.metamata;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.taskdefs.ExecuteStreamHandler;
-import org.apache.tools.ant.taskdefs.LogStreamHandler;
-import org.apache.tools.ant.taskdefs.Execute;
-import org.apache.tools.ant.types.Commandline;
-import org.apache.tools.ant.types.CommandlineJava;
-import org.apache.tools.ant.types.Path;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.FileWriter;
-import java.io.PrintWriter;
-import java.util.Vector;
-import java.util.Random;
-
-/**
- * Simple Metamata MParse task based on the original written by
- * <a href="mailto:thomas.haas@softwired-inc.com">Thomas Haas</a>.
- * 
- * This version was written for Metamata 2.0 available at
- * <a href="http://www.metamata.com">http://www.metamata.com</a>
- *
- * @author <a href="mailto:sbailliez@imediation.com">Stephane Bailliez</a>
- */
-public class MParse extends Task {
-
-    private Path classpath = null;
-    private Path sourcepath = null;
-    private File metahome = null;
-    private File target = null;
-    private boolean verbose = false;
-    private boolean debugparser = false;
-    private boolean debugscanner = false;    
-    private boolean cleanup = false;
-    private CommandlineJava cmdl = new CommandlineJava();
-    private File optionsFile = null;
-
-    /** location of metamata dev environment */
-    public void setMetamatahome(File metamatahome) {
-        this.metahome = metamatahome;
-    }
-
-    /** the .jj file to process */
-    public void setTarget(File target) {
-        this.target = target;
-    }
-
-    /** create a classpath entry */
-    public Path createClasspath() {
-        if (classpath == null) {
-            classpath = new Path(project);
-        }        
-        return classpath;
-    }
-
-    /** creates a sourcepath entry */
-    public Path createSourcepath() {
-        if (sourcepath == null) {
-            sourcepath = new Path(project);
-        }        
-        return sourcepath;
-    }
-
-    /** set verbose mode */
-    public void setVerbose(boolean flag){
-        verbose = flag;
-    }
-
-    /** set scanner debug mode */
-    public void setDebugscanner(boolean flag){
-        debugscanner = flag;
-    }
-
-    /** set parser debug mode */
-    public void setDebugparser(boolean flag){
-        debugparser = flag;
-    }
-
-    /** set the hack to cleanup the temp file */
-    public void setCleanup(boolean value) {
-        cleanup = value;
-    }
-
-    /** Creates a nested jvmarg element. */
-    public Commandline.Argument createJvmarg() {
-        return cmdl.createVmArgument();
-    }
-
-    /**  -mx or -Xmx depending on VM version */
-    public void setMaxmemory(String max){
-        cmdl.setMaxmemory(max);
-    }
-
-    public MParse() {
-        cmdl.setVm("java");
-        cmdl.setClassname("com.metamata.jj.MParse");
-    }
-
-   
-    /** execute the command line */
-    public void execute() throws BuildException {
-        try {
-            setUp();
-            ExecuteStreamHandler handler = createStreamHandler();
-            _execute(handler);
-        } finally {
-            cleanUp();
-        }
-    }
-    
-    /** return the default stream handler for this task */
-    protected ExecuteStreamHandler createStreamHandler(){
-        return new LogStreamHandler(this, Project.MSG_INFO, Project.MSG_INFO);
-    }
-    
-    /**
-     * check the options and build the command line
-     */
-    protected void setUp() throws BuildException {
-        checkOptions();
-
-        // set the classpath as the jar files
-        File[] jars = getMetamataLibs();
-        final Path classPath = cmdl.createClasspath(project);
-        for (int i = 0; i < jars.length; i++){
-            classPath.createPathElement().setLocation(jars[i]);
-        }
-
-        // set the metamata.home property
-        final Commandline.Argument vmArgs = cmdl.createVmArgument();
-        vmArgs.setValue("-Dmetamata.home=" + metahome.getAbsolutePath());
-
-
-        // write all the options to a temp file and use it ro run the process
-        String[] options = getOptions();
-        optionsFile = createTmpFile();
-        generateOptionsFile(optionsFile, options);
-        Commandline.Argument args = cmdl.createArgument();
-        args.setLine("-arguments " + optionsFile.getAbsolutePath());
-    }    
-
-    
-    /** execute the process with a specific handler */
-    protected void _execute(ExecuteStreamHandler handler) throws BuildException {
-        // target has been checked as a .jj, see if there is a matching
-        // java file and if it is needed to run to process the grammar
-        String pathname = target.getAbsolutePath();
-        int pos = pathname.length() - ".jj".length();
-        pathname = pathname.substring(0, pos) + ".java";
-        File javaFile = new File(pathname);
-        if (javaFile.exists() && target.lastModified() < javaFile.lastModified()) {
-            project.log("Target is already build - skipping (" + target + ")");
-            return;
-        }
-        
-        final Execute process = new Execute(handler);
-        log(cmdl.describeCommand(), Project.MSG_VERBOSE);
-        process.setCommandline(cmdl.getCommandline());
-        try {
-            if (process.execute() != 0) {
-                throw new BuildException("Metamata task failed.");
-            }
-        } catch (IOException e){
-            throw new BuildException("Failed to launch Metamata task: " + e);
-        }
-    }    
-    
-    /** clean up all the mess that we did with temporary objects */
-    protected void cleanUp(){
-        if (optionsFile != null){
-            optionsFile.delete();
-            optionsFile = null;
-        }
-        if (cleanup) {
-            String name = target.getName();
-            int pos = name.length() - ".jj".length();
-            name = "__jj" + name.substring(0, pos) + ".sunjj";
-            final File sunjj = new File(target.getParent(), name);
-            if (sunjj.exists()) {
-                project.log("Removing stale file: " + sunjj.getName());
-                sunjj.delete();
-            }
-        }
-    }
-    
-    /**
-     * return an array of files containing the path to the needed
-     * libraries to run metamata. The file are not checked for
-     * existence. You should do this yourself if needed or simply let the
-     * forked process do it for you.
-     * @return array of jars/zips needed to run metamata.
-     */
-    protected File[] getMetamataLibs(){
-        Vector files = new Vector();
-        files.addElement(new File(metahome, "lib/metamata.jar"));
-        files.addElement(new File(metahome, "bin/lib/JavaCC.zip"));
-        
-        File[] array = new File[ files.size() ];
-        files.copyInto(array);
-        return array;
-    }
-    
-    
-    /**
-     * validate options set and resolve files and paths
-     * @throws BuildException thrown if an option has an incorrect state.
-     */
-    protected void checkOptions() throws BuildException {       
-        // check that the home is ok.
-        if (metahome == null || !metahome.exists()){
-            throw new BuildException("'metamatahome' must point to Metamata home directory.");
-        }
-        metahome = project.resolveFile(metahome.getPath());
-        
-        // check that the needed jar exists.
-        File[] jars = getMetamataLibs();
-        for (int i = 0; i < jars.length; i++){
-            if (!jars[i].exists()){
-                throw new BuildException(jars[i] 
-                    + " does not exist. Check your metamata installation.");
-            }           
-        }
-        
-        // check that the target is ok and resolve it.
-        if (target == null || !target.isFile() 
-            || !target.getName().endsWith(".jj")) {
-            throw new BuildException("Invalid target: " + target);
-        }
-        target = project.resolveFile(target.getPath());
-    }    
-    
-    /**
-     * return all options of the command line as string elements
-     * @param an array of options corresponding to the setted options.
-     */
-    protected String[] getOptions(){
-        Vector options = new Vector();
-        if (verbose){
-            options.addElement("-verbose");
-        }
-        if (debugscanner){
-            options.addElement("-ds");
-        }
-        if (debugparser){
-            options.addElement("-dp");
-        }
-        if (classpath != null){
-            options.addElement("-classpath");
-            options.addElement(classpath.toString());
-        }
-        if (sourcepath != null){
-            options.addElement("-sourcepath");
-            options.addElement(sourcepath.toString());
-        }
-        options.addElement(target.getAbsolutePath());
-        
-        String[] array = new String[options.size()];
-        options.copyInto(array);
-        return array;
-    }
-    
-    /**
-     * write all options to a file with one option / line
-     * @param tofile the file to write the options to.
-     * @param options the array of options element to write to the file.
-     * @throws BuildException thrown if there is a problem while writing
-     * to the file.
-     */
-    protected void generateOptionsFile(File tofile, String[] options) throws BuildException {
-        FileWriter fw = null;
-        try {
-            fw = new FileWriter(tofile);
-            PrintWriter pw = new PrintWriter(fw);
-            for (int i = 0; i < options.length; i++){
-                pw.println(options[i]);
-            }
-            pw.flush();
-        } catch (IOException e){
-            throw new BuildException("Error while writing options file " + tofile, e);
-        } finally {
-            if (fw != null){
-                try {
-                    fw.close();
-                } catch (IOException ignored){}
-            }
-        }
-    }
-    
-    /** create a temporary file in the current directory */
-    protected static final File createTmpFile(){
-        // must be compatible with JDK 1.1 !!!!
-        final long rand = (new Random(System.currentTimeMillis())).nextLong();
-        File file = new File("metamata" + rand + ".tmp");
-        return file;
-    }
-
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/net/FTP.java b/src/main/org/apache/tools/ant/taskdefs/optional/net/FTP.java
deleted file mode 100644
index 6d4f63c..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/net/FTP.java
+++ /dev/null
@@ -1,1028 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.net;
-
-import com.oroinc.net.ftp.FTPClient;
-import com.oroinc.net.ftp.FTPFile;
-import com.oroinc.net.ftp.FTPReply;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.DirectoryScanner;
-import org.apache.tools.ant.FileScanner;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.types.EnumeratedAttribute;
-import org.apache.tools.ant.types.FileSet;
-import org.apache.tools.ant.util.FileUtils;
-
-import java.io.BufferedInputStream;
-import java.io.BufferedOutputStream;
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.Locale;
-import java.util.Vector;
-
-/**
- * Basic FTP client that performs the following actions:
- * <ul>
- *   <li> <strong>send</strong> - send files to a remote server. This is the
- *   default action.</li>
- *   <li> <strong>get</strong> - retrive files from a remote server.</li>
- *   <li> <strong>del</strong> - delete files from a remote server.</li>
- *   <li> <strong>list</strong> - create a file listing.</li>
- *   <li> <strong>chmod</strong> - change unix file permissions.</li>
- * </ul>
- * <strong>Note:</strong> Some FTP servers - notably the Solaris server - seem
- * to hold data ports open after a "retr" operation, allowing them to timeout
- * instead of shutting them down cleanly. This happens in active or passive
- * mode, and the ports will remain open even after ending the FTP session. FTP
- * "send" operations seem to close ports immediately. This behavior may cause
- * problems on some systems when downloading large sets of files.
- *
- * @author Roger Vaughn <a href="mailto:rvaughn@seaconinc.com">
- *      rvaughn@seaconinc.com</a>
- * @author Glenn McAllister <a href="mailto:glennm@ca.ibm.com">
- *      glennm@ca.ibm.com</a>
- * @author <a href="mailto:umagesh@apache.org">Magesh Umasankar</a>
- * @since Ant 1.3
- */
-public class FTP
-     extends Task {
-    protected static final int SEND_FILES = 0;
-    protected static final int GET_FILES = 1;
-    protected static final int DEL_FILES = 2;
-    protected static final int LIST_FILES = 3;
-    protected static final int MK_DIR = 4;
-    protected static final int CHMOD = 5;
-
-    private String remotedir;
-    private String server;
-    private String userid;
-    private String password;
-    private File listing;
-    private boolean binary = true;
-    private boolean passive = false;
-    private boolean verbose = false;
-    private boolean newerOnly = false;
-    private int action = SEND_FILES;
-    private Vector filesets = new Vector();
-    private Vector dirCache = new Vector();
-    private int transferred = 0;
-    private String remoteFileSep = "/";
-    private int port = 21;
-    private boolean skipFailedTransfers = false;
-    private int skipped = 0;
-    private boolean ignoreNoncriticalErrors = false;
-    private String chmod = null;
-    private String umask = null;
-    private FileUtils fileUtils = FileUtils.newFileUtils();
-
-    protected static final String[] ACTION_STRS = {
-        "sending",
-        "getting",
-        "deleting",
-        "listing",
-        "making directory",
-        "chmod"
-        };
-
-    protected static final String[] COMPLETED_ACTION_STRS = {
-        "sent",
-        "retrieved",
-        "deleted",
-        "listed",
-        "created directory",
-        "mode changed"
-        };
-
-
-    protected class FTPDirectoryScanner extends DirectoryScanner {
-        protected FTPClient ftp = null;
-
-
-        public FTPDirectoryScanner(FTPClient ftp) {
-            super();
-            this.ftp = ftp;
-        }
-
-
-        public void scan() {
-            if (includes == null) {
-                // No includes supplied, so set it to 'matches all'
-                includes = new String[1];
-                includes[0] = "**";
-            }
-            if (excludes == null) {
-                excludes = new String[0];
-            }
-
-            filesIncluded = new Vector();
-            filesNotIncluded = new Vector();
-            filesExcluded = new Vector();
-            dirsIncluded = new Vector();
-            dirsNotIncluded = new Vector();
-            dirsExcluded = new Vector();
-
-            try {
-                String cwd = ftp.printWorkingDirectory();
-                // always start from the current ftp working dir
-                scandir(".", "", true);
-                ftp.changeWorkingDirectory(cwd);
-            } catch (IOException e) {
-                throw new BuildException("Unable to scan FTP server: ", e);
-            }
-        }
-
-
-        protected void scandir(String dir, String vpath, boolean fast) {
-            try {
-                if (!ftp.changeWorkingDirectory(dir)) {
-                    return;
-                }
-
-                FTPFile[] newfiles = ftp.listFiles();
-
-                if (newfiles == null) {
-                    ftp.changeToParentDirectory();
-                    return;
-                }
-
-                for (int i = 0; i < newfiles.length; i++) {
-                    FTPFile file = newfiles[i];
-
-                    if (!file.getName().equals(".")
-                         && !file.getName().equals("..")) {
-                        if (file.isDirectory()) {
-                            String name = vpath + file.getName();
-                            if (isIncluded(name)) {
-                                if (!isExcluded(name)) {
-                                    dirsIncluded.addElement(name);
-                                    if (fast) {
-                                        scandir(file.getName(), 
-                                                name + File.separator, fast);
-                                    }
-                                } else {
-                                    dirsExcluded.addElement(name);
-                                    if (fast && couldHoldIncluded(name)) {
-                                        scandir(file.getName(), 
-                                                name + File.separator, fast);
-                                    }
-                                }
-                            } else {
-                                dirsNotIncluded.addElement(name);
-                                if (fast && couldHoldIncluded(name)) {
-                                    scandir(file.getName(), 
-                                            name + File.separator, fast);
-                                }
-                            }
-                            if (!fast) {
-                                scandir(file.getName(), 
-                                        name + File.separator, fast);
-                            }
-                        } else {
-                            if (file.isFile()) {
-                                String name = vpath + file.getName();
-
-                                if (isIncluded(name)) {
-                                    if (!isExcluded(name)) {
-                                        filesIncluded.addElement(name);
-                                    } else {
-                                        filesExcluded.addElement(name);
-                                    }
-                                } else {
-                                    filesNotIncluded.addElement(name);
-                                }
-                            }
-                        }
-                    }
-                }
-                ftp.changeToParentDirectory();
-            } catch (IOException e) {
-                throw new BuildException("Error while communicating with FTP "
-                     + "server: ", e);
-            }
-        }
-    }
-
-
-    /**
-     * Sets the remote directory where files will be placed. This may be a
-     * relative or absolute path, and must be in the path syntax expected by
-     * the remote server. No correction of path syntax will be performed.
-     */
-    public void setRemotedir(String dir) {
-        this.remotedir = dir;
-    }
-
-
-    /** Sets the FTP server to send files to.  */
-    public void setServer(String server) {
-        this.server = server;
-    }
-
-
-    /** Sets the FTP port used by the remote server.  */
-    public void setPort(int port) {
-        this.port = port;
-    }
-
-
-    /** Sets the login user id to use on the specified server.  */
-    public void setUserid(String userid) {
-        this.userid = userid;
-    }
-
-
-    /** Sets the login password for the given user id.  */
-    public void setPassword(String password) {
-        this.password = password;
-    }
-
-
-    /**
-     * Specifies whether to use binary-mode or text-mode transfers. Set to
-     * true to send binary mode. Binary mode is enabled by default.
-     */
-    public void setBinary(boolean binary) {
-        this.binary = binary;
-    }
-
-
-    /**
-     * Specifies whether to use passive mode. Set to true if you are behind a
-     * firewall and cannot connect without it. Passive mode is disabled by
-     * default.
-     */
-    public void setPassive(boolean passive) {
-        this.passive = passive;
-    }
-
-
-    /**
-     * Set to true to receive notification about each file as it is
-     * transferred.
-     */
-    public void setVerbose(boolean verbose) {
-        this.verbose = verbose;
-    }
-
-
-    /**
-     * Set to true to transmit only files that are new or changed from their
-     * remote counterparts. The default is to transmit all files.
-     */
-    public void setNewer(boolean newer) {
-        this.newerOnly = newer;
-    }
-
-
-    /**
-     * A synonym for setNewer. Set to true to transmit only new or changed
-     * files.
-     */
-    public void setDepends(boolean depends) {
-        this.newerOnly = depends;
-    }
-
-
-    /**
-     * Sets the remote file separator character. This normally defaults to the
-     * Unix standard forward slash, but can be manually overridden using this
-     * call if the remote server requires some other separator. Only the first
-     * character of the string is used.
-     */
-    public void setSeparator(String separator) {
-        remoteFileSep = separator;
-    }
-
-
-    /**
-     * Sets the file permission mode (Unix only) for files sent to the server.
-     */
-
-    public void setChmod(String theMode) {
-        this.chmod = theMode;
-    }
-
-
-    /** Sets the default mask for file creation on a unix server.  */
-
-    public void setUmask(String theUmask) {
-        this.umask = theUmask;
-    }
-
-
-    /** Adds a set of files (nested fileset attribute).  */
-    public void addFileset(FileSet set) {
-        filesets.addElement(set);
-    }
-
-
-    /**
-     * Sets the FTP action to be taken. Currently accepts "put", "get", "del",
-     * "mkdir" and "list".
-     *
-     * @deprecated setAction(String) is deprecated and is replaced with
-     *      setAction(FTP.Action) to make Ant's Introspection mechanism do the
-     *      work and also to encapsulate operations on the type in its own
-     *      class.
-     */
-    public void setAction(String action) throws BuildException {
-        log("DEPRECATED - The setAction(String) method has been deprecated."
-             + " Use setAction(FTP.Action) instead.");
-
-        Action a = new Action();
-
-        a.setValue(action);
-        this.action = a.getAction();
-    }
-
-
-    /**
-     * Sets the FTP action to be taken. Currently accepts "put", "get", "del",
-     * "mkdir", "chmod" and "list".
-     */
-    public void setAction(Action action) throws BuildException {
-        this.action = action.getAction();
-    }
-
-
-    /**
-     * The output file for the "list" action. This attribute is ignored for
-     * any other actions.
-     */
-    public void setListing(File listing) throws BuildException {
-        this.listing = listing;
-    }
-
-
-    /** set the failed transfer flag  */
-    public void setSkipFailedTransfers(boolean skipFailedTransfers) {
-        this.skipFailedTransfers = skipFailedTransfers;
-    }
-
-
-    /**
-     * set the flag to skip errors on dir creation (and maybe later other
-     * server specific errors)
-     */
-    public void setIgnoreNoncriticalErrors(boolean ignoreNoncriticalErrors) {
-        this.ignoreNoncriticalErrors = ignoreNoncriticalErrors;
-    }
-
-
-    /** Checks to see that all required parameters are set.  */
-    protected void checkConfiguration() throws BuildException {
-        if (server == null) {
-            throw new BuildException("server attribute must be set!");
-        }
-        if (userid == null) {
-            throw new BuildException("userid attribute must be set!");
-        }
-        if (password == null) {
-            throw new BuildException("password attribute must be set!");
-        }
-
-        if ((action == LIST_FILES) && (listing == null)) {
-            throw new BuildException("listing attribute must be set for list "
-                 + "action!");
-        }
-
-        if (action == MK_DIR && remotedir == null) {
-            throw new BuildException("remotedir attribute must be set for "
-                 + "mkdir action!");
-        }
-
-        if (action == CHMOD && chmod == null) {
-            throw new BuildException("chmod attribute must be set for chmod "
-                 + "action!");
-        }
-    }
-
-
-    /**
-     * For each file in the fileset, do the appropriate action: send, get,
-     * delete, or list.
-     */
-    protected int transferFiles(FTPClient ftp, FileSet fs)
-         throws IOException, BuildException {
-        FileScanner ds;
-
-        if (action == SEND_FILES) {
-            ds = fs.getDirectoryScanner(project);
-        } else {
-            ds = new FTPDirectoryScanner(ftp);
-            fs.setupDirectoryScanner(ds, project);
-            ds.scan();
-        }
-
-        String[] dsfiles = ds.getIncludedFiles();
-        String dir = null;
-
-        if ((ds.getBasedir() == null)
-             && ((action == SEND_FILES) || (action == GET_FILES))) {
-            throw new BuildException("the dir attribute must be set for send "
-                 + "and get actions");
-        } else {
-            if ((action == SEND_FILES) || (action == GET_FILES)) {
-                dir = ds.getBasedir().getAbsolutePath();
-            }
-        }
-
-        // If we are doing a listing, we need the output stream created now.
-        BufferedWriter bw = null;
-
-        try {
-            if (action == LIST_FILES) {
-                File pd = fileUtils.getParentFile(listing);
-
-                if (!pd.exists()) {
-                    pd.mkdirs();
-                }
-                bw = new BufferedWriter(new FileWriter(listing));
-            }
-
-            for (int i = 0; i < dsfiles.length; i++) {
-                switch (action) {
-                    case SEND_FILES:
-                    {
-                        sendFile(ftp, dir, dsfiles[i]);
-                        break;
-                    }
-
-                    case GET_FILES:
-                    {
-                        getFile(ftp, dir, dsfiles[i]);
-                        break;
-                    }
-
-                    case DEL_FILES:
-                    {
-                        delFile(ftp, dsfiles[i]);
-                        break;
-                    }
-
-                    case LIST_FILES:
-                    {
-                        listFile(ftp, bw, dsfiles[i]);
-                        break;
-                    }
-
-                    case CHMOD:
-                    {
-                        doSiteCommand(ftp, "chmod " + chmod + " " + dsfiles[i]);
-                        transferred++;
-                        break;
-                    }
-
-                    default:
-                    {
-                        throw new BuildException("unknown ftp action " + action);
-                    }
-                }
-            }
-        } finally {
-            if (bw != null) {
-                bw.close();
-            }
-        }
-
-        return dsfiles.length;
-    }
-
-
-    /**
-     * Sends all files specified by the configured filesets to the remote
-     * server.
-     */
-    protected void transferFiles(FTPClient ftp)
-         throws IOException, BuildException {
-        transferred = 0;
-        skipped = 0;
-
-        if (filesets.size() == 0) {
-            throw new BuildException("at least one fileset must be specified.");
-        } else {
-            // get files from filesets
-            for (int i = 0; i < filesets.size(); i++) {
-                FileSet fs = (FileSet) filesets.elementAt(i);
-
-                if (fs != null) {
-                    transferFiles(ftp, fs);
-                }
-            }
-        }
-
-        log(transferred + " files " + COMPLETED_ACTION_STRS[action]);
-        if (skipped != 0) {
-            log(skipped + " files were not successfully "
-                 + COMPLETED_ACTION_STRS[action]);
-        }
-    }
-
-
-    /**
-     * Correct a file path to correspond to the remote host requirements. This
-     * implementation currently assumes that the remote end can handle
-     * Unix-style paths with forward-slash separators. This can be overridden
-     * with the <code>separator</code> task parameter. No attempt is made to
-     * determine what syntax is appropriate for the remote host.
-     */
-    protected String resolveFile(String file) {
-        return file.replace(System.getProperty("file.separator").charAt(0),
-            remoteFileSep.charAt(0));
-    }
-
-
-    /**
-     * Creates all parent directories specified in a complete relative
-     * pathname. Attempts to create existing directories will not cause
-     * errors.
-     */
-    protected void createParents(FTPClient ftp, String filename)
-         throws IOException, BuildException {
-        Vector parents = new Vector();
-        File dir = new File(filename);
-        String dirname;
-
-        while ((dirname = dir.getParent()) != null) {
-            dir = new File(dirname);
-            parents.addElement(dir);
-        }
-
-        for (int i = parents.size() - 1; i >= 0; i--) {
-            dir = (File) parents.elementAt(i);
-            if (!dirCache.contains(dir)) {
-                log("creating remote directory " + resolveFile(dir.getPath()),
-                    Project.MSG_VERBOSE);
-                ftp.makeDirectory(resolveFile(dir.getPath()));
-                // Both codes 550 and 553 can be produced by FTP Servers
-                //  to indicate that an attempt to create a directory has
-                //  failed because the directory already exists.
-                int result = ftp.getReplyCode();
-
-                if (!FTPReply.isPositiveCompletion(result) &&
-                    (result != 550) && (result != 553) &&
-                    !ignoreNoncriticalErrors) {
-                    throw new BuildException("could not create directory: " +
-                        ftp.getReplyString());
-                }
-                dirCache.addElement(dir);
-            }
-        }
-    }
-
-
-    /**
-     * Checks to see if the remote file is current as compared with the local
-     * file. Returns true if the remote file is up to date.
-     */
-    protected boolean isUpToDate(FTPClient ftp, File localFile,
-                                 String remoteFile)
-         throws IOException, BuildException {
-        log("checking date for " + remoteFile, Project.MSG_VERBOSE);
-
-        FTPFile[] files = ftp.listFiles(remoteFile);
-
-        // For Microsoft's Ftp-Service an Array with length 0 is
-        // returned if configured to return listings in "MS-DOS"-Format
-        if (files == null || files.length == 0) {
-            // If we are sending files, then assume out of date.
-            // If we are getting files, then throw an error
-
-            if (action == SEND_FILES) {
-                log("Could not date test remote file: " + remoteFile
-                     + "assuming out of date.", Project.MSG_VERBOSE);
-                return false;
-            } else {
-                throw new BuildException("could not date test remote file: " +
-                    ftp.getReplyString());
-            }
-        }
-
-        long remoteTimestamp = files[0].getTimestamp().getTime().getTime();
-        long localTimestamp = localFile.lastModified();
-
-        if (this.action == SEND_FILES) {
-            return remoteTimestamp > localTimestamp;
-        } else {
-            return localTimestamp > remoteTimestamp;
-        }
-    }
-
-
-    /** Sends a site command to the ftp server  */
-    protected void doSiteCommand(FTPClient ftp, String TheCMD)
-         throws IOException, BuildException {
-        boolean rc;
-        String MyReply[] = null;
-
-        log("Doing Site Command: " + TheCMD, Project.MSG_VERBOSE);
-
-        rc = ftp.sendSiteCommand(TheCMD);
-
-        if (rc == false) {
-            log("Failed to issue Site Command: " + TheCMD, Project.MSG_WARN);
-        } else {
-
-            MyReply = ftp.getReplyStrings();
-
-            for (int x = 0; x < MyReply.length; x++) {
-                if (MyReply[x].indexOf("200") == -1) {
-                    log(MyReply[x], Project.MSG_WARN);
-                }
-            }
-        }
-    }
-
-
-    /**
-     * Sends a single file to the remote host. <code>filename</code> may
-     * contain a relative path specification. When this is the case, <code>sendFile</code>
-     * will attempt to create any necessary parent directories before sending
-     * the file. The file will then be sent using the entire relative path
-     * spec - no attempt is made to change directories. It is anticipated that
-     * this may eventually cause problems with some FTP servers, but it
-     * simplifies the coding.
-     */
-    protected void sendFile(FTPClient ftp, String dir, String filename)
-         throws IOException, BuildException {
-        InputStream instream = null;
-
-        try {
-            // XXX - why not simply new File(dir, filename)?
-            File file = project.resolveFile(new File(dir, filename).getPath());
-
-            if (newerOnly && isUpToDate(ftp, file, resolveFile(filename))) {
-                return;
-            }
-
-            if (verbose) {
-                log("transferring " + file.getAbsolutePath());
-            }
-
-            instream = new BufferedInputStream(new FileInputStream(file));
-
-            createParents(ftp, filename);
-
-            ftp.storeFile(resolveFile(filename), instream);
-
-            boolean success = FTPReply.isPositiveCompletion(ftp.getReplyCode());
-
-            if (!success) {
-                String s = "could not put file: " + ftp.getReplyString();
-
-                if (skipFailedTransfers == true) {
-                    log(s, Project.MSG_WARN);
-                    skipped++;
-                } else {
-                    throw new BuildException(s);
-                }
-
-            } else {
-                if (chmod != null) {// see if we should issue a chmod command
-                    doSiteCommand(ftp, "chmod " + chmod + " " + filename);
-                }
-                log("File " + file.getAbsolutePath() + " copied to " + server,
-                    Project.MSG_VERBOSE);
-                transferred++;
-            }
-        } finally {
-            if (instream != null) {
-                try {
-                    instream.close();
-                } catch (IOException ex) {
-                    // ignore it
-                }
-            }
-        }
-    }
-
-
-    /** Delete a file from the remote host.  */
-    protected void delFile(FTPClient ftp, String filename)
-         throws IOException, BuildException {
-        if (verbose) {
-            log("deleting " + filename);
-        }
-
-        if (!ftp.deleteFile(resolveFile(filename))) {
-            String s = "could not delete file: " + ftp.getReplyString();
-
-            if (skipFailedTransfers == true) {
-                log(s, Project.MSG_WARN);
-                skipped++;
-            } else {
-                throw new BuildException(s);
-            }
-        } else {
-            log("File " + filename + " deleted from " + server,
-                Project.MSG_VERBOSE);
-            transferred++;
-        }
-    }
-
-
-    /**
-     * Retrieve a single file to the remote host. <code>filename</code> may
-     * contain a relative path specification. <p>
-     *
-     * The file will then be retreived using the entire relative path spec -
-     * no attempt is made to change directories. It is anticipated that this
-     * may eventually cause problems with some FTP servers, but it simplifies
-     * the coding.</p>
-     */
-    protected void getFile(FTPClient ftp, String dir, String filename)
-         throws IOException, BuildException {
-        OutputStream outstream = null;
-
-        try {
-            File file = project.resolveFile(new File(dir, filename).getPath());
-
-            if (newerOnly && isUpToDate(ftp, file, resolveFile(filename))) {
-                return;
-            }
-
-            if (verbose) {
-                log("transferring " + filename + " to "
-                     + file.getAbsolutePath());
-            }
-
-            File pdir = fileUtils.getParentFile(file);
-
-            if (!pdir.exists()) {
-                pdir.mkdirs();
-            }
-            outstream = new BufferedOutputStream(new FileOutputStream(file));
-            ftp.retrieveFile(resolveFile(filename), outstream);
-
-            if (!FTPReply.isPositiveCompletion(ftp.getReplyCode())) {
-                String s = "could not get file: " + ftp.getReplyString();
-
-                if (skipFailedTransfers == true) {
-                    log(s, Project.MSG_WARN);
-                    skipped++;
-                } else {
-                    throw new BuildException(s);
-                }
-
-            } else {
-                log("File " + file.getAbsolutePath() + " copied from "
-                     + server, Project.MSG_VERBOSE);
-                transferred++;
-            }
-        } finally {
-            if (outstream != null) {
-                try {
-                    outstream.close();
-                } catch (IOException ex) {
-                    // ignore it
-                }
-            }
-        }
-    }
-
-
-    /**
-     * List information about a single file from the remote host. <code>filename</code>
-     * may contain a relative path specification. <p>
-     *
-     * The file listing will then be retrieved using the entire relative path
-     * spec - no attempt is made to change directories. It is anticipated that
-     * this may eventually cause problems with some FTP servers, but it
-     * simplifies the coding.</p>
-     */
-    protected void listFile(FTPClient ftp, BufferedWriter bw, String filename)
-         throws IOException, BuildException {
-        if (verbose) {
-            log("listing " + filename);
-        }
-
-        FTPFile ftpfile = ftp.listFiles(resolveFile(filename))[0];
-
-        bw.write(ftpfile.toString());
-        bw.newLine();
-
-        transferred++;
-    }
-
-
-    /**
-     * Create the specified directory on the remote host.
-     *
-     * @param ftp The FTP client connection
-     * @param dir The directory to create (format must be correct for host
-     *      type)
-     */
-    protected void makeRemoteDir(FTPClient ftp, String dir)
-         throws IOException, BuildException {
-        if (verbose) {
-            log("creating directory: " + dir);
-        }
-
-        if (!ftp.makeDirectory(dir)) {
-            // codes 521, 550 and 553 can be produced by FTP Servers
-            //  to indicate that an attempt to create a directory has
-            //  failed because the directory already exists.
-
-            int rc = ftp.getReplyCode();
-
-            if (!(ignoreNoncriticalErrors
-                 && (rc == 550 || rc == 553 || rc == 521))) {
-                throw new BuildException("could not create directory: " +
-                    ftp.getReplyString());
-            }
-
-            if (verbose) {
-                log("directory already exists");
-            }
-        } else {
-            if (verbose) {
-                log("directory created OK");
-            }
-        }
-    }
-
-
-    /** Runs the task.  */
-    public void execute()
-         throws BuildException {
-        checkConfiguration();
-
-        FTPClient ftp = null;
-
-        try {
-            log("Opening FTP connection to " + server, Project.MSG_VERBOSE);
-
-            ftp = new FTPClient();
-
-            ftp.connect(server, port);
-            if (!FTPReply.isPositiveCompletion(ftp.getReplyCode())) {
-                throw new BuildException("FTP connection failed: "
-                     + ftp.getReplyString());
-            }
-
-            log("connected", Project.MSG_VERBOSE);
-            log("logging in to FTP server", Project.MSG_VERBOSE);
-
-            if (!ftp.login(userid, password)) {
-                throw new BuildException("Could not login to FTP server");
-            }
-
-            log("login succeeded", Project.MSG_VERBOSE);
-
-            if (binary) {
-                ftp.setFileType(com.oroinc.net.ftp.FTP.IMAGE_FILE_TYPE);
-                if (!FTPReply.isPositiveCompletion(ftp.getReplyCode())) {
-                    throw new BuildException("could not set transfer type: " +
-                        ftp.getReplyString());
-                }
-            }
-
-            if (passive) {
-                log("entering passive mode", Project.MSG_VERBOSE);
-                ftp.enterLocalPassiveMode();
-                if (!FTPReply.isPositiveCompletion(ftp.getReplyCode())) {
-                    throw new BuildException("could not enter into passive "
-                         + "mode: " +
-                        ftp.getReplyString());
-                }
-            }
-
-            // For a unix ftp server you can set the default mask for all files
-            // created.
-
-            if (umask != null) {
-                doSiteCommand(ftp, "umask " + umask);
-            }
-
-            // If the action is MK_DIR, then the specified remote
-            // directory is the directory to create.
-
-            if (action == MK_DIR) {
-
-                makeRemoteDir(ftp, remotedir);
-
-            } else {
-                if (remotedir != null) {
-                    log("changing the remote directory", Project.MSG_VERBOSE);
-                    ftp.changeWorkingDirectory(remotedir);
-                    if (!FTPReply.isPositiveCompletion(ftp.getReplyCode())) {
-                        throw new BuildException("could not change remote "
-                             + "directory: " +
-                            ftp.getReplyString());
-                    }
-                }
-                log(ACTION_STRS[action] + " files");
-                transferFiles(ftp);
-            }
-
-        } catch (IOException ex) {
-            throw new BuildException("error during FTP transfer: " + ex);
-        } finally {
-            if (ftp != null && ftp.isConnected()) {
-                try {
-                    log("disconnecting", Project.MSG_VERBOSE);
-                    ftp.logout();
-                    ftp.disconnect();
-                } catch (IOException ex) {
-                    // ignore it
-                }
-            }
-        }
-    }
-
-
-    public static class Action extends EnumeratedAttribute {
-
-        private static final String[] validActions = {
-            "send", "put", "recv", "get", "del", "delete", "list", "mkdir",
-            "chmod"
-            };
-
-
-        public String[] getValues() {
-            return validActions;
-        }
-
-
-        public int getAction() {
-            String actionL = getValue().toLowerCase(Locale.US);
-
-            if (actionL.equals("send") ||
-                actionL.equals("put")) {
-                return SEND_FILES;
-            } else if (actionL.equals("recv") ||
-                actionL.equals("get")) {
-                return GET_FILES;
-            } else if (actionL.equals("del") ||
-                actionL.equals("delete")) {
-                return DEL_FILES;
-            } else if (actionL.equals("list")) {
-                return LIST_FILES;
-            } else if (actionL.equals("chmod")) {
-                return CHMOD;
-            } else if (actionL.equals("mkdir")) {
-                return MK_DIR;
-            }
-            return SEND_FILES;
-        }
-    }
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/net/MimeMail.java b/src/main/org/apache/tools/ant/taskdefs/optional/net/MimeMail.java
deleted file mode 100644
index 17eda15..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/net/MimeMail.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.net;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.taskdefs.email.EmailTask;
-
-/**
- * A task to send SMTP email. This version has near identical syntax to
- * the SendEmail task, but is MIME aware. It also requires Sun's mail.jar and
- * activation.jar to compile and execute, which puts it clearly into the
- * very optional category.
- *
- * @deprecated Use {@link EmailTask} instead.
- *
- * @author glenn_twiggs@bmc.com
- * @author steve_l@iseran.com steve loughran
- * @author ehatcher@apache.org Erik Hatcher
- * @author paulo.gaspar@krankikom.de Paulo Gaspar
- */
-public class MimeMail extends EmailTask {
-    /**
-     * Executes this build task.
-     *
-     * @exception BuildException On error.
-     */
-    public void execute()
-        throws BuildException {
-        log("DEPRECATED - The " + getTaskName() + " task is deprecated. " 
-            + "Use the mail task instead.");
-        super.execute();
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/net/SetProxy.java b/src/main/org/apache/tools/ant/taskdefs/optional/net/SetProxy.java
deleted file mode 100644
index 11528fd..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/net/SetProxy.java
+++ /dev/null
@@ -1,259 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- * any, must include the following acknowlegement:
- * "This product includes software developed by the
- * Apache Software Foundation (http://www.apache.org/)."
- * Alternately, this acknowlegement may appear in the software itself,
- * if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- * Foundation" must not be used to endorse or promote products derived
- * from this software without prior written permission. For written
- * permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- * nor may "Apache" appear in their names without prior written
- * permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.net;
-
-import java.io.*;
-import java.net.*;
-import java.util.*;
-import java.lang.reflect.*;
-import org.apache.tools.ant.*;
-import org.apache.tools.ant.util.JavaEnvUtils;
-
-/**
- * proxy definition task. This allows all tasks in the build file
- * executed after this task to access the web through a proxy server
- * @see <a href="http://java.sun.com/j2se/1.4/docs/guide/net/properties.html">
- *  java 1.4 network property list</a>
- * @author Steve Loughran
- * @ant.task
- */
-public class SetProxy extends Task {
-
-    /**
-     * proxy details
-     */
-    protected String proxyHost = null;
-
-    /**
-     * name of proxy port
-     */
-    protected int proxyPort = 80;
-
-    /**
-     * socks host.
-     */
-    private String socksProxyHost = null;
-    
-    /**
-     * socks proxy port. 1080 is the default
-     */
-    private int socksProxyPort = 1080;
-
-
-    /**
-     * list of non proxy hosts
-     */ 
-    private String nonProxyHosts = null;
-
-    /**
-     * Set a proxy host. The port should be defined too.
-     *
-     * @param hostname the new proxy hostname
-     */
-    public void setProxyHost(String hostname) {
-        proxyHost = hostname;
-    }
-
-
-    /**
-     * set the proxy port number.
-     *
-     * @param port port number of the proxy
-     */
-    public void setProxyPort(int port) {
-        proxyPort = port;
-    }
-
-    /**
-     * Set the SocksProxyHost attribute
-     *
-     * @param host The new SocksProxyHost value
-     */
-    public void setSocksProxyHost(String host) {
-        this.socksProxyHost = host;
-    }
-
-
-    /**
-     * Set the SocksProxyPort attribute
-     *
-     * @param port The new SocksProxyPort value
-     */
-    public void setSocksProxyPort(int port) {
-        this.socksProxyPort = port;
-    }
-
-    /**
-     * Specify a list of hosts to bypass the proxy on. These should be separated
-     * with the vertical bar character '|'.
-     * e.g. fozbot.corp.sun.com|*.eng.sun.com
-     * @param nonProxyHosts lists of hosts to talk direct to
-     */ 
-    public void setNonProxyHosts(String nonProxyHosts) {
-        this.nonProxyHosts = nonProxyHosts;
-    }
-
-    /**
-     * if the proxy port and host settings are not null, then the settings
-     * get applied these settings last beyond the life of the object and
-     * apply to all network connections
-     * Relevant docs: buglist #4183340
-     * @return true if the settings were applied
-     */
-
-    public void applyWebProxySettings() {
-        boolean settingsChanged = false;
-        boolean enablingProxy = false;
-        Properties sysprops = System.getProperties();
-        if (proxyHost != null) {
-            settingsChanged = true;
-            if (proxyHost.length() != 0) {
-                traceSettingInfo();
-                enablingProxy = true;
-                sysprops.put("http.proxyHost", proxyHost);
-                String portString = Integer.toString(proxyPort);
-                sysprops.put("http.proxyPort", portString);
-                sysprops.put("https.proxyHost", proxyHost);
-                sysprops.put("https.proxyPort", portString);
-                sysprops.put("ftp.proxyHost", proxyHost);
-                sysprops.put("ftp.proxyPort", portString);
-                if (nonProxyHosts != null) {
-                    sysprops.put("http.nonProxyHosts", nonProxyHosts);
-                    sysprops.put("ftp.nonProxyHosts", nonProxyHosts);
-                }                    
-            } else {
-                log("resetting http proxy", Project.MSG_VERBOSE);
-                sysprops.remove("http.proxyPort");
-                sysprops.remove("https.proxyHost");
-                sysprops.remove("https.proxyPort");
-                sysprops.remove("ftp.proxyHost");
-                sysprops.remove("ftp.proxyPort");
-            }
-        }
-
-        //socks
-        if (socksProxyHost != null) {
-            settingsChanged = true;
-            if (socksProxyHost.length() != 0) {
-                enablingProxy = true;
-                sysprops.put("socksProxyHost", socksProxyHost);
-                sysprops.put("socksProxyPort", Integer.toString(socksProxyPort));
-            } else {
-                log("resetting socks proxy", Project.MSG_VERBOSE);
-                sysprops.remove("socksProxyHost");
-                sysprops.remove("socksProxyPort");
-            }
-        }
-        
-
-        //for Java1.1 we need to tell the system that the settings are new
-        if (settingsChanged &&
-            JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_1)) {
-            legacyResetProxySettingsCall(enablingProxy);
-        }
-    }
-
-    /**
-     * list out what is going on
-     */ 
-    private void traceSettingInfo() {
-        log("Setting proxy to " 
-                + (proxyHost != null ? proxyHost : "''") 
-                + ":" + proxyPort,
-                Project.MSG_VERBOSE);
-    }
-
-
-    /**
-     * make a call to sun.net.www.http.HttpClient.resetProperties();
-     * this is only needed for java 1.1; reflection is used to stop the compiler
-     * whining, and in case cleanroom JVMs dont have the class.
-     * @return true if we did something
-     */
-
-    protected boolean legacyResetProxySettingsCall(boolean setProxy) {
-        System.getProperties().put("http.proxySet", new Boolean(setProxy).toString());
-        try {
-            Class c = Class.forName("sun.net.www.http.HttpClient");
-            Method reset = c.getMethod("resetProperties", null);
-            reset.invoke(null, null);
-            return true;
-        }
-        catch (ClassNotFoundException cnfe) {
-            return false;
-        }
-        catch (NoSuchMethodException e) {
-            return false;
-        }
-        catch (IllegalAccessException e) {
-            return false;
-        }
-        catch (InvocationTargetException e) {
-            return false;
-        }
-    }
-
-
-    /**
-     * Does the work.
-     *
-     * @exception BuildException thrown in unrecoverable error.
-     */
-    public void execute() throws BuildException {
-        applyWebProxySettings();
-    }
-
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/net/TelnetTask.java b/src/main/org/apache/tools/ant/taskdefs/optional/net/TelnetTask.java
deleted file mode 100644
index c702262..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/net/TelnetTask.java
+++ /dev/null
@@ -1,360 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000,2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.net;
-
-import com.oroinc.net.telnet.TelnetClient;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.Task;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.Calendar;
-import java.util.Enumeration;
-import java.util.Vector;
-
-/**
- * Class to provide automated telnet protocol support for the Ant build tool
- *
- * @author <a href="mailto:ScottCarlson@email.com">ScottCarlson@email.com</a>
- * @version $Revision$
- */
-
-public class TelnetTask extends Task {
-    /**
-     *  The userid to login with, if automated login is used
-     */
-    private String userid  = null;
-
-    /**
-     *  The password to login with, if automated login is used
-     */
-    private String password = null;
-
-    /**
-     *  The server to connect to. 
-     */
-    private String server  = null;
-
-    /**
-     *  The tcp port to connect to. 
-     */
-    private int port = 23;
-
-    /**
-     *  The Object which handles the telnet session.
-     */
-    private AntTelnetClient telnet = null;
-
-    /**
-     *  The list of read/write commands for this session
-     */
-    private Vector telnetTasks = new Vector();
-
-    /** 
-     *  If true, adds a CR to beginning of login script
-     */
-    private boolean addCarriageReturn = false;
-
-    /**
-     *  Default time allowed for waiting for a valid response
-     *  for all child reads.  A value of 0 means no limit.
-     */
-    private Integer defaultTimeout = null;
-
-    /** 
-     *  Verify that all parameters are included. 
-     *  Connect and possibly login
-     *  Iterate through the list of Reads and writes 
-     */
-    public void execute() throws BuildException {
-       /**  A server name is required to continue */
-       if (server == null) {
-           throw new BuildException("No Server Specified");
-       }
-       /**  A userid and password must appear together 
-        *   if they appear.  They are not required.
-        */
-       if (userid == null && password != null) {
-           throw new BuildException("No Userid Specified");
-       }
-       if (password == null && userid != null) {
-           throw new BuildException("No Password Specified");
-       }
-
-       /**  Create the telnet client object */
-       telnet = new AntTelnetClient();
-       try {
-           telnet.connect(server, port);
-       } catch (IOException e) {
-           throw new BuildException("Can't connect to " + server);
-       }
-       /**  Login if userid and password were specified */
-       if (userid != null && password != null) {
-          login();
-       }
-       /**  Process each sub command */
-       Enumeration tasksToRun = telnetTasks.elements();
-       while (tasksToRun != null && tasksToRun.hasMoreElements()) {
-           TelnetSubTask task = (TelnetSubTask) tasksToRun.nextElement();
-           if (task instanceof TelnetRead && defaultTimeout != null) {
-               ((TelnetRead) task).setDefaultTimeout(defaultTimeout);
-           }
-           task.execute(telnet);
-       }
-    }
-
-    /**  
-     *  Process a 'typical' login.  If it differs, use the read 
-     *  and write tasks explicitely
-     */
-    private void login() {
-       if (addCarriageReturn) {
-          telnet.sendString("\n", true);
-       }
-       telnet.waitForString("ogin:");
-       telnet.sendString(userid, true);
-       telnet.waitForString("assword:");
-       telnet.sendString(password, false);
-    }
-
-    /**
-     *  Set the userid attribute 
-     */
-    public void setUserid(String u) { this.userid = u; }
-
-    /**
-     *  Set the password attribute 
-     */
-    public void setPassword(String p) { this.password = p; }
-
-    /**
-     *  Set the server address attribute 
-     */
-    public void setServer(String m) { this.server = m; }
-
-    /**
-     *  Set the tcp port to connect to attribute 
-     */
-    public void setPort(int p) { this.port = p; }
-
-    /**
-     *  Set the tcp port to connect to attribute 
-     */
-    public void setInitialCR(boolean b) {
-       this.addCarriageReturn = b;
-    }
-
-    /**
-     *  Change the default timeout to wait for 
-     *  valid responses
-     */
-    public void setTimeout(Integer i) {
-       this.defaultTimeout = i;
-    }
-
-    /**
-     *  A subTask &lt;read&gt; tag was found.  Create the object, 
-     *  Save it in our list, and return it.
-     */
-   
-    public TelnetSubTask createRead() {
-        TelnetSubTask task = (TelnetSubTask) new TelnetRead();
-        telnetTasks.addElement(task);
-        return task;
-    }
-
-    /**
-     *  A subTask &lt;write&gt; tag was found.  Create the object, 
-     *  Save it in our list, and return it.
-     */
-    public TelnetSubTask createWrite() {
-        TelnetSubTask task = (TelnetSubTask) new TelnetWrite();
-        telnetTasks.addElement(task);
-        return task;
-    }
-
-    /**  
-     *  This class is the parent of the Read and Write tasks.
-     *  It handles the common attributes for both.
-     */
-    public class TelnetSubTask {
-        protected String taskString = "";
-        public void execute(AntTelnetClient telnet) 
-                throws BuildException {
-            throw new BuildException("Shouldn't be able instantiate a SubTask directly");
-        }
-        /**
-         *  nested text elements need their properties explicitly expanded
-         */
-        public void addText(String s) {
-            setString(getProject().replaceProperties(s));
-        }
-        /**
-         * attribute assignment of properties
-         */
-        public void setString(String s) {
-           taskString += s; 
-        }
-    }
-    /**
-     *  This class sends text to the connected server 
-     */
-    public class TelnetWrite extends TelnetSubTask {
-        private boolean echoString = true;
-        public void execute(AntTelnetClient telnet) 
-               throws BuildException {
-           telnet.sendString(taskString, echoString);
-        }
-        
-        public void setEcho(boolean b) {
-           echoString = b;
-        }
-    }
-    /**
-     *  This class reads the output from the connected server
-     *  until the required string is found. 
-     */
-    public class TelnetRead extends TelnetSubTask {
-        private Integer timeout = null;
-        public void execute(AntTelnetClient telnet) 
-               throws BuildException {
-            telnet.waitForString(taskString, timeout);
-        }
-        /**
-         *  Override any default timeouts
-         */
-        public void setTimeout(Integer i) {
-           this.timeout = i;
-        }
-        /**
-         *  Sets the default timeout if none has been set already
-         */
-        public void setDefaultTimeout(Integer defaultTimeout) {
-           if (timeout == null) {
-              timeout = defaultTimeout;
-           }
-        }
-    }
-    /**
-     *  This class handles the abstraction of the telnet protocol.
-     *  Currently it is a wrapper around <a href="www.oroinc.com">ORO</a>'s 
-     *  NetComponents
-     */
-    public class AntTelnetClient extends TelnetClient {
-        /**
-         * Read from the telnet session until the string we are 
-         * waiting for is found 
-         * @param s The string to wait on 
-         */
-        public void waitForString(String s) {
-            waitForString(s, null);
-        }
-
-        /**
-         * Read from the telnet session until the string we are 
-         * waiting for is found or the timeout has been reached
-         * @param s The string to wait on 
-         * @param timeout The maximum number of seconds to wait
-         */
-        public void waitForString(String s, Integer timeout) {
-            InputStream is = this.getInputStream();
-            try {
-                StringBuffer sb = new StringBuffer();
-                if (timeout == null || timeout.intValue() == 0) {
-                    while (sb.toString().indexOf(s) == -1){
-                        sb.append((char) is.read());
-                    }
-                } else {
-                    Calendar endTime = Calendar.getInstance(); 
-                    endTime.add(Calendar.SECOND, timeout.intValue());
-                    while (sb.toString().indexOf(s) == -1) {
-                        while (Calendar.getInstance().before(endTime) &&
-                        is.available() == 0) {
-                            Thread.sleep(250);
-                        }
-                        if (is.available() == 0) {
-                            throw new BuildException("Response Timed-Out", getLocation());
-                        }
-                        sb.append((char) is.read());
-                    }
-                }
-                log(sb.toString(), Project.MSG_INFO);
-            } catch (BuildException be) { 
-                throw be;
-            } catch (Exception e) { 
-                throw new BuildException(e, getLocation());
-            }
-        }
-
-        /**
-        * Write this string to the telnet session.
-        * @param echoString  Logs string sent
-        */
-        public void sendString(String s, boolean echoString) {
-            OutputStream os = this.getOutputStream();
-            try {
-                os.write((s + "\n").getBytes());
-                if (echoString) {
-                    log(s, Project.MSG_INFO);
-                }
-                os.flush();
-            } catch (Exception e) { 
-                throw new BuildException(e, getLocation());
-            }
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/perforce/P4Add.java b/src/main/org/apache/tools/ant/taskdefs/optional/perforce/P4Add.java
deleted file mode 100644
index 7a66d78..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/perforce/P4Add.java
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-/* 
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-package org.apache.tools.ant.taskdefs.optional.perforce;
-
-
-import java.io.File;
-import java.util.Vector;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.DirectoryScanner;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.types.FileSet;
-
-/** P4Add  - add the specified files to perforce.
- *
- * <b>Example Usage:</b>
- * <table border="1">
- * <th>Function</th><th>Command</th>
- * <tr><td>Add files using P4USER, P4PORT and P4CLIENT settings specified</td><td>&lt;P4add <br>P4view="//projects/foo/main/source/..." <br>P4User="fbloggs" <br>P4Port="km01:1666" <br>P4Client="fbloggsclient"&gt;<br>&lt;fileset basedir="dir" includes="**&#47;*.java"&gt;<br>&lt;/p4add&gt;</td></tr>
- * <tr><td>Add files using P4USER, P4PORT and P4CLIENT settings defined in environment</td><td>&lt;P4add P4view="//projects/foo/main/source/..." /&gt;<br>&lt;fileset basedir="dir" includes="**&#47;*.java"&gt;<br>&lt;/p4add&gt;</td></tr>
- * <tr><td>Specify the length of command line arguments to pass to each invocation of p4</td><td>&lt;p4add Commandlength="450"&gt;</td></tr>
- * </table>
- *
- * @author <A HREF="mailto:leslie.hughes@rubus.com">Les Hughes</A>
- * @author <A HREF="mailto:ashundi@tibco.com">Anli Shundi</A>
- */
-public class P4Add extends P4Base {
-
-    private int changelist;
-    private String addCmd = "";
-    private Vector filesets = new Vector();
-    private int cmdLength = 450;
-
-    public void setCommandlength(int len) throws BuildException {
-        if (len <= 0) {
-            throw new BuildException("P4Add: Commandlength should be a positive number");
-        }
-        this.cmdLength = len;
-    }
-
-    public void setChangelist(int changelist) throws BuildException {
-        if (changelist <= 0) {
-            throw new BuildException("P4Add: Changelist# should be a positive number");
-        }
-
-        this.changelist = changelist;
-    }
-
-    public void addFileset(FileSet set) {
-        filesets.addElement(set);
-    }
-
-    public void execute() throws BuildException {
-
-        if (P4View != null) {
-            addCmd = P4View;
-        }
-
-        P4CmdOpts = (changelist > 0) ? ("-c " + changelist) : "";
-
-        StringBuffer filelist = new StringBuffer();
-
-        for (int i = 0; i < filesets.size(); i++) {
-            FileSet fs = (FileSet) filesets.elementAt(i);
-            DirectoryScanner ds = fs.getDirectoryScanner(project);
-            //File fromDir = fs.getDir(project);
-
-            String[] srcFiles = ds.getIncludedFiles();
-            if (srcFiles != null) {
-                for (int j = 0; j < srcFiles.length; j++) {
-                    File f = new File(ds.getBasedir(), srcFiles[j]);
-                    filelist.append(" ").append('"').append(f.getAbsolutePath()).append('"');
-                    if (filelist.length() > cmdLength) {
-                        execP4Add(filelist);
-                        filelist.setLength(0);
-                    }
-                }
-                if (filelist.length() > 0) {
-                    execP4Add(filelist);
-                }
-            } else {
-                log("No files specified to add!", Project.MSG_WARN);
-            }
-        }
-
-    }
-
-    private void execP4Add(StringBuffer list) {
-        log("Execing add " + P4CmdOpts + " " + addCmd + list, Project.MSG_INFO);
-
-        execP4Command("-s add " + P4CmdOpts + " " + addCmd + list, new SimpleP4OutputHandler(this));
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/perforce/P4Base.java b/src/main/org/apache/tools/ant/taskdefs/optional/perforce/P4Base.java
deleted file mode 100644
index 7628294..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/perforce/P4Base.java
+++ /dev/null
@@ -1,225 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-/*
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-package org.apache.tools.ant.taskdefs.optional.perforce;
-
-import java.io.IOException;
-
-import org.apache.oro.text.perl.Perl5Util;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.taskdefs.Execute;
-import org.apache.tools.ant.types.Commandline;
-
-
-/** Base class for Perforce (P4) ANT tasks. See individual task for example usage.
- *
- * @see P4Sync
- * @see P4Have
- * @see P4Change
- * @see P4Edit
- * @see P4Submit
- * @see P4Label
- * @see org.apache.tools.ant.taskdefs.Exec
- * @author <A HREF="mailto:leslie.hughes@rubus.com">Les Hughes</A>
- */
-public abstract class P4Base extends org.apache.tools.ant.Task {
-
-    /**Perl5 regexp in Java - cool eh? */
-    protected Perl5Util util = null;
-    /** The OS shell to use (cmd.exe or /bin/sh) */
-    protected String shell;
-
-    //P4 runtime directives
-    /** Perforce Server Port (eg KM01:1666) */
-    protected String P4Port = "";
-    /** Perforce Client (eg myclientspec) */
-    protected String P4Client = "";
-    /** Perforce User (eg fbloggs) */
-    protected String P4User = "";
-    /** Perforce view for commands. (eg //projects/foobar/main/source/... )*/
-    protected String P4View = "";
-
-    // Perforce task directives
-    /** Keep going or fail on error - defaults to fail. */
-    protected boolean failOnError = true;
-
-    //P4 g-opts and cmd opts (rtfm)
-    /** Perforce 'global' opts.
-     * Forms half of low level API */
-    protected String P4Opts = "";
-    /** Perforce command opts.
-     * Forms half of low level API */
-    protected String P4CmdOpts = "";
-
-    //Setters called by Ant
-    public void setPort(String P4Port) {
-        this.P4Port = "-p" + P4Port;
-    }
-
-    public void setClient(String P4Client) {
-        this.P4Client = "-c" + P4Client;
-    }
-
-    public void setUser(String P4User) {
-        this.P4User = "-u" + P4User;
-    }
-
-    public void setView(String P4View) {
-        this.P4View = P4View;
-    }
-
-    public void setCmdopts(String P4CmdOpts) {
-        this.P4CmdOpts = P4CmdOpts;
-    }
-
-    /**
-     * Optionally throw a BuildException if p4 command fails
-     */
-    public void setFailonerror(boolean fail) {
-        failOnError = fail;
-    }
-
-    public void init() {
-
-        util = new Perl5Util();
-
-        //Get default P4 settings from environment - Mark would have done something cool with
-        //introspection here.....:-)
-        String tmpprop;
-        if ((tmpprop = project.getProperty("p4.port")) != null) {
-            setPort(tmpprop);
-        }
-        if ((tmpprop = project.getProperty("p4.client")) != null) {
-            setClient(tmpprop);
-        }
-        if ((tmpprop = project.getProperty("p4.user")) != null) {
-            setUser(tmpprop);
-        }
-    }
-
-    protected void execP4Command(String command) throws BuildException {
-        execP4Command(command, null);
-    }
-
-    /** Execute P4 command assembled by subclasses.
-     @param command The command to run
-     @param p4input Input to be fed to command on stdin
-     @param handler A P4Handler to process any input and output
-     */
-    protected void execP4Command(String command, P4Handler handler) throws BuildException {
-        try {
-
-            Commandline commandline = new Commandline();
-            commandline.setExecutable("p4");
-
-            //Check API for these - it's how CVS does it...
-            if (P4Port != null && P4Port.length() != 0) {
-                commandline.createArgument().setValue(P4Port);
-            }
-            if (P4User != null && P4User.length() != 0) {
-                commandline.createArgument().setValue(P4User);
-            }
-            if (P4Client != null && P4Client.length() != 0) {
-                commandline.createArgument().setValue(P4Client);
-            }
-            commandline.createArgument().setLine(command);
-
-
-            String[] cmdline = commandline.getCommandline();
-            String cmdl = "";
-            for (int i = 0; i < cmdline.length; i++) {
-                cmdl += cmdline[i] + " ";
-            }
-
-            log(commandline.describeCommand(), Project.MSG_VERBOSE);
-
-            if (handler == null) {
-                handler = new SimpleP4OutputHandler(this);
-            }
-
-            Execute exe = new Execute(handler, null);
-
-            exe.setAntRun(project);
-
-            exe.setCommandline(commandline.getCommandline());
-
-            try {
-                exe.execute();
-            } catch (IOException e) {
-                throw new BuildException(e);
-            } finally {
-                try {
-                    handler.stop();
-                } catch (Exception e) {
-                }
-            }
-
-
-        } catch (Exception e) {
-            String failMsg = "Problem exec'ing P4 command: " + e.getMessage();
-            if (failOnError) {
-                throw new BuildException(failMsg);
-            } else {
-                log(failMsg, Project.MSG_ERR);
-            }
-
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/perforce/P4Change.java b/src/main/org/apache/tools/ant/taskdefs/optional/perforce/P4Change.java
deleted file mode 100644
index 9ecb885..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/perforce/P4Change.java
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-/*
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-package org.apache.tools.ant.taskdefs.optional.perforce;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-
-/** P4Change - grab a new changelist from Perforce.
- *
- * P4Change creates a new changelist in perforce. P4Change sets the property
- * ${p4.change} with the new changelist number. This should then be passed into
- * p4edit and p4submit.
- *
- * @see P4Edit
- * @see P4Submit
- * @author <A HREF="mailto:leslie.hughes@rubus.com">Les Hughes</A>
- *
- */
-public class P4Change extends P4Base {
-
-    protected String emptyChangeList = null;
-    protected String description = "AutoSubmit By Ant";
-
-    public void execute() throws BuildException {
-
-        if (emptyChangeList == null) {
-            emptyChangeList = getEmptyChangeList();
-        }
-        final Project myProj = project;
-
-        P4Handler handler = new P4HandlerAdapter() {
-            public void process(String line) {
-                if (util.match("/Change/", line)) {
-
-                    //Remove any non-numerical chars - should leave the change number
-                    line = util.substitute("s/[^0-9]//g", line);
-
-                    int changenumber = Integer.parseInt(line);
-                    log("Change Number is " + changenumber, Project.MSG_INFO);
-                    myProj.setProperty("p4.change", "" + changenumber);
-
-                } else if (util.match("/error/", line)) {
-                    throw new BuildException("Perforce Error, check client settings and/or server");
-                }
-
-            }
-        };
-
-        handler.setOutput(emptyChangeList);
-
-        execP4Command("change -i", handler);
-    }
-
-
-    public String getEmptyChangeList() throws BuildException {
-        final StringBuffer stringbuf = new StringBuffer();
-
-        execP4Command("change -o", new P4HandlerAdapter() {
-            public void process(String line) {
-                if (!util.match("/^#/", line)) {
-                    if (util.match("/error/", line)) {
-
-                        log("Client Error", Project.MSG_VERBOSE);
-                        throw new BuildException("Perforce Error, check client settings and/or server");
-
-                    } else if (util.match("/<enter description here>/", line)) {
-
-                        // we need to escape the description in case there are /
-                        description = backslash(description);
-                        line = util.substitute("s/<enter description here>/" + description + "/", line);
-
-                    } else if (util.match("/\\/\\//", line)) {
-                        //Match "//" for begining of depot filespec
-                        return;
-                    }
-
-                    stringbuf.append(line);
-                    stringbuf.append("\n");
-
-                }
-            }
-        });
-
-        return stringbuf.toString();
-    }
-
-    /**
-     * Ensure that a string is backslashing slashes so that  it does not
-     * confuse them with Perl substitution delimiter in Oro. Backslashes are
-     * always backslashes in a string unless they escape the delimiter.
-     * @param value the string to backslash for slashes
-     * @return the backslashed string
-     * @see < a href="http://jakarta.apache.org/oro/api/org/apache/oro/text/perl/Perl5Util.html#substitute(java.lang.String,%20java.lang.String)">Oro</a>
-     */
-    public static final String backslash(String value) {
-        final StringBuffer buf = new StringBuffer(value.length());
-        final int len = value.length();
-        for (int i = 0; i < len; i++) {
-            char c = value.charAt(i);
-            if (c == '/') {
-                buf.append('\\');
-            }
-            buf.append(c);
-        }
-        return buf.toString();
-    }
-
-    /* Set Description Variable. */
-    public void setDescription(String desc) {
-        this.description = desc;
-    }
-
-} //EoF
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/perforce/P4Counter.java b/src/main/org/apache/tools/ant/taskdefs/optional/perforce/P4Counter.java
deleted file mode 100644
index 6d07cc9..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/perforce/P4Counter.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-/*
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-package org.apache.tools.ant.taskdefs.optional.perforce;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-
-/** P4Counter - Obtain or set the value of a counter.
- * P4Counter can be used to either print the value of a counter
- * to the output stream for the project (by setting the "name"
- * attribute only), to set a property based on the value of
- * a counter (by setting the "property" attribute) or to set the counter
- * on the perforce server (by setting the "value" attribute).
- *
- * Example Usage:<br>
- * &lt;p4counter name="${p4.counter}" property=${p4.change}"/&gt;
- * @author <a href="mailto:kirk@radik.com">Kirk Wylie</a>
- */
-
-public class P4Counter extends P4Base {
-    public String counter = null;
-    public String property = null;
-    public boolean shouldSetValue = false;
-    public boolean shouldSetProperty = false;
-    public int value = 0;
-
-    public void setName(String counter) {
-        this.counter = counter;
-    }
-
-    public void setValue(int value) {
-        this.value = value;
-        shouldSetValue = true;
-    }
-
-    public void setProperty(String property) {
-        this.property = property;
-        shouldSetProperty = true;
-    }
-
-    public void execute() throws BuildException {
-
-        if ((counter == null) || counter.length() == 0) {
-            throw new BuildException("No counter specified to retrieve");
-        }
-
-        if (shouldSetValue && shouldSetProperty) {
-            throw new BuildException("Cannot both set the value of the property and retrieve the value of the property.");
-        }
-
-        String command = "counter " + P4CmdOpts + " " + counter;
-        if (!shouldSetProperty) {
-            // NOTE kirk@radik.com 04-April-2001 -- If you put in the -s, you
-            // have to start running through regular expressions here. Much easier
-            // to just not include the scripting information than to try to add it
-            // and strip it later.
-            command = "-s " + command;
-        }
-        if (shouldSetValue) {
-            command += " " + value;
-        }
-
-        if (shouldSetProperty) {
-            final Project myProj = project;
-
-            P4Handler handler = new P4HandlerAdapter() {
-                public void process(String line) {
-                    log("P4Counter retrieved line \"" + line + "\"", Project.MSG_VERBOSE);
-                    try {
-                        value = Integer.parseInt(line);
-                        myProj.setProperty(property, "" + value);
-                    } catch (NumberFormatException nfe) {
-                        throw new BuildException("Perforce error. Could not retrieve counter value.");
-                    }
-                }
-            };
-
-            execP4Command(command, handler);
-        } else {
-            execP4Command(command, new SimpleP4OutputHandler(this));
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/perforce/P4Delete.java b/src/main/org/apache/tools/ant/taskdefs/optional/perforce/P4Delete.java
deleted file mode 100644
index fa36eef..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/perforce/P4Delete.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.perforce;
-
-import org.apache.tools.ant.BuildException;
-
-/** P4Delete - checkout file(s) for delete.
- *
- * Example Usage:<br>
- * &lt;p4delete change="${p4.change}" view="//depot/project/foo.txt" /&gt;<br>
- *
- * Simple re-write of P4Edit changing 'edit' to 'delete'.<br>
- *
- * ToDo: What to do if file is already open in one of our changelists perhaps
- * (See also {@link P4Edit P4Edit})?<br>
- *
- * @author <A HREF="mailto:mike@tmorph.com">Mike Roberts</A>, <A HREF="mailto:leslie.hughes@rubus.com">Les Hughes</A>
- */
-public class P4Delete extends P4Base {
-
-    public String change = null;
-
-    public void setChange(String change) {
-        this.change = change;
-    }
-
-    public void execute() throws BuildException {
-        if (change != null) {
-            P4CmdOpts = "-c " + change;
-        }
-        if (P4View == null) {
-            throw new BuildException("No view specified to delete");
-        }
-        execP4Command("-s delete " + P4CmdOpts + " " + P4View, new SimpleP4OutputHandler(this));
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/perforce/P4Edit.java b/src/main/org/apache/tools/ant/taskdefs/optional/perforce/P4Edit.java
deleted file mode 100644
index 8af392a..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/perforce/P4Edit.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-/*
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-package org.apache.tools.ant.taskdefs.optional.perforce;
-
-import org.apache.tools.ant.BuildException;
-
-/** P4Edit - checkout file(s) for edit.
- *
- * Example Usage:<br>
- * &lt;p4edit change="${p4.change}" view="//depot/project/foo.txt" /&gt;
- * @author <A HREF="mailto:leslie.hughes@rubus.com">Les Hughes</A>
- *
- * ToDo: Should call reopen if file is already open in one of our changelists perhaps?
- */
-
-public class P4Edit extends P4Base {
-
-    public String change = null;
-
-    public void setChange(String change) {
-        this.change = change;
-    }
-
-    public void execute() throws BuildException {
-        if (change != null) {
-            P4CmdOpts = "-c " + change;
-        }
-        if (P4View == null) {
-            throw new BuildException("No view specified to edit");
-        }
-        execP4Command("-s edit " + P4CmdOpts + " " + P4View, new SimpleP4OutputHandler(this));
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/perforce/P4Handler.java b/src/main/org/apache/tools/ant/taskdefs/optional/perforce/P4Handler.java
deleted file mode 100644
index c86d0e2..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/perforce/P4Handler.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.perforce;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.taskdefs.ExecuteStreamHandler;
-
-/** Interface for p4 job output stream handler. Classes implementing this interface
- * can be called back by P4Base.execP4Command();
- *
- * @author <A HREF="mailto:leslie.hughes@rubus.com">Les Hughes</A>
- */
-public interface P4Handler extends ExecuteStreamHandler {
-
-    public void process(String line) throws BuildException;
-
-    public void setOutput(String line) throws BuildException;
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/perforce/P4HandlerAdapter.java b/src/main/org/apache/tools/ant/taskdefs/optional/perforce/P4HandlerAdapter.java
deleted file mode 100644
index 3f97e73..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/perforce/P4HandlerAdapter.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.perforce;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.OutputStream;
-import java.io.SequenceInputStream;
-
-import org.apache.tools.ant.BuildException;
-
-public abstract class P4HandlerAdapter implements P4Handler {
-
-    public abstract void process(String line);
-
-
-    String p4input = "";
-
-    //set any data to be written to P4's stdin - messy, needs work
-    public void setOutput(String p4Input) {
-        this.p4input = p4Input;
-    }
-
-
-    public void start() throws BuildException {
-
-        try {
-            //First write any output to P4
-            if (p4input != null && p4input.length() > 0 && os != null) {
-                os.write(p4input.getBytes());
-                os.flush();
-                os.close();
-            }
-
-            //Now read any input and process
-
-            BufferedReader input = new BufferedReader(
-                    new InputStreamReader(
-                            new SequenceInputStream(is, es)));
-
-            String line;
-            while ((line = input.readLine()) != null) {
-                process(line);
-            }
-
-            input.close();
-
-
-        } catch (Exception e) {
-            throw new BuildException(e);
-        }
-    }
-
-    OutputStream os;    //OUtput
-    InputStream is;     //Input
-    InputStream es;     //Error
-
-    public void setProcessInputStream(OutputStream os) throws IOException {
-        this.os = os;
-    }
-
-    public void setProcessErrorStream(InputStream is) throws IOException {
-        this.es = is;
-    }
-
-    public void setProcessOutputStream(InputStream is) throws IOException {
-        this.is = is;
-    }
-
-    public void stop() {
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/perforce/P4Have.java b/src/main/org/apache/tools/ant/taskdefs/optional/perforce/P4Have.java
deleted file mode 100644
index db61b0a..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/perforce/P4Have.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-/*
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-package org.apache.tools.ant.taskdefs.optional.perforce;
-
-import org.apache.tools.ant.BuildException;
-
-
-/** P4Have - lists files currently on client.
- *
- * P4Have simply dumps the current file version info into
- * the Ant log (or stdout).
- * @author <A HREF="mailto:leslie.hughes@rubus.com">Les Hughes</A>
- */
-public class P4Have extends P4Base {
-
-    public void execute() throws BuildException {
-        execP4Command("have " + P4CmdOpts + " " + P4View, new SimpleP4OutputHandler(this));
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/perforce/P4Label.java b/src/main/org/apache/tools/ant/taskdefs/optional/perforce/P4Label.java
deleted file mode 100644
index b35dd15..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/perforce/P4Label.java
+++ /dev/null
@@ -1,193 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-/*
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-package org.apache.tools.ant.taskdefs.optional.perforce;
-
-import java.text.SimpleDateFormat;
-import java.util.Date;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-
-
-/** P4Label - create a Perforce Label.
- *
- *  P4Label inserts a label into perforce reflecting the
- *  current client contents.
- *
- *  Label name defaults to AntLabel if none set.
- *
- * Example Usage:
- * <pre>
- *   &lt;P4Label name="MyLabel-${TSTAMP}-${DSTAMP}" desc="Auto Build Label" /&gt;
- * </pre>
- *
- * @author <A HREF="mailto:leslie.hughes@rubus.com">Les Hughes</A>
- */
-public class P4Label extends P4Base {
-
-    protected String name;
-    protected String desc;
-    protected String lock;
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public void setDesc(String desc) {
-        this.desc = desc;
-    }
-
-    public void setLock(String lock) {
-        this.lock = lock;
-    }
-
-    public void execute() throws BuildException {
-        log("P4Label exec:", Project.MSG_INFO);
-
-        if (P4View == null || P4View.length() < 1) {
-            log("View not set, assuming //depot/...", Project.MSG_WARN);
-            P4View = "//depot/...";
-        }
-
-        if (desc == null || desc.length() < 1) {
-            log("Label Description not set, assuming 'AntLabel'", Project.MSG_WARN);
-            desc = "AntLabel";
-        }
-
-        if (lock != null && !lock.equalsIgnoreCase("locked")) {
-            log("lock attribute invalid - ignoring", Project.MSG_WARN);
-        }
-
-        if (name == null || name.length() < 1) {
-            SimpleDateFormat formatter = new SimpleDateFormat("yyyy.MM.dd-hh:mm");
-            Date now = new Date();
-            name = "AntLabel-" + formatter.format(now);
-            log("name not set, assuming '" + name + "'", Project.MSG_WARN);
-        }
-
-
-        //We have to create a unlocked label first
-        String newLabel =
-                "Label: " + name + "\n" +
-                "Description: " + desc + "\n" +
-                "Options: unlocked\n" +
-                "View: " + P4View + "\n";
-
-        P4Handler handler = new P4HandlerAdapter() {
-            public void process(String line) {
-                log(line, Project.MSG_VERBOSE);
-            }
-        };
-
-        handler.setOutput(newLabel);
-
-        execP4Command("label -i", handler);
-
-        execP4Command("labelsync -l " + name, new P4HandlerAdapter() {
-            public void process(String line) {
-                log(line, Project.MSG_VERBOSE);
-            }
-        });
-
-
-        log("Created Label " + name + " (" + desc + ")", Project.MSG_INFO);
-
-        //Now lock if required
-        if (lock != null && lock.equalsIgnoreCase("locked")) {
-
-            log("Modifying lock status to 'locked'", Project.MSG_INFO);
-
-            final StringBuffer labelSpec = new StringBuffer();
-
-            //Read back the label spec from perforce,
-            //Replace Options
-            //Submit back to Perforce
-
-            handler = new P4HandlerAdapter() {
-                public void process(String line) {
-                    log(line, Project.MSG_VERBOSE);
-
-                    if (util.match("/^Options:/", line)) {
-                        line = "Options: " + lock;
-                    }
-
-                    labelSpec.append(line + "\n");
-                }
-            };
-
-
-            execP4Command("label -o " + name, handler);
-            log(labelSpec.toString(), Project.MSG_DEBUG);
-
-            log("Now locking label...", Project.MSG_VERBOSE);
-            handler = new P4HandlerAdapter() {
-                public void process(String line) {
-                    log(line, Project.MSG_VERBOSE);
-                }
-            };
-
-            handler.setOutput(labelSpec.toString());
-            execP4Command("label -i", handler);
-        }
-
-
-    }
-
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/perforce/P4OutputHandler.java b/src/main/org/apache/tools/ant/taskdefs/optional/perforce/P4OutputHandler.java
deleted file mode 100644
index f748f42..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/perforce/P4OutputHandler.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.perforce;
-
-import org.apache.tools.ant.BuildException;
-
-/** Interface for p4 job output stream handler. Classes implementing this interface
- * can be called back by P4Base.execP4Command();
- *
- * @author <A HREF="mailto:leslie.hughes@rubus.com">Les Hughes</A>
- */
-public interface P4OutputHandler {
-
-    public void process(String line) throws BuildException;
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/perforce/P4Reopen.java b/src/main/org/apache/tools/ant/taskdefs/optional/perforce/P4Reopen.java
deleted file mode 100644
index 31e2754..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/perforce/P4Reopen.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-/*
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-package org.apache.tools.ant.taskdefs.optional.perforce;
-
-import org.apache.tools.ant.BuildException;
-
-/* P4Reopen - move files to a new changelist
- *
- * @author <A HREF="mailto:leslie.hughes@rubus.com">Les Hughes</A>
- */
-
-public class P4Reopen extends P4Base {
-
-    private String toChange = "";
-
-    public void setToChange(String toChange) throws BuildException {
-        if (toChange == null && !toChange.equals("")) {
-            throw new BuildException("P4Reopen: tochange cannot be null or empty");
-        }
-
-        this.toChange = toChange;
-    }
-
-    public void execute() throws BuildException {
-        if (P4View == null) {
-            throw new BuildException("No view specified to reopen");
-        }
-        execP4Command("-s reopen -c " + toChange + " " + P4View, new SimpleP4OutputHandler(this));
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/perforce/P4Revert.java b/src/main/org/apache/tools/ant/taskdefs/optional/perforce/P4Revert.java
deleted file mode 100644
index 02d792e..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/perforce/P4Revert.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-/*
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-package org.apache.tools.ant.taskdefs.optional.perforce;
-
-import org.apache.tools.ant.BuildException;
-
-/* P4Revert - revert open files or files in a changelist
- *
- * @author <A HREF="mailto:leslie.hughes@rubus.com">Les Hughes</A>
- */
-
-public class P4Revert extends P4Base {
-
-    private String revertChange = null;
-    private boolean onlyUnchanged = false;
-
-    public void setChange(String revertChange) throws BuildException {
-        if (revertChange == null && !revertChange.equals("")) {
-            throw new BuildException("P4Revert: change cannot be null or empty");
-        }
-
-        this.revertChange = revertChange;
-
-    }
-
-    public void setRevertOnlyUnchanged(boolean onlyUnchanged) {
-        this.onlyUnchanged = onlyUnchanged;
-    }
-
-    public void execute() throws BuildException {
-
-        /* Here we can either revert any unchanged files in a changelist
-         * or
-         * any files regardless of whether they have been changed or not
-         *
-         *
-         * The whole process also accepts a p4 filespec
-         */
-        String p4cmd = "-s revert";
-        if (onlyUnchanged) {
-            p4cmd += " -a";
-        }
-
-        if (revertChange != null) {
-            p4cmd += " -c " + revertChange;
-        }
-
-        execP4Command(p4cmd + " " + P4View, new SimpleP4OutputHandler(this));
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/perforce/P4Submit.java b/src/main/org/apache/tools/ant/taskdefs/optional/perforce/P4Submit.java
deleted file mode 100644
index dddd7c0..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/perforce/P4Submit.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-/*
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-package org.apache.tools.ant.taskdefs.optional.perforce;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-
-/** P4Submit - submit a numbered changelist to Perforce.
- *
- * <B>Note:</B> P4Submit cannot (yet) submit the default changelist.
- * This shouldn't be a problem with the ANT API as the usual flow is
- * P4Change to create a new numbered change followed by P4Edit then P4Submit.
- *
- * Example Usage:-<br>
- * &lt;p4submit change="${p4.change}" /&gt;
- *
- * @author <A HREF="mailto:leslie.hughes@rubus.com">Les Hughes</A>
- *
- */
-public class P4Submit extends P4Base {
-
-    //ToDo: If dealing with default cl need to parse out <enter description here>
-    public String change;
-
-    public void setChange(String change) {
-        this.change = change;
-    }
-
-    public void execute() throws BuildException {
-        if (change != null) {
-            execP4Command("submit -c " + change,
-                    new P4HandlerAdapter() {
-                        public void process(String line) {
-                            log(line, Project.MSG_VERBOSE);
-                        }
-                    });
-        } else {
-            //here we'd parse the output from change -o into submit -i
-            //in order to support default change.
-            throw new BuildException("No change specified (no support for default change yet....");
-        }
-    }
-
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/perforce/P4Sync.java b/src/main/org/apache/tools/ant/taskdefs/optional/perforce/P4Sync.java
deleted file mode 100644
index e35b96f..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/perforce/P4Sync.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-/*
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-package org.apache.tools.ant.taskdefs.optional.perforce;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-
-/** P4Sync  - synchronise client space to a perforce depot view.
- *  The API allows additional functionality of the "p4 sync" command
- * (such as "p4 sync -f //...#have" or other exotic invocations).</P>
- *
- * <b>Example Usage:</b>
- * <table border="1">
- * <th>Function</th><th>Command</th>
- * <tr><td>Sync to head using P4USER, P4PORT and P4CLIENT settings specified</td><td>&lt;P4Sync <br>P4view="//projects/foo/main/source/..." <br>P4User="fbloggs" <br>P4Port="km01:1666" <br>P4Client="fbloggsclient" /&gt;</td></tr>
- * <tr><td>Sync to head using P4USER, P4PORT and P4CLIENT settings defined in environment</td><td>&lt;P4Sync P4view="//projects/foo/main/source/..." /&gt;</td></tr>
- * <tr><td>Force a re-sync to head, refreshing all files</td><td>&lt;P4Sync force="yes" P4view="//projects/foo/main/source/..." /&gt;</td></tr>
- * <tr><td>Sync to a label</td><td>&lt;P4Sync label="myPerforceLabel" /&gt;</td></tr>
- * </table>
- *
- * ToDo:  Add decent label error handling for non-exsitant labels
- *
- * @author <A HREF="mailto:leslie.hughes@rubus.com">Les Hughes</A>
- */
-public class P4Sync extends P4Base {
-
-    String label;
-    private String syncCmd = "";
-
-    public void setLabel(String label) throws BuildException {
-        if (label == null && !label.equals("")) {
-            throw new BuildException("P4Sync: Labels cannot be Null or Empty");
-        }
-
-        this.label = label;
-
-    }
-
-
-    public void setForce(String force) throws BuildException {
-        if (force == null && !label.equals("")) {
-            throw new BuildException("P4Sync: If you want to force, set force to non-null string!");
-        }
-        P4CmdOpts = "-f";
-    }
-
-    public void execute() throws BuildException {
-
-
-        if (P4View != null) {
-            syncCmd = P4View;
-        }
-
-
-        if (label != null && !label.equals("")) {
-            syncCmd = syncCmd + "@" + label;
-        }
-
-
-        log("Execing sync " + P4CmdOpts + " " + syncCmd, Project.MSG_VERBOSE);
-
-        execP4Command("-s sync " + P4CmdOpts + " " + syncCmd, new SimpleP4OutputHandler(this));
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/perforce/SimpleP4OutputHandler.java b/src/main/org/apache/tools/ant/taskdefs/optional/perforce/SimpleP4OutputHandler.java
deleted file mode 100644
index 6ff198e..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/perforce/SimpleP4OutputHandler.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-/*
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
-package org.apache.tools.ant.taskdefs.optional.perforce;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-
-public class SimpleP4OutputHandler extends P4HandlerAdapter {
-
-    P4Base parent;
-
-    public SimpleP4OutputHandler(P4Base parent) {
-        this.parent = parent;
-    }
-
-    public void process(String line) throws BuildException {
-        if (parent.util.match("/^exit/", line)) {
-            return;
-        }
-
-        //Throw exception on errors (except up-to-date)
-        //p4 -s is unpredicatable. For example a server down
-        //does not return error: markup
-        //
-        //Some forms producing commands (p4 -s change -o) do tag the output
-        //others don't.....
-        //Others mark errors as info, for example edit a file
-        //which is already open for edit.....
-        //Just look for error: - catches most things....
-
-        if (parent.util.match("/error:/", line) && !parent.util.match("/up-to-date/", line)) {
-            throw new BuildException(line);
-
-        }
-
-        parent.log(parent.util.substitute("s/^.*: //", line), Project.MSG_INFO);
-
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/perforce/package.html b/src/main/org/apache/tools/ant/taskdefs/optional/perforce/package.html
deleted file mode 100644
index f15c9ab..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/perforce/package.html
+++ /dev/null
@@ -1,29 +0,0 @@
-<body>
-ANT Tasks for Perforce integration.
-
-These tasks provide basic P4 capabilities to automated ANT-based build systems. <b>Note:</b> 
-the tasks in this package are linked against the Jakarta ORO 2.0 library which
-brings the power of Perl 5 regular expressions to Java.
-
-These tasks also require you to have the p4 (or p4.exe) client in your path.
-
-@see <A HREF="http://jakarta.apache.org/">Jakarta Project</A>
-@see <A HREF="http://www.perforce.com/">Perforce</A>
-
-@see org.apache.tools.ant.taskdefs.optional.perforce.P4Sync
-@see org.apache.tools.ant.taskdefs.optional.perforce.P4Label
-@see org.apache.tools.ant.taskdefs.optional.perforce.P4Have
-@see org.apache.tools.ant.taskdefs.optional.perforce.P4Change
-@see org.apache.tools.ant.taskdefs.optional.perforce.P4Edit
-@see org.apache.tools.ant.taskdefs.optional.perforce.P4Submit
-@see org.apache.tools.ant.taskdefs.optional.perforce.P4Counter
-
-
-
-@author <A HREF="mailto:leslie.hughes@rubus.com">Les Hughes</A>
-
-
-<hr>
-<p align="center">Copyright &copy; 2000-2001 Apache Software Foundation. All rights
-Reserved.</p>
-</body>
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/pvcs/Pvcs.java b/src/main/org/apache/tools/ant/taskdefs/optional/pvcs/Pvcs.java
deleted file mode 100644
index 5b004e1..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/pvcs/Pvcs.java
+++ /dev/null
@@ -1,552 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.pvcs;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.FileNotFoundException;
-import java.io.BufferedReader;
-import java.io.FileReader;
-import java.io.BufferedWriter;
-import java.io.FileWriter;
-import java.util.Enumeration;
-import java.util.Vector;
-import java.text.ParseException;
-import java.text.MessageFormat;
-import java.util.Random;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.taskdefs.Execute;
-import org.apache.tools.ant.taskdefs.LogOutputStream;
-import org.apache.tools.ant.taskdefs.LogStreamHandler;
-import org.apache.tools.ant.taskdefs.PumpStreamHandler;
-import org.apache.tools.ant.taskdefs.ExecuteStreamHandler;
-import org.apache.tools.ant.types.Commandline;
-
-/**
- * A task that fetches source files from a PVCS archive.
- *
- * <b>19-04-2001</b> <p>The task now has a more robust
- * parser. It allows for platform independant file paths
- * and supports file names with <i>()</i>. Thanks to Erik Husby for
- * bringing the bug to my attention.
- *
- * <b>27-04-2001</b> <p>UNC paths are now handled properly.
- * Fix provided by Don Jeffery. He also added an <i>UpdateOnly</i> flag
- * that, when true, conditions the PVCS get using the -U option to only
- * update those files that have a modification time (in PVCS) that is newer
- * than the existing workfile.
- *
- * @author <a href="mailto:tchristensen@nordija.com">Thomas Christensen</a>
- * @author <a href="mailto:donj@apogeenet.com">Don Jeffery</a>
- * @author <a href="snewton@standard.com">Steven E. Newton</a>
- */
-public class Pvcs extends org.apache.tools.ant.Task {
-    private String pvcsbin;
-    private String repository;
-    private String pvcsProject;
-    private Vector pvcsProjects;
-    private String workspace;
-    private String force;
-    private String promotiongroup;
-    private String label;
-    private boolean ignorerc;
-    private boolean updateOnly;
-    private String filenameFormat;
-    private String lineStart;
-    private String userId;
-    /**
-     * Constant for the thing to execute
-     */
-    private static final String PCLI_EXE = "pcli";
-
-    /**
-     * Constant for the PCLI listversionedfiles recursive i a format "get" understands
-     */
-    private static final String PCLI_LVF_ARGS = "lvf -z -aw";
-
-    /**
-     * Constant for the thing to execute
-     */
-    private static final String GET_EXE = "get";
-
-
-    protected int runCmd(Commandline cmd, ExecuteStreamHandler out) {
-        try {
-            Project aProj = getProject();
-            Execute exe = new Execute(out);
-            exe.setAntRun(aProj);
-            exe.setWorkingDirectory(aProj.getBaseDir());
-            exe.setCommandline(cmd.getCommandline());
-            return exe.execute();
-        } catch (java.io.IOException e) {
-            String msg = "Failed executing: " + cmd.toString() 
-                + ". Exception: " + e.getMessage();
-            throw new BuildException(msg, location);
-        }
-    }
-
-    private String getExecutable(String exe) {
-        StringBuffer correctedExe = new StringBuffer();
-        if (getPvcsbin() != null) {
-            if (pvcsbin.endsWith(File.separator)) {
-                correctedExe.append(pvcsbin);
-            } else {
-                correctedExe.append(pvcsbin).append(File.separator);
-            }
-        }
-        return correctedExe.append(exe).toString();
-    }
-
-    /**
-     * @exception org.apache.tools.ant.BuildException Something is stopping the build...
-     */
-    public void execute() throws org.apache.tools.ant.BuildException {
-        Project aProj = getProject();
-        int result = 0;
-
-        if (repository == null || repository.trim().equals("")) {
-            throw new BuildException("Required argument repository not specified");
-        }
-
-        // Check workspace exists
-        // Launch PCLI listversionedfiles -z -aw
-        // Capture output
-        // build the command line from what we got the format is
-        Commandline commandLine = new Commandline();
-        commandLine.setExecutable(getExecutable(PCLI_EXE));
-
-        commandLine.createArgument().setValue("lvf");
-        commandLine.createArgument().setValue("-z");
-        commandLine.createArgument().setValue("-aw");
-        if (getWorkspace() != null) {
-            commandLine.createArgument().setValue("-sp" + getWorkspace());
-        }
-        commandLine.createArgument().setValue("-pr" + getRepository());
-
-        String uid = getUserId();
-
-        if (uid != null) {
-            commandLine.createArgument().setValue("-id" + uid);
-        }
-
-        // default pvcs project is "/"
-        if (getPvcsproject() == null && getPvcsprojects().isEmpty()) {
-            pvcsProject = "/";
-        }
-
-        if (getPvcsproject() != null) {
-            commandLine.createArgument().setValue(getPvcsproject());
-        }
-        if (!getPvcsprojects().isEmpty()) {
-            Enumeration e = getPvcsprojects().elements();
-            while (e.hasMoreElements()) {
-                String projectName = ((PvcsProject) e.nextElement()).getName();
-                if (projectName == null || (projectName.trim()).equals("")) {
-                    throw new BuildException("name is a required attribute " 
-                        + "of pvcsproject");
-                }
-                commandLine.createArgument().setValue(projectName);
-            }
-        }
-
-        File tmp = null;
-        File tmp2 = null;
-        try {
-            Random rand = new Random(System.currentTimeMillis());
-            tmp = new File("pvcs_ant_" + rand.nextLong() + ".log");
-            tmp2 = new File("pvcs_ant_" + rand.nextLong() + ".log");
-            log(commandLine.describeCommand(), Project.MSG_VERBOSE);
-            result = runCmd(commandLine, 
-                new PumpStreamHandler(new FileOutputStream(tmp), 
-                new LogOutputStream(this, Project.MSG_WARN)));
-            if (result != 0 && !ignorerc) {
-                String msg = "Failed executing: " + commandLine.toString();
-                throw new BuildException(msg, location);
-            }
-
-            if (!tmp.exists()) {
-                throw new BuildException("Communication between ant and pvcs " 
-                    + "failed. No output generated from executing PVCS " 
-                    + "commandline interface \"pcli\" and \"get\"");
-            }
-
-            // Create folders in workspace
-            log("Creating folders", Project.MSG_INFO);
-            createFolders(tmp);
-
-            // Massage PCLI lvf output transforming '\' to '/' so get command works appropriately
-            massagePCLI(tmp, tmp2);
-
-            // Launch get on output captured from PCLI lvf
-            commandLine.clearArgs();
-            commandLine.setExecutable(getExecutable(GET_EXE));
-
-            if (getForce() != null && getForce().equals("yes")) {
-                commandLine.createArgument().setValue("-Y");
-            } else {
-                commandLine.createArgument().setValue("-N");
-            }
-
-            if (getPromotiongroup() != null) {
-                commandLine.createArgument().setValue("-G" 
-                    + getPromotiongroup());
-            } else {
-                if (getLabel() != null) {
-                    commandLine.createArgument().setValue("-r" + getLabel());
-                }
-            }
-
-            if (updateOnly) {
-                commandLine.createArgument().setValue("-U");
-            }
-
-            commandLine.createArgument().setValue("@" + tmp2.getAbsolutePath());
-            log("Getting files", Project.MSG_INFO);
-            log("Executing " + commandLine.toString(), Project.MSG_VERBOSE);
-            result = runCmd(commandLine, 
-                new LogStreamHandler(this, Project.MSG_INFO, Project.MSG_WARN));
-            if (result != 0 && !ignorerc) {
-                String msg = "Failed executing: " + commandLine.toString() 
-                    + ". Return code was " + result;
-                throw new BuildException(msg, location);
-            }
-
-        } catch (FileNotFoundException e) {
-            String msg = "Failed executing: " + commandLine.toString() 
-                + ". Exception: " + e.getMessage();
-            throw new BuildException(msg, location);
-        } catch (IOException e) {
-            String msg = "Failed executing: " + commandLine.toString() 
-                + ". Exception: " + e.getMessage();
-            throw new BuildException(msg, location);
-        } catch (ParseException e) {
-            String msg = "Failed executing: " + commandLine.toString() 
-                + ". Exception: " + e.getMessage();
-            throw new BuildException(msg, location);
-        } finally {
-            if (tmp != null) {
-                tmp.delete();
-            }
-            if (tmp2 != null) {
-                tmp2.delete();
-            }
-        }
-    }
-
-    /**
-     * Parses the file and creates the folders specified in the output section
-     */
-    private void createFolders(File file) throws IOException, ParseException {
-        BufferedReader in = new BufferedReader(new FileReader(file));
-        MessageFormat mf = new MessageFormat(getFilenameFormat());
-        String line = in.readLine();
-        while (line != null) {
-            log("Considering \"" + line + "\"", Project.MSG_VERBOSE);
-            if (line.startsWith("\"\\") ||
-               line.startsWith("\"/") ||
-               line.startsWith(getLineStart())) {
-                Object[] objs = mf.parse(line);
-                String f = (String) objs[1];
-                // Extract the name of the directory from the filename
-                int index = f.lastIndexOf(File.separator);
-                if (index > -1) {
-                    File dir = new File(f.substring(0, index));
-                    if (!dir.exists()) {
-                        log("Creating " + dir.getAbsolutePath(), 
-                            Project.MSG_VERBOSE);
-                        if (dir.mkdirs()) {
-                            log("Created " + dir.getAbsolutePath(), 
-                                Project.MSG_INFO);
-                        } else {
-                            log("Failed to create " + dir.getAbsolutePath(), 
-                                Project.MSG_INFO);
-                        }
-                    } else {
-                        log(dir.getAbsolutePath() + " exists. Skipping", 
-                            Project.MSG_VERBOSE);
-                    }
-                } else {
-                    log("File separator problem with " + line,
-                        Project.MSG_WARN);
-                }
-            } else {
-                log("Skipped \"" + line + "\"", Project.MSG_VERBOSE);
-            }
-            line = in.readLine();
-        }
-    }
-
-    /**
-     * Simple hack to handle the PVCS command-line tools botch when 
-     * handling UNC notation.
-     */
-    private void massagePCLI(File in, File out) 
-        throws FileNotFoundException, IOException {
-        BufferedReader inReader = new BufferedReader(new FileReader(in));
-        BufferedWriter outWriter = new BufferedWriter(new FileWriter(out));
-        String s = null;
-        while ((s = inReader.readLine()) != null) {
-            String sNormal = s.replace('\\', '/');
-            outWriter.write(sNormal);
-            outWriter.newLine();
-        }
-        inReader.close();
-        outWriter.close();
-    }
-
-    /**
-     * Get network name of the PVCS repository
-     * @return String
-     */
-    public String getRepository() {
-        return repository;
-    }
-
-    public String getFilenameFormat() {
-        return filenameFormat;
-    }
-
-    public void setFilenameFormat(String f) {
-        filenameFormat = f;
-    }
-
-    public String getLineStart() {
-        return lineStart;
-    }
-
-    public void setLineStart(String l) {
-        lineStart = l;
-    }
-
-    /**
-     * Specifies the network name of the PVCS repository
-     * @param repo String
-     */
-    public void setRepository(String repo) {
-        repository = repo;
-    }
-
-    /**
-     * Get name of the project in the PVCS repository
-     * @return String
-     */
-    public String getPvcsproject() {
-        return pvcsProject;
-    }
-
-    /**
-     * Specifies the name of the project in the PVCS repository
-     * @param prj String
-     */
-    public void setPvcsproject(String prj) {
-        pvcsProject = prj;
-    }
-
-    /**
-     * Get name of the project in the PVCS repository
-     * @return Vector
-     */
-    public Vector getPvcsprojects() {
-        return pvcsProjects;
-    }
-
-    /**
-     * Get name of the workspace to store the retrieved files
-     * @return String
-     */
-    public String getWorkspace() {
-        return workspace;
-    }
-
-    /**
-     * Specifies the name of the workspace to store retrieved files
-     * @param ws String
-     */
-    public void setWorkspace(String ws) {
-        workspace = ws;
-    }
-
-    /**
-     * Get name of the PVCS bin directory
-     * @return String
-     */
-    public String getPvcsbin() {
-        return pvcsbin;
-    }
-
-    /**
-     * Specifies the location of the PVCS bin directory
-     * @param ws String
-     */
-    public void setPvcsbin(String bin) {
-        pvcsbin = bin;
-    }
-
-    /**
-     * Get value of force
-     * @return String
-     */
-    public String getForce() {
-        return force;
-    }
-
-    /**
-     * Specifies the value of the force argument
-     * @param repo String (yes/no)
-     */
-    public void setForce(String f) {
-        if (f != null && f.equalsIgnoreCase("yes")) {
-            force = "yes";
-        } else {
-            force = "no";
-        }
-    }
-
-    /**
-     * Get value of promotiongroup
-     * @return String
-     */
-    public String getPromotiongroup() {
-        return promotiongroup;
-    }
-
-    /**
-     * Specifies the name of the promotiongroup argument
-     * @param repo String
-     */
-    public void setPromotiongroup(String w) {
-        promotiongroup = w;
-    }
-
-    /**
-     * Get value of label
-     * @return String
-     */
-    public String getLabel() {
-        return label;
-    }
-
-    /**
-     * Specifies the name of the label argument
-     * @param repo String
-     */
-    public void setLabel(String l) {
-        label = l;
-    }
-
-    /**
-     * Get value of ignorereturncode
-     * @return String
-     */
-    public boolean getIgnoreReturnCode() {
-        return ignorerc;
-    }
-
-    /**
-     * If set to true the return value from executing the pvcs
-     * commands are ignored.
-     */
-    public void setIgnoreReturnCode(boolean b) {
-        ignorerc = b;
-    }
-
-    /**
-     * handles &lt;pvcsproject&gt; subelements
-     * @param PvcsProject
-     */
-    public void addPvcsproject(PvcsProject p) {
-        pvcsProjects.addElement(p);
-    }
-
-    public boolean getUpdateOnly() {
-        return updateOnly;
-    }
-
-    /**
-     * If set to true files are gotten only if newer
-     * than existing local files.
-     */
-    public void setUpdateOnly(boolean l) {
-        updateOnly = l;
-    }
-
-    public String getUserId() {
-        return userId;
-    }
-
-    public void setUserId(String u) {
-        userId = u;
-    }
-
-    /**
-     * Creates a Pvcs object
-     */
-    public Pvcs() {
-        super();
-        pvcsProject = null;
-        pvcsProjects = new Vector();
-        workspace = null;
-        repository = null;
-        pvcsbin = null;
-        force = null;
-        promotiongroup = null;
-        label = null;
-        ignorerc = false;
-        updateOnly = false;
-        lineStart = "\"P:";
-        filenameFormat = "{0}_arc({1})";
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/pvcs/PvcsProject.java b/src/main/org/apache/tools/ant/taskdefs/optional/pvcs/PvcsProject.java
deleted file mode 100644
index 65b0750..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/pvcs/PvcsProject.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights 
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.pvcs;
-
-
-
-/**
- * class to handle &lt;pvcsprojec&gt; elements
- */
-public class PvcsProject {
-    private String name;
-    
-    public PvcsProject() {
-        super();
-    }
-    
-    public void setName(String name) {
-        PvcsProject.this.name = name;
-    }
-    public String getName() {
-        return name;
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/scm/AntStarTeamCheckOut.java b/src/main/org/apache/tools/ant/taskdefs/optional/scm/AntStarTeamCheckOut.java
deleted file mode 100644
index 40e7bb4..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/scm/AntStarTeamCheckOut.java
+++ /dev/null
@@ -1,1114 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.scm;
-
-import java.util.StringTokenizer;
-
-import com.starbase.starteam.Folder;
-import com.starbase.starteam.Item;
-import com.starbase.starteam.Property;
-import com.starbase.starteam.Server;
-import com.starbase.starteam.StarTeamFinder;
-import com.starbase.starteam.Type;
-import com.starbase.starteam.View;
-import com.starbase.util.Platform;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.DirectoryScanner;
-import org.apache.tools.ant.Project;
-
-/**
- * Checks out files from a specific StarTeam server, project, view, and
- * folder.
- * <BR><BR>
- * This program logs in to a StarTeam server and opens up the specified
- * project and view.  Then, it searches through that view for the given
- * folder (or, if you prefer, it uses the root folder).  Beginning with
- * that folder and optionally continuing recursivesly, AntStarTeamCheckOut
- * compares each file with your include and exclude filters and checks it
- * out only if appropriate.
- * <BR><BR>
- * Checked out files go to a directory you specify under the subfolder
- * named for the default StarTeam path to the view.  That is, if you
- * entered /home/cpovirk/work as the target folder, your project was named
- * "OurProject," the given view was named "TestView," and that view is
- * stored by default at "C:\projects\Test," your files would be checked
- * out to /home/cpovirk/work/Test."  I avoided using the project name in
- * the path because you may want to keep several versions of the same
- * project on your computer, and I didn't want to use the view name, as
- * there may be many "Test" or "Version 1.0" views, for example.  This
- * system's success, of course, depends on what you set the default path
- * to in StarTeam.
- * <BR><BR>
- * You can set AntStarTeamCheckOut to verbose or quiet mode.  Also, it has
- * a safeguard against overwriting the files on your computer:  If the
- * target directory you specify already exists, the program will throw a
- * BuildException.  To override the exception, set <CODE>force</CODE> to
- * true.
- * <BR><BR>
- * <B>This program makes use of functions from the StarTeam API.  As a result
- * AntStarTeamCheckOut is available only to licensed users of StarTeam and
- * requires the StarTeam SDK to function.  You must have
- * <CODE>starteam-sdk.jar</CODE> in your classpath to run this program.
- * For more information about the StarTeam API and how to license it, see
- * the link below.</B>
- *
- * @author <A HREF="mailto:chris.povirk@paytec.com">Chris Povirk</A>
- * @author <A HREF="mailto:jc.mann@paytec.com">JC Mann</A>
- * @author <A HREF="mailto:jeff.gettle@paytec.com">Jeff Gettle</A>
- * @author <A HREF="mailto:stevec@ignitesports.com">Steve Cohen</A>
- * @version 1.0
- * @see <A HREF="http://www.starbase.com/">StarBase Web Site</A>
- *
- * @ant.task name="starteam" category="scm"
- */
-public class AntStarTeamCheckOut extends org.apache.tools.ant.Task {
-
-    /**
-     * This constant sets the filter to include all files. This default has
-     * the same result as <CODE>setIncludes("*")</CODE>.
-     *
-     * @see #getIncludes()
-     * @see #setIncludes(String includes)
-     */
-    public static final String DEFAULT_INCLUDESETTING = "*";
-
-    /**
-     * This disables the exclude filter by default. In other words, no files
-     * are excluded. This setting is equivalent to <CODE>setExcludes(null)</CODE>
-     * .
-     *
-     * @see #getExcludes()
-     * @see #setExcludes(String excludes)
-     */
-    public static final String DEFAULT_EXCLUDESETTING = null;
-
-    /**
-     * The default folder to search; the root folder. Since
-     * AntStarTeamCheckOut searches subfolders, by default it processes an
-     * entire view.
-     *
-     * @see #getFolderName()
-     * @see #setFolderName(String folderName)
-     */
-    public static final String DEFAULT_FOLDERSETTING = null;
-
-    /**
-     * This is used when formatting the output. The directory name is
-     * displayed only when it changes.
-     */
-    private Folder prevFolder = null;
-
-    /** This field keeps count of the number of files checked out.  */
-    private int checkedOut = 0;
-
-    // Change these through their GET and SET methods.
-
-    /** The name of the server you wish to connect to.  */
-    private String serverName = null;
-
-    /** The port on the server used for StarTeam.  */
-    private int serverPort = -1;
-
-    /** The name of your project.  */
-    private String projectName = null;
-
-    /**
-     * The name of the folder you want to check out files from. All subfolders
-     * will be searched, as well.
-     */
-    private String folderName = DEFAULT_FOLDERSETTING;
-
-    /** The view that the files you want are in.  */
-    private String viewName = null;
-
-    /** Your username on the StarTeam server.  */
-    private String username = null;
-
-    /** Your StarTeam password.  */
-    private String password = null;
-
-    /**
-     * The path to the root folder you want to check out to. This is a local
-     * directory.
-     */
-    private String targetFolder = null;
-
-    /**
-     * If force set to true, AntStarTeamCheckOut will overwrite files in the
-     * target directory.
-     */
-    private boolean force = false;
-
-    /**
-     * When verbose is true, the program will display all files and
-     * directories as they are checked out.
-     */
-    private boolean verbose = false;
-
-    /**
-     * Set recursion to false to check out files in only the given folder and
-     * not in its subfolders.
-     */
-    private boolean recursion = true;
-
-    // These fields deal with includes and excludes
-
-    /** All files that fit this pattern are checked out.  */
-    private String includes = DEFAULT_INCLUDESETTING;
-
-    /** All files fitting this pattern are ignored.  */
-    private String excludes = DEFAULT_EXCLUDESETTING;
-
-    /** The file delimitor on the user's system.  */
-    private String delim = Platform.getFilePathDelim();
-
-    /**
-     * whether to use the Starteam "default folder" when calculating the
-     * target paths to which files are checked out (false) or if targetFolder
-     * represents an absolute mapping to folderName.
-     */
-    private boolean targetFolderAbsolute = false;
-
-
-    /** convenient method to check for conditions */
-    private static void assertTrue(boolean value, String msg) throws BuildException {
-        if (!value) {
-            throw new BuildException(msg);
-        }
-    }
-
-
-    protected void checkParameters() throws BuildException {
-        // Check all of the properties that are required.
-        assertTrue(getServerName() != null, "ServerName must be set.");
-        assertTrue(getServerPort() != -1, "ServerPort must be set.");
-        assertTrue(getProjectName() != null, "ProjectName must be set.");
-        assertTrue(getViewName() != null, "ViewName must be set.");
-        assertTrue(getUsername() != null, "Username must be set.");
-        assertTrue(getPassword() != null, "Password must be set.");
-        assertTrue(getTargetFolder() != null, "TargetFolder must be set.");
-
-        // Because of the way I create the full target path, there
-        // must be NO slash at the end of targetFolder and folderName
-        // However, if the slash or backslash is the only character, leave it alone
-        if ((getTargetFolder().endsWith("/") ||
-            getTargetFolder().endsWith("\\"))
-             && getTargetFolder().length() > 1) {
-            setTargetFolder(getTargetFolder().substring(0, getTargetFolder().length() - 1));
-        }
-
-        // Check to see if the target directory exists.
-        java.io.File dirExist = new java.io.File(getTargetFolder());
-
-        if (dirExist.isDirectory() && !getForce()) {
-            throw new BuildException("Target directory exists. Set \"force\" "
-                 + "to \"true\" to continue anyway.");
-        }
-    }
-
-
-    /**
-     * Do the execution.
-     *
-     * @exception BuildException
-     */
-    public void execute() throws BuildException {
-        log("DEPRECATED - The starteam task is deprecated.  Use stcheckout instead.",
-            Project.MSG_WARN);
-
-        // Connect to the StarTeam server, and log on.
-        Server s = getServer();
-
-        try {
-            // Search the items on this server.
-            runServer(s);
-        } finally {
-            // Disconnect from the server.
-            s.disconnect();
-        }
-        // after you are all of the properties are ok, do your thing
-        // with StarTeam.  If there are any kind of exceptions then
-        // send the message to the project log.
-
-        // Tell how many files were checked out.
-        log(checkedOut + " files checked out.");
-    }
-
-
-    /**
-     * Creates and logs in to a StarTeam server.
-     *
-     * @return A StarTeam server.
-     */
-    protected Server getServer() {
-        // Simplest constructor, uses default encryption algorithm and compression level.
-        Server s = new Server(getServerName(), getServerPort());
-
-        // Optional; logOn() connects if necessary.
-        s.connect();
-
-        // Logon using specified user name and password.
-        s.logOn(getUsername(), getPassword());
-
-        return s;
-    }
-
-
-    /**
-     * Searches for the specified project on the server.
-     *
-     * @param s A StarTeam server.
-     */
-    protected void runServer(Server s) {
-        com.starbase.starteam.Project[] projects = s.getProjects();
-
-        for (int i = 0; i < projects.length; i++) {
-            com.starbase.starteam.Project p = projects[i];
-
-            if (p.getName().equals(getProjectName())) {
-                if (getVerbose()) {
-                    log("Found " + getProjectName() + delim);
-                }
-                runProject(s, p);
-                break;
-            }
-        }
-    }
-
-
-    /**
-     * Searches for the given view in the project.
-     *
-     * @param s A StarTeam server.
-     * @param p A valid project on the given server.
-     */
-    protected void runProject(Server s, com.starbase.starteam.Project p) {
-        View[] views = p.getViews();
-
-        for (int i = 0; i < views.length; i++) {
-            View v = views[i];
-
-            if (v.getName().equals(getViewName())) {
-                if (getVerbose()) {
-                    log("Found " + getProjectName() + delim + getViewName() + delim);
-                }
-                runType(s, p, v, s.typeForName(s.getTypeNames().FILE));
-                break;
-            }
-        }
-    }
-
-
-    /**
-     * Searches for folders in the given view.
-     *
-     * @param s A StarTeam server.
-     * @param p A valid project on the server.
-     * @param v A view name from the specified project.
-     * @param t An item type which is currently always "file".
-     */
-    protected void runType(Server s, com.starbase.starteam.Project p, View v, Type t) {
-        // This is ugly; checking for the root folder.
-        Folder f = v.getRootFolder();
-
-        if (getFolderName() != null) {
-            if (getFolderName().equals("\\") || getFolderName().equals("/")) {
-                setFolderName(null);
-            } else {
-                f = StarTeamFinder.findFolder(v.getRootFolder(), getFolderName());
-                assertTrue(null != f, "ERROR: " + getProjectName() + delim + getViewName() + delim +
-                    v.getRootFolder() + delim + getFolderName() + delim +
-                    " does not exist.");
-            }
-        }
-
-        if (getVerbose() && getFolderName() != null) {
-            log("Found " + getProjectName() + delim + getViewName() +
-                delim + getFolderName() + delim + "\n");
-        }
-
-        // For performance reasons, it is important to pre-fetch all the
-        // properties we'll need for all the items we'll be searching.
-
-        // We always display the ItemID (OBJECT_ID) and primary descriptor.
-        int nProperties = 2;
-
-        // We'll need this item type's primary descriptor.
-        Property p1 = getPrimaryDescriptor(t);
-
-        // Does this item type have a secondary descriptor?
-        // If so, we'll need it.
-        Property p2 = getSecondaryDescriptor(t);
-
-        if (p2 != null) {
-            nProperties++;
-        }
-
-        // Now, build an array of the property names.
-        String[] strNames = new String[nProperties];
-        int iProperty = 0;
-
-        strNames[iProperty++] = s.getPropertyNames().OBJECT_ID;
-        strNames[iProperty++] = p1.getName();
-        if (p2 != null) {
-            strNames[iProperty++] = p2.getName();
-        }
-
-        // Pre-fetch the item properties and cache them.
-        f.populateNow(t.getName(), strNames, -1);
-
-        // Now, search for items in the selected folder.
-        runFolder(s, p, v, t, f, calcTargetFolder(v, f));
-
-        // Free up the memory used by the cached items.
-        f.discardItems(t.getName(), -1);
-    }
-
-
-    /**
-     * Returns a file object that defines the root of the local checkout tree.
-     * Depending on the value of targetFolderAbsolute, this will be either the
-     * targetFolder exactly as set by the user or the path formed by appending
-     * the default folder onto the specified target folder.
-     *
-     * @param v view from which the file is checked out, supplies the "default
-     *      folder"
-     * @param rootSourceFolder root folder of the checkout operation in Star
-     *      Team
-     * @return an object referencing the local file
-     * @see #getTargetFolderAbsolute()
-     */
-    private java.io.File calcTargetFolder(View v, Folder rootSourceFolder) {
-        java.io.File root = new java.io.File(getTargetFolder());
-
-        if (!getTargetFolderAbsolute()) {
-            // Create a variable dir that contains the name of
-            // the StarTeam folder that is the root folder in this view.
-            // Get the default path to the current view.
-            String defaultPath = v.getDefaultPath();
-
-            // convert whatever separator char is in starteam to that of the target system.
-            defaultPath = defaultPath.replace('/', java.io.File.separatorChar);
-            defaultPath = defaultPath.replace('\\', java.io.File.separatorChar);
-
-            java.io.File dir = new java.io.File(defaultPath);
-            String dirName = dir.getName();
-
-            // If it ends with separator then strip it off
-            if (dirName.endsWith(delim)) {
-                dirName = dirName.substring(0, dirName.length() - 1);
-            }
-
-            // Replace the projectName in the file's absolute path to the viewName.
-            // This makes the root target of a checkout operation equal to:
-            // targetFolder + dirName
-            StringTokenizer pathTokenizer = new StringTokenizer(rootSourceFolder.getFolderHierarchy(), delim);
-            String currentToken = null;
-            boolean foundRoot = false;
-
-            while (pathTokenizer.hasMoreTokens()) {
-                currentToken = pathTokenizer.nextToken();
-                if (currentToken.equals(getProjectName()) && !foundRoot) {
-                    currentToken = dirName;
-                    foundRoot = true;// only want to do this the first time
-                }
-                root = new java.io.File(root, currentToken);
-            }
-        }
-
-        return root;
-    }
-
-
-    /**
-     * Searches for files in the given folder. This method is recursive and
-     * thus searches all subfolders.
-     *
-     * @param s A StarTeam server.
-     * @param p A valid project on the server.
-     * @param v A view name from the specified project.
-     * @param t An item type which is currently always "file".
-     * @param f The folder to search.
-     * @param tgt Target folder on local machine
-     */
-    protected void runFolder(Server s,
-                             com.starbase.starteam.Project p,
-                             View v,
-                             Type t,
-                             Folder f,
-                             java.io.File tgt) {
-        // Process all items in this folder.
-        Item[] items = f.getItems(t.getName());
-
-        for (int i = 0; i < items.length; i++) {
-            runItem(s, p, v, t, f, items[i], tgt);
-        }
-
-        // Process all subfolders recursively if recursion is on.
-        if (getRecursion()) {
-            Folder[] subfolders = f.getSubFolders();
-
-            for (int i = 0; i < subfolders.length; i++) {
-                runFolder(s, p, v, t, subfolders[i], new java.io.File(tgt, subfolders[i].getName()));
-            }
-        }
-    }
-
-
-    /**
-     * Check out one file if it matches the include filter but not the exclude
-     * filter.
-     *
-     * @param s A StarTeam server.
-     * @param p A valid project on the server.
-     * @param v A view name from the specified project.
-     * @param t An item type which is currently always "file".
-     * @param f The folder the file is localed in.
-     * @param item The file to check out.
-     * @param tgt target folder on local machine
-     */
-    protected void runItem(Server s,
-                           com.starbase.starteam.Project p,
-                           View v,
-                           Type t,
-                           Folder f,
-                           Item item,
-                           java.io.File tgt) {
-        // Get descriptors for this item type.
-        Property p1 = getPrimaryDescriptor(t);
-        Property p2 = getSecondaryDescriptor(t);
-
-        String pName = (String) item.get(p1.getName());
-
-        if (!shouldCheckout(pName)) {
-            return;
-        }
-
-        // VERBOSE MODE ONLY
-        if (getVerbose()) {
-            // Show folder only if changed.
-            boolean bShowHeader = (f != prevFolder);
-
-            if (bShowHeader) {
-                // We want to display the folder the same way you would
-                // enter it on the command line ... so we remove the
-                // View name (which is also the name of the root folder,
-                // and therefore shows up at the start of the path).
-                String strFolder = f.getFolderHierarchy();
-                int i = strFolder.indexOf(delim);
-
-                if (i >= 0) {
-                    strFolder = strFolder.substring(i + 1);
-                }
-                log("            Folder: \"" + strFolder + "\"");
-                prevFolder = f;
-
-                // If we displayed the project, view, item type, or folder,
-                // then show the list of relevant item properties.
-                StringBuffer header = new StringBuffer("                Item");
-
-                header.append(",\t").append(p1.getDisplayName());
-                if (p2 != null) {
-                    header.append(",\t").append(p2.getDisplayName());
-                }
-                log(header.toString());
-            }
-
-            // Finally, show the Item properties ...
-            // Always show the ItemID.
-            StringBuffer itemLine = new StringBuffer("                ");
-
-            itemLine.append(item.getItemID());
-
-            // Show the primary descriptor.
-            // There should always be one.
-            itemLine.append(",\t").append(formatForDisplay(p1, item.get(p1.getName())));
-
-            // Show the secondary descriptor, if there is one.
-            // Some item types have one, some don't.
-            if (p2 != null) {
-                itemLine.append(",\t").append(formatForDisplay(p2, item.get(p2.getName())));
-            }
-
-            // Show if the file is locked.
-            int locker = item.getLocker();
-
-            if (locker > -1) {
-                itemLine.append(",\tLocked by ").append(locker);
-            } else {
-                itemLine.append(",\tNot locked");
-            }
-            log(itemLine.toString());
-        }
-        // END VERBOSE ONLY
-
-        // Check it out; also ugly.
-
-        // Change the item to be checked out to a StarTeam File.
-        com.starbase.starteam.File remote = (com.starbase.starteam.File) item;
-
-        // The local file name is simply the local target path (tgt) which has
-        // been passed recursively down from the top of the tree, with the item's name appended.
-        java.io.File local = new java.io.File(tgt, (String) item.get(p1.getName()));
-
-        try {
-            remote.checkoutTo(local, Item.LockType.UNCHANGED, false, true, true);
-            checkedOut++;
-        } catch (Exception e) {
-            throw new BuildException("Failed to checkout '" + local + "'", e);
-        }
-    }
-
-
-    /**
-     * Look if the file should be checked out. Don't check it out if It fits
-     * no include filters and It fits an exclude filter.
-     *
-     * @param pName the item name to look for being included.
-     * @return whether the file should be checked out or not.
-     */
-    protected boolean shouldCheckout(String pName) {
-        boolean includeIt = matchPatterns(getIncludes(), pName);
-        boolean excludeIt = matchPatterns(getExcludes(), pName);
-
-        return (includeIt && !excludeIt);
-    }
-
-
-    /**
-     * Convenient method to see if a string match a one pattern in given set
-     * of space-separated patterns.
-     *
-     * @param patterns the space-separated list of patterns.
-     * @param pName the name to look for matching.
-     * @return whether the name match at least one pattern.
-     */
-    protected boolean matchPatterns(String patterns, String pName) {
-        if (patterns == null) {
-            return false;
-        }
-        StringTokenizer exStr = new StringTokenizer(patterns, " ");
-
-        while (exStr.hasMoreTokens()) {
-            if (DirectoryScanner.match(exStr.nextToken(), pName)) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-
-    /**
-     * Get the primary descriptor of the given item type. Returns null if
-     * there isn't one. In practice, all item types have a primary descriptor.
-     *
-     * @param t An item type. At this point it will always be "file".
-     * @return The specified item's primary descriptor.
-     */
-    protected Property getPrimaryDescriptor(Type t) {
-        Property[] properties = t.getProperties();
-
-        for (int i = 0; i < properties.length; i++) {
-            Property p = properties[i];
-
-            if (p.isPrimaryDescriptor()) {
-                return p;
-            }
-        }
-        return null;
-    }
-
-
-    /**
-     * Get the secondary descriptor of the given item type. Returns null if
-     * there isn't one.
-     *
-     * @param t An item type. At this point it will always be "file".
-     * @return The specified item's secondary descriptor. There may not be one
-     *      for every file.
-     */
-    protected Property getSecondaryDescriptor(Type t) {
-        Property[] properties = t.getProperties();
-
-        for (int i = 0; i < properties.length; i++) {
-            Property p = properties[i];
-
-            if (p.isDescriptor() && !p.isPrimaryDescriptor()) {
-                return p;
-            }
-        }
-        return null;
-    }
-
-
-    /**
-     * Formats a property value for display to the user.
-     *
-     * @param p An item property to format.
-     * @param value
-     * @return A string containing the property, which is truncated to 35
-     *      characters for display.
-     */
-    protected String formatForDisplay(Property p, Object value) {
-        if (p.getTypeCode() == Property.Types.TEXT) {
-            String str = value.toString();
-
-            if (str.length() > 35) {
-                str = str.substring(0, 32) + "...";
-            }
-            return "\"" + str + "\"";
-        } else {
-            if (p.getTypeCode() == Property.Types.ENUMERATED) {
-                return "\"" + p.getEnumDisplayName(((Integer) value).intValue()) + "\"";
-            } else {
-                return value.toString();
-            }
-        }
-    }
-
-    // Begin SET and GET methods
-
-    /**
-     * Sets the <CODE>serverName</CODE> attribute to the given value.
-     *
-     * @param serverName The name of the server you wish to connect to.
-     * @see #getServerName()
-     */
-    public void setServerName(String serverName) {
-        this.serverName = serverName;
-    }
-
-
-    /**
-     * Gets the <CODE>serverName</CODE> attribute.
-     *
-     * @return The StarTeam server to log in to.
-     * @see #setServerName(String serverName)
-     */
-    public String getServerName() {
-        return serverName;
-    }
-
-
-    /**
-     * Sets the <CODE>serverPort</CODE> attribute to the given value. The
-     * given value must be a valid integer, but it must be a string object.
-     *
-     * @param serverPort A string containing the port on the StarTeam server
-     *      to use.
-     * @see #getServerPort()
-     */
-    public void setServerPort(int serverPort) {
-        this.serverPort = serverPort;
-    }
-
-
-    /**
-     * Gets the <CODE>serverPort</CODE> attribute.
-     *
-     * @return A string containing the port on the StarTeam server to use.
-     * @see #setServerPort(int)
-     */
-    public int getServerPort() {
-        return serverPort;
-    }
-
-
-    /**
-     * Sets the <CODE>projectName</CODE> attribute to the given value.
-     *
-     * @param projectName The StarTeam project to search.
-     * @see #getProjectName()
-     */
-    public void setProjectName(String projectName) {
-        this.projectName = projectName;
-    }
-
-
-    /**
-     * Gets the <CODE>projectName</CODE> attribute.
-     *
-     * @return The StarTeam project to search.
-     * @see #setProjectName(String projectName)
-     */
-    public String getProjectName() {
-        return projectName;
-    }
-
-
-    /**
-     * Sets the <CODE>viewName</CODE> attribute to the given value.
-     *
-     * @param viewName The view to find the specified folder in.
-     * @see #getViewName()
-     */
-    public void setViewName(String viewName) {
-        this.viewName = viewName;
-    }
-
-
-    /**
-     * Gets the <CODE>viewName</CODE> attribute.
-     *
-     * @return The view to find the specified folder in.
-     * @see #setViewName(String viewName)
-     */
-    public String getViewName() {
-        return viewName;
-    }
-
-
-    /**
-     * Sets the <CODE>folderName</CODE> attribute to the given value. To
-     * search the root folder, use a slash or backslash, or simply don't set a
-     * folder at all.
-     *
-     * @param folderName The subfolder from which to check out files.
-     * @see #getFolderName()
-     */
-    public void setFolderName(String folderName) {
-        this.folderName = folderName;
-    }
-
-
-    /**
-     * Gets the <CODE>folderName</CODE> attribute.
-     *
-     * @return The subfolder from which to check out files. All subfolders
-     *      will be searched, as well.
-     * @see #setFolderName(String folderName)
-     */
-    public String getFolderName() {
-        return folderName;
-    }
-
-
-    /**
-     * Sets the <CODE>username</CODE> attribute to the given value.
-     *
-     * @param username Your username for the specified StarTeam server.
-     * @see #getUsername()
-     */
-    public void setUsername(String username) {
-        this.username = username;
-    }
-
-
-    /**
-     * Gets the <CODE>username</CODE> attribute.
-     *
-     * @return The username given by the user.
-     * @see #setUsername(String username)
-     */
-    public String getUsername() {
-        return username;
-    }
-
-
-    /**
-     * Sets the <CODE>password</CODE> attribute to the given value.
-     *
-     * @param password Your password for the specified StarTeam server.
-     * @see #getPassword()
-     */
-    public void setPassword(String password) {
-        this.password = password;
-    }
-
-
-    /**
-     * Gets the <CODE>password</CODE> attribute.
-     *
-     * @return The password given by the user.
-     * @see #setPassword(String password)
-     */
-    public String getPassword() {
-        return password;
-    }
-
-
-    /**
-     * Sets the <CODE>targetFolder</CODE> attribute to the given value.
-     *
-     * @param target The target path on the local machine to check out to.
-     * @see #getTargetFolder()
-     */
-    public void setTargetFolder(String targetFolder) {
-        this.targetFolder = targetFolder;
-    }
-
-
-    /**
-     * Gets the <CODE>targetFolder</CODE> attribute.
-     *
-     * @return The target path on the local machine to check out to.
-     * @see #setTargetFolder(String targetFolder)
-     */
-    public String getTargetFolder() {
-        return targetFolder;
-    }
-
-
-    /**
-     * Sets the <CODE>force</CODE> attribute to the given value.
-     *
-     * @param force if true, it overwrites files in the target directory. By
-     *      default it set to false as a safeguard. Note that if the target
-     *      directory does not exist, this setting has no effect.
-     * @see #getForce()
-     */
-    public void setForce(boolean force) {
-        this.force = force;
-    }
-
-
-    /**
-     * Gets the <CODE>force</CODE> attribute.
-     *
-     * @return whether to continue if the target directory exists.
-     * @see #setForce(boolean)
-     */
-    public boolean getForce() {
-        return force;
-    }
-
-
-    /**
-     * Turns recursion on or off.
-     *
-     * @param recursion if it is true, the default, subfolders are searched
-     *      recursively for files to check out. Otherwise, only files
-     *      specified by <CODE>folderName</CODE> are scanned.
-     * @see #getRecursion()
-     */
-    public void setRecursion(boolean recursion) {
-        this.recursion = recursion;
-    }
-
-
-    /**
-     * Gets the <CODE>recursion</CODE> attribute, which tells
-     * AntStarTeamCheckOut whether to search subfolders when checking out
-     * files.
-     *
-     * @return whether to search subfolders when checking out files.
-     * @see #setRecursion(boolean)
-     */
-    public boolean getRecursion() {
-        return recursion;
-    }
-
-
-    /**
-     * Sets the <CODE>verbose</CODE> attribute to the given value.
-     *
-     * @param verbose whether to display all files as it checks them out. By
-     *      default it is false, so the program only displays the total number
-     *      of files unless you override this default.
-     * @see #getVerbose()
-     */
-    public void setVerbose(boolean verbose) {
-        this.verbose = verbose;
-    }
-
-
-    /**
-     * Gets the <CODE>verbose</CODE> attribute.
-     *
-     * @return whether to display all files as it checks them out.
-     * @see #setVerbose(boolean verbose)
-     */
-    public boolean getVerbose() {
-        return verbose;
-    }
-
-    // Begin filter getters and setters
-
-    /**
-     * Sets the include filter. When filtering files, AntStarTeamCheckOut uses
-     * an unmodified version of <CODE>DirectoryScanner</CODE>'s <CODE>match</CODE>
-     * method, so here are the patterns straight from the Ant source code:
-     * <BR>
-     * <BR>
-     * Matches a string against a pattern. The pattern contains two special
-     * characters: <BR>
-     * '*' which means zero or more characters, <BR>
-     * '?' which means one and only one character. <BR>
-     * <BR>
-     * Separate multiple inlcude filters by <I>spaces</I> , not commas as Ant
-     * uses. For example, if you want to check out all .java and .class\
-     * files, you would put the following line in your program: <CODE>setIncludes("*.java *.class");</CODE>
-     * Finally, note that filters have no effect on the <B>directories</B>
-     * that are scanned; you could not check out files from directories with
-     * names beginning only with "build," for instance. Of course, you could
-     * limit AntStarTeamCheckOut to a particular folder and its subfolders
-     * with the <CODE>setFolderName(String folderName)</CODE> command. <BR>
-     * <BR>
-     * Treatment of overlapping inlcudes and excludes: To give a simplistic
-     * example suppose that you set your include filter to "*.htm *.html" and
-     * your exclude filter to "index.*". What happens to index.html?
-     * AntStarTeamCheckOut will not check out index.html, as it matches an
-     * exclude filter ("index.*"), even though it matches the include filter,
-     * as well. <BR>
-     * <BR>
-     * Please also read the following sections before using filters:
-     *
-     * @param includes A string of filter patterns to include. Separate the
-     *      patterns by spaces.
-     * @see #getIncludes()
-     * @see #setExcludes(String excludes)
-     * @see #getExcludes()
-     */
-    public void setIncludes(String includes) {
-        this.includes = includes;
-    }
-
-
-    /**
-     * Gets the patterns from the include filter. Rather that duplicate the
-     * details of AntStarTeanCheckOut's filtering here, refer to these links:
-     *
-     * @return A string of filter patterns separated by spaces.
-     * @see #setIncludes(String includes)
-     * @see #setExcludes(String excludes)
-     * @see #getExcludes()
-     */
-    public String getIncludes() {
-        return includes;
-    }
-
-
-    /**
-     * Sets the exclude filter. When filtering files, AntStarTeamCheckOut uses
-     * an unmodified version of <CODE>DirectoryScanner</CODE>'s <CODE>match</CODE>
-     * method, so here are the patterns straight from the Ant source code:
-     * <BR>
-     * <BR>
-     * Matches a string against a pattern. The pattern contains two special
-     * characters: <BR>
-     * '*' which means zero or more characters, <BR>
-     * '?' which means one and only one character. <BR>
-     * <BR>
-     * Separate multiple exlcude filters by <I>spaces</I> , not commas as Ant
-     * uses. For example, if you want to check out all files except .XML and
-     * .HTML files, you would put the following line in your program: <CODE>setExcludes("*.XML *.HTML");</CODE>
-     * Finally, note that filters have no effect on the <B>directories</B>
-     * that are scanned; you could not skip over all files in directories
-     * whose names begin with "project," for instance. <BR>
-     * <BR>
-     * Treatment of overlapping inlcudes and excludes: To give a simplistic
-     * example suppose that you set your include filter to "*.htm *.html" and
-     * your exclude filter to "index.*". What happens to index.html?
-     * AntStarTeamCheckOut will not check out index.html, as it matches an
-     * exclude filter ("index.*"), even though it matches the include filter,
-     * as well. <BR>
-     * <BR>
-     * Please also read the following sections before using filters:
-     *
-     * @param excludes A string of filter patterns to exclude. Separate the
-     *      patterns by spaces.
-     * @see #setIncludes(String includes)
-     * @see #getIncludes()
-     * @see #getExcludes()
-     */
-    public void setExcludes(String excludes) {
-        this.excludes = excludes;
-    }
-
-
-    /**
-     * Gets the patterns from the exclude filter. Rather that duplicate the
-     * details of AntStarTeanCheckOut's filtering here, refer to these links:
-     *
-     * @return A string of filter patterns separated by spaces.
-     * @see #setExcludes(String excludes)
-     * @see #setIncludes(String includes)
-     * @see #getIncludes()
-     */
-    public String getExcludes() {
-        return excludes;
-    }
-
-
-    /**
-     * returns whether the StarTeam default path is factored into calculated
-     * target path locations (false) or whether targetFolder is an absolute
-     * mapping to the root folder named by folderName
-     *
-     * @return returns true if absolute mapping is used, false if it is not
-     *      used.
-     * @see #setTargetFolderAbsolute(boolean)
-     */
-    public boolean getTargetFolderAbsolute() {
-        return this.targetFolderAbsolute;
-    }
-
-
-    /**
-     * sets the property that indicates whether or not the Star Team "default
-     * folder" is to be used when calculation paths for items on the target
-     * (false) or if targetFolder is an absolute mapping to the root folder
-     * named by foldername.
-     *
-     * @param targetFolderAbsolute <tt>true</tt> if the absolute mapping is to
-     *      be used. <tt>false</tt> (the default) if the "default folder" is
-     *      to be factored in.
-     * @see #getTargetFolderAbsolute()
-     */
-    public void setTargetFolderAbsolute(boolean targetFolderAbsolute) {
-        this.targetFolderAbsolute = targetFolderAbsolute;
-    }
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/sitraka/CovMerge.java b/src/main/org/apache/tools/ant/taskdefs/optional/sitraka/CovMerge.java
deleted file mode 100644
index 8d1e768..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/sitraka/CovMerge.java
+++ /dev/null
@@ -1,231 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.sitraka;
-
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.util.Random;
-import java.util.Vector;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.DirectoryScanner;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.taskdefs.Execute;
-import org.apache.tools.ant.taskdefs.LogStreamHandler;
-import org.apache.tools.ant.types.Commandline;
-import org.apache.tools.ant.types.FileSet;
-
-/**
- * Convenient task to run the snapshot merge utility for JProbe Coverage.
- *
- * @author <a href="sbailliez@imediation.com">Stephane Bailliez</a>
- *
- * @ant.task name="jpcovmerge" category="metrics"
- */
-public class CovMerge extends Task {
-
-    /** coverage home, it is mandatory */
-    private File home = null;
-
-    /** the name of the output snapshot */
-    private File tofile = null;
-
-    /** the filesets that will get all snapshots to merge */
-    private Vector filesets = new Vector();
-
-    private boolean verbose;
-
-    /**
-     * set the coverage home. It must point to JProbe coverage
-     * directories where are stored native librairies and jars
-     */
-    public void setHome(File value) {
-        this.home = value;
-    }
-
-    /**
-     * Set the output snapshot file
-     */
-    public void setTofile(File value) {
-        this.tofile = value;
-    }
-
-    /** run the merging in verbose mode */
-    public void setVerbose(boolean flag) {
-        this.verbose = flag;
-    }
-
-    /** add a fileset containing the snapshots to include/exclude */
-    public void addFileset(FileSet fs) {
-        filesets.addElement(fs);
-    }
-
-    //---------------- the tedious job begins here
-
-    public CovMerge() {
-    }
-
-    /** execute the jpcovmerge by providing a parameter file */
-    public void execute() throws BuildException {
-        checkOptions();
-
-        File paramfile = createParamFile();
-        try {
-            Commandline cmdl = new Commandline();
-            cmdl.setExecutable(new File(home, "jpcovmerge").getAbsolutePath());
-            if (verbose) {
-                cmdl.createArgument().setValue("-v");
-            }
-            cmdl.createArgument().setValue("-jp_paramfile=" + paramfile.getAbsolutePath());
-
-            LogStreamHandler handler = new LogStreamHandler(this, Project.MSG_INFO, Project.MSG_WARN);
-            Execute exec = new Execute(handler);
-            log(cmdl.describeCommand(), Project.MSG_VERBOSE);
-            exec.setCommandline(cmdl.getCommandline());
-
-            // JProbe process always return 0 so  we will not be
-            // able to check for failure ! :-(
-            int exitValue = exec.execute();
-            if (exitValue != 0) {
-                throw new BuildException("JProbe Coverage Merging failed (" + exitValue + ")");
-            }
-        } catch (IOException e) {
-            throw new BuildException("Failed to run JProbe Coverage Merge: " + e);
-        } finally {
-            //@todo should be removed once switched to JDK1.2
-            paramfile.delete();
-        }
-    }
-
-    /** check for mandatory options */
-    protected void checkOptions() throws BuildException {
-        if (tofile == null) {
-            throw new BuildException("'tofile' attribute must be set.");
-        }
-
-        // check coverage home
-        if (home == null || !home.isDirectory()) {
-            throw new BuildException("Invalid home directory. Must point to JProbe home directory");
-        }
-        home = new File(home, "coverage");
-        File jar = new File(home, "coverage.jar");
-        if (!jar.exists()) {
-            throw new BuildException("Cannot find Coverage directory: " + home);
-        }
-    }
-
-    /** get the snapshots from the filesets */
-    protected File[] getSnapshots() {
-        Vector v = new Vector();
-        final int size = filesets.size();
-        for (int i = 0; i < size; i++) {
-            FileSet fs = (FileSet) filesets.elementAt(i);
-            DirectoryScanner ds = fs.getDirectoryScanner(getProject());
-            ds.scan();
-            String[] f = ds.getIncludedFiles();
-            for (int j = 0; j < f.length; j++) {
-                String pathname = f[j];
-                File file = new File(ds.getBasedir(), pathname);
-                file = project.resolveFile(file.getPath());
-                v.addElement(file);
-            }
-        }
-
-        File[] files = new File[v.size()];
-        v.copyInto(files);
-        return files;
-    }
-
-
-    /**
-     * create the parameters file that contains all file to merge
-     * and the output filename.
-     */
-    protected File createParamFile() throws BuildException {
-        File[] snapshots = getSnapshots();
-        File file = createTmpFile();
-        FileWriter fw = null;
-        try {
-            fw = new FileWriter(file);
-            PrintWriter pw = new PrintWriter(fw);
-            for (int i = 0; i < snapshots.length; i++) {
-                pw.println(snapshots[i].getAbsolutePath());
-            }
-            // last file is the output snapshot
-            pw.println(project.resolveFile(tofile.getPath()));
-            pw.flush();
-        } catch (IOException e) {
-            throw new BuildException("I/O error while writing to " + file, e);
-        } finally {
-            if (fw != null) {
-                try {
-                    fw.close();
-                } catch (IOException ignored) {
-                }
-            }
-        }
-        return file;
-    }
-
-    /** create a temporary file in the current dir (For JDK1.1 support) */
-    protected File createTmpFile() {
-        final long rand = (new Random(System.currentTimeMillis())).nextLong();
-        File file = new File("jpcovmerge" + rand + ".tmp");
-        return file;
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/sitraka/CovReport.java b/src/main/org/apache/tools/ant/taskdefs/optional/sitraka/CovReport.java
deleted file mode 100644
index 6a799bd..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/sitraka/CovReport.java
+++ /dev/null
@@ -1,392 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.sitraka;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.Vector;
-import javax.xml.transform.OutputKeys;
-import javax.xml.transform.Result;
-import javax.xml.transform.Source;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.dom.DOMSource;
-import javax.xml.transform.stream.StreamResult;
-
-import org.w3c.dom.Document;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.taskdefs.Execute;
-import org.apache.tools.ant.taskdefs.LogStreamHandler;
-import org.apache.tools.ant.types.Commandline;
-import org.apache.tools.ant.types.EnumeratedAttribute;
-import org.apache.tools.ant.types.Path;
-
-
-/**
- * Convenient task to run the snapshot merge utility for JProbe Coverage 3.0.
- *
- * @author <a href="sbailliez@imediation.com">Stephane Bailliez</a>
- *
- * @ant.task name="jpcovreport" category="metrics"
- */
-public class CovReport extends Task {
-    /*
-      jpcoverport [options] -output=file -snapshot=snapshot.jpc
-      jpcovreport [options] [-paramfile=file] -output=<fileName> -snapshot=<fileName>
-
-      Generate a report based on the indicated snapshot
-
-      -paramfile=file
-      A text file containing the report generation options.
-
-      -format=(html|text|xml) defaults to html
-      The format of the generated report.
-
-      -type=(executive|summary|detailed|verydetailed) defaults to detailed
-      The type of report to be generated. For -format=xml,
-      use -type=verydetailed to include source code lines.
-
-      Note: A very detailed report can be VERY large.
-
-      -percent=num            Min 1 Max 101 Default 101
-      An integer representing a percentage of coverage.
-      Only methods with test case coverage less than the
-      percentage are included in reports.
-
-      -filters=string
-      A comma-separated list of filters in the form
-      <package>.<class>:V, where V can be I for Include or
-      E for Exclude. For the default package, omit <package>.
-
-      -filters_method=string
-      Optional. A comma-separated list of methods that
-      correspond one-to-one with the entries in -filters.
-
-      -output=string  Must be specified
-      The absolute path and file name for the generated
-      report file.
-
-      -snapshot=string        Must be specified
-      The absolute path and file name of the snapshot file.
-
-      -inc_src_text=(on|off)  defaults to on
-      Include text of the source code lines.
-      Only applies for -format=xml and -type=verydetailed.
-
-      -sourcepath=string      defaults to .
-      A semicolon-separated list of source paths.
-
-      /*
-
-      /** coverage home,  mandatory */
-    private File home = null;
-
-    /** format of generated report, optional */
-    private String format = null;
-
-    /** the name of the output snapshot, mandatory */
-    private File tofile = null;
-
-    /** type of report, optional */
-    private String type = null;
-
-    /** threshold value for printing methods, optional */
-    private Integer percent = null;
-
-    /** comma separated list of filters (???)*/
-    private String filters = null;
-
-    /** name of the snapshot file to create report from */
-    private File snapshot = null;
-
-    /** sourcepath to use */
-    private Path sourcePath = null;
-
-    /** include the text for each line of code (xml report verydetailed)*/
-    private boolean includeSource = true;
-
-    private Path coveragePath = null;
-
-    /** */
-    private Reference reference = null;
-
-
-    /**
-     * Set the coverage home. It must point to JProbe coverage
-     * directories where are stored native libraries and jars.
-     */
-    public void setHome(File value) {
-        this.home = value;
-    }
-
-    public static class ReportFormat extends EnumeratedAttribute {
-        public String[] getValues() {
-            return new String[]{"html", "text", "xml"};
-        }
-    }
-
-    /** set the format of the report html|text|xml*/
-    public void setFormat(ReportFormat value) {
-        this.format = value.getValue();
-    }
-
-    public static class ReportType extends EnumeratedAttribute {
-        public String[] getValues() {
-            return new String[]{"executive", "summary", "detailed", "verydetailed"};
-        }
-    }
-
-    /** sets the report type executive|summary|detailed|verydetailed */
-    public void setType(ReportType value) {
-        this.type = value.getValue();
-    }
-
-    /** include source code lines. XML report only */
-    public void setIncludesource(boolean value) {
-        this.includeSource = value;
-    }
-
-    /** sets the threshold printing method 0-100*/
-    public void setPercent(Integer value) {
-        this.percent = value;
-    }
-
-    /** set the filters */
-    public void setFilters(String values) {
-        this.filters = values;
-    }
-
-    public Path createSourcepath() {
-        if (sourcePath == null) {
-            sourcePath = new Path(project);
-        }
-        return sourcePath.createPath();
-    }
-
-    public void setSnapshot(File value) {
-        this.snapshot = value;
-    }
-
-    /**
-     * Set the output snapshot file
-     */
-    public void setTofile(File value) {
-        this.tofile = value;
-    }
-
-    //@todo to remove
-    public Path createCoveragepath() {
-        if (coveragePath == null) {
-            coveragePath = new Path(project);
-        }
-        return coveragePath.createPath();
-    }
-
-    public Reference createReference() {
-        if (reference == null) {
-            reference = new Reference();
-        }
-        return reference;
-    }
-
-
-    public CovReport() {
-    }
-
-    /** check for mandatory options */
-    protected void checkOptions() throws BuildException {
-        if (tofile == null) {
-            throw new BuildException("'tofile' attribute must be set.");
-        }
-        if (snapshot == null) {
-            throw new BuildException("'snapshot' attribute must be set.");
-        }
-        if (home == null) {
-            throw new BuildException("'home' attribute must be set to JProbe home directory");
-        }
-        home = new File(home, "coverage");
-        File jar = new File(home, "coverage.jar");
-        if (!jar.exists()) {
-            throw new BuildException("Cannot find Coverage directory: " + home);
-        }
-        if (reference != null && !"xml".equals(format)) {
-            log("Ignored reference. It cannot be used in non XML report.");
-            reference = null; // nullify it so that there is no ambiguity
-        }
-
-    }
-
-    public void execute() throws BuildException {
-        checkOptions();
-        try {
-            Commandline cmdl = new Commandline();
-            // we need to run Coverage from his directory due to dll/jar issues
-            cmdl.setExecutable(new File(home, "jpcovreport").getAbsolutePath());
-            String[] params = getParameters();
-            for (int i = 0; i < params.length; i++) {
-                cmdl.createArgument().setValue(params[i]);
-            }
-
-            // use the custom handler for stdin issues
-            LogStreamHandler handler = new LogStreamHandler(this, Project.MSG_INFO, Project.MSG_WARN);
-            Execute exec = new Execute(handler);
-            log(cmdl.describeCommand(), Project.MSG_VERBOSE);
-            exec.setCommandline(cmdl.getCommandline());
-            int exitValue = exec.execute();
-            if (exitValue != 0) {
-                throw new BuildException("JProbe Coverage Report failed (" + exitValue + ")");
-            }
-            log("coveragePath: " + coveragePath, Project.MSG_VERBOSE);
-            log("format: " + format, Project.MSG_VERBOSE);
-            if (reference != null && "xml".equals(format)) {
-                reference.createEnhancedXMLReport();
-            }
-
-        } catch (IOException e) {
-            throw new BuildException("Failed to execute JProbe Coverage Report.", e);
-        }
-    }
-
-
-    protected String[] getParameters() {
-        Vector v = new Vector();
-        if (format != null) {
-            v.addElement("-format=" + format);
-        }
-        if (type != null) {
-            v.addElement("-type=" + type);
-        }
-        if (percent != null) {
-            v.addElement("-percent=" + percent);
-        }
-        if (filters != null) {
-            v.addElement("-filters=" + filters);
-        }
-        v.addElement("-output=" + project.resolveFile(tofile.getPath()));
-        v.addElement("-snapshot=" + project.resolveFile(snapshot.getPath()));
-        // as a default -sourcepath use . in JProbe, so use project .
-        if (sourcePath == null) {
-            sourcePath = new Path(project);
-            sourcePath.createPath().setLocation(project.resolveFile("."));
-        }
-        v.addElement("-sourcepath=" + sourcePath);
-
-        if ("verydetailed".equalsIgnoreCase(format) && "xml".equalsIgnoreCase(type)) {
-            v.addElement("-inc_src_text=" + (includeSource ? "on" : "off"));
-        }
-
-        String[] params = new String[v.size()];
-        v.copyInto(params);
-        return params;
-    }
-
-
-    public class Reference {
-        protected Path classPath;
-        protected ReportFilters filters;
-
-        public Path createClasspath() {
-            if (classPath == null) {
-                classPath = new Path(CovReport.this.getProject());
-            }
-            return classPath.createPath();
-        }
-
-        public ReportFilters createFilters() {
-            if (filters == null) {
-                filters = new ReportFilters();
-            }
-            return filters;
-        }
-
-        protected void createEnhancedXMLReport() throws BuildException {
-            // we need a classpath element
-            if (classPath == null) {
-                throw new BuildException("Need a 'classpath' element.");
-            }
-            // and a valid one...
-            String[] paths = classPath.list();
-            if (paths.length == 0) {
-                throw new BuildException("Coverage path is invalid. It does not contain any existing path.");
-            }
-            // and we need at least one filter include/exclude.
-            if (filters == null || filters.size() == 0) {
-                createFilters();
-                log("Adding default include filter to *.*()", Project.MSG_VERBOSE);
-                ReportFilters.Include include = new ReportFilters.Include();
-                filters.addInclude(include);
-            }
-            try {
-                log("Creating enhanced XML report", Project.MSG_VERBOSE);
-                XMLReport report = new XMLReport(CovReport.this, tofile);
-                report.setReportFilters(filters);
-                report.setJProbehome(new File(home.getParent()));
-                Document doc = report.createDocument(paths);
-                TransformerFactory tfactory = TransformerFactory.newInstance();
-                Transformer transformer = tfactory.newTransformer();
-                transformer.setOutputProperty(OutputKeys.INDENT, "yes");
-                transformer.setOutputProperty(OutputKeys.METHOD, "xml");
-                Source src = new DOMSource(doc);
-                Result res = new StreamResult("file:///" + tofile.toString());
-                transformer.transform(src, res);
-            } catch (Exception e) {
-                throw new BuildException("Error while performing enhanced XML report from file " + tofile, e);
-            }
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/sitraka/Coverage.java b/src/main/org/apache/tools/ant/taskdefs/optional/sitraka/Coverage.java
deleted file mode 100644
index 77c28ff..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/sitraka/Coverage.java
+++ /dev/null
@@ -1,467 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.sitraka;
-
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.util.Random;
-import java.util.Vector;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.taskdefs.Execute;
-import org.apache.tools.ant.taskdefs.LogStreamHandler;
-import org.apache.tools.ant.types.Commandline;
-import org.apache.tools.ant.types.CommandlineJava;
-import org.apache.tools.ant.types.EnumeratedAttribute;
-import org.apache.tools.ant.types.FileSet;
-import org.apache.tools.ant.types.Path;
-
-/**
- * Convenient task to run Sitraka JProbe Coverage from Ant.
- * Options are pretty numerous, you'd better check the manual for a full
- * descriptions of options. (not that simple since they differ from the online
- * help, from the usage command line and from the examples...)
- * <p>
- * For additional information, visit <a href="http://www.sitraka.com">www.sitraka.com</a>
- *
- * @author <a href="sbailliez@imediation.com">Stephane Bailliez</a>
- *
- * @ant.task name="jpcoverage" category="metrics"
- */
-public class Coverage extends Task {
-
-    protected File home;
-
-    protected Commandline cmdl = new Commandline();
-
-    protected CommandlineJava cmdlJava = new CommandlineJava();
-
-    protected String function = "coverage";
-
-    protected String seedName;
-
-    protected File inputFile;
-
-    protected File javaExe;
-
-    protected String vm;
-
-    protected boolean applet = false;
-
-    /** this is a somewhat annoying thing, set it to never */
-    protected String exitPrompt = "never";
-
-    protected Filters filters = new Filters();
-
-    protected Triggers triggers;
-
-    protected String finalSnapshot = "coverage";
-
-    protected String recordFromStart = "coverage";
-
-    protected File snapshotDir;
-
-    protected File workingDir;
-
-    protected boolean trackNatives = false;
-
-    protected Socket socket;
-
-    protected int warnLevel = 0;
-
-    protected Vector filesets = new Vector();
-
-    //--------- setters used via reflection --
-
-    /** set the coverage home directory where are libraries, jars and jplauncher */
-    public void setHome(File value) {
-        home = value;
-    }
-
-    /** seed name for snapshot file. Can be null, default to snap */
-    public void setSeedname(String value) {
-        seedName = value;
-    }
-
-    public void setInputfile(File value) {
-        inputFile = value;
-    }
-
-    public void setJavaexe(File value) {
-        javaExe = value;
-    }
-
-    public static class Javavm extends EnumeratedAttribute {
-        public String[] getValues() {
-            return new String[]{"java2", "jdk118", "jdk117"};
-        }
-    }
-
-    /** jdk117, jdk118 or java2, can be null, default to java2 */
-    public void setVm(Javavm value) {
-        vm = value.getValue();
-    }
-
-    /** default to false unless file is htm or html */
-    public void setApplet(boolean value) {
-        applet = value;
-    }
-
-    /** always, error, never */
-    public void setExitprompt(String value) {
-        exitPrompt = value;
-    }
-
-    public Filters createFilters() {
-        return filters;
-    }
-
-    public Triggers createTriggers() {
-        if (triggers == null) {
-            triggers = new Triggers();
-        }
-        return triggers;
-    }
-
-    public Socket createSocket() {
-        if (socket == null) {
-            socket = new Socket();
-        }
-        return socket;
-    }
-
-    public static class Finalsnapshot extends EnumeratedAttribute {
-        public String[] getValues() {
-            return new String[]{"coverage", "none", "all"};
-        }
-    }
-
-    /** none, coverage, all. Can be null, default to none */
-    public void setFinalsnapshot(String value) {
-        finalSnapshot = value;
-    }
-
-    public static class Recordfromstart extends EnumeratedAttribute {
-        public String[] getValues() {
-            return new String[]{"coverage", "none", "all"};
-        }
-    }
-
-    /** all, coverage, none */
-    public void setRecordfromstart(Recordfromstart value) {
-        recordFromStart = value.getValue();
-    }
-
-    public void setWarnlevel(Integer value) {
-        warnLevel = value.intValue();
-    }
-
-    public void setSnapshotdir(File value) {
-        snapshotDir = value;
-    }
-
-    public void setWorkingdir(File value) {
-        workingDir = value;
-    }
-
-    public void setTracknatives(boolean value) {
-        trackNatives = value;
-    }
-
-    //
-
-    /** the jvm arguments */
-    public Commandline.Argument createJvmarg() {
-        return cmdlJava.createVmArgument();
-    }
-
-    /** the command arguments */
-    public Commandline.Argument createArg() {
-        return cmdlJava.createArgument();
-    }
-
-    /** classpath to run the files */
-    public Path createClasspath() {
-        return cmdlJava.createClasspath(project).createPath();
-    }
-
-    /** classname to run as standalone or runner for filesets */
-    public void setClassname(String value) {
-        cmdlJava.setClassname(value);
-    }
-
-    /** the classnames to execute */
-    public void addFileset(FileSet fs) {
-        filesets.addElement(fs);
-    }
-
-
-    //---------------- the tedious job begins here
-
-    public Coverage() {
-    }
-
-    /** execute the jplauncher by providing a parameter file */
-    public void execute() throws BuildException {
-        File paramfile = null;
-        // if an input file is used, all other options are ignored...
-        if (inputFile == null) {
-            checkOptions();
-            paramfile = createParamFile();
-        } else {
-            paramfile = inputFile;
-        }
-        try {
-            // we need to run Coverage from his directory due to dll/jar issues
-            cmdl.setExecutable(new File(home, "jplauncher").getAbsolutePath());
-            cmdl.createArgument().setValue("-jp_input=" + paramfile.getAbsolutePath());
-
-            // use the custom handler for stdin issues
-            LogStreamHandler handler = new CoverageStreamHandler(this);
-            Execute exec = new Execute(handler);
-            log(cmdl.describeCommand(), Project.MSG_VERBOSE);
-            exec.setCommandline(cmdl.getCommandline());
-            int exitValue = exec.execute();
-            if (exitValue != 0) {
-                throw new BuildException("JProbe Coverage failed (" + exitValue + ")");
-            }
-        } catch (IOException e) {
-            throw new BuildException("Failed to execute JProbe Coverage.", e);
-        } finally {
-            //@todo should be removed once switched to JDK1.2
-            if (inputFile == null && paramfile != null) {
-                paramfile.delete();
-            }
-        }
-    }
-
-    /** wheck what is necessary to check, Coverage will do the job for us */
-    protected void checkOptions() throws BuildException {
-        // check coverage home
-        if (home == null || !home.isDirectory()) {
-            throw new BuildException("Invalid home directory. Must point to JProbe home directory");
-        }
-        home = new File(home, "coverage");
-        File jar = new File(home, "coverage.jar");
-        if (!jar.exists()) {
-            throw new BuildException("Cannot find Coverage directory: " + home);
-        }
-
-        // make sure snapshot dir exists and is resolved
-        if (snapshotDir == null) {
-            snapshotDir = new File(".");
-        }
-        snapshotDir = project.resolveFile(snapshotDir.getPath());
-        if (!snapshotDir.isDirectory() || !snapshotDir.exists()) {
-            throw new BuildException("Snapshot directory does not exists :" + snapshotDir);
-        }
-        if (workingDir == null) {
-            workingDir = new File(".");
-        }
-        workingDir = project.resolveFile(workingDir.getPath());
-
-        // check for info, do your best to select the java executable.
-        // JProbe 3.0 fails if there is no javaexe option. So
-        if (javaExe == null && (vm == null || "java2".equals(vm))) {
-            String version = System.getProperty("java.version");
-            // make we are using 1.2+, if it is, then do your best to
-            // get a javaexe
-            if (!version.startsWith("1.1")) {
-                if (vm == null) {
-                    vm = "java2";
-                }
-                // if we are here obviously it is java2
-                String home = System.getProperty("java.home");
-                boolean isUnix = File.separatorChar == '/';
-                javaExe = isUnix ? new File(home, "bin/java") : new File(home, "/bin/java.exe");
-            }
-        }
-    }
-
-    /**
-     * return the command line parameters. Parameters can either be passed
-     * to the command line and stored to a file (then use the -jp_input=&lt;filename&gt;)
-     * if they are too numerous.
-     */
-    protected String[] getParameters() {
-        Vector params = new Vector();
-        params.addElement("-jp_function=" + function);
-        if (vm != null) {
-            params.addElement("-jp_vm=" + vm);
-        }
-        if (javaExe != null) {
-            params.addElement("-jp_java_exe=" + project.resolveFile(javaExe.getPath()));
-        }
-        params.addElement("-jp_working_dir=" + workingDir.getPath());
-        params.addElement("-jp_snapshot_dir=" + snapshotDir.getPath());
-        params.addElement("-jp_record_from_start=" + recordFromStart);
-        params.addElement("-jp_warn=" + warnLevel);
-        if (seedName != null) {
-            params.addElement("-jp_output_file=" + seedName);
-        }
-        params.addElement("-jp_filter=" + filters.toString());
-        if (triggers != null) {
-            params.addElement("-jp_trigger=" + triggers.toString());
-        }
-        if (finalSnapshot != null) {
-            params.addElement("-jp_final_snapshot=" + finalSnapshot);
-        }
-        params.addElement("-jp_exit_prompt=" + exitPrompt);
-        //params.addElement("-jp_append=" + append);
-        params.addElement("-jp_track_natives=" + trackNatives);
-        //.... now the jvm
-        // arguments
-        String[] vmargs = cmdlJava.getVmCommand().getArguments();
-        for (int i = 0; i < vmargs.length; i++) {
-            params.addElement(vmargs[i]);
-        }
-        // classpath
-        Path classpath = cmdlJava.getClasspath();
-        if (classpath != null && classpath.size() > 0) {
-            params.addElement("-classpath " + classpath.toString());
-        }
-        // classname (runner or standalone)
-        if (cmdlJava.getClassname() != null) {
-            params.addElement(cmdlJava.getClassname());
-        }
-        // arguments for classname
-        String[] args = cmdlJava.getJavaCommand().getArguments();
-        for (int i = 0; i < args.length; i++) {
-            params.addElement(args[i]);
-        }
-
-        String[] array = new String[params.size()];
-        params.copyInto(array);
-        return array;
-    }
-
-
-    /**
-     * create the parameter file from the given options. The file is
-     * created with a random name in the current directory.
-     * @return the file object where are written the configuration to run
-     * JProbe Coverage
-     * @throws BuildException thrown if something bad happens while writing
-     * the arguments to the file.
-     */
-    protected File createParamFile() throws BuildException {
-        //@todo change this when switching to JDK 1.2 and use File.createTmpFile()
-        File file = createTmpFile();
-        log("Creating parameter file: " + file, Project.MSG_VERBOSE);
-
-        // options need to be one per line in the parameter file
-        // so write them all in a single string
-        StringWriter sw = new StringWriter();
-        PrintWriter pw = new PrintWriter(sw);
-        String[] params = getParameters();
-        for (int i = 0; i < params.length; i++) {
-            pw.println(params[i]);
-        }
-        pw.flush();
-        log("JProbe Coverage parameters:\n" + sw.toString(), Project.MSG_VERBOSE);
-
-        // now write them to the file
-        FileWriter fw = null;
-        try {
-            fw = new FileWriter(file);
-            fw.write(sw.toString());
-            fw.flush();
-        } catch (IOException e) {
-            throw new BuildException("Could not write parameter file " + file, e);
-        } finally {
-            if (fw != null) {
-                try {
-                    fw.close();
-                } catch (IOException ignored) {
-                }
-            }
-        }
-        return file;
-    }
-
-    /** create a temporary file in the current dir (For JDK1.1 support) */
-    protected File createTmpFile() {
-        final long rand = (new Random(System.currentTimeMillis())).nextLong();
-        File file = new File("jpcoverage" + rand + ".tmp");
-        return file;
-    }
-
-    /** specific pumper to avoid those nasty stdin issues */
-    static class CoverageStreamHandler extends LogStreamHandler {
-        CoverageStreamHandler(Task task) {
-            super(task, Project.MSG_INFO, Project.MSG_WARN);
-        }
-
-        /**
-         * there are some issues concerning all JProbe executable
-         * In our case a 'Press ENTER to close this window..." will
-         * be displayed in the current window waiting for enter.
-         * So I'm closing the stream right away to avoid problems.
-         */
-        public void setProcessInputStream(OutputStream os) {
-            try {
-                os.close();
-            } catch (IOException ignored) {
-            }
-        }
-    }
-
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/sitraka/Filters.java b/src/main/org/apache/tools/ant/taskdefs/optional/sitraka/Filters.java
deleted file mode 100644
index 76af99a..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/sitraka/Filters.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.sitraka;
-
-import java.util.Vector;
-
-/**
- * Filters information from coverage, somewhat similar to a <tt>FileSet</tt>.
- *
- * @author <a href="mailto:sbailliez@imediation.com">Stephane Bailliez</a>
- */
-public class Filters {
-
-    /** default regexp to exclude everything */
-    public static final String DEFAULT_EXCLUDE = "*.*():E";
-
-    /** say whether we should use the default excludes or not */
-    protected boolean defaultExclude = true;
-
-    /** user defined filters */
-    protected Vector filters = new Vector();
-
-    public Filters() {
-    }
-
-    public void setDefaultExclude(boolean value) {
-        defaultExclude = value;
-    }
-
-    public void addInclude(Include incl) {
-        filters.addElement(incl);
-    }
-
-    public void addExclude(Exclude excl) {
-        filters.addElement(excl);
-    }
-
-    public String toString() {
-        StringBuffer buf = new StringBuffer();
-        final int size = filters.size();
-        if (defaultExclude) {
-            buf.append(DEFAULT_EXCLUDE);
-            if (size > 0) {
-                buf.append(',');
-            }
-        }
-        for (int i = 0; i < size; i++) {
-            buf.append(filters.elementAt(i).toString());
-            if (i < size - 1) {
-                buf.append(',');
-            }
-        }
-        return buf.toString();
-    }
-
-    public abstract static class FilterElement {
-        protected String clazz;
-        protected String method = "*"; // default is all methods
-        protected boolean enabled = true; // default is enable
-
-        public void setName(String value) { // this one is deprecated.
-            clazz = value;
-        }
-
-        public void setClass(String value) {
-            clazz = value;
-        }
-
-        public void setMethod(String value) {
-            method = value;
-        }
-
-        public void setEnabled(boolean value) {
-            enabled = value;
-        }
-
-        public String toString() {
-            return clazz + "." + method + "()";
-        }
-    }
-
-    public static class Include extends FilterElement {
-        public String toString() {
-            return super.toString() + ":I" + (enabled ? "" : "#");
-        }
-    }
-
-    public static class Exclude extends FilterElement {
-        public String toString() {
-            return super.toString() + ":E" + (enabled ? "" : "#");
-        }
-    }
-}
-
-
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/sitraka/ReportFilters.java b/src/main/org/apache/tools/ant/taskdefs/optional/sitraka/ReportFilters.java
deleted file mode 100644
index 69f5abd..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/sitraka/ReportFilters.java
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.sitraka;
-
-import java.util.Vector;
-
-import org.apache.tools.ant.util.regexp.RegexpMatcher;
-import org.apache.tools.ant.util.regexp.RegexpMatcherFactory;
-
-/**
- * Filters information from coverage, somewhat similar to a <tt>FileSet</tt>.
- *
- * @author <a href="mailto:sbailliez@imediation.com">Stephane Bailliez</a>
- */
-public class ReportFilters {
-
-    /** user defined filters */
-    protected Vector filters = new Vector();
-
-    /** cached matcher for each filter */
-    protected Vector matchers = null;
-
-    public ReportFilters() {
-    }
-
-    public void addInclude(Include incl) {
-        filters.addElement(incl);
-    }
-
-    public void addExclude(Exclude excl) {
-        filters.addElement(excl);
-    }
-
-    public int size() {
-        return filters.size();
-    }
-
-    /**
-     * Check whether a given &lt;classname&gt;&lt;method&gt;() is accepted by the list
-     * of filters or not.
-     * @param methodname the full method name in the format &lt;classname&gt;&lt;method&gt;()
-     */
-    public boolean accept(String methodname) {
-        // I'm deferring matcher instantiations at runtime to avoid computing
-        // the filters at parsing time
-        if (matchers == null) {
-            createMatchers();
-        }
-        boolean result = false;
-        // assert filters.size() == matchers.size()
-        final int size = filters.size();
-        for (int i = 0; i < size; i++) {
-            FilterElement filter = (FilterElement) filters.elementAt(i);
-            RegexpMatcher matcher = (RegexpMatcher) matchers.elementAt(i);
-            if (filter instanceof Include) {
-                result = result || matcher.matches(methodname);
-            } else if (filter instanceof Exclude) {
-                result = result && !matcher.matches(methodname);
-            } else {
-                //not possible
-                throw new IllegalArgumentException("Invalid filter element: " + filter.getClass().getName());
-            }
-        }
-        return result;
-    }
-
-    /** should be called only once to cache matchers */
-    protected void createMatchers() {
-        RegexpMatcherFactory factory = new RegexpMatcherFactory();
-        final int size = filters.size();
-        matchers = new Vector();
-        for (int i = 0; i < size; i++) {
-            FilterElement filter = (FilterElement) filters.elementAt(i);
-            RegexpMatcher matcher = factory.newRegexpMatcher();
-            String pattern = filter.getAsPattern();
-            matcher.setPattern(pattern);
-            matchers.addElement(matcher);
-        }
-    }
-
-
-    /** default abstract filter element class */
-    public abstract static class FilterElement {
-        protected String clazz = "*"; // default is all classes
-        protected String method = "*"; // default is all methods
-
-        public void setClass(String value) {
-            clazz = value;
-        }
-
-        public void setMethod(String value) {
-            method = value;
-        }
-
-        public String getAsPattern() {
-            StringBuffer buf = new StringBuffer(toString());
-            StringUtil.replace(buf, ".", "\\.");
-            StringUtil.replace(buf, "*", ".*");
-            StringUtil.replace(buf, "(", "\\(");
-            StringUtil.replace(buf, ")", "\\)");
-            return buf.toString();
-        }
-
-        public String toString() {
-            return clazz + "." + method + "()";
-        }
-    }
-
-    /** concrete include class */
-    public static class Include extends FilterElement {
-    }
-
-    /** concrete exclude class */
-    public static class Exclude extends FilterElement {
-    }
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/sitraka/Socket.java b/src/main/org/apache/tools/ant/taskdefs/optional/sitraka/Socket.java
deleted file mode 100644
index 1158b4a..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/sitraka/Socket.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.sitraka;
-
-/**
- * Socket element for connection.
- * <tt>&lt;socket/&gt;</tt> defaults to host 127.0.0.1 and port 4444
- *
- * Otherwise it requires the host and port attributes to be set:
- * <tt>
- * &lt;socket host=&quote;175.30.12.1&quote; port=&quote;4567&quote;/&gt;
- * </tt>
- */
-public class Socket {
-
-    /** default to localhost */
-    private String host = "127.0.0.1";
-
-    /** default to 4444 */
-    private int port = 4444;
-
-    public void setHost(String value) {
-        host = value;
-    }
-
-    public void setPort(Integer value) {
-        port = value.intValue();
-    }
-
-    /** if no host is set, returning ':&lt;port&gt;', will take localhost */
-    public String toString() {
-        return host + ":" + port;
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/sitraka/StringUtil.java b/src/main/org/apache/tools/ant/taskdefs/optional/sitraka/StringUtil.java
deleted file mode 100644
index c4e2721..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/sitraka/StringUtil.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.sitraka;
-
-/**
- * String utilities method.
- * @author <a href="mailto:sbailliez@imediation.com">Stephane Bailliez</a>
- */
-public final class StringUtil {
-    /** private constructor, it's a utility class */
-    private StringUtil() {
-    }
-
-    /**
-     * Replaces all occurences of <tt>find</tt> with <tt>replacement</tt> in the
-     * source StringBuffer.
-     * @param src the original string buffer to modify.
-     * @param find the string to be replaced.
-     * @param replacement the replacement string for <tt>find</tt> matches.
-     */
-    public static void replace(StringBuffer src, String find, String replacement) {
-        int index = 0;
-        while (index < src.length()) {
-            index = src.toString().indexOf(find, index);
-            if (index == -1) {
-                break;
-            }
-            src.delete(index, index + find.length());
-            src.insert(index, replacement);
-            index += replacement.length() + 1;
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/sitraka/Triggers.java b/src/main/org/apache/tools/ant/taskdefs/optional/sitraka/Triggers.java
deleted file mode 100644
index 3238d36..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/sitraka/Triggers.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.sitraka;
-
-import java.util.Hashtable;
-import java.util.Vector;
-
-import org.apache.tools.ant.BuildException;
-
-/**
- * Trigger information. It will return as a command line argument by calling
- * the <tt>toString()</tt> method.
- *
- * @author <a href="mailto:sbailliez@imediation.com">Stephane Bailliez</a>
- */
-public class Triggers {
-
-    protected Vector triggers = new Vector();
-
-    public Triggers() {
-    }
-
-    public void addMethod(Method method) {
-        triggers.addElement(method);
-    }
-
-    // -jp_trigger=ClassName.*():E:S,ClassName.MethodName():X:X
-    public String toString() {
-        StringBuffer buf = new StringBuffer();
-        final int size = triggers.size();
-        for (int i = 0; i < size; i++) {
-            buf.append(triggers.elementAt(i).toString());
-            if (i < size - 1) {
-                buf.append(',');
-            }
-        }
-        return buf.toString();
-    }
-
-
-    public static class Method {
-        protected String name;
-        protected String event;
-        protected String action;
-        protected String param;
-
-        public void setName(String value) {
-            name = value;
-        }
-
-        public void setEvent(String value) {
-            if (eventMap.get(value) == null) {
-                throw new BuildException("Invalid event, must be one of " + eventMap);
-            }
-            event = value;
-        }
-
-        public void setAction(String value) throws BuildException {
-            if (actionMap.get(value) == null) {
-                throw new BuildException("Invalid action, must be one of " + actionMap);
-            }
-            action = value;
-        }
-
-        public void setParam(String value) {
-            param = value;
-        }
-
-        // return <name>:<event>:<action>[:param]
-        public String toString() {
-            StringBuffer buf = new StringBuffer();
-            buf.append(name).append(":"); //@todo name must not be null, check for it
-            buf.append(eventMap.get(event)).append(":");
-            buf.append(actionMap.get(action));
-            if (param != null) {
-                buf.append(":").append(param);
-            }
-            return buf.toString();
-        }
-    }
-
-    /** mapping of actions to cryptic command line mnemonics */
-    private static final Hashtable actionMap = new Hashtable(3);
-
-    /** mapping of events to cryptic command line mnemonics */
-    private static final Hashtable eventMap = new Hashtable(3);
-
-    static {
-        actionMap.put("enter", "E");
-        actionMap.put("exit", "X");
-        // clear|pause|resume|snapshot|suspend|exit
-        eventMap.put("clear", "C");
-        eventMap.put("pause", "P");
-        eventMap.put("resume", "R");
-        eventMap.put("snapshot", "S");
-        eventMap.put("suspend", "A");
-        eventMap.put("exit", "X");
-    }
-
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/sitraka/XMLReport.java b/src/main/org/apache/tools/ant/taskdefs/optional/sitraka/XMLReport.java
deleted file mode 100644
index 57e2979..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/sitraka/XMLReport.java
+++ /dev/null
@@ -1,575 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.sitraka;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.util.Enumeration;
-import java.util.Hashtable;
-import java.util.NoSuchElementException;
-import java.util.Vector;
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.xml.sax.InputSource;
-
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.taskdefs.optional.sitraka.bytecode.ClassFile;
-import org.apache.tools.ant.taskdefs.optional.sitraka.bytecode.ClassPathLoader;
-import org.apache.tools.ant.taskdefs.optional.sitraka.bytecode.MethodInfo;
-import org.apache.tools.ant.taskdefs.optional.sitraka.bytecode.Utils;
-
-/**
- * Little hack to process XML report from JProbe. It will fix
- * some reporting errors from JProbe 3.0 and makes use of a reference
- * classpath to add classes/methods that were not reported by JProbe
- * as being used (ie loaded)
- *
- * @author <a href="sbailliez@imediation.com">Stephane Bailliez</a>
- */
-public class XMLReport {
-    /** task caller, can be null, used for logging purpose */
-    private Task task;
-
-    /** the XML file to process just from CovReport */
-    private File file;
-
-    /** jprobe home path. It is used to get the DTD */
-    private File jprobeHome;
-
-    /** parsed document */
-    private Document report;
-
-    /** mapping of class names to <code>ClassFile</code>s from the reference classpath.  It is used to filter the JProbe report. */
-    private Hashtable classFiles;
-
-    /** mapping package name / package node for faster access */
-    private Hashtable pkgMap;
-
-    /** mapping classname / class node for faster access */
-    private Hashtable classMap;
-
-    /** method filters */
-    private ReportFilters filters;
-
-    /** create a new XML report, logging will be on stdout */
-    public XMLReport(File file) {
-        this(null, file);
-    }
-
-    /** create a new XML report, logging done on the task */
-    public XMLReport(Task task, File file) {
-        this.file = file;
-        this.task = task;
-    }
-
-    /** set the JProbe home path. Used to get the DTD */
-    public void setJProbehome(File home) {
-        jprobeHome = home;
-    }
-
-    /** set the  */
-    public void setReportFilters(ReportFilters filters) {
-        this.filters = filters;
-    }
-
-
-    /** create node maps so that we can access node faster by their name */
-    protected void createNodeMaps() {
-        pkgMap = new Hashtable();
-        classMap = new Hashtable();
-        // create a map index of all packages by their name
-        // @todo can be done faster by direct access.
-        NodeList packages = report.getElementsByTagName("package");
-        final int pkglen = packages.getLength();
-        log("Indexing " + pkglen + " packages");
-        for (int i = pkglen - 1; i > -1; i--) {
-            Element pkg = (Element) packages.item(i);
-            String pkgname = pkg.getAttribute("name");
-
-            int nbclasses = 0;
-            // create a map index of all classes by their fully
-            // qualified name.
-            NodeList classes = pkg.getElementsByTagName("class");
-            final int classlen = classes.getLength();
-            log("Indexing " + classlen + " classes in package " + pkgname);
-            for (int j = classlen - 1; j > -1; j--) {
-                Element clazz = (Element) classes.item(j);
-                String classname = clazz.getAttribute("name");
-                if (pkgname != null && pkgname.length() != 0) {
-                    classname = pkgname + "." + classname;
-                }
-
-                int nbmethods = 0;
-                NodeList methods = clazz.getElementsByTagName("method");
-                final int methodlen = methods.getLength();
-                for (int k = methodlen - 1; k > -1; k--) {
-                    Element meth = (Element) methods.item(k);
-                    StringBuffer methodname = new StringBuffer(meth.getAttribute("name"));
-                    methodname.delete(methodname.toString().indexOf("("), methodname.toString().length());
-                    String signature = classname + "." + methodname + "()";
-                    if (filters.accept(signature)) {
-                        log("kept method:" + signature);
-                        nbmethods++;
-                    } else {
-                        clazz.removeChild(meth);
-                    }
-                }
-                // if we don't keep any method, we don't keep the class
-                if (nbmethods != 0 && classFiles.containsKey(classname)) {
-                    log("Adding class '" + classname + "'");
-                    classMap.put(classname, clazz);
-                    nbclasses++;
-                } else {
-                    pkg.removeChild(clazz);
-                }
-            }
-            if (nbclasses != 0) {
-                log("Adding package '" + pkgname + "'");
-                pkgMap.put(pkgname, pkg);
-            } else {
-                pkg.getParentNode().removeChild(pkg);
-            }
-        }
-        log("Indexed " + classMap.size() + " classes in " + pkgMap.size() + " packages");
-    }
-
-    /** create the whole new document */
-    public Document createDocument(String[] classPath) throws Exception {
-
-        // Iterate over the classpath to identify reference classes
-        classFiles = new Hashtable();
-        ClassPathLoader cpl = new ClassPathLoader(classPath);
-        Enumeration enum = cpl.loaders();
-        while (enum.hasMoreElements()) {
-            ClassPathLoader.FileLoader fl = (ClassPathLoader.FileLoader) enum.nextElement();
-            ClassFile[] classes = fl.getClasses();
-            log("Processing " + classes.length + " classes in " + fl.getFile());
-            // process all classes
-            for (int i = 0; i < classes.length; i++) {
-                classFiles.put(classes[i].getFullName(), classes[i]);
-            }
-        }
-
-        // Load the JProbe coverage XML report
-        DocumentBuilder dbuilder = newBuilder();
-        InputSource is = new InputSource(new FileInputStream(file));
-        if (jprobeHome != null) {
-            File dtdDir = new File(jprobeHome, "dtd");
-            is.setSystemId("file:///" + dtdDir.getAbsolutePath() + "/");
-        }
-        report = dbuilder.parse(is);
-        report.normalize();
-
-        // create maps for faster node access (also filters out unwanted nodes)
-        createNodeMaps();
-
-        // Make sure each class from the reference path ends up in the report
-        Enumeration classes = classFiles.elements();
-        while (classes.hasMoreElements()) {
-            ClassFile cf = (ClassFile) classes.nextElement();
-            serializeClass(cf);
-        }
-        // update the document with the stats
-        update();
-        return report;
-    }
-
-    /**
-     * JProbe does not put the java.lang prefix for classes
-     * in this package, so used this nice method so that
-     * I have the same signature for methods
-     */
-    protected String getMethodSignature(MethodInfo method) {
-        StringBuffer buf = new StringBuffer(method.getName());
-        buf.append("(");
-        String[] params = method.getParametersType();
-        for (int i = 0; i < params.length; i++) {
-            String type = params[i];
-            int pos = type.lastIndexOf('.');
-            if (pos != -1) {
-                String pkg = type.substring(0, pos);
-                if ("java.lang".equals(pkg)) {
-                    params[i] = type.substring(pos + 1);
-                }
-            }
-            buf.append(params[i]);
-            if (i != params.length - 1) {
-                buf.append(", ");
-            }
-        }
-        buf.append(")");
-        return buf.toString();
-    }
-
-    /**
-     * Convert to a CovReport-like signature - &lt;classname&gt;&#046;&lt;method&gt;().
-     */
-    protected String getMethodSignature(ClassFile clazz, MethodInfo method) {
-        StringBuffer buf = new StringBuffer(clazz.getFullName());
-        buf.append(".");
-        buf.append(method.getName());
-        buf.append("()");
-        return buf.toString();
-    }
-
-    /**
-     * Do additional work on an element to remove abstract methods that
-     * are reported by JProbe 3.0
-     */
-    protected void removeAbstractMethods(ClassFile classFile, Element classNode) {
-        MethodInfo[] methods = classFile.getMethods();
-        Hashtable methodNodeList = getMethods(classNode);
-        // assert xmlMethods.size() == methods.length()
-        final int size = methods.length;
-        for (int i = 0; i < size; i++) {
-            MethodInfo method = methods[i];
-            String methodSig = getMethodSignature(method);
-            Element methodNode = (Element) methodNodeList.get(methodSig);
-            if (methodNode != null &&
-                    Utils.isAbstract(method.getAccessFlags())) {
-                log("\tRemoving abstract method " + methodSig);
-                classNode.removeChild(methodNode);
-            }
-        }
-    }
-
-    /** create an empty method element with its cov.data values */
-    protected Element createMethodElement(MethodInfo method) {
-        String methodsig = getMethodSignature(method);
-        Element methodElem = report.createElement("method");
-        methodElem.setAttribute("name", methodsig);
-        // create the method cov.data element
-        Element methodData = report.createElement("cov.data");
-        methodElem.appendChild(methodData);
-        methodData.setAttribute("calls", "0");
-        methodData.setAttribute("hit_lines", "0");
-        methodData.setAttribute("total_lines", String.valueOf(method.getNumberOfLines()));
-        return methodElem;
-    }
-
-    /** create an empty package element with its default cov.data (0) */
-    protected Element createPackageElement(String pkgname) {
-        Element pkgElem = report.createElement("package");
-        pkgElem.setAttribute("name", pkgname);
-        // create the package cov.data element / default
-        // must be updated at the end of the whole process
-        Element pkgData = report.createElement("cov.data");
-        pkgElem.appendChild(pkgData);
-        pkgData.setAttribute("calls", "0");
-        pkgData.setAttribute("hit_methods", "0");
-        pkgData.setAttribute("total_methods", "0");
-        pkgData.setAttribute("hit_lines", "0");
-        pkgData.setAttribute("total_lines", "0");
-        return pkgElem;
-    }
-
-    /** create an empty class element with its default cov.data (0) */
-    protected Element createClassElement(ClassFile classFile) {
-        // create the class element
-        Element classElem = report.createElement("class");
-        classElem.setAttribute("name", classFile.getName());
-        // source file possibly does not exist in the bytecode
-        if (null != classFile.getSourceFile()) {
-            classElem.setAttribute("source", classFile.getSourceFile());
-        }
-        // create the cov.data elem
-        Element classData = report.createElement("cov.data");
-        classElem.appendChild(classData);
-        // create the class cov.data element
-        classData.setAttribute("calls", "0");
-        classData.setAttribute("hit_methods", "0");
-        classData.setAttribute("total_methods", "0");
-        classData.setAttribute("hit_lines", "0");
-        classData.setAttribute("total_lines", "0");
-        return classElem;
-    }
-
-    /** serialize a classfile into XML */
-    protected void serializeClass(ClassFile classFile) {
-        // the class already is reported so ignore it
-        String fullclassname = classFile.getFullName();
-        log("Looking for '" + fullclassname + "'");
-        Element clazz = (Element) classMap.get(fullclassname);
-
-        // ignore classes that are already reported, all the information is
-        // already there.
-        if (clazz != null) {
-            log("Ignoring " + fullclassname);
-            removeAbstractMethods(classFile, clazz);
-            return;
-        }
-
-        // ignore interfaces files, there is no code in there to cover.
-        if (Utils.isInterface(classFile.getAccess())) {
-            return;
-        }
-
-        Vector methods = getFilteredMethods(classFile);
-        // no need to process, there are no methods to add for this class.
-        if (methods.size() == 0) {
-            return;
-        }
-
-        String pkgname = classFile.getPackage();
-        // System.out.println("Looking for package " + pkgname);
-        Element pkgElem = (Element) pkgMap.get(pkgname);
-        if (pkgElem == null) {
-            pkgElem = createPackageElement(pkgname);
-            report.getDocumentElement().appendChild(pkgElem);
-            pkgMap.put(pkgname, pkgElem); // add the pkg to the map
-        }
-        // this is a brand new class, so we have to create a new node
-
-        // create the class element
-        Element classElem = createClassElement(classFile);
-        pkgElem.appendChild(classElem);
-
-        int total_lines = 0;
-        int total_methods = 0;
-        final int count = methods.size();
-        for (int i = 0; i < count; i++) {
-            // create the method element
-            MethodInfo method = (MethodInfo) methods.elementAt(i);
-            if (Utils.isAbstract(method.getAccessFlags())) {
-                continue; // no need to report abstract methods
-            }
-            Element methodElem = createMethodElement(method);
-            classElem.appendChild(methodElem);
-            total_lines += method.getNumberOfLines();
-            total_methods++;
-        }
-        // create the class cov.data element
-        Element classData = getCovDataChild(classElem);
-        classData.setAttribute("total_methods", String.valueOf(total_methods));
-        classData.setAttribute("total_lines", String.valueOf(total_lines));
-
-        // add itself to the node map
-        classMap.put(fullclassname, classElem);
-    }
-
-    protected Vector getFilteredMethods(ClassFile classFile) {
-        MethodInfo[] methodlist = classFile.getMethods();
-        Vector methods = new Vector(methodlist.length);
-        for (int i = 0; i < methodlist.length; i++) {
-            MethodInfo method = methodlist[i];
-            String signature = getMethodSignature(classFile, method);
-            if (filters.accept(signature)) {
-                methods.addElement(method);
-                log("keeping " + signature);
-            } else {
-//              log("discarding " + signature);
-            }
-        }
-        return methods;
-    }
-
-
-    /** update the count of the XML, that is accumulate the stats on
-     * methods, classes and package so that the numbers are valid
-     * according to the info that was appended to the XML.
-     */
-    protected void update() {
-        int calls = 0;
-        int hit_methods = 0;
-        int total_methods = 0;
-        int hit_lines = 0;
-        int total_lines = 0;
-
-        // use the map for access, all nodes should be there
-        Enumeration enum = pkgMap.elements();
-        while (enum.hasMoreElements()) {
-            Element pkgElem = (Element) enum.nextElement();
-            String pkgname = pkgElem.getAttribute("name");
-            Element[] classes = getClasses(pkgElem);
-            int pkg_calls = 0;
-            int pkg_hit_methods = 0;
-            int pkg_total_methods = 0;
-            int pkg_hit_lines = 0;
-            int pkg_total_lines = 0;
-            //System.out.println("Processing package '" + pkgname + "': " + classes.length + " classes");
-            for (int j = 0; j < classes.length; j++) {
-                Element clazz = classes[j];
-                String classname = clazz.getAttribute("name");
-                if (pkgname != null && pkgname.length() != 0) {
-                    classname = pkgname + "." + classname;
-                }
-                // there's only cov.data as a child so bet on it
-                Element covdata = getCovDataChild(clazz);
-                try {
-                    pkg_calls += Integer.parseInt(covdata.getAttribute("calls"));
-                    pkg_hit_methods += Integer.parseInt(covdata.getAttribute("hit_methods"));
-                    pkg_total_methods += Integer.parseInt(covdata.getAttribute("total_methods"));
-                    pkg_hit_lines += Integer.parseInt(covdata.getAttribute("hit_lines"));
-                    pkg_total_lines += Integer.parseInt(covdata.getAttribute("total_lines"));
-                } catch (NumberFormatException e) {
-                    log("Error parsing '" + classname + "' (" + j + "/" + classes.length + ") in package '" + pkgname + "'");
-                    throw e;
-                }
-            }
-            Element covdata = getCovDataChild(pkgElem);
-            covdata.setAttribute("calls", String.valueOf(pkg_calls));
-            covdata.setAttribute("hit_methods", String.valueOf(pkg_hit_methods));
-            covdata.setAttribute("total_methods", String.valueOf(pkg_total_methods));
-            covdata.setAttribute("hit_lines", String.valueOf(pkg_hit_lines));
-            covdata.setAttribute("total_lines", String.valueOf(pkg_total_lines));
-            calls += pkg_calls;
-            hit_methods += pkg_hit_methods;
-            total_methods += pkg_total_methods;
-            hit_lines += pkg_hit_lines;
-            total_lines += pkg_total_lines;
-        }
-        Element covdata = getCovDataChild(report.getDocumentElement());
-        covdata.setAttribute("calls", String.valueOf(calls));
-        covdata.setAttribute("hit_methods", String.valueOf(hit_methods));
-        covdata.setAttribute("total_methods", String.valueOf(total_methods));
-        covdata.setAttribute("hit_lines", String.valueOf(hit_lines));
-        covdata.setAttribute("total_lines", String.valueOf(total_lines));
-    }
-
-    protected Element getCovDataChild(Element parent) {
-        NodeList children = parent.getChildNodes();
-        int len = children.getLength();
-        for (int i = 0; i < len; i++) {
-            Node child = children.item(i);
-            if (child.getNodeType() == Node.ELEMENT_NODE) {
-                Element elem = (Element) child;
-                if ("cov.data".equals(elem.getNodeName())) {
-                    return elem;
-                }
-            }
-        }
-        throw new NoSuchElementException("Could not find 'cov.data' element in parent '" + parent.getNodeName() + "'");
-    }
-
-    protected Hashtable getMethods(Element clazz) {
-        Hashtable map = new Hashtable();
-        NodeList children = clazz.getChildNodes();
-        int len = children.getLength();
-        for (int i = 0; i < len; i++) {
-            Node child = children.item(i);
-            if (child.getNodeType() == Node.ELEMENT_NODE) {
-                Element elem = (Element) child;
-                if ("method".equals(elem.getNodeName())) {
-                    String name = elem.getAttribute("name");
-                    map.put(name, elem);
-                }
-            }
-        }
-        return map;
-    }
-
-    protected Element[] getClasses(Element pkg) {
-        Vector v = new Vector();
-        NodeList children = pkg.getChildNodes();
-        int len = children.getLength();
-        for (int i = 0; i < len; i++) {
-            Node child = children.item(i);
-            if (child.getNodeType() == Node.ELEMENT_NODE) {
-                Element elem = (Element) child;
-                if ("class".equals(elem.getNodeName())) {
-                    v.addElement(elem);
-                }
-            }
-        }
-        Element[] elems = new Element[v.size()];
-        v.copyInto(elems);
-        return elems;
-
-    }
-
-    protected Element[] getPackages(Element snapshot) {
-        Vector v = new Vector();
-        NodeList children = snapshot.getChildNodes();
-        int len = children.getLength();
-        for (int i = 0; i < len; i++) {
-            Node child = children.item(i);
-            if (child.getNodeType() == Node.ELEMENT_NODE) {
-                Element elem = (Element) child;
-                if ("package".equals(elem.getNodeName())) {
-                    v.addElement(elem);
-                }
-            }
-        }
-        Element[] elems = new Element[v.size()];
-        v.copyInto(elems);
-        return elems;
-    }
-
-    private static DocumentBuilder newBuilder() {
-        try {
-            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
-            factory.setIgnoringComments(true);
-            factory.setValidating(false);
-            return factory.newDocumentBuilder();
-        } catch (Exception e) {
-            throw new ExceptionInInitializerError(e);
-        }
-    }
-
-    public void log(String message) {
-        if (task == null) {
-            //System.out.println(message);
-        } else {
-            task.log(message, Project.MSG_DEBUG);
-        }
-    }
-
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/sitraka/bytecode/ClassFile.java b/src/main/org/apache/tools/ant/taskdefs/optional/sitraka/bytecode/ClassFile.java
deleted file mode 100644
index 4c2ecb2..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/sitraka/bytecode/ClassFile.java
+++ /dev/null
@@ -1,183 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.sitraka.bytecode;
-
-import java.io.DataInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-
-import org.apache.tools.ant.taskdefs.optional.depend.constantpool.ClassCPInfo;
-import org.apache.tools.ant.taskdefs.optional.depend.constantpool.ConstantPool;
-import org.apache.tools.ant.taskdefs.optional.depend.constantpool.Utf8CPInfo;
-import org.apache.tools.ant.taskdefs.optional.sitraka.bytecode.attributes.AttributeInfo;
-
-
-/**
- * Object representing a class.
- *
- * Information are kept to the strict minimum for JProbe reports so
- * that not too many objects are created for a class, otherwise the
- * JVM can quickly run out of memory when analyzing a great deal of
- * classes and keeping them in memory for global analysis.
- *
- * @author <a href="sbailliez@imediation.com">Stephane Bailliez</a>
- */
-public final class ClassFile {
-
-    private MethodInfo[] methods;
-
-    private String sourceFile;
-
-    private String fullname;
-
-    private int access_flags;
-
-    public ClassFile(InputStream is) throws IOException {
-        DataInputStream dis = new DataInputStream(is);
-        ConstantPool constantPool = new ConstantPool();
-
-        int magic = dis.readInt(); // 0xCAFEBABE
-        int minor = dis.readShort();
-        int major = dis.readShort();
-
-        constantPool.read(dis);
-        constantPool.resolve();
-
-        // class information
-        access_flags = dis.readShort();
-        int this_class = dis.readShort();
-        fullname = ((ClassCPInfo) constantPool.getEntry(this_class)).getClassName().replace('/', '.');
-        int super_class = dis.readShort();
-
-        // skip interfaces...
-        int count = dis.readShort();
-        dis.skipBytes(count * 2); // short
-
-        // skip fields...
-        int numFields = dis.readShort();
-        for (int i = 0; i < numFields; i++) {
-            // 3 short: access flags, name index, descriptor index
-            dis.skip(2 * 3);
-            // attribute list...
-            int attributes_count = dis.readUnsignedShort();
-            for (int j = 0; j < attributes_count; j++) {
-                dis.skipBytes(2); // skip attr_id (short)
-                int len = dis.readInt();
-                dis.skipBytes(len);
-            }
-        }
-
-        // read methods
-        int method_count = dis.readShort();
-        methods = new MethodInfo[method_count];
-        for (int i = 0; i < method_count; i++) {
-            methods[i] = new MethodInfo();
-            methods[i].read(constantPool, dis);
-        }
-
-        // get interesting attributes.
-        int attributes_count = dis.readUnsignedShort();
-        for (int j = 0; j < attributes_count; j++) {
-            int attr_id = dis.readShort();
-            int len = dis.readInt();
-            String attr_name = Utils.getUTF8Value(constantPool, attr_id);
-            if (AttributeInfo.SOURCE_FILE.equals(attr_name)) {
-                int name_index = dis.readShort();
-                sourceFile = ((Utf8CPInfo) constantPool.getEntry(name_index)).getValue();
-            } else {
-                dis.skipBytes(len);
-            }
-        }
-    }
-
-    public int getAccess() {
-        return access_flags;
-    }
-
-    public String getSourceFile() {
-        return sourceFile;
-    }
-
-    public MethodInfo[] getMethods() {
-        return methods;
-    }
-
-    public String getFullName() {
-        return fullname;
-    }
-
-    public String getName() {
-        String name = getFullName();
-        int pos = name.lastIndexOf('.');
-        if (pos == -1) {
-            return "";
-        }
-        return name.substring(pos + 1);
-    }
-
-    public String getPackage() {
-        String name = getFullName();
-        int pos = name.lastIndexOf('.');
-        if (pos == -1) {
-            return "";
-        }
-        return name.substring(0, pos);
-    }
-
-}
-
-
-
-
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/sitraka/bytecode/ClassPathLoader.java b/src/main/org/apache/tools/ant/taskdefs/optional/sitraka/bytecode/ClassPathLoader.java
deleted file mode 100644
index e3cd5bd..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/sitraka/bytecode/ClassPathLoader.java
+++ /dev/null
@@ -1,373 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.sitraka.bytecode;
-
-import java.io.BufferedInputStream;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FilenameFilter;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Enumeration;
-import java.util.Hashtable;
-import java.util.NoSuchElementException;
-import java.util.StringTokenizer;
-import java.util.Vector;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipFile;
-
-/**
- * Core of the bytecode analyzer. It loads classes from a given classpath.
- *
- * @author <a href="sbailliez@imediation.com">Stephane Bailliez</a>
- */
-public class ClassPathLoader {
-
-    public static final FileLoader NULL_LOADER = new NullLoader();
-
-    /** the list of files to look for */
-    private File[] files;
-
-    /**
-     * create a new instance with a given classpath. It must be urls
-     * separated by the platform specific path separator.
-     * @param classPath the classpath to load all the classes from.
-     */
-    public ClassPathLoader(String classPath) {
-        StringTokenizer st = new StringTokenizer(classPath, File.pathSeparator);
-        Vector entries = new Vector();
-        while (st.hasMoreTokens()) {
-            File file = new File(st.nextToken());
-            entries.addElement(file);
-        }
-        files = new File[entries.size()];
-        entries.copyInto(files);
-    }
-
-    /**
-     * create a new instance with a given set of urls.
-     * @param entries valid file urls (either .jar, .zip or directory)
-     */
-    public ClassPathLoader(String[] entries) {
-        files = new File[entries.length];
-        for (int i = 0; i < entries.length; i++) {
-            files[i] = new File(entries[i]);
-        }
-    }
-
-    /**
-     * create a new instance with a given set of urls
-     * @param entries file urls to look for classes (.jar, .zip or directory)
-     */
-    public ClassPathLoader(File[] entries) {
-        files = entries;
-    }
-
-    /** the interface to implement to look up for specific resources */
-    public interface FileLoader {
-        /** the file url that is looked for .class files */
-        File getFile();
-
-        /** return the set of classes found in the file */
-        ClassFile[] getClasses() throws IOException;
-    }
-
-    /**
-     * @return the set of <tt>FileLoader</tt> loaders matching the given classpath.
-     */
-    public Enumeration loaders() {
-        return new LoaderEnumeration();
-    }
-
-    /**
-     * return the whole set of classes in the classpath. Note that this method
-     * can be very resource demanding since it must load all bytecode from
-     * all classes in all resources in the classpath at a time.
-     * To process it in a less resource demanding way, it is maybe better to
-     * use the <tt>loaders()</tt> that will return loader one by one.
-     *
-     * @return the hashtable containing ALL classes that are found in the given
-     * classpath. Note that the first entry of a given classname will shadow
-     * classes with the same name (as a classloader does)
-     */
-    public Hashtable getClasses() throws IOException {
-        Hashtable map = new Hashtable();
-        Enumeration enum = loaders();
-        while (enum.hasMoreElements()) {
-            FileLoader loader = (FileLoader) enum.nextElement();
-            System.out.println("Processing " + loader.getFile());
-            long t0 = System.currentTimeMillis();
-            ClassFile[] classes = loader.getClasses();
-            long dt = System.currentTimeMillis() - t0;
-            System.out.println("" + classes.length + " classes loaded in " + dt + "ms");
-            for (int j = 0; j < classes.length; j++) {
-                String name = classes[j].getFullName();
-                // do not allow duplicates entries to preserve 'classpath' behavior
-                // first class in wins
-                if (!map.containsKey(name)) {
-                    map.put(name, classes[j]);
-                }
-            }
-        }
-        return map;
-    }
-
-    /** the loader enumeration that will return loaders */
-    private class LoaderEnumeration implements Enumeration {
-        private int index = 0;
-
-        public boolean hasMoreElements() {
-            return index < files.length;
-        }
-
-        public Object nextElement() {
-            if (index >= files.length) {
-                throw new NoSuchElementException();
-            }
-            File file = files[index++];
-            if (!file.exists()) {
-                return new NullLoader(file);
-            }
-            if (file.isDirectory()) {
-                // it's a directory
-                return new DirectoryLoader(file);
-            } else if (file.getName().endsWith(".zip") || file.getName().endsWith(".jar")) {
-                // it's a jar/zip file
-                return new JarLoader(file);
-            }
-            return new NullLoader(file);
-
-        }
-    }
-
-    /**
-     * useful methods to read the whole input stream in memory so that
-     * it can be accessed faster. Processing rt.jar and tools.jar from JDK 1.3.1
-     * brings time from 50s to 7s.
-     */
-    public static InputStream getCachedStream(InputStream is) throws IOException {
-        final InputStream bis = new BufferedInputStream(is);
-        final byte[] buffer = new byte[8192];
-        final ByteArrayOutputStream bos = new ByteArrayOutputStream(2048);
-        int n;
-        bos.reset();
-        while ((n = bis.read(buffer, 0, buffer.length)) != -1) {
-            bos.write(buffer, 0, n);
-        }
-        is.close();
-        return new ByteArrayInputStream(bos.toByteArray());
-    }
-}
-
-/** a null loader to return when the file is not valid */
-final class NullLoader implements ClassPathLoader.FileLoader {
-    private File file;
-
-    NullLoader() {
-        this(null);
-    }
-
-    NullLoader(File file) {
-        this.file = file;
-    }
-
-    public File getFile() {
-        return file;
-    }
-
-    public ClassFile[] getClasses() throws IOException {
-        return new ClassFile[0];
-    }
-}
-
-/**
- * jar loader specified in looking for classes in jar and zip
- * @todo read the jar manifest in case there is a Class-Path
- * entry.
- */
-final class JarLoader implements ClassPathLoader.FileLoader {
-    private File file;
-
-    JarLoader(File file) {
-        this.file = file;
-    }
-
-    public File getFile() {
-        return file;
-    }
-
-    public ClassFile[] getClasses() throws IOException {
-        ZipFile zipFile = new ZipFile(file);
-        Vector v = new Vector();
-        Enumeration entries = zipFile.entries();
-        while (entries.hasMoreElements()) {
-            ZipEntry entry = (ZipEntry) entries.nextElement();
-            if (entry.getName().endsWith(".class")) {
-                InputStream is = ClassPathLoader.getCachedStream(zipFile.getInputStream(entry));
-                ClassFile classFile = new ClassFile(is);
-                is.close();
-                v.addElement(classFile);
-            }
-        }
-        ClassFile[] classes = new ClassFile[v.size()];
-        v.copyInto(classes);
-        return classes;
-    }
-}
-
-/**
- * directory loader that will look all classes recursively
- * @todo should discard classes which package name does not
- * match the directory ?
- */
-final class DirectoryLoader implements ClassPathLoader.FileLoader {
-    private File directory;
-    private static final FilenameFilter DIRECTORY_FILTER = new DirectoryFilter();
-    private static final FilenameFilter CLASS_FILTER = new ClassFilter();
-
-    DirectoryLoader(File dir) {
-        directory = dir;
-    }
-
-    public File getFile() {
-        return directory;
-    }
-
-    public ClassFile[] getClasses() throws IOException {
-        Vector v = new Vector(127);
-        Vector files = listFiles(directory, CLASS_FILTER, true);
-        final int filesCount = files.size();
-        for (int i = 0; i < filesCount; i++) {
-            File file = (File) files.elementAt(i);
-            InputStream is = null;
-            try {
-                is = ClassPathLoader.getCachedStream(new FileInputStream(file));
-                ClassFile classFile = new ClassFile(is);
-                is.close();
-                is = null;
-                v.addElement(classFile);
-            } finally {
-                if (is != null) {
-                    try {
-                        is.close();
-                    } catch (IOException ignored) {
-                    }
-                }
-            }
-        }
-        ClassFile[] classes = new ClassFile[v.size()];
-        v.copyInto(classes);
-        return classes;
-    }
-
-    /**
-     * List files that obeys to a specific filter recursively from a given base
-     * directory.
-     * @param   directory   the directory where to list the files from.
-     * @param   filter      the file filter to apply
-     * @param   recurse     tells whether or not the listing is recursive.
-     * @return  the list of <tt>File</tt> objects that applies to the given
-     *          filter.
-     */
-    public static Vector listFiles(File directory, FilenameFilter filter, boolean recurse) {
-        if (!directory.isDirectory()) {
-            throw new IllegalArgumentException(directory + " is not a directory");
-        }
-        Vector list = new Vector(512);
-        listFilesTo(list, directory, filter, recurse);
-        return list;
-    }
-
-    /**
-     * List and add files to a given list. As a convenience it sends back the
-     * instance of the list given as a parameter.
-     * @param   list    the list of files where the filtered files should be added
-     * @param   directory   the directory where to list the files from.
-     * @param   filter      the file filter to apply
-     * @param   recurse     tells whether or not the listing is recursive.
-     * @return  the list instance that was passed as the <tt>list</tt> argument.
-     */
-    private static Vector listFilesTo(Vector list, File directory, FilenameFilter filter, boolean recurse) {
-        String[] files = directory.list(filter);
-        for (int i = 0; i < files.length; i++) {
-            list.addElement(new File(directory, files[i]));
-        }
-        files = null;   // we don't need it anymore
-        if (recurse) {
-            String[] subdirs = directory.list(DIRECTORY_FILTER);
-            for (int i = 0; i < subdirs.length; i++) {
-                listFilesTo(list, new File(directory, subdirs[i]), filter, recurse);
-            }
-        }
-        return list;
-    }
-
-}
-
-/** Convenient filter that accepts only directory <tt>File</tt> */
-final class DirectoryFilter implements FilenameFilter {
-    public boolean accept(File directory, String name) {
-        File pathname = new File(directory, name);
-        return pathname.isDirectory();
-    }
-}
-
-/** convenient filter to accept only .class files */
-final class ClassFilter implements FilenameFilter {
-    public boolean accept(File dir, String name) {
-        return name.endsWith(".class");
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/sitraka/bytecode/MethodInfo.java b/src/main/org/apache/tools/ant/taskdefs/optional/sitraka/bytecode/MethodInfo.java
deleted file mode 100644
index 147c77a..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/sitraka/bytecode/MethodInfo.java
+++ /dev/null
@@ -1,183 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.sitraka.bytecode;
-
-import java.io.DataInputStream;
-import java.io.IOException;
-
-import org.apache.tools.ant.taskdefs.optional.depend.constantpool.ConstantPool;
-import org.apache.tools.ant.taskdefs.optional.sitraka.bytecode.attributes.AttributeInfo;
-
-/**
- * Method info structure.
- * @todo give a more appropriate name to methods.
- *
- * @author <a href="sbailliez@imediation.com">Stephane Bailliez</a>
- */
-public final class MethodInfo {
-    private int access_flags;
-    private int loc = -1;
-    private String name;
-    private String descriptor;
-
-    public MethodInfo() {
-    }
-
-    public void read(ConstantPool constantPool, DataInputStream dis) throws IOException {
-        access_flags = dis.readShort();
-
-        int name_index = dis.readShort();
-        name = Utils.getUTF8Value(constantPool, name_index);
-
-        int descriptor_index = dis.readShort();
-        descriptor = Utils.getUTF8Value(constantPool, descriptor_index);
-
-        int attributes_count = dis.readUnsignedShort();
-        for (int i = 0; i < attributes_count; i++) {
-            int attr_id = dis.readShort();
-            String attr_name = Utils.getUTF8Value(constantPool, attr_id);
-            int len = dis.readInt();
-            if (AttributeInfo.CODE.equals(attr_name)) {
-                readCode(constantPool, dis);
-            } else {
-                dis.skipBytes(len);
-            }
-        }
-
-    }
-
-    protected void readCode(ConstantPool constantPool, DataInputStream dis) throws IOException {
-        // skip max_stack (short), max_local (short)
-        dis.skipBytes(2 * 2);
-
-        // skip bytecode...
-        int bytecode_len = dis.readInt();
-        dis.skip(bytecode_len);
-
-        // skip exceptions... 1 exception = 4 short.
-        int exception_count = dis.readShort();
-        dis.skipBytes(exception_count * 4 * 2);
-
-        // read attributes...
-        int attributes_count = dis.readUnsignedShort();
-        for (int i = 0; i < attributes_count; i++) {
-            int attr_id = dis.readShort();
-            String attr_name = Utils.getUTF8Value(constantPool, attr_id);
-            int len = dis.readInt();
-            if (AttributeInfo.LINE_NUMBER_TABLE.equals(attr_name)) {
-                // we're only interested in lines of code...
-                loc = dis.readShort();
-                // skip the table which is 2*loc*short
-                dis.skip(loc * 2 * 2);
-            } else {
-                dis.skipBytes(len);
-            }
-        }
-    }
-
-    public int getAccessFlags() {
-        return access_flags;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public String getDescriptor() {
-        return descriptor;
-    }
-
-    public String getFullSignature() {
-        return getReturnType() + " " + getShortSignature();
-    }
-
-    public String getShortSignature() {
-        StringBuffer buf = new StringBuffer(getName());
-        buf.append("(");
-        String[] params = getParametersType();
-        for (int i = 0; i < params.length; i++) {
-            buf.append(params[i]);
-            if (i != params.length - 1) {
-                buf.append(", ");
-            }
-        }
-        buf.append(")");
-        return buf.toString();
-    }
-
-    public String getReturnType() {
-        return Utils.getMethodReturnType(getDescriptor());
-    }
-
-    public String[] getParametersType() {
-        return Utils.getMethodParams(getDescriptor());
-    }
-
-    public int getNumberOfLines() {
-        return loc;
-    }
-
-    public String getAccess() {
-        return Utils.getMethodAccess(access_flags);
-    }
-
-    public String toString() {
-        StringBuffer sb = new StringBuffer();
-        sb.append("Method: ").append(getAccess()).append(" ");
-        sb.append(getFullSignature());
-        return sb.toString();
-    }
-}
-
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/sitraka/bytecode/Utils.java b/src/main/org/apache/tools/ant/taskdefs/optional/sitraka/bytecode/Utils.java
deleted file mode 100644
index 36aeccd..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/sitraka/bytecode/Utils.java
+++ /dev/null
@@ -1,418 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.sitraka.bytecode;
-
-import java.util.Vector;
-
-import org.apache.tools.ant.taskdefs.optional.depend.constantpool.ConstantPool;
-import org.apache.tools.ant.taskdefs.optional.depend.constantpool.Utf8CPInfo;
-
-/**
- * Utilities mostly to manipulate methods and access flags.
- *
- * @author <a href="sbailliez@imediation.com">Stephane Bailliez</a>
- */
-public class Utils {
-    /** public access flag */
-    public static final short ACC_PUBLIC = 1;
-    /** private access flag */
-    public static final short ACC_PRIVATE = 2;
-    /** protected access flag */
-    public static final short ACC_PROTECTED = 4;
-    /** static access flag */
-    public static final short ACC_STATIC = 8;
-    /** final access flag */
-    public static final short ACC_FINAL = 16;
-    /** super access flag */
-    public static final short ACC_SUPER = 32;
-    /** synchronized access flag */
-    public static final short ACC_SYNCHRONIZED = 32;
-    /** volatile access flag */
-    public static final short ACC_VOLATILE = 64;
-    /** transient access flag */
-    public static final short ACC_TRANSIENT = 128;
-    /** native access flag */
-    public static final short ACC_NATIVE = 256;
-    /** interface access flag */
-    public static final short ACC_INTERFACE = 512;
-    /** abstract access flag */
-    public static final short ACC_ABSTRACT = 1024;
-    /** strict access flag */
-    public static final short ACC_STRICT = 2048;
-
-    /** private constructor */
-    private Utils() {
-    }
-
-    /**
-     * return an UTF8 value from the pool located a a specific index.
-     * @param pool the constant pool to look at
-     * @param index index of the UTF8 value in the constant pool
-     * @return the value of the string if it exists
-     * @throws ClassCastException if the index is not an UTF8 constant.
-     */
-    public static String getUTF8Value(ConstantPool pool, int index) {
-        return ((Utf8CPInfo) pool.getEntry(index)).getValue();
-    }
-
-    /**
-     * parse all parameters from a descritor into fields of java name.
-     * @param descriptor of a method.
-     * @return the parameter list of a given method descriptor. Each string
-     * represent a java object with its fully qualified classname or the
-     * primitive name such as int, long, ...
-     */
-    public static String[] getMethodParams(String descriptor) {
-        int i = 0;
-        if (descriptor.charAt(i) != '(') {
-            throw new IllegalArgumentException("Method descriptor should start with a '('");
-        }
-        Vector params = new Vector();
-        StringBuffer param = new StringBuffer();
-        i++;
-        while ((i = descriptor2java(descriptor, i, param)) < descriptor.length()) {
-            params.add(param.toString());
-            param.setLength(0); // reset
-            if (descriptor.charAt(i) == ')') {
-                i++;
-                break;
-            }
-        }
-        String[] array = new String[params.size()];
-        params.copyInto(array);
-        return array;
-    }
-
-    /**
-     * return the object type of a return type.
-     * @param descriptor
-     * @return get the return type objet of a given descriptor
-     */
-    public static String getMethodReturnType(String descriptor) {
-        int pos = descriptor.indexOf(')');
-        StringBuffer rettype = new StringBuffer();
-        descriptor2java(descriptor, pos + 1, rettype);
-        return rettype.toString();
-    }
-
-    /**
-     * Parse a single descriptor symbol and returns it java equivalent.
-     * @param descriptor the descriptor symbol.
-     * @param i the index to look at the symbol in the descriptor string
-     * @param sb the stringbuffer to return the java equivalent of the symbol
-     * @return the index after the descriptor symbol
-     */
-    public static int descriptor2java(String descriptor, int i, StringBuffer sb) {
-        // get the dimension
-        StringBuffer dim = new StringBuffer();
-        for (; descriptor.charAt(i) == '['; i++) {
-            dim.append("[]");
-        }
-        // now get the type
-        switch (descriptor.charAt(i)) {
-            case 'B':
-                sb.append("byte");
-                break;
-            case 'C':
-                sb.append("char");
-                break;
-            case 'D':
-                sb.append("double");
-                break;
-            case 'F':
-                sb.append("float");
-                break;
-            case 'I':
-                sb.append("int");
-                break;
-            case 'J':
-                sb.append("long");
-                break;
-            case 'S':
-                sb.append("short");
-                break;
-            case 'Z':
-                sb.append("boolean");
-                break;
-            case 'V':
-                sb.append("void");
-                break;
-            case 'L':
-                // it is a class
-                int pos = descriptor.indexOf(';', i + 1);
-                String classname = descriptor.substring(i + 1, pos).replace('/', '.');
-                sb.append(classname);
-                i = pos;
-                break;
-            default:
-                //@todo, yeah this happens because I got things like:
-                // ()Ljava/lang/Object; and it will return and ) will be here
-                // think about it.
-
-                //ooooops should never happen
-                //throw new IllegalArgumentException("Invalid descriptor symbol: '" + i + "' in '" + descriptor + "'");
-        }
-        sb.append(dim.toString());
-        return ++i;
-    }
-
-    /**
-     * check for abstract access
-     * @param access_flags access flags
-     */
-    public static boolean isAbstract(int access_flags) {
-        return (access_flags & ACC_ABSTRACT) != 0;
-    }
-
-    /**
-     * check for public access
-     * @param access_flags access flags
-     */
-    public static boolean isPublic(int access_flags) {
-        return (access_flags & ACC_PUBLIC) != 0;
-    }
-
-    /**
-     * check for a static access
-     * @param access_flags access flags
-     */
-    public static boolean isStatic(int access_flags) {
-        return (access_flags & ACC_STATIC) != 0;
-    }
-
-    /**
-     *  check for native access
-     * @param access_flags access flags
-     */
-    public static boolean isNative(int access_flags) {
-        return (access_flags & ACC_NATIVE) != 0;
-    }
-
-    /**
-     * check for class access
-     * @param access_flags access flags
-     */
-    public static boolean isClass(int access_flags) {
-        return !isInterface(access_flags);
-    }
-
-    /**
-     * check for strict access
-     * @param access_flags access flags
-     */
-    public static boolean isStrict(int access_flags) {
-        return (access_flags & ACC_STRICT) != 0;
-    }
-
-    /**
-     * check for interface access
-     * @param access_flags access flags
-     */
-    public static boolean isInterface(int access_flags) {
-        return (access_flags & ACC_INTERFACE) != 0;
-    }
-
-    /**
-     * check for private access
-     * @param access_flags access flags
-     */
-    public static boolean isPrivate(int access_flags) {
-        return (access_flags & ACC_PRIVATE) != 0;
-    }
-
-    /**
-     * check for transient flag
-     * @param access_flags access flags
-     */
-    public static boolean isTransient(int access_flags) {
-        return (access_flags & ACC_TRANSIENT) != 0;
-    }
-
-    /**
-     * check for volatile flag
-     * @param access_flags access flags
-     */
-    public static boolean isVolatile(int access_flags) {
-        return (access_flags & ACC_VOLATILE) != 0;
-    }
-
-    /**
-     * check for super flag
-     * @param access_flags access flag
-     */
-    public static boolean isSuper(int access_flags) {
-        return (access_flags & ACC_SUPER) != 0;
-    }
-
-    /**
-     * check for protected flag
-     * @param access_flags access flags
-     */
-    public static boolean isProtected(int access_flags) {
-        return (access_flags & ACC_PROTECTED) != 0;
-    }
-
-    /**
-     * chck for final flag
-     * @param access_flags access flags
-     */
-    public static boolean isFinal(int access_flags) {
-        return (access_flags & ACC_FINAL) != 0;
-    }
-
-    /**
-     * check for synchronized flag
-     * @param access_flags access flags
-     */
-    public static boolean isSynchronized(int access_flags) {
-        return (access_flags & ACC_SYNCHRONIZED) != 0;
-    }
-
-    /**
-     * return the method access flag as java modifiers
-     * @param access_flags access flags
-     * @return the access flags as modifier strings
-     */
-    public static String getMethodAccess(int access_flags) {
-        StringBuffer sb = new StringBuffer();
-        if (isPublic(access_flags)) {
-            sb.append("public ");
-        } else if (isPrivate(access_flags)) {
-            sb.append("private ");
-        } else if (isProtected(access_flags)) {
-            sb.append("protected ");
-        }
-        if (isFinal(access_flags)) {
-            sb.append("final ");
-        }
-        if (isStatic(access_flags)) {
-            sb.append("static ");
-        }
-        if (isSynchronized(access_flags)) {
-            sb.append("synchronized ");
-        }
-        if (isNative(access_flags)) {
-            sb.append("native ");
-        }
-        if (isAbstract(access_flags)) {
-            sb.append("abstract ");
-        }
-        return sb.toString().trim();
-    }
-
-    /**
-     * return the field access flag as java modifiers
-     * @param access_flags access flags
-     * @return the access flags as modifier strings
-     */
-    public static String getFieldAccess(int access_flags) {
-        StringBuffer sb = new StringBuffer();
-        if (isPublic(access_flags)) {
-            sb.append("public ");
-        } else if (isPrivate(access_flags)) {
-            sb.append("private ");
-        } else if (isProtected(access_flags)) {
-            sb.append("protected ");
-        }
-        if (isFinal(access_flags)) {
-            sb.append("final ");
-        }
-        if (isStatic(access_flags)) {
-            sb.append("static ");
-        }
-        if (isVolatile(access_flags)) {
-            sb.append("volatile ");
-        }
-        if (isTransient(access_flags)) {
-            sb.append("transient ");
-        }
-        return sb.toString().trim();
-    }
-
-    /**
-     * return the class access flag as java modifiers
-     * @param access_flags access flags
-     * @return the access flags as modifier strings
-     */
-    public static String getClassAccess(int access_flags) {
-        StringBuffer sb = new StringBuffer();
-        if (isPublic(access_flags)) {
-            sb.append("public ");
-        } else if (isProtected(access_flags)) {
-            sb.append("protected ");
-        } else if (isPrivate(access_flags)) {
-            sb.append("private ");
-        }
-        if (isFinal(access_flags)) {
-            sb.append("final ");
-        }
-        if (isSuper(access_flags)) {
-            sb.append("/*super*/ ");
-        }
-        if (isInterface(access_flags)) {
-            sb.append("interface ");
-        }
-        if (isAbstract(access_flags)) {
-            sb.append("abstract ");
-        }
-        if (isClass(access_flags)) {
-            sb.append("class ");
-        }
-        return sb.toString().trim();
-    }
-}
-
-
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/sitraka/bytecode/attributes/AttributeInfo.java b/src/main/org/apache/tools/ant/taskdefs/optional/sitraka/bytecode/attributes/AttributeInfo.java
deleted file mode 100644
index 24c2d8e..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/sitraka/bytecode/attributes/AttributeInfo.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.sitraka.bytecode.attributes;
-
-/**
- * Attribute info structure that provides base methods
- *
- * @author <a href="sbailliez@imediation.com">Stephane Bailliez</a>
- */
-public interface AttributeInfo {
-
-    String SOURCE_FILE = "SourceFile";
-
-    String CONSTANT_VALUE = "ConstantValue";
-
-    String CODE = "Code";
-
-    String EXCEPTIONS = "Exceptions";
-
-    String LINE_NUMBER_TABLE = "LineNumberTable";
-
-    String LOCAL_VARIABLE_TABLE = "LocalVariableTable";
-
-    String INNER_CLASSES = "InnerClasses";
-
-    String SOURCE_DIR = "SourceDir";
-
-    String SYNTHETIC = "Synthetic";
-
-    String DEPRECATED = "Deprecated";
-
-    String UNKNOWN = "Unknown";
-
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/sos/SOS.java b/src/main/org/apache/tools/ant/taskdefs/optional/sos/SOS.java
deleted file mode 100644
index ca903eb..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/sos/SOS.java
+++ /dev/null
@@ -1,491 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.sos;
-
-import java.io.File;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.taskdefs.Execute;
-import org.apache.tools.ant.taskdefs.LogStreamHandler;
-import org.apache.tools.ant.types.Commandline;
-import org.apache.tools.ant.types.Path;
-
-/**
- * A base class for creating tasks for executing commands on SourceOffSite.
- * <p>
- * The class extends the 'exec' task as it operates by executing the soscmd(.exe) program
- * supplied with SOS. By default the task expects soscmd(.exe) to be in the path,
- * you can override this be specifying the sosdir attribute.
- * </p>
- * <p>
- * This class provides set and get methods for the following attributes
- * <br> 'vssserverpath'
- * <br> 'sosserverpath'
- * <br> 'vsspath'
- * <br> 'projectpath'
- * <br> 'username'
- * <br> 'password'
- * <br> 'soscmddir'
- * <br> 'file'
- * <br> 'soshome'
- * <br> 'localpath"
- * <br> 'comment'
- * <br> 'label'
- * <br> 'version'
- * <br> 'recursive'
- * <br> 'verbose'
- * <br> 'nocache'
- * <br> 'nocompression'
- * <br>
- *  It also contains constants for the flags that can be passed to SOS.
- * <p>
- *  These tasks were inspired by the VSS tasks
- *
- * @author    <a href="mailto:jesse@cryptocard.com">Jesse Stockall</a>
- */
-
-public abstract class SOS extends Task {
-
-    private String sosCmdDir = null;
-    private String sosUsername = null;
-    private String sosPassword = "";
-    private String projectPath = null;
-    private String vssServerPath = null;
-    private String sosServerPath = null;
-    private String sosHome = null;
-    private String localPath = null;
-    private String version = null;
-    private String label = null;
-    private String comment = null;
-    private String filename = null;
-
-    private boolean noCompress = false;
-    private boolean noCache = false;
-    private boolean recursive = false;
-    private boolean verbose = false;
-
-
-    /**
-     * Disable the cache
-     *
-     * @param  nocache  The new noCache value
-     */
-    public void setNoCache(boolean nocache) {
-        noCache = nocache;
-    }
-
-
-    /**
-     * Disable compression
-     *
-     * @param  nocompress  The new noCompress value
-     */
-    public void setNoCompress(boolean nocompress) {
-        noCompress = nocompress;
-    }
-
-
-    /**
-     * Set the directory where soscmd(.exe) is located
-     *
-     * @param  dir  The new sosCmd value
-     */
-    public final void setSosCmd(String dir) {
-        sosCmdDir = Project.translatePath(dir);
-    }
-
-
-    /**
-     * Set the username to use to access SOS.
-     *
-     * @param  username  The new username value
-     */
-    public final void setUsername(String username) {
-        sosUsername = username;
-    }
-
-
-    /**
-     * Set the password to use to access SOS.
-     *
-     * @param  password  The new password value
-     */
-    public final void setPassword(String password) {
-        sosPassword = password;
-    }
-
-
-    /**
-     * Set the path to the item in SOS to operate on.
-     * <p>
-     * To avoid the "$$" in th build file we add it here
-     *
-     * @param  projectpath  The new projectPath value
-     */
-    public final void setProjectPath(String projectpath) {
-        projectPath = SOSCmd.PROJECT_PREFIX + projectpath;
-    }
-
-
-    /**
-     * Set the path to the location of the ss.ini.
-     *
-     * @param  vssServerPath  The new vssServerPath value
-     */
-    public final void setVssServerPath(String vssServerPath) {
-        this.vssServerPath = vssServerPath;
-    }
-
-
-    /**
-     * Set the path of soshome
-     *
-     * @param  sosHome  The new sosHome value
-     */
-    public final void setSosHome(String sosHome) {
-        this.sosHome = sosHome;
-    }
-
-
-    /**
-     * Set the address & port of SourceOffSite Server
-     *
-     * @param  sosServerPath  The new sosServerPath value
-     */
-    public final void setSosServerPath(String sosServerPath) {
-        this.sosServerPath = sosServerPath;
-    }
-
-
-    /**
-     * Set the local path.
-     *
-     * @param  path  The new localPath value
-     */
-    public void setLocalPath(Path path) {
-        localPath = path.toString();
-    }
-
-
-    /**
-     * Set the filename to get from SOS
-     *
-     * @param  filename  The new file value
-     */
-    public final void setFile(String filename) {
-        this.filename = filename;
-    }
-
-
-    /**
-     * Set behaviour verbose or quiet
-     *
-     * @param  verbose  The new verbose value
-     */
-    public void setVerbose(boolean verbose) {
-        this.verbose = verbose;
-    }
-
-
-    /**
-     * Set behaviour recursive or non-recursive
-     *
-     * @param  recursive  The new recursive value
-     */
-    public void setRecursive(boolean recursive) {
-        this.recursive = recursive;
-    }
-
-
-    /**
-     * Set the stored version string
-     *
-     * @param  version  The new version value
-     */
-    public void setVersion(String version) {
-        this.version = version;
-    }
-
-
-    /**
-     * Set the labeled version to operate on in SourceSafe
-     *
-     * @param  label  The new label value
-     */
-    public void setLabel(String label) {
-        this.label = label;
-    }
-
-
-    /**
-     * Set the comment to get
-     *
-     * @param  comment  The new comment value
-     */
-    public void setComment(String comment) {
-        this.comment = comment;
-    }
-
-
-    /**
-     * Get the executable to run. Add the path if it was specifed in the build file
-     *
-     * @return    String the executable to run
-     */
-    public String getSosCommand() {
-        if (sosCmdDir == null) {
-            return SOSCmd.COMMAND_SOS_EXE;
-        } else {
-            return sosCmdDir + File.separator + SOSCmd.COMMAND_SOS_EXE;
-        }
-    }
-
-    /**
-     * Get the comment
-     * @return String if it was set, null if not
-     */
-    public String getComment() {
-        return comment;
-    }
-
-
-    /**
-     * Get the version
-     * @return String if it was set, null if not
-     */
-    public String getVersion() {
-        return version;
-    }
-
-
-    /**
-     * Get the label
-     * @return String if it was set, null if not
-     */
-    public String getLabel() {
-        return label;
-    }
-
-
-    /**
-     * Get the username
-     * @return String if it was set, null if not
-     */
-    public String getUsername() {
-        return sosUsername;
-    }
-
-
-    /**
-     * Get the password
-     * @return String empty string if it wans't set
-     */
-    public String getPassword() {
-        return sosPassword;
-    }
-
-
-    /**
-     * Get the project path
-     * @return String if it was set, null if not
-     */
-    public String getProjectPath() {
-        return projectPath;
-    }
-
-
-    /**
-     * Get the VSS server path
-     * @return String if it was set, null if not
-     */
-    public String getVssServerPath() {
-        return vssServerPath;
-    }
-
-
-    /**
-     * Get the SOS home directory
-     * @return String if it was set, null if not
-     */
-    public String getSosHome() {
-        return sosHome;
-    }
-
-
-    /**
-     * Get the SOS serve path
-     * @return String if it was set, null if not
-     */
-    public String getSosServerPath() {
-        return sosServerPath;
-    }
-
-
-    /**
-     * Get the filename to be acted upon
-     * @return String if it was set, null if not
-     */
-    public String getFilename() {
-        return filename;
-    }
-
-
-    /**
-     * Get the NoCompress flag
-     *
-     * @return    String the 'nocompress' Flag if the attribute was 'true', otherwise an empty string
-     */
-    public String getNoCompress() {
-        if (!noCompress) {
-            return "";
-        } else {
-            return SOSCmd.FLAG_NO_COMPRESSION;
-        }
-    }
-
-
-    /**
-     * Get the NoCache flag
-     *
-     * @return    String the 'nocache' Flag if the attribute was 'true', otherwise an empty string
-     */
-    public String getNoCache() {
-        if (!noCache) {
-            return "";
-        } else {
-            return SOSCmd.FLAG_NO_CACHE;
-        }
-    }
-
-
-    /**
-     * Get the 'verbose' Flag
-     *
-     * @return    String the 'verbose' Flag if the attribute was 'true', otherwise an empty string
-     */
-    public String getVerbose() {
-        if (!verbose) {
-            return "";
-        } else {
-            return SOSCmd.FLAG_VERBOSE;
-        }
-    }
-
-
-    /**
-     * Get the 'recursive' Flag
-     *
-     * @return    String the 'recursive' Flag if the attribute was 'true', otherwise an empty string
-     */
-    public String getRecursive() {
-        if (!recursive) {
-            return "";
-        } else {
-            return SOSCmd.FLAG_RECURSION;
-        }
-    }
-
-
-    /**
-     * Builds and returns the working directory.
-     * <p>
-     * The localpath is created if it didn't exist
-     *
-     * @return    String the absolute path of the working directory
-     */
-    public String getLocalPath() {
-        if (localPath == null) {
-            return project.getBaseDir().getAbsolutePath();
-        } else {
-            // make sure localDir exists, create it if it doesn't
-            File dir = project.resolveFile(localPath);
-            if (!dir.exists()) {
-                boolean done = dir.mkdirs();
-                if (!done) {
-                    String msg = "Directory " + localPath + " creation was not " +
-                            "successful for an unknown reason";
-                    throw new BuildException(msg, location);
-                }
-                project.log("Created dir: " + dir.getAbsolutePath());
-            }
-            return dir.getAbsolutePath();
-        }
-    }
-
-
-    /**
-     * Execute the created command line
-     *
-     * @param  cmd              Description of Parameter
-     * @return                  int the exit code
-     * @throws  BuildException
-     */
-    protected int run(Commandline cmd) {
-        try {
-            Execute exe = new Execute(new LogStreamHandler(this,
-                    Project.MSG_INFO,
-                    Project.MSG_WARN));
-
-            exe.setAntRun(project);
-            exe.setWorkingDirectory(project.getBaseDir());
-            exe.setCommandline(cmd.getCommandline());
-            return exe.execute();
-        } catch (java.io.IOException e) {
-            throw new BuildException(e, location);
-        }
-    }
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/sos/SOSCheckin.java b/src/main/org/apache/tools/ant/taskdefs/optional/sos/SOSCheckin.java
deleted file mode 100644
index c3eda09..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/sos/SOSCheckin.java
+++ /dev/null
@@ -1,256 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.sos;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.types.Commandline;
-
-/**
- * Task to commit and unlock file(s) in Visual Source Safe via a SourceOffSite server.
- * <p>
- * The following attributes are interpretted:
- * <table border="1">
- *   <tr>
- *     <th>Attribute</th>
- *     <th>Values</th>
- *     <th>Required</th>
- *   </tr>
- *   <tr>
- *     <td>soscmddir</td>
- *     <td>Directory which contains soscmd(.exe) <br>
- *     soscmd(.exe) must be in the path if this is not specified</td>
- *     <td>No</td>
- *   </tr>
- *   <tr>
- *      <td>vssserverpath</td>
- *      <td>path to the srcsafe.ini  - eg. \\server\vss\srcsafe.ini</td>
- *      <td>Yes</td>
- *   </tr>
- *   <tr>
- *      <td>sosserverpath</td>
- *      <td>address and port of the SOS server  - eg. 192.168.0.1:8888</td>
- *      <td>Yes</td>
- *   </tr>
- *   <tr>
- *      <td>projectpath</td>
- *      <td>SourceSafe project path without the "$"</td>
- *      <td>Yes</td>
- *   </tr>
- *   <tr>
- *      <td>file</td>
- *      <td>Filename to act upon<br> If no file is specified then act upon the project</td>
- *      <td>No</td>
- *   </tr>
- *   <tr>
- *      <td>username</td>
- *      <td>SourceSafe username</td>
- *      <td>Yes</td>
- *   </tr>
- *   <tr>
- *      <td>password</td>
- *      <td>SourceSafe password</td>
- *      <td>No</td>
- *   </tr>
- *   <tr>
- *      <td>localpath</td>
- *      <td>Override the working directory and get to the specified path</td>
- *      <td>No</td>
- *   </tr>
- *   <tr>
- *      <td>soshome</td>
- *      <td>The path to the SourceOffSite home directory</td>
- *      <td>No</td>
- *   </tr>
- *   <tr>
- *      <td>nocompression</td>
- *      <td>true or false - disable compression</td>
- *      <td>No</td>
- *   </tr>
- *   <tr>
- *      <td>recursive</td>
- *      <td>true or false - Only works with the CheckOutProject command</td>
- *      <td>No</td>
- *   </tr>
- *   <tr>
- *      <td>nocache</td>
- *      <td>true or false - Only needed if SOSHOME is set as an enviroment variable</td>
- *      <td>No</td>
- *   </tr>
- *   <tr>
- *      <td>verbose</td>
- *      <td>true or false - Status messages are displayed</td>
- *      <td>No</td>
- *   </tr>
- *   <td>comment</td>
- *      <td>A comment to be applied to all files being checked in</td>
- *      <td>No</td>
- *   </tr>
- * </table>
- *
- * @author    <a href="mailto:jesse@cryptocard.com">Jesse Stockall</a>
- */
-
-public class SOSCheckin extends SOS {
-    Commandline commandLine;
-
-
-    /**
-     * Executes the task.
-     * <br>
-     * Builds a command line to execute soscmd and then calls Exec's run method
-     * to execute the command line.
-     *
-     * @exception  BuildException  Description of Exception
-     */
-    public void execute() throws BuildException {
-        int result = 0;
-        buildCmdLine();
-        result = run(commandLine);
-        if (result == 255) {
-            // This is the exit status
-            String msg = "Failed executing: " + commandLine.toString();
-            throw new BuildException(msg, location);
-        }
-    }
-
-
-    /**
-     * Build the command line <br>
-     *
-     * CheckInFile required parameters: -server -name -password -database -project -file<br>
-     * CheckInFile optional parameters: -workdir -log -verbose -nocache
-     *  -nocompression -soshome<br>
-     *
-     * CheckInProject required parameters: -server -name -password -database -project<br>
-     * CheckInProject optional parameters: workdir -recursive -log -verbose -nocache
-     * -nocompression -soshome<br>
-     *
-     * @return    Commandline the generated command to be executed
-     */
-    protected Commandline buildCmdLine() {
-        commandLine = new Commandline();
-        // Get the path to the soscmd(.exe)
-        commandLine.setExecutable(getSosCommand());
-        // If we find a "file" attribute then act on a file otherwise act on a project
-        if (getFilename() != null) {
-            // add -command CheckInFile to the commandline
-            commandLine.createArgument().setValue(SOSCmd.FLAG_COMMAND);
-            commandLine.createArgument().setValue(SOSCmd.COMMAND_CHECKIN_FILE);
-            // add -file xxxxx to the commandline
-            commandLine.createArgument().setValue(SOSCmd.FLAG_FILE);
-            commandLine.createArgument().setValue(getFilename());
-        } else {
-            // add -command CheckInProject to the commandline
-            commandLine.createArgument().setValue(SOSCmd.FLAG_COMMAND);
-            commandLine.createArgument().setValue(SOSCmd.COMMAND_CHECKIN_PROJECT);
-            // look for a recursive option
-            commandLine.createArgument().setValue(getRecursive());
-        }
-        // SOS server address is required
-        if (getSosServerPath() == null) {
-            throw new BuildException("sosserverpath attribute must be set!", location);
-        }
-        commandLine.createArgument().setValue(SOSCmd.FLAG_SOS_SERVER);
-        commandLine.createArgument().setValue(getSosServerPath());
-        // Login info is required
-        if (getUsername() == null) {
-            throw new BuildException("username attribute must be set!", location);
-        }
-        commandLine.createArgument().setValue(SOSCmd.FLAG_USERNAME);
-        commandLine.createArgument().setValue(getUsername());
-        // The SOS class knows that the SOS server needs the password flag,
-        // even if there is no password ,so we send a " "
-        commandLine.createArgument().setValue(SOSCmd.FLAG_PASSWORD);
-        commandLine.createArgument().setValue(getPassword());
-        // VSS Info is required
-        if (getVssServerPath() == null) {
-            throw new BuildException("vssserverpath attribute must be set!", location);
-        }
-        commandLine.createArgument().setValue(SOSCmd.FLAG_VSS_SERVER);
-        commandLine.createArgument().setValue(getVssServerPath());
-        // VSS project is required
-        if (getProjectPath() == null) {
-            throw new BuildException("projectpath attribute must be set!", location);
-        }
-        commandLine.createArgument().setValue(SOSCmd.FLAG_PROJECT);
-        commandLine.createArgument().setValue(getProjectPath());
-
-        // The following options are optional.
-
-        // -verbose
-        commandLine.createArgument().setValue(getVerbose());
-        // Disable Compression
-        commandLine.createArgument().setValue(getNoCompress());
-        // Path to the SourceOffSite home directory /home/user/.sos
-        if (getSosHome() == null) {
-            // If -soshome was not specified then we can look for nocache
-            commandLine.createArgument().setValue(getNoCache());
-        } else {
-            commandLine.createArgument().setValue(SOSCmd.FLAG_SOS_HOME);
-            commandLine.createArgument().setValue(getSosHome());
-        }
-        // If a working directory was specified then add it to the command line
-        if (getLocalPath() != null) {
-            commandLine.createArgument().setValue(SOSCmd.FLAG_WORKING_DIR);
-            commandLine.createArgument().setValue(getLocalPath());
-        }
-        // Look for a comment
-        if (getComment() != null) {
-            commandLine.createArgument().setValue(SOSCmd.FLAG_COMMENT);
-            commandLine.createArgument().setValue(getComment());
-        }
-        return commandLine;
-    }
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/sos/SOSCheckout.java b/src/main/org/apache/tools/ant/taskdefs/optional/sos/SOSCheckout.java
deleted file mode 100644
index f7a85d3..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/sos/SOSCheckout.java
+++ /dev/null
@@ -1,246 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.sos;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.types.Commandline;
-
-/**
- * Task to retreive and lock file(s) in Visual Source Safe via a SourceOffSite server.
- * <p>
- * The following attributes are interpretted:
- * <table border="1">
- *   <tr>
- *     <th>Attribute</th>
- *     <th>Values</th>
- *     <th>Required</th>
- *   </tr>
- *   <tr>
- *     <td>soscmddir</td>
- *     <td>Directory which contains soscmd(.exe) <br>
- *     soscmd(.exe) must be in the path if this is not specified</td>
- *     <td>No</td>
- *   </tr>
- *   <tr>
- *      <td>vssserverpath</td>
- *      <td>path to the srcsafe.ini  - eg. \\server\vss\srcsafe.ini</td>
- *      <td>Yes</td>
- *   </tr>
- *   <tr>
- *      <td>sosserverpath</td>
- *      <td>address and port of the SOS server  - eg. 192.168.0.1:8888</td>
- *      <td>Yes</td>
- *   </tr>
- *   <tr>
- *      <td>projectpath</td>
- *      <td>SourceSafe project path without the "$"</td>
- *      <td>Yes</td>
- *   </tr>
- *   <tr>
- *      <td>file</td>
- *      <td>Filename to act upon<br> If no file is specified then act upon the project</td>
- *      <td>No</td>
- *   </tr>
- *   <tr>
- *      <td>username</td>
- *      <td>SourceSafe username</td>
- *      <td>Yes</td>
- *   </tr>
- *   <tr>
- *      <td>password</td>
- *      <td>SourceSafe password</td>
- *      <td>No</td>
- *   </tr>
- *   <tr>
- *      <td>localpath</td>
- *      <td>Override the working directory and get to the specified path</td>
- *      <td>No</td>
- *   </tr>
- *   <tr>
- *      <td>soshome</td>
- *      <td>The path to the SourceOffSite home directory</td>
- *      <td>No</td>
- *   </tr>
- *   <tr>
- *      <td>nocompression</td>
- *      <td>true or false - disable compression</td>
- *      <td>No</td>
- *   </tr>
- *   <tr>
- *      <td>recursive</td>
- *      <td>true or false - Only works with the CheckOutProject command</td>
- *      <td>No</td>
- *   </tr>
- *   <tr>
- *      <td>nocache</td>
- *      <td>true or false - Only needed if SOSHOME is set as an enviroment variable</td>
- *      <td>No</td>
- *   </tr>
- *   <tr>
- *      <td>verbose</td>
- *      <td>true or false - Status messages are displayed</td>
- *      <td>No</td>
- *   </tr>
- * </table>
- *
- * @author    <a href="mailto:jesse@cryptocard.com">Jesse Stockall</a>
- */
-
-public class SOSCheckout extends SOS {
-    Commandline commandLine;
-
-
-    /**
-     * Executes the task.
-     * <br>
-     * Builds a command line to execute soscmd and then calls Exec's run method
-     * to execute the command line.
-     *
-     * @exception  BuildException  Description of Exception
-     */
-    public void execute() throws BuildException {
-        int result = 0;
-        buildCmdLine();
-        result = run(commandLine);
-        if (result == 255) {
-            // This is the exit status
-            String msg = "Failed executing: " + commandLine.toString();
-            throw new BuildException(msg, location);
-        }
-    }
-
-
-    /**
-     * Build the command line <br>
-     *
-     * CheckOutFile required parameters: -server -name -password -database -project -file<br>
-     * CheckOutFile optional parameters: -workdir -verbose -nocache -nocompression -soshome<br>
-     *
-     * CheckOutProject required parameters: -server -name -password -database -project<br>
-     * CheckOutProject optional parameters:-workdir -recursive -verbose -nocache
-     * -nocompression -soshome<br>
-     *
-     * @return    Commandline the generated command to be executed
-     */
-    protected Commandline buildCmdLine() {
-        commandLine = new Commandline();
-        // Get the path to the soscmd(.exe)
-        commandLine.setExecutable(getSosCommand());
-        // If we find a "file" attribute then act on a file otherwise act on a project
-        if (getFilename() != null) {
-            // add -command CheckOutFile to the commandline
-            commandLine.createArgument().setValue(SOSCmd.FLAG_COMMAND);
-            commandLine.createArgument().setValue(SOSCmd.COMMAND_CHECKOUT_FILE);
-            // add -file xxxxx to the commandline
-            commandLine.createArgument().setValue(SOSCmd.FLAG_FILE);
-            commandLine.createArgument().setValue(getFilename());
-        } else {
-            // add -command CheckOutProject to the commandline
-            commandLine.createArgument().setValue(SOSCmd.FLAG_COMMAND);
-            commandLine.createArgument().setValue(SOSCmd.COMMAND_CHECKOUT_PROJECT);
-            // look for a recursive option
-            commandLine.createArgument().setValue(getRecursive());
-        }
-        // SOS server address is required
-        if (getSosServerPath() == null) {
-            throw new BuildException("sosserverpath attribute must be set!", location);
-        }
-        commandLine.createArgument().setValue(SOSCmd.FLAG_SOS_SERVER);
-        commandLine.createArgument().setValue(getSosServerPath());
-        // Login info is required
-        if (getUsername() == null) {
-            throw new BuildException("username attribute must be set!", location);
-        }
-        commandLine.createArgument().setValue(SOSCmd.FLAG_USERNAME);
-        commandLine.createArgument().setValue(getUsername());
-        // The SOS class knows that the SOS server needs the password flag,
-        // even if there is no password ,so we send a " "
-        commandLine.createArgument().setValue(SOSCmd.FLAG_PASSWORD);
-        commandLine.createArgument().setValue(getPassword());
-        // VSS Info is required
-        if (getVssServerPath() == null) {
-            throw new BuildException("vssserverpath attribute must be set!", location);
-        }
-        commandLine.createArgument().setValue(SOSCmd.FLAG_VSS_SERVER);
-        commandLine.createArgument().setValue(getVssServerPath());
-        // VSS project is required
-        if (getProjectPath() == null) {
-            throw new BuildException("projectpath attribute must be set!", location);
-        }
-        commandLine.createArgument().setValue(SOSCmd.FLAG_PROJECT);
-        commandLine.createArgument().setValue(getProjectPath());
-
-        // The following options are optional.
-
-        // -verbose
-        commandLine.createArgument().setValue(getVerbose());
-        // Disable Compression
-        commandLine.createArgument().setValue(getNoCompress());
-        // Path to the SourceOffSite home directory /home/user/.sos
-        if (getSosHome() == null) {
-            // If -soshome was not specified then we can look for nocache
-            commandLine.createArgument().setValue(getNoCache());
-        } else {
-            commandLine.createArgument().setValue(SOSCmd.FLAG_SOS_HOME);
-            commandLine.createArgument().setValue(getSosHome());
-        }
-        // If a working directory was specified then add it to the command line
-        if (getLocalPath() != null) {
-            commandLine.createArgument().setValue(SOSCmd.FLAG_WORKING_DIR);
-            commandLine.createArgument().setValue(getLocalPath());
-        }
-        return commandLine;
-    }
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/sos/SOSCmd.java b/src/main/org/apache/tools/ant/taskdefs/optional/sos/SOSCmd.java
deleted file mode 100644
index 7f990bd..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/sos/SOSCmd.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.sos;
-
-/**
- * Interface to hold constants used by the SOS tasks
- *
- * @author    <a href="mailto:jesse@cryptocard.com">Jesse Stockall</a>
- */
-public interface SOSCmd {
-    // soscmd Command options
-    String COMMAND_SOS_EXE = "soscmd";
-    String COMMAND_GET_FILE = "GetFile";
-    String COMMAND_GET_PROJECT = "GetProject";
-    String COMMAND_CHECKOUT_FILE = "CheckOutFile";
-    String COMMAND_CHECKOUT_PROJECT = "CheckOutProject";
-    String COMMAND_CHECKIN_FILE = "CheckInFile";
-    String COMMAND_CHECKIN_PROJECT = "CheckInProject";
-    String COMMAND_HISTORY = "GetFileHistory";
-    String COMMAND_LABEL = "AddLabel";
-    String PROJECT_PREFIX = "$";
-    // soscmd Option flags
-    String FLAG_COMMAND = "-command";
-    String FLAG_VSS_SERVER = "-database";
-    String FLAG_USERNAME = "-name";
-    String FLAG_PASSWORD = "-password";
-    String FLAG_COMMENT = "-log";
-    String FLAG_WORKING_DIR = "-workdir";
-    String FLAG_RECURSION = "-recursive";
-    String FLAG_VERSION = "-revision";
-    String FLAG_LABEL = "-label";
-    String FLAG_NO_COMPRESSION = "-nocompress";
-    String FLAG_NO_CACHE = "-nocache";
-    String FLAG_SOS_SERVER = "-server";
-    String FLAG_SOS_HOME = "-soshome";
-    String FLAG_PROJECT = "-project";
-    String FLAG_FILE = "-file";
-    String FLAG_VERBOSE = "-verbose";
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/sos/SOSGet.java b/src/main/org/apache/tools/ant/taskdefs/optional/sos/SOSGet.java
deleted file mode 100644
index 3ee4c5c..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/sos/SOSGet.java
+++ /dev/null
@@ -1,268 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.sos;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.types.Commandline;
-
-/**
- * Task to retreive file(s) from Visual Source Safe via a SourceOffSite server.
- * <p>
- * The following attributes are interpretted:
- * <table border="1">
- *    <tbody>
- *      <tr>
- *         <th>Attribute</th>
- *         <th>Values</th>
- *         <th>Required</th>
- *       </tr>
- *       <tr>
- *         <td>soscmddir</td>
- *         <td>Directory which contains soscmd(.exe) <br>
- *         soscmd(.exe) must be in the path if this is not specified</td>
- *         <td>No</td>
- *       </tr>
- *       <tr>
- *          <td>vssserverpath</td>
- *          <td>path to the srcsafe.ini  - eg. \\server\vss\srcsafe.ini</td>
- *          <td>Yes</td>
- *       </tr>
- *       <tr>
- *          <td>sosserverpath</td>
- *          <td>address and port of the SOS server  - eg. 192.168.0.1:8888</td>
- *          <td>Yes</td>
- *       </tr>
- *       <tr>
- *          <td>projectpath</td>
- *          <td>SourceSafe project path without the "$"</td>
- *          <td>Yes</td>
- *       </tr>
- *       <tr>
- *          <td>file</td>
- *          <td>Filename to act upon<br>
- *              If no file is specified then act upon the project</td>
- *          <td>No</td>
- *       </tr>
- *       <tr>
- *          <td>username</td>
- *          <td>SourceSafe username</td>
- *          <td>Yes</td>
- *       </tr>
- *       <tr>
- *          <td>password</td>
- *          <td>SourceSafe password</td>
- *          <td>No</td>
- *       </tr>
- *       <tr>
- *          <td>localpath</td>
- *          <td>Override the working directory and get to the specified path</td>
- *          <td>No</td>
- *       </tr>
- *       <tr>
- *          <td>soshome</td>
- *          <td>The path to the SourceOffSite home directory</td>
- *          <td>No</td>
- *       </tr>
- *       <tr>
- *          <td>nocompression</td>
- *          <td>true or false - disable compression</td>
- *          <td>No</td>
- *       </tr>
- *       <tr>
- *          <td>recursive</td>
- *          <td>true or false - Only works with the GetProject command</td>
- *          <td>No</td>
- *       </tr>
- *       <tr>
- *          <td>version</td>
- *          <td>a version number to get - Only works with the GetFile command</td>
- *          <td>No</td>
- *       </tr>
- *       <tr>
- *          <td>label</td>
- *          <td>a label version to get - Only works with the GetProject command</td>
- *          <td>No</td>
- *       </tr>
- *       <tr>
- *          <td>nocache</td>
- *          <td>true or false - Only needed if SOSHOME is set as an enviroment variable</td>
- *          <td>No</td>
- *       </tr>
- *       <tr>
- *          <td>verbose</td>
- *         <td>true or false - Status messages are displayed</td>
- *        <td>No</td>
- *      </tr>
- *
- * @author    <a href="mailto:jesse@cryptocard.com">Jesse Stockall</a>
- */
-
-public class SOSGet extends SOS {
-    Commandline commandLine;
-
-
-    /**
-     * Executes the task.
-     * <br>
-     * Builds a command line to execute soscmd and then calls Exec's run method
-     * to execute the command line.
-     *
-     * @exception  BuildException  Description of Exception
-     */
-    public void execute() throws BuildException {
-        int result = 0;
-        buildCmdLine();
-        result = run(commandLine);
-        if (result == 255) {
-            // This is the exit status
-            String msg = "Failed executing: " + commandLine.toString();
-            throw new BuildException(msg, location);
-        }
-    }
-
-
-    /**
-     * Build the command line <br>
-     *
-     * GetFile required parameters: -server -name -password -database -project -file<br>
-     * GetFile optional parameters: -workdir -revision -verbose -nocache -nocompression -soshome<br>
-     *
-     * GetProject required parameters: -server -name -password -database -project<br>
-     * GetProject optional parameters: -label -workdir -recursive -verbose -nocache
-     * -nocompression -soshome<br>
-     *
-     * @return    Commandline the generated command to be executed
-     */
-    protected Commandline buildCmdLine() {
-        commandLine = new Commandline();
-        // Get the path to the soscmd(.exe)
-        commandLine.setExecutable(getSosCommand());
-        // If we find a "file" attribute then act on a file otherwise act on a project
-        if (getFilename() != null) {
-            // add -command GetFile to the commandline
-            commandLine.createArgument().setValue(SOSCmd.FLAG_COMMAND);
-            commandLine.createArgument().setValue(SOSCmd.COMMAND_GET_FILE);
-            // add -file xxxxx to the commandline
-            commandLine.createArgument().setValue(SOSCmd.FLAG_FILE);
-            commandLine.createArgument().setValue(getFilename());
-            // look for a version attribute
-            if (getVersion() != null) {
-                //add -revision xxxxx to the commandline
-                commandLine.createArgument().setValue(SOSCmd.FLAG_VERSION);
-                commandLine.createArgument().setValue(getVersion());
-            }
-        } else {
-            // add -command GetProject to the commandline
-            commandLine.createArgument().setValue(SOSCmd.FLAG_COMMAND);
-            commandLine.createArgument().setValue(SOSCmd.COMMAND_GET_PROJECT);
-            // look for a recursive option
-            commandLine.createArgument().setValue(getRecursive());
-            // look for a label option
-            if (getLabel() != null) {
-                commandLine.createArgument().setValue(SOSCmd.FLAG_LABEL);
-                commandLine.createArgument().setValue(getLabel());
-            }
-        }
-        // SOS server address is required
-        if (getSosServerPath() == null) {
-            throw new BuildException("sosserverpath attribute must be set!", location);
-        }
-        commandLine.createArgument().setValue(SOSCmd.FLAG_SOS_SERVER);
-        commandLine.createArgument().setValue(getSosServerPath());
-        // Login info is required
-        if (getUsername() == null) {
-            throw new BuildException("username attribute must be set!", location);
-        }
-        commandLine.createArgument().setValue(SOSCmd.FLAG_USERNAME);
-        commandLine.createArgument().setValue(getUsername());
-        // The SOS class knows that the SOS server needs the password flag,
-        // even if there is no password ,so we send a " "
-        commandLine.createArgument().setValue(SOSCmd.FLAG_PASSWORD);
-        commandLine.createArgument().setValue(getPassword());
-        // VSS Info is required
-        if (getVssServerPath() == null) {
-            throw new BuildException("vssserverpath attribute must be set!", location);
-        }
-        commandLine.createArgument().setValue(SOSCmd.FLAG_VSS_SERVER);
-        commandLine.createArgument().setValue(getVssServerPath());
-        // SS project path is required
-        if (getProjectPath() == null) {
-            throw new BuildException("projectpath attribute must be set!", location);
-        }
-        commandLine.createArgument().setValue(SOSCmd.FLAG_PROJECT);
-        commandLine.createArgument().setValue(getProjectPath());
-
-        // The following options are optional.
-
-        // -verbose
-        commandLine.createArgument().setValue(getVerbose());
-        // Disable Compression
-        commandLine.createArgument().setValue(getNoCompress());
-        // Path to the SourceOffSite home directory /home/user/.sos
-        if (getSosHome() == null) {
-            // If -soshome was not specified then we can look for nocache
-            commandLine.createArgument().setValue(getNoCache());
-        } else {
-            commandLine.createArgument().setValue(SOSCmd.FLAG_SOS_HOME);
-            commandLine.createArgument().setValue(getSosHome());
-        }
-        //If a working directory was specified then add it to the command line
-        if (getLocalPath() != null) {
-            commandLine.createArgument().setValue(SOSCmd.FLAG_WORKING_DIR);
-            commandLine.createArgument().setValue(getLocalPath());
-        }
-        return commandLine;
-    }
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/sos/SOSLabel.java b/src/main/org/apache/tools/ant/taskdefs/optional/sos/SOSLabel.java
deleted file mode 100644
index 953a31e..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/sos/SOSLabel.java
+++ /dev/null
@@ -1,204 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.sos;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.types.Commandline;
-
-/**
- * Task to label a Visual Source Safe via a SourceOffSite server.
- * <p>
- * The following attributes are interpretted:
- * <table border="1">
- *   <tr>
- *     <th>Attribute</th>
- *     <th>Values</th>
- *     <th>Required</th>
- *   </tr>
- *   <tr>
- *     <td>soscmddir</td>
- *     <td>Directory which contains soscmd(.exe) <br>
- *     soscmd(.exe) must be in the path if this is not specified</td>
- *     <td>No</td>
- *   </tr>
- *   <tr>
- *      <td>vssserverpath</td>
- *      <td>path to the srcsafe.ini  - eg. \\server\vss\srcsafe.ini</td>
- *      <td>Yes</td>
- *   </tr>
- *   <tr>
- *      <td>sosserverpath</td>
- *      <td>address and port of the SOS server  - eg. 192.168.0.1:8888</td>
- *      <td>Yes</td>
- *   </tr>
- *   <tr>
- *      <td>projectpath</td>
- *      <td>SourceSafe project path without the "$"</td>
- *      <td>Yes</td>
- *   </tr>
- *   <tr>
- *      <td>username</td>
- *      <td>SourceSafe username</td>
- *      <td>Yes</td>
- *   </tr>
- *   <tr>
- *      <td>password</td>
- *      <td>SourceSafe password</td>
- *      <td>No</td>
- *   </tr>
- *   <tr>
- *      <td>label</td>
- *      <td>The label to apply to a project</td>
- *      <td>Yes</td>
- *   </tr>
- *   <tr>
- *      <td>comment</td>
- *      <td>A comment to be applied to all files being labeled</td>
- *      <td>No</td>
- *   </tr>
- *   <tr>
- *      <td>verbose</td>
- *      <td>true or false - Status messages are displayed</td>
- *      <td>No</td>
- *   </tr>
- * </table>
- *
- * @author    <a href="mailto:jesse@cryptocard.com">Jesse Stockall</a>
- */
-
-public class SOSLabel extends SOS {
-    Commandline commandLine;
-
-
-    /**
-     *  Executes the task. <br>
-     *  Builds a command line to execute soscmd and then calls Exec's run method
-     *  to execute the command line.
-     *
-     * @exception  BuildException  Description of Exception
-     */
-    public void execute() throws BuildException {
-        int result = 0;
-        buildCmdLine();
-        result = run(commandLine);
-        if (result == 255) {
-            // This is the exit status
-            String msg = "Failed executing: " + commandLine.toString();
-            throw new BuildException(msg, location);
-        }
-    }
-
-
-    /**
-     *  Build the command line <br>
-     *  AddLabel required parameters: -server -name -password -database -project -label<br>
-     *  AddLabel optional parameters: -verbose -comment<br>
-     *
-     * @return    Commandline the generated command to be executed
-     */
-    protected Commandline buildCmdLine() {
-        commandLine = new Commandline();
-        // Get the path to the soscmd(.exe)
-        commandLine.setExecutable(getSosCommand());
-        // add -command AddLabel to the commandline
-        commandLine.createArgument().setValue(SOSCmd.FLAG_COMMAND);
-        commandLine.createArgument().setValue(SOSCmd.COMMAND_LABEL);
-        // SOS server address is required
-        if (getSosServerPath() == null) {
-            throw new BuildException("sosserverpath attribute must be set!", location);
-        }
-        commandLine.createArgument().setValue(SOSCmd.FLAG_SOS_SERVER);
-        commandLine.createArgument().setValue(getSosServerPath());
-        // Login info is required
-        if (getUsername() == null) {
-            throw new BuildException("username attribute must be set!", location);
-        }
-        commandLine.createArgument().setValue(SOSCmd.FLAG_USERNAME);
-        commandLine.createArgument().setValue(getUsername());
-        // The SOS class knows that the SOS server needs the password flag,
-        // even if there is no password ,so we send a " "
-        commandLine.createArgument().setValue(SOSCmd.FLAG_PASSWORD);
-        commandLine.createArgument().setValue(getPassword());
-        // VSS Info is required
-        if (getVssServerPath() == null) {
-            throw new BuildException("vssserverpath attribute must be set!", location);
-        }
-        commandLine.createArgument().setValue(SOSCmd.FLAG_VSS_SERVER);
-        commandLine.createArgument().setValue(getVssServerPath());
-        // SS project path is required
-        if (getProjectPath() == null) {
-            throw new BuildException("projectpath attribute must be set!", location);
-        }
-        commandLine.createArgument().setValue(SOSCmd.FLAG_PROJECT);
-        commandLine.createArgument().setValue(getProjectPath());
-        // a label is required
-        if (getLabel() == null) {
-            throw new BuildException("label attribute must be set!", location);
-        }
-        commandLine.createArgument().setValue(SOSCmd.FLAG_LABEL);
-        commandLine.createArgument().setValue(getLabel());
-
-        // The following options are optional.
-
-        // -verbose
-        commandLine.createArgument().setValue(getVerbose());
-        // Look for a comment
-        if (getComment() != null) {
-            commandLine.createArgument().setValue(SOSCmd.FLAG_COMMENT);
-            commandLine.createArgument().setValue(getComment());
-        }
-        return commandLine;
-    }
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/sos/package.html b/src/main/org/apache/tools/ant/taskdefs/optional/sos/package.html
deleted file mode 100644
index 7f75ed9..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/sos/package.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<html>
-<body>
-  <p>
-    Ant tasks for working with a SourceOffSite source control system.
-  </p>
-  <p>
-    The &lt;SOSGet&gt; Retreives file(s) from a SOS database<br>
-    The &lt;SOSCheckin&gt; Commits and unlocks file(s) in a SOS database<br>
-    The &lt;SOSCheckout&gt; Retreives and lock file(s) in a SOS database<br>
-    The &lt;SOSLabel&gt; Label a SOS database<br>
-  </p>
-<p align="center">Copyright &copy; 2002 Apache Software Foundation. All rights
-Reserved.</p>
-</body>
-</html>
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/sound/AntSoundPlayer.java b/src/main/org/apache/tools/ant/taskdefs/optional/sound/AntSoundPlayer.java
deleted file mode 100644
index 1b22d61..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/sound/AntSoundPlayer.java
+++ /dev/null
@@ -1,274 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.sound;
-
-// ant includes
-import org.apache.tools.ant.BuildListener;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.BuildEvent;
-
-// imports for all the sound classes required
-// note: comes with jmf or jdk1.3 +
-// these can be obtained from http://java.sun.com/products/java-media/sound/
-import javax.sound.sampled.LineListener;
-import javax.sound.sampled.Clip;
-import javax.sound.sampled.AudioInputStream;
-import javax.sound.sampled.AudioSystem;
-import javax.sound.sampled.UnsupportedAudioFileException;
-import javax.sound.sampled.AudioFormat;
-import javax.sound.sampled.DataLine;
-import javax.sound.sampled.LineUnavailableException;
-import javax.sound.sampled.LineEvent;
-import javax.sound.sampled.Line;
-
-import java.io.File;
-import java.io.IOException;
-
-
-
-/**
- * This class is designed to be used by any AntTask that requires audio output.
- *
- * It implements the BuildListener interface to listen for BuildEvents and could
- * be easily extended to provide audio output upon any specific build events occuring.
- *
- * I have only tested this with .WAV and .AIFF sound file formats. Both seem to work fine.
- *
- * @author Nick Pellow
- * @version $Revision$, $Date$
- */
-
-public class AntSoundPlayer implements LineListener, BuildListener {
-
-    private File fileSuccess = null;
-    private int loopsSuccess = 0;
-    private Long durationSuccess = null;
-
-    private File fileFail = null;
-    private int loopsFail = 0;
-    private Long durationFail = null;
-
-    public AntSoundPlayer() {
-
-    }
-
-    /**
-     * @param source the location of the audio file to be played when the build is successful
-     * @param loops the number of times the file should be played when the build is successful
-     * @param duration the number of milliseconds the file should be played when the build is successful
-     */
-    public void addBuildSuccessfulSound(File file, int loops, Long duration) {
-        this.fileSuccess = file;
-        this.loopsSuccess = loops;
-        this.durationSuccess = duration;
-    }
-
-
-    /**
-     * @param fileName the location of the audio file to be played when the build fails
-     * @param loops the number of times the file should be played when the build is fails
-     * @param duration the number of milliseconds the file should be played when the build fails
-     */
-    public void addBuildFailedSound(File fileFail, int loopsFail, Long durationFail) {
-        this.fileFail = fileFail;
-        this.loopsFail = loopsFail;
-        this.durationFail = durationFail;
-    }
-
-    /**
-     * Plays the file for duration milliseconds or loops.
-     */
-    private void play(Project project, File file, int loops, Long duration) {
-
-        Clip audioClip = null;
-
-        AudioInputStream audioInputStream = null;
-
-
-        try {
-            audioInputStream = AudioSystem.getAudioInputStream(file);
-        } catch (UnsupportedAudioFileException uafe) {
-            project.log("Audio format is not yet supported: " 
-                + uafe.getMessage());
-        } catch (IOException ioe) {
-            ioe.printStackTrace();
-        }
-
-        if (audioInputStream != null) {
-            AudioFormat format = audioInputStream.getFormat();
-            DataLine.Info   info = new DataLine.Info(Clip.class, format,
-                                             AudioSystem.NOT_SPECIFIED);
-            try {
-                audioClip = (Clip) AudioSystem.getLine(info);
-                audioClip.addLineListener(this);
-                audioClip.open(audioInputStream);
-            } catch (LineUnavailableException e) {
-                project.log("The sound device is currently unavailable");
-                return;
-            } catch (IOException e) {
-                e.printStackTrace();
-            }
-
-            if (duration != null) {
-                playClip(audioClip, duration.longValue());
-            } else {
-                playClip(audioClip, loops);
-            }
-            audioClip.drain();
-            audioClip.close();
-        } else {
-            project.log("Can't get data from file " + file.getName());
-        }
-    }
-
-    private void playClip(Clip clip, int loops) {
-
-        clip.loop(loops);
-        while (clip.isRunning()) {
-        }
-    }
-
-    private void playClip(Clip clip, long duration) {
-        clip.loop(Clip.LOOP_CONTINUOUSLY);
-        try {
-            Thread.sleep(duration);
-        } catch (InterruptedException e) {
-        }
-    }
-
-    /**
-     * This is implemented to listen for any line events and closes the
-     * clip if required.
-     */
-    public void update(LineEvent event) {
-        if (event.getType().equals(LineEvent.Type.STOP)) {
-            Line line = event.getLine();
-            line.close();
-        } else if (event.getType().equals(LineEvent.Type.CLOSE)) {
-            /*
-             *  There is a bug in JavaSound 0.90 (jdk1.3beta).
-             *  It prevents correct termination of the VM.
-             *  So we have to exit ourselves.
-             */
-            //System.exit(0);
-        }
-    }
-
-
-    /**
-     *  Fired before any targets are started.
-     */
-    public void buildStarted(BuildEvent event){
-    }
-
-    /**
-     *  Fired after the last target has finished. This event
-     *  will still be thrown if an error occured during the build.
-     *
-     *  @see BuildEvent#getException()
-     */
-    public void buildFinished(BuildEvent event){
-        if (event.getException() == null && fileSuccess != null) {
-            // build successfull!
-            play(event.getProject(), fileSuccess, loopsSuccess, durationSuccess);
-        } else if (event.getException() != null && fileFail != null) {
-            play(event.getProject(), fileFail, loopsFail, durationFail);
-        }
-    }
-
-    /**
-     *  Fired when a target is started.
-     *
-     *  @see BuildEvent#getTarget()
-     */
-    public void targetStarted(BuildEvent event){
-    }
-
-    /**
-     *  Fired when a target has finished. This event will
-     *  still be thrown if an error occured during the build.
-     *
-     *  @see BuildEvent#getException()
-     */
-    public void targetFinished(BuildEvent event){
-    }
-
-    /**
-     *  Fired when a task is started.
-     *
-     *  @see BuildEvent#getTask()
-     */
-    public void taskStarted(BuildEvent event){
-    }
-
-    /**
-     *  Fired when a task has finished. This event will still
-     *  be throw if an error occured during the build.
-     *
-     *  @see BuildEvent#getException()
-     */
-    public void taskFinished(BuildEvent event){
-    }
-
-    /**
-     *  Fired whenever a message is logged.
-     *
-     *  @see BuildEvent#getMessage()
-     *  @see BuildEvent#getPriority()
-     */
-    public void messageLogged(BuildEvent event){
-    }
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/sound/SoundTask.java b/src/main/org/apache/tools/ant/taskdefs/optional/sound/SoundTask.java
deleted file mode 100644
index bc68c25..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/sound/SoundTask.java
+++ /dev/null
@@ -1,213 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.sound;
-
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.BuildException;
-
-import java.io.File;
-import java.util.Random;
-import java.util.Vector;
-
-/**
- * This is an example of an AntTask that makes of use of the AntSoundPlayer.
- *
- * There are three attributes to be set:
- *
- * <code>source</code>: the location of the audio file to be played
- * <code>duration</code>: play the sound file continuously until "duration" milliseconds has expired
- * <code>loops</code>: the number of times the sound file should be played until stopped
- *
- * I have only tested this with .WAV and .AIFF sound file formats. Both seem
- * to work fine.
- *
- * plans for the future:
- * - use the midi api to define sounds (or drum beat etc) in xml and have
- *   Ant play them back
- *
- * @author Nick Pellow
- * @version $Revision$, $Date$
- */
-
-public class SoundTask extends Task {
-
-    private BuildAlert success = null;
-    private BuildAlert fail = null;
-
-    public BuildAlert createSuccess() {
-        success = new BuildAlert();
-        return success;
-    }
-
-    public BuildAlert createFail() {
-        fail = new BuildAlert();
-        return fail;
-     }
-
-    public SoundTask() {
-    }
-
-    public void init(){
-    }
-
-    public void execute() {
-
-        AntSoundPlayer soundPlayer = new AntSoundPlayer();
-
-        if (success == null) {
-            log("No nested success element found.", Project.MSG_WARN);
-        } else {
-            soundPlayer.addBuildSuccessfulSound(success.getSource(),
-              success.getLoops(), success.getDuration());
-        }
-
-        if (fail == null) {
-            log("No nested failure element found.", Project.MSG_WARN);
-        } else {
-            soundPlayer.addBuildFailedSound(fail.getSource(),
-              fail.getLoops(), fail.getDuration());
-        }
-
-        getProject().addBuildListener(soundPlayer);
-
-    }
-
-    /**
-     * A class to be extended by any BuildAlert's that require the output
-     * of sound.
-     */
-    public class BuildAlert {
-        private File source = null;
-        private int loops = 0;
-        private Long duration = null;
-
-        /**
-         * Sets the duration in milliseconds the file should be played.
-         */
-        public void setDuration(Long duration) {
-            this.duration = duration;
-        }
-
-        /**
-         * Sets the location of the file to get the audio.
-         *
-         * @param source the name of a sound-file directory or of the audio file
-         */
-        public void setSource(File source) {
-            this.source = source;
-        }
-
-        /**
-         * Sets the number of times the source file should be played.
-         *
-         * @param loops the number of loops to play the source file
-         */
-        public void setLoops(int loops) {
-            this.loops = loops;
-        }
-
-        /**
-         * Gets the location of the file to get the audio.
-         */
-        public File getSource() {
-            File nofile = null ;
-            // Check if source is a directory
-            if (source.exists()) {
-                if (source.isDirectory()) {
-                    // get the list of files in the dir
-                    String[] entries = source.list() ;
-                    Vector files = new Vector() ;
-                    for (int i = 0 ; i < entries.length ; i++) {
-                        File f = new File(source, entries[i]) ;
-                        if (f.isFile()) {
-                            files.addElement(f) ;
-                        }
-                    }
-                    if (files.size() < 1) {
-                        throw new BuildException("No files found in directory " + source);
-                    }
-                    int numfiles = files.size() ;
-                    // get a random number between 0 and the number of files
-                    Random rn = new Random() ;
-                    int x = rn.nextInt(numfiles) ;
-                    // set the source to the file at that location
-                    this.source = (File) files.elementAt(x);
-                }
-            } else {
-                log(source + ": invalid path.", Project.MSG_WARN) ;
-                this.source = nofile ;
-            }
-            return this.source ;
-        }
-
-        /**
-         * Sets the number of times the source file should be played.
-         *
-         * @return the number of loops to play the source file
-         */
-        public int getLoops() {
-            return this.loops;
-        }
-
-        /**
-         * Gets the duration in milliseconds the file should be played.
-         */
-        public Long getDuration() {
-            return this.duration;
-        }
-    }
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/splash/SplashScreen.java b/src/main/org/apache/tools/ant/taskdefs/optional/splash/SplashScreen.java
deleted file mode 100644
index 754cdac..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/splash/SplashScreen.java
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.splash;
-
-import org.apache.tools.ant.BuildEvent;
-import org.apache.tools.ant.BuildListener;
-
-import javax.swing.JWindow;
-import javax.swing.JLabel;
-import javax.swing.JPanel;
-import javax.swing.JProgressBar;
-import javax.swing.BorderFactory;
-import javax.swing.ImageIcon;
-import java.awt.event.ActionListener;
-import java.awt.event.ActionEvent;
-import java.awt.BorderLayout;
-import java.awt.Color;
-import java.awt.Dimension;
-import java.awt.Font;
-import java.awt.Toolkit;
-
-class SplashScreen extends JWindow implements ActionListener, BuildListener {
-
-    private JLabel text;
-    private JProgressBar pb;
-    private int total;
-    private final int min = 0;
-    private final int max = 200;
-
-    public SplashScreen(String msg) {
-        init(null);
-        setText(msg);
-    }
-        
-    public SplashScreen(ImageIcon img) {
-        init(img);
-    }
-
-    protected void init(ImageIcon img) {
-       
-        JPanel pan = (JPanel) getContentPane();
-        JLabel piccy;
-        if (img == null) {
-            piccy = new JLabel();
-        } else {
-            piccy = new JLabel(img);
-        }
-            
-        piccy.setBorder(BorderFactory.createLineBorder(Color.black, 1));
-        text = new JLabel("Building....", JLabel.CENTER);
-        text.setFont(new Font("Sans-Serif", Font.BOLD, 12));
-        text.setBorder(BorderFactory.createEtchedBorder());
-
-        pb = new JProgressBar(min, max);
-        pb.setBorder(BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.LOWERED));
-        JPanel pan2 = new JPanel();
-        pan2.setLayout(new BorderLayout());
-
-        pan2.add(text, BorderLayout.NORTH);
-        pan2.add(pb, BorderLayout.SOUTH);
-
-        pan.setLayout(new BorderLayout());
-        pan.add(piccy, BorderLayout.CENTER);
-        pan.add(pan2, BorderLayout.SOUTH);
-
-        pan.setBorder(BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED));
-
-        pack();
-
-        Dimension size = getSize();
-        Dimension scr = Toolkit.getDefaultToolkit().getScreenSize();
-        int x = (scr.width - size.width) / 2;
-        int y = (scr.height - size.height) / 2;
-        setBounds(x, y, size.width, size.height);
-    }
-
-    public void setText(String txt) {
-        text.setText(txt);
-    }
-
-    public void actionPerformed(ActionEvent a) {
-        if (total < max) {
-            total++;
-        } else {
-            total = min;
-        }
-        pb.setValue(total);
-    }
-
-    public void buildStarted(BuildEvent event){ actionPerformed(null);}
-    public void buildFinished(BuildEvent event){actionPerformed(null);}
-    public void targetStarted(BuildEvent event){actionPerformed(null);}
-    public void targetFinished(BuildEvent event){actionPerformed(null);}
-    public void taskStarted(BuildEvent event){actionPerformed(null);}
-    public void taskFinished(BuildEvent event){actionPerformed(null);}
-    public void messageLogged(BuildEvent event){actionPerformed(null);}
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/splash/SplashTask.java b/src/main/org/apache/tools/ant/taskdefs/optional/splash/SplashTask.java
deleted file mode 100644
index edbdeae..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/splash/SplashTask.java
+++ /dev/null
@@ -1,206 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.splash;
-
-import java.io.InputStream;
-import java.io.DataInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.net.URL;
-import java.net.URLConnection;
-import javax.swing.ImageIcon;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.Task;
- 
-public class SplashTask extends Task {
-
-    private String imgurl = null;
-    private String proxy = null;
-    private String user = null;
-    private String password = null;
-    private String port = "80";
-    private int showDuration = 5000;
-    private boolean useProxy = false;
-
-    private static SplashScreen splash = null;
-
-    public void setImageURL(String imgurl) {
-        this.imgurl = imgurl;
-    }
-    public void setUseproxy(boolean useProxy) {
-        this.useProxy = useProxy;
-    }
-    public void setProxy(String proxy){
-        this.proxy = proxy;
-    }
-    public void setPort(String port){
-        this.port = port;
-    }
-    public void setUser(String user){
-        this.user = user;
-    }
-    public void setPassword(String password){
-        this.password = password;
-    }
-    public void setShowduration(int duration) {
-        this.showDuration = duration;
-    }
-   
-
-    public void execute() throws BuildException {
-        if (splash != null) {
-            splash.setVisible(false);
-            getProject().removeBuildListener(splash);
-            splash.dispose();
-            splash = null;
-        }
-      
-        log("Creating new SplashScreen", Project.MSG_VERBOSE);
-        InputStream in = null;
-
-        if (imgurl != null) {
-            try {
-                URLConnection conn = null;
-                
-                if (useProxy &&
-                   (proxy != null && proxy.length() > 0) &&
-                   (port != null && port.length() > 0)) {
-                    
-                    log("Using proxied Connection",  Project.MSG_DEBUG);
-                    System.getProperties().put("http.proxySet", "true");
-                    System.getProperties().put("http.proxyHost", proxy);
-                    System.getProperties().put("http.proxyPort", port);
-                    
-                    URL url = new URL(imgurl);
-                    
-                    conn = url.openConnection();
-                    if (user != null && user.length() > 0) {
-                        String encodedcreds = 
-                            new sun.misc.BASE64Encoder().encode((new String(user + ":" + password)).getBytes());
-                        conn.setRequestProperty("Proxy-Authorization", 
-                                                encodedcreds);
-                    }
-                    
-                } else {
-                    System.getProperties().put("http.proxySet", "false");
-                    System.getProperties().put("http.proxyHost", "");
-                    System.getProperties().put("http.proxyPort", "");
-                    log("Using Direction HTTP Connection", Project.MSG_DEBUG);
-                    URL url = new URL(imgurl);
-                    conn = url.openConnection();
-                }
-                conn.setDoInput(true);
-                conn.setDoOutput(false);
-                
-                in = conn.getInputStream();
-
-                // Catch everything - some of the above return nulls, throw exceptions or generally misbehave
-                // in the event of a problem etc
-                
-            } catch (Throwable ioe) {
-                log("Unable to download image, trying default Ant Logo", 
-                    Project.MSG_DEBUG);
-                log("(Exception was \"" + ioe.getMessage() + "\"", 
-                    Project.MSG_DEBUG);
-            }
-        }
-
-        if (in == null) {
-            in = SplashTask.class.getClassLoader().getResourceAsStream("images/ant_logo_large.gif");
-        }
-
-        if (in != null) {
-            DataInputStream din = new DataInputStream(in);
-            boolean success = false;
-            try {
-                ByteArrayOutputStream bout = new ByteArrayOutputStream();
-                int data;
-                while ((data = din.read()) != -1) {
-                    bout.write((byte) data);
-                }
-                
-                log("Got ByteArray, creating splash",  Project.MSG_DEBUG);
-                ImageIcon img = new ImageIcon(bout.toByteArray());
-                
-                splash = new SplashScreen(img);
-                success = true;
-            } catch (Exception e) {
-                throw new BuildException(e);
-            } finally {
-                try {
-                    din.close();
-                } catch (IOException ioe) {
-                    // swallow if there was an error before so that
-                    // original error will be passed up
-                    if (success) {
-                        throw new BuildException(ioe);
-                    }
-                }
-            }
-        } else {
-            splash = new SplashScreen("Image Unavailable.");
-        }
-
-        splash.setVisible(true);
-        splash.toFront();
-        getProject().addBuildListener(splash);
-        try {
-            Thread.currentThread().sleep(showDuration);
-        } catch (InterruptedException e) {
-        }
-        
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/starteam/StarTeamCheckin.java b/src/main/org/apache/tools/ant/taskdefs/optional/starteam/StarTeamCheckin.java
deleted file mode 100644
index acfe33a..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/starteam/StarTeamCheckin.java
+++ /dev/null
@@ -1,325 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.starteam;
-
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.util.Enumeration;
-import java.util.Hashtable;
-
-import com.starbase.starteam.File;
-import com.starbase.starteam.Folder;
-import com.starbase.starteam.Item;
-import com.starbase.starteam.Status;
-import com.starbase.starteam.View;
-import com.starbase.starteam.ViewConfiguration;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-
-/**
- * StarTeamCheckIn.java
- *
- *
- * Created: Sat Dec 15 20:26:07 2001
- *
- * @author <a href="mailto:scohen@localhost.localdomain">Steve Cohen</a>
- * @version 1.0
- *
- * @ant.task name="stcheckin" category="scm" product="Starteam"
- */
-public class StarTeamCheckin extends TreeBasedTask {
-
-    public StarTeamCheckin() {
-        // we want this to have a false default, unlike for Checkin.
-        setRecursive(false);
-    }
-
-    private boolean createFolders = true;
-
-    /**
-     * The comment which will be stored with the checkin.
-     */
-    private String comment = null;
-
-    /**
-     * holder for the add Uncontrolled attribute.  If true, all
-     * local files not in StarTeam will be added to the repository.
-     */
-    private boolean addUncontrolled = false;
-
-    /**
-     * Sets the value of createFolders
-     *
-     * @param argCreateFolders Value to assign to this.createFolders
-     */
-    public void setCreateFolders(boolean argCreateFolders) {
-        this.createFolders = argCreateFolders;
-    }
-
-
-    /**
-     * Get the comment attribute for this operation
-     * @return value of comment.
-     */
-    public String getComment() {
-        return this.comment;
-    }
-
-    /**
-     * Set the value of comment.
-     * @param comment  Value to assign to comment.
-     */
-    public void setComment(String comment) {
-        this.comment = comment;
-    }
-
-    /**
-     * Get the value of addUncontrolled.
-     * @return value of addUncontrolled.
-     */
-    public boolean isAddUncontrolled() {
-        return this.addUncontrolled;
-    }
-
-    /**
-     * Set the value of addUncontrolled.
-     * @param addUncontrolled  Value to assign to addUncontrolled.
-     */
-    public void setAddUncontrolled(boolean addUncontrolled) {
-        this.addUncontrolled = addUncontrolled;
-    }
-
-    /**
-     * This attribute tells whether unlocked files on checkin (so that
-     * other users may access them) checkout or to leave the checkout status
-     * alone (default).
-     * @see #setUnlocked(boolean)
-     */
-    private int lockStatus = Item.LockType.UNCHANGED;
-
-    /**
-     * Set to do an unlocked checkout. Default is false;
-     * @param v  true means do an unlocked checkout
-     *           false means leave status alone.
-     */
-    public void setUnlocked(boolean v) {
-        if (v) {
-            this.lockStatus = Item.LockType.UNLOCKED;
-        } else {
-            this.lockStatus = Item.LockType.UNCHANGED;
-        }
-    }
-
-    /**
-     * Override of base-class abstract function creates an
-     * appropriately configured view.  For checkins this is
-     * always the current or "tip" view.
-     *
-     * @param raw the unconfigured <code>View</code>
-     * @return the snapshot <code>View</code> appropriately configured.
-     */
-    protected View createSnapshotView(View raw) {
-        return new View(raw, ViewConfiguration.createTip());
-    }
-
-    /**
-     * Implements base-class abstract function to define tests for
-     * any preconditons required by the task
-     *
-     * @exception BuildException not thrown in this implementation
-     */
-    protected void testPreconditions() throws BuildException {
-        if (null != getRootLocalFolder() && !isForced()) {
-            log("Warning: rootLocalFolder specified, but forcing off.",
-                    Project.MSG_WARN);
-        }
-    }
-
-    /**
-     * Implements base-class abstract function to perform the checkout
-     * operation on the files in each folder of the tree.
-     *
-     * @param starteamFolder the StarTeam folder to which files
-     *                       will be checked in
-     * @param localFolder local folder from which files will be checked in
-     * @exception BuildException if any error occurs
-     */
-    protected void visit(Folder starteamFolder, java.io.File targetFolder)
-            throws BuildException {
-        try {
-            Hashtable localFiles = listLocalFiles(targetFolder);
-
-            // If we have been told to create the working folders
-            // For all Files in this folder, we need to check
-            // if there have been modifications.
-
-            Item[] files = starteamFolder.getItems("File");
-            for (int i = 0; i < files.length; i++) {
-                File eachFile = (File) files[i];
-                String filename = eachFile.getName();
-                java.io.File localFile =
-                        new java.io.File(targetFolder, filename);
-
-                delistLocalFile(localFiles, localFile);
-
-                // If the file doesn't pass the include/exclude tests, skip it.
-                if (!shouldProcess(filename)) {
-                    log("Skipping " + eachFile.toString(), Project.MSG_INFO);
-                    continue;
-                }
-
-
-                // If forced is not set then we may save ourselves some work by
-                // looking at the status flag.
-                // Otherwise, we care nothing about these statuses.
-
-                if (!isForced()) {
-                    int fileStatus = (eachFile.getStatus());
-
-                    // We try to update the status once to give StarTeam
-                    // another chance.
-                    if (fileStatus == Status.MERGE
-                            || fileStatus == Status.UNKNOWN) {
-                        eachFile.updateStatus(true, true);
-                        fileStatus = (eachFile.getStatus());
-                    }
-                    if (fileStatus == Status.CURRENT) {
-                        log("Not processing " + eachFile.toString()
-                                + " as it is current.",
-                                Project.MSG_INFO);
-                        continue;
-                    }
-                }
-
-                // Check in anything else.
-
-                log("Checking In: " + (localFile.toString()), Project.MSG_INFO);
-                eachFile.checkinFrom(localFile, this.comment,
-                        this.lockStatus,
-                        true, true, true);
-            }
-
-            // Now we recursively call this method on all sub folders in this
-            // folder unless recursive attribute is off.
-            Folder[] subFolders = starteamFolder.getSubFolders();
-            for (int i = 0; i < subFolders.length; i++) {
-                java.io.File targetSubfolder =
-                        new java.io.File(targetFolder, subFolders[i].getName());
-                delistLocalFile(localFiles, targetSubfolder);
-
-                if (isRecursive()) {
-                    visit(subFolders[i], targetSubfolder);
-                }
-            }
-            if (this.addUncontrolled) {
-                addUncontrolledItems(localFiles, starteamFolder);
-            }
-
-
-        } catch (IOException e) {
-            throw new BuildException(e);
-        }
-    }
-
-    /**
-     * Adds to the StarTeam repository everything on the local machine that
-     * is not currently in the repository.
-     * @param folder - StarTeam folder to which these items are to be added.
-     */
-    private void addUncontrolledItems(Hashtable localFiles, Folder folder)
-            throws IOException {
-        try {
-            Enumeration e = localFiles.keys();
-            while (e.hasMoreElements()) {
-                java.io.File file =
-                        new java.io.File(e.nextElement().toString());
-                add(folder, file);
-            }
-        } catch (SecurityException e) {
-            log("Error adding file: " + e, Project.MSG_ERR);
-        }
-    }
-
-    /**
-     * Deletes the file from the local drive.
-     * @param file the file or directory to delete.
-     * @return true if the file was successfully deleted otherwise false.
-     */
-    private void add(Folder parentFolder, java.io.File file)
-            throws IOException {
-        // If the current file is a Directory, we need to process all
-        // of its children as well.
-        if (file.isDirectory()) {
-            log("Adding new folder to repository: " + file.getAbsolutePath(),
-                    Project.MSG_INFO);
-            Folder newFolder = new Folder(parentFolder);
-            newFolder.setName(file.getName());
-            newFolder.update();
-
-            // now visit this new folder to take care of adding any files
-            // or subfolders within it.
-            if (isRecursive()) {
-                visit(newFolder, file);
-            }
-        } else {
-            log("Adding new file to repository: " + file.getAbsolutePath(),
-                    Project.MSG_INFO);
-            File newFile = new File(parentFolder);
-            newFile.addFromStream(new FileInputStream(file),
-                    file.getName(),
-                    null, this.comment, 3, true);
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/starteam/StarTeamCheckout.java b/src/main/org/apache/tools/ant/taskdefs/optional/starteam/StarTeamCheckout.java
deleted file mode 100644
index 79963e7..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/starteam/StarTeamCheckout.java
+++ /dev/null
@@ -1,360 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.starteam;
-
-import java.io.IOException;
-import java.util.Enumeration;
-import java.util.Hashtable;
-
-import com.starbase.starteam.File;
-import com.starbase.starteam.Folder;
-import com.starbase.starteam.Item;
-import com.starbase.starteam.Status;
-import com.starbase.starteam.View;
-import com.starbase.starteam.ViewConfiguration;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-
-/**
- * This class logs into StarTeam checks out any changes that have occurred since
- * the last successful build. It also creates all working directories on the
- * local directory if appropriate. Ant Usage:
- * <pre>
- * &lt;taskdef name="starteamcheckout"
- * classname="org.apache.tools.ant.taskdefs.StarTeamCheckout"/&gt;
- * &lt;starteamcheckout username="BuildMaster" password="ant" starteamFolder="Source"
- * starteamurl="servername:portnum/project/view"
- * createworkingdirectories="true"/&gt;
- * </pre>
- *
- * @author Christopher Charlier, ThoughtWorks, Inc. 2001
- * @author <a href="mailto:jcyip@thoughtworks.com">Jason Yip</a>
- * @author Jason Pettiss
- * @author <a href="mailto:stevec@ignitesports.com">Steve Cohen</a>
- * @version 1.1
- * @see <A HREF="http://www.starbase.com/">StarBase Web Site</A>
- *
- * @ant.task name="stcheckout" category="scm"
- */
-public class StarTeamCheckout extends TreeBasedTask {
-
-    /**
-     * holder for the createDirs attribute
-     */
-    private boolean createDirs = true;
-
-    /**
-     * holder for the deleteUncontrolled attribute.  If true,
-     * all local files not in StarTeam will be deleted.
-     */
-    private boolean deleteUncontrolled = true;
-
-    /**
-     * Set the attribute that tells ant if we want to create all directories
-     * that are in the Starteam repository regardless if they are empty.
-     *
-     * @param value  the value to set the attribute to.
-     */
-    public void setCreateWorkingDirs(boolean value) {
-        this.createDirs = value;
-    }
-
-    /**
-     * Sets the attribute that tells ant whether or not to remove local files
-     * that are NOT found in the Starteam repository to the supplied value.
-     *
-     * @param value  the value to set the attribute to.
-     */
-    public void setDeleteUncontrolled(boolean value) {
-        this.deleteUncontrolled = value;
-    }
-
-    /**
-     * Sets the label StarTeam is to use for checkout.
-     *
-     * @param label the label to be used
-     */
-    public void setLabel(String label) {
-        _setLabel(label);
-    }
-
-    /**
-     * This attribute tells whether to do a locked checkout, an unlocked
-     * checkout or to leave the checkout status alone (default).  A locked
-     * checkout locks all other users out from making changes.  An unlocked
-     * checkout reverts all local files to their previous repository status
-     * and removes the lock.
-     * @see #setLocked(boolean)
-     * @see #setUnlocked(boolean)
-     */
-    private int lockStatus = Item.LockType.UNCHANGED;
-
-    /**
-     * Set to do a locked checkout.  Default is false.
-     * @param v  True to do a locked checkout, false to checkout without
-     *           changing status/.
-     * @exception BuildException if both locked and unlocked are set true
-     */
-    public void setLocked(boolean v) throws BuildException {
-        setLockStatus(v, Item.LockType.EXCLUSIVE);
-    }
-
-
-    /**
-     * Set to do an unlocked checkout. Default is false;
-     * @param v  True to do an unlocked checkout, false to checkout without
-     *           changing status.
-     * @exception BuildException if both locked and unlocked are set true
-     */
-    public void setUnlocked(boolean v) throws BuildException {
-        setLockStatus(v, Item.LockType.UNLOCKED);
-    }
-
-    private void setLockStatus(boolean v, int newStatus)
-            throws BuildException {
-        if (v) {
-            if (this.lockStatus == Item.LockType.UNCHANGED) {
-                this.lockStatus = newStatus;
-            } else if (this.lockStatus != newStatus) {
-                throw new BuildException(
-                        "Error: cannot set locked and unlocked both true.");
-            }
-        }
-    }
-
-    /**
-     * Override of base-class abstract function creates an
-     * appropriately configured view for checkouts - either
-     * the current view or a view from this.label.
-     *
-     * @param raw the unconfigured <code>View</code>
-     * @return the snapshot <code>View</code> appropriately configured.
-     */
-    protected View createSnapshotView(View raw) {
-
-        int labelID = getLabelID(raw);
-
-        // if a label has been supplied, use it to configure the view
-        // otherwise use current view
-        if (labelID >= 0) {
-            return new View(raw, ViewConfiguration.createFromLabel(labelID));
-        } else {
-            return new View(raw, ViewConfiguration.createTip());
-        }
-    }
-
-    /**
-     * Implements base-class abstract function to define tests for
-     * any preconditons required by the task
-     *
-     * @exception BuildException not thrown in this implementation
-     */
-    protected void testPreconditions() throws BuildException {
-        if (null != getRootLocalFolder() && !isForced()) {
-            log("Warning: rootLocalFolder specified, but forcing off.",
-                    Project.MSG_WARN);
-        }
-    }
-
-    /**
-     * Implements base-class abstract function to perform the checkout
-     * operation on the files in each folder of the tree.
-     *
-     * @param starteamFolder the StarTeam folder from which files to be
-     *                       checked out
-     * @param targetFolder the local mapping of rootStarteamFolder
-     * @exception BuildException if any error occurs
-     */
-    protected void visit(Folder starteamFolder, java.io.File targetFolder)
-            throws BuildException {
-        try {
-            Hashtable localFiles = listLocalFiles(targetFolder);
-
-            // If we have been told to create the working folders
-            if (createDirs) {
-                // Create if it doesn't exist
-                if (!targetFolder.exists()) {
-                    targetFolder.mkdir();
-                }
-            }
-            // For all Files in this folder, we need to check
-            // if there have been modifications.
-
-            Item[] files = starteamFolder.getItems("File");
-            for (int i = 0; i < files.length; i++) {
-                File eachFile = (File) files[i];
-                String filename = eachFile.getName();
-                java.io.File localFile =
-                        new java.io.File(targetFolder, filename);
-
-                delistLocalFile(localFiles, localFile);
-
-                // If the file doesn't pass the include/exclude tests, skip it.
-                if (!shouldProcess(filename)) {
-                    log("Skipping " + eachFile.toString(), Project.MSG_INFO);
-                    continue;
-                }
-
-
-                // If forced is not set then we may save ourselves some work by
-                // looking at the status flag.
-                // Otherwise, we care nothing about these statuses.
-
-                if (!isForced()) {
-                    int fileStatus = (eachFile.getStatus());
-
-                    // We try to update the status once to give StarTeam
-                    // another chance.
-                    if (fileStatus == Status.MERGE || fileStatus == Status.UNKNOWN) {
-                        eachFile.updateStatus(true, true);
-                        fileStatus = (eachFile.getStatus());
-                    }
-                    if (fileStatus == Status.CURRENT) {
-                        log("Not processing " + eachFile.toString()
-                                + " as it is current.",
-                                Project.MSG_INFO);
-                        continue;
-                    }
-                }
-
-
-                // Check out anything else.
-                // Just a note: StarTeam has a status for NEW which implies
-                // that there is an item  on your local machine that is not
-                // in the repository.  These are the items that show up as
-                // NOT IN VIEW in the Starteam GUI.
-                // One would think that we would want to perhaps checkin the
-                // NEW items (not in all cases! - Steve Cohen 15 Dec 2001)
-                // Unfortunately, the sdk doesn't really work, and we can't
-                // actually see  anything with a status of NEW. That is why
-                // we can just check out  everything here without worrying
-                // about losing anything.
-
-                log("Checking Out: " + (localFile.toString()), Project.MSG_INFO);
-                eachFile.checkoutTo(localFile, this.lockStatus,
-                        true, true, true);
-            }
-
-            // Now we recursively call this method on all sub folders in this
-            // folder unless recursive attribute is off.
-            Folder[] subFolders = starteamFolder.getSubFolders();
-            for (int i = 0; i < subFolders.length; i++) {
-                java.io.File targetSubfolder =
-                        new java.io.File(targetFolder, subFolders[i].getName());
-                delistLocalFile(localFiles, targetSubfolder);
-                if (isRecursive()) {
-                    visit(subFolders[i], targetSubfolder);
-                }
-            }
-
-            if (this.deleteUncontrolled) {
-                deleteUncontrolledItems(localFiles);
-            }
-
-        } catch (IOException e) {
-            throw new BuildException(e);
-        }
-    }
-
-
-    /**
-     * Deletes everything on the local machine that is not in the repository.
-     *
-     * @param localFiles the list of filenames whose elements are to be deleted
-     */
-    private void deleteUncontrolledItems(Hashtable localFiles) {
-        try {
-            Enumeration e = localFiles.keys();
-            while (e.hasMoreElements()) {
-                java.io.File file =
-                        new java.io.File(e.nextElement().toString());
-                delete(file);
-            }
-        } catch (SecurityException e) {
-            log("Error deleting file: " + e, Project.MSG_ERR);
-        }
-    }
-
-    /**
-     * Deletes the file from the local drive.
-     * @param file the file or directory to delete.
-     * @return true if the file was successfully deleted otherwise false.
-     */
-    private boolean delete(java.io.File file) {
-        // If the current file is a Directory, we need to delete all
-        // of its children as well.
-        if (file.isDirectory()) {
-            java.io.File[] children = file.listFiles();
-            for (int i = 0; i < children.length; i++) {
-                delete(children[i]);
-            }
-        }
-
-        log("Deleting: " + file.getAbsolutePath(), Project.MSG_INFO);
-        return file.delete();
-    }
-
-
-}
-
-
-
-
-
-
-
-
-
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/starteam/StarTeamLabel.java b/src/main/org/apache/tools/ant/taskdefs/optional/starteam/StarTeamLabel.java
deleted file mode 100644
index 6e11a59..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/starteam/StarTeamLabel.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.starteam;
-
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-
-import com.starbase.starteam.Label;
-import com.starbase.starteam.View;
-import com.starbase.starteam.ViewConfiguration;
-import com.starbase.util.OLEDate;
-
-import org.apache.tools.ant.BuildException;
-
-/**
- * This class logs into StarTeam and creates a label for the repository at the
- * time of the last successful build.
- * Ant Usage:
- * <pre>
- * &lt;taskdef name="stlabel"
- *          classname="org.apache.tools.ant.taskdefs.optional.starteam.StarTeamLabel"/&lt;
- *     &lt;stlabel
- * label="1.0" lastbuild="20011514100000" description="Successful Build"
- * username="BuildMaster" password="ant"
- * starteamurl="server:port/project/view"/&gt;
- * </pre>
- *
- * @author Christopher Charlier, ThoughtWorks, Inc. 2001
- * @author <a href="mailto:jcyip@thoughtworks.com">Jason Yip</a>
- * @see <A HREF="http://www.starbase.com/">StarBase Web Site</A>
- *
- * @ant.task name="stlabel" category="scm"
- */
-public class StarTeamLabel extends StarTeamTask {
-
-    /**
-     * The name of the label to be set in Starteam.
-     */
-    private String labelName;
-
-    /**
-     * The label description to be set in Starteam.
-     */
-    private String description;
-
-    /**
-     * The time of the last successful. The new label will be a snapshot of the
-     * repository at this time. String should be formatted as "yyyyMMddHHmmss"
-     */
-    private OLEDate lastBuild = null;
-
-    private static final SimpleDateFormat DATE_FORMAT =
-            new SimpleDateFormat("yyyyMMddHHmmss");
-
-
-    public void setLabel(String label) {
-        this.labelName = label;
-    }
-
-    public void setDescription(String description) {
-        this.description = description;
-    }
-
-    public void setLastBuild(String lastbuild) throws BuildException {
-        try {
-            Date lastBuildTime = DATE_FORMAT.parse(lastbuild);
-            this.lastBuild = new OLEDate(lastBuildTime);
-        } catch (ParseException e) {
-            throw new BuildException("Unable to parse the date '" + lastbuild + "'", e);
-        }
-    }
-
-    /**
-     * This method does the work of creating the new view and checking it into
-     * Starteam.
-     *
-     */
-    public void execute() throws BuildException {
-
-        View snapshot = openView();
-
-        // Create the new label and update the repository
-        new Label(snapshot, labelName, description, this.lastBuild, true).update();
-        log("Created Label " + labelName);
-    }
-
-    /**
-     * Override of base-class abstract function creates an
-     * appropriately configured view.  For labels this a view
-     * configured as of this.lastBuild.
-     *
-     * @param raw the unconfigured <code>View</code>
-     * @return the snapshot <code>View</code> appropriately configured.
-     */
-    protected View createSnapshotView(View raw) {
-        return new View(raw, ViewConfiguration.createFromTime(this.lastBuild));
-    }
-
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/starteam/StarTeamList.java b/src/main/org/apache/tools/ant/taskdefs/optional/starteam/StarTeamList.java
deleted file mode 100644
index f7f3910..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/starteam/StarTeamList.java
+++ /dev/null
@@ -1,218 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.starteam;
-
-import java.io.IOException;
-import java.util.Hashtable;
-
-import com.starbase.starteam.File;
-import com.starbase.starteam.Folder;
-import com.starbase.starteam.Item;
-import com.starbase.starteam.Status;
-import com.starbase.starteam.View;
-import com.starbase.starteam.ViewConfiguration;
-
-import org.apache.tools.ant.BuildException;
-
-/**
- * StarTeamList.java
- *
- *
- * Created: Tue Dec 25 06:51:14 2001
- *
- * @author <a href="mailto:stevec@ignitesports.com">Steve Cohen</a>
- * @version 1.0
- *
- * @ant.task name="stlist" category="scm"
- */
-
-public class StarTeamList extends TreeBasedTask {
-    /**
-     * Sets the label StarTeam is to be listed.
-     *
-     * @param label the label to be listed
-     */
-    public void setLabel(String label) {
-        _setLabel(label);
-    }
-
-    /**
-     * Override of base-class abstract function creates an
-     * appropriately configured view for checkoutlists - either
-     * the current view or a view from this.label.
-     *
-     * @param raw the unconfigured <code>View</code>
-     * @return the snapshot <code>View</code> appropriately configured.
-     */
-    protected View createSnapshotView(View raw) {
-
-        int labelID = getLabelID(raw);
-
-        // if a label has been supplied, use it to configure the view
-        // otherwise use current view
-        if (labelID >= 0) {
-            return new View(raw, ViewConfiguration.createFromLabel(labelID));
-        } else {
-            return new View(raw, ViewConfiguration.createTip());
-        }
-    }
-
-    /**
-     * Required base-class abstract function implementation is a no-op here.
-     *
-     * @exception BuildException not thrown in this implementation
-     */
-    protected void testPreconditions() throws BuildException {
-        //intentionally do nothing.
-    }
-
-    /**
-     * Implements base-class abstract function to perform the checkout
-     * operation on the files in each folder of the tree.
-     *
-     * @param starteamFolder the StarTeam folder from which files to be
-     *                       checked out
-     * @param targetFolder the local mapping of rootStarteamFolder
-     */
-    protected void visit(Folder starteamFolder, java.io.File targetFolder)
-            throws BuildException {
-        try {
-            if (null == getRootLocalFolder()) {
-                log("Folder: " + starteamFolder.getName() + " (Default folder: " + targetFolder + ")");
-            } else {
-                log("Folder: " + starteamFolder.getName() + " (Local folder: " + targetFolder + ")");
-            }
-            Hashtable localFiles = listLocalFiles(targetFolder);
-
-            // For all Files in this folder, we need to check
-            // if there have been modifications.
-
-            Item[] files = starteamFolder.getItems("File");
-            for (int i = 0; i < files.length; i++) {
-                File eachFile = (File) files[i];
-                String filename = eachFile.getName();
-                java.io.File localFile =
-                        new java.io.File(targetFolder, filename);
-
-                delistLocalFile(localFiles, localFile);
-
-
-
-                // If the file doesn't pass the include/exclude tests, skip it.
-                if (!shouldProcess(filename)) {
-                    continue;
-                }
-
-                list(eachFile, localFile);
-            }
-
-
-            // Now we recursively call this method on all sub folders in this
-            // folder unless recursive attribute is off.
-            Folder[] subFolders = starteamFolder.getSubFolders();
-            for (int i = 0; i < subFolders.length; i++) {
-                java.io.File targetSubfolder =
-                        new java.io.File(targetFolder, subFolders[i].getName());
-                delistLocalFile(localFiles, targetSubfolder);
-                if (isRecursive()) {
-                    visit(subFolders[i], targetSubfolder);
-                }
-            }
-
-        } catch (IOException e) {
-            throw new BuildException(e);
-        }
-    }
-
-    protected void list(File reposFile, java.io.File localFile)
-            throws IOException {
-        StringBuffer b = new StringBuffer();
-        if (null == getRootLocalFolder()) {
-            // status is irrelevant to us if we have specified a
-            // root local folder.
-            b.append(pad(Status.name(reposFile.getStatus()), 12)).append(' ');
-        }
-        b.append(pad(getUserName(reposFile.getLocker()), 20))
-                .append(' ')
-                .append(reposFile.getModifiedTime().toString())
-                .append(rpad(String.valueOf(reposFile.getSize()), 9))
-                .append(' ')
-                .append(reposFile.getName());
-
-        log(b.toString());
-    }
-
-    private static final String blankstr = blanks(30);
-
-    private static String blanks(int len) {
-        StringBuffer b = new StringBuffer();
-        for (int i = 0; i < len; i++) {
-            b.append(' ');
-        }
-        return b.toString();
-    }
-
-    protected static String pad(String s, int padlen) {
-        return (s + blankstr).substring(0, padlen);
-    }
-
-    protected static String rpad(String s, int padlen) {
-        s = blankstr + s;
-        return s.substring(s.length() - padlen);
-    }
-
-
-}// StarTeamList
-
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/starteam/StarTeamTask.java b/src/main/org/apache/tools/ant/taskdefs/optional/starteam/StarTeamTask.java
deleted file mode 100644
index c6f6f4d..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/starteam/StarTeamTask.java
+++ /dev/null
@@ -1,364 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.starteam;
-
-import java.util.StringTokenizer;
-
-import com.starbase.starteam.Server;
-import com.starbase.starteam.StarTeamFinder;
-import com.starbase.starteam.User;
-import com.starbase.starteam.View;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Task;
-
-/**
- * Common super class for all StarTeam tasks.
- * At this level of the hierarchy we are concerned only with obtaining a
- * connection to the StarTeam server.  The subclass <code>TreeBasedTask</code>,
- * also abstract defines the tree-walking behavior common to many subtasks.
- *
- * @see TreeBasedTask
- * @author <a href="mailto:jcyip@thoughtworks.com">Jason Yip</a>
- * @version 1.1
- * @author <a href="mailto:stevec@ignitesports.com">Steve Cohen</a>
- */
-
-public abstract class StarTeamTask extends Task {
-
-    // ATTRIBUTES
-
-    /**
-     * The username of the connection
-     */
-    private String userName;
-
-    /**
-     * The username of the connection
-     */
-    private String password;
-
-    /**
-     * name of Starteam server to connect to
-     */
-    private String servername;
-
-    /**
-     * port of Starteam server to connect to
-     */
-    private String serverport;
-
-    /**
-     * name of Starteam project to connect to
-     */
-    private String projectname;
-
-    /**
-     * name of Starteam view to connect to
-     */
-    private String viewname;
-
-    /**
-     *The starteam server through which all activities will be done.
-     */
-    private Server server = null;
-
-    /////////////////////////////////////////////////////////
-    // GET/SET methods.
-    // Setters, of course are where ant user passes in values.
-    /////////////////////////////////////////////////////////
-
-    /**
-     * Set the name of StarTeamServer
-     *
-     * @param servername a <code>String</code> value
-     * @see #setURL(String)
-     */
-    public void setServername(String servername) {
-        this.servername = servername;
-    }
-
-    /**
-     * returns the name of the StarTeamServer
-     *
-     * @return the name of the StarTeam server
-     * @see #getURL()
-     */
-    public String getServername() {
-        return this.servername;
-    }
-
-    /**
-     * set the port number of the StarTeam connection
-     *
-     * @param serverport port number to be set
-     * @see #setURL(String)
-     */
-    public void setServerport(String serverport) {
-        this.serverport = serverport;
-    }
-
-    /**
-     * returns the port number of the StarTeam connection
-     *
-     * @return the port number of the StarTeam connection
-     * @see #getURL()
-     */
-    public String getServerport() {
-        return this.serverport;
-    }
-
-    /**
-     * set the name of the StarTeam project to be acted on
-     *
-     * @param projectname the name of the StarTeam project to be acted on
-     * @see #setURL(String)
-     */
-    public void setProjectname(String projectname) {
-        this.projectname = projectname;
-    }
-
-    /**
-     * returns the name of the StarTeam project to be acted on
-     *
-     * @return the name of the StarTeam project to be acted on
-     * @see #getURL()
-     */
-    public String getProjectname() {
-        return this.projectname;
-    }
-
-    /**
-     * set the name of the StarTeam view to be acted on
-     *
-     * @param projectname the name of the StarTeam view to be acted on
-     * @see #setURL(String)
-     */
-    public void setViewname(String viewname) {
-        this.viewname = viewname;
-    }
-
-    /**
-     * returns the name of the StarTeam view to be acted on
-     *
-     * @return the name of the StarTeam view to be acted on
-     * @see #getURL()
-     */
-    public String getViewname() {
-        return this.viewname;
-    }
-
-
-    /**
-     * This is a convenience method for setting the server name, server port,
-     * project name and project folder at one shot.
-     *
-     * @param url a <code>String</code> of the form
-     *             "servername:portnum/project/view"
-     * @see #setServername(String)
-     * @see #setServerport(String)
-     * @see #setProjectname(String)
-     * @see #setViewname(String)
-     */
-    public void setURL(String url) {
-        StringTokenizer t = new StringTokenizer(url, "/");
-        if (t.hasMoreTokens()) {
-            String unpw = t.nextToken();
-            int pos = unpw.indexOf(":");
-            if (pos > 0) {
-                this.servername = unpw.substring(0, pos);
-                this.serverport = unpw.substring(pos + 1);
-                if (t.hasMoreTokens()) {
-                    this.projectname = t.nextToken();
-                    if (t.hasMoreTokens()) {
-                        this.viewname = t.nextToken();
-                    }
-                }
-            }
-        }
-    }
-
-    /**
-     * convenience method returns whole URL at once
-     * returns
-     * as a single string
-     */
-    /**
-     * a convenience method which returns the whole StarTeam
-     * connection information as a single URL string of
-     *
-     * @return a <code>String</code> of the form
-     *         "servername:portnum/project/view"
-     * @see #getServername()
-     * @see #getServerport()
-     * @see #getProjectname()
-     * @see #getViewname()
-     */
-    public String getURL() {
-        return
-                this.servername + ":" +
-                this.serverport + "/" +
-                this.projectname + "/" +
-                ((null == this.viewname) ? "" : this.viewname);
-    }
-
-    /**
-     * set the name of the StarTeam user, needed for the connection
-     *
-     * @param userName name of the user to be logged in
-     */
-    public void setUserName(String userName) {
-        this.userName = userName;
-    }
-
-    /**
-     * returns the name of the StarTeam user
-     *
-     * @return the name of the StarTeam user
-     */
-    public String getUserName() {
-        return this.userName;
-    }
-
-    /**
-     * set the password to be used for login.
-     *
-     * @param password the password to be used for login
-     */
-    public void setPassword(String password) {
-        this.password = password;
-    }
-
-    /**
-     * returns the password used for login
-     *
-     * @return the password used for login
-     */
-    public String getPassword() {
-        return this.password;
-    }
-
-    /**
-     * returns a reference to the server which may be used for informational
-     * purposes by subclasses.
-     *
-     * @return a reference to the server
-     */
-    protected Server getServer() {
-        return this.server;
-    }
-
-    /**
-     * Derived classes must override <code>createSnapshotView</code>
-     * defining the kind of configured view appropriate to its task.
-     *
-     * @param rawview the unconfigured <code>View</code>
-     * @return the snapshot <code>View</code> appropriately configured.
-     */
-    protected abstract View createSnapshotView(View rawview);
-
-    /**
-     * All subclasses will call on this method to open the view needed for
-     * processing.  This method also saves a reference to the
-     * <code>Server</code> that may be accessed for information at various
-     * points in the process.
-     *
-     * @return the <code>View</code> that will be used for processing.
-     * @see #createSnapshotView(View)
-     * @see #getServer()
-     */
-    protected View openView() throws BuildException {
-        View view =
-                StarTeamFinder.openView(getUserName() + ":"
-                + getPassword()
-                + "@" + getURL());
-
-        if (null == view) {
-            throw new BuildException("Cannot find view" + getURL() +
-                    " in repository()");
-        }
-
-        View snapshot = createSnapshotView(view);
-        this.server = snapshot.getServer();
-        return snapshot;
-    }
-
-    /**
-     * Returns the name of the user with the supplied ID or a blank string
-     * if user not found.
-     *
-     * @param userID a user's ID
-     * @return the name of the user with ID userID
-     */
-    protected String getUserName(int userID) {
-        User u = this.server.getUser(userID);
-        if (null == u) {
-            return "";
-        }
-        return u.getName();
-    }
-
-}
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/starteam/TreeBasedTask.java b/src/main/org/apache/tools/ant/taskdefs/optional/starteam/TreeBasedTask.java
deleted file mode 100644
index 8d7851e..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/starteam/TreeBasedTask.java
+++ /dev/null
@@ -1,495 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.starteam;
-
-import java.util.Hashtable;
-import java.util.StringTokenizer;
-
-import com.starbase.starteam.Folder;
-import com.starbase.starteam.Label;
-import com.starbase.starteam.StarTeamFinder;
-import com.starbase.starteam.View;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.DirectoryScanner;
-
-/**
- * FileBasedTask.java
- * This abstract class is the base for any tasks that are tree-based, that
- * is, for tasks which iterate over a tree of folders in StarTeam which
- * is reflected in a tree of folder the local machine.
- *
- * This class provides the tree-iteration functionality.  Derived classes
- * will implement their specific task functionality by the visitor pattern,
- * specifically by implementing the method
- * <code>visit(Folder rootStarteamFolder, java.io.File rootLocalFolder)</code>
- *
- * Created: Sat Dec 15 16:55:19 2001
- *
- * @author <a href="mailto:stevec@ignitesports.com">Steve Cohen</a>
- * @version 1.0
- * @see <A HREF="http://www.starbase.com/">StarBase Web Site</A>
- */
-
-public abstract class TreeBasedTask extends StarTeamTask {
-
-
-    ///////////////////////////////////////////////////////////////
-    // default values for attributes.
-    ///////////////////////////////////////////////////////////////
-    /**
-     * This constant sets the filter to include all files. This default has
-     * the same result as <CODE>setIncludes("*")</CODE>.
-     *
-     * @see #getIncludes()
-     * @see #setIncludes(String includes)
-     */
-    public static final String DEFAULT_INCLUDESETTING = "*";
-
-    /**
-     * This disables the exclude filter by default. In other words, no files
-     * are excluded. This setting is equivalent to
-     * <CODE>setExcludes(null)</CODE>.
-     *
-     * @see #getExcludes()
-     * @see #setExcludes(String excludes)
-     */
-    public static final String DEFAULT_EXCLUDESETTING = null;
-
-    //ATTRIBUTES settable from ant.
-
-    /**
-     * The root folder of the operation in StarTeam.
-     */
-    private String rootStarteamFolder = "/";
-
-    /**
-     * The local folder corresponding to starteamFolder.  If not specified
-     * the Star Team defalt folder will be used.
-     */
-    private String rootLocalFolder = null;
-
-    /**
-     * All files that fit this pattern are checked out.
-     */
-    private String includes = DEFAULT_INCLUDESETTING;
-
-    /**
-     * All files fitting this pattern are ignored.
-     */
-    private String excludes = DEFAULT_EXCLUDESETTING;
-
-    /**
-     * StarTeam label on which to perform task.
-     */
-    private String label = null;
-
-    /**
-     * Set recursion to false to check out files in only the given folder
-     * and not in its subfolders.
-     */
-    private boolean recursive = true;
-
-    /**
-     * If forced set to true, files in the target directory will
-     * be processed regardless of status in the repository.
-     * Usually this should be  true if rootlocalfolder is set
-     * because status will be relative to the default folder, not
-     * to the one being processed.
-     */
-    private boolean forced = false;
-
-
-    ///////////////////////////////////////////////////////////////
-    // GET/SET methods.
-    // Setters, of course are where ant user passes in values.
-    ///////////////////////////////////////////////////////////////
-
-    /**
-     * Set the root folder in the Starteam repository for this operation
-     * @param rootStarteamFolder the root folder
-     */
-    public void setRootStarteamFolder(String rootStarteamFolder) {
-        this.rootStarteamFolder = rootStarteamFolder;
-    }
-
-    /**
-     * returns the root folder in the Starteam repository
-     * used for this operation
-     * @return the root folder in use
-     */
-    public String getRootStarteamFolder() {
-        return this.rootStarteamFolder;
-    }
-
-    /**
-     * Set the local folder corresponding to the
-     * starteam folder for this operation.
-     * If not specified, the StarTeam default will be used
-     * the default is used.
-     * @param rootLocalFolder the local folder that will mirror
-     *                        this.rootStarteamFolder
-     */
-    public void setRootLocalFolder(String rootLocalFolder) {
-        this.rootLocalFolder = rootLocalFolder;
-    }
-
-    /**
-     * Returns the local folder specified by the user,
-     * corresponding to the starteam folder for this operation.
-     * or null if not specified
-     * @return the local folder that mirrors this.rootStarteamFolder
-     */
-    public String getRootLocalFolder() {
-        return this.rootLocalFolder;
-    }
-
-    /**
-     * sets the pattern of files to be included.  See setExcludes() for a
-     * description
-     * @param includes A string of filter patterns to include. Separate the
-     *                 patterns by spaces.
-     * @see #getIncludes()
-     * @see #setExcludes(String excludes)
-     * @see #getExcludes()
-     */
-    public void setIncludes(String includes) {
-        this.includes = includes;
-    }
-
-    /**
-     * Gets the patterns from the include filter. Rather that duplicate the
-     * details of AntStarTeanCheckOut's filtering here, refer to these
-     * links:
-     *
-     * @return A string of filter patterns separated by spaces.
-     * @see #setIncludes(String includes)
-     * @see #setExcludes(String excludes)
-     * @see #getExcludes()
-     */
-    public String getIncludes() {
-        return includes;
-    }
-
-    /**
-     * Sets the exclude filter. When filtering files, AntStarTeamCheckOut
-     * uses an unmodified version of <CODE>DirectoryScanner</CODE>'s
-     * <CODE>match</CODE> method, so here are the patterns straight from the
-     * Ant source code:
-     * <BR><BR>
-     * Matches a string against a pattern. The pattern contains two special
-     * characters:
-     * <BR>'*' which means zero or more characters,
-     * <BR>'?' which means one and only one character.
-     * <BR><BR>
-     *  For example, if you want to check out all files except .XML and
-     * .HTML files, you would put the following line in your program:
-     * <CODE>setExcludes("*.XML,*.HTML");</CODE>
-     * Finally, note that filters have no effect on the <B>directories</B>
-     * that are scanned; you could not skip over all files in directories
-     * whose names begin with "project," for instance.
-     * <BR><BR>
-     * Treatment of overlapping inlcudes and excludes: To give a simplistic
-     * example suppose that you set your include filter to "*.htm *.html"
-     * and your exclude filter to "index.*". What happens to index.html?
-     * AntStarTeamCheckOut will not check out index.html, as it matches an
-     * exclude filter ("index.*"), even though it matches the include
-     * filter, as well.
-     * <BR><BR>
-     * Please also read the following sections before using filters:
-     *
-     * @param excludes A string of filter patterns to exclude. Separate the
-     *                 patterns by spaces.
-     * @see #setIncludes(String includes)
-     * @see #getIncludes()
-     * @see #getExcludes()
-     */
-    public void setExcludes(String excludes) {
-        this.excludes = excludes;
-    }
-
-    /**
-     * Gets the patterns from the exclude filter. Rather that duplicate the
-     * details of AntStarTeanCheckOut's filtering here, refer to these
-     * links:
-     *
-     * @return A string of filter patterns separated by spaces.
-     * @see #setExcludes(String excludes)
-     * @see #setIncludes(String includes)
-     * @see #getIncludes()
-     */
-    public String getExcludes() {
-        return excludes;
-    }
-
-    /**
-     * protected function to allow subclasses to set the label (or not).
-     * sets the StarTeam label
-     *
-     * @param label name of the StarTeam label to be set
-     */
-    protected void _setLabel(String label) {
-        if (null != label) {
-            label = label.trim();
-            if (label.length() > 0) {
-                this.label = label;
-            }
-        }
-    }
-
-    /**
-     * Get the value of recursive.
-     * @return value of recursive.
-     */
-    public boolean isRecursive() {
-        return this.recursive;
-    }
-
-    /**
-     * Set the value of recursive.
-     * @param v  Value to assign to recursive.
-     */
-    public void setRecursive(boolean v) {
-        this.recursive = v;
-    }
-
-    /**
-     * Get the value of forced.
-     * @return value of forced.
-     */
-    public boolean isForced() {
-        return this.forced;
-    }
-
-    /**
-     * Set the value of forced.
-     * @param v  Value to assign to forced.
-     */
-    public void setForced(boolean v) {
-        this.forced = v;
-    }
-
-    ///////////////////////////////////////////////////////////////
-    // INCLUDE-EXCLUDE processing
-    ///////////////////////////////////////////////////////////////
-
-    /**
-     * Look if the file should be processed by the task.
-     * Don't process it if it fits no include filters or if
-     * it fits an exclude filter.
-     * @param pName the item name to look for being included.
-     * @return whether the file should be checked out or not.
-     */
-    protected boolean shouldProcess(String pName) {
-        boolean includeIt = matchPatterns(getIncludes(), pName);
-        boolean excludeIt = matchPatterns(getExcludes(), pName);
-        return (includeIt && !excludeIt);
-    }
-
-    /**
-     * Convenience method to see if a string match a one pattern
-     * in given set of space-separated patterns.
-     * @param patterns the space-separated list of patterns.
-     * @param pName the name to look for matching.
-     * @return whether the name match at least one pattern.
-     */
-    protected boolean matchPatterns(String patterns, String pName) {
-        if (patterns == null) {
-            return false;
-        }
-        StringTokenizer exStr = new StringTokenizer(patterns, ",");
-        while (exStr.hasMoreTokens()) {
-            if (DirectoryScanner.match(exStr.nextToken(), pName)) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * This method does the work of opening the supplied  Starteam view and
-     * calling the <code>visit()</code> method to perform the task.
-     *
-     * @exception BuildException if any error occurs in the processing
-     * @see <code>visit()</code>
-     */
-
-    public void execute() throws BuildException {
-        try {
-            testPreconditions();
-
-            View snapshot = openView();
-
-            // find the starteam folder specified to be the root of the
-            // operation.  Throw if it can't be found.
-            Folder starteamrootfolder =
-                    StarTeamFinder.findFolder(snapshot.getRootFolder(),
-                            this.rootStarteamFolder);
-
-            if (null == starteamrootfolder) {
-                throw new BuildException(
-                        "Unable to find root folder in repository.");
-            }
-
-            // set the local folder.
-            java.io.File localrootfolder;
-            if (null == this.rootLocalFolder) {
-                // use Star Team's default
-                localrootfolder =
-                        new java.io.File(starteamrootfolder.getPath());
-            } else {
-                // force StarTeam to use our folder
-                localrootfolder = new java.io.File(getRootLocalFolder());
-                log("overriding local folder to " + localrootfolder);
-            }
-
-            // Inspect everything in the root folder and then recursively
-            visit(starteamrootfolder, localrootfolder);
-        } catch (Exception e) {
-            throw new BuildException(e);
-        }
-    }
-
-    /**
-     * Helper method calls on the StarTeam API to retrieve an ID number
-     * for the specified view, corresponding to this.label.
-     * @param v the <code>View</code> in which to search for <code>this.label</code>
-     * @return the ID number corresponding to <code>this.label</code> or -1 if
-     *         no label was provided.
-     * @exception BuildException if <code>this.label</code> does not correspond
-     *                           to any label in the supplied view
-     */
-    protected int getLabelID(View v) throws BuildException {
-        if (null != this.label) {
-            Label[] allLabels = v.getLabels();
-            for (int i = 0; i < allLabels.length; i++) {
-                if (allLabels[i].getName().equals(this.label)) {
-                    return allLabels[i].getID();
-                }
-            }
-            throw new BuildException("Error: label "
-                    + this.label
-                    + " does not exist in view");
-        }
-        return -1;
-    }
-
-
-    /**
-     * Derived classes must override this class to define actual processing
-     * to be performed on each folder in the tree defined for the task
-     *
-     * @param rootStarteamFolder the StarTeam folderto be visited
-     * @param rootLocalFolder the local mapping of rootStarteamFolder
-     */
-    protected abstract void visit(Folder rootStarteamFolder,
-                                  java.io.File rootLocalFolder)
-            throws BuildException;
-
-
-    /**
-     * Derived classes must override this method to define tests for
-     * any preconditons required by the task.  This method is called at
-     * the beginning of the execute() method.
-     *
-     * @exception BuildException throw if any fatal error exists in the
-     * parameters supplied.  If there is a non-fatal condition, just writing
-     * to the log may be appropriate.
-     * @see <code>execute()</code>
-     */
-    protected abstract void testPreconditions() throws BuildException;
-
-    /**
-     * Gets the collection of the local file names in the supplied directory.
-     * We need to check this collection against what we find in Starteam to
-     * understand what we need to do in order to synch with the repository.
-     *
-     * @param localFolder - the local folder to scan
-     * @return an "identity" hashtable whose keys each represent a file or
-     * directory in localFolder.
-     */
-    protected static Hashtable listLocalFiles(java.io.File localFolder) {
-
-        Hashtable localFileList = new Hashtable();
-        // we can't use java 2 collections so we will use an identity
-        // Hashtable to  hold the file names.  We only care about the keys,
-        // not the values (which will all be "").
-
-        if (localFolder.exists()) {
-            String[] localFiles = localFolder.list();
-            for (int i = 0; i < localFiles.length; i++) {
-                localFileList.put(localFolder.toString() +
-                        java.io.File.separatorChar + localFiles[i], "");
-            }
-        }
-        return localFileList;
-    }
-
-    /**
-     * Removes from the collection of the local file names
-     * the supplied name of a processed file.  When we are done, only
-     * files not in StarTeam will remain in localFiles.
-     * @param localFiles a <code>Hashtable</code> value
-     * @param thisfile file to remove from list.
-     * @return true if file was removed, false if it wasn't found.
-     */
-    protected boolean delistLocalFile(Hashtable localFiles, java.io.File thisfile) {
-        return null != localFiles.remove(thisfile.toString());
-    }
-}
-
-
-
-
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/vss/MSVSS.java b/src/main/org/apache/tools/ant/taskdefs/optional/vss/MSVSS.java
deleted file mode 100644
index 670aee2..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/vss/MSVSS.java
+++ /dev/null
@@ -1,263 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.vss;
-
-
-
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.taskdefs.Execute;
-import org.apache.tools.ant.taskdefs.LogStreamHandler;
-import org.apache.tools.ant.types.Commandline;
-
-/**
- * A base class for creating tasks for executing commands on Visual SourceSafe.
- * <p>
- * The class extends the 'exec' task as it operates by executing the ss.exe program
- * supplied with SourceSafe. By default the task expects ss.exe to be in the path,
- * you can override this be specifying the ssdir attribute.
- * </p>
- * <p>
- * This class provides set and get methods for 'login' and 'vsspath' attributes. It
- * also contains constants for the flags that can be passed to SS.
- * </p>
- *
- * @author Craig Cottingham
- * @author Andrew Everitt
- */
-public abstract class MSVSS extends Task {
-
-    private String m_SSDir = "";
-    private String m_vssLogin = null;
-    private String m_vssPath = null;
-    private String m_serverPath = null;
-
-    /**
-     * Set the directory where ss.exe is located
-     *
-     * @param dir the directory containing ss.exe
-     */
-    public final void setSsdir(String dir) {
-        m_SSDir = Project.translatePath(dir);
-    }
-    
-    /**
-     * Builds and returns the command string to execute ss.exe
-     */
-    public final String getSSCommand() {
-        String toReturn = m_SSDir;
-        if (!toReturn.equals("") && !toReturn.endsWith("\\")) {
-            toReturn += "\\";
-        }
-        toReturn += SS_EXE;
-        
-        return toReturn;
-    }
-
-    /**
-     * Set the login to use when accessing vss.
-     * <p>
-     * Should be formatted as username,password
-     *
-     * @param login the login string to use
-     */
-    public final void setLogin(String login) {
-        m_vssLogin = login;
-    }
-
-    /**
-     * @return the appropriate login command if the 'login' attribute was specified, otherwise an empty string
-     */
-    public void getLoginCommand(Commandline cmd) {
-        if (m_vssLogin == null) {
-            return;
-        } else {
-            cmd.createArgument().setValue(FLAG_LOGIN + m_vssLogin);
-        }
-    }
-
-    /**
-     * Set the path to the item in vss to operate on.
-     * <p>
-     * Ant can't cope with a '$' sign in an attribute so we have to add it here.
-     * Also we strip off any 'vss://' prefix which is an XMS special and should probably be removed!
-     *
-     * @param vssPath
-     */
-    public final void setVsspath(String vssPath) {
-        if (vssPath.startsWith("vss://")) {
-            m_vssPath = PROJECT_PREFIX + vssPath.substring(5);
-        } else {
-            m_vssPath = PROJECT_PREFIX + vssPath;
-        }
-    }
-
-    /**
-     * @return m_vssPath
-     */
-    public String getVsspath() {
-        return m_vssPath;
-    }
-
-    /**
-     * Set the path to the location of the ss.ini
-     *
-     * @param serverPath
-     */
-    public final void setServerpath(String serverPath) {
-        m_serverPath = serverPath;
-    }
-
-    protected int run(Commandline cmd) {
-        try {
-            Execute exe = new Execute(new LogStreamHandler(this, 
-                                                           Project.MSG_INFO,
-                                                           Project.MSG_WARN));
-
-            // If location of ss.ini is specified we need to set the 
-            // environment-variable SSDIR to this value
-            if (m_serverPath != null) {
-                String[] env = exe.getEnvironment();
-                if (env == null) {
-                    env = new String[0];
-                }
-                String[] newEnv = new String[env.length + 1];
-                for (int i = 0; i < env.length ; i++) {
-                    newEnv[i] = env[i];
-                }
-                newEnv[env.length] = "SSDIR=" + m_serverPath;
-
-                exe.setEnvironment(newEnv);
-            }
-            
-            exe.setAntRun(project);
-            exe.setWorkingDirectory(project.getBaseDir());
-            exe.setCommandline(cmd.getCommandline());
-            return exe.execute();
-        } catch (java.io.IOException e) {
-            throw new BuildException(e, location);
-        }
-    }
-
-    /**
-     * Constant for the thing to execute
-     */
-    private static final String SS_EXE = "ss";
-    /** */
-    public static final String PROJECT_PREFIX = "$";
-
-    /**
-     * The 'CP' command
-     */
-    public static final String COMMAND_CP = "CP";
-    /**
-     * The 'Add' command
-     */
-    public static final String COMMAND_ADD = "Add";
-    /**
-     * The 'Get' command
-     */
-    public static final String COMMAND_GET = "Get";
-    /**
-     * The 'Checkout' command
-     */
-    public static final String COMMAND_CHECKOUT = "Checkout";
-    /**
-     * The 'Checkin' command
-     */
-    public static final String COMMAND_CHECKIN = "Checkin";
-    /**
-     * The 'Label' command
-     */
-    public static final String COMMAND_LABEL = "Label";
-    /**
-     * The 'History' command
-     */
-    public static final String COMMAND_HISTORY = "History";
-    /** 
-     * The 'Create' command 
-     */
-    public static final String COMMAND_CREATE = "Create";
-
-
-    /** */
-    public static final String FLAG_LOGIN = "-Y";
-    /** */
-    public static final String FLAG_OVERRIDE_WORKING_DIR = "-GL";
-    /** */
-    public static final String FLAG_AUTORESPONSE_DEF = "-I-";
-    /** */
-    public static final String FLAG_AUTORESPONSE_YES = "-I-Y";
-    /** */
-    public static final String FLAG_AUTORESPONSE_NO = "-I-N";
-    /** */
-    public static final String FLAG_RECURSION = "-R";
-    /** */
-    public static final String FLAG_VERSION = "-V";
-    /** */
-    public static final String FLAG_VERSION_DATE = "-Vd";
-    /** */
-    public static final String FLAG_VERSION_LABEL = "-VL";
-    /** */
-    public static final String FLAG_WRITABLE = "-W";
-    /** */
-    public static final String VALUE_NO = "-N";
-    /** */
-    public static final String VALUE_YES = "-Y";
-    /** */
-    public static final String FLAG_QUIET = "-O-";
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/vss/MSVSSADD.java b/src/main/org/apache/tools/ant/taskdefs/optional/vss/MSVSSADD.java
deleted file mode 100644
index fcd0dda..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/vss/MSVSSADD.java
+++ /dev/null
@@ -1,216 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.vss;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.types.Commandline;
-import org.apache.tools.ant.types.Path;
-
-/**
- * Task to perform Add commands to Microsoft Visual Source Safe.
- * Based on the VSS Checkin code by Martin Poeschl
- *
- * @author Nigel Magnay
- */
-public class MSVSSADD extends MSVSS {
-
-    private String m_LocalPath = null;
-    private boolean m_Recursive = false;
-    private boolean m_Writable = false;
-    private String m_AutoResponse = null;
-    private String m_Comment = "-";
-
-    /**
-     * Executes the task.
-     * <p>
-     * Builds a command line to execute ss and then calls Exec's run method
-     * to execute the command line.
-     */
-    public void execute() throws BuildException {
-        Commandline commandLine = new Commandline();
-        int result = 0;
-
-         // first off, make sure that we've got a command and a localPath ...
-        if (getLocalPath() == null) {
-            String msg = "localPath attribute must be set!";
-            throw new BuildException(msg, location);
-        }
-
-        // now look for illegal combinations of things ...
-
-        // build the command line from what we got the format is
-        // ss Add VSS items [-B] [-C] [-D-] [-H] [-I-] [-K] [-N] [-O] [-R] [-W] [-Y] [-?]
-        // as specified in the SS.EXE help
-        commandLine.setExecutable(getSSCommand());
-        commandLine.createArgument().setValue(COMMAND_ADD);
-
-        // VSS items
-        commandLine.createArgument().setValue(getLocalPath());        
-        // -I- or -I-Y or -I-N
-        getAutoresponse(commandLine);
-        // -R
-        getRecursiveCommand(commandLine);
-        // -W
-        getWritableCommand(commandLine);
-        // -Y
-        getLoginCommand(commandLine);
-        // -C
-        commandLine.createArgument().setValue("-C" + getComment());
-
-        result = run(commandLine);
-        if (result != 0) {
-            String msg = "Failed executing: " + commandLine.toString();
-            throw new BuildException(msg, location);
-        }
-    }
-
-    /**
-     * Set behaviour recursive or non-recursive
-     */
-    public void setRecursive(boolean recursive) {
-        m_Recursive = recursive;
-    }
-
-    /**
-     * @return the 'recursive' command if the attribute was 'true', otherwise an empty string
-     */
-    public void getRecursiveCommand(Commandline cmd) {
-        if (!m_Recursive) {
-            return;
-        } else {
-            cmd.createArgument().setValue(FLAG_RECURSION);
-        }
-    }
-
-    /**
-     * Set behaviour, used in get command to make files that are 'got' writable
-     */
-    public final void setWritable(boolean argWritable) {
-        m_Writable = argWritable;
-    }
-
-    /**
-     * @return the 'make writable' command if the attribute was 'true', otherwise an empty string
-     */
-    public void getWritableCommand(Commandline cmd) {
-        if (!m_Writable) {
-            return;
-        } else {
-            cmd.createArgument().setValue(FLAG_WRITABLE);
-        }
-    }
-
-    public void setAutoresponse(String response){
-        if (response.equals("") || response.equals("null")) {
-            m_AutoResponse = null;
-        } else {
-            m_AutoResponse = response;
-        }
-    }
-
-    /**
-     * Checks the value set for the autoResponse.
-     * if it equals "Y" then we return -I-Y
-     * if it equals "N" then we return -I-N
-     * otherwise we return -I
-     */
-    public void getAutoresponse(Commandline cmd) {
-
-        if (m_AutoResponse == null) {
-            cmd.createArgument().setValue(FLAG_AUTORESPONSE_DEF);
-        } else if (m_AutoResponse.equalsIgnoreCase("Y")) {
-            cmd.createArgument().setValue(FLAG_AUTORESPONSE_YES);
-
-        } else if (m_AutoResponse.equalsIgnoreCase("N")) {
-            cmd.createArgument().setValue(FLAG_AUTORESPONSE_NO);
-        } else {
-            cmd.createArgument().setValue(FLAG_AUTORESPONSE_DEF);
-        } // end of else
-
-    }
-
-    /**
-     * Sets the comment to apply in SourceSafe.
-     * <p>
-     * If this is null or empty, it will be replaced with "-" which
-     * is what SourceSafe uses for an empty comment.
-     */
-    public void setComment(String comment) {
-        if (comment.equals("") || comment.equals("null")) {
-            m_Comment = "-";
-        } else {
-            m_Comment = comment;
-        }
-    }
-
-    /**
-     * Gets the comment to be applied.
-     * @return the comment to be applied.
-     */
-    public String getComment() {
-        return m_Comment;
-    }
-
-    /**
-     * Set the local path.
-     */
-    public void setLocalpath(Path localPath) {
-        m_LocalPath = localPath.toString();
-    }
-
-    public String getLocalPath() {
-        return m_LocalPath;
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/vss/MSVSSCHECKIN.java b/src/main/org/apache/tools/ant/taskdefs/optional/vss/MSVSSCHECKIN.java
deleted file mode 100644
index fdce2fd..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/vss/MSVSSCHECKIN.java
+++ /dev/null
@@ -1,244 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.vss;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.types.Commandline;
-import org.apache.tools.ant.types.Path;
-
-import java.io.File;
-
-/**
- * Task to perform CheckIn commands to Microsoft Visual Source Safe.
- *
- * @author Martin Poeschl
- *
- * @ant.task name="vsscheckin" category="scm"
- */
-public class MSVSSCHECKIN extends MSVSS {
-
-    private String m_LocalPath = null;
-    private boolean m_Recursive = false;
-    private boolean m_Writable = false;
-    private String m_AutoResponse = null;
-    private String m_Comment = "-";
-
-    /**
-     * Executes the task.
-     * <p>
-     * Builds a command line to execute ss and then calls Exec's run method
-     * to execute the command line.
-     */
-    public void execute() throws BuildException {
-        Commandline commandLine = new Commandline();
-        int result = 0;
-
-        // first off, make sure that we've got a command and a vssdir ...
-        if (getVsspath() == null) {
-            String msg = "vsspath attribute must be set!";
-            throw new BuildException(msg, location);
-        }
-
-        // now look for illegal combinations of things ...
-
-        // build the command line from what we got the format is
-        // ss Checkin VSS items [-H] [-C] [-I-] [-N] [-O] [-R] [-W] [-Y] [-?]
-        // as specified in the SS.EXE help
-        commandLine.setExecutable(getSSCommand());
-        commandLine.createArgument().setValue(COMMAND_CHECKIN);
-
-        // VSS items
-        commandLine.createArgument().setValue(getVsspath());
-        // -GL
-        getLocalpathCommand(commandLine);
-        // -I- or -I-Y or -I-N
-        getAutoresponse(commandLine);
-        // -R
-        getRecursiveCommand(commandLine);
-        // -W
-        getWritableCommand(commandLine);
-        // -Y
-        getLoginCommand(commandLine);
-        // -C
-        commandLine.createArgument().setValue("-C" + getComment());
-
-        result = run(commandLine);
-        if (result != 0) {
-            String msg = "Failed executing: " + commandLine.toString();
-            throw new BuildException(msg, location);
-        }
-    }
-
-    /**
-     * Set the local path.
-     */
-    public void setLocalpath(Path localPath) {
-        m_LocalPath = localPath.toString();
-    }
-
-    /**
-     * Builds and returns the -GL flag command if required.
-     * <p>
-     * The localpath is created if it didn't exist
-     */
-    public void getLocalpathCommand(Commandline cmd) {
-        if (m_LocalPath == null) {
-            return;
-        } else {
-            // make sure m_LocalDir exists, create it if it doesn't
-            File dir = project.resolveFile(m_LocalPath);
-            if (!dir.exists()) {
-                boolean done = dir.mkdirs();
-                if (!done) {
-                    String msg = "Directory " + m_LocalPath 
-                        + " creation was not " 
-                        + "succesful for an unknown reason";
-                    throw new BuildException(msg, location);
-                }
-                project.log("Created dir: " + dir.getAbsolutePath());
-            }
-
-            cmd.createArgument().setValue(FLAG_OVERRIDE_WORKING_DIR 
-                + m_LocalPath);
-        }
-    }
-
-    /**
-     * Set behaviour recursive or non-recursive
-     */
-    public void setRecursive(boolean recursive) {
-        m_Recursive = recursive;
-    }
-
-    /**
-     * @return the 'recursive' command if the attribute was 'true', otherwise an empty string
-     */
-    public void getRecursiveCommand(Commandline cmd) {
-        if (!m_Recursive) {
-            return;
-        } else {
-            cmd.createArgument().setValue(FLAG_RECURSION);
-        }
-    }
-
-    /**
-     * Set behaviour, used in get command to make files that are 'got' writable
-     */
-    public final void setWritable(boolean argWritable) {
-        m_Writable = argWritable;
-    }
-
-    /**
-     * @return the 'make writable' command if the attribute was 'true', otherwise an empty string
-     */
-    public void getWritableCommand(Commandline cmd) {
-        if (!m_Writable) {
-            return;
-        } else {
-            cmd.createArgument().setValue(FLAG_WRITABLE);
-        }
-    }
-
-    public void setAutoresponse(String response){
-        if (response.equals("") || response.equals("null")) {
-            m_AutoResponse = null;
-        } else {
-            m_AutoResponse = response;
-        }
-    }
-
-    /**
-     * Checks the value set for the autoResponse.
-     * if it equals "Y" then we return -I-Y
-     * if it equals "N" then we return -I-N
-     * otherwise we return -I
-     */
-    public void getAutoresponse(Commandline cmd) {
-
-        if (m_AutoResponse == null) {
-            cmd.createArgument().setValue(FLAG_AUTORESPONSE_DEF);
-        } else if (m_AutoResponse.equalsIgnoreCase("Y")) {
-            cmd.createArgument().setValue(FLAG_AUTORESPONSE_YES);
-
-        } else if (m_AutoResponse.equalsIgnoreCase("N")) {
-            cmd.createArgument().setValue(FLAG_AUTORESPONSE_NO);
-        } else {
-            cmd.createArgument().setValue(FLAG_AUTORESPONSE_DEF);
-        } // end of else
-
-    }
-
-    /**
-     * Set the comment to apply in SourceSafe.
-     * <p>
-     * If this is null or empty, it will be replaced with "-" which
-     * is what SourceSafe uses for an empty comment.
-     */
-    public void setComment(String comment) {
-        if (comment.equals("") || comment.equals("null")) {
-            m_Comment = "-";
-        } else {
-            m_Comment = comment;
-        }
-    }
-
-    /**
-     * Gets the comment to be applied.
-     * @return the comment to be applied.
-     */
-    public String getComment() {
-        return m_Comment;
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/vss/MSVSSCHECKOUT.java b/src/main/org/apache/tools/ant/taskdefs/optional/vss/MSVSSCHECKOUT.java
deleted file mode 100644
index 3ae6652..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/vss/MSVSSCHECKOUT.java
+++ /dev/null
@@ -1,266 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.vss;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.types.Commandline;
-import org.apache.tools.ant.types.Path;
-
-import java.io.File;
-
-/**
- * Task to perform CheckOut commands to Microsoft Visual Source Safe.
- *
- * @author Martin Poeschl
- *
- * @ant.task name="vsscheckout" category="scm"
- */
-public class MSVSSCHECKOUT extends MSVSS {
-
-    private String m_LocalPath = null;
-    private boolean m_Recursive = false;
-    private String m_Version = null;
-    private String m_Date = null;
-    private String m_Label = null;
-    private String m_AutoResponse = null;
-
-    /**
-     * Executes the task.
-     * <p>
-     * Builds a command line to execute ss and then calls Exec's run method
-     * to execute the command line.
-     */
-    public void execute() throws BuildException {
-        Commandline commandLine = new Commandline();
-        int result = 0;
-
-        // first off, make sure that we've got a command and a vssdir ...
-        if (getVsspath() == null) {
-            String msg = "vsspath attribute must be set!";
-            throw new BuildException(msg, location);
-        }
-
-        // now look for illegal combinations of things ...
-
-        // build the command line from what we got the format is
-        // ss Checkout VSS items [-G] [-C] [-H] [-I-] [-N] [-O] [-R] [-V] [-Y] [-?]
-        // as specified in the SS.EXE help
-        commandLine.setExecutable(getSSCommand());
-        commandLine.createArgument().setValue(COMMAND_CHECKOUT);
-
-        // VSS items
-        commandLine.createArgument().setValue(getVsspath());
-        // -GL
-        getLocalpathCommand(commandLine);
-        // -I- or -I-Y or -I-N
-        getAutoresponse(commandLine);
-        // -R
-        getRecursiveCommand(commandLine);
-        // -V
-        getVersionCommand(commandLine);
-        // -Y
-        getLoginCommand(commandLine);
-
-        result = run(commandLine);
-        if (result != 0) {
-            String msg = "Failed executing: " + commandLine.toString();
-            throw new BuildException(msg, location);
-        }
-    }
-
-    /**
-     * Set the local path.
-     */
-    public void setLocalpath(Path localPath) {
-        m_LocalPath = localPath.toString();
-    }
-
-    /**
-     * Builds and returns the -GL flag command if required.
-     * <p>
-     * The localpath is created if it didn't exist
-     */
-    public void getLocalpathCommand(Commandline cmd) {
-        if (m_LocalPath == null) {
-            return;
-        } else {
-            // make sure m_LocalDir exists, create it if it doesn't
-            File dir = project.resolveFile(m_LocalPath);
-            if (!dir.exists()) {
-                boolean done = dir.mkdirs();
-                if (!done) {
-                    String msg = "Directory " + m_LocalPath + " creation was not " +
-                        "succesful for an unknown reason";
-                    throw new BuildException(msg, location);
-                }
-                project.log("Created dir: " + dir.getAbsolutePath());
-            }
-
-            cmd.createArgument().setValue(FLAG_OVERRIDE_WORKING_DIR + m_LocalPath);
-        }
-    }
-
-    /**
-     * Set behaviour recursive or non-recursive
-     */
-    public void setRecursive(boolean recursive) {
-        m_Recursive = recursive;
-    }
-
-    /**
-     * @return the 'recursive' command if the attribute was 'true', otherwise an empty string
-     */
-    public void getRecursiveCommand(Commandline cmd) {
-        if (!m_Recursive) {
-            return;
-        } else {
-            cmd.createArgument().setValue(FLAG_RECURSION);
-        }
-    }
-
-    /**
-     * Set the stored version string.
-     * <p>
-     * Note we assume that if the supplied string has the value "null" that something
-     * went wrong and that the string value got populated from a null object. This
-     * happens if a ant variable is used e.g. version="${ver_server}" when ver_server
-     * has not been defined to ant!
-     */
-    public void setVersion(String version) {
-        if (version.equals("") || version.equals("null")) {
-            m_Version = null;
-        } else {
-            m_Version = version;
-        }
-    }
-
-    /**
-     * Set the stored date string.
-     * <p>
-     * Note we assume that if the supplied string has the value "null" that something
-     * went wrong and that the string value got populated from a null object. This
-     * happens if a ant variable is used e.g. date="${date}" when date
-     * has not been defined to ant!
-     */
-    public void setDate(String date) {
-        if (date.equals("") || date.equals("null")) {
-            m_Date = null;
-        } else {
-            m_Date = date;
-        }
-    }
-
-    /**
-     * Set the labeled version to operate on in SourceSafe.
-     * <p>
-     * Note we assume that if the supplied string has the value "null" that something
-     * went wrong and that the string value got populated from a null object. This
-     * happens if a ant variable is used e.g. label="${label_server}" when label_server
-     * has not been defined to ant!
-     */
-    public void setLabel(String label) {
-        if (label.equals("") || label.equals("null")) {
-            m_Label = null;
-        } else {
-            m_Label = label;
-        }
-    }
-
-    /**
-     * Simple order of priority. Returns the first specified of version, date, label
-     * If none of these was specified returns ""
-     */
-    public void getVersionCommand(Commandline cmd) {
-
-        if (m_Version != null) {
-            cmd.createArgument().setValue(FLAG_VERSION + m_Version);
-        } else if (m_Date != null) {
-            cmd.createArgument().setValue(FLAG_VERSION_DATE + m_Date);
-        } else if (m_Label != null) {
-            cmd.createArgument().setValue(FLAG_VERSION_LABEL + m_Label);
-        }
-    }
-
-    public void setAutoresponse(String response){
-        if (response.equals("") || response.equals("null")) {
-            m_AutoResponse = null;
-        } else {
-            m_AutoResponse = response;
-        }
-    }
-
-    /**
-     * Checks the value set for the autoResponse.
-     * if it equals "Y" then we return -I-Y
-     * if it equals "N" then we return -I-N
-     * otherwise we return -I
-     */
-    public void getAutoresponse(Commandline cmd) {
-
-        if (m_AutoResponse == null) {
-            cmd.createArgument().setValue(FLAG_AUTORESPONSE_DEF);
-        } else if (m_AutoResponse.equalsIgnoreCase("Y")) {
-            cmd.createArgument().setValue(FLAG_AUTORESPONSE_YES);
-
-        } else if (m_AutoResponse.equalsIgnoreCase("N")) {
-            cmd.createArgument().setValue(FLAG_AUTORESPONSE_NO);
-        } else {
-            cmd.createArgument().setValue(FLAG_AUTORESPONSE_DEF);
-        } // end of else
-
-    }
-
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/vss/MSVSSCP.java b/src/main/org/apache/tools/ant/taskdefs/optional/vss/MSVSSCP.java
deleted file mode 100644
index 5741c66..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/vss/MSVSSCP.java
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.vss;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.types.Commandline;
-
-/**
- * Task to perform CP (Change Project) commands to Microsoft Visual Source Safe.
- * Based on the VSS Checkin code by Martin Poeschl
- *
- * @author Nigel Magnay
- *
- * @ant.task name="vsscp" category="scm"
- */
-public class MSVSSCP extends MSVSS {
-
-    private String m_AutoResponse = null;
-
-    /**
-     * Executes the task.
-     * <p>
-     * Builds a command line to execute ss and then calls Exec's run method
-     * to execute the command line.
-     */
-    public void execute() throws BuildException {
-        Commandline commandLine = new Commandline();
-        int result = 0;
-
-        // first off, make sure that we've got a command and a vssdir ...
-        if (getVsspath() == null) {
-            String msg = "vsspath attribute must be set!";
-            throw new BuildException(msg, location);
-        }
-
-        // now look for illegal combinations of things ...
-
-        // build the command line from what we got the format is
-        // ss CP VSS items [-H] [-I-] [-Y] [-?]
-        // as specified in the SS.EXE help
-        commandLine.setExecutable(getSSCommand());
-        commandLine.createArgument().setValue(COMMAND_CP);
-
-        // VSS items
-        commandLine.createArgument().setValue(getVsspath());      
-        // -I- or -I-Y or -I-N
-        getAutoresponse(commandLine);        
-        // -Y
-        getLoginCommand(commandLine);
-        
-        result = run(commandLine);
-        if (result != 0) {
-            String msg = "Failed executing: " + commandLine.toString();
-            throw new BuildException(msg, location);
-        }
-    }
-
-    public void setAutoresponse(String response) {
-        if (response.equals("") || response.equals("null")) {
-            m_AutoResponse = null;
-        } else {
-            m_AutoResponse = response;
-        }
-    }
-
-    /**
-     * Checks the value set for the autoResponse.
-     * if it equals "Y" then we return -I-Y
-     * if it equals "N" then we return -I-N
-     * otherwise we return -I
-     */
-    public void getAutoresponse(Commandline cmd) {
-
-        if (m_AutoResponse == null) {
-            cmd.createArgument().setValue(FLAG_AUTORESPONSE_DEF);
-        } else if (m_AutoResponse.equalsIgnoreCase("Y")) {
-            cmd.createArgument().setValue(FLAG_AUTORESPONSE_YES);
-
-        } else if (m_AutoResponse.equalsIgnoreCase("N")) {
-            cmd.createArgument().setValue(FLAG_AUTORESPONSE_NO);
-        } else {
-            cmd.createArgument().setValue(FLAG_AUTORESPONSE_DEF);
-        } // end of else
-
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/vss/MSVSSCREATE.java b/src/main/org/apache/tools/ant/taskdefs/optional/vss/MSVSSCREATE.java
deleted file mode 100644
index 51e47a8..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/vss/MSVSSCREATE.java
+++ /dev/null
@@ -1,254 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.vss;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.types.Commandline;
-
-/**
- * Task to perform CREATE commands to Microsoft Visual Source Safe.
- * <p>
- * The following attributes are interpreted:
- * <table border="1">
- *   <tr>
- *     <th>Attribute</th>
- *     <th>Values</th>
- *     <th>Required</th>
- *   </tr>
- *   <tr>
- *      <td>login</td>
- *      <td>username,password</td>
- *      <td>No</td>
- *   </tr>
- *   <tr>
- *      <td>vsspath</td>
- *      <td>SourceSafe path of project to be created</td>
- *      <td>Yes</td>
- *   </tr>
- *   <tr>
- *      <td>ssdir</td>
- *      <td>directory where <code>ss.exe</code> resides. By default the task
- *      expects it to be in the PATH.</td>
- *      <td>No</td>
- *   </tr>
- *   <tr>
- *      <td>quiet</td>
- *      <td>suppress output (off by default)</td>
- *      <td>No</td>
- *   </tr>
- *   <tr>
- *      <td>failOnError</td>
- *      <td>fail if there is an error creating the project (true by default)</td>
- *      <td>No</td>
- *   </tr>   
- *   <tr>
- *      <td>autoresponse</td>
- *      <td>What to respond with (sets the -I option). By default, -I- is
- *      used; values of Y or N will be appended to this.</td>
- *      <td>No</td>
- *   </tr>
- *   <tr>
- *      <td>comment</td>
- *      <td>The comment to use for this label. Empty or '-' for no comment.</td>
- *      <td>No</td>
- *   </tr>
- *      
- * </table>
- *
- * @author Gary S. Weaver
- */
-public class MSVSSCREATE extends MSVSS {
-
-    private String m_AutoResponse = null;
-    private String m_Name = null;
-    private String m_Comment = "-";
-    private boolean m_Quiet = false;
-  
-    /**
-     * True by default since most of the time we won't be trying to create a 
-     * project with the same name more than once.
-     */
-    private boolean m_FailOnError = true;
-
-    /**
-     * Executes the task.
-     * <p>
-     * Builds a command line to execute ss and then calls Exec's run method
-     * to execute the command line.
-     * @throws BuildException if the task fails.
-     */
-    public void execute() throws BuildException {
-        Commandline commandLine = new Commandline();
-        int result = 0;
-
-        // first off, make sure that we've got a command and a vssdir...
-        if (getVsspath() == null) {
-            String msg = "vsspath attribute must be set!";
-            throw new BuildException(msg, location);
-        }
-
-        // now look for illegal combinations of things ...
-
-        // build the command line from what we got the format is
-        // ss Create VSS items [-C] [-H] [-I-] [-N] [-O] [-S] [-Y] [-?]
-        // as specified in the SS.EXE help
-        commandLine.setExecutable(getSSCommand());
-        commandLine.createArgument().setValue(COMMAND_CREATE);
-
-        // VSS items
-        commandLine.createArgument().setValue(getVsspath());
-
-        // -C
-        commandLine.createArgument().setValue("-C" + getComment());
-
-        // -I- or -I-Y or -I-N
-        getAutoresponse(commandLine);
-
-        // -O-
-        getQuietCommand(commandLine);
-
-        // -Y
-        getLoginCommand(commandLine);
-
-        result = run(commandLine);
-        if (result != 0 && m_FailOnError) {
-            String msg = "Failed executing: " + commandLine.toString();
-            throw new BuildException(msg, location);
-        }
-
-    }
-
-    /**
-     * Sets the comment to apply in SourceSafe.
-     * <p>
-     * If this is null or empty, it will be replaced with "-" which
-     * is what SourceSafe uses for an empty comment.
-     * @param comment the comment to apply in SourceSafe
-     */
-    public void setComment(String comment) {
-        if (comment.equals("") || comment.equals("null")) {
-            m_Comment = "-";
-        } else {
-            m_Comment = comment;
-        }
-    }
-
-    /**
-     * Gets the comment to be applied.
-     * @return the comment to be applied.
-     */
-    public String getComment() {
-        return m_Comment;
-    }
-
-    /**
-     * Sets/clears quiet mode
-     * @param quiet whether or not command should be run in "quiet mode".
-     */
-    public final void setQuiet (boolean quiet) {
-        this.m_Quiet = quiet;
-    }
-
-    /** 
-     * Modify the commandline to add the quiet argument.
-     * @param cmd the commandline to modify.
-     */
-    public void getQuietCommand (Commandline cmd) {
-        if (m_Quiet) {
-            cmd.createArgument().setValue (FLAG_QUIET);
-        }
-    }
-
-    /**
-     * Sets whether task should fail if there is an error creating the project.
-     * @param failOnError true if task should fail if there is an error creating 
-     * the project.
-     */
-    public final void setFailOnError (boolean failOnError) {
-        this.m_FailOnError = failOnError;
-    }
-
-    /**
-     * Sets the AutoResponse.
-     * @param response the response.
-     */
-    public void setAutoresponse(String response) {
-        if (response.equals("") || response.equals("null")) {
-            m_AutoResponse = null;
-        } else {
-            m_AutoResponse = response;
-        }
-    }
-
-    /**
-     * Checks the value set for the autoResponse.
-     * if it equals "Y" then we return -I-Y
-     * if it equals "N" then we return -I-N
-     * otherwise we return -I
-     * @param cmd the commandline to modify with the autoresponse.
-     */
-    public void getAutoresponse(Commandline cmd) {
-        if (m_AutoResponse == null) {
-            cmd.createArgument().setValue(FLAG_AUTORESPONSE_DEF);
-        } else if (m_AutoResponse.equalsIgnoreCase("Y")) {
-            cmd.createArgument().setValue(FLAG_AUTORESPONSE_YES);
-
-        } else if (m_AutoResponse.equalsIgnoreCase("N")) {
-            cmd.createArgument().setValue(FLAG_AUTORESPONSE_NO);
-        } else {
-            cmd.createArgument().setValue(FLAG_AUTORESPONSE_DEF);
-        } // end of else
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/vss/MSVSSGET.java b/src/main/org/apache/tools/ant/taskdefs/optional/vss/MSVSSGET.java
deleted file mode 100644
index 919b3d6..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/vss/MSVSSGET.java
+++ /dev/null
@@ -1,364 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.vss;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.types.Commandline;
-import org.apache.tools.ant.types.Path;
-
-import java.io.File;
-
-/**
- * Task to perform GET commands to Microsoft Visual Source Safe.
- * <p>
- * The following attributes are interpretted:
- * <table border="1">
- *   <tr>
- *     <th>Attribute</th>
- *     <th>Values</th>
- *     <th>Required</th>
- *   </tr>
- *   <tr>
- *      <td>login</td>
- *      <td>username,password</td>
- *      <td>No</td>
- *   </tr>
- *   <tr>
- *      <td>vsspath</td>
- *      <td>SourceSafe path</td>
- *      <td>Yes</td>
- *   </tr>
- *   <tr>
- *      <td>localpath</td>
- *      <td>Override the working directory and get to the specified path</td>
- *      <td>No</td>
- *   </tr>
- *   <tr>
- *      <td>writable</td>
- *      <td>true or false</td>
- *      <td>No</td>
- *   </tr>
- *   <tr>
- *      <td>recursive</td>
- *      <td>true or false</td>
- *      <td>No</td>
- *   </tr>
- *   <tr>
- *      <td>version</td>
- *      <td>a version number to get</td>
- *      <td>No</td>
- *   </tr>
- *   <tr>
- *      <td>date</td>
- *      <td>a date stamp to get at</td>
- *      <td>No</td>
- *   </tr>
- *   <tr>
- *      <td>label</td>
- *      <td>a label to get for</td>
- *      <td>No</td>
- *   </tr>
- *   <tr>
- *      <td>quiet</td>
- *      <td>suppress output (off by default)</td>
- *      <td>No</td>
- *   </tr>
- *   <tr>
- *      <td>autoresponse</td>
- *      <td>What to respond with (sets the -I option). By default, -I- is
- *      used; values of Y or N will be appended to this.</td>
- *      <td>No</td>
- *   </tr>
- * </table>
- * <p>Note that only one of version, date or label should be specified</p>
- *
- * @author Craig Cottingham
- * @author Andrew Everitt
- *
- * @ant.task name="vssget" category="scm"
- */
-public class MSVSSGET extends MSVSS {
-
-    private String m_LocalPath = null;
-    private boolean m_Recursive = false;
-    private boolean m_Writable = false;
-    private String m_Version = null;
-    private String m_Date = null;
-    private String m_Label = null;
-    private String m_AutoResponse = null;
-    private boolean m_Quiet = false;
-
-    /**
-     * Executes the task.
-     * <p>
-     * Builds a command line to execute ss and then calls Exec's run method
-     * to execute the command line.
-     */
-    public void execute() throws BuildException {
-        Commandline commandLine = new Commandline();
-        int result = 0;
-
-        // first off, make sure that we've got a command and a vssdir ...
-        if (getVsspath() == null) {
-            String msg = "vsspath attribute must be set!";
-            throw new BuildException(msg, location);
-        }
-
-        // now look for illegal combinations of things ...
-
-        // build the command line from what we got the format is
-        // ss Get VSS items [-G] [-H] [-I-] [-N] [-O] [-R] [-V] [-W] [-Y] [-?]
-        // as specified in the SS.EXE help
-        commandLine.setExecutable(getSSCommand());
-        commandLine.createArgument().setValue(COMMAND_GET);
-
-        // VSS items
-        commandLine.createArgument().setValue(getVsspath());
-        // -GL
-        getLocalpathCommand(commandLine);
-        // -I- or -I-Y or -I-N
-        getAutoresponse(commandLine);
-        // -O-
-        getQuietCommand(commandLine);
-        // -R
-        getRecursiveCommand(commandLine);
-        // -V
-        getVersionCommand(commandLine);
-        // -W
-        getWritableCommand(commandLine);
-        // -Y
-        getLoginCommand(commandLine);
-
-        result = run(commandLine);
-        if (result != 0) {
-            String msg = "Failed executing: " + commandLine.toString();
-            throw new BuildException(msg, location);
-        }
-    }
-
-    /**
-     * Set the local path.
-     */
-    public void setLocalpath(Path localPath) {
-        m_LocalPath = localPath.toString();
-    }
-
-    /**
-     * Builds and returns the -GL flag command if required.
-     * <p>
-     * The localpath is created if it didn't exist
-     */
-    public void getLocalpathCommand(Commandline cmd) {
-        if (m_LocalPath == null) {
-            return;
-        } else {
-            // make sure m_LocalDir exists, create it if it doesn't
-            File dir = project.resolveFile(m_LocalPath);
-            if (!dir.exists()) {
-                boolean done = dir.mkdirs();
-                if (!done) {
-                    String msg = "Directory " + m_LocalPath + " creation was not " +
-                        "successful for an unknown reason";
-                    throw new BuildException(msg, location);
-                }
-                project.log("Created dir: " + dir.getAbsolutePath());
-            }
-
-            cmd.createArgument().setValue(FLAG_OVERRIDE_WORKING_DIR + m_LocalPath);
-        }
-    }
-
-    /**
-     * Set behaviour recursive or non-recursive
-     */
-    public void setRecursive(boolean recursive) {
-        m_Recursive = recursive;
-    }
-
-    /**
-     * @return the 'recursive' command if the attribute was 'true', otherwise an empty string
-     */
-    public void getRecursiveCommand(Commandline cmd) {
-        if (!m_Recursive) {
-            return;
-        } else {
-            cmd.createArgument().setValue(FLAG_RECURSION);
-        }
-    }
-
-    /**
-     * Sets/clears quiet mode
-     */
-    public final void setQuiet (boolean quiet) {
-        this.m_Quiet = quiet;
-    }
-    
-    public void getQuietCommand (Commandline cmd) {
-        if (m_Quiet) {
-            cmd.createArgument().setValue (FLAG_QUIET);
-        }
-    }
-    
-    /**
-     * Set behaviour, used in get command to make files that are 'got' writable
-     */
-    public final void setWritable(boolean argWritable) {
-        m_Writable = argWritable;
-    }
-
-    /**
-     * @return the 'make writable' command if the attribute was 'true', otherwise an empty string
-     */
-    public void getWritableCommand(Commandline cmd) {
-        if (!m_Writable) {
-            return;
-        } else {
-            cmd.createArgument().setValue(FLAG_WRITABLE);
-        }
-    }
-
-    /**
-     * Set the stored version string.
-     * <p>
-     * Note we assume that if the supplied string has the value "null" that something
-     * went wrong and that the string value got populated from a null object. This
-     * happens if a ant variable is used e.g. version="${ver_server}" when ver_server
-     * has not been defined to ant!
-     */
-    public void setVersion(String version) {
-        if (version.equals("") || version.equals("null")) {
-            m_Version = null;
-        } else {
-            m_Version = version;
-        }
-    }
-
-    /**
-     * Set the stored date string.
-     * <p>
-     * Note we assume that if the supplied string has the value "null" that something
-     * went wrong and that the string value got populated from a null object. This
-     * happens if a ant variable is used e.g. date="${date}" when date
-     * has not been defined to ant!
-     */
-    public void setDate(String date) {
-        if (date.equals("") || date.equals("null")) {
-            m_Date = null;
-        } else {
-            m_Date = date;
-        }
-    }
-
-    /**
-     * Set the labeled version to operate on in SourceSafe.
-     * <p>
-     * Note we assume that if the supplied string has the value "null" that something
-     * went wrong and that the string value got populated from a null object. This
-     * happens if a ant variable is used e.g. label="${label_server}" when label_server
-     * has not been defined to ant!
-     */
-    public void setLabel(String label) {
-        if (label.equals("") || label.equals("null")) {
-            m_Label = null;
-        } else {
-            m_Label = label;
-        }
-    }
-
-    /**
-     * Simple order of priority. Returns the first specified of version, date, label.
-     * If none of these was specified returns ""
-     */
-    public void getVersionCommand(Commandline cmd) {
-
-        if (m_Version != null) {
-            cmd.createArgument().setValue(FLAG_VERSION + m_Version);
-        } else if (m_Date != null) {
-            cmd.createArgument().setValue(FLAG_VERSION_DATE + m_Date);
-        } else if (m_Label != null) {
-            cmd.createArgument().setValue(FLAG_VERSION_LABEL + m_Label);
-        }
-    }
-
-    public void setAutoresponse(String response){
-        if (response.equals("") || response.equals("null")) {
-            m_AutoResponse = null;
-        } else {
-            m_AutoResponse = response;
-        }
-    }
-    
-    /**
-     * Checks the value set for the autoResponse.
-     * if it equals "Y" then we return -I-Y
-     * if it equals "N" then we return -I-N
-     * otherwise we return -I
-     */
-    public void getAutoresponse(Commandline cmd) {
-        
-        if (m_AutoResponse == null) {
-            cmd.createArgument().setValue(FLAG_AUTORESPONSE_DEF);
-        } else if (m_AutoResponse.equalsIgnoreCase("Y")) {
-            cmd.createArgument().setValue(FLAG_AUTORESPONSE_YES);
-            
-        } else if (m_AutoResponse.equalsIgnoreCase("N")) {
-            cmd.createArgument().setValue(FLAG_AUTORESPONSE_NO);
-        } else {
-            cmd.createArgument().setValue(FLAG_AUTORESPONSE_DEF);
-        } // end of else
-
-    }
-}
-
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/vss/MSVSSHISTORY.java b/src/main/org/apache/tools/ant/taskdefs/optional/vss/MSVSSHISTORY.java
deleted file mode 100644
index 123faac..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/vss/MSVSSHISTORY.java
+++ /dev/null
@@ -1,381 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.vss;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.types.Commandline;
-import org.apache.tools.ant.types.EnumeratedAttribute;
-import java.io.File;
-import java.util.Date;
-import java.util.Calendar;
-import java.util.GregorianCalendar;
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
-import java.text.ParseException;
-/**
- * Task to perform HISTORY commands to Microsoft Visual Source Safe.
- *
- * @author Balazs Fejes 2
- * @author Glenn_Twiggs@bmc.com
- *
- * @ant.task name="vsshistory" category="scm"
- */
-
-public class MSVSSHISTORY extends MSVSS {
-
-    private String m_FromDate = null;
-    private String m_ToDate = null;
-    private DateFormat m_DateFormat =
-        DateFormat.getDateInstance(DateFormat.SHORT);
-    
-    private String m_FromLabel = null;
-    private String m_ToLabel = null;
-    private String m_OutputFileName = null;
-    private String m_User = null;
-    private int m_NumDays = Integer.MIN_VALUE;
-    private String m_Style = "";
-    private boolean m_Recursive = false;
-    
-    public static final String VALUE_FROMDATE = "~d";
-    public static final String VALUE_FROMLABEL = "~L";
-
-    public static final String FLAG_OUTPUT = "-O";
-    public static final String FLAG_USER = "-U";
-
-    /**
-     * Executes the task.
-     * <p>
-     * Builds a command line to execute ss and then calls Exec's run method
-     * to execute the command line.
-     */
-    public void execute() throws BuildException {
-        Commandline commandLine = new Commandline();
-        int result = 0;
-
-        // first off, make sure that we've got a command and a vssdir and a label ...
-        if (getVsspath() == null) {
-            String msg = "vsspath attribute must be set!";
-            throw new BuildException(msg, location);
-        }
-
-        // now look for illegal combinations of things ...
-
-        // build the command line from what we got the format is
-        // ss History elements [-H] [-L] [-N] [-O] [-V] [-Y] [-#] [-?]
-        // as specified in the SS.EXE help
-        commandLine.setExecutable(getSSCommand());
-        commandLine.createArgument().setValue(COMMAND_HISTORY);
-
-        // VSS items
-        commandLine.createArgument().setValue(getVsspath());
-
-        // -I-
-        commandLine.createArgument().setValue("-I-");  // ignore all errors
-
-        // -V
-        // Label an existing file or project version
-        getVersionDateCommand(commandLine);
-        getVersionLabelCommand(commandLine);
-
-        // -R   
-        if (m_Recursive) {
-            commandLine.createArgument().setValue(FLAG_RECURSION);
-        }
-
-        // -B / -D / -F-
-        if (m_Style.length() > 0) {
-            commandLine.createArgument().setValue(m_Style);
-        }
-
-        // -Y
-        getLoginCommand(commandLine);
-                
-        // -O
-        getOutputCommand(commandLine);
-
-        System.out.println("***: " + commandLine);
-        
-        result = run(commandLine);
-        if (result != 0) {
-            String msg = "Failed executing: " + commandLine.toString();
-            throw new BuildException(msg, location);
-        }
-
-    }
-
-    /**
-     * Set the Start Date for the Comparison of two versions in SourceSafe History
-     */
-    public void setFromDate(String fromDate) {
-        if (fromDate.equals("") || fromDate == null) {
-            m_FromDate = null;
-        } else {
-            m_FromDate = fromDate;
-        }
-    }
-
-    /**
-     * Set the Start Label 
-     */
-    public void setFromLabel(String fromLabel) {
-        if (fromLabel.equals("") || fromLabel == null) {
-            m_FromLabel = null;
-        } else {
-            m_FromLabel = fromLabel;
-        }
-    }
-
-    /**
-     * Set the End Label 
-     */
-    public void setToLabel(String toLabel) {
-        if (toLabel.equals("") || toLabel == null) {
-            m_ToLabel = null;
-        } else {
-            m_ToLabel = toLabel;
-        }
-    }
-
-    /**
-     * Set the End Date for the Comparison of two versions in SourceSafe History
-     */
-    public void setToDate(String toDate) {
-        if (toDate.equals("") || toDate == null) {
-            m_ToDate = null;
-        } else {
-            m_ToDate = toDate;
-        }
-    }
-
-    /**
-     * Set the number of days to go back for Comparison.
-     * <p>
-     * The default value is 2 days. 
-     */
-    public void setNumdays(int numd) {
-        m_NumDays = numd;
-    }
-    
-    /**
-     * Set the output file name for SourceSafe output.
-     */
-    public void setOutput(File outfile) {
-        if (outfile == null) {
-            m_OutputFileName = null;
-        } else {
-            m_OutputFileName = outfile.getAbsolutePath();
-        }
-    }
-
-    /**
-     * Set the Start Date for the Comparison of two versions in SourceSafe History.
-     */
-    public void setDateFormat(String dateFormat) {
-        if (!(dateFormat.equals("") || dateFormat == null)) {
-            m_DateFormat = new SimpleDateFormat(dateFormat);
-        }
-    }
-
-    /**
-     * Builds the version date command.
-     * @param cmd the commandline the command is to be added to
-     */
-    private void getVersionDateCommand(Commandline cmd) throws BuildException {
-        if (m_FromDate == null && m_ToDate == null 
-            && m_NumDays == Integer.MIN_VALUE) {
-            return;
-        }
-        
-        if (m_FromDate != null && m_ToDate != null) {
-            cmd.createArgument().setValue(FLAG_VERSION_DATE + m_ToDate 
-                + VALUE_FROMDATE + m_FromDate);
-        } else if (m_ToDate != null && m_NumDays != Integer.MIN_VALUE) {
-            String startDate = null;
-            try {
-                startDate = calcDate(m_ToDate, m_NumDays);
-            } catch (ParseException ex) {
-                String msg = "Error parsing date: " + m_ToDate;
-                throw new BuildException(msg, location);
-            }
-            cmd.createArgument().setValue(FLAG_VERSION_DATE + m_ToDate + VALUE_FROMDATE + startDate);
-        } else if (m_FromDate != null && m_NumDays != Integer.MIN_VALUE) {
-            String endDate = null;
-            try {
-                endDate = calcDate(m_FromDate, m_NumDays);
-            } catch (ParseException ex) {
-                String msg = "Error parsing date: " + m_FromDate;
-                throw new BuildException(msg, location);
-            }
-            cmd.createArgument().setValue(FLAG_VERSION_DATE + endDate + VALUE_FROMDATE + m_FromDate);
-        } else {
-            if (m_FromDate != null) {
-                cmd.createArgument().setValue(FLAG_VERSION + VALUE_FROMDATE + m_FromDate);
-            } else {
-                cmd.createArgument().setValue(FLAG_VERSION_DATE + m_ToDate);
-            }
-        }
-    }
-
-    /**
-     * Builds the version date command.
-     * @param cmd the commandline the command is to be added to
-     */
-    private void getVersionLabelCommand(Commandline cmd) throws BuildException {
-        if (m_FromLabel == null && m_ToLabel == null) {
-            return;
-        }
-        
-        if (m_FromLabel != null && m_ToLabel != null) {
-            cmd.createArgument().setValue(FLAG_VERSION_LABEL + m_ToLabel + VALUE_FROMLABEL + m_FromLabel);
-        } else if (m_FromLabel != null) {
-            cmd.createArgument().setValue(FLAG_VERSION + VALUE_FROMLABEL + m_FromLabel);
-        } else {
-            cmd.createArgument().setValue(FLAG_VERSION_LABEL + m_ToLabel);
-        }
-    }
-    
-    /**
-     * Builds the version date command.
-     * @param cmd the commandline the command is to be added to
-     */
-    private void getOutputCommand(Commandline cmd) {
-        if (m_OutputFileName != null) {
-            cmd.createArgument().setValue(FLAG_OUTPUT + m_OutputFileName);
-        }
-    }
-
-    /**
-     * Builds the User command.
-     * @param cmd the commandline the command is to be added to
-     */
-    private void getUserCommand(Commandline cmd) {
-        if (m_User != null) {
-            cmd.createArgument().setValue(FLAG_USER + m_User);
-        }
-    }
-
-     /**
-     * Calculates the start date for version comparison.
-     * <p>
-     * Calculates the date numDay days earlier than startdate.
-     */
-    private String calcDate(String fromDate, int numDays) throws ParseException {
-        String toDate = null;
-        Date currdate = new Date();
-        Calendar calend = new GregorianCalendar();
-        currdate = m_DateFormat.parse(fromDate); 
-        calend.setTime(currdate);
-        calend.add(Calendar.DATE, numDays);
-        toDate = m_DateFormat.format(calend.getTime());
-        return toDate;
-    }
-
-    /**
-     * Set behaviour recursive or non-recursive
-     */
-    public void setRecursive(boolean recursive) {
-        m_Recursive = recursive;
-    }
-
-    /**
-     * Set the Username of the user whose changes we would like to see.
-     */
-    public void setUser(String user) {
-        m_User = user;
-    }
-
-    /**
-     * @return the 'recursive' command if the attribute was 'true', otherwise an empty string
-     */
-    private void getRecursiveCommand(Commandline cmd) {
-        if (!m_Recursive) {
-            return;
-        } else {
-            cmd.createArgument().setValue(FLAG_RECURSION);
-        }
-    }
-
-    /**
-     * Specify the detail of output.
-     *
-     * @param option valid values:
-     * <ul>
-     * <li>brief:    -B Display a brief history. 
-     * <li>codediff: -D Display line-by-line file changes. 
-     * <li>nofile:   -F- Do not display individual file updates in the project history. 
-     * <li>default:  No option specified. Display in Source Safe's default format.
-     * </ul>
-     */
-    public void setStyle(BriefCodediffNofile attr) {
-        String option = attr.getValue();
-        if (option.equals("brief")) {
-            m_Style = "-B";
-        } else if (option.equals("codediff")) {
-            m_Style = "-D";
-        } else if (option.equals("default")) {
-            m_Style = "";
-        } else if (option.equals("nofile")) {
-            m_Style = "-F-";
-        } else {
-            throw new BuildException("Style " + attr + " unknown.");
-        }
-    }
-
-    public static class BriefCodediffNofile extends EnumeratedAttribute {
-       public String[] getValues() {
-           return new String[] {"brief", "codediff", "nofile", "default"};
-       }
-   }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/vss/MSVSSLABEL.java b/src/main/org/apache/tools/ant/taskdefs/optional/vss/MSVSSLABEL.java
deleted file mode 100644
index f6ca909..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/optional/vss/MSVSSLABEL.java
+++ /dev/null
@@ -1,287 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.vss;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.types.Commandline;
-
-/**
- * Task to perform LABEL commands to Microsoft Visual Source Safe.
- * <p>
- * The following attributes are interpreted:
- * <table border="1">
- *   <tr>
- *     <th>Attribute</th>
- *     <th>Values</th>
- *     <th>Required</th>
- *   </tr>
- *   <tr>
- *      <td>login</td>
- *      <td>username,password</td>
- *      <td>No</td>
- *   </tr>
- *   <tr>
- *      <td>vsspath</td>
- *      <td>SourceSafe path</td>
- *      <td>Yes</td>
- *   </tr>
- *   <tr>
- *      <td>ssdir</td>
- *      <td>directory where <code>ss.exe</code> resides. By default the task
- *      expects it to be in the PATH.</td>
- *      <td>No</td>
- *   </tr>
- *   <tr>
- *      <td>label</td>
- *      <td>A label to apply to the hierarchy</td>
- *      <td>Yes</td>
- *   </tr>
- *   <tr>
- *      <td>version</td>
- *      <td>An existing file or project version to label</td>
- *      <td>No</td>
- *   </tr>
- *   <tr>
- *      <td>autoresponse</td>
- *      <td>What to respond with (sets the -I option). By default, -I- is
- *      used; values of Y or N will be appended to this.</td>
- *      <td>No</td>
- *   </tr>
- *   <tr>
- *      <td>comment</td>
- *      <td>The comment to use for this label. Empty or '-' for no comment.</td>
- *      <td>No</td>
- *   </tr>
- *      
- * </table>
- *
- * @author Phillip Wells
- *
- * @ant.task name="vsslabel" category="scm"
- */
-public class MSVSSLABEL extends MSVSS {
-    private String m_AutoResponse = null;
-    private String m_Label = null;
-    private String m_Version = null;
-    private String m_Comment = "-";
-
-    public static final String FLAG_LABEL = "-L";
-
-    /**
-     * Executes the task.
-     * <p>
-     * Builds a command line to execute ss and then calls Exec's run method
-     * to execute the command line.
-     */
-    public void execute() throws BuildException {
-        Commandline commandLine = new Commandline();
-        int result = 0;
-
-        // first off, make sure that we've got a command and a vssdir and a label ...
-        if (getVsspath() == null) {
-            String msg = "vsspath attribute must be set!";
-            throw new BuildException(msg, location);
-        }
-        if (getLabel() == null) {
-            String msg = "label attribute must be set!";
-            throw new BuildException(msg, location);
-        }
-
-        // now look for illegal combinations of things ...
-
-        // build the command line from what we got the format is
-        // ss Label VSS items [-C]      [-H] [-I-] [-Llabel] [-N] [-O]      [-V]      [-Y] [-?]
-        // as specified in the SS.EXE help
-        commandLine.setExecutable(getSSCommand());
-        commandLine.createArgument().setValue(COMMAND_LABEL);
-
-        // VSS items
-        commandLine.createArgument().setValue(getVsspath());
-
-        // -C
-        commandLine.createArgument().setValue("-C" + getComment());
-
-        // -I- or -I-Y or -I-N
-        getAutoresponse(commandLine);
-
-        // -L
-        // Specify the new label on the command line (instead of being prompted)
-        getLabelCommand(commandLine);
-
-        // -V
-        // Label an existing file or project version
-        getVersionCommand(commandLine);
-
-        // -Y
-        getLoginCommand(commandLine);
-
-        result = run(commandLine);
-        if (result != 0) {
-            String msg = "Failed executing: " + commandLine.toString();
-            throw new BuildException(msg, location);
-        }
-
-    }
-
-    /**
-     * Set the label to apply in SourceSafe.
-     * <p>
-     * Note we assume that if the supplied string has the value "null" that something
-     * went wrong and that the string value got populated from a null object. This
-     * happens if a ant variable is used e.g. label="${label_server}" when label_server
-     * has not been defined to ant!
-     */
-    public void setLabel(String label) {
-        if (label.equals("") || label.equals("null")) {
-            m_Label = null;
-        } else {
-            m_Label = label;
-        }
-    }
-
-    /**
-     * Builds the version command.
-     * @param cmd the commandline the command is to be added to
-     */
-    public void getVersionCommand(Commandline cmd) {
-        if (m_Version != null) {
-            cmd.createArgument().setValue(FLAG_VERSION + m_Version);
-        }
-    }
-
-    /**
-     * Builds the label command.
-     * @param cmd the commandline the command is to be added to
-     */
-    public void getLabelCommand(Commandline cmd) {
-        if (m_Label != null) {
-            cmd.createArgument().setValue(FLAG_LABEL + m_Label);
-        }
-    }
-
-    /**
-     * Set the stored version string.
-     * <p>
-     * Note we assume that if the supplied string has the value "null" that something
-     * went wrong and that the string value got populated from a null object. This
-     * happens if a ant variable is used e.g. version="${ver_server}" when ver_server
-     * has not been defined to ant!
-     */
-    public void setVersion(String version) {
-        if (version.equals("") || version.equals("null")) {
-            m_Version = null;
-        } else {
-            m_Version = version;
-        }
-    }
-
-    /**
-     * Gets the label to be applied.
-     * @return the label to be applied.
-     */
-    public String getLabel() {
-        return m_Label;
-    }
-
-    /**
-     * Set the comment to apply in SourceSafe.
-     * <p>
-     * If this is null or empty, it will be replaced with "-" which
-     * is what SourceSafe uses for an empty comment.
-     */
-    public void setComment(String comment) {
-        if (comment.equals("") || comment.equals("null")) {
-            m_Comment = "-";
-        } else {
-            m_Comment = comment;
-        }
-    }
-
-    /**
-     * Gets the comment to be applied.
-     * @return the comment to be applied.
-     */
-    public String getComment() {
-        return m_Comment;
-    }
-    
-    public void setAutoresponse(String response){
-        if (response.equals("") || response.equals("null")) {
-            m_AutoResponse = null;
-        } else {
-            m_AutoResponse = response;
-        }
-    }
-    
-    /**
-     * Checks the value set for the autoResponse.
-     * if it equals "Y" then we return -I-Y
-     * if it equals "N" then we return -I-N
-     * otherwise we return -I
-     */
-    public void getAutoresponse(Commandline cmd) {
-        
-        if (m_AutoResponse == null) {
-            cmd.createArgument().setValue(FLAG_AUTORESPONSE_DEF);
-        } else if (m_AutoResponse.equalsIgnoreCase("Y")) {
-            cmd.createArgument().setValue(FLAG_AUTORESPONSE_YES);
-            
-        } else if (m_AutoResponse.equalsIgnoreCase("N")) {
-            cmd.createArgument().setValue(FLAG_AUTORESPONSE_NO);
-        } else {
-            cmd.createArgument().setValue(FLAG_AUTORESPONSE_DEF);
-        } // end of else
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/rmic/DefaultRmicAdapter.java b/src/main/org/apache/tools/ant/taskdefs/rmic/DefaultRmicAdapter.java
deleted file mode 100644
index 0b5f71f..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/rmic/DefaultRmicAdapter.java
+++ /dev/null
@@ -1,419 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.rmic;
-
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.taskdefs.Rmic;
-import org.apache.tools.ant.types.Commandline;
-import org.apache.tools.ant.types.Path;
-
-import org.apache.tools.ant.util.FileNameMapper;
-import org.apache.tools.ant.util.JavaEnvUtils;
-
-import java.io.File;
-import java.util.Random;
-import java.util.Vector;
-
-/**
- * This is the default implementation for the RmicAdapter interface.
- * Currently, this is a cut-and-paste of the original rmic task and
- * DefaultCopmpilerAdapter.
- *
- * @author duncan@x180.com
- * @author ludovic.claude@websitewatchers.co.uk
- * @author David Maclean <a href="mailto:david@cm.co.za">david@cm.co.za</a>
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> 
- * @author <a href="tokamoto@rd.nttdata.co.jp">Takashi Okamoto</a>
- * @since Ant 1.4
- */
-public abstract class DefaultRmicAdapter implements RmicAdapter {
-
-    private Rmic attributes;
-    private FileNameMapper mapper;
-    private static final Random rand = new Random();
-
-    public DefaultRmicAdapter() {
-    }
-
-    public void setRmic(Rmic attributes) {
-        this.attributes = attributes;
-        mapper = new RmicFileNameMapper();
-    }
-
-    public Rmic getRmic() {
-        return attributes;
-    }
-
-    protected String getStubClassSuffix() {
-        return "_Stub";
-    }        
-
-    protected String getSkelClassSuffix() {
-        return "_Skel";
-    }        
-
-    protected String getTieClassSuffix() {
-        return "_Tie";
-    }        
-
-    /**
-     * This implementation returns a mapper that may return up to two
-     * file names.
-     *
-     * <ul>
-     *   <li>for JRMP it will return *_getStubClassSuffix (and
-     *   *_getSkelClassSuffix if JDK 1.1 is used)</li>
-     *
-     *   <li>for IDL it will return a random name, causing <rmic> to
-     *     always recompile.</li>
-     *
-     *   <li>for IIOP it will return _*_getStubClassSuffix for
-     *   interfaces and _*_getStubClassSuffix for non-interfaces (and
-     *   determine the interface and create _*_Stub from that).</li>
-     * </ul>
-     */
-    public FileNameMapper getMapper() {
-        return mapper;
-    }
-
-    /**
-     * The CLASSPATH this rmic process will use.
-     */
-    public Path getClasspath() {
-        return getCompileClasspath();
-    }
-
-    /**
-     * Builds the compilation classpath.
-     */
-    protected Path getCompileClasspath() {
-        Path classpath = new Path(attributes.getProject());
-        // add dest dir to classpath so that previously compiled and
-        // untouched classes are on classpath
-        classpath.setLocation(attributes.getBase());
-
-        // Combine the build classpath with the system classpath, in an 
-        // order determined by the value of build.sysclasspath
-        if (attributes.getClasspath() == null) {
-            if (attributes.getIncludeantruntime()) {
-                classpath.addExisting(Path.systemClasspath);
-            }
-        } else {
-            if (attributes.getIncludeantruntime()) {
-                classpath.addExisting(attributes.getClasspath()
-                                      .concatSystemClasspath("last"));
-            } else {
-                classpath.addExisting(attributes.getClasspath()
-                                      .concatSystemClasspath("ignore"));
-            }
-        }
-
-        if (attributes.getIncludejavaruntime()) {
-            classpath.addJavaRuntime();
-        }
-        return classpath;
-    }
-
-    /**
-     * setup rmic argument for rmic.
-     */
-    protected Commandline setupRmicCommand() {
-        return setupRmicCommand(null);
-    }
-
-    /**
-     * setup rmic argument for rmic.
-     *
-     * @param options additional parameters needed by a specific
-     *                implementation.
-     */
-    protected Commandline setupRmicCommand(String[] options) {
-        Commandline cmd = new Commandline();
-
-        if (options != null) {
-            for (int i = 0; i < options.length; i++) {
-                cmd.createArgument().setValue(options[i]);
-            }
-        }
-
-        Path classpath = getCompileClasspath();
-
-        cmd.createArgument().setValue("-d");
-        cmd.createArgument().setFile(attributes.getBase());
-
-        if (attributes.getExtdirs() != null) {
-            if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_1)) {
-                /*
-                 * XXX - This doesn't mix very well with build.systemclasspath,
-                 */
-                classpath.addExtdirs(attributes.getExtdirs());
-            } else {
-                cmd.createArgument().setValue("-extdirs");
-                cmd.createArgument().setPath(attributes.getExtdirs());
-            }
-        }
-
-        cmd.createArgument().setValue("-classpath");
-        cmd.createArgument().setPath(classpath);
-
-        String stubVersion = attributes.getStubVersion();
-        if (null != stubVersion) {
-            if ("1.1".equals(stubVersion)) {
-                cmd.createArgument().setValue("-v1.1");
-            } else if ("1.2".equals(stubVersion)) {
-                cmd.createArgument().setValue("-v1.2");
-            } else {
-                cmd.createArgument().setValue("-vcompat");
-            }
-        }
-
-        if (null != attributes.getSourceBase()) {
-            cmd.createArgument().setValue("-keepgenerated");
-        }
-
-        if (attributes.getIiop()) {
-            attributes.log("IIOP has been turned on.", Project.MSG_INFO);
-            cmd.createArgument().setValue("-iiop");
-            if (attributes.getIiopopts() != null) {
-                attributes.log("IIOP Options: " + attributes.getIiopopts(),
-                               Project.MSG_INFO);
-                cmd.createArgument().setValue(attributes.getIiopopts());
-            }
-        }
-
-        if (attributes.getIdl())  {
-            cmd.createArgument().setValue("-idl");
-            attributes.log("IDL has been turned on.", Project.MSG_INFO);
-            if (attributes.getIdlopts() != null) {
-                cmd.createArgument().setValue(attributes.getIdlopts());
-                attributes.log("IDL Options: " + attributes.getIdlopts(),
-                               Project.MSG_INFO);
-            }
-        }
-
-        if (attributes.getDebug()) {
-            cmd.createArgument().setValue("-g");
-        }
-
-        cmd.addArguments(attributes.getCurrentCompilerArgs());
-
-        logAndAddFilesToCompile(cmd);
-        return cmd;
-     }
-
-    /**
-     * Logs the compilation parameters, adds the files to compile and logs the 
-     * &qout;niceSourceList&quot;
-     */
-    protected void logAndAddFilesToCompile(Commandline cmd) {
-        Vector compileList = attributes.getCompileList();
-
-        attributes.log("Compilation " + cmd.describeArguments(),
-                       Project.MSG_VERBOSE);
-
-        StringBuffer niceSourceList = new StringBuffer("File");
-        if (compileList.size() != 1) {
-            niceSourceList.append("s");
-        }
-        niceSourceList.append(" to be compiled:");
-
-        for (int i = 0; i < compileList.size(); i++) {
-            String arg = (String) compileList.elementAt(i);
-            cmd.createArgument().setValue(arg);
-            niceSourceList.append("    " + arg);
-        }
-
-        attributes.log(niceSourceList.toString(), Project.MSG_VERBOSE);
-    }
-
-    /**
-     * Mapper that may return up to two file names.
-     *
-     * <ul>
-     *   <li>for JRMP it will return *_getStubClassSuffix (and
-     *   *_getSkelClassSuffix if JDK 1.1 is used)</li>
-     *
-     *   <li>for IDL it will return a random name, causing <rmic> to
-     *     always recompile.</li>
-     *
-     *   <li>for IIOP it will return _*_getStubClassSuffix for
-     *   interfaces and _*_getStubClassSuffix for non-interfaces (and
-     *   determine the interface and create _*_Stub from that).</li>
-     * </ul>
-     */
-    private class RmicFileNameMapper implements FileNameMapper {
-
-        RmicFileNameMapper() {}
-
-        /**
-         * Empty implementation.
-         */
-        public void setFrom(String s) {}
-        /**
-         * Empty implementation.
-         */
-        public void setTo(String s) {}
-
-        public String[] mapFileName(String name) {
-            if (name == null
-                || !name.endsWith(".class")
-                || name.endsWith(getStubClassSuffix() + ".class") 
-                || name.endsWith(getSkelClassSuffix() + ".class") 
-                || name.endsWith(getTieClassSuffix() + ".class")) {
-                // Not a .class file or the one we'd generate
-                return null;
-            }
-
-            // we know that name.endsWith(".class")
-            String base = name.substring(0, name.length() - 6);
-
-            String classname = base.replace(File.separatorChar, '.');
-            if (attributes.getVerify() &&
-                !attributes.isValidRmiRemote(classname)) {
-                return null;
-            }
-
-            /*
-             * fallback in case we have trouble loading the class or
-             * don't know how to handle it (there is no easy way to
-             * know what IDL mode would generate.
-             *
-             * This is supposed to make Ant always recompile the
-             * class, as a file of that name should not exist.
-             */
-            String[] target = new String[] {name + ".tmp." + rand.nextLong()};
-
-            if (!attributes.getIiop() && !attributes.getIdl()) {
-                // JRMP with simple naming convention
-                if ("1.2".equals(attributes.getStubVersion())) {
-                    target = new String[] {
-                        base + getStubClassSuffix() + ".class"
-                    };
-                } else {
-                    target = new String[] {
-                        base + getStubClassSuffix() + ".class",
-                        base + getSkelClassSuffix() + ".class",
-                    };
-                }
-            } else if (!attributes.getIdl()) {
-                int lastSlash = base.lastIndexOf(File.separatorChar);
-
-                String dirname = "";
-                /*
-                 * I know, this is not necessary, but I prefer it explicit (SB)
-                 */
-                int index = -1;
-                if (lastSlash == -1) {
-                    // no package
-                    index = 0;
-                } else {
-                    index = lastSlash + 1;
-                    dirname = base.substring(0, index);
-                }
-
-                String filename = base.substring(index);
-
-                try {
-                    Class c = attributes.getLoader().loadClass(classname);
-
-                    if (c.isInterface()) {
-                        // only stub, no tie
-                        target = new String[] {
-                            dirname + "_" + filename + getStubClassSuffix() 
-                            + ".class"
-                        };
-                    } else {
-                        /*
-                         * stub is derived from implementation, 
-                         * tie from interface name.
-                         */
-                        Class interf = attributes.getRemoteInterface(c);
-                        String iName = interf.getName();
-                        String iDir = "";
-                        int iIndex = -1;
-                        int lastDot = iName.lastIndexOf(".");
-                        if (lastDot == -1) {
-                            // no package
-                            iIndex = 0;
-                        } else {
-                            iIndex = lastDot + 1;
-                            iDir = iName.substring(0, iIndex);
-                            iDir = iDir.replace('.', File.separatorChar);
-                        }
-                        
-                        target = new String[] {
-                            dirname + "_" + filename + getTieClassSuffix() 
-                            + ".class",
-                            iDir + "_" + iName.substring(iIndex) 
-                            + getStubClassSuffix() + ".class"
-                        };
-                    }
-                } catch (ClassNotFoundException e) {
-                    attributes.log("Unable to verify class " + classname
-                                   + ". It could not be found.", 
-                                   Project.MSG_WARN);
-                } catch (NoClassDefFoundError e) {
-                    attributes.log("Unable to verify class " + classname
-                                   + ". It is not defined.", Project.MSG_WARN);
-                } catch (Throwable t) {
-                    attributes.log("Unable to verify class " + classname
-                                   + ". Loading caused Exception: "
-                                   + t.getMessage(), Project.MSG_WARN);
-                }
-            }
-            return target;
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/rmic/KaffeRmic.java b/src/main/org/apache/tools/ant/taskdefs/rmic/KaffeRmic.java
deleted file mode 100644
index b7d0469..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/rmic/KaffeRmic.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.rmic;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-
-import org.apache.tools.ant.types.Commandline;
-
-import java.lang.reflect.Constructor;
-import java.lang.reflect.Method;
-
-/**
- * The implementation of the rmic for Kaffe
- *
- * @author <a href="mailto:tokamoto@rd.nttdata.co.jp">Takashi Okamoto</a>
- * @since Ant 1.4
- */
-public class KaffeRmic extends DefaultRmicAdapter {
-
-    public boolean execute() throws BuildException {
-        getRmic().log("Using Kaffe rmic", Project.MSG_VERBOSE);
-        Commandline cmd = setupRmicCommand();
-
-        try {
-
-            Class c = Class.forName("kaffe.rmi.rmic.RMIC");
-            Constructor cons = c.getConstructor(new Class[] { String[].class });
-            Object rmic = cons.newInstance(new Object[] { cmd.getArguments() });
-            Method doRmic = c.getMethod("run", null);
-            Boolean ok = (Boolean) doRmic.invoke(rmic, null);
-
-            return ok.booleanValue();
-        } catch (ClassNotFoundException ex) {
-            throw new BuildException("Cannot use Kaffe rmic, as it is not "
-                                     + "available.  A common solution is to "
-                                     + "set the environment variable "
-                                     + "JAVA_HOME or CLASSPATH.", 
-                                     getRmic().getLocation());
-        } catch (Exception ex) {
-            if (ex instanceof BuildException) {
-                throw (BuildException) ex;
-            } else {
-                throw new BuildException("Error starting Kaffe rmic: ", 
-                                         ex, getRmic().getLocation());
-            }
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/rmic/RmicAdapter.java b/src/main/org/apache/tools/ant/taskdefs/rmic/RmicAdapter.java
deleted file mode 100644
index 61a9645..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/rmic/RmicAdapter.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.rmic;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.taskdefs.Rmic;
-import org.apache.tools.ant.types.Path;
-import org.apache.tools.ant.util.FileNameMapper;
-
-/**
- * The interface that all rmic adapters must adher to.  
- *
- * <p>A rmic adapter is an adapter that interprets the rmic's
- * parameters in preperation to be passed off to the compiler this
- * adapter represents.  As all the necessary values are stored in the
- * Rmic task itself, the only thing all adapters need is the rmic
- * task, the execute command and a parameterless constructor (for
- * reflection).</p>
- *
- * @author <a href="mailto:tokamoto@rd.nttdata.co.jp">Takashi Okamoto</a>
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> 
- * @since Ant 1.4
- */
-
-public interface RmicAdapter {
-
-    /**
-     * Sets the rmic attributes, which are stored in the Rmic task.
-     */
-    void setRmic(Rmic attributes);
-
-    /**
-     * Executes the task.
-     *
-     * @return has the compilation been successful
-     */
-    boolean execute() throws BuildException;
-
-    /**
-     * Maps source class files to the files generated by this rmic
-     * implementation.
-     */
-    FileNameMapper getMapper();
-
-    /**
-     * The CLASSPATH this rmic process will use.
-     */
-    Path getClasspath();
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/rmic/RmicAdapterFactory.java b/src/main/org/apache/tools/ant/taskdefs/rmic/RmicAdapterFactory.java
deleted file mode 100644
index 891a0cb..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/rmic/RmicAdapterFactory.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.rmic;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Task;
-
-
-/**
- * Creates the necessary rmic adapter, given basic criteria.
- *
- * @author <a href="mailto:tokamoto@rd.nttdata.co.jp">Takashi Okamoto</a>
- * @author <a href="mailto:jayglanville@home.com">J D Glanville</a>
- * @since 1.4
- */
-public class RmicAdapterFactory {
-
-    /** This is a singleton -- can't create instances!! */
-    private RmicAdapterFactory() {
-    }
-
-    /**
-     * Based on the parameter passed in, this method creates the necessary
-     * factory desired.
-     *
-     * <p>The current mapping for rmic names are as follows:</p>
-     * <ul><li>sun = SUN's rmic
-     * <li>kaffe = Kaffe's rmic
-     * <li><i>a fully quallified classname</i> = the name of a rmic
-     * adapter
-     * </ul>
-     *
-     * @param rmicType either the name of the desired rmic, or the
-     * full classname of the rmic's adapter.
-     * @param task a task to log through.
-     * @throws BuildException if the rmic type could not be resolved into
-     * a rmic adapter.
-     */
-    public static RmicAdapter getRmic(String rmicType, Task task) 
-        throws BuildException {
-        if (rmicType.equalsIgnoreCase("sun")) {
-            return new SunRmic();
-        } else if (rmicType.equalsIgnoreCase("kaffe")) {
-            return new KaffeRmic();
-        } else if (rmicType.equalsIgnoreCase("weblogic")) {
-            return new WLRmic();
-        }
-        return resolveClassName(rmicType);
-    }
-
-    /**
-     * Tries to resolve the given classname into a rmic adapter.
-     * Throws a fit if it can't.
-     *
-     * @param className The fully qualified classname to be created.
-     * @throws BuildException This is the fit that is thrown if className
-     * isn't an instance of RmicAdapter.
-     */
-    private static RmicAdapter resolveClassName(String className)
-        throws BuildException {
-        try {
-            Class c = Class.forName(className);
-            Object o = c.newInstance();
-            return (RmicAdapter) o;
-        } catch (ClassNotFoundException cnfe) {
-            throw new BuildException(className + " can\'t be found.", cnfe);
-        } catch (ClassCastException cce) {
-            throw new BuildException(className + " isn\'t the classname of "
-                                     + "a rmic adapter.", cce);
-        } catch (Throwable t) {
-            // for all other possibilities
-            throw new BuildException(className + " caused an interesting "
-                                     + "exception.", t);
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/rmic/SunRmic.java b/src/main/org/apache/tools/ant/taskdefs/rmic/SunRmic.java
deleted file mode 100644
index 07df775..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/rmic/SunRmic.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.rmic;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.taskdefs.LogOutputStream;
-import org.apache.tools.ant.types.Commandline;
-
-import java.io.OutputStream;
-import java.io.IOException;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.Method;
-
-/**
- * The implementation of the rmic for SUN's JDK.
- *
- * @author <a href="mailto:tokamoto@rd.nttdata.co.jp">Takashi Okamoto</a>
- * @since Ant 1.4
- */
-public class SunRmic extends DefaultRmicAdapter {
-
-    public boolean execute() throws BuildException {
-        getRmic().log("Using SUN rmic compiler", Project.MSG_VERBOSE);
-        Commandline cmd = setupRmicCommand();
-
-        // Create an instance of the rmic, redirecting output to
-        // the project log
-        LogOutputStream logstr = new LogOutputStream(getRmic(), 
-                                                     Project.MSG_WARN);
-
-        try {
-            Class c = Class.forName("sun.rmi.rmic.Main");
-            Constructor cons = c.getConstructor(new Class[] 
-                { OutputStream.class, String.class });
-            Object rmic = cons.newInstance(new Object[] { logstr, "rmic" });
-
-            Method doRmic = c.getMethod("compile", 
-                                        new Class [] { String[].class });
-            Boolean ok = 
-                (Boolean) doRmic.invoke(rmic, 
-                                       (new Object[] {cmd.getArguments()}));
-            return ok.booleanValue();
-        } catch (ClassNotFoundException ex) {
-            throw new BuildException("Cannot use SUN rmic, as it is not "
-                                     + "available.  A common solution is to "
-                                     + "set the environment variable "
-                                     + "JAVA_HOME or CLASSPATH.",
-                                     getRmic().getLocation());
-        } catch (Exception ex) {
-            if (ex instanceof BuildException) {
-                throw (BuildException) ex;
-            } else {
-                throw new BuildException("Error starting SUN rmic: ", 
-                                         ex, getRmic().getLocation());
-            }
-        } finally {
-            try {
-                logstr.close();
-            } catch (IOException e) {
-                throw new BuildException(e);
-            }
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/taskdefs/rmic/WLRmic.java b/src/main/org/apache/tools/ant/taskdefs/rmic/WLRmic.java
deleted file mode 100644
index 4cd2ade..0000000
--- a/src/main/org/apache/tools/ant/taskdefs/rmic/WLRmic.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.rmic;
-
-import org.apache.tools.ant.AntClassLoader;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-
-import org.apache.tools.ant.types.Commandline;
-
-import java.lang.reflect.Method;
-
-/**
- * The implementation of the rmic for WebLogic
- *
- * @author <a href="mailto:tokamoto@rd.nttdata.co.jp">Takashi Okamoto</a>
- * @since Ant 1.4
- */
-public class WLRmic extends DefaultRmicAdapter {
-
-    public boolean execute() throws BuildException {
-        getRmic().log("Using WebLogic rmic", Project.MSG_VERBOSE);
-        Commandline cmd = setupRmicCommand(new String[] {"-noexit"});
-
-        AntClassLoader loader = null;
-        try {
-            // Create an instance of the rmic
-            Class c = null;
-            if (getRmic().getClasspath() == null) {
-                c = Class.forName("weblogic.rmic");
-            } else {
-                loader = new AntClassLoader(getRmic().getProject(), 
-                                            getRmic().getClasspath());
-                c = loader.loadClass("weblogic.rmic");
-                AntClassLoader.initializeClass(c);
-            }
-            Method doRmic = c.getMethod("main",
-                                        new Class [] { String[].class });
-            doRmic.invoke(null, new Object[] {cmd.getArguments()  });
-            return true;
-        } catch (ClassNotFoundException ex) {
-            throw new BuildException("Cannot use WebLogic rmic, as it is not "
-                                     + "available.  A common solution is to "
-                                     + "set the environment variable "
-                                     + "CLASSPATH.", getRmic().getLocation());
-        } catch (Exception ex) {
-            if (ex instanceof BuildException) {
-                throw (BuildException) ex;
-            } else {
-                throw new BuildException("Error starting WebLogic rmic: ", ex,
-                                         getRmic().getLocation());
-            }
-        } finally {
-            if (loader != null) {
-                loader.cleanup();
-            }
-        }
-    }
-
-    /**
-     * Get the suffix for the rmic stub classes
-     */
-    public String getStubClassSuffix() {
-        return "_WLStub";
-    }
-
-    /**
-     * Get the suffix for the rmic skeleton classes
-     */
-    public String getSkelClassSuffix() {
-        return "_WLSkel";
-    }
-}
diff --git a/src/main/org/apache/tools/ant/types/AbstractFileSet.java b/src/main/org/apache/tools/ant/types/AbstractFileSet.java
deleted file mode 100644
index 00b4a4b..0000000
--- a/src/main/org/apache/tools/ant/types/AbstractFileSet.java
+++ /dev/null
@@ -1,533 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.types;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.FileScanner;
-import org.apache.tools.ant.DirectoryScanner;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.types.selectors.*;
-
-import java.io.File;
-import java.util.Stack;
-import java.util.Vector;
-import java.util.Hashtable;
-import java.util.Enumeration;
-
-/**
- * Class that holds an implicit patternset and supports nested
- * patternsets and creates a DirectoryScanner using these patterns.
- *
- * <p>Common base class for DirSet and FileSet.</p>
- *
- * @author <a href="mailto:ajkuiper@wxs.nl">Arnout J. Kuiper</a>
- * @author <a href="mailto:stefano@apache.org">Stefano Mazzocchi</a>
- * @author <a href="mailto:rubys@us.ibm.com">Sam Ruby</a>
- * @author <a href="mailto:jon@clearink.com">Jon S. Stevens</a>
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- * @author <a href="mailto:umagesh@rediffmail.com">Magesh Umasankar</a>
- * @author <a href="mailto:bruce@callenish.com">Bruce Atherton</a>
- */
-public abstract class AbstractFileSet extends DataType implements Cloneable,
-        SelectorContainer {
-
-    private PatternSet defaultPatterns = new PatternSet();
-    private Vector additionalPatterns = new Vector();
-    private Vector selectors = new Vector();
-
-    private File dir;
-    private boolean useDefaultExcludes = true;
-    private boolean isCaseSensitive = true;
-
-
-    public AbstractFileSet() {
-        super();
-    }
-
-    protected AbstractFileSet(AbstractFileSet fileset) {
-        this.dir = fileset.dir;
-        this.defaultPatterns = fileset.defaultPatterns;
-        this.additionalPatterns = fileset.additionalPatterns;
-        this.useDefaultExcludes = fileset.useDefaultExcludes;
-        this.isCaseSensitive = fileset.isCaseSensitive;
-        setProject(fileset.getProject());
-    }
-
-    /**
-     * Makes this instance in effect a reference to another instance.
-     *
-     * <p>You must not set another attribute or nest elements inside
-     * this element if you make it a reference.</p>
-     */
-    public void setRefid(Reference r) throws BuildException {
-        if (dir != null || defaultPatterns.hasPatterns()) {
-            throw tooManyAttributes();
-        }
-        if (!additionalPatterns.isEmpty()) {
-            throw noChildrenAllowed();
-        }
-        super.setRefid(r);
-    }
-
-    /**
-     * Sets the base-directory for this instance.
-     */
-    public void setDir(File dir) throws BuildException {
-        if (isReference()) {
-            throw tooManyAttributes();
-        }
-
-        this.dir = dir;
-    }
-
-    /**
-     * Retrieves the base-directory for this instance.
-     */
-    public File getDir(Project p) {
-        if (isReference()) {
-            return getRef(p).getDir(p);
-        }
-        return dir;
-    }
-
-    /**
-     * Creates a nested patternset.
-     */
-    public PatternSet createPatternSet() {
-        if (isReference()) {
-            throw noChildrenAllowed();
-        }
-        PatternSet patterns = new PatternSet();
-        additionalPatterns.addElement(patterns);
-        return patterns;
-    }
-
-    /**
-     * add a name entry on the include list
-     */
-    public PatternSet.NameEntry createInclude() {
-        if (isReference()) {
-            throw noChildrenAllowed();
-        }
-        return defaultPatterns.createInclude();
-    }
-
-    /**
-     * add a name entry on the include files list
-     */
-    public PatternSet.NameEntry createIncludesFile() {
-        if (isReference()) {
-            throw noChildrenAllowed();
-        }
-        return defaultPatterns.createIncludesFile();
-    }
-
-    /**
-     * add a name entry on the exclude list
-     */
-    public PatternSet.NameEntry createExclude() {
-        if (isReference()) {
-            throw noChildrenAllowed();
-        }
-        return defaultPatterns.createExclude();
-    }
-
-    /**
-     * add a name entry on the include files list
-     */
-    public PatternSet.NameEntry createExcludesFile() {
-        if (isReference()) {
-            throw noChildrenAllowed();
-        }
-        return defaultPatterns.createExcludesFile();
-    }
-
-    /**
-     * Appends <code>includes</code> to the current list of include
-     * patterns.
-     *
-     * <p>Patterns may be separated by a comma or a space.</p>
-     *
-     * @param includes the string containing the include patterns
-     */
-    public void setIncludes(String includes) {
-        if (isReference()) {
-            throw tooManyAttributes();
-        }
-
-        defaultPatterns.setIncludes(includes);
-    }
-
-    /**
-     * Appends <code>excludes</code> to the current list of exclude
-     * patterns.
-     *
-     * <p>Patterns may be separated by a comma or a space.</p>
-     *
-     * @param excludes the string containing the exclude patterns
-     */
-    public void setExcludes(String excludes) {
-        if (isReference()) {
-            throw tooManyAttributes();
-        }
-
-        defaultPatterns.setExcludes(excludes);
-    }
-
-    /**
-     * Sets the name of the file containing the includes patterns.
-     *
-     * @param incl The file to fetch the include patterns from.
-     */
-     public void setIncludesfile(File incl) throws BuildException {
-         if (isReference()) {
-             throw tooManyAttributes();
-         }
-
-         defaultPatterns.setIncludesfile(incl);
-     }
-
-    /**
-     * Sets the name of the file containing the includes patterns.
-     *
-     * @param excl The file to fetch the exclude patterns from.
-     */
-     public void setExcludesfile(File excl) throws BuildException {
-         if (isReference()) {
-             throw tooManyAttributes();
-         }
-
-         defaultPatterns.setExcludesfile(excl);
-     }
-
-    /**
-     * Sets whether default exclusions should be used or not.
-     *
-     * @param useDefaultExcludes "true"|"on"|"yes" when default exclusions
-     *                           should be used, "false"|"off"|"no" when they
-     *                           shouldn't be used.
-     */
-    public void setDefaultexcludes(boolean useDefaultExcludes) {
-        if (isReference()) {
-            throw tooManyAttributes();
-        }
-
-        this.useDefaultExcludes = useDefaultExcludes;
-    }
-
-    /**
-     * Sets case sensitivity of the file system
-     *
-     * @param isCaseSensitive "true"|"on"|"yes" if file system is case
-     *                           sensitive, "false"|"off"|"no" when not.
-     */
-    public void setCaseSensitive(boolean isCaseSensitive) {
-        this.isCaseSensitive = isCaseSensitive;
-    }
-
-
-
-    /**
-     * sets the name used for this datatype instance.
-     */
-    protected String getDataTypeName() {
-        // look up the types in project and see if they match this class
-        Project project = getProject();
-        if (project != null) {
-            Hashtable typedefs = project.getDataTypeDefinitions();
-            for (Enumeration e = typedefs.keys(); e.hasMoreElements();) {
-                String typeName = (String) e.nextElement();
-                Class typeClass = (Class) typedefs.get(typeName);
-                if (typeClass == getClass()) {
-                    return typeName;
-                }
-            }
-        }
-
-        String classname = getClass().getName();
-
-        int dotIndex = classname.lastIndexOf(".");
-        if (dotIndex == -1) {
-            return classname;
-        }
-        return classname.substring(dotIndex + 1);
-    }
-
-    /**
-     * Returns the directory scanner needed to access the files to process.
-     */
-    public DirectoryScanner getDirectoryScanner(Project p) {
-        if (isReference()) {
-            return getRef(p).getDirectoryScanner(p);
-        }
-
-        if (dir == null) {
-            throw new BuildException("No directory specified for "
-                                     + getDataTypeName() + ".");
-        }
-
-        if (!dir.exists()) {
-            throw new BuildException(dir.getAbsolutePath() + " not found.");
-        }
-        if (!dir.isDirectory()) {
-            throw new BuildException(dir.getAbsolutePath()
-                                     + " is not a directory.");
-        }
-
-        DirectoryScanner ds = new DirectoryScanner();
-        setupDirectoryScanner(ds, p);
-        ds.scan();
-        return ds;
-    }
-
-    public void setupDirectoryScanner(FileScanner ds, Project p) {
-        if (ds == null) {
-            throw new IllegalArgumentException("ds cannot be null");
-        }
-
-        ds.setBasedir(dir);
-
-        final int count = additionalPatterns.size();
-        for (int i = 0; i < count; i++) {
-            Object o = additionalPatterns.elementAt(i);
-            defaultPatterns.append((PatternSet) o, p);
-        }
-
-        p.log(getDataTypeName() + ": Setup scanner in dir " + dir +
-            " with " + defaultPatterns, Project.MSG_DEBUG);
-
-        ds.setIncludes(defaultPatterns.getIncludePatterns(p));
-        ds.setExcludes(defaultPatterns.getExcludePatterns(p));
-        if (ds instanceof SelectorScanner) {
-            SelectorScanner ss = (SelectorScanner)ds;
-            ss.setSelectors(getSelectors(p));
-        }
-
-        if (useDefaultExcludes) {
-            ds.addDefaultExcludes();
-        }
-        ds.setCaseSensitive(isCaseSensitive);
-    }
-
-    /**
-     * Performs the check for circular references and returns the
-     * referenced FileSet.
-     */
-    protected AbstractFileSet getRef(Project p) {
-        if (!checked) {
-            Stack stk = new Stack();
-            stk.push(this);
-            dieOnCircularReference(stk, p);
-        }
-
-        Object o = ref.getReferencedObject(p);
-        if (!getClass().isAssignableFrom(o.getClass())) {
-            String msg = ref.getRefId() + " doesn\'t denote a "
-                + getDataTypeName();
-            throw new BuildException(msg);
-        } else {
-            return (AbstractFileSet) o;
-        }
-    }
-
-    // SelectorContainer methods
-
-    /**
-     * Indicates whether there are any selectors here.
-     *
-     * @return whether any selectors are in this container
-     */
-    public boolean hasSelectors() {
-        return !(selectors.isEmpty());
-    }
-
-    /**
-     * Gives the count of the number of selectors in this container
-     *
-     * @return the number of selectors in this container
-     */
-    public int selectorCount() {
-        return selectors.size();
-    }
-
-    /**
-     * Returns the set of selectors as an array.
-     *
-     * @return an array of selectors in this container
-     */
-    public FileSelector[] getSelectors(Project p) {
-        if (isReference()) {
-            return getRef(p).getSelectors(p);
-        } else {
-            FileSelector[] result = new FileSelector[selectors.size()];
-            selectors.copyInto(result);
-            return result;
-        }
-    }
-
-    /**
-     * Returns an enumerator for accessing the set of selectors.
-     *
-     * @return an enumerator that goes through each of the selectors
-     */
-    public Enumeration selectorElements() {
-        return selectors.elements();
-    }
-
-    /**
-     * Add a new selector into this container.
-     *
-     * @param selector the new selector to add
-     */
-    public void appendSelector(FileSelector selector) {
-        if (isReference()) {
-            throw noChildrenAllowed();
-        }
-        selectors.addElement(selector);
-    }
-
-    /* Methods below all implement the static selectors */
-
-    /**
-     * add an "And" selector entry on the selector list
-     */
-    public void addAnd(AndSelector selector) {
-        appendSelector(selector);
-    }
-
-    /**
-     * add an "Or" selector entry on the selector list
-     */
-    public void addOr(OrSelector selector) {
-        appendSelector(selector);
-    }
-
-    /**
-     * add a "Not" selector entry on the selector list
-     */
-    public void addNot(NotSelector selector) {
-        appendSelector(selector);
-    }
-
-    /**
-     * add a "None" selector entry on the selector list
-     */
-    public void addNone(NoneSelector selector) {
-        appendSelector(selector);
-    }
-
-    /**
-     * add a majority selector entry on the selector list
-     */
-    public void addMajority(MajoritySelector selector) {
-        appendSelector(selector);
-    }
-
-    /**
-     * add a selector date entry on the selector list
-     */
-    public void addDateselect(DateSelector selector) {
-        appendSelector(selector);
-    }
-
-    /**
-     * add a selector size entry on the selector list
-     */
-    public void addSizeselect(SizeSelector selector) {
-        appendSelector(selector);
-    }
-
-    /**
-     * add a selector filename entry on the selector list
-     */
-    public void addFilenameselect(FilenameSelector selector) {
-        appendSelector(selector);
-    }
-
-    /**
-     * add an extended selector entry on the selector list
-     */
-    public void addExtendSelect(ExtendSelector selector) {
-        appendSelector(selector);
-    }
-
-    /**
-     * add a contains selector entry on the selector list
-     */
-    public void addContainsSelect(ContainsSelector selector) {
-        appendSelector(selector);
-    }
-
-    /**
-     * add a present selector entry on the selector list
-     */
-    public void addPresentSelect(PresentSelector selector) {
-        appendSelector(selector);
-    }
-
-    /**
-     * add a depth selector entry on the selector list
-     */
-    public void addDepthSelect(DepthSelector selector) {
-        appendSelector(selector);
-    }
-
-    /**
-     * add a depends selector entry on the selector list
-     */
-    public void addDependSelect(DependSelector selector) {
-        appendSelector(selector);
-    }
-
-}
diff --git a/src/main/org/apache/tools/ant/types/AntFilterReader.java b/src/main/org/apache/tools/ant/types/AntFilterReader.java
deleted file mode 100644
index fa73a85..0000000
--- a/src/main/org/apache/tools/ant/types/AntFilterReader.java
+++ /dev/null
@@ -1,172 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.types;
-
-import org.apache.tools.ant.BuildException;
-import java.util.Vector;
-
-/**
- * An AntFileReader is a wrapper class that encloses the classname
- * and configuration of a Configurable FilterReader.
- *
- * @author <a href="mailto:umagesh@apache.org">Magesh Umasankar</a>
- */
-public final class AntFilterReader
-    extends DataType
-    implements Cloneable {
-
-    private String className;
-
-    private final Vector parameters = new Vector();
-
-    private Path classpath;
-
-    public final void setClassName(final String className) {
-        this.className = className;
-    }
-
-    public final String getClassName() {
-        return className;
-    }
-
-    public final void addParam(final Parameter param) {
-        parameters.addElement(param);
-    }
-
-    /**
-     * Set the classpath to load the FilterReader through (attribute).
-     */
-    public final void setClasspath(Path classpath) {
-        if (isReference()) {
-            throw tooManyAttributes();
-        }
-        if (this.classpath == null) {
-            this.classpath = classpath;
-        } else {
-            this.classpath.append(classpath);
-        }
-    }
-
-    /**
-     * Set the classpath to load the FilterReader through (nested element).
-     */
-    public final Path createClasspath() {
-        if (isReference()) {
-            throw noChildrenAllowed();
-        }
-        if (this.classpath == null) {
-            this.classpath = new Path(getProject());
-        }
-        return this.classpath.createPath();
-    }
-
-    /**
-     * Get the classpath
-     */
-    public final Path getClasspath() {
-        return classpath;
-    }
-
-    /**
-     * Set the classpath to load the FilterReader through via
-     * reference (attribute).
-     */
-    public void setClasspathRef(Reference r) {
-        if (isReference()) {
-            throw tooManyAttributes();
-        }
-        createClasspath().setRefid(r);
-    }
-
-    public final Parameter[] getParams() {
-        Parameter[] params = new Parameter[parameters.size()];
-        parameters.copyInto(params);
-        return params;
-    }
-
-    /**
-     * Makes this instance in effect a reference to another AntFilterReader 
-     * instance.
-     *
-     * <p>You must not set another attribute or nest elements inside
-     * this element if you make it a reference.</p>
-     *
-     * @param r the reference to which this instance is associated
-     * @exception BuildException if this instance already has been configured.
-     */
-    public void setRefid(Reference r) throws BuildException {
-        if (!parameters.isEmpty() || className != null
-                || classpath != null) {
-            throw tooManyAttributes();
-        }
-        // change this to get the objects from the other reference
-        Object o = r.getReferencedObject(getProject());
-        if (o instanceof AntFilterReader) {
-            AntFilterReader afr = (AntFilterReader) o;
-            setClassName(afr.getClassName());
-            setClasspath(afr.getClasspath());
-            Parameter[] p = afr.getParams();
-            if (p != null) {
-                for (int i = 0; i < p.length; i++) {
-                    addParam(p[i]);
-                }
-            }
-        } else {
-            String msg = r.getRefId() + " doesn\'t refer to a FilterReader";
-            throw new BuildException(msg);
-        }
-
-        super.setRefid(r);
-    }
-}
diff --git a/src/main/org/apache/tools/ant/types/Commandline.java b/src/main/org/apache/tools/ant/types/Commandline.java
deleted file mode 100644
index e19b9e9..0000000
--- a/src/main/org/apache/tools/ant/types/Commandline.java
+++ /dev/null
@@ -1,552 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.types;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.util.StringUtils;
-import java.io.File;
-import java.util.Vector;
-import java.util.StringTokenizer;
-
-
-/**
- * Commandline objects help handling command lines specifying processes to
- * execute.
- *
- * The class can be used to define a command line as nested elements or as a
- * helper to define a command line by an application.
- * <p>
- * <code>
- * &lt;someelement&gt;<br>
- * &nbsp;&nbsp;&lt;acommandline executable="/executable/to/run"&gt;<br>
- * &nbsp;&nbsp;&nbsp;&nbsp;&lt;argument value="argument 1" /&gt;<br>
- * &nbsp;&nbsp;&nbsp;&nbsp;&lt;argument line="argument_1 argument_2 argument_3" /&gt;<br>
- * &nbsp;&nbsp;&nbsp;&nbsp;&lt;argument value="argument 4" /&gt;<br>
- * &nbsp;&nbsp;&lt;/acommandline&gt;<br>
- * &lt;/someelement&gt;<br>
- * </code>
- * The element <code>someelement</code> must provide a method
- * <code>createAcommandline</code> which returns an instance of this class.
- *
- * @author thomas.haas@softwired-inc.com
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- */
-public class Commandline implements Cloneable {
-
-    private Vector arguments = new Vector();
-    private String executable = null;
-
-    protected static final String DISCLAIMER =
-        StringUtils.LINE_SEP
-        + "The \' characters around the executable and arguments are"
-        + StringUtils.LINE_SEP
-        + "not part of the command."
-        + StringUtils.LINE_SEP;
-
-    public Commandline(String to_process) {
-        super();
-        String[] tmp = translateCommandline(to_process);
-        if (tmp != null && tmp.length > 0) {
-            setExecutable(tmp[0]);
-            for (int i = 1; i < tmp.length; i++) {
-                createArgument().setValue(tmp[i]);
-            }
-        }
-    }
-
-    public Commandline() {
-        super();
-    }
-
-    /**
-     * Used for nested xml command line definitions.
-     */
-    public static class Argument {
-
-        private String[] parts;
-
-        /**
-         * Sets a single commandline argument.
-         *
-         * @param value a single commandline argument.
-         */
-        public void setValue(String value) {
-            parts = new String[] {value};
-        }
-
-        /**
-         * Line to split into several commandline arguments.
-         *
-         * @param line line to split into several commandline arguments
-         */
-        public void setLine(String line) {
-            if (line == null) {
-                return;
-            }
-            parts = translateCommandline(line);
-        }
-
-        /**
-         * Sets a single commandline argument and treats it like a
-         * PATH - ensures the right separator for the local platform
-         * is used.
-         *
-         * @param value a single commandline argument.
-         */
-        public void setPath(Path value) {
-            parts = new String[] {value.toString()};
-        }
-
-        /**
-         * Sets a single commandline argument to the absolute filename
-         * of the given file.
-         *
-         * @param value a single commandline argument.
-         */
-        public void setFile(File value) {
-            parts = new String[] {value.getAbsolutePath()};
-        }
-
-        /**
-         * Returns the parts this Argument consists of.
-         */
-        public String[] getParts() {
-            return parts;
-        }
-    }
-
-    /**
-     * Class to keep track of the position of an Argument.
-     */
-    // <p>This class is there to support the srcfile and targetfile
-    // elements of &lt;execon&gt; and &lt;transform&gt; - don't know
-    // whether there might be additional use cases.</p> --SB
-    public class Marker {
-
-        private int position;
-        private int realPos = -1;
-
-        Marker(int position) {
-            this.position = position;
-        }
-
-        /**
-         * Return the number of arguments that preceeded this marker.
-         *
-         * <p>The name of the executable - if set - is counted as the
-         * very first argument.</p>
-         */
-        public int getPosition() {
-            if (realPos == -1) {
-                realPos = (executable == null ? 0 : 1);
-                for (int i = 0; i < position; i++) {
-                    Argument arg = (Argument) arguments.elementAt(i);
-                    realPos += arg.getParts().length;
-                }
-            }
-            return realPos;
-        }
-    }
-
-    /**
-     * Creates an argument object.
-     *
-     * <p>Each commandline object has at most one instance of the
-     * argument class.  This method calls
-     * <code>this.createArgument(false)</code>.</p>
-     *
-     * @see #createArgument(boolean)
-     * @return the argument object.
-     */
-    public Argument createArgument() {
-        return this.createArgument(false);
-    }
-
-    /**
-     * Creates an argument object and adds it to our list of args.
-     *
-     * <p>Each commandline object has at most one instance of the
-     * argument class.</p>
-     *
-     * @param insertAtStart if true, the argument is inserted at the
-     * beginning of the list of args, otherwise it is appended.
-     */
-    public Argument createArgument(boolean insertAtStart) {
-        Argument argument = new Argument();
-        if (insertAtStart) {
-            arguments.insertElementAt(argument, 0);
-        } else {
-            arguments.addElement(argument);
-        }
-        return argument;
-    }
-
-    /**
-     * Sets the executable to run.
-     */
-    public void setExecutable(String executable) {
-        if (executable == null || executable.length() == 0) {
-            return;
-        }
-        this.executable = executable.replace('/', File.separatorChar)
-            .replace('\\', File.separatorChar);
-    }
-
-
-    public String getExecutable() {
-        return executable;
-    }
-
-
-    public void addArguments(String[] line) {
-        for (int i = 0; i < line.length; i++) {
-            createArgument().setValue(line[i]);
-        }
-    }
-
-    /**
-     * Returns the executable and all defined arguments.
-     */
-    public String[] getCommandline() {
-        final String[] args = getArguments();
-        if (executable == null) {
-            return args;
-        }
-        final String[] result = new String[args.length + 1];
-        result[0] = executable;
-        System.arraycopy(args, 0, result, 1, args.length);
-        return result;
-    }
-
-
-    /**
-     * Returns all arguments defined by <code>addLine</code>,
-     * <code>addValue</code> or the argument object.
-     */
-    public String[] getArguments() {
-        Vector result = new Vector(arguments.size() * 2);
-        for (int i = 0; i < arguments.size(); i++) {
-            Argument arg = (Argument) arguments.elementAt(i);
-            String[] s = arg.getParts();
-            if (s != null) {
-                for (int j = 0; j < s.length; j++) {
-                    result.addElement(s[j]);
-                }
-            }
-        }
-
-        String [] res = new String[result.size()];
-        result.copyInto(res);
-        return res;
-    }
-
-
-    public String toString() {
-        return toString(getCommandline());
-    }
-
-    /**
-     * Put quotes around the given String if necessary.
-     *
-     * <p>If the argument doesn't include spaces or quotes, return it
-     * as is. If it contains double quotes, use single quotes - else
-     * surround the argument by double quotes.</p>
-     *
-     * @exception BuildException if the argument contains both, single
-     *                           and double quotes.
-     */
-    public static String quoteArgument(String argument) {
-        if (argument.indexOf("\"") > -1) {
-            if (argument.indexOf("\'") > -1) {
-                throw new BuildException("Can\'t handle single and double quotes in same argument");
-            } else {
-                return '\'' + argument + '\'';
-            }
-        } else if (argument.indexOf("\'") > -1 || argument.indexOf(" ") > -1) {
-            return '\"' + argument + '\"';
-        } else {
-            return argument;
-        }
-    }
-
-    /**
-     * Quotes the parts of the given array in way that makes them
-     * usable as command line arguments.
-     */
-    public static String toString(String [] line) {
-        // empty path return empty string
-        if (line == null || line.length == 0) {
-            return "";
-        }
-
-        // path containing one or more elements
-        final StringBuffer result = new StringBuffer();
-        for (int i = 0; i < line.length; i++) {
-            if (i > 0) {
-                result.append(' ');
-            }
-            result.append(quoteArgument(line[i]));
-        }
-        return result.toString();
-    }
-
-    public static String[] translateCommandline(String to_process) {
-        if (to_process == null || to_process.length() == 0) {
-            return new String[0];
-        }
-
-        // parse with a simple finite state machine
-
-        final int normal = 0;
-        final int inQuote = 1;
-        final int inDoubleQuote = 2;
-        int state = normal;
-        StringTokenizer tok = new StringTokenizer(to_process, "\"\' ", true);
-        Vector v = new Vector();
-        StringBuffer current = new StringBuffer();
-
-        while (tok.hasMoreTokens()) {
-            String nextTok = tok.nextToken();
-            switch (state) {
-            case inQuote:
-                if ("\'".equals(nextTok)) {
-                    state = normal;
-                } else {
-                    current.append(nextTok);
-                }
-                break;
-            case inDoubleQuote:
-                if ("\"".equals(nextTok)) {
-                    state = normal;
-                } else {
-                    current.append(nextTok);
-                }
-                break;
-            default:
-                if ("\'".equals(nextTok)) {
-                    state = inQuote;
-                } else if ("\"".equals(nextTok)) {
-                    state = inDoubleQuote;
-                } else if (" ".equals(nextTok)) {
-                    if (current.length() != 0) {
-                        v.addElement(current.toString());
-                        current.setLength(0);
-                    }
-                } else {
-                    current.append(nextTok);
-                }
-                break;
-            }
-        }
-
-        if (current.length() != 0) {
-            v.addElement(current.toString());
-        }
-
-        if (state == inQuote || state == inDoubleQuote) {
-            throw new BuildException("unbalanced quotes in " + to_process);
-        }
-
-        String[] args = new String[v.size()];
-        v.copyInto(args);
-        return args;
-    }
-
-    public int size() {
-        return getCommandline().length;
-    }
-
-    public Object clone() {
-        Commandline c = new Commandline();
-        c.setExecutable(executable);
-        c.addArguments(getArguments());
-        return c;
-    }
-
-    /**
-     * Clear out the whole command line.  */
-    public void clear() {
-        executable = null;
-        arguments.removeAllElements();
-    }
-
-    /**
-     * Clear out the arguments but leave the executable in place for
-     * another operation.
-     */
-    public void clearArgs() {
-        arguments.removeAllElements();
-    }
-
-    /**
-     * Return a marker.
-     *
-     * <p>This marker can be used to locate a position on the
-     * commandline - to insert something for example - when all
-     * parameters have been set.</p>
-     */
-    public Marker createMarker() {
-        return new Marker(arguments.size());
-    }
-
-    /**
-     * Returns a String that describes the command and arguments
-     * suitable for verbose output before a call to
-     * <code>Runtime.exec(String[])<code>
-     *
-     * @since Ant 1.5
-     */
-    public String describeCommand() {
-        return describeCommand(this);
-    }
-
-    /**
-     * Returns a String that describes the arguments suitable for
-     * verbose output before a call to
-     * <code>Runtime.exec(String[])<code>
-     *
-     * @since Ant 1.5
-     */
-    public String describeArguments() {
-        return describeArguments(this);
-    }
-
-    /**
-     * Returns a String that describes the command and arguments
-     * suitable for verbose output before a call to
-     * <code>Runtime.exec(String[])<code>
-     *
-     * @since Ant 1.5
-     */
-    public static String describeCommand(Commandline line) {
-        return describeCommand(line.getCommandline());
-    }
-
-    /**
-     * Returns a String that describes the arguments suitable for
-     * verbose output before a call to
-     * <code>Runtime.exec(String[])<code>
-     *
-     * @since Ant 1.5
-     */
-    public static String describeArguments(Commandline line) {
-        return describeArguments(line.getArguments());
-    }
-
-    /**
-     * Returns a String that describes the command and arguments
-     * suitable for verbose output before a call to
-     * <code>Runtime.exec(String[])<code>
-     *
-     * <p>This method assumes that the first entry in the array is the
-     * executable to run.</p>
-     * 
-     * @since Ant 1.5
-     */
-    public static String describeCommand(String[] args) {
-        if (args == null || args.length == 0) {
-            return "";
-        }
-        
-        StringBuffer buf = new StringBuffer("Executing \'");
-        buf.append(args[0]);
-        buf.append("\'");
-        if (args.length > 0) {
-            buf.append(" with ");
-            buf.append(describeArguments(args, 1));
-        } else {
-            buf.append(DISCLAIMER);
-        }
-        return buf.toString();
-    }
-
-    /**
-     * Returns a String that describes the arguments suitable for
-     * verbose output before a call to
-     * <code>Runtime.exec(String[])<code>
-     *
-     * @since Ant 1.5
-     */
-    public static String describeArguments(String[] args) {
-        return describeArguments(args, 0);
-    }
-
-    /**
-     * Returns a String that describes the arguments suitable for
-     * verbose output before a call to
-     * <code>Runtime.exec(String[])<code>
-     *
-     * @param offset ignore entries before this index
-     *
-     * @since Ant 1.5
-     */
-    protected static String describeArguments(String[] args, int offset) {
-        if (args == null || args.length <= offset) {
-            return "";
-        }
-
-        StringBuffer buf = new StringBuffer("argument");
-        if (args.length > offset) {
-            buf.append("s");
-        }
-        buf.append(":").append(StringUtils.LINE_SEP);
-        for (int i = offset; i < args.length; i++) {
-            buf.append("\'").append(args[i]).append("\'")
-                .append(StringUtils.LINE_SEP);
-        }
-        buf.append(DISCLAIMER);
-        return buf.toString();
-    }
-}
diff --git a/src/main/org/apache/tools/ant/types/CommandlineJava.java b/src/main/org/apache/tools/ant/types/CommandlineJava.java
deleted file mode 100644
index 12e5bc3..0000000
--- a/src/main/org/apache/tools/ant/types/CommandlineJava.java
+++ /dev/null
@@ -1,385 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.types;
-
-import java.util.Properties;
-import java.util.Enumeration;
-import java.util.Vector;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.util.JavaEnvUtils;
-
-/**
- * A representation of a Java command line that is nothing more
- * than a composite of 2 <tt>Commandline</tt>. One is used for the 
- * vm/options and one for the classname/arguments. It provides 
- * specific methods for a java command line.
- *
- * @author thomas.haas@softwired-inc.com
- * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
- */
-public class CommandlineJava implements Cloneable {
-
-    private Commandline vmCommand = new Commandline();
-    private Commandline javaCommand = new Commandline();
-    private SysProperties sysProperties = new SysProperties();
-    private Path classpath = null;
-    private String vmVersion;
-    private String maxMemory = null;
-
-    /**
-     * Indicate whether it will execute a jar file or not, in this case
-     * the first vm option must be a -jar and the 'executable' is a jar file.
-     */
-     private boolean executeJar  = false;
-
-    /**
-     * Specialized Environment class for System properties
-     */
-    public static class SysProperties extends Environment implements Cloneable {
-        Properties sys = null;
-
-        public String[] getVariables() throws BuildException {
-            String[] props = super.getVariables();
-      
-            if (props == null) {
-              return null;
-            }
-
-            for (int i = 0; i < props.length; i++) {
-                props[i] = "-D" + props[i];
-            }
-            return props;
-        }
-
-        public int size() {
-            return variables.size();
-        }
-
-        public void setSystem() throws BuildException {
-            try {
-                sys = System.getProperties();
-                Properties p = new Properties();
-                for (Enumeration e = sys.keys(); e.hasMoreElements();) {
-                    Object o = e.nextElement();
-                    p.put(o, sys.get(o));
-                }
-                for (Enumeration e = variables.elements(); e.hasMoreElements();) {
-                    Environment.Variable v = (Environment.Variable) e.nextElement();
-                    p.put(v.getKey(), v.getValue());
-                }
-                System.setProperties(p);
-            } catch (SecurityException e) {
-                throw new BuildException("Cannot modify system properties", e);
-            }
-        }
-
-        public void restoreSystem() throws BuildException {
-            if (sys == null) {
-                throw new BuildException("Unbalanced nesting of SysProperties");
-            }
-
-            try {
-                System.setProperties(sys);
-                sys = null;
-            } catch (SecurityException e) {
-                throw new BuildException("Cannot modify system properties", e);
-            }
-        }
-
-        public Object clone() {
-            try {
-                SysProperties c = (SysProperties) super.clone();
-                c.variables = (Vector) variables.clone();
-                return c;
-            } catch (CloneNotSupportedException e) {
-                return null;
-            }
-        }
-
-    }
-
-    public CommandlineJava() {
-        setVm(JavaEnvUtils.getJreExecutable("java"));
-        setVmversion(JavaEnvUtils.getJavaVersion());
-    }
-
-    public Commandline.Argument createArgument() {
-        return javaCommand.createArgument();
-    }
-
-    public Commandline.Argument createVmArgument() {
-        return vmCommand.createArgument();
-    }
-
-    public void addSysproperty(Environment.Variable sysp) {
-        sysProperties.addVariable(sysp);
-    }
-
-    public void setVm(String vm) {
-        vmCommand.setExecutable(vm);
-    }
-
-    public void setVmversion(String value) {
-        vmVersion = value;
-    }
-
-    /**
-     * set a jar file to execute via the -jar option.
-     * @param the pathname of the jar to execute
-     */
-    public void setJar(String jarpathname){
-        javaCommand.setExecutable(jarpathname);
-        executeJar = true;
-    }
-
-    /**
-     * @return the pathname of the jar file to run via -jar option
-     * or <tt>null</tt> if there is no jar to run.
-     * @see #getClassname()
-     */
-    public String getJar(){
-        if (executeJar){
-            return javaCommand.getExecutable();
-        }
-        return null;
-    }
-
-    /**
-     * set the classname to execute
-     * @param classname the fully qualified classname.
-     */
-    public void setClassname(String classname) {
-        javaCommand.setExecutable(classname);
-        executeJar = false;
-    }
-
-    /**
-     * @return the name of the class to run or <tt>null</tt> if there is no class.
-     * @see #getJar()
-     */
-    public String getClassname() {
-        if (!executeJar) {
-            return javaCommand.getExecutable();
-        }
-        return null;
-    }
-
-    public Path createClasspath(Project p) {
-        if (classpath == null) {
-            classpath = new Path(p);
-        }
-        return classpath;
-    }
-
-    public String getVmversion() {
-        return vmVersion;
-    }
-
-    /**
-     * get the command line to run a java vm.
-     * @return the list of all arguments necessary to run the vm.
-     */
-    public String[] getCommandline() {
-        String[] result = new String[size()];
-        int pos = 0;
-        String[] vmArgs = getActualVMCommand().getCommandline();
-        // first argument is the java.exe path...
-        result[pos++] = vmArgs[0];
-        
-        // next follows the vm options
-        System.arraycopy(vmArgs, 1, result, pos, vmArgs.length - 1);
-        pos += vmArgs.length - 1;
-        // properties are part of the vm options...
-        if (sysProperties.size() > 0) {
-            System.arraycopy(sysProperties.getVariables(), 0,
-                             result, pos, sysProperties.size());
-            pos += sysProperties.size();
-        }
-        // classpath is a vm option too..
-        Path fullClasspath = classpath != null ? classpath.concatSystemClasspath("ignore") : null;
-        if (fullClasspath != null && fullClasspath.toString().trim().length() > 0) {
-            result[pos++] = "-classpath";
-            result[pos++] = fullClasspath.toString();
-        }
-
-        // JDK usage command line says that -jar must be the first option, as there is
-        // a bug in JDK < 1.4 that forces the jvm type to be specified as the first
-        // option, it is appended here as specified in the docs even though there is
-        // in fact no order.
-        if (executeJar){
-            result[pos++] = "-jar";
-        }
-
-        // this is the classname to run as well as its arguments.
-        // in case of 'executeJar', the executable is a jar file.
-        System.arraycopy(javaCommand.getCommandline(), 0, 
-                         result, pos, javaCommand.size());
-
-        return result;
-    }
-
-    /**
-     * -mx or -Xmx depending on VM version
-     */
-    public void setMaxmemory(String max){
-        this.maxMemory = max;
-    }
-
-
-    public String toString() {
-        return Commandline.toString(getCommandline());
-    }
-
-    /**
-     * Returns a String that describes the command and arguments
-     * suitable for verbose output before a call to
-     * <code>Runtime.exec(String[])<code>
-     *
-     * @since Ant 1.5
-     */
-    public String describeCommand() {
-        return Commandline.describeCommand(getCommandline());
-    }
-
-    /**
-     * Returns a String that describes the java command and arguments
-     * for in VM executions.
-     *
-     * <p>The class name is the executable in this context.</p>
-     *
-     * @since Ant 1.5
-     */
-    public String describeJavaCommand() {
-        return Commandline.describeCommand(getJavaCommand());
-    }
-
-    private Commandline getActualVMCommand() {
-        Commandline actualVMCommand = (Commandline) vmCommand.clone();
-        if (maxMemory != null) {
-            if (vmVersion.startsWith("1.1")) {
-                actualVMCommand.createArgument().setValue("-mx" + maxMemory);
-            } else {
-                actualVMCommand.createArgument().setValue("-Xmx" + maxMemory);
-            }
-        }
-        return actualVMCommand;
-    }        
-
-    /**
-     * The size of the java command line.
-     * @return the total number of arguments in the java command line.
-     * @see #getCommandline()
-     */
-    public int size() {
-        int size = getActualVMCommand().size() + javaCommand.size() + sysProperties.size();
-        // classpath is "-classpath <classpath>" -> 2 args
-        Path fullClasspath = classpath != null ? classpath.concatSystemClasspath("ignore") : null;
-        if (fullClasspath != null && fullClasspath.toString().trim().length() > 0) {
-            size += 2;
-        }
-        // jar execution requires an additional -jar option
-        if (executeJar){
-            size++ ;
-        }
-        return size;
-    }
-
-    public Commandline getJavaCommand() {
-        return javaCommand;
-    }
-
-    public Commandline getVmCommand() {
-        return getActualVMCommand();
-    }
-
-    public Path getClasspath() {
-        return classpath;
-    }
-
-    public void setSystemProperties() throws BuildException {
-        sysProperties.setSystem();
-    }
-
-    public void restoreSystemProperties() throws BuildException {
-        sysProperties.restoreSystem();
-    }
-
-    public SysProperties getSystemProperties() {
-        return sysProperties;
-    }
-
-    public Object clone() {
-        CommandlineJava c = new CommandlineJava();
-        c.vmCommand = (Commandline) vmCommand.clone();
-        c.javaCommand = (Commandline) javaCommand.clone();
-        c.sysProperties = (SysProperties) sysProperties.clone();
-        c.maxMemory = maxMemory;
-        if (classpath != null) {
-            c.classpath = (Path) classpath.clone();
-        }
-        c.vmVersion = vmVersion;
-        c.executeJar = executeJar;
-        return c;
-    }
-
-    /**
-     * Clear out the java arguments.
-     */
-    public void clearJavaArgs() {
-        javaCommand.clearArgs();
-    }
-
-}
diff --git a/src/main/org/apache/tools/ant/types/DTDLocation.java b/src/main/org/apache/tools/ant/types/DTDLocation.java
deleted file mode 100644
index ac44378..0000000
--- a/src/main/org/apache/tools/ant/types/DTDLocation.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.types;
-
-/**
- * Helper class to handle the DTD and Entity nested elements.
- *
- * @author Conor MacNeill
- * @author dIon Gillard
- */
-public class DTDLocation {
-    /** publicId of the dtd/entity */
-    private String publicId = null;
-    /** location of the dtd/entity - a file/resource/URL */
-    private String location = null;
-
-    /**
-     * @param publicId uniquely identifies the resource
-     */
-    public void setPublicId(String publicId) {
-        this.publicId = publicId;
-    }
-
-    /**
-     * @param location the location of the resource associated with the
-     *      publicId
-     */
-    public void setLocation(String location) {
-        this.location = location;
-    }
-
-    /**
-     * @return the publicId
-     */
-    public String getPublicId() {
-        return publicId;
-    }
-
-    /**
-     * @return the location of the resource identified by the publicId
-     */
-    public String getLocation() {
-        return location;
-    }
-}
-
diff --git a/src/main/org/apache/tools/ant/types/DataType.java b/src/main/org/apache/tools/ant/types/DataType.java
deleted file mode 100644
index 52874f3..0000000
--- a/src/main/org/apache/tools/ant/types/DataType.java
+++ /dev/null
@@ -1,211 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.types;
-
-
-import java.util.Stack;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.ProjectComponent;
-
-/**
- * Base class for those classes that can appear inside the build file
- * as stand alone data types.  
- *
- * <p>This class handles the common description attribute and provides
- * a default implementation for reference handling and checking for
- * circular references that is appropriate for types that can not be
- * nested inside elements of the same type (i.e. &lt;patternset&gt;
- * but not &lt;path&gt;).</p>
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> 
- */
-public abstract class DataType extends ProjectComponent {
-    /**
-     * The descriptin the user has set.
-     */
-    protected String description = null;
-    /**
-     * Value to the refid attribute.
-     */
-    protected Reference ref = null;
-    /**
-     * Are we sure we don't hold circular references?
-     *
-     * <p>Subclasses are responsible for setting this value to false
-     * if we'd need to investigate this condition (usually because a
-     * child element has been added that is a subclass of
-     * DataType).</p> 
-     */
-    protected boolean checked = true;
-    
-    /** 
-     * Sets a description of the current data type. It will be useful
-     * in commenting what we are doing.  
-     */
-    public void setDescription(String desc) {
-        description = desc;
-    }
-
-    /**
-     * Return the description for the current data type.
-     */
-    public String getDescription() {
-        return description;
-    }
-
-    /**
-     * Has the refid attribute of this element been set?
-     */
-    public boolean isReference() {
-        return ref != null;
-    }
-
-    /**
-     * Set the value of the refid attribute.
-     *
-     * <p>Subclasses may need to check whether any other attributes
-     * have been set as well or child elements have been created and
-     * thus override this method. if they do the must call
-     * <code>super.setRefid</code>.</p> 
-     */
-    public void setRefid(Reference ref) {
-        this.ref = ref;
-        checked = false;
-    }
-
-    /**
-     * Check to see whether any DataType we hold references to is
-     * included in the Stack (which holds all DataType instances that
-     * directly or indirectly reference this instance, including this
-     * instance itself).
-     *
-     * <p>If one is included, throw a BuildException created by {@link
-     * #circularReference circularReference}.</p>
-     *
-     * <p>This implementation is appropriate only for a DataType that
-     * cannot hold other DataTypes as children.</p> 
-     *
-     * <p>The general contract of this method is that it shouldn't do
-     * anything if {@link #checked <code>checked</code>} is true and
-     * set it to true on exit.</p> 
-     */
-    protected void dieOnCircularReference(Stack stk, Project p) 
-        throws BuildException {
-
-        if (checked || !isReference()) {
-            return;
-        }
-        Object o = ref.getReferencedObject(p);
-        
-        if (o instanceof DataType) {
-            if (stk.contains(o)) {
-                throw circularReference();
-            } else {
-                stk.push(o);
-                ((DataType) o).dieOnCircularReference(stk, p);
-                stk.pop();
-            }
-        }
-        checked = true;
-    }
-
-    /**
-     * Performs the check for circular references and returns the
-     * referenced object.  
-     */
-    protected Object getCheckedRef(Class requiredClass, String dataTypeName) {
-        if (!checked) {
-            Stack stk = new Stack();
-            stk.push(this);
-            dieOnCircularReference(stk, getProject());
-        }
-        
-        Object o = ref.getReferencedObject(getProject());
-        if (!(requiredClass.isAssignableFrom(o.getClass()))) {
-            String msg = ref.getRefId() + " doesn\'t denote a " + dataTypeName;
-            throw new BuildException(msg);
-        } else {
-            return o;
-        }
-    }
-
-    /**
-     * Creates an exception that indicates that refid has to be the
-     * only attribute if it is set.  
-     */
-    protected BuildException tooManyAttributes() {
-        return new BuildException("You must not specify more than one " 
-            + "attribute when using refid");
-    }
-
-    /**
-     * Creates an exception that indicates that this XML element must
-     * not have child elements if the refid attribute is set.  
-     */
-    protected BuildException noChildrenAllowed() {
-        return new BuildException("You must not specify nested elements " 
-            + "when using refid");
-    }
-
-    /**
-     * Creates an exception that indicates the user has generated a
-     * loop of data types referencing each other.  
-     */
-    protected BuildException circularReference() {
-        return new BuildException("This data type contains a circular " 
-            + "reference.");
-    }
-}
diff --git a/src/main/org/apache/tools/ant/types/Description.java b/src/main/org/apache/tools/ant/types/Description.java
deleted file mode 100644
index edcb5a5..0000000
--- a/src/main/org/apache/tools/ant/types/Description.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.types;
-
-
-
-/**
- * Description is used to provide a project-wide description element
- * (that is, a description that applies to a buildfile as a whole).
- * If present, the &lt;description&gt; element is printed out before the
- * target descriptions.
- * 
- * Description has no attributes, only text.  There can only be one
- * project description per project.  A second description element will
- * overwrite the first.
- *
- * @author <a href="mailto:cstrong@arielpartners.com">Craeg Strong</a>
- * @version $Revision$ $Date$
- *
- * @ant.datatype ignore="true"
- */
-public class Description extends DataType {
-
-    /**
-     * Adds descriptive text to the project.
-     */
-    public void addText(String text) {
-        String currentDescription = project.getDescription();
-        if (currentDescription == null) {
-            project.setDescription(text);
-        } else {
-            project.setDescription(currentDescription + text);
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/types/DirSet.java b/src/main/org/apache/tools/ant/types/DirSet.java
deleted file mode 100644
index 2c8895c..0000000
--- a/src/main/org/apache/tools/ant/types/DirSet.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.types;
-
-/**
- * Subclass as hint for supporting tasks that the included directories
- * instead of files should be used.
- *
- * @since Ant 1.5
- */
-public class DirSet extends AbstractFileSet {
-    
-    public DirSet() {
-        super();
-    }
-
-    protected DirSet(DirSet dirset) {
-        super(dirset);
-    }
-
-    /**
-     * Return a DirSet that has the same basedir and same patternsets
-     * as this one.
-     */
-    public Object clone() {
-        if (isReference()) {
-            return new DirSet((DirSet) getRef(getProject()));
-        } else {
-            return new DirSet(this);
-        }
-    }
-
-}
diff --git a/src/main/org/apache/tools/ant/types/EnumeratedAttribute.java b/src/main/org/apache/tools/ant/types/EnumeratedAttribute.java
deleted file mode 100644
index 5f51962..0000000
--- a/src/main/org/apache/tools/ant/types/EnumeratedAttribute.java
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.types;
-
-import org.apache.tools.ant.BuildException;
-
-/**
- * Helper class for attributes that can only take one of a fixed list
- * of values.
- *
- * <p>See {@link org.apache.tools.ant.taskdefs.FixCRLF FixCRLF} for an
- * example.
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> 
- */
-public abstract class EnumeratedAttribute {
-
-    /**
-     * The selected value in this enumeration.
-     */
-    protected String value;
-
-    /**
-     * the index of the selected value in the array.
-     */
-    private int index = -1;
-
-    /**
-     * This is the only method a subclass needs to implement.
-     *
-     * @return an array holding all possible values of the enumeration.
-     * The order of elements must be fixed so that <tt>indexOfValue(String)</tt>
-     * always return the same index for the same value.
-     */
-    public abstract String[] getValues();
-
-    /** bean constructor */
-    protected EnumeratedAttribute(){
-    }
-
-    /**
-     * Invoked by {@link org.apache.tools.ant.IntrospectionHelper IntrospectionHelper}.
-     */
-    public final void setValue(String value) throws BuildException {
-        int index = indexOfValue(value);
-        if (index == -1) {
-            throw new BuildException(value + " is not a legal value for this attribute");
-        }
-        this.index = index;
-        this.value = value;
-    }
-
-    /**
-     * Is this value included in the enumeration?
-     */
-    public final boolean containsValue(String value) {
-        return (indexOfValue(value) != -1);
-    }
-
-    /**
-     * get the index of a value in this enumeration.
-     * @param value the string value to look for.
-     * @return the index of the value in the array of strings
-     * or -1 if it cannot be found.
-     * @see #getValues()
-     */
-    public final int indexOfValue(String value){
-        String[] values = getValues();
-        if (values == null || value == null) {
-            return -1;
-        }
-        for (int i = 0; i < values.length; i++){
-            if (value.equals(values[i])){
-                return i;
-            }
-        }
-        return -1;
-    }
-
-    /**
-     * @return the selected value.
-     */
-    public final String getValue() {
-        return value;
-    }
-
-    /**
-     * @return the index of the selected value in the array.
-     * @see #getValues()
-     */
-    public final int getIndex() {
-        return index;
-    }
-
-
-    /**
-     * Convert the value to its string form.
-     *
-     * @return the string form of the value.
-     */        
-    public String toString() {
-        return getValue();
-    }
-
-}
diff --git a/src/main/org/apache/tools/ant/types/Environment.java b/src/main/org/apache/tools/ant/types/Environment.java
deleted file mode 100644
index b49266f..0000000
--- a/src/main/org/apache/tools/ant/types/Environment.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000,2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.types;
-
-import org.apache.tools.ant.BuildException;
-import java.util.Vector;
-
-/**
- * Wrapper for environment variables.
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- */
-public class Environment {
-
-    protected Vector variables;
-
-    public static class Variable {
-        private String key, value;
-
-        public Variable() {
-            super();
-        }
-
-        public void setKey(String key) {
-            this.key = key;
-        }
-        
-        public void setValue(String value) {
-            this.value = value;
-        }
-        
-        public String getKey() {
-            return this.key;
-        }
-        
-        public String getValue() {
-            return this.value;
-        }
-        
-        public void setPath(Path path) {
-            this.value = path.toString();
-        }
-
-        public void setFile(java.io.File file) {
-            this.value = file.getAbsolutePath();
-        }
-
-        public String getContent() throws BuildException {
-            if (key == null || value == null) {
-                throw new BuildException("key and value must be specified for environment variables.");
-            }
-            StringBuffer sb = new StringBuffer(key.trim());
-            sb.append("=").append(value.trim());
-            return sb.toString();
-        }
-    }
-
-    public Environment() {
-        variables = new Vector();
-    }
-
-    public void addVariable(Variable var) {
-        variables.addElement(var);
-    }
-
-    public String[] getVariables() throws BuildException {
-        if (variables.size() == 0) {
-            return null;
-        }
-        String[] result = new String[variables.size()];
-        for (int i = 0; i < result.length; i++) {
-            result[i] = ((Variable) variables.elementAt(i)).getContent();
-        }
-        return result;
-    }
-}
diff --git a/src/main/org/apache/tools/ant/types/FileList.java b/src/main/org/apache/tools/ant/types/FileList.java
deleted file mode 100644
index e9cd27a..0000000
--- a/src/main/org/apache/tools/ant/types/FileList.java
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.types;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-
-import java.io.File;
-
-import java.util.StringTokenizer;
-
-import java.util.Stack;
-import java.util.Vector;
-
-/**
- * FileList represents an explicitly named list of files.  FileLists
- * are useful when you want to capture a list of files regardless of
- * whether they currently exist.  By contrast, FileSet operates as a
- * filter, only returning the name of a matched file if it currently
- * exists in the file system.
- * 
- * @author <a href="mailto:cstrong@arielpartners.com">Craeg Strong</a>
- * @version $Revision$ $Date$
- */
-public class FileList extends DataType {
-    
-    private Vector filenames = new Vector();
-    private File dir;
-
-    public FileList() {
-        super();
-    }
-
-    protected FileList(FileList filelist) {
-        this.dir       = filelist.dir;
-        this.filenames = filelist.filenames;
-        setProject(filelist.getProject());
-    }
-
-    /**
-     * Makes this instance in effect a reference to another FileList
-     * instance.
-     *
-     * <p>You must not set another attribute or nest elements inside
-     * this element if you make it a reference.</p> 
-     */
-    public void setRefid(Reference r) throws BuildException {
-        if ((dir != null) || (filenames.size() != 0)) {
-            throw tooManyAttributes();
-        }
-        super.setRefid(r);
-    }
-
-    public void setDir(File dir) throws BuildException {
-        if (isReference()) {
-            throw tooManyAttributes();
-        }
-        this.dir = dir;
-    }
-
-    public File getDir(Project p) {
-        if (isReference()) {
-            return getRef(p).getDir(p);
-        }
-        return dir;
-    }
-
-    public void setFiles(String filenames) {
-        if (isReference()) {
-            throw tooManyAttributes();
-        }
-        if (filenames != null && filenames.length() > 0) {
-            StringTokenizer tok = new StringTokenizer(filenames, ", \t\n\r\f", false);
-            while (tok.hasMoreTokens()) {
-               this.filenames.addElement(tok.nextToken());
-            }
-        }
-    }
-
-    /**
-     * Returns the list of files represented by this FileList.
-     */
-    public String[] getFiles(Project p) {
-        if (isReference()) {
-            return getRef(p).getFiles(p);
-        }
-
-        if (dir == null) {
-            throw new BuildException("No directory specified for filelist.");
-        }
-
-        if (filenames.size() == 0) {
-            throw new BuildException("No files specified for filelist.");
-        }
-
-        String[] result = new String[filenames.size()];
-        filenames.copyInto(result);
-        return result;
-    }
-    
-    /**
-     * Performs the check for circular references and returns the
-     * referenced FileList.  
-     */
-    protected FileList getRef(Project p) {
-        if (!checked) {
-            Stack stk = new Stack();
-            stk.push(this);
-            dieOnCircularReference(stk, p);
-        }
-        
-        Object o = ref.getReferencedObject(p);
-        if (!(o instanceof FileList)) {
-            String msg = ref.getRefId() + " doesn\'t denote a filelist";
-            throw new BuildException(msg);
-        } else {
-            return (FileList) o;
-        }
-    }
-
-} //-- FileList.java
diff --git a/src/main/org/apache/tools/ant/types/FileSet.java b/src/main/org/apache/tools/ant/types/FileSet.java
deleted file mode 100644
index 56e8286..0000000
--- a/src/main/org/apache/tools/ant/types/FileSet.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.types;
-
-/**
- * Moved out of MatchingTask to make it a standalone object that could
- * be referenced (by scripts for example).
- *
- * @author Arnout J. Kuiper <a href="mailto:ajkuiper@wxs.nl">ajkuiper@wxs.nl</a> 
- * @author Stefano Mazzocchi <a href="mailto:stefano@apache.org">stefano@apache.org</a>
- * @author Sam Ruby <a href="mailto:rubys@us.ibm.com">rubys@us.ibm.com</a>
- * @author Jon S. Stevens <a href="mailto:jon@clearink.com">jon@clearink.com</a>
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- * @author <a href="mailto:umagesh@rediffmail.com">Magesh Umasankar</a>
- */
-public class FileSet extends AbstractFileSet {
-    
-    public FileSet() {
-        super();
-    }
-
-    protected FileSet(FileSet fileset) {
-        super(fileset);
-    }
-
-    /**
-     * Return a FileSet that has the same basedir and same patternsets
-     * as this one.
-     */
-    public Object clone() {
-        if (isReference()) {
-            return new FileSet((FileSet) getRef(getProject()));
-        } else {
-            return new FileSet(this);
-        }
-    }
-
-}
diff --git a/src/main/org/apache/tools/ant/types/FilterChain.java b/src/main/org/apache/tools/ant/types/FilterChain.java
deleted file mode 100644
index 197a58d..0000000
--- a/src/main/org/apache/tools/ant/types/FilterChain.java
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.types;
-
-import java.util.Vector;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.filters.ClassConstants;
-import org.apache.tools.ant.filters.ExpandProperties;
-import org.apache.tools.ant.filters.HeadFilter;
-import org.apache.tools.ant.filters.LineContains;
-import org.apache.tools.ant.filters.LineContainsRegExp;
-import org.apache.tools.ant.filters.PrefixLines;
-import org.apache.tools.ant.filters.ReplaceTokens;
-import org.apache.tools.ant.filters.StripJavaComments;
-import org.apache.tools.ant.filters.StripLineBreaks;
-import org.apache.tools.ant.filters.StripLineComments;
-import org.apache.tools.ant.filters.TabsToSpaces;
-import org.apache.tools.ant.filters.TailFilter;
-
-/**
- * FilterChain may contain a chained set of filter readers.
- *
- * @author <a href="mailto:umagesh@apache.org">Magesh Umasankar</a>
- */
-public final class FilterChain extends DataType implements Cloneable {
-
-    private Vector filterReaders = new Vector();
-
-    public final void addFilterReader(final AntFilterReader filterReader) {
-        filterReaders.addElement(filterReader);
-    }
-
-    public final Vector getFilterReaders() {
-        return filterReaders;
-    }
-
-    public final void addClassConstants(final ClassConstants classConstants) {
-        filterReaders.addElement(classConstants);
-    }
-
-    public final void addExpandProperties(final ExpandProperties expandProperties) {
-        filterReaders.addElement(expandProperties);
-    }
-
-    public final void addHeadFilter(final HeadFilter headFilter) {
-        filterReaders.addElement(headFilter);
-    }
-
-    public final void addLineContains(final LineContains lineContains) {
-        filterReaders.addElement(lineContains);
-    }
-
-    public final void addLineContainsRegExp(final LineContainsRegExp
-                                                lineContainsRegExp) {
-        filterReaders.addElement(lineContainsRegExp);
-    }
-
-    public final void addPrefixLines(final PrefixLines prefixLines) {
-        filterReaders.addElement(prefixLines);
-    }
-
-    public final void addReplaceTokens(final ReplaceTokens replaceTokens) {
-        filterReaders.addElement(replaceTokens);
-    }
-
-    public final void addStripJavaComments(final StripJavaComments
-                                                stripJavaComments) {
-        filterReaders.addElement(stripJavaComments);
-    }
-
-    public final void addStripLineBreaks(final StripLineBreaks
-                                                stripLineBreaks) {
-        filterReaders.addElement(stripLineBreaks);
-    }
-
-    public final void addStripLineComments(final StripLineComments
-                                                stripLineComments) {
-        filterReaders.addElement(stripLineComments);
-    }
-
-    public final void addTabsToSpaces(final TabsToSpaces tabsToSpaces) {
-        filterReaders.addElement(tabsToSpaces);
-    }
-
-    public final void addTailFilter(final TailFilter tailFilter) {
-        filterReaders.addElement(tailFilter);
-    }
-
-    /**
-     * Makes this instance in effect a reference to another FilterChain 
-     * instance.
-     *
-     * <p>You must not set another attribute or nest elements inside
-     * this element if you make it a reference.</p>
-     *
-     * @param r the reference to which this instance is associated
-     * @exception BuildException if this instance already has been configured.
-     */
-    public void setRefid(Reference r) throws BuildException {
-        if (!filterReaders.isEmpty()) {
-            throw tooManyAttributes();
-        }
-        // change this to get the objects from the other reference
-        Object o = r.getReferencedObject(getProject());
-        if (o instanceof FilterChain) {
-            FilterChain fc = (FilterChain) o;
-            filterReaders = fc.getFilterReaders();
-        } else {
-            String msg = r.getRefId() + " doesn\'t refer to a FilterChain";
-            throw new BuildException(msg);
-        }
-
-        super.setRefid(r);
-    }
-}
diff --git a/src/main/org/apache/tools/ant/types/FilterSet.java b/src/main/org/apache/tools/ant/types/FilterSet.java
deleted file mode 100644
index 75beed3..0000000
--- a/src/main/org/apache/tools/ant/types/FilterSet.java
+++ /dev/null
@@ -1,450 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.types;
-
-// java io classes
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-
-// java util classes
-import java.util.Enumeration;
-import java.util.Hashtable;
-import java.util.Properties;
-import java.util.Vector;
-
-// ant classes
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-
-
-/**
- * A set of filters to be applied to something.
- *
- * A filter set may have begintoken and endtokens defined.
- *
- * @author     <A href="mailto:gholam@xtra.co.nz">  Michael McCallum  </A>
- */
-public class FilterSet extends DataType implements Cloneable {
-    
-    /**
-     * Individual filter component of filterset
-     *
-     * @author    Michael McCallum
-     */
-    public static class Filter {
-        /** Token which will be replaced in the filter operation */
-        String token;
-        
-        /** The value which will replace the token in the filtering operation */
-        String value;
-        
-        /**
-         * Constructor for the Filter object
-         *
-         * @param token  The token which will be replaced when filtering
-         * @param value  The value which will replace the token when filtering
-         */
-        public Filter(String token, String value) {
-           this.token = token;
-           this.value = value;
-        }
-        
-        /**
-         * No argument conmstructor
-         */
-        public Filter() {
-        }
-        
-        /**
-         * Sets the Token attribute of the Filter object
-         *
-         * @param token  The new Token value
-         */
-        public void setToken(String token) {
-           this.token = token;
-        }
-        
-        /**
-         * Sets the Value attribute of the Filter object
-         *
-         * @param value  The new Value value
-         */
-        public void setValue(String value) {
-           this.value = value;
-        }
-        
-        /**
-         * Gets the Token attribute of the Filter object
-         *
-         * @return   The Token value
-         */
-        public String getToken() {
-           return token;
-        }
-        
-        /**
-         * Gets the Value attribute of the Filter object
-         *
-         * @return   The Value value
-         */
-        public String getValue() {
-           return value;
-        }
-     }
-    
-    /**
-     * The filtersfile nested element.
-     *
-     * @author    Michael McCallum
-     */
-    public class FiltersFile {
-        
-        /**
-         * Constructor for the Filter object
-         */
-        public FiltersFile() {
-        }
-        
-        /**
-         * Sets the file from which filters will be read.
-         *
-         * @param file the file from which filters will be read.
-         */
-        public void setFile(File file) {
-           readFiltersFromFile(file);
-        }
-    }
-    
-    /** The default token start string */
-    public static final String DEFAULT_TOKEN_START = "@";
-    
-    /** The default token end string */
-    public static final String DEFAULT_TOKEN_END = "@";
-    
-    private String startOfToken = DEFAULT_TOKEN_START;
-    private String endOfToken = DEFAULT_TOKEN_END;
-    
-    /**
-     * List of ordered filters and filter files.
-     */
-    private Vector filters = new Vector();
-    
-    public FilterSet() {
-    }
-    
-    /**
-     * Create a Filterset from another filterset
-     *
-     * @param filterset the filterset upon which this filterset will be based.
-     */
-    protected FilterSet(FilterSet filterset) {
-        super();
-        this.filters = (Vector) filterset.getFilters().clone();
-    }
-
-    protected Vector getFilters() {
-        if (isReference()) {
-            return getRef().getFilters();
-        }
-        return filters;
-    }
-
-    protected FilterSet getRef() {
-        return (FilterSet) getCheckedRef(FilterSet.class, "filterset");
-    }
-    
-    /**
-     * Gets the filter hash of the FilterSet.
-     *
-     * @return   The hash of the tokens and values for quick lookup.
-     */
-    public Hashtable getFilterHash() {
-        int filterSize = getFilters().size();
-        Hashtable filterHash = new Hashtable(filterSize);
-        for (Enumeration e = getFilters().elements(); e.hasMoreElements();) {
-           Filter filter = (Filter) e.nextElement();
-           filterHash.put(filter.getToken(), filter.getValue());
-        }
-        return filterHash;
-    }
-    
-    /**
-     * set the file containing the filters for this filterset.
-     *
-     * @param filtersFile sets the filter fil to read filters for this filter set from.
-     * @exception BuildException if there is a problem reading the filters
-     */
-    public void setFiltersfile(File filtersFile) throws BuildException {
-        if (isReference()) {
-            throw tooManyAttributes();
-        }
-        readFiltersFromFile(filtersFile);
-    }
-    
-    /**
-     * The string used to id the beginning of a token.
-     *
-     * @param startOfToken  The new Begintoken value
-     */
-    public void setBeginToken(String startOfToken) {
-        if (isReference()) {
-            throw tooManyAttributes();
-        }
-        if (startOfToken == null || "".equals(startOfToken)) {
-            throw new BuildException("beginToken must not be empty");
-        }
-        this.startOfToken = startOfToken;
-    }
-
-    public String getBeginToken() {
-        if (isReference()) {
-            return getRef().getBeginToken();
-        }
-        return startOfToken;
-    }
-    
-    
-    /**
-     * The string used to id the end of a token.
-     *
-     * @param endOfToken  The new Endtoken value
-     */
-    public void setEndToken(String endOfToken) {
-        if (isReference()) {
-            throw tooManyAttributes();
-        }
-        if (endOfToken == null || "".equals(endOfToken)) {
-            throw new BuildException("endToken must not be empty");
-        }
-        this.endOfToken = endOfToken;
-    }
-
-    public String getEndToken() {
-        if (isReference()) {
-            return getRef().getEndToken();
-        }
-        return endOfToken;
-    }
-    
-    
-    /**
-     * Read the filters from the given file.
-     *
-     * @param filtersFile         the file from which filters are read
-     * @exception BuildException  Throw a build exception when unable to read the
-     * file.
-     */
-    public void readFiltersFromFile(File filtersFile) throws BuildException {
-        if (isReference()) {
-            throw tooManyAttributes();
-        }
-
-        if (filtersFile.isFile()) {
-           log("Reading filters from " + filtersFile, Project.MSG_VERBOSE);
-           FileInputStream in = null;
-           try {
-              Properties props = new Properties();
-              in = new FileInputStream(filtersFile);
-              props.load(in);
-              
-              Enumeration enum = props.propertyNames();
-              Vector filters = getFilters();
-              while (enum.hasMoreElements()) {
-                 String strPropName = (String) enum.nextElement();
-                 String strValue = props.getProperty(strPropName);
-                 filters.addElement(new Filter(strPropName, strValue));
-              }
-           } catch (Exception e) {
-              throw new BuildException("Could not read filters from file: " 
-                + filtersFile);
-           } finally {
-              if (in != null) {
-                 try {
-                    in.close();
-                 } catch (IOException ioex) {
-                 }
-              }
-           }
-        } else {
-           throw new BuildException("Must specify a file not a directory in " 
-            + "the filtersfile attribute:" + filtersFile);
-        }
-    }
-    
-    /**
-     * Does replacement on the given string with token matching.
-     * This uses the defined begintoken and endtoken values which default to @ for both.
-     *
-     * @param line  The line to process the tokens in.
-     * @return      The string with the tokens replaced.
-     */
-    public String replaceTokens(String line) {
-        String beginToken = getBeginToken();
-        String endToken = getEndToken();
-        int index = line.indexOf(beginToken);
-        
-        if (index > -1) {
-            Hashtable tokens = getFilterHash();
-            try {
-                StringBuffer b = new StringBuffer();
-                int i = 0;
-                String token = null;
-                String value = null;
-                
-                do {
-                    int endIndex = line.indexOf(endToken, 
-                        index + beginToken.length() + 1);
-                    if (endIndex == -1) {
-                        break;
-                    }
-                    token 
-                        = line.substring(index + beginToken.length(), endIndex);
-                    b.append(line.substring(i, index));
-                    if (tokens.containsKey(token)) {
-                        value = (String) tokens.get(token);
-                        log("Replacing: " + beginToken + token + endToken 
-                            + " -> " + value, Project.MSG_VERBOSE);
-                        b.append(value);
-                        i = index + beginToken.length() + token.length() 
-                            + endToken.length();
-                    } else {
-                        // just append beginToken and search further
-                        b.append(beginToken);
-                        i = index + beginToken.length();
-                    }
-                } while ((index = line.indexOf(beginToken, i)) > -1);
-                
-                b.append(line.substring(i));
-                return b.toString();
-            } catch (StringIndexOutOfBoundsException e) {
-                return line;
-            }
-        } else {
-           return line;
-        }
-    }
-    
-    /**
-     * Create a new filter
-     *
-     * @param  the filter to be added
-     */
-    public void addFilter(Filter filter) {
-        if (isReference()) {
-            throw noChildrenAllowed();
-        }
-        filters.addElement(filter);
-    }
-    
-    /**
-     * Create a new FiltersFile
-     *
-     * @return   The filter that was created.
-     */
-    public FiltersFile createFiltersfile() {
-        if (isReference()) {
-            throw noChildrenAllowed();
-        }
-        return new FiltersFile();
-    }
-    
-    /**
-    * Add a new filter made from the given token and value.
-    *
-    * @param token  The token for the new filter.
-    * @param value  The value for the new filter.
-    */
-    public void addFilter(String token, String value) {
-        if (isReference()) {
-            throw noChildrenAllowed();
-        }
-        filters.addElement(new Filter(token, value));
-    }
-    
-    /**
-    * Add a Filterset to this filter set
-    *
-    * @param filterSet the filterset to be added to this filterset
-    */
-    public void addFilterSet(FilterSet filterSet) {
-        if (isReference()) {
-            throw noChildrenAllowed();
-        }
-        for (Enumeration e = filterSet.getFilters().elements(); e.hasMoreElements();) {
-            filters.addElement(e.nextElement());
-        }
-    }
-    
-    /**
-    * Test to see if this filter set it empty.
-    *
-    * @return   Return true if there are filter in this set otherwise false.
-    */
-    public boolean hasFilters() {
-        return getFilters().size() > 0;
-    }
-
-    public Object clone() throws BuildException {
-        if (isReference()) {
-            return new FilterSet(getRef());
-        } else {
-            return new FilterSet(this);
-        }
-    }
-
-}
- 
-
-
diff --git a/src/main/org/apache/tools/ant/types/FilterSetCollection.java b/src/main/org/apache/tools/ant/types/FilterSetCollection.java
deleted file mode 100644
index cbae7e0..0000000
--- a/src/main/org/apache/tools/ant/types/FilterSetCollection.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.types;
-
-// java io classes
-
-
-
-
-// java util classes
-import java.util.Enumeration;
-
-
-import java.util.Vector;
-
-// ant classes
-
-
-
-
-/**
- * A FilterSetCollection is a collection of filtersets each of which may have
- * a different start/end token settings.
- *
- * @author Conor MacNeill
- */
-public class FilterSetCollection {
-    
-    private Vector filterSets = new Vector();
-
-    public FilterSetCollection() {
-    }
-    
-    public FilterSetCollection(FilterSet filterSet) {
-        addFilterSet(filterSet);
-    }
-    
-    
-    public void addFilterSet(FilterSet filterSet) {
-        filterSets.addElement(filterSet);
-    }
-    
-    /**
-     * Does replacement on the given string with token matching.
-     * This uses the defined begintoken and endtoken values which default to @ for both.
-     *
-     * @param line  The line to process the tokens in.
-     * @return      The string with the tokens replaced.
-     */
-    public String replaceTokens(String line) {
-        String replacedLine = line;
-        for (Enumeration e = filterSets.elements(); e.hasMoreElements();) {
-            FilterSet filterSet = (FilterSet) e.nextElement();
-            replacedLine = filterSet.replaceTokens(replacedLine);
-        }
-        return replacedLine;
-    }
-    
-    /**
-    * Test to see if this filter set it empty.
-    *
-    * @return   Return true if there are filter in this set otherwise false.
-    */
-    public boolean hasFilters() {
-        for (Enumeration e = filterSets.elements(); e.hasMoreElements();) {
-            FilterSet filterSet = (FilterSet) e.nextElement();
-            if (filterSet.hasFilters()) {
-                return true;
-            }
-        }
-        return false;
-    }
-}
- 
-
-
diff --git a/src/main/org/apache/tools/ant/types/FlexInteger.java b/src/main/org/apache/tools/ant/types/FlexInteger.java
deleted file mode 100644
index 9027488..0000000
--- a/src/main/org/apache/tools/ant/types/FlexInteger.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.types;
-
-/**
- * Helper class which can be used for Ant task attribute setter methods to allow
- * the build file to specify an integer in either decimal, octal, or hexadecimal
- * format.
- *
- * @author Erik Hatcher
- * @see java.lang.Integer#decode(String)
- */
-public class FlexInteger {
-    private Integer value;
-
-    /**
-     * Constructor used by Ant's introspection mechanism for attribute population
-     */
-    public FlexInteger(String value) {
-        this.value = Integer.decode(value);
-    }
-
-    /**
-     * Returns the decimal integer value
-     */
-    public int intValue() {
-        return value.intValue();
-    }
-
-    /**
-     * Overridden method to return the decimal value for display
-     */
-    public String toString() {
-        return value.toString();
-    }
-}
diff --git a/src/main/org/apache/tools/ant/types/Mapper.java b/src/main/org/apache/tools/ant/types/Mapper.java
deleted file mode 100644
index 70afa1d..0000000
--- a/src/main/org/apache/tools/ant/types/Mapper.java
+++ /dev/null
@@ -1,275 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.types;
-
-import org.apache.tools.ant.AntClassLoader;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.util.FileNameMapper;
-
-import java.util.Properties;
-import java.util.Stack;
-
-/**
- * Element to define a FileNameMapper.
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> 
- */
-public class Mapper extends DataType implements Cloneable {
-
-    protected MapperType type = null;
-
-    public Mapper(Project p) {
-        setProject(p);
-    }
-
-    /**
-     * Set the type of FileNameMapper to use.
-     */
-    public void setType(MapperType type) {
-        if (isReference()) {
-            throw tooManyAttributes();
-        }
-        this.type = type;
-    }
-
-    protected String classname = null;
-
-    /**
-     * Set the class name of the FileNameMapper to use.
-     */
-    public void setClassname(String classname) {
-        if (isReference()) {
-            throw tooManyAttributes();
-        }
-        this.classname = classname;
-    }
-
-    protected Path classpath = null;
-
-    /**
-     * Set the classpath to load the FileNameMapper through (attribute).
-     */
-    public void setClasspath(Path classpath) {
-        if (isReference()) {
-            throw tooManyAttributes();
-        }
-        if (this.classpath == null) {
-            this.classpath = classpath;
-        } else {
-            this.classpath.append(classpath);
-        }
-    }
-
-    /**
-     * Set the classpath to load the FileNameMapper through (nested element).
-     */
-    public Path createClasspath() {
-        if (isReference()) {
-            throw noChildrenAllowed();
-        }
-        if (this.classpath == null) {
-            this.classpath = new Path(getProject());
-        }
-        return this.classpath.createPath();
-    }
-
-    /**
-     * Set the classpath to load the FileNameMapper through via
-     * reference (attribute).
-     */
-    public void setClasspathRef(Reference r) {
-        if (isReference()) {
-            throw tooManyAttributes();
-        }
-        createClasspath().setRefid(r);
-    }
-
-    protected String from = null;
-
-    /**
-     * Set the argument to FileNameMapper.setFrom
-     */
-    public void setFrom(String from) {
-        if (isReference()) {
-            throw tooManyAttributes();
-        }
-        this.from = from;
-    }
-
-    protected String to = null;
-
-    /**
-     * Set the argument to FileNameMapper.setTo
-     */
-    public void setTo(String to) {
-        if (isReference()) {
-            throw tooManyAttributes();
-        }
-        this.to = to;
-    }
-
-    /**
-     * Make this Mapper instance a reference to another Mapper.
-     *
-     * <p>You must not set any other attribute if you make it a
-     * reference.</p>
-     */
-    public void setRefid(Reference r) throws BuildException {
-        if (type != null || from != null || to != null) {
-            throw tooManyAttributes();
-        }
-        super.setRefid(r);
-    }
-
-    /**
-     * Returns a fully configured FileNameMapper implementation.
-     */
-    public FileNameMapper getImplementation() throws BuildException {
-        if (isReference()) {
-            return getRef().getImplementation();
-        }
-        
-        if (type == null && classname == null) {
-            throw new BuildException("one of the attributes type or classname is required");
-        }
-
-        if (type != null && classname != null) {
-            throw new BuildException("must not specify both type and classname attribute");
-        }
-
-        try {
-            if (type != null) {
-                classname = type.getImplementation();
-            }
-
-            Class c = null;
-            if (classpath == null) {
-                c = Class.forName(classname);
-            } else {
-                AntClassLoader al = new AntClassLoader(getProject(), 
-                                                       classpath);
-                c = al.loadClass(classname);
-                AntClassLoader.initializeClass(c);
-            }
-            
-            FileNameMapper m = (FileNameMapper) c.newInstance();
-            m.setFrom(from);
-            m.setTo(to);
-            return m;
-        } catch (BuildException be) {
-            throw be;
-        } catch (Throwable t) {
-            throw new BuildException(t);
-        } finally {
-            if (type != null) {
-                classname = null;
-            }
-        }
-    }
-        
-    /**
-     * Performs the check for circular references and returns the
-     * referenced Mapper.  
-     */
-    protected Mapper getRef() {
-        if (!checked) {
-            Stack stk = new Stack();
-            stk.push(this);
-            dieOnCircularReference(stk, getProject());
-        }
-        
-        Object o = ref.getReferencedObject(getProject());
-        if (!(o instanceof Mapper)) {
-            String msg = ref.getRefId() + " doesn\'t denote a mapper";
-            throw new BuildException(msg);
-        } else {
-            return (Mapper) o;
-        }
-    }
-
-    /**
-     * Class as Argument to FileNameMapper.setType.
-     */
-    public static class MapperType extends EnumeratedAttribute {
-        private Properties implementations;
-
-        public MapperType() {
-            implementations = new Properties();
-            implementations.put("identity", 
-                                "org.apache.tools.ant.util.IdentityMapper");
-            implementations.put("flatten", 
-                                "org.apache.tools.ant.util.FlatFileNameMapper");
-            implementations.put("glob", 
-                                "org.apache.tools.ant.util.GlobPatternMapper");
-            implementations.put("merge", 
-                                "org.apache.tools.ant.util.MergingMapper");
-            implementations.put("regexp", 
-                                "org.apache.tools.ant.util.RegexpPatternMapper");
-            implementations.put("package", 
-                                "org.apache.tools.ant.util.PackageNameMapper");
-        }
-
-        public String[] getValues() {
-            return new String[] {"identity", "flatten", "glob", 
-                                 "merge", "regexp", "package"};
-        }
-
-        public String getImplementation() {
-            return implementations.getProperty(getValue());
-        }
-    }
-
-}
diff --git a/src/main/org/apache/tools/ant/types/Parameter.java b/src/main/org/apache/tools/ant/types/Parameter.java
deleted file mode 100644
index afcb227..0000000
--- a/src/main/org/apache/tools/ant/types/Parameter.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.types;
-
-/**
- * A parameter is composed of a name, type and value.
- *
- * @author <a href="mailto:umagesh@apache.org">Magesh Umasankar</a>
- */
-public final class Parameter {
-    private String name = null;
-    private String type = null;
-    private String value = null;
-
-    public final void setName(final String name) {
-        this.name = name;
-    }
-
-    public final void setType(final String type) {
-        this.type = type;
-    }
-
-    public final void setValue(final String value) {
-        this.value = value;
-    }
-
-    public final String getName() {
-        return name;
-    }
-
-    public final String getType() {
-        return type;
-    }
-
-    public final String getValue() {
-        return value;
-    }
-}
diff --git a/src/main/org/apache/tools/ant/types/Parameterizable.java b/src/main/org/apache/tools/ant/types/Parameterizable.java
deleted file mode 100644
index 16bf878..0000000
--- a/src/main/org/apache/tools/ant/types/Parameterizable.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.types;
-
-/**
- * Parameterizable objects take genric key value pairs.
- *
- * @author <a href="mailto:umagesh@apache.org">Magesh Umasankar</a>
- */
-public interface Parameterizable {
-    void setParameters(Parameter[] parameters);
-}
diff --git a/src/main/org/apache/tools/ant/types/Path.java b/src/main/org/apache/tools/ant/types/Path.java
deleted file mode 100644
index 97cc61e..0000000
--- a/src/main/org/apache/tools/ant/types/Path.java
+++ /dev/null
@@ -1,650 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.types;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.DirectoryScanner;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.PathTokenizer;
-import org.apache.tools.ant.util.JavaEnvUtils;
-
-import java.io.File;
-
-import java.util.Enumeration;
-import java.util.Locale;
-import java.util.Stack;
-import java.util.Vector;
-
-
-
-/**
- * This object represents a path as used by CLASSPATH or PATH
- * environment variable.
- * <p>
- * <code>
- * &lt;sometask&gt;<br>
- * &nbsp;&nbsp;&lt;somepath&gt;<br>
- * &nbsp;&nbsp;&nbsp;&nbsp;&lt;pathelement location="/path/to/file.jar" /&gt;<br>
- * &nbsp;&nbsp;&nbsp;&nbsp;&lt;pathelement path="/path/to/file2.jar:/path/to/class2;/path/to/class3" /&gt;<br>
- * &nbsp;&nbsp;&nbsp;&nbsp;&lt;pathelement location="/path/to/file3.jar" /&gt;<br>
- * &nbsp;&nbsp;&nbsp;&nbsp;&lt;pathelement location="/path/to/file4.jar" /&gt;<br>
- * &nbsp;&nbsp;&lt;/somepath&gt;<br>
- * &lt;/sometask&gt;<br>
- * </code>
- * <p>
- * The object implemention <code>sometask</code> must provide a method called
- * <code>createSomepath</code> which returns an instance of <code>Path</code>.
- * Nested path definitions are handled by the Path object and must be labeled
- * <code>pathelement</code>.<p>
- *
- * The path element takes a parameter <code>path</code> which will be parsed
- * and split into single elements. It will usually be used
- * to define a path from an environment variable.
- *
- * @author Thomas.Haas@softwired-inc.com
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- */
-
-public class Path extends DataType implements Cloneable {
-
-    private Vector elements;
-
-    /** The system classspath as a Path object */
-    public static Path systemClasspath = 
-        new Path(null, System.getProperty("java.class.path"));
-
-
-    /**
-     * Helper class, holds the nested <code>&lt;pathelement&gt;</code> values.
-     */
-    public class PathElement {
-        private String[] parts;
-
-        public void setLocation(File loc) {
-            parts = new String[] {translateFile(loc.getAbsolutePath())};
-        }
-
-        public void setPath(String path) {
-            parts = Path.translatePath(getProject(), path);
-        }
-
-        public String[] getParts() {
-            return parts;
-        }
-    }
-
-    /**
-     * Invoked by IntrospectionHelper for <code>setXXX(Path p)</code>
-     * attribute setters.  
-     */
-    public Path(Project p, String path) {
-        this(p);
-        createPathElement().setPath(path);
-    }
-
-    public Path(Project project) {
-        setProject(project);
-        elements = new Vector();
-    }
-
-    /**
-     * Adds a element definition to the path.
-     * @param location the location of the element to add (must not be
-     * <code>null</code> nor empty.
-     */
-    public void setLocation(File location) throws BuildException {
-        if (isReference()) {
-            throw tooManyAttributes();
-        }
-        createPathElement().setLocation(location);
-    }
-
-
-    /**
-     * Parses a path definition and creates single PathElements.
-     * @param path the path definition.
-     */
-    public void setPath(String path) throws BuildException {
-        if (isReference()) {
-            throw tooManyAttributes();
-        }
-        createPathElement().setPath(path);
-    }
-
-    /**
-     * Makes this instance in effect a reference to another Path instance.
-     *
-     * <p>You must not set another attribute or nest elements inside
-     * this element if you make it a reference.</p>
-     */
-    public void setRefid(Reference r) throws BuildException {
-        if (!elements.isEmpty()) {
-            throw tooManyAttributes();
-        }
-        elements.addElement(r);
-        super.setRefid(r);
-    }
-
-    /**
-     * Creates the nested <code>&lt;pathelement&gt;</code> element.
-     */
-    public PathElement createPathElement() throws BuildException {
-        if (isReference()) {
-            throw noChildrenAllowed();
-        }
-        PathElement pe = new PathElement();
-        elements.addElement(pe);
-        return pe;
-    }
-
-    /**
-     * Adds a nested <code>&lt;fileset&gt;</code> element.
-     */
-    public void addFileset(FileSet fs) throws BuildException {
-        if (isReference()) {
-            throw noChildrenAllowed();
-        }
-        elements.addElement(fs);
-        checked = false;
-    }
-
-    /**
-     * Adds a nested <code>&lt;filelist&gt;</code> element.
-     */
-    public void addFilelist(FileList fl) throws BuildException {
-        if (isReference()) {
-            throw noChildrenAllowed();
-        }
-        elements.addElement(fl);
-        checked = false;
-    }
-
-    /**
-     * Adds a nested <code>&lt;dirset&gt;</code> element.
-     */
-    public void addDirset(DirSet dset) throws BuildException {
-        if (isReference()) {
-            throw noChildrenAllowed();
-        }
-        elements.addElement(dset);
-        checked = false;
-    }
-
-    /**
-     * Creates a nested <code>&lt;path&gt;</code> element.
-     */
-    public Path createPath() throws BuildException {
-        if (isReference()) {
-            throw noChildrenAllowed();
-        }
-        Path p = new Path(getProject());
-        elements.addElement(p);
-        checked = false;
-        return p;
-    }
-
-    /**
-     * Append the contents of the other Path instance to this.
-     */
-    public void append(Path other) {
-        if (other == null) {
-          return;
-        }
-        String[] l = other.list();
-        for (int i = 0; i < l.length; i++) {
-            if (elements.indexOf(l[i]) == -1) {
-                elements.addElement(l[i]);
-            }
-        }
-    }
-
-     /**
-     * Adds the components on the given path which exist to this
-     * Path. Components that don't exist, aren't added.
-     *
-     * @param source - source path whose components are examined for existence
-     */
-    public void addExisting(Path source) {
-        String[] list = source.list();
-        for (int i = 0; i < list.length; i++) {
-            File f = null;
-            if (getProject() != null) {
-                f = getProject().resolveFile(list[i]);
-            } else {
-                f = new File(list[i]);
-            }
-
-            if (f.exists()) {
-                setLocation(f);
-            } else {
-                log("dropping " + f + " from path as it doesn't exist", 
-                    Project.MSG_VERBOSE);
-            }
-        }
-    }
-
-    /**
-     * Returns all path elements defined by this and nested path objects.
-     * @return list of path elements.
-     */
-    public String[] list() {
-        if (!checked) {
-            // make sure we don't have a circular reference here
-            Stack stk = new Stack();
-            stk.push(this);
-            dieOnCircularReference(stk, getProject());
-        }
-
-        Vector result = new Vector(2 * elements.size());
-        for (int i = 0; i < elements.size(); i++) {
-            Object o = elements.elementAt(i);
-            if (o instanceof Reference) {
-                Reference r = (Reference) o;
-                o = r.getReferencedObject(getProject());
-                // we only support references to paths right now
-                if (!(o instanceof Path)) {
-                    String msg = r.getRefId() + " doesn\'t denote a path";
-                    throw new BuildException(msg);
-                }
-            }
-            
-            if (o instanceof String) {
-                // obtained via append
-                addUnlessPresent(result, (String) o);
-            } else if (o instanceof PathElement) {
-                String[] parts = ((PathElement) o).getParts();
-                if (parts == null) {
-                    throw new BuildException("You must either set location or" 
-                        + " path on <pathelement>");
-                }
-                for (int j = 0; j < parts.length; j++) {
-                    addUnlessPresent(result, parts[j]);
-                }
-            } else if (o instanceof Path) {
-                Path p = (Path) o;
-                if (p.getProject() == null) {
-                    p.setProject(getProject());
-                }
-                String[] parts = p.list();
-                for (int j = 0; j < parts.length; j++) {
-                    addUnlessPresent(result, parts[j]);
-                }
-            } else if (o instanceof DirSet) {
-                DirSet dset = (DirSet) o;
-                DirectoryScanner ds = dset.getDirectoryScanner(getProject());
-                String[] s = ds.getIncludedDirectories();
-                File dir = dset.getDir(getProject());
-                addUnlessPresent(result, dir, s);
-            } else if (o instanceof FileSet) {
-                FileSet fs = (FileSet) o;
-                DirectoryScanner ds = fs.getDirectoryScanner(getProject());
-                String[] s = ds.getIncludedFiles();
-                File dir = fs.getDir(getProject());
-                addUnlessPresent(result, dir, s);
-            } else if (o instanceof FileList) {
-                FileList fl = (FileList) o;
-                String[] s = fl.getFiles(getProject());
-                File dir = fl.getDir(getProject());
-                addUnlessPresent(result, dir, s);
-            }
-        }
-        String[] res = new String[result.size()];
-        result.copyInto(res);
-        return res;
-    }
-
-
-    /**
-     * Returns a textual representation of the path, which can be used as
-     * CLASSPATH or PATH environment variable definition.
-     * @return a textual representation of the path.
-     */
-    public String toString() {
-        final String[] list = list();
-
-        // empty path return empty string
-        if (list.length == 0) {
-            return "";
-        }
-
-        // path containing one or more elements
-        final StringBuffer result = new StringBuffer(list[0].toString());
-        for (int i = 1; i < list.length; i++) {
-            result.append(File.pathSeparatorChar);
-            result.append(list[i]);
-        }
-
-        return result.toString();
-    }
-
-    /**
-     * Splits a PATH (with : or ; as separators) into its parts.
-     */
-    public static String[] translatePath(Project project, String source) {
-        final Vector result = new Vector();
-        if (source == null) {
-          return new String[0];
-        }
-
-        PathTokenizer tok = new PathTokenizer(source);
-        StringBuffer element = new StringBuffer();
-        while (tok.hasMoreTokens()) {
-            element.setLength(0);
-            String pathElement = tok.nextToken();
-            try {
-                element.append(resolveFile(project, pathElement));
-            } catch (BuildException e) {
-                project.log("Dropping path element " + pathElement 
-                    + " as it is not valid relative to the project", 
-                    Project.MSG_VERBOSE);
-            }
-            for (int i = 0; i < element.length(); i++) {
-                translateFileSep(element, i);
-            }
-            result.addElement(element.toString());
-        }
-        String[] res = new String[result.size()];
-        result.copyInto(res);
-        return res;
-    }
-
-    /**
-     * Returns its argument with all file separator characters
-     * replaced so that they match the local OS conventions.  
-     */
-    public static String translateFile(String source) {
-        if (source == null) {
-          return "";
-        }
-
-        final StringBuffer result = new StringBuffer(source);
-        for (int i = 0; i < result.length(); i++) {
-            translateFileSep(result, i);
-        }
-
-        return result.toString();
-    }
-
-    /**
-     * Translates all occurrences of / or \ to correct separator of the
-     * current platform and returns whether it had to do any
-     * replacements.  
-     */
-    protected static boolean translateFileSep(StringBuffer buffer, int pos) {
-        if (buffer.charAt(pos) == '/' || buffer.charAt(pos) == '\\') {
-            buffer.setCharAt(pos, File.separatorChar);
-            return true;
-        }
-        return false;
-    }
-
-    /**
-     * How many parts does this Path instance consist of.
-     */
-    public int size() {
-        return list().length;
-    }
-
-    /**
-     * Return a Path that holds the same elements as this instance.
-     */
-    public Object clone() {
-        Path p = new Path(getProject());
-        p.append(this);
-        return p;
-    }
-
-    /**
-     * Overrides the version of DataType to recurse on all DataType
-     * child elements that may have been added.  
-     */
-    protected void dieOnCircularReference(Stack stk, Project p) 
-        throws BuildException {
-
-        if (checked) {
-            return;
-        }
-
-        Enumeration enum = elements.elements();
-        while (enum.hasMoreElements()) {
-            Object o = enum.nextElement();
-            if (o instanceof Reference) {
-                o = ((Reference) o).getReferencedObject(p);
-            }
-
-            if (o instanceof DataType) {
-                if (stk.contains(o)) {
-                    throw circularReference();
-                } else {
-                    stk.push(o);
-                    ((DataType) o).dieOnCircularReference(stk, p);
-                    stk.pop();
-                }
-            }
-        }
-        checked = true;
-    }
-
-    /**
-     * Resolve a filename with Project's help - if we know one that is.
-     *
-     * <p>Assume the filename is absolute if project is null.</p>
-     */
-    private static String resolveFile(Project project, String relativeName) {
-        if (project != null) {
-            File f = project.resolveFile(relativeName);
-            return f.getAbsolutePath();
-        }
-        return relativeName;
-    }
-
-    /**
-     * Adds a String to the Vector if it isn't already included.
-     */
-    private static void addUnlessPresent(Vector v, String s) {
-        if (v.indexOf(s) == -1) {
-            v.addElement(s);
-        }
-    }
-
-    /**
-     * Adds absolute path names of listed files in the given directory
-     * to the Vector if they are not already included.
-     */
-    private static void addUnlessPresent(Vector v, File dir, String[] s) {
-        for (int j = 0; j < s.length; j++) {
-            File d = new File(dir, s[j]);
-            String absolutePath = d.getAbsolutePath();
-            addUnlessPresent(v, translateFile(absolutePath));
-        } 
-    }
-
-    /**
-     * Concatenates the system class path in the order specified by
-     * the ${build.sysclasspath} property - using &quot;last&quot; as
-     * default value.
-     */
-    public Path concatSystemClasspath() {
-        return concatSystemClasspath("last");
-    }
-
-    /**
-     * Concatenates the system class path in the order specified by
-     * the ${build.sysclasspath} property - using the supplied value
-     * if ${build.sysclasspath} has not been set.
-     */
-    public Path concatSystemClasspath(String defValue) {
-
-        Path result = new Path(getProject());
-
-        String order = defValue;
-        if (getProject() != null) {
-            String o = getProject().getProperty("build.sysclasspath");
-            if (o != null) {
-                order = o;
-            }
-        }
-        
-        if (order.equals("only")) {
-            // only: the developer knows what (s)he is doing
-            result.addExisting(Path.systemClasspath);
-        
-        } else if (order.equals("first")) {
-            // first: developer could use a little help
-            result.addExisting(Path.systemClasspath);
-            result.addExisting(this);
-
-        } else if (order.equals("ignore")) {
-            // ignore: don't trust anyone
-            result.addExisting(this);
-
-        } else {
-            // last: don't trust the developer
-            if (!order.equals("last")) {
-                log("invalid value for build.sysclasspath: " + order, 
-                    Project.MSG_WARN);
-            }
-
-            result.addExisting(this);
-            result.addExisting(Path.systemClasspath);
-        }
-        
-
-        return result;
-
-    }
-
-    /**
-     * Add the Java Runtime classes to this Path instance.
-     */
-    public void addJavaRuntime() {
-        if (System.getProperty("java.vendor").toLowerCase(Locale.US).indexOf("microsoft") >= 0) {
-            // Pull in *.zip from packages directory
-            FileSet msZipFiles = new FileSet();
-            msZipFiles.setDir(new File(System.getProperty("java.home") 
-                + File.separator + "Packages"));
-            msZipFiles.setIncludes("*.ZIP");
-            addFileset(msZipFiles);
-        } else if ("Kaffe".equals(System.getProperty("java.vm.name"))) {
-            FileSet kaffeJarFiles = new FileSet();
-            kaffeJarFiles.setDir(new File(System.getProperty("java.home") 
-                                          + File.separator + "share"
-                                          + File.separator + "kaffe"));
-            
-            kaffeJarFiles.setIncludes("*.jar");
-            addFileset(kaffeJarFiles);
-        } else if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_1)) {
-            addExisting(new Path(null,
-                                 System.getProperty("java.home")
-                                 + File.separator + "lib"
-                                 + File.separator
-                                 + "classes.zip"));
-        } else {
-            // JDK > 1.1 seems to set java.home to the JRE directory.
-            addExisting(new Path(null,
-                                 System.getProperty("java.home")
-                                 + File.separator + "lib"
-                                 + File.separator + "rt.jar"));
-            // Just keep the old version as well and let addExisting
-            // sort it out.
-            addExisting(new Path(null,
-                                 System.getProperty("java.home")
-                                 + File.separator + "jre"
-                                 + File.separator + "lib"
-                                 + File.separator + "rt.jar"));
-            
-            // Added for MacOS X
-            addExisting(new Path(null,
-                                 System.getProperty("java.home")
-                                 + File.separator + ".."
-                                 + File.separator + "Classes"
-                                 + File.separator + "classes.jar"));
-            addExisting(new Path(null,
-                                 System.getProperty("java.home")
-                                 + File.separator + ".."
-                                 + File.separator + "Classes"
-                                 + File.separator + "ui.jar"));
-        }
-    }
-
-    /**
-     * Emulation of extdirs feature in java >= 1.2.
-     * This method adds all files in the given
-     * directories (but not in sub-directories!) to the classpath,
-     * so that you don't have to specify them all one by one.
-     * @param extdirs - Path to append files to
-     */
-    public void addExtdirs(Path extdirs) {
-        if (extdirs == null) {
-            String extProp = System.getProperty("java.ext.dirs");
-            if (extProp != null) {
-                extdirs = new Path(getProject(), extProp);
-            } else {
-                return;
-            }
-        }
-
-        String[] dirs = extdirs.list();
-        for (int i = 0; i < dirs.length; i++) {
-            File dir = getProject().resolveFile(dirs[i]);
-            if (dir.exists() && dir.isDirectory()) {
-                FileSet fs = new FileSet();
-                fs.setDir(dir);
-                fs.setIncludes("*");
-                addFileset(fs);
-            }
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/types/PatternSet.java b/src/main/org/apache/tools/ant/types/PatternSet.java
deleted file mode 100644
index d5d0d2a..0000000
--- a/src/main/org/apache/tools/ant/types/PatternSet.java
+++ /dev/null
@@ -1,478 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.types;
-
-import org.apache.tools.ant.Project;
-
-import org.apache.tools.ant.BuildException;
-
-import java.io.File;
-import java.io.BufferedReader;
-import java.io.FileReader;
-import java.io.IOException;
-import java.util.Enumeration;
-import java.util.Stack;
-import java.util.StringTokenizer;
-import java.util.Vector;
-
-/**
- * Named collection of include/exclude tags.
- *
- * <p>Moved out of MatchingTask to make it a standalone object that
- * could be referenced (by scripts for example).
- *
- * @author Arnout J. Kuiper <a href="mailto:ajkuiper@wxs.nl">ajkuiper@wxs.nl</a> 
- * @author Stefano Mazzocchi <a href="mailto:stefano@apache.org">stefano@apache.org</a>
- * @author Sam Ruby <a href="mailto:rubys@us.ibm.com">rubys@us.ibm.com</a>
- * @author Jon S. Stevens <a href="mailto:jon@clearink.com">jon@clearink.com</a>
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- */
-public class PatternSet extends DataType {
-    private Vector includeList = new Vector();
-    private Vector excludeList = new Vector();
-    private Vector includesFileList = new Vector();
-    private Vector excludesFileList = new Vector();
-
-    /**
-     * inner class to hold a name on list.  "If" and "Unless" attributes
-     * may be used to invalidate the entry based on the existence of a 
-     * property (typically set thru the use of the Available task).
-     */
-    public class NameEntry {
-        private String name;
-        private String ifCond;
-        private String unlessCond;
-
-        public void setName(String name) { 
-            this.name = name; 
-        }
-
-        public void setIf(String cond) {
-            ifCond = cond;
-        }
-
-        public void setUnless(String cond) {
-            unlessCond = cond;
-        }
-
-        public String getName() {
-            return name;
-        }
-
-        public String evalName(Project p) { 
-            return valid(p) ? name : null; 
-        }
-
-        private boolean valid(Project p) {
-            if (ifCond != null && p.getProperty(ifCond) == null) {
-                return false;
-            } else if (unlessCond != null && p.getProperty(unlessCond) != null) {
-                return false;
-            }
-            return true;
-        }
-
-        public String toString() {
-            StringBuffer buf = new StringBuffer(name);
-            if ((ifCond != null) || (unlessCond != null)) {
-                buf.append(":");
-                String connector = "";
-                
-                if (ifCond != null) {
-                    buf.append("if->");
-                    buf.append(ifCond);
-                    connector = ";";
-                }
-                if (unlessCond != null) {
-                    buf.append(connector);
-                    buf.append("unless->");
-                    buf.append(unlessCond);
-                }
-            }
-
-            return buf.toString();
-        }
-    }
-
-    public PatternSet() {
-        super();
-    }
-
-    /**
-     * Makes this instance in effect a reference to another PatternSet
-     * instance.
-     *
-     * <p>You must not set another attribute or nest elements inside
-     * this element if you make it a reference.</p> 
-     */
-    public void setRefid(Reference r) throws BuildException {
-        if (!includeList.isEmpty() || !excludeList.isEmpty()) {
-            throw tooManyAttributes();
-        }
-        super.setRefid(r);
-    }
-
-    public void addConfiguredPatternset(PatternSet p) {
-        if (isReference()) {
-            throw noChildrenAllowed();
-        }
-
-        String[] nestedIncludes = p.getIncludePatterns(getProject());
-        String[] nestedExcludes = p.getExcludePatterns(getProject());
-
-        if (nestedIncludes != null) {
-            for (int i = 0; i < nestedIncludes.length; i++) {
-                createInclude().setName(nestedIncludes[i]);
-            }
-        }
-
-        if (nestedExcludes != null) {
-            for (int i = 0; i < nestedExcludes.length; i++) {
-                createExclude().setName(nestedExcludes[i]);
-            }
-        }
-    }
-
-    /**
-     * add a name entry on the include list
-     */
-    public NameEntry createInclude() {
-        if (isReference()) {
-            throw noChildrenAllowed();
-        }
-        return addPatternToList(includeList);
-    }
-
-    /**
-     * add a name entry on the include files list
-     */
-    public NameEntry createIncludesFile() {
-        if (isReference()) {
-            throw noChildrenAllowed();
-        }
-        return addPatternToList(includesFileList);
-    }
-    
-    /**
-     * add a name entry on the exclude list
-     */
-    public NameEntry createExclude() {
-        if (isReference()) {
-            throw noChildrenAllowed();
-        }
-        return addPatternToList(excludeList);
-    }
-    
-    /**
-     * add a name entry on the exclude files list
-     */
-    public NameEntry createExcludesFile() {
-        if (isReference()) {
-            throw noChildrenAllowed();
-        }
-        return addPatternToList(excludesFileList);
-    }
-
-    /**
-     * Appends <code>includes</code> to the current list of include patterns. 
-     * Patterns may be separated by a comma or a space.
-     *
-     * @param includes the string containing the include patterns
-     */
-    public void setIncludes(String includes) {
-        if (isReference()) {
-            throw tooManyAttributes();
-        }
-        if (includes != null && includes.length() > 0) {
-            StringTokenizer tok = new StringTokenizer(includes, ", ", false);
-            while (tok.hasMoreTokens()) {
-                createInclude().setName(tok.nextToken());
-            }
-        }
-    }
-
-    /**
-     * Appends <code>excludes</code> to the current list of exclude patterns. 
-     * Patterns may be separated by a comma or a space.
-     *
-     * @param excludes the string containing the exclude patterns
-     */
-    public void setExcludes(String excludes) {
-        if (isReference()) {
-            throw tooManyAttributes();
-        }
-        if (excludes != null && excludes.length() > 0) {
-            StringTokenizer tok = new StringTokenizer(excludes, ", ", false);
-            while (tok.hasMoreTokens()) {
-                createExclude().setName(tok.nextToken());
-            }
-        }
-    }
-
-    /**
-     * add a name entry to the given list
-     */
-    private NameEntry addPatternToList(Vector list) {
-        NameEntry result = new NameEntry();
-        list.addElement(result);
-        return result;
-    }
-
-    /**
-     * Sets the name of the file containing the includes patterns.
-     *
-     * @param includesFile The file to fetch the include patterns from.  
-     */
-     public void setIncludesfile(File includesFile) throws BuildException {
-         if (isReference()) {
-             throw tooManyAttributes();
-         }
-         createIncludesFile().setName(includesFile.getAbsolutePath());
-     }
-
-    /**
-     * Sets the name of the file containing the excludes patterns.
-     *
-     * @param excludesFile The file to fetch the exclude patterns from.  
-     */
-     public void setExcludesfile(File excludesFile) throws BuildException {
-         if (isReference()) {
-             throw tooManyAttributes();
-         }
-         createExcludesFile().setName(excludesFile.getAbsolutePath());
-     }
-    
-    /**
-     *  Reads path matching patterns from a file and adds them to the
-     *  includes or excludes list (as appropriate).  
-     */
-    private void readPatterns(File patternfile, Vector patternlist, Project p)
-        throws BuildException {
-        
-        BufferedReader patternReader = null;
-        try {
-            // Get a FileReader
-            patternReader = 
-                new BufferedReader(new FileReader(patternfile)); 
-        
-            // Create one NameEntry in the appropriate pattern list for each 
-            // line in the file.
-            String line = patternReader.readLine();
-            while (line != null) {
-                if (line.length() > 0) {
-                    line = p.replaceProperties(line);
-                    addPatternToList(patternlist).setName(line);
-                }
-                line = patternReader.readLine();
-            }
-        } catch (IOException ioe)  {
-            String msg = "An error occured while reading from pattern file: " 
-                + patternfile;
-            throw new BuildException(msg, ioe);
-        } finally {
-            if (null != patternReader) {
-                try {
-                    patternReader.close();
-                } catch (IOException ioe) { 
-                    //Ignore exception
-                }
-            }
-        }
-    }
-
-    /**
-     * Adds the patterns of the other instance to this set.
-     */
-    public void append(PatternSet other, Project p) {
-        if (isReference()) {
-            throw new BuildException("Cannot append to a reference");
-        }
-
-        String[] incl = other.getIncludePatterns(p);
-        if (incl != null) {
-            for (int i = 0; i < incl.length; i++) {
-                createInclude().setName(incl[i]);
-            }
-        }
-        
-        String[] excl = other.getExcludePatterns(p);
-        if (excl != null) {
-            for (int i = 0; i < excl.length; i++) {
-                createExclude().setName(excl[i]);
-            }
-        }
-    }
-
-    /**
-     * Returns the filtered include patterns.
-     */
-    public String[] getIncludePatterns(Project p) {
-        if (isReference()) {
-            return getRef(p).getIncludePatterns(p);
-        } else {
-            readFiles(p);
-            return makeArray(includeList, p);
-        }
-    }
-
-    /**
-     * Returns the filtered include patterns.
-     */
-    public String[] getExcludePatterns(Project p) {
-        if (isReference()) {
-            return getRef(p).getExcludePatterns(p);
-        } else {
-            readFiles(p);
-            return makeArray(excludeList, p);
-        }
-    }
-
-    /**
-     * helper for FileSet.
-     */
-    boolean hasPatterns() {
-        return includesFileList.size() > 0 || excludesFileList.size() > 0 
-            || includeList.size() > 0 || excludeList.size() > 0;
-    }
-
-    /**
-     * Performs the check for circular references and returns the
-     * referenced PatternSet.  
-     */
-    private PatternSet getRef(Project p) {
-        if (!checked) {
-            Stack stk = new Stack();
-            stk.push(this);
-            dieOnCircularReference(stk, p);
-        }
-        
-        Object o = ref.getReferencedObject(p);
-        if (!(o instanceof PatternSet)) {
-            String msg = ref.getRefId() + " doesn\'t denote a patternset";
-            throw new BuildException(msg);
-        } else {
-            return (PatternSet) o;
-        }
-    }
-
-    /**
-     * Convert a vector of NameEntry elements into an array of Strings.
-     */
-    private String[] makeArray(Vector list, Project p) {
-        if (list.size() == 0) {
-          return null;
-        }
-
-        Vector tmpNames = new Vector();
-        for (Enumeration e = list.elements() ; e.hasMoreElements() ;) {
-            NameEntry ne = (NameEntry) e.nextElement();
-            String pattern = ne.evalName(p);
-            if (pattern != null && pattern.length() > 0) {
-                tmpNames.addElement(pattern);
-            }
-        }
-
-        String[] result = new String[tmpNames.size()];
-        tmpNames.copyInto(result);
-        return result;
-    }
-        
-    /**
-     * Read includesfile ot excludesfile if not already done so.
-     */
-    private void readFiles(Project p) {
-        if (includesFileList.size() > 0) {
-            Enumeration e = includesFileList.elements();
-            while (e.hasMoreElements()) {
-                NameEntry ne = (NameEntry) e.nextElement();
-                String fileName = ne.evalName(p);
-                if (fileName != null) {
-                    File inclFile = p.resolveFile(fileName);
-                    if (!inclFile.exists()) {
-                        throw new BuildException("Includesfile "
-                                                 + inclFile.getAbsolutePath()
-                                                 + " not found.");
-                    }
-                    readPatterns(inclFile, includeList, p);
-                }
-            }
-            includesFileList.removeAllElements();
-        }
-
-        if (excludesFileList.size() > 0) {
-            Enumeration e = excludesFileList.elements();
-            while (e.hasMoreElements()) {
-                NameEntry ne = (NameEntry) e.nextElement();
-                String fileName = ne.evalName(p);
-                if (fileName != null) {
-                    File exclFile = p.resolveFile(fileName);
-                    if (!exclFile.exists()) {
-                        throw new BuildException("Excludesfile "
-                                                 + exclFile.getAbsolutePath()
-                                                 + " not found.");
-                    }
-                    readPatterns(exclFile, excludeList, p);
-                }
-            }
-            excludesFileList.removeAllElements();
-        }
-    }
-
-    public String toString() {
-        return "patternSet{ includes: " + includeList + 
-            " excludes: " + excludeList + " }";
-    }
-
-}
diff --git a/src/main/org/apache/tools/ant/types/Reference.java b/src/main/org/apache/tools/ant/types/Reference.java
deleted file mode 100644
index 548c130..0000000
--- a/src/main/org/apache/tools/ant/types/Reference.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights 
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.types;
-
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.BuildException;
-
-/**
- * Class to hold a reference to another object in the project.
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- */
-public class Reference {
-
-    private String refid;
-
-    public Reference() {
-        super();
-    }
-
-    public Reference(String id) {
-        this();
-        setRefId(id);
-    }
-
-    public void setRefId(String id) {
-        refid = id;
-    }
-
-    public String getRefId() {
-        return refid;
-    }
-
-    public Object getReferencedObject(Project project) throws BuildException {
-        if (refid == null) {
-            throw new BuildException("No reference specified");
-        }
-        
-        Object o = project.getReference(refid);
-        if (o == null) {
-            throw new BuildException("Reference " + refid + " not found.");
-        }
-        return o;
-    }
-}
diff --git a/src/main/org/apache/tools/ant/types/RegularExpression.java b/src/main/org/apache/tools/ant/types/RegularExpression.java
deleted file mode 100644
index 377ab45..0000000
--- a/src/main/org/apache/tools/ant/types/RegularExpression.java
+++ /dev/null
@@ -1,156 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights 
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.types;
-
-
-import java.util.Stack;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.util.regexp.Regexp;
-import org.apache.tools.ant.util.regexp.RegexpFactory;
-
-/***
- * A regular expression datatype.  Keeps an instance of the
- * compiled expression for speed purposes.  This compiled
- * expression is lazily evaluated (it is compiled the first
- * time it is needed).  The syntax is the dependent on which
- * regular expression type you are using.  The system property
- * "ant.regexp.regexpimpl" will be the classname of the implementation
- * that will be used.
- *
- * <pre>
- * For jdk  &lt;= 1.3, there are two available implementations:
- *   org.apache.tools.ant.util.regexp.JakartaOroRegexp (the default)
- *        Based on the jakarta-oro package
- *
- *   org.apache.tools.ant.util.regexp.JakartaRegexpRegexp
- *        Based on the jakarta-regexp package
- *
- * For jdk &gt;= 1.4 an additional implementation is available:
- *   org.apache.tools.ant.util.regexp.Jdk14RegexpRegexp
- *        Based on the jdk 1.4 built in regular expression package.
- * </pre>
- *
- * <pre>
- *   &lt;regexp [ [id="id"] pattern="expression" | refid="id" ] 
- *   /&gt;
- * </pre>
- *
- * @see org.apache.oro.text.regex.Perl5Compiler
- * @see org.apache.regexp.RE
- * @see java.util.regex.Pattern
- *
- * @see org.apache.tools.ant.util.regexp.Regexp
- * @author Matthew Inger <a href="mailto:mattinger@mindless.com">mattinger@mindless.com</a>
- *
- * @ant.datatype name="regexp"
- */
-public class RegularExpression extends DataType {
-    /** Name of this data type */
-    public static final String DATA_TYPE_NAME = "regexp";
-
-    // The regular expression factory
-    private static final RegexpFactory factory = new RegexpFactory();
-
-    private Regexp regexp;
-
-    public RegularExpression() {
-        this.regexp = factory.newRegexp();
-    }
-
-    public void setPattern(String pattern) {
-        this.regexp.setPattern(pattern);
-    }
-
-    /***
-     * Gets the pattern string for this RegularExpression in the
-     * given project.
-     */
-    public String getPattern(Project p) {
-        if (isReference()) {
-            return getRef(p).getPattern(p);
-        }
-
-        return regexp.getPattern();
-    }
-
-    public Regexp getRegexp(Project p) {
-        if (isReference()) {
-            return getRef(p).getRegexp(p);
-        }
-        return this.regexp;
-    }
-
-    /***
-     * Get the RegularExpression this reference refers to in
-     * the given project.  Check for circular references too
-     */
-    public RegularExpression getRef(Project p) {
-        if (!checked) {
-            Stack stk = new Stack();
-            stk.push(this);
-            dieOnCircularReference(stk, p);
-        }
-
-        
-        Object o = ref.getReferencedObject(p);
-        if (!(o instanceof RegularExpression)) {
-            String msg = ref.getRefId() + " doesn\'t denote a " 
-                + DATA_TYPE_NAME;
-            throw new BuildException(msg);
-        } else {
-            return (RegularExpression) o;
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/types/Substitution.java b/src/main/org/apache/tools/ant/types/Substitution.java
deleted file mode 100644
index b1f64ba..0000000
--- a/src/main/org/apache/tools/ant/types/Substitution.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights 
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.types;
-
-
-import java.util.Stack;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-
-/***
- * A regular expression substitution datatype.  It is an expression
- * that is meant to replace a regular expression.
- *
- * <pre>
- *   &lt;substitition [ [id="id"] expression="expression" | refid="id" ] 
- *   /&gt;
- * </pre>
- *
- * @see org.apache.oro.text.regex.Perl5Substitution
- * @author Matthew Inger <a href="mailto:mattinger@mindless.com">mattinger@mindless.com</a>
- */
-public class Substitution extends DataType {
-    /** The name of this data type */
-    public static final String DATA_TYPE_NAME = "substitition";
-
-    private String expression;
-
-    public Substitution() {
-        this.expression = null;
-    }
-
-    public void setExpression(String expression) {
-        this.expression = expression;
-    }
-
-    /***
-     * Gets the pattern string for this RegularExpression in the
-     * given project.
-     */
-    public String getExpression(Project p) {
-        if (isReference()) {
-            return getRef(p).getExpression(p);
-        }
-
-        return expression;
-    }
-
-    /***
-     * Get the RegularExpression this reference refers to in
-     * the given project.  Check for circular references too
-     */
-    public Substitution getRef(Project p) {
-        if (!checked) {
-            Stack stk = new Stack();
-            stk.push(this);
-            dieOnCircularReference(stk, p);
-        }
-
-        
-        Object o = ref.getReferencedObject(p);
-        if (!(o instanceof Substitution)) {
-            String msg = ref.getRefId() + " doesn\'t denote a substitution";
-            throw new BuildException(msg);
-        } else {
-            return (Substitution) o;
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/types/XMLCatalog.java b/src/main/org/apache/tools/ant/types/XMLCatalog.java
deleted file mode 100644
index c03f3d6..0000000
--- a/src/main/org/apache/tools/ant/types/XMLCatalog.java
+++ /dev/null
@@ -1,340 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.types;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.InputStream;
-import java.io.IOException;
-import java.net.URL;
-import java.util.Enumeration;
-import java.util.Vector;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.AntClassLoader;
-import org.xml.sax.EntityResolver;
-import org.xml.sax.InputSource;
-import org.xml.sax.SAXException;
-import org.apache.tools.ant.util.LoaderUtils;
-import org.apache.tools.ant.util.FileUtils;
-
-/**
- * This data type provides a catalog of DTD locations.
- * <p>
- * <code>
- * &lt;catalog&gt;<br>
- * &nbsp;&nbsp;&lt;dtd publicId="" location="/path/to/file.jar" /&gt;<br>
- * &nbsp;&nbsp;&lt;dtd publicId location="/path/to/file2.jar" /gt;<br>
- * &nbsp;&nbsp;&lt;entity publicId="" location="/path/to/file3.jar" /&gt;<br>
- * &nbsp;&nbsp;&lt;entity publicId="" location="/path/to/file4.jar" /&gt;<br>
- * &lt;/catalog&gt;<br>
- * </code>
- * <p>
- * The object implemention <code>sometask</code> must provide a method called
- * <code>createCatalog</code> which returns an instance of 
- * <code>XMLCatalog</code>. Nested DTD and entity definitions are handled by
- * the XMLCatalog object and must be labeled <code>dtd</code> and
- * <code>entity</code> respectively.</p>
- *
- * <p>Possible future extension could allow a catalog file instead of nested
- * elements, or use Norman Walsh's entity resolver from xml-commons</p>
- *
- * @author dIon Gillard
- * @author Erik Hatcher
- * @version $Id$
- */
-public class XMLCatalog extends DataType implements Cloneable, EntityResolver {
-    /** File utilities instance */
-    private FileUtils fileUtils = FileUtils.newFileUtils();
-    
-    //-- Fields ----------------------------------------------------------------
-    
-    /** holds dtd/entity objects until needed */
-    private Vector elements = new Vector();
-
-    private Path classpath;
-
-    //-- Methods ---------------------------------------------------------------
-    
-    /**
-     * @return the elements of the catalog - DTDLocation objects
-     */
-    private Vector getElements() {
-        return elements;
-    }
-
-    /**
-     * @return the classpath
-     */
-    private Path getClasspath() {
-        return classpath;
-    }
-
-    /**
-     * Set the list of DTDLocation object sin the catalog
-     *
-     * @param aVector the new list of DTD Locations to use in the catalog.
-     */
-    private void setElements(Vector aVector) {
-        elements = aVector;
-    }
-    
-    /**
-     * Add a DTD Location to the catalog
-     *
-     * @param aDTD the DTDLocation instance to be aded to the catalog
-     */
-    private void addElement(DTDLocation aDTD) {
-        getElements().addElement(aDTD);
-    }
-
-    /**
-     * Allows nested classpath elements
-     */
-    public Path createClasspath() {
-        if (isReference()) {
-            throw noChildrenAllowed();
-        }
-        if (this.classpath == null) {
-            this.classpath = new Path(getProject());
-        }
-        return this.classpath.createPath();
-    }
-
-    /**
-     * Allows simple classpath string
-     */
-    public void setClasspath(Path classpath) {
-        if (isReference()) {
-            throw tooManyAttributes();
-        }
-        if (this.classpath == null) {
-            this.classpath = classpath;
-        } else {
-            this.classpath.append(classpath);
-        }
-    }
-
-    /**
-     * Allows classpath reference
-     */
-    public void setClasspathRef(Reference r) {
-        if (isReference()) {
-            throw tooManyAttributes();
-        }
-        createClasspath().setRefid(r);
-    }
-
-    /**
-     * Creates the nested <code>&lt;dtd&gt;</code> element.
-     *
-     * @param dtd the infromation about the DTD to be added to the catalog
-     * @exception BuildException if this is a reference and no nested 
-     *       elements are allowed.
-     */
-    public void addDTD(DTDLocation dtd) throws BuildException {
-        if (isReference()) {
-            throw noChildrenAllowed();
-        }
-
-        getElements().addElement(dtd);
-    }
-    
-    /**
-     * Creates the nested <code>&lt;entity&gt;</code> element
-     *
-     * @param dtd the infromation about the DTD to be added to the catalog
-     * @exception BuildException if this is a reference and no nested 
-     *       elements are allowed.
-     */
-    public void addEntity(DTDLocation dtd) throws BuildException {
-        addDTD(dtd);
-    }
-
-    /**
-     * Loads a nested XMLCatalog into our definition
-     *
-     * @param catalog Nested XMLCatalog
-     */
-    public void addConfiguredXMLCatalog(XMLCatalog catalog) {
-        if (isReference()) {
-            throw noChildrenAllowed();
-        }
-
-        // Add all nested elements to our catalog
-        Vector newElements = catalog.getElements();
-        Vector ourElements = getElements();
-        Enumeration enum = newElements.elements();
-        while (enum.hasMoreElements()) {
-            ourElements.addElement(enum.nextElement());
-        }
-
-        // Append the classpath of the nested catalog
-        Path nestedClasspath = catalog.getClasspath();
-        createClasspath().append(nestedClasspath);
-    }
-
-    /**
-     * Makes this instance in effect a reference to another XCatalog instance.
-     *
-     * <p>You must not set another attribute or nest elements inside
-     * this element if you make it a reference.</p>
-     *
-     * @param r the reference to which this catalogi instance is associated
-     * @exception BuildException if this instance already has been configured.
-     */
-    public void setRefid(Reference r) throws BuildException {
-        if (!elements.isEmpty()) {
-            throw tooManyAttributes();
-        }
-        // change this to get the objects from the other reference
-        Object o = r.getReferencedObject(getProject());
-        // we only support references to other XCatalogs
-        if (o instanceof XMLCatalog) {
-            // set all elements from referenced catalog to this one
-            XMLCatalog catalog = (XMLCatalog) o;
-            setElements(catalog.getElements());
-        } else {
-            String msg = r.getRefId() + " does not refer to an XMLCatalog";
-            throw new BuildException(msg);
-        }
-
-        super.setRefid(r);
-    }
-
-    /**
-     * @see org.xml.sax.EntityResolver#resolveEntity
-     */
-    public InputSource resolveEntity(String publicId, String systemId)
-        throws SAXException, IOException {
-        InputSource source = null;
-        DTDLocation matchingDTD = findMatchingDTD(publicId);
-        if (matchingDTD != null) {
-            // check if publicId is mapped to a file
-            log("Matching DTD found for publicId: '" + publicId +
-                "' location: '" + matchingDTD.getLocation() + "'",
-                Project.MSG_DEBUG);
-            File dtdFile = project.resolveFile(matchingDTD.getLocation());
-            if (dtdFile.exists() && dtdFile.canRead()) {
-                source = new InputSource(new FileInputStream(dtdFile));
-                URL dtdFileURL = fileUtils.getFileURL(dtdFile);
-                source.setSystemId(dtdFileURL.toExternalForm());
-                log("matched a readable file", Project.MSG_DEBUG);
-            } else {
-                // check if publicId is a resource
-
-                AntClassLoader loader = null;
-                if (classpath != null) {
-                    loader = new AntClassLoader(project, classpath);
-                } else {
-                    loader = new AntClassLoader(project, Path.systemClasspath);
-                }
-
-                InputStream is
-                    = loader.getResourceAsStream(matchingDTD.getLocation());
-                if (is != null) {
-                    source = new InputSource(is);
-                    source.setSystemId(loader.getResource(
-                        matchingDTD.getLocation()).toExternalForm());
-                    log("matched a resource", Project.MSG_DEBUG);
-                } else {
-                    // check if it's a URL
-                    try {
-                        URL dtdUrl = new URL(matchingDTD.getLocation());
-                        InputStream dtdIs = dtdUrl.openStream();
-                        if (dtdIs != null) {
-                            source = new InputSource(dtdIs);
-                            source.setSystemId(dtdUrl.toExternalForm());
-                            log("matched as a URL", Project.MSG_DEBUG);
-                        } else {
-                            log("No match, parser will use: '" + systemId + "'",
-                                Project.MSG_DEBUG);
-                        }
-                    } catch (IOException ioe) {
-                        //ignore
-                    }
-                }
-            }
-        } else {
-            log("No match, parser will use: '" + systemId + "'",
-                Project.MSG_DEBUG);
-        }
-        // else let the parser handle it as a URI as we don't know what to
-        // do with it
-        return source;
-    }
-    
-    /**
-     * Find a DTDLocation instance for the given publicId.
-     *
-     * @param publicId the publicId of the DTD for which local information is 
-     *        required
-     * @return a DTDLocation instance with information on the local location 
-     *         of the DTD or null if no such information is available
-     */
-    private DTDLocation findMatchingDTD(String publicId) {
-        Enumeration elements = getElements().elements();
-        DTDLocation element = null;
-        while (elements.hasMoreElements()) {
-            element = (DTDLocation) elements.nextElement();
-            if (element.getPublicId().equals(publicId)) {
-                return element;
-            }
-        }
-        return null;
-    }
-      
-}
-
diff --git a/src/main/org/apache/tools/ant/types/ZipFileSet.java b/src/main/org/apache/tools/ant/types/ZipFileSet.java
deleted file mode 100644
index dfb4ad2..0000000
--- a/src/main/org/apache/tools/ant/types/ZipFileSet.java
+++ /dev/null
@@ -1,205 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.types;
-
-import java.io.File;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.DirectoryScanner;
-import org.apache.tools.ant.Project;
-import java.util.Stack;
-
-/**
- * A ZipFileSet is a FileSet with extra attributes useful in the context of
- * Zip/Jar tasks.
- *
- * A ZipFileSet extends FileSets with the ability to extract a subset of the
- * entries of a Zip file for inclusion in another Zip file.  It also includes
- * a prefix attribute which is prepended to each entry in the output Zip file.
- *
- * At present, ZipFileSets are not surfaced in the public API.  FileSets
- * nested in a Zip task are instantiated as ZipFileSets, and their attributes
- * are only recognized in the context of the the Zip task.
- * It is not possible to define a ZipFileSet outside of the Zip task and
- * refer to it via a refid.  However a standard FileSet may be included by
- * reference in the Zip task, and attributes in the refering ZipFileSet
- * can augment FileSet definition.
- *
- * @author Don Ferguson <a href="mailto:don@bea.com">don@bea.com</a>
- */
-public class ZipFileSet extends FileSet {
-
-    private File srcFile          = null;
-    private String prefix         = "";
-    private String fullpath       = "";
-    private boolean hasDir        = false;
-
-    public ZipFileSet() {
-      super();
-    }
-
-    protected ZipFileSet(FileSet fileset) {
-      super(fileset);
-    }
-
-    /**
-     * Set the directory for the fileset.  Prevents both "dir" and "src"
-     * from being specified.
-     */
-    public void setDir(File dir) throws BuildException {
-        if (srcFile != null) {
-            throw new BuildException("Cannot set both dir and src attributes");
-        } else {
-            super.setDir(dir);
-            hasDir = true;
-        }
-    }
-
-    /**
-     * Set the source Zip file for the zipfileset.  Prevents both
-     * "dir" and "src" from being specified.
-     *
-     * @param srcFile The zip file from which to extract entries.
-     */
-    public void setSrc(File srcFile) {
-        if (hasDir) {
-            throw new BuildException("Cannot set both dir and src attributes");
-        }
-        this.srcFile = srcFile;
-    }
-
-    /**
-     * Get the zip file from which entries will be extracted.
-     * References are not followed, since it is not possible
-     * to have a reference to a ZipFileSet, only to a FileSet.
-     */
-    public File getSrc() {
-        return srcFile;
-    }
-
-    /**
-     * Prepend this prefix to the path for each zip entry.
-     * Does not perform reference test; the referenced file set
-     * can be augmented with a prefix.
-     *
-     * @param prefix The prefix to prepend to entries in the zip file.
-     */
-    public void setPrefix(String prefix) {
-        this.prefix = prefix;
-    }
-
-    /**
-     * Return the prefix prepended to entries in the zip file.
-     */
-    public String getPrefix() {
-        return prefix;
-    }
-
-    /**
-     * Set the full pathname of the single entry in this fileset.
-     *
-     * @param fullpath the full pathname of the single entry in this fileset.
-     */
-    public void setFullpath(String fullpath) {
-        this.fullpath = fullpath;
-    }
-
-    /**
-     * Return the full pathname of the single entry in this fileset.
-     */
-    public String getFullpath() {
-        return fullpath;
-    }
-
-    /**
-     * Return the DirectoryScanner associated with this FileSet.
-     * If the ZipFileSet defines a source Zip file, then a ZipScanner
-     * is returned instead.
-     */
-    public DirectoryScanner getDirectoryScanner(Project p) {
-        if (isReference()) {
-            return getRef(p).getDirectoryScanner(p);
-        }
-        if (srcFile != null) {
-            ZipScanner zs = new ZipScanner();
-            zs.setSrc(srcFile);
-            super.setDir(p.getBaseDir());
-            setupDirectoryScanner(zs, p);
-            zs.init();
-            return zs;
-        } else {
-            return super.getDirectoryScanner(p);
-        }
-    }
-
-    /**
-     * A ZipFileset can accept any fileset as a reference as it just uses the
-     * standard directory scanner.
-     */
-    protected AbstractFileSet getRef(Project p) {
-        if (!checked) {
-            Stack stk = new Stack();
-            stk.push(this);
-            dieOnCircularReference(stk, p);
-        }
-
-        Object o = ref.getReferencedObject(p);
-        if (!(o instanceof FileSet)) {
-            String msg = ref.getRefId() + " doesn\'t denote a fileset";
-            throw new BuildException(msg);
-        } else {
-            return (AbstractFileSet) o;
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/types/ZipScanner.java b/src/main/org/apache/tools/ant/types/ZipScanner.java
deleted file mode 100644
index 4225d48..0000000
--- a/src/main/org/apache/tools/ant/types/ZipScanner.java
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights 
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.types;
-
-import org.apache.tools.ant.DirectoryScanner;
-import java.io.File;
-
-/**
- * ZipScanner accesses the pattern matching algorithm in DirectoryScanner,
- * which are protected methods that can only be accessed by subclassing.
- *
- * This implementation of FileScanner defines getIncludedFiles to return
- * only the Zip File which is being scanned, not the matching Zip entries.
- * Arguably, it should return the matching entries, however this would
- * complicate existing code which assumes that FileScanners return a
- * set of file system files that can be accessed directly.
- * 
- * @author Don Ferguson <a href="mailto:don@bea.com">don@bea.com</a>
- */
-public class ZipScanner extends DirectoryScanner {
-
-    /**
-     * The zip file which should be scanned.
-     */
-    protected File srcFile;
-
-    /**
-     * Sets the srcFile for scanning. This is the jar or zip file that is scanned
-     * for matching entries.
-     *
-     * @param srcFile the (non-null) zip file name for scanning
-     */
-    public void setSrc(File srcFile) {
-        this.srcFile = srcFile;
-    }
-
-    /**
-     * Returns the zip file itself, not the matching entries within the zip file.
-     * This keeps the uptodate test in the Zip task simple; otherwise we'd need
-     * to treat zip filesets specially.
-     *
-     * @return the source file from which entries will be extracted.
-     */
-    public String[] getIncludedFiles() {
-        String[] result = new String[1];
-        result[0] = srcFile.getAbsolutePath();
-        return result;
-    }
-
-    /**
-     * Returns an empty list of directories to create.
-     */
-    public String[] getIncludedDirectories() {
-        return new String[0];
-    }
-
-    /**
-     * Initialize DirectoryScanner data structures.
-     */
-    public void init() {
-        if (includes == null) {
-            // No includes supplied, so set it to 'matches all'
-            includes = new String[1];
-            includes[0] = "**";
-        }
-        if (excludes == null) {
-            excludes = new String[0];
-        }
-    }
-
-    /**
-     * Matches a jar entry against the includes/excludes list,
-     * normalizing the path separator.
-     *
-     * @param path the (non-null) path name to test for inclusion
-     *
-     * @return <code>true</code> if the path should be included
-     *         <code>false</code> otherwise.
-     */
-    public boolean match(String path) {
-        String vpath = path.replace('/', File.separatorChar).
-            replace('\\', File.separatorChar);
-        return isIncluded(vpath) && !isExcluded(vpath);
-    }
-
-}
diff --git a/src/main/org/apache/tools/ant/types/defaults.properties b/src/main/org/apache/tools/ant/types/defaults.properties
deleted file mode 100644
index fbaed17..0000000
--- a/src/main/org/apache/tools/ant/types/defaults.properties
+++ /dev/null
@@ -1,17 +0,0 @@
-classfileset=org.apache.tools.ant.types.optional.depend.ClassfileSet
-description=org.apache.tools.ant.types.Description
-dirset=org.apache.tools.ant.types.DirSet
-filelist=org.apache.tools.ant.types.FileList
-fileset=org.apache.tools.ant.types.FileSet
-filterchain=org.apache.tools.ant.types.FilterChain
-filterreader=org.apache.tools.ant.types.AntFilterReader
-filterset=org.apache.tools.ant.types.FilterSet
-mapper=org.apache.tools.ant.types.Mapper
-path=org.apache.tools.ant.types.Path
-patternset=org.apache.tools.ant.types.PatternSet
-regexp=org.apache.tools.ant.types.RegularExpression
-substitution=org.apache.tools.ant.types.Substitution
-xmlcatalog=org.apache.tools.ant.types.XMLCatalog
-extensionSet=org.apache.tools.ant.taskdefs.optional.extension.ExtensionSet
-extension=org.apache.tools.ant.taskdefs.optional.extension.ExtensionAdapter
-libfileset=org.apache.tools.ant.taskdefs.optional.extension.LibFileSet
\ No newline at end of file
diff --git a/src/main/org/apache/tools/ant/types/optional/depend/ClassfileSet.java b/src/main/org/apache/tools/ant/types/optional/depend/ClassfileSet.java
deleted file mode 100644
index 0a5b319..0000000
--- a/src/main/org/apache/tools/ant/types/optional/depend/ClassfileSet.java
+++ /dev/null
@@ -1,206 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.types.optional.depend;
-
-import java.util.Vector;
-import java.util.Enumeration;
-import org.apache.tools.ant.DirectoryScanner;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.types.FileSet;
-
-/**
- * A ClassfileSet is a FileSet, that enlists all classes that depend on a
- * certain set of root classes.
- *
- * A ClassfileSet extends FileSets. The
- * nested FileSet attribute provides the domain, that is used for searching
- * for dependent classes
- *
- * @author <a href="mailto:hengels@innovidata.com">Holger Engels</a>
- */
-public class ClassfileSet extends FileSet {
-    /** 
-     * The list of root classes for this class file set. These are the 
-     * classes which must be included in the fileset and which are the 
-     * starting point for the dependency search.
-     */
-    private Vector rootClasses = new Vector();
-
-    /**
-     * The list of filesets which contain root classes
-     */
-    private Vector rootFileSets = new Vector();
-    
-    /**
-     * Inner class used to contain info about root classes
-     */
-    public static class ClassRoot {
-        /** The name of the root class */
-        private String rootClass;
-        
-        /** 
-         * Set the root class name 
-         *
-         * @param name the name of the root class 
-         */
-        public void setClassname(String name) {
-            this.rootClass = name;
-        }
-        
-        /**
-         * Get the name of the root class
-         *
-         * @return the name of the root class.
-         */
-        public String getClassname() {
-            return rootClass;
-        }
-    }
-
-    /**
-     * Default constructor
-     */
-    public ClassfileSet() {
-    }
-    
-    /**
-     * Add a fileset to which contains a collection of root classes used to 
-     * drive the search from classes 
-     *
-     * @param rootFileSet a root file set to be used to search for dependent
-     * classes
-     */
-    public void addRootFileset(FileSet rootFileSet) {
-        rootFileSets.addElement(rootFileSet);
-    }
-    
-    /**
-     * Create a ClassfileSet from another ClassfileSet
-     *
-     * @param s the other classfileset
-     */
-    protected ClassfileSet(ClassfileSet s) {
-        super(s);
-        rootClasses = (Vector) s.rootClasses.clone();
-    }
-
-    /**
-     * Set the root class attribute
-     *
-     * @param rootClass the name of the root class.
-     */
-    public void setRootClass(String rootClass) {
-        rootClasses.addElement(rootClass);
-    }
-
-    /**
-     * Return the DirectoryScanner associated with this FileSet.
-     *
-     * @param p the project used to resolve dirs, etc.
-     *
-     * @return a dependency scanner.
-     */
-    public DirectoryScanner getDirectoryScanner(Project p) {
-        if (isReference()) {
-            return getRef(p).getDirectoryScanner(p);
-        }
-
-        Vector allRootClasses = (Vector) rootClasses.clone();
-        for (Enumeration e = rootFileSets.elements(); e.hasMoreElements();) {
-            FileSet additionalRootSet = (FileSet) e.nextElement();
-            DirectoryScanner additionalScanner
-                = additionalRootSet.getDirectoryScanner(p);
-            String[] files = additionalScanner.getIncludedFiles();
-            for (int i = 0; i < files.length; ++i) {
-                if (files[i].endsWith(".class")) {
-                    String classFilePath 
-                        = files[i].substring(0, files[i].length() - 6);
-                    String className 
-                        = classFilePath.replace('/', '.').replace('\\', '.');
-                    allRootClasses.addElement(className);
-                }
-            }
-        }    
-                
-        
-        DirectoryScanner parentScanner = super.getDirectoryScanner(p);
-        DependScanner scanner = new DependScanner(parentScanner);
-        scanner.setBasedir(getDir(p));
-        scanner.setRootClasses(allRootClasses);
-        scanner.scan();
-        return scanner;
-    } 
-    
-    /** 
-     * Add a nested root class definition to this class file set
-     *
-     * @param root the configured class root.
-     */
-    public void addConfiguredRoot(ClassRoot root) {
-        rootClasses.addElement(root.getClassname());    
-    }
-
-    /**
-     * Clone this data type.
-     *
-     * @return a clone of the class file set
-     */
-    public Object clone() {
-        if (isReference()) {
-            return new ClassfileSet((ClassfileSet) getRef(getProject()));
-        } else {
-            return new ClassfileSet(this);
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/types/optional/depend/DependScanner.java b/src/main/org/apache/tools/ant/types/optional/depend/DependScanner.java
deleted file mode 100644
index 50e5cc3..0000000
--- a/src/main/org/apache/tools/ant/types/optional/depend/DependScanner.java
+++ /dev/null
@@ -1,254 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.types.optional.depend;
-
-import java.io.File;
-import java.util.Vector;
-import java.util.Enumeration;
-import java.util.Hashtable;
-import org.apache.tools.ant.util.depend.DependencyAnalyzer;
-import org.apache.tools.ant.DirectoryScanner;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.types.Path;
-
-
-/**
- * An interface used to describe the actions required by any type of 
- * directory scanner.
- *
- * @author Conor MacNeill
- * @author <a href="mailto:hengels@innovidata.com">Holger Engels</a>
- */
-public class DependScanner extends DirectoryScanner {
-    /**
-     * The name of the analyzer to use by default.
-     */
-    public static final String DEFAULT_ANALYZER_CLASS
-        = "org.apache.tools.ant.util.depend.bcel.FullAnalyzer";
-
-    /**
-     * The base directory for the scan
-     */
-    private File basedir;
-    
-    /**
-     * The root classes to drive the search for dependent classes
-     */
-    private Vector rootClasses;
-    
-    /**
-     * The names of the classes to include in the fileset
-     */
-    private Vector included;
-
-    /**
-     * The parent scanner which gives the basic set of files. Only files which 
-     * are in this set and which can be reached from a root class will end
-     * up being included in the result set
-     */
-    private DirectoryScanner parentScanner;
-    
-    /**
-     * Create a DependScanner, using the given scanner to provide the basic 
-     * set of files from which class files come.
-     *
-     * @param parentScanner the DirectoryScanner which returns the files from 
-     *        which class files must come.
-     */
-    public DependScanner(DirectoryScanner parentScanner) {
-        this.parentScanner = parentScanner;
-    }
-    
-    /**
-     * Sets the basedir for scanning. This is the directory that is scanned
-     * recursively.
-     *
-     * @param basedir the basedir for scanning
-     */
-    public void setBasedir(File basedir) {
-        this.basedir = basedir;
-    }
-
-    /**
-     * Gets the basedir that is used for scanning.
-     *
-     * @return the basedir that is used for scanning
-     */
-    public File getBasedir() { return basedir; }
-
-    /**
-     * Sets the root classes to be used to drive the scan.
-     *
-     * @param rootClasses the rootClasses to be used for this scan
-     */
-    public void setRootClasses(Vector rootClasses) {
-        this.rootClasses = rootClasses;
-    }
-
-    /**
-     * Get the names of the class files, baseClass depends on
-     *
-     * @return the names of the files
-     */
-    public String[] getIncludedFiles() {
-        int count = included.size();
-        String[] files = new String[count];
-        for (int i = 0; i < count; i++) {
-            files[i] = (String) included.elementAt(i); 
-        }
-        return files;
-    }
-
-    /**
-     * Scans the base directory for files that baseClass depends on
-     *
-     * @exception IllegalStateException when basedir was set incorrecly
-     */
-    public void scan() throws IllegalStateException {
-        included = new Vector();
-        String analyzerClassName = DEFAULT_ANALYZER_CLASS;
-        DependencyAnalyzer analyzer = null;
-        try {
-            Class analyzerClass = Class.forName(analyzerClassName);
-            analyzer = (DependencyAnalyzer) analyzerClass.newInstance();
-        } catch (Exception e) {
-            throw new BuildException("Unable to load dependency analyzer: " 
-                + analyzerClassName, e);
-        }
-        analyzer.addClassPath(new Path(null, basedir.getPath()));
-        
-        for (Enumeration e = rootClasses.elements(); e.hasMoreElements();) {
-            String rootClass = (String) e.nextElement();
-            analyzer.addRootClass(rootClass);
-        }
-
-        Enumeration e = analyzer.getClassDependencies();
-
-        String[] parentFiles = parentScanner.getIncludedFiles();
-        Hashtable parentSet = new Hashtable();
-        for (int i = 0; i < parentFiles.length; ++i) {
-            parentSet.put(parentFiles[i], parentFiles[i]);
-        }
-
-        while (e.hasMoreElements()) {
-            String classname = (String) e.nextElement();
-            String filename = classname.replace('.', File.separatorChar);
-            filename = filename + ".class";
-            File depFile = new File(basedir, filename);
-            if (depFile.exists() && parentSet.containsKey(filename)) {
-                // This is included
-                included.addElement(filename);
-            }
-        }
-    }
-
-    /**
-     * @see DirectoryScanner#addDefaultExcludes
-     */
-    public void addDefaultExcludes() {
-    }
-    
-    /**
-     * @see DirectoryScanner#getExcludedDirectories
-     */
-    public String[] getExcludedDirectories() { 
-        return null; 
-    }
-    
-    /**
-     * @see DirectoryScanner#getExcludedFiles
-     */
-    public String[] getExcludedFiles() { 
-        return null; 
-    }
-    
-    /**
-     * @see DirectoryScanner#getIncludedDirectories
-     */
-    public String[] getIncludedDirectories() { 
-        return new String[0]; 
-    }
-    
-    /**
-     * @see DirectoryScanner#getNotIncludedDirectories
-     */
-    public String[] getNotIncludedDirectories() { 
-        return null; 
-    }
-    
-    /**
-     * @see DirectoryScanner#getNotIncludedFiles
-     */
-    public String[] getNotIncludedFiles() { 
-        return null; 
-    }
-
-    /**
-     * @see DirectoryScanner#setExcludes
-     */
-    public void setExcludes(String[] excludes) {
-    }
-    
-    /**
-     * @see DirectoryScanner#setIncludes
-     */
-    public void setIncludes(String[] includes) {
-    }
-    
-    /**
-     * @see DirectoryScanner#setCaseSensitive
-     */
-    public void setCaseSensitive(boolean isCaseSensitive) {
-    }
-}
diff --git a/src/main/org/apache/tools/ant/types/selectors/AndSelector.java b/src/main/org/apache/tools/ant/types/selectors/AndSelector.java
deleted file mode 100644
index 5134557..0000000
--- a/src/main/org/apache/tools/ant/types/selectors/AndSelector.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.types.selectors;
-
-import java.io.File;
-import java.util.Enumeration;
-
-/**
- * This selector has a collection of other selectors, all of which have to
- * select a file in order for this selector to select it.
- *
- * @author <a href="mailto:bruce@callenish.com">Bruce Atherton</a>
- * @since 1.5
- */
-public class AndSelector extends BaseSelectorContainer {
-
-    /**
-     * Default constructor.
-     */
-    public AndSelector() {
-    }
-
-    public String toString() {
-        StringBuffer buf = new StringBuffer();
-        if (hasSelectors()) {
-            buf.append("{andselect: ");
-            buf.append(super.toString());
-            buf.append("}");
-        }
-        return buf.toString();
-    }
-
-    /**
-     * Returns true (the file is selected) only if all other selectors
-     * agree that the file should be selected.
-     *
-     * @param basedir the base directory the scan is being done from
-     * @param filename the name of the file to check
-     * @param file a java.io.File object for the filename that the selector
-     * can use
-     * @return whether the file should be selected or not
-     */
-    public boolean isSelected(File basedir, String filename, File file) {
-        validate();
-        Enumeration e = selectorElements();
-        boolean result;
-
-        while(e.hasMoreElements()) {
-            result = ((FileSelector)e.nextElement()).isSelected(basedir,
-                    filename,file);
-            if (!result) {
-                return false;
-            }
-        }
-        return true;
-    }
-
-}
-
diff --git a/src/main/org/apache/tools/ant/types/selectors/BaseExtendSelector.java b/src/main/org/apache/tools/ant/types/selectors/BaseExtendSelector.java
deleted file mode 100644
index 73095f8..0000000
--- a/src/main/org/apache/tools/ant/types/selectors/BaseExtendSelector.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.types.selectors;
-
-import java.io.File;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.types.DataType;
-import org.apache.tools.ant.types.Parameter;
-
-
-/**
- * Convenience base class for all selectors accessed through ExtendSelector.
- * It provides support for gathering the parameters together as well as for
- * assigning an error message and throwing a build exception if an error is
- * detected.
- *
- * @author <a href="mailto:bruce@callenish.com">Bruce Atherton</a>
- * @since 1.5
- */
-public abstract class BaseExtendSelector extends BaseSelector implements
-        ExtendFileSelector {
-
-    /** The passed in parameter array. */
-    protected Parameter[] parameters = null;
-
-    /**
-     * Default constructor.
-     */
-    public BaseExtendSelector() {
-    }
-
-    /**
-     * Set all the Parameters for this dynamic selector, collected by
-     * the ExtendSelector class.
-     *
-     * @param parameters the complete set of parameters for this selector
-     */
-    public void setParameters(Parameter[] parameters) {
-        this.parameters = parameters;
-    }
-
-    /**
-     * Allows access to the parameters gathered and set within the
-     * <extendselect> tag.
-     *
-     * @return the set of parameters defined for this selector
-     */
-    protected Parameter[] getParameters() {
-        return parameters;
-    }
-
-    /**
-     * Method that each selector will implement to create their
-     * selection behaviour. If there is a problem with the setup
-     * of a selector, it can throw a BuildException to indicate
-     * the problem.
-     *
-     * @param basedir A java.io.File object for the base directory
-     * @param filename The name of the file to check
-     * @param file A File object for this filename
-     * @return whether the file should be selected or not
-     */
-    public abstract boolean isSelected(File basedir, String filename,
-                                       File file)
-            throws BuildException;
-
-}
-
diff --git a/src/main/org/apache/tools/ant/types/selectors/BaseSelector.java b/src/main/org/apache/tools/ant/types/selectors/BaseSelector.java
deleted file mode 100644
index b1e0a0f..0000000
--- a/src/main/org/apache/tools/ant/types/selectors/BaseSelector.java
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.types.selectors;
-
-import java.io.File;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.BuildException;
-import  org.apache.tools.ant.types.DataType;
-
-/**
- * A convenience base class that you can subclass Selectors from. It
- * provides some helpful common behaviour. Note that there is no need
- * for Selectors to inherit from this class, it is only necessary that
- * they implement FileSelector.
- *
- * @author <a href="mailto:bruce@callenish.com">Bruce Atherton</a>
- * @since 1.5
- */
-public abstract class BaseSelector extends DataType implements FileSelector {
-
-    private String errmsg = null;
-
-
-    /**
-     * Do nothing constructor.
-     */
-    public BaseSelector() {
-    }
-
-    /**
-     * Allows all selectors to indicate a setup error. Note that only
-     * the first error message is recorded.
-     *
-     * @param msg The error message any BuildException should throw.
-     */
-    public void setError(String msg) {
-        if (errmsg == null) {
-            errmsg = msg;
-        }
-    }
-
-    /**
-     * Returns any error messages that have been set.
-     *
-     * @return the error condition
-     */
-    public String getError() {
-        return errmsg;
-    }
-
-
-    /**
-     * <p>Subclasses can override this method to provide checking of their
-     * state. So long as they call validate() from isSelected(), this will
-     * be called automatically (unless they override validate()).</p>
-     * <p>Implementations should check for incorrect settings and call
-     * setError() as necessary.</p>
-     */
-    public void verifySettings() {
-    }
-
-
-
-    /**
-     * Subclasses can use this to throw the requisite exception
-     * in isSelected() in the case of an error condition.
-     */
-    public void validate() {
-        verifySettings();
-        if (getError() != null) {
-            throw new BuildException(errmsg);
-        }
-    }
-
-    /**
-     * Method that each selector will implement to create their
-     * selection behaviour. If there is a problem with the setup
-     * of a selector, it can throw a BuildException to indicate
-     * the problem.
-     *
-     * @param basedir A java.io.File object for the base directory
-     * @param filename The name of the file to check
-     * @param file A File object for this filename
-     * @return whether the file should be selected or not
-     */
-    public abstract boolean isSelected(File basedir, String filename,
-            File file);
-
-}
-
-
diff --git a/src/main/org/apache/tools/ant/types/selectors/BaseSelectorContainer.java b/src/main/org/apache/tools/ant/types/selectors/BaseSelectorContainer.java
deleted file mode 100644
index ac3a97f..0000000
--- a/src/main/org/apache/tools/ant/types/selectors/BaseSelectorContainer.java
+++ /dev/null
@@ -1,312 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.types.selectors;
-
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.BuildException;
-import  org.apache.tools.ant.types.Reference;
-
-import java.io.File;
-import java.util.Enumeration;
-import java.util.Stack;
-import java.util.Vector;
-
-/**
- * This is the base class for selectors that can contain other selectors.
- *
- * @author <a href="mailto:bruce@callenish.com">Bruce Atherton</a>
- * @since 1.5
- */
-public abstract class BaseSelectorContainer extends BaseSelector
-        implements SelectorContainer {
-
-    private Vector selectorsList = new Vector();
-
-    /**
-     * Default constructor.
-     */
-    public BaseSelectorContainer() {
-    }
-
-    /**
-     * Indicates whether there are any selectors here.
-     */
-    public boolean hasSelectors() {
-        return !(selectorsList.isEmpty());
-    }
-
-    /**
-     * Gives the count of the number of selectors in this container
-     */
-    public int selectorCount() {
-        return selectorsList.size();
-    }
-
-    /**
-     * Returns the set of selectors as an array.
-     */
-    public FileSelector[] getSelectors(Project p) {
-        if (isReference()) {
-            return getRef(p).getSelectors(p);
-        } else {
-            FileSelector[] result = new FileSelector[selectorsList.size()];
-            selectorsList.copyInto(result);
-            return result;
-        }
-    }
-
-    /**
-     * Returns an enumerator for accessing the set of selectors.
-     */
-    public Enumeration selectorElements() {
-        return selectorsList.elements();
-    }
-
-    /**
-     * Performs the check for circular references and returns the
-     * referenced SelectorContainer.
-     */
-    private SelectorContainer getRef(Project p) {
-        if (!checked) {
-            Stack stk = new Stack();
-            stk.push(this);
-            dieOnCircularReference(stk, p);
-        }
-
-        Object o = ref.getReferencedObject(p);
-        if (!(o instanceof SelectorContainer)) {
-            throw new BuildException(ref.getRefId() +
-                " doesn\'t denote a selector type");
-        } else {
-            return (SelectorContainer) o;
-        }
-    }
-
-    /**
-     * Convert the Selectors within this container to a string. This will
-     * just be a helper class for the subclasses that put their own name
-     * around the contents listed here.
-     *
-     * @return comma separated list of Selectors contained in this one
-     */
-    public String toString() {
-        StringBuffer buf = new StringBuffer();
-        Enumeration e = selectorElements();
-        if (e.hasMoreElements()) {
-            while(e.hasMoreElements()) {
-                buf.append(e.nextElement().toString());
-                if (e.hasMoreElements()) {
-                    buf.append(", ");
-                }
-            }
-        }
-
-        return buf.toString();
-    }
-
-    /**
-     * Add a new selector into this container.
-     *
-     * @param selector the new selector to add
-     * @return the selector that was added
-     */
-    public void appendSelector(FileSelector selector) {
-        if (isReference()) {
-            throw noChildrenAllowed();
-        }
-        selectorsList.addElement(selector);
-    }
-
-    /**
-     * <p>This implementation validates the container by calling
-     * verifySettings() and then validates each contained selector
-     * provided that the selector implements the validate interface.
-     * </p>
-     * <p>Ordinarily, this will validate all the elements of a selector
-     * container even if the isSelected() method of some elements is
-     * never called. This has two effects:</p>
-     * <ul>
-     * <li>Validation will often occur twice.
-     * <li>Since it is not required that selectors derive from
-     * BaseSelector, there could be selectors in the container whose
-     * error conditions are not detected if their isSelected() call
-     * is never made.
-     * </ul>
-     */
-    public void validate() {
-        verifySettings();
-        String errmsg = getError();
-        if (errmsg != null) {
-            throw new BuildException(errmsg);
-        }
-        Enumeration e = selectorElements();
-        while(e.hasMoreElements()) {
-            Object o = e.nextElement();
-            if (o instanceof BaseSelector) {
-                ((BaseSelector)o).validate();
-            }
-        }
-    }
-
-
-    /**
-     * Method that each selector will implement to create their selection
-     * behaviour. This is what makes SelectorContainer abstract.
-     *
-     * @param basedir the base directory the scan is being done from
-     * @param filename the name of the file to check
-     * @param file a java.io.File object for the filename that the selector
-     * can use
-     * @return whether the file should be selected or not
-     */
-    public abstract boolean isSelected(File basedir, String filename,
-                                       File file);
-
-
-    /* Methods below all implement the static selectors */
-
-    /**
-     * add an "And" selector entry on the selector list
-     */
-    public void addAnd(AndSelector selector) {
-        appendSelector(selector);
-    }
-
-    /**
-     * add an "Or" selector entry on the selector list
-     */
-    public void addOr(OrSelector selector) {
-        appendSelector(selector);
-    }
-
-    /**
-     * add a "Not" selector entry on the selector list
-     */
-    public void addNot(NotSelector selector) {
-        appendSelector(selector);
-    }
-
-    /**
-     * add a "None" selector entry on the selector list
-     */
-    public void addNone(NoneSelector selector) {
-        appendSelector(selector);
-    }
-
-    /**
-     * add a majority selector entry on the selector list
-     */
-    public void addMajority(MajoritySelector selector) {
-        appendSelector(selector);
-    }
-
-    /**
-     * add a selector date entry on the selector list
-     */
-    public void addDateselect(DateSelector selector) {
-        appendSelector(selector);
-    }
-
-    /**
-     * add a selector size entry on the selector list
-     */
-    public void addSizeselect(SizeSelector selector) {
-        appendSelector(selector);
-    }
-
-    /**
-     * add a selector filename entry on the selector list
-     */
-    public void addFilenameselect(FilenameSelector selector) {
-        appendSelector(selector);
-    }
-
-    /**
-     * add an extended selector entry on the selector list
-     */
-    public void addExtendSelect(ExtendSelector selector) {
-        appendSelector(selector);
-    }
-
-    /**
-     * add a contains selector entry on the selector list
-     */
-    public void addContainsSelect(ContainsSelector selector) {
-        appendSelector(selector);
-    }
-
-    /**
-     * add a present selector entry on the selector list
-     */
-    public void addPresentSelect(PresentSelector selector) {
-        appendSelector(selector);
-    }
-
-    /**
-     * add a depth selector entry on the selector list
-     */
-    public void addDepthSelect(DepthSelector selector) {
-        appendSelector(selector);
-    }
-
-    /**
-     * add a depends selector entry on the selector list
-     */
-    public void addDependSelect(DependSelector selector) {
-        appendSelector(selector);
-    }
-
-}
-
diff --git a/src/main/org/apache/tools/ant/types/selectors/ContainsSelector.java b/src/main/org/apache/tools/ant/types/selectors/ContainsSelector.java
deleted file mode 100644
index e7b505b..0000000
--- a/src/main/org/apache/tools/ant/types/selectors/ContainsSelector.java
+++ /dev/null
@@ -1,197 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.types.selectors;
-
-import java.io.File;
-import java.io.BufferedReader;
-import java.io.InputStreamReader;
-import java.io.FileInputStream;
-import java.io.IOException;
-
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.types.Parameter;
-import org.apache.tools.ant.BuildException;
-
-/**
- * Selector that filters files based on whether they contain a
- * particular string.
- *
- * @author <a href="mailto:bruce@callenish.com">Bruce Atherton</a>
- * @since 1.5
- */
-public class ContainsSelector extends BaseExtendSelector {
-
-    private String contains = null;
-    private boolean casesensitive = true;
-    public final static String CONTAINS_KEY = "contains";
-    public final static String CASE_KEY = "casesensitive";
-
-
-    public ContainsSelector() {
-    }
-
-    public String toString() {
-        StringBuffer buf = new StringBuffer("{containsselector contains: ");
-        buf.append(contains);
-        buf.append(" casesensitive: ");
-        if (casesensitive) {
-            buf.append("true");
-        } else {
-            buf.append("false");
-        }
-        buf.append("}");
-        return buf.toString();
-    }
-
-    /**
-     * The string to search for within a file.
-     *
-     * @param contains the string that a file must contain to be selected.
-     */
-    public void setContains(String contains) {
-        this.contains = contains;
-    }
-
-    /**
-     * Whether to ignore case in the string being searched.
-     *
-     * @param casesensitive whether to pay attention to case sensitivity
-     */
-    public void setCasesensitive(boolean casesensitive) {
-        this.casesensitive = casesensitive;
-    }
-
-    /**
-     * When using this as a dynamic selector, this method will be called.
-     * It translates each parameter into the appropriate setXXX() call.
-     *
-     * @param parameters the complete set of parameters for this selector
-     */
-    public void setParameters(Parameter[] parameters) {
-        super.setParameters(parameters);
-        if (parameters != null) {
-            for (int i = 0; i < parameters.length; i++) {
-                String paramname = parameters[i].getName();
-                if (CONTAINS_KEY.equalsIgnoreCase(paramname)) {
-                    setContains(parameters[i].getValue());
-                }
-                else if (CASE_KEY.equalsIgnoreCase(paramname)) {
-                    setCasesensitive(Project.toBoolean(
-                        parameters[i].getValue()));
-                }
-                else {
-                    setError("Invalid parameter " + paramname);
-                }
-            }
-        }
-    }
-
-    /**
-     * Checks to make sure all settings are kosher. In this case, it
-     * means that the pattern attribute has been set.
-     *
-     */
-    public void verifySettings() {
-        if (contains == null) {
-            setError("The contains attribute is required");
-        }
-    }
-
-    /**
-     * The heart of the matter. This is where the selector gets to decide
-     * on the inclusion of a file in a particular fileset.
-     *
-     * @param basedir the base directory the scan is being done from
-     * @param filename is the name of the file to check
-     * @param file is a java.io.File object the selector can use
-     * @return whether the file should be selected or not
-     */
-    public boolean isSelected(File basedir, String filename, File file) {
-
-        // throw BuildException on error
-        validate();
-
-        if (file.isDirectory()) {
-            return true;
-        }
-
-        BufferedReader in = null;
-        try {
-            in = new BufferedReader(new InputStreamReader(
-                    new FileInputStream(file)));
-            String teststr = in.readLine();
-            while (teststr != null) {
-                if (teststr.indexOf(contains) > -1) {
-                    return true;
-                }
-                teststr = in.readLine();
-            }
-            return false;
-        }
-        catch (IOException ioe) {
-            throw new BuildException("Could not read file " + filename);
-        }
-        finally {
-            try {
-                in.close();
-            }
-            catch (Exception e) {
-                throw new BuildException("Could not close file " + filename);
-            }
-        }
-    }
-
-}
-
diff --git a/src/main/org/apache/tools/ant/types/selectors/DateSelector.java b/src/main/org/apache/tools/ant/types/selectors/DateSelector.java
deleted file mode 100644
index d72e458..0000000
--- a/src/main/org/apache/tools/ant/types/selectors/DateSelector.java
+++ /dev/null
@@ -1,250 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.types.selectors;
-
-import java.io.File;
-import java.text.DateFormat;
-import java.text.ParseException;
-import java.util.Locale;
-
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.types.EnumeratedAttribute;
-import org.apache.tools.ant.types.Parameter;
-
-/**
- * Selector that chooses files based on their last modified date.
- *
- * @author <a href="mailto:bruce@callenish.com">Bruce Atherton</a>
- * @since 1.5
- */
-public class DateSelector extends BaseExtendSelector {
-
-    private long millis = -1;
-    private String dateTime = null;
-    private boolean includeDirs = false;
-    private int cmp = 0;
-    public final static String MILLIS_KEY = "millis";
-    public final static String DATETIME_KEY = "datetime";
-    public final static String CHECKDIRS_KEY = "checkdirs";
-    public final static String WHEN_KEY = "when";
-
-    public DateSelector() {
-    }
-
-    public String toString() {
-        StringBuffer buf = new StringBuffer("{dateselector date: ");
-        buf.append(dateTime);
-        buf.append("compare: ");
-        if (cmp == 0) {
-            buf.append("before");
-        }
-        else if (cmp == 1) {
-            buf.append("after");
-        } else {
-            buf.append("equal");
-        }
-        buf.append("}");
-        return buf.toString();
-    }
-
-    /**
-     * For users that prefer to express time in milliseconds since 1970
-     *
-     * @param millis the time to compare file's last modified date to,
-     *        expressed in milliseconds
-     */
-    public void setMillis(long millis) {
-        this.millis = millis;
-    }
-
-    /**
-     * Sets the date. The user must supply it in MM/DD/YYYY HH:MM AM_PM
-     * format
-     *
-     * @param dateTime a string in MM/DD/YYYY HH:MM AM_PM format
-     */
-    public void setDatetime(String dateTime) {
-        this.dateTime = dateTime;
-        if (dateTime != null) {
-            DateFormat df = DateFormat.getDateTimeInstance(
-                                                    DateFormat.SHORT,
-                                                    DateFormat.SHORT,
-                                                    Locale.US);
-            try {
-                setMillis(df.parse(dateTime).getTime());
-                if (millis < 0) {
-                    setError("Date of " + dateTime
-                        + " results in negative milliseconds value relative"
-                        + " to epoch (January 1, 1970, 00:00:00 GMT).");
-                }
-            } catch (ParseException pe) {
-                    setError("Date of " + dateTime
-                        + " Cannot be parsed correctly. It should be in"
-                        + " MM/DD/YYYY HH:MM AM_PM format.");
-            }
-        }
-    }
-
-    /**
-     * Should we be checking dates on directories?
-     *
-     * @param includeDirs whether to check the timestamp on directories
-     */
-    public void setCheckdirs(boolean includeDirs) {
-        this.includeDirs = includeDirs;
-    }
-
-    /**
-     * Sets the type of comparison to be done on the file's last modified
-     * date.
-     *
-     * @param cmp The comparison to perform, an EnumeratedAttribute
-     */
-    public void setWhen(TimeComparisons cmp) {
-        this.cmp = cmp.getIndex();
-    }
-
-    /**
-     * When using this as a dynamic selector, this method will be called.
-     * It translates each parameter into the appropriate setXXX() call.
-     *
-     * @param parameters the complete set of parameters for this selector
-     */
-    public void setParameters(Parameter[] parameters) {
-        super.setParameters(parameters);
-        if (parameters != null) {
-            for (int i = 0; i < parameters.length; i++) {
-                String paramname = parameters[i].getName();
-                if (MILLIS_KEY.equalsIgnoreCase(paramname)) {
-                    try {
-                        setMillis(new Long(parameters[i].getValue()
-                                ).longValue());
-                    } catch (NumberFormatException nfe) {
-                        setError("Invalid millisecond setting " +
-                            parameters[i].getValue());
-                    }
-                }
-                else if (DATETIME_KEY.equalsIgnoreCase(paramname)) {
-                    setDatetime(parameters[i].getValue());
-                }
-                else if (CHECKDIRS_KEY.equalsIgnoreCase(paramname)) {
-                    setCheckdirs(Project.toBoolean(parameters[i].getValue()));
-                }
-                else if (WHEN_KEY.equalsIgnoreCase(paramname)) {
-                    TimeComparisons cmp = new TimeComparisons();
-                    cmp.setValue(parameters[i].getValue());
-                    setWhen(cmp);
-                }
-                else {
-                    setError("Invalid parameter " + paramname);
-                }
-            }
-        }
-    }
-
-    /**
-     * This is a consistency check to ensure the selector's required
-     * values have been set.
-     */
-    public void verifySettings() {
-        if (dateTime == null && millis < 0) {
-            setError("You must provide a datetime or the number of "
-                + "milliseconds.");
-        }
-        else if (millis < 0) {
-            setError("Date of " + dateTime
-                + " results in negative milliseconds"
-                + " value relative to epoch (January 1, 1970, 00:00:00 GMT).");
-        }
-    }
-
-    /**
-     * The heart of the matter. This is where the selector gets to decide
-     * on the inclusion of a file in a particular fileset.
-     *
-     * @param basedir the base directory the scan is being done from
-     * @param filename is the name of the file to check
-     * @param file is a java.io.File object the selector can use
-     * @return whether the file should be selected or not
-     */
-    public boolean isSelected(File basedir, String filename, File file) {
-        validate();
-        if (file.isDirectory() && (includeDirs == false)) {
-            return true;
-        }
-        if (cmp == 0) {
-            return (file.lastModified() < millis);
-        }
-        else if (cmp == 1) {
-            return (file.lastModified() > millis);
-        }
-        else {
-            return (file.lastModified() == millis);
-        }
-    }
-
-    /**
-     * Enumerated attribute with the values for time comparison.
-     * <p>
-     */
-    public static class TimeComparisons extends EnumeratedAttribute {
-        public String[] getValues() {
-            return new String[] {"before", "after", "equal"};
-        }
-    }
-
-}
-
-
diff --git a/src/main/org/apache/tools/ant/types/selectors/DependSelector.java b/src/main/org/apache/tools/ant/types/selectors/DependSelector.java
deleted file mode 100644
index ceefdd7..0000000
--- a/src/main/org/apache/tools/ant/types/selectors/DependSelector.java
+++ /dev/null
@@ -1,186 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.types.selectors;
-
-import java.io.File;
-
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.types.Mapper;
-import org.apache.tools.ant.util.IdentityMapper;
-import org.apache.tools.ant.util.FileNameMapper;
-import org.apache.tools.ant.BuildException;
-
-/**
- * Selector that filters files based on whether they are newer than
- * a matching file in another directory tree. It can contain a mapper
- * element, so isn't available as an ExtendSelector (since those
- * parameters can't hold other elements).
- *
- * @author <a href="mailto:bruce@callenish.com">Bruce Atherton</a>
- * @since 1.5
- */
-public class DependSelector extends BaseSelector {
-
-    private String targetdir = null;
-    private File targetbase = null;
-    private Mapper mapperElement = null;
-    private FileNameMapper map = null;
-    private int granularity = 0;
-
-    public DependSelector() {
-    }
-
-    public String toString() {
-        StringBuffer buf = new StringBuffer("{dependselector targetdir: ");
-        buf.append(targetdir);
-        buf.append(" granularity: ");
-        buf.append(granularity);
-        if (map != null) {
-            buf.append(" mapper: ");
-            buf.append(map.toString());
-        }
-        else if (mapperElement != null) {
-            buf.append(" mapper: ");
-            buf.append(mapperElement.toString());
-        }
-        buf.append("}");
-        return buf.toString();
-    }
-
-    /**
-     * The name of the file or directory which is checked for out-of-date
-     * files.
-     *
-     * @param targetdir the directory to scan looking for files.
-     */
-    public void setTargetdir(String targetdir) {
-        this.targetdir = SelectorUtils.fixPath(targetdir);
-        targetbase = new File(this.targetdir);
-    }
-
-    /**
-     * Sets the number of milliseconds leeway we will give before we consider
-     * a file out of date.
-     */
-    public void setGranularity(int granularity) {
-        this.granularity = granularity;
-    }
-
-    /**
-     * Defines the FileNameMapper to use (nested mapper element).
-     */
-    public Mapper createMapper() throws BuildException {
-        if (mapperElement != null) {
-            throw new BuildException("Cannot define more than one mapper");
-        }
-        mapperElement = new Mapper(project);
-        return mapperElement;
-    }
-
-
-    /**
-     * Checks to make sure all settings are kosher. In this case, it
-     * means that the dest attribute has been set and we have a mapper.
-     */
-    public void verifySettings() {
-        if (targetdir == null) {
-            setError("The targetdir attribute is required.");
-        }
-        if (mapperElement == null) {
-            map = new IdentityMapper();
-        }
-        else {
-            map = mapperElement.getImplementation();
-        }
-        if (map == null) {
-            setError("Could not set <mapper> element.");
-        }
-    }
-
-    /**
-     * The heart of the matter. This is where the selector gets to decide
-     * on the inclusion of a file in a particular fileset.
-     *
-     * @param basedir the base directory the scan is being done from
-     * @param filename is the name of the file to check
-     * @param file is a java.io.File object the selector can use
-     * @return whether the file should be selected or not
-     */
-    public boolean isSelected(File basedir, String filename, File file) {
-
-        // throw BuildException on error
-        validate();
-
-        // Get File object for the target directory
-        File target = targetbase;
-        if (target == null) {
-            target = new File(basedir,targetdir);
-        }
-
-        // Determine file whose out-of-dateness is to be checked
-        String[] destfiles = map.mapFileName(filename);
-        // Sanity check
-        if (destfiles.length != 1 || destfiles[0] == null) {
-            throw new BuildException("Invalid destination file results for "
-                + targetdir + " with filename " + filename);
-        }
-        String destname = destfiles[0];
-        File destfile = new File(target,destname);
-
-        return SelectorUtils.isOutOfDate(file, destfile, granularity);
-    }
-
-}
-
diff --git a/src/main/org/apache/tools/ant/types/selectors/DepthSelector.java b/src/main/org/apache/tools/ant/types/selectors/DepthSelector.java
deleted file mode 100644
index 1b20022..0000000
--- a/src/main/org/apache/tools/ant/types/selectors/DepthSelector.java
+++ /dev/null
@@ -1,209 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.types.selectors;
-
-import java.io.File;
-import java.util.StringTokenizer;
-
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.types.Parameter;
-import org.apache.tools.ant.BuildException;
-
-/**
- * Selector that filters files based on the how deep in the directory
- * tree they are.
- *
- * @author <a href="mailto:bruce@callenish.com">Bruce Atherton</a>
- * @since 1.5
- */
-public class DepthSelector extends BaseExtendSelector {
-
-    public int min = -1;
-    public int max = -1;
-    public final static String MIN_KEY = "min";
-    public final static String MAX_KEY = "max";
-
-    public DepthSelector() {
-    }
-
-    public String toString() {
-        StringBuffer buf = new StringBuffer("{depthselector min: ");
-        buf.append(min);
-        buf.append(" max: ");
-        buf.append(max);
-        buf.append("}");
-        return buf.toString();
-    }
-
-    /**
-     * The minimum depth below the basedir before a file is selected.
-     *
-     * @param min minimum directory levels below basedir to go
-     */
-    public void setMin(int min) {
-        this.min = min;
-    }
-
-    /**
-     * The minimum depth below the basedir before a file is selected.
-     *
-     * @param min maximum directory levels below basedir to go
-     */
-    public void setMax(int max) {
-        this.max = max;
-    }
-
-    /**
-     * When using this as a dynamic selector, this method will be called.
-     * It translates each parameter into the appropriate setXXX() call.
-     *
-     * @param parameters the complete set of parameters for this selector
-     */
-    public void setParameters(Parameter[] parameters) {
-        super.setParameters(parameters);
-        if (parameters != null) {
-            for (int i = 0; i < parameters.length; i++) {
-                String paramname = parameters[i].getName();
-                if (MIN_KEY.equalsIgnoreCase(paramname)) {
-                    try {
-                        setMin(Integer.parseInt(parameters[i].getValue()));
-                    }
-                    catch (NumberFormatException nfe1) {
-                        setError("Invalid minimum value "
-                            + parameters[i].getValue());
-                    }
-                }
-                else if (MAX_KEY.equalsIgnoreCase(paramname)) {
-                    try {
-                        setMax(Integer.parseInt(parameters[i].getValue()));
-                    }
-                    catch (NumberFormatException nfe1) {
-                        setError("Invalid maximum value "
-                            + parameters[i].getValue());
-                    }
-                }
-                else {
-                    setError("Invalid parameter " + paramname);
-                }
-            }
-        }
-    }
-
-    /**
-     * Checks to make sure all settings are kosher. In this case, it
-     * means that the max depth is not lower than the min depth.
-     */
-    public void verifySettings() {
-        if (min < 0 && max < 0) {
-            setError("You must set at least one of the min or the " +
-                    "max levels.");
-        }
-        if (max < min) {
-            setError("The maximum depth is lower than the minimum.");
-        }
-    }
-
-    /**
-     * The heart of the matter. This is where the selector gets to decide
-     * on the inclusion of a file in a particular fileset. Most of the work
-     * for this selector is offloaded into SelectorUtils, a static class
-     * that provides the same services for both FilenameSelector and
-     * DirectoryScanner.
-     *
-     * @param basedir the base directory the scan is being done from
-     * @param filename is the name of the file to check
-     * @param file is a java.io.File object the selector can use
-     * @return whether the file should be selected or not
-     */
-    public boolean isSelected(File basedir, String filename, File file) {
-
-        // throw BuildException on error
-        validate();
-
-        int depth = -1;
-        // If you felt daring, you could cache the basedir absolute path
-        String abs_base = basedir.getAbsolutePath();
-        String abs_file = file.getAbsolutePath();
-        StringTokenizer tok_base = new StringTokenizer(abs_base, File.separator);
-        StringTokenizer tok_file = new StringTokenizer(abs_file, File.separator);
-        while (tok_file.hasMoreTokens()) {
-            String filetoken = tok_file.nextToken();
-            if (tok_base.hasMoreTokens()) {
-                String basetoken = tok_base.nextToken();
-                // Sanity check. Ditch it if you want faster performance
-                if (!basetoken.equals(filetoken)) {
-                    throw new BuildException("File " + filename +
-                        " does not appear within " + abs_base + "directory");
-                }
-            }
-            else {
-                depth += 1;
-                if (max > -1 && depth > max) {
-                    return false;
-                }
-            }
-        }
-        if (tok_base.hasMoreTokens()) {
-            throw new BuildException("File " + filename +
-                " is outside of " + abs_base + "directory tree");
-        }
-        if (min > -1 && depth < min) {
-            return false;
-        }
-        return true;
-    }
-
-}
-
diff --git a/src/main/org/apache/tools/ant/types/selectors/ExtendFileSelector.java b/src/main/org/apache/tools/ant/types/selectors/ExtendFileSelector.java
deleted file mode 100644
index 25d968c..0000000
--- a/src/main/org/apache/tools/ant/types/selectors/ExtendFileSelector.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.types.selectors;
-
-import java.io.File;
-
-import org.apache.tools.ant.types.Parameterizable;
-
-/**
- * This is the interface to be used by all dynamic selectors, those that are
- * called through the <extendselect> tag. It is the amalgamation of two
- * interfaces, the FileSelector and the Paramterizable interface. Note that
- * you will almost certainly want the default behaviour for handling
- * Parameters, so you probably want to use the BaseExtendSelector class
- * as the base class for your dynamic selector rather than implementing
- * this interface from scratch.
- *
- * @author <a href="mailto:bruce@callenish.com">Bruce Atherton</a>
- * @since 1.5
- */
-public interface ExtendFileSelector extends FileSelector, Parameterizable {
-
-  // No further methods necessary. This is just an amalgamation of two other
-  // interfaces.
-}
-
diff --git a/src/main/org/apache/tools/ant/types/selectors/ExtendSelector.java b/src/main/org/apache/tools/ant/types/selectors/ExtendSelector.java
deleted file mode 100644
index 9925fe9..0000000
--- a/src/main/org/apache/tools/ant/types/selectors/ExtendSelector.java
+++ /dev/null
@@ -1,213 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.types.selectors;
-
-import java.io.File;
-import java.util.Vector;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.types.DataType;
-import org.apache.tools.ant.types.Path;
-import org.apache.tools.ant.types.Parameter;
-import org.apache.tools.ant.types.Reference;
-
-/**
- * Selector that selects files by forwarding the request on to other classes.
- *
- * @author <a href="mailto:bruce@callenish.com">Bruce Atherton</a>
- * @since 1.5
- */
-public class ExtendSelector extends BaseSelector {
-
-    private String classname = null;
-    private ExtendFileSelector dynselector = null;
-    private Vector paramVec = new Vector();
-    private Path classpath = null;
-
-    /**
-     * Default constructor.
-     */
-    public ExtendSelector() {
-    }
-
-    /**
-     * Sets the classname of the dynamic selector.
-     *
-     * @param classname is the class which implements this selector
-     */
-    public void setClassname(String classname) {
-        this.classname = classname;
-    }
-
-    /**
-     * Instantiates the identified dynamic selector class.
-     */
-    public void selectorCreate() {
-        if (classname != null && classname.length() > 0) {
-            try {
-                dynselector = (ExtendFileSelector)
-                        Class.forName(classname).newInstance();
-            }
-            catch (ClassNotFoundException cnfexcept) {
-                setError("Selector " + classname +
-                        " not initialized, no such class");
-            }
-            catch (InstantiationException iexcept) {
-                setError("Selector " + classname +
-                        " not initialized, could not create class");
-            }
-            catch (IllegalAccessException iaexcept) {
-                setError("Selector " + classname +
-                        " not initialized, class not accessible");
-            }
-        } else {
-            setError("There is no classname specified");
-        }
-    }
-
-    /**
-     * Create new parameters to pass to dynamic selector.
-     *
-     * @param p The new Parameter object
-     */
-    public void addParam(Parameter p) {
-        paramVec.addElement(p);
-    }
-
-
-    /**
-     * Set the classpath to load the classname specified using an attribute.
-     */
-    public final void setClasspath(Path classpath) {
-        if (isReference()) {
-            throw tooManyAttributes();
-        }
-        if (this.classpath == null) {
-            this.classpath = classpath;
-        } else {
-            this.classpath.append(classpath);
-        }
-    }
-
-    /**
-     * Specify the classpath to use to load the Selector (nested element).
-     */
-    public final Path createClasspath() {
-        if (isReference()) {
-            throw noChildrenAllowed();
-        }
-        if (this.classpath == null) {
-            this.classpath = new Path(getProject());
-        }
-        return this.classpath.createPath();
-    }
-
-    /**
-     * Get the classpath
-     */
-    public final Path getClasspath() {
-        return classpath;
-    }
-
-    /**
-     * Set the classpath to use for loading a dynamic selector by using
-     * a reference.
-     */
-    public void setClasspathref(Reference r) {
-        if (isReference()) {
-            throw tooManyAttributes();
-        }
-        createClasspath().setRefid(r);
-    }
-
-    /**
-     * These are errors specific to ExtendSelector only. If there are
-     * errors in the dynamic selector, it should throw a BuildException
-     * when isSelected() is called.
-     */
-    public void verifySettings() {
-        if (classname == null || classname.length() < 1) {
-            setError("The classname attribute is required");
-        }
-        else if (dynselector == null) {
-            setError("Internal Error: The dynamic selector is not set");
-        }
-    }
-
-
-    /**
-     * Allows the dynamic selector to choose whether to select a file. This
-     * is also where the Parameters are passed to the dynamic selector,
-     * since we know we must have them all by now. And since we must know
-     * both classpath and classname, creating the class is deferred to here
-     * as well.
-     */
-    public boolean isSelected(File basedir, String filename, File file)
-            throws BuildException {
-        if (dynselector == null) {
-            selectorCreate();
-        }
-        validate();
-        if (paramVec.size() > 0) {
-            Parameter[] paramArray = new Parameter[paramVec.size()];
-            paramVec.copyInto(paramArray);
-            // We know that dynselector must be non-null if no error message
-            dynselector.setParameters(paramArray);
-        }
-        return dynselector.isSelected(basedir,filename,file);
-    }
-
-}
-
diff --git a/src/main/org/apache/tools/ant/types/selectors/FileSelector.java b/src/main/org/apache/tools/ant/types/selectors/FileSelector.java
deleted file mode 100644
index f877ff7..0000000
--- a/src/main/org/apache/tools/ant/types/selectors/FileSelector.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.types.selectors;
-
-import java.io.File;
-
-import org.apache.tools.ant.BuildException;
-
-/**
- * This is the interface to be used by all selectors.
- *
- * @author <a href="mailto:bruce@callenish.com">Bruce Atherton</a>
- * @since 1.5
- */
-public interface FileSelector {
-
-    /**
-     * Method that each selector will implement to create their
-     * selection behaviour. If there is a problem with the setup
-     * of a selector, it can throw a BuildException to indicate
-     * the problem.
-     *
-     * @param basedir A java.io.File object for the base directory
-     * @param filename The name of the file to check
-     * @param file A File object for this filename
-     * @return whether the file should be selected or not
-     * @exception BuildException if the selector was not configured correctly
-     */
-    public boolean isSelected(File basedir, String filename, File file)
-            throws BuildException;
-
-}
-
diff --git a/src/main/org/apache/tools/ant/types/selectors/FilenameSelector.java b/src/main/org/apache/tools/ant/types/selectors/FilenameSelector.java
deleted file mode 100644
index 1706790..0000000
--- a/src/main/org/apache/tools/ant/types/selectors/FilenameSelector.java
+++ /dev/null
@@ -1,195 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.types.selectors;
-
-import java.io.File;
-
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.types.Parameter;
-
-/**
- * Selector that filters files based on the filename.
- *
- * @author <a href="mailto:bruce@callenish.com">Bruce Atherton</a>
- * @since 1.5
- */
-public class FilenameSelector extends BaseExtendSelector {
-
-    private String pattern = null;
-    private boolean casesensitive = true;
-    private boolean negated = false;
-    public final static String NAME_KEY = "name";
-    public final static String CASE_KEY = "casesensitive";
-    public final static String NEGATE_KEY = "negate";
-
-    public FilenameSelector() {
-    }
-
-    public String toString() {
-        StringBuffer buf = new StringBuffer("{filenameselector name: ");
-        buf.append(pattern);
-        buf.append(" negate: ");
-        if (negated) {
-            buf.append("true");
-        } else {
-            buf.append("false");
-        }
-        buf.append(" casesensitive: ");
-        if (casesensitive) {
-            buf.append("true");
-        } else {
-            buf.append("false");
-        }
-        buf.append("}");
-        return buf.toString();
-    }
-
-    /**
-     * The name of the file, or the pattern for the name, that
-     * should be used for selection.
-     *
-     * @param pattern the file pattern that any filename must match
-     *                against in order to be selected.
-     */
-    public void setName(String pattern) {
-        pattern = pattern.replace('/',File.separatorChar).replace('\\',
-                File.separatorChar);
-        if (pattern.endsWith(File.separator)) {
-            pattern += "**";
-        }
-        this.pattern = pattern;
-    }
-
-    /**
-     * Whether to ignore case when checking filenames.
-     *
-     * @param casesensitive whether to pay attention to case sensitivity
-     */
-    public void setCasesensitive(boolean casesensitive) {
-        this.casesensitive = casesensitive;
-    }
-
-    /**
-     * You can optionally reverse the selection of this selector,
-     * thereby emulating an <exclude> tag, by setting the attribute
-     * negate to true. This is identical to surrounding the selector
-     * with <not></not>.
-     *
-     * @param negated whether to negate this selection
-     */
-    public void setNegate(boolean negated) {
-        this.negated = negated;
-    }
-
-    /**
-     * When using this as a dynamic selector, this method will be called.
-     * It translates each parameter into the appropriate setXXX() call.
-     *
-     * @param parameters the complete set of parameters for this selector
-     */
-    public void setParameters(Parameter[] parameters) {
-        super.setParameters(parameters);
-        if (parameters != null) {
-            for (int i = 0; i < parameters.length; i++) {
-                String paramname = parameters[i].getName();
-                if (NAME_KEY.equalsIgnoreCase(paramname)) {
-                    setName(parameters[i].getValue());
-                }
-                else if (CASE_KEY.equalsIgnoreCase(paramname)) {
-                    setCasesensitive(Project.toBoolean(
-                        parameters[i].getValue()));
-                }
-                else if (NEGATE_KEY.equalsIgnoreCase(paramname)) {
-                    setNegate(Project.toBoolean(parameters[i].getValue()));
-                }
-                else {
-                    setError("Invalid parameter " + paramname);
-                }
-            }
-        }
-    }
-
-    /**
-     * Checks to make sure all settings are kosher. In this case, it
-     * means that the name attribute has been set.
-     *
-     */
-    public void verifySettings() {
-        if (pattern == null) {
-            setError("The name attribute is required");
-        }
-    }
-
-    /**
-     * The heart of the matter. This is where the selector gets to decide
-     * on the inclusion of a file in a particular fileset. Most of the work
-     * for this selector is offloaded into SelectorUtils, a static class
-     * that provides the same services for both FilenameSelector and
-     * DirectoryScanner.
-     *
-     * @param basedir the base directory the scan is being done from
-     * @param filename is the name of the file to check
-     * @param file is a java.io.File object the selector can use
-     * @return whether the file should be selected or not
-     */
-    public boolean isSelected(File basedir, String filename, File file) {
-        validate();
-
-        return SelectorUtils.matchPath(pattern,filename,
-                casesensitive);
-    }
-
-}
-
diff --git a/src/main/org/apache/tools/ant/types/selectors/MajoritySelector.java b/src/main/org/apache/tools/ant/types/selectors/MajoritySelector.java
deleted file mode 100644
index 1d43644..0000000
--- a/src/main/org/apache/tools/ant/types/selectors/MajoritySelector.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.types.selectors;
-
-import java.io.File;
-import java.util.Enumeration;
-
-/**
- * This selector is here just to shake up your thinking a bit. Don't get
- * too caught up in boolean, there are other ways you can evaluate a
- * collection of selectors. This one takes a vote of the selectors it
- * contains, and majority wins. You could also have an "all-but-one"
- * selector, a "weighted-average" selector, and so on. These are left
- * as exercises for the reader (as are the usecases where this would
- * be necessary).
- *
- * @author <a href="mailto:bruce@callenish.com">Bruce Atherton</a>
- * @since 1.5
- */
-public class MajoritySelector extends BaseSelectorContainer {
-
-    private boolean allowtie = true;
-
-    /**
-     * Default constructor.
-     */
-    public MajoritySelector() {
-    }
-
-    public String toString() {
-        StringBuffer buf = new StringBuffer();
-        if (hasSelectors()) {
-            buf.append("{majorityselect: ");
-            buf.append(super.toString());
-            buf.append("}");
-        }
-        return buf.toString();
-    }
-
-    public void setAllowtie(boolean tiebreaker) {
-        allowtie = tiebreaker;
-    }
-
-    /**
-     * Returns true (the file is selected) if most of the other selectors
-     * agree. In case of a tie, go by the allowtie setting. That defaults
-     * to true, meaning in case of a tie, the file is selected.
-     *
-     * @param basedir the base directory the scan is being done from
-     * @param filename is the name of the file to check
-     * @param file is a java.io.File object for the filename that the selector
-     * can use
-     * @return whether the file should be selected or not
-     */
-    public boolean isSelected(File basedir, String filename, File file) {
-        validate();
-        int yesvotes = 0;
-        int novotes = 0;
-        Enumeration e = selectorElements();
-        boolean result;
-
-        while(e.hasMoreElements()) {
-            result = ((FileSelector)e.nextElement()).isSelected(basedir,
-                    filename,file);
-            if (result) {
-                yesvotes = yesvotes + 1;
-            }
-            else {
-                novotes = novotes + 1;
-            }
-        }
-        if (yesvotes > novotes)
-        {
-            return true;
-        }
-        else if (novotes > yesvotes) {
-            return false;
-        }
-        // At this point, we know we have a tie.
-        return allowtie;
-    }
-}
-
diff --git a/src/main/org/apache/tools/ant/types/selectors/NoneSelector.java b/src/main/org/apache/tools/ant/types/selectors/NoneSelector.java
deleted file mode 100644
index a07c76f..0000000
--- a/src/main/org/apache/tools/ant/types/selectors/NoneSelector.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.types.selectors;
-
-import java.io.File;
-import java.util.Enumeration;
-
-/**
- * This selector has a collection of other selectors. All of those selectors
- * must refuse to select a file before the file is considered selected by
- * this selector.
- *
- * @author <a href="mailto:bruce@callenish.com">Bruce Atherton</a>
- * @since 1.5
- */
-public class NoneSelector extends BaseSelectorContainer {
-
-    /**
-     * Default constructor.
-     */
-    public NoneSelector() {
-    }
-
-    public String toString() {
-        StringBuffer buf = new StringBuffer();
-        if (hasSelectors()) {
-            buf.append("{noneselect: ");
-            buf.append(super.toString());
-            buf.append("}");
-        }
-        return buf.toString();
-    }
-
-    /**
-     * Returns true (the file is selected) only if all other selectors
-     * agree that the file should not be selected.
-     *
-     * @param basedir the base directory the scan is being done from
-     * @param filename is the name of the file to check
-     * @param file is a java.io.File object for the filename that the selector
-     * can use
-     * @return whether the file should be selected or not
-     */
-    public boolean isSelected(File basedir, String filename, File file) {
-        validate();
-        Enumeration e = selectorElements();
-        boolean result;
-
-        while(e.hasMoreElements()) {
-            result = ((FileSelector)e.nextElement()).isSelected(basedir,
-                    filename,file);
-            if (result) {
-                return false;
-            }
-        }
-        return true;
-    }
-
-}
-
diff --git a/src/main/org/apache/tools/ant/types/selectors/NotSelector.java b/src/main/org/apache/tools/ant/types/selectors/NotSelector.java
deleted file mode 100644
index 7a16930..0000000
--- a/src/main/org/apache/tools/ant/types/selectors/NotSelector.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.types.selectors;
-
-import java.io.File;
-import java.util.Enumeration;
-
-/**
- * This selector has one other selectors whose meaning it inverts. It
- * actually relies on NoneSelector for its implementation of the
- * isSelected() method, but it adds a check to ensure there is only one
- * other selector contained within.
- *
- * @author <a href="mailto:bruce@callenish.com">Bruce Atherton</a>
- * @since 1.5
- */
-public class NotSelector extends NoneSelector {
-
-    /**
-     * Default constructor.
-     */
-    public NotSelector() {
-    }
-
-    public String toString() {
-        StringBuffer buf = new StringBuffer();
-        if (hasSelectors()) {
-            buf.append("{notselect: ");
-            buf.append(super.toString());
-            buf.append("}");
-        }
-        return buf.toString();
-    }
-
-    /**
-     * Makes sure that there is only one entry, sets an error message if
-     * not.
-     */
-    public void verifySettings() {
-        if (selectorCount() != 1) {
-            setError("One and only one selector is allowed within the " +
-                    "<not> tag");
-        }
-    }
-
-}
-
diff --git a/src/main/org/apache/tools/ant/types/selectors/OrSelector.java b/src/main/org/apache/tools/ant/types/selectors/OrSelector.java
deleted file mode 100644
index 324a33d..0000000
--- a/src/main/org/apache/tools/ant/types/selectors/OrSelector.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.types.selectors;
-
-import java.io.File;
-import java.util.Enumeration;
-
-/**
- * This selector has a collection of other selectors, any of which have to
- * select a file in order for this selector to select it.
- *
- * @author <a href="mailto:bruce@callenish.com">Bruce Atherton</a>
- * @since 1.5
- */
-public class OrSelector extends BaseSelectorContainer {
-
-    /**
-     * Default constructor.
-     */
-    public OrSelector() {
-    }
-
-    public String toString() {
-        StringBuffer buf = new StringBuffer();
-        if (hasSelectors()) {
-            buf.append("{orselect: ");
-            buf.append(super.toString());
-            buf.append("}");
-        }
-        return buf.toString();
-    }
-
-    /**
-     * Returns true (the file is selected) if any of the other selectors
-     * agree that the file should be selected.
-     *
-     * @param basedir the base directory the scan is being done from
-     * @param filename the name of the file to check
-     * @param file a java.io.File object for the filename that the selector
-     * can use
-     * @return whether the file should be selected or not
-     */
-    public boolean isSelected(File basedir, String filename, File file) {
-        validate();
-        Enumeration e = selectorElements();
-        boolean result;
-
-        // First, check that all elements are correctly configured
-        while(e.hasMoreElements()) {
-            result = ((FileSelector)e.nextElement()).isSelected(basedir,
-                    filename,file);
-            if (result) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-}
-
diff --git a/src/main/org/apache/tools/ant/types/selectors/PresentSelector.java b/src/main/org/apache/tools/ant/types/selectors/PresentSelector.java
deleted file mode 100644
index 9efab0f..0000000
--- a/src/main/org/apache/tools/ant/types/selectors/PresentSelector.java
+++ /dev/null
@@ -1,208 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.types.selectors;
-
-import java.io.File;
-
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.types.Mapper;
-import org.apache.tools.ant.util.IdentityMapper;
-import org.apache.tools.ant.util.FileNameMapper;
-import org.apache.tools.ant.types.EnumeratedAttribute;
-import org.apache.tools.ant.BuildException;
-
-/**
- * Selector that filters files based on whether they appear in another
- * directory tree. It can contain a mapper element, so isn't available
- * as an ExtendSelector (since those parameters can't hold other
- * elements).
- *
- * @author <a href="mailto:bruce@callenish.com">Bruce Atherton</a>
- * @since 1.5
- */
-public class PresentSelector extends BaseSelector {
-
-    private String targetdir = null;
-    private File targetbase = null;
-    private Mapper mapperElement = null;
-    private FileNameMapper map = null;
-    private boolean destmustexist = true;
-
-    public PresentSelector() {
-    }
-
-    public String toString() {
-        StringBuffer buf = new StringBuffer("{presentselector targetdir: ");
-        buf.append(targetdir);
-        buf.append(" present: ");
-        if (destmustexist) {
-            buf.append("both");
-        } else {
-            buf.append("srconly");
-        }
-        if (map != null) {
-            buf.append(map.toString());
-        }
-        else if (mapperElement != null) {
-            buf.append(mapperElement.toString());
-        }
-        buf.append("}");
-        return buf.toString();
-    }
-
-    /**
-     * The name of the file or directory which is checked for matching
-     * files.
-     *
-     * @param targetdir the directory to scan looking for matching files.
-     */
-    public void setTargetdir(String targetdir) {
-        this.targetdir = SelectorUtils.fixPath(targetdir);
-        targetbase = new File(this.targetdir);
-    }
-
-    /**
-     * Defines the FileNameMapper to use (nested mapper element).
-     */
-    public Mapper createMapper() throws BuildException {
-        if (mapperElement != null) {
-            throw new BuildException("Cannot define more than one mapper");
-        }
-        mapperElement = new Mapper(project);
-        return mapperElement;
-    }
-
-
-    /**
-     * This sets whether to select a file if its dest file is present.
-     * It could be a <code>negate</code> boolean, but by doing things
-     * this way, we get some documentation on how the system works.
-     * A user looking at the documentation should clearly understand
-     * that the ONLY files whose presence is being tested are those
-     * that already exist in the source directory, hence the lack of
-     * a <code>destonly</code> option.
-     *
-     * @param fp An attribute set to either <code>srconly</code or
-     *           <code>both</code>.
-     */
-    public void setPresent(FilePresence fp) {
-        if (fp.getIndex() == 0) {
-            destmustexist = false;
-        }
-    }
-
-    /**
-     * Checks to make sure all settings are kosher. In this case, it
-     * means that the targetdir attribute has been set and we have a mapper.
-     */
-    public void verifySettings() {
-        if (targetdir == null) {
-            setError("The targetdir attribute is required.");
-        }
-        if (mapperElement == null) {
-            map = new IdentityMapper();
-        }
-        else {
-            map = mapperElement.getImplementation();
-        }
-        if (map == null) {
-            setError("Could not set <mapper> element.");
-        }
-    }
-
-    /**
-     * The heart of the matter. This is where the selector gets to decide
-     * on the inclusion of a file in a particular fileset.
-     *
-     * @param basedir the base directory the scan is being done from
-     * @param filename is the name of the file to check
-     * @param file is a java.io.File object the selector can use
-     * @return whether the file should be selected or not
-     */
-    public boolean isSelected(File basedir, String filename, File file) {
-
-        // throw BuildException on error
-        validate();
-
-        // Get File object for the target directory
-	File target = targetbase;
-	if (target == null) {
-            target = new File(basedir,targetdir);
-	}
-
-        // Determine file whose existence is to be checked
-        String[] destfiles = map.mapFileName(filename);
-        // Sanity check
-        if (destfiles.length != 1 || destfiles[0] == null) {
-            throw new BuildException("Invalid destination file results for "
-                + targetdir + " with filename " + filename);
-        }
-        String destname = destfiles[0];
-        File destfile = new File(target,destname);
-        return destfile.exists() == destmustexist;
-    }
-
-    /**
-     * Enumerated attribute with the values for indicating where a file's
-     * presence is allowed and required.
-     */
-    public static class FilePresence extends EnumeratedAttribute {
-        public String[] getValues() {
-            return new String[] {"srconly", "both"};
-        }
-    }
-
-}
-
diff --git a/src/main/org/apache/tools/ant/types/selectors/SelectorContainer.java b/src/main/org/apache/tools/ant/types/selectors/SelectorContainer.java
deleted file mode 100644
index 819e88f..0000000
--- a/src/main/org/apache/tools/ant/types/selectors/SelectorContainer.java
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.types.selectors;
-
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.BuildException;
-import  org.apache.tools.ant.types.Reference;
-
-import java.io.File;
-import java.util.Enumeration;
-import java.util.Stack;
-import java.util.Vector;
-
-/**
- * This is the base class for selectors that can contain other selectors.
- *
- * @author <a href="mailto:bruce@callenish.com">Bruce Atherton</a>
- * @since 1.5
- */
-public interface SelectorContainer {
-
-    /**
-     * Indicates whether there are any selectors here.
-     *
-     * @return whether any selectors are in this container
-     */
-    public boolean hasSelectors();
-
-    /**
-     * Gives the count of the number of selectors in this container
-     *
-     * @return the number of selectors in this container
-     */
-    public int selectorCount();
-
-    /**
-     * Returns the set of selectors as an array.
-     *
-     * @return an array of selectors in this container
-     */
-    public FileSelector[] getSelectors(Project p);
-
-    /**
-     * Returns an enumerator for accessing the set of selectors.
-     *
-     * @return an enumerator that goes through each of the selectors
-     */
-    public Enumeration selectorElements();
-
-    /**
-     * Add a new selector into this container.
-     *
-     * @param selector the new selector to add
-     * @return the selector that was added
-     */
-    public void appendSelector(FileSelector selector);
-
-    /* Methods below all implement the static selectors */
-
-    /**
-     * add an "And" selector entry on the selector list
-     */
-    public void addAnd(AndSelector selector);
-
-    /**
-     * add an "Or" selector entry on the selector list
-     */
-    public void addOr(OrSelector selector);
-
-    /**
-     * add a "Not" selector entry on the selector list
-     */
-    public void addNot(NotSelector selector);
-
-    /**
-     * add a "None" selector entry on the selector list
-     */
-    public void addNone(NoneSelector selector);
-
-    /**
-     * add a majority selector entry on the selector list
-     */
-    public void addMajority(MajoritySelector selector);
-
-    /**
-     * add a selector date entry on the selector list
-     */
-    public void addDateselect(DateSelector selector);
-
-    /**
-     * add a selector size entry on the selector list
-     */
-    public void addSizeselect(SizeSelector selector);
-
-    /**
-     * add a selector filename entry on the selector list
-     */
-    public void addFilenameselect(FilenameSelector selector);
-
-    /**
-     * add an extended selector entry on the selector list
-     */
-    public void addExtendSelect(ExtendSelector selector);
-
-    /**
-     * add a contains selector entry on the selector list
-     */
-    public void addContainsSelect(ContainsSelector selector);
-
-    /**
-     * add a present selector entry on the selector list
-     */
-    public void addPresentSelect(PresentSelector selector);
-
-    /**
-     * add a depth selector entry on the selector list
-     */
-    public void addDepthSelect(DepthSelector selector);
-
-    /**
-     * add a depends selector entry on the selector list
-     */
-    public void addDependSelect(DependSelector selector);
-
-}
-
diff --git a/src/main/org/apache/tools/ant/types/selectors/SelectorScanner.java b/src/main/org/apache/tools/ant/types/selectors/SelectorScanner.java
deleted file mode 100644
index 7d6786e..0000000
--- a/src/main/org/apache/tools/ant/types/selectors/SelectorScanner.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.types.selectors;
-
-/**
- * An interface used to describe the actions required by any type of
- * directory scanner that supports Selecters.
- *
- * @author <a href="mailto:bruce@callenish.com">Bruce Atherton</a>
- * @since 1.5
- */
-public interface SelectorScanner {
-    /**
-     * Sets the selectors the scanner should use.
-     *
-     * @param selectors the list of selectors
-     */
-    void setSelectors(FileSelector[] selectors);
-
-    /**
-     * Directories which were selected out of a scan.
-     *
-     * @param selectors list selector objects
-     */
-    public String[] getDeselectedDirectories();
-
-    /**
-     * Files which were selected out of a scan.
-     *
-     * @param selectors list selector objects
-     */
-    public String[] getDeselectedFiles();
-
-
-}
diff --git a/src/main/org/apache/tools/ant/types/selectors/SelectorUtils.java b/src/main/org/apache/tools/ant/types/selectors/SelectorUtils.java
deleted file mode 100644
index 5c678fb..0000000
--- a/src/main/org/apache/tools/ant/types/selectors/SelectorUtils.java
+++ /dev/null
@@ -1,564 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.types.selectors;
-
-import java.io.File;
-import java.util.StringTokenizer;
-import java.util.Vector;
-
-import org.apache.tools.ant.BuildException;
-
-/**
- * <p>This is a utility class used by selectors and DirectoryScanner. The
- * functionality more properly belongs just to selectors, but unfortunately
- * DirectoryScanner exposed these as protected methods. Thus we have to
- * support any subclasses of DirectoryScanner that may access these methods.
- * </p>
- * <p>This is a Singleton.</p>
- *
- * @author Arnout J. Kuiper
- * <a href="mailto:ajkuiper@wxs.nl">ajkuiper@wxs.nl</a>
- * @author <a href="mailto:umagesh@rediffmail.com">Magesh Umasankar</a>
- * @author <a href="mailto:bruce@callenish.com">Bruce Atherton</a>
- * @since 1.5
- */
-public final class SelectorUtils {
-
-    private static SelectorUtils instance = new SelectorUtils();
-
-    /**
-     * Private Constructor
-     */
-    private SelectorUtils() {
-    }
-
-     /**
-      * Retrieves the instance of the Singleton.
-      */
-    public static SelectorUtils getInstance() {
-        return instance;
-    }
-
-    /**
-     * Tests whether or not a given path matches the start of a given
-     * pattern up to the first "**".
-     * <p>
-     * This is not a general purpose test and should only be used if you
-     * can live with false positives. For example, <code>pattern=**\a</code>
-     * and <code>str=b</code> will yield <code>true</code>.
-     *
-     * @param pattern The pattern to match against. Must not be
-     *                <code>null</code>.
-     * @param str     The path to match, as a String. Must not be
-     *                <code>null</code>.
-     *
-     * @return whether or not a given path matches the start of a given
-     * pattern up to the first "**".
-     */
-    public static boolean matchPatternStart(String pattern, String str) {
-        return matchPatternStart(pattern, str, true);
-    }
-    /**
-     * Tests whether or not a given path matches the start of a given
-     * pattern up to the first "**".
-     * <p>
-     * This is not a general purpose test and should only be used if you
-     * can live with false positives. For example, <code>pattern=**\a</code>
-     * and <code>str=b</code> will yield <code>true</code>.
-     *
-     * @param pattern The pattern to match against. Must not be
-     *                <code>null</code>.
-     * @param str     The path to match, as a String. Must not be
-     *                <code>null</code>.
-     * @param isCaseSensitive Whether or not matching should be performed
-     *                        case sensitively.
-     *
-     * @return whether or not a given path matches the start of a given
-     * pattern up to the first "**".
-     */
-    public static boolean matchPatternStart(String pattern, String str,
-                                               boolean isCaseSensitive) {
-        // When str starts with a File.separator, pattern has to start with a
-        // File.separator.
-        // When pattern starts with a File.separator, str has to start with a
-        // File.separator.
-        if (str.startsWith(File.separator) !=
-            pattern.startsWith(File.separator)) {
-            return false;
-        }
-
-        Vector patDirs = tokenizePath (pattern);
-        Vector strDirs = tokenizePath (str);
-
-        int patIdxStart = 0;
-        int patIdxEnd   = patDirs.size()-1;
-        int strIdxStart = 0;
-        int strIdxEnd   = strDirs.size()-1;
-
-        // up to first '**'
-        while (patIdxStart <= patIdxEnd && strIdxStart <= strIdxEnd) {
-            String patDir = (String)patDirs.elementAt(patIdxStart);
-            if (patDir.equals("**")) {
-                break;
-            }
-            if (!match(patDir,(String)strDirs.elementAt(strIdxStart),
-                    isCaseSensitive)) {
-                return false;
-            }
-            patIdxStart++;
-            strIdxStart++;
-        }
-
-        if (strIdxStart > strIdxEnd) {
-            // String is exhausted
-            return true;
-        } else if (patIdxStart > patIdxEnd) {
-            // String not exhausted, but pattern is. Failure.
-            return false;
-        } else {
-            // pattern now holds ** while string is not exhausted
-            // this will generate false positives but we can live with that.
-            return true;
-        }
-    }
-
-    /**
-     * Tests whether or not a given path matches a given pattern.
-     *
-     * @param pattern The pattern to match against. Must not be
-     *                <code>null</code>.
-     * @param str     The path to match, as a String. Must not be
-     *                <code>null</code>.
-     *
-     * @return <code>true</code> if the pattern matches against the string,
-     *         or <code>false</code> otherwise.
-     */
-    public static boolean matchPath(String pattern, String str) {
-        return matchPath(pattern, str, true);
-    }
-
-    /**
-     * Tests whether or not a given path matches a given pattern.
-     *
-     * @param pattern The pattern to match against. Must not be
-     *                <code>null</code>.
-     * @param str     The path to match, as a String. Must not be
-     *                <code>null</code>.
-     * @param isCaseSensitive Whether or not matching should be performed
-     *                        case sensitively.
-     *
-     * @return <code>true</code> if the pattern matches against the string,
-     *         or <code>false</code> otherwise.
-     */
-    public static boolean matchPath(String pattern, String str,
-            boolean isCaseSensitive) {
-        // When str starts with a File.separator, pattern has to start with a
-        // File.separator.
-        // When pattern starts with a File.separator, str has to start with a
-        // File.separator.
-        if (str.startsWith(File.separator) !=
-            pattern.startsWith(File.separator)) {
-            return false;
-        }
-
-        Vector patDirs = tokenizePath (pattern);
-        Vector strDirs = tokenizePath (str);
-
-        int patIdxStart = 0;
-        int patIdxEnd   = patDirs.size()-1;
-        int strIdxStart = 0;
-        int strIdxEnd   = strDirs.size()-1;
-
-        // up to first '**'
-        while (patIdxStart <= patIdxEnd && strIdxStart <= strIdxEnd) {
-            String patDir = (String)patDirs.elementAt(patIdxStart);
-            if (patDir.equals("**")) {
-                break;
-            }
-            if (!match(patDir,(String)strDirs.elementAt(strIdxStart),
-                    isCaseSensitive)) {
-                return false;
-            }
-            patIdxStart++;
-            strIdxStart++;
-        }
-        if (strIdxStart > strIdxEnd) {
-            // String is exhausted
-            for (int i = patIdxStart; i <= patIdxEnd; i++) {
-                if (!patDirs.elementAt(i).equals("**")) {
-                    return false;
-                }
-            }
-            return true;
-        } else {
-            if (patIdxStart > patIdxEnd) {
-                // String not exhausted, but pattern is. Failure.
-                return false;
-            }
-        }
-
-        // up to last '**'
-        while (patIdxStart <= patIdxEnd && strIdxStart <= strIdxEnd) {
-            String patDir = (String)patDirs.elementAt(patIdxEnd);
-            if (patDir.equals("**")) {
-                break;
-            }
-            if (!match(patDir,(String)strDirs.elementAt(strIdxEnd),
-                    isCaseSensitive)) {
-                return false;
-            }
-            patIdxEnd--;
-            strIdxEnd--;
-        }
-        if (strIdxStart > strIdxEnd) {
-            // String is exhausted
-            for (int i = patIdxStart; i <= patIdxEnd; i++) {
-                if (!patDirs.elementAt(i).equals("**")) {
-                    return false;
-                }
-            }
-            return true;
-        }
-
-        while (patIdxStart != patIdxEnd && strIdxStart <= strIdxEnd) {
-            int patIdxTmp = -1;
-            for (int i = patIdxStart+1; i <= patIdxEnd; i++) {
-                if (patDirs.elementAt(i).equals("**")) {
-                    patIdxTmp = i;
-                    break;
-                }
-            }
-            if (patIdxTmp == patIdxStart+1) {
-                // '**/**' situation, so skip one
-                patIdxStart++;
-                continue;
-            }
-            // Find the pattern between padIdxStart & padIdxTmp in str between
-            // strIdxStart & strIdxEnd
-            int patLength = (patIdxTmp-patIdxStart-1);
-            int strLength = (strIdxEnd-strIdxStart+1);
-            int foundIdx  = -1;
-strLoop:
-            for (int i = 0; i <= strLength - patLength; i++) {
-                for (int j = 0; j < patLength; j++) {
-                    String subPat = (String)patDirs.elementAt(patIdxStart+j+1);
-                    String subStr = (String)strDirs.elementAt(strIdxStart+i+j);
-                    if (!match(subPat,subStr, isCaseSensitive)) {
-                        continue strLoop;
-                    }
-                }
-
-                foundIdx = strIdxStart+i;
-                break;
-            }
-
-            if (foundIdx == -1) {
-                return false;
-            }
-
-            patIdxStart = patIdxTmp;
-            strIdxStart = foundIdx+patLength;
-        }
-
-        for (int i = patIdxStart; i <= patIdxEnd; i++) {
-            if (!patDirs.elementAt(i).equals("**")) {
-                return false;
-            }
-        }
-
-        return true;
-    }
-
-    /**
-     * Tests whether or not a string matches against a pattern.
-     * The pattern may contain two special characters:<br>
-     * '*' means zero or more characters<br>
-     * '?' means one and only one character
-     *
-     * @param pattern The pattern to match against.
-     *                Must not be <code>null</code>.
-     * @param str     The string which must be matched against the pattern.
-     *                Must not be <code>null</code>.
-     *
-     * @return <code>true</code> if the string matches against the pattern,
-     *         or <code>false</code> otherwise.
-     */
-    public static boolean match(String pattern, String str) {
-        return match(pattern, str, true);
-    }
-
-    /**
-     * Tests whether or not a string matches against a pattern.
-     * The pattern may contain two special characters:<br>
-     * '*' means zero or more characters<br>
-     * '?' means one and only one character
-     *
-     * @param pattern The pattern to match against.
-     *                Must not be <code>null</code>.
-     * @param str     The string which must be matched against the pattern.
-     *                Must not be <code>null</code>.
-     * @param isCaseSensitive Whether or not matching should be performed
-     *                        case sensitively.
-     *
-     *
-     * @return <code>true</code> if the string matches against the pattern,
-     *         or <code>false</code> otherwise.
-     */
-    public static boolean match(String pattern, String str,
-            boolean isCaseSensitive) {
-        char[] patArr = pattern.toCharArray();
-        char[] strArr = str.toCharArray();
-        int patIdxStart = 0;
-        int patIdxEnd   = patArr.length-1;
-        int strIdxStart = 0;
-        int strIdxEnd   = strArr.length-1;
-        char ch;
-
-        boolean containsStar = false;
-        for (int i = 0; i < patArr.length; i++) {
-            if (patArr[i] == '*') {
-                containsStar = true;
-                break;
-            }
-        }
-
-        if (!containsStar) {
-            // No '*'s, so we make a shortcut
-            if (patIdxEnd != strIdxEnd) {
-                return false; // Pattern and string do not have the same size
-            }
-            for (int i = 0; i <= patIdxEnd; i++) {
-                ch = patArr[i];
-                if (ch != '?') {
-                    if (isCaseSensitive && ch != strArr[i]) {
-                        return false;// Character mismatch
-                    }
-                    if (!isCaseSensitive && Character.toUpperCase(ch) !=
-                        Character.toUpperCase(strArr[i])) {
-                        return false; // Character mismatch
-                    }
-                }
-            }
-            return true; // String matches against pattern
-        }
-
-        if (patIdxEnd == 0) {
-            return true; // Pattern contains only '*', which matches anything
-        }
-
-        // Process characters before first star
-        while((ch = patArr[patIdxStart]) != '*' && strIdxStart <= strIdxEnd) {
-            if (ch != '?') {
-                if (isCaseSensitive && ch != strArr[strIdxStart]) {
-                    return false;// Character mismatch
-                }
-                if (!isCaseSensitive && Character.toUpperCase(ch) !=
-                    Character.toUpperCase(strArr[strIdxStart])) {
-                    return false;// Character mismatch
-                }
-            }
-            patIdxStart++;
-            strIdxStart++;
-        }
-        if (strIdxStart > strIdxEnd) {
-            // All characters in the string are used. Check if only '*'s are
-            // left in the pattern. If so, we succeeded. Otherwise failure.
-            for (int i = patIdxStart; i <= patIdxEnd; i++) {
-                if (patArr[i] != '*') {
-                    return false;
-                }
-            }
-            return true;
-        }
-
-        // Process characters after last star
-        while((ch = patArr[patIdxEnd]) != '*' && strIdxStart <= strIdxEnd) {
-            if (ch != '?') {
-                if (isCaseSensitive && ch != strArr[strIdxEnd]) {
-                    return false;// Character mismatch
-                }
-                if (!isCaseSensitive && Character.toUpperCase(ch) !=
-                    Character.toUpperCase(strArr[strIdxEnd])) {
-                    return false;// Character mismatch
-                }
-            }
-            patIdxEnd--;
-            strIdxEnd--;
-        }
-        if (strIdxStart > strIdxEnd) {
-            // All characters in the string are used. Check if only '*'s are
-            // left in the pattern. If so, we succeeded. Otherwise failure.
-            for (int i = patIdxStart; i <= patIdxEnd; i++) {
-                if (patArr[i] != '*') {
-                    return false;
-                }
-            }
-            return true;
-        }
-
-        // process pattern between stars. padIdxStart and patIdxEnd point
-        // always to a '*'.
-        while (patIdxStart != patIdxEnd && strIdxStart <= strIdxEnd) {
-            int patIdxTmp = -1;
-            for (int i = patIdxStart+1; i <= patIdxEnd; i++) {
-                if (patArr[i] == '*') {
-                    patIdxTmp = i;
-                    break;
-                }
-            }
-            if (patIdxTmp == patIdxStart+1) {
-                // Two stars next to each other, skip the first one.
-                patIdxStart++;
-                continue;
-            }
-            // Find the pattern between padIdxStart & padIdxTmp in str between
-            // strIdxStart & strIdxEnd
-            int patLength = (patIdxTmp-patIdxStart-1);
-            int strLength = (strIdxEnd-strIdxStart+1);
-            int foundIdx  = -1;
-            strLoop:
-            for (int i = 0; i <= strLength - patLength; i++) {
-                for (int j = 0; j < patLength; j++) {
-                    ch = patArr[patIdxStart+j+1];
-                    if (ch != '?') {
-                        if (isCaseSensitive && ch != strArr[strIdxStart+i+j]) {
-                            continue strLoop;
-                        }
-                        if (!isCaseSensitive && Character.toUpperCase(ch) !=
-                            Character.toUpperCase(strArr[strIdxStart+i+j])) {
-                            continue strLoop;
-                        }
-                    }
-                }
-
-                foundIdx = strIdxStart+i;
-                break;
-            }
-
-            if (foundIdx == -1) {
-                return false;
-            }
-
-            patIdxStart = patIdxTmp;
-            strIdxStart = foundIdx+patLength;
-        }
-
-        // All characters in the string are used. Check if only '*'s are left
-        // in the pattern. If so, we succeeded. Otherwise failure.
-        for (int i = patIdxStart; i <= patIdxEnd; i++) {
-            if (patArr[i] != '*') {
-                return false;
-            }
-        }
-        return true;
-    }
-
-    /**
-     * Breaks a path up into a Vector of path elements, tokenizing on
-     * <code>File.separator</code>.
-     *
-     * @param path Path to tokenize. Must not be <code>null</code>.
-     *
-     * @return a Vector of path elements from the tokenized path
-     */
-    public static Vector tokenizePath (String path) {
-        Vector ret = new Vector();
-        StringTokenizer st = new StringTokenizer(path,File.separator);
-        while (st.hasMoreTokens()) {
-            ret.addElement(st.nextToken());
-        }
-        return ret;
-    }
-
-    /**
-     * Helper method which corrects paths to use forward slashes.
-     *
-     * @param pattern the path pattern which needs correcting
-     * @return corrected pattern
-     */
-    public static String fixPath(String pattern) {
-        return pattern.replace('/',File.separatorChar).replace('\\',
-                File.separatorChar);
-    }
-
-    /**
-     * Returns dependency information on these two files. If src has been
-     * modified later than target, it returns true. If target doesn't exist,
-     * it likewise returns true. Otherwise, target is newer than src and
-     * is not out of date, thus the method returns false. It also returns
-     * false if the src file doesn't even exist, since how could the
-     * target then be out of date.
-     *
-     * @param src the original file
-     * @param target the file being compared against
-     * @param granularity the amount in seconds of slack we will give in
-     *        determining out of dateness
-     * @return whether the target is out of date
-     */
-    public static boolean isOutOfDate(File src, File target, int granularity) {
-        if (!src.exists()) {
-            return false;
-        }
-        if (!target.exists()) {
-            return true;
-        }
-        if ((src.lastModified() - granularity) > target.lastModified()) {
-            return true;
-        }
-        return false;
-    }
-
-}
-
diff --git a/src/main/org/apache/tools/ant/types/selectors/SizeSelector.java b/src/main/org/apache/tools/ant/types/selectors/SizeSelector.java
deleted file mode 100644
index 3ed87a4..0000000
--- a/src/main/org/apache/tools/ant/types/selectors/SizeSelector.java
+++ /dev/null
@@ -1,313 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.types.selectors;
-
-import java.io.File;
-
-import org.apache.tools.ant.types.EnumeratedAttribute;
-import org.apache.tools.ant.types.Parameter;
-import org.apache.tools.ant.BuildException;
-
-/**
- * Selector that filters files based on their size.
- *
- * @author <a href="mailto:bruce@callenish.com">Bruce Atherton</a>
- * @since 1.5
- */
-public class SizeSelector extends BaseExtendSelector {
-
-    private long size = -1;
-    private long multiplier = 1;
-    private long sizelimit = -1;
-    private int cmp = 0;
-    public final static String SIZE_KEY = "millis";
-    public final static String UNITS_KEY = "datetime";
-    public final static String WHEN_KEY = "when";
-
-    public SizeSelector() {
-    }
-
-    public String toString() {
-        StringBuffer buf = new StringBuffer("{sizeselector size: ");
-        buf.append(sizelimit);
-        buf.append("compare: ");
-        if (cmp == 0) {
-            buf.append("less");
-        }
-        else if (cmp == 1) {
-            buf.append("more");
-        } else {
-            buf.append("equal");
-        }
-        buf.append("}");
-        return buf.toString();
-    }
-
-    /**
-     * A size selector needs to know what size to base its selecting on.
-     * This will be further modified by the multiplier to get an
-     * actual size limit.
-     *
-     * @param size the size to select against expressed in units
-     */
-    public void setSize(long size) {
-        this.size = size;
-        if ((multiplier != 0) && (size > -1)) {
-            sizelimit = size * multiplier;
-        }
-    }
-
-    /**
-     * Sets the units to use for the comparison. This is a little
-     * complicated because common usage has created standards that
-     * play havoc with capitalization rules. Thus, some people will
-     * use "K" for indicating 1000's, when the SI standard calls for
-     * "k". Others have tried to introduce "K" as a multiple of 1024,
-     * but that falls down when you reach "M", since "m" is already
-     * defined as 0.001.
-     * <p>
-     * To get around this complexity, a number of standards bodies
-     * have proposed the 2^10 standard, and at least one has adopted
-     * it. But we are still left with a populace that isn't clear on
-     * how capitalization should work.
-     * <p>
-     * We therefore ignore capitalization as much as possible.
-     * Completely mixed case is not possible, but all upper and lower
-     * forms are accepted for all long and short forms. Since we have
-     * no need to work with the 0.001 case, this practice works here.
-     * <p>
-     * This function translates all the long and short forms that a
-     * unit prefix can occur in and translates them into a single
-     * multiplier.
-     *
-     * @param units The units to compare the size to, using an
-     *        EnumeratedAttribute
-     */
-    public void setUnits(ByteUnits units) {
-        int i = units.getIndex();
-        multiplier = 0;
-        if ((i > -1) && (i < 4)) {
-            multiplier = 1000;
-        }
-        else if ((i > 3) && (i < 9)) {
-            multiplier = 1024;
-        }
-        else if ((i > 8) && (i < 13)) {
-            multiplier = 1000000;
-        }
-        else if ((i > 12) && (i < 18)) {
-            multiplier = 1048576;
-        }
-        else if ((i > 17) && (i < 22)) {
-            multiplier = 1000000000L;
-        }
-        else if ((i > 21) && (i < 27)) {
-            multiplier = 1073741824L;
-        }
-        else if ((i > 26) && (i < 31)) {
-            multiplier = 1000000000000L;
-        }
-        else if ((i > 30) && (i < 36)) {
-            multiplier = 1099511627776L;
-        }
-        if ((multiplier > 0) && (size > -1)) {
-            sizelimit = size * multiplier;
-        }
-    }
-
-    /**
-     * This specifies when the file should be selected, whether it be
-     * when the file matches a particular size, when it is smaller,
-     * or whether it is larger.
-     *
-     * @param cmp The comparison to perform, an EnumeratedAttribute
-     */
-    public void setWhen(SizeComparisons cmp) {
-        this.cmp = cmp.getIndex();
-    }
-
-    /**
-     * When using this as a dynamic selector, this method will be called.
-     * It translates each parameter into the appropriate setXXX() call.
-     *
-     * @param parameters the complete set of parameters for this selector
-     */
-    public void setParameters(Parameter[] parameters) {
-        super.setParameters(parameters);
-        if (parameters != null) {
-            for (int i = 0; i < parameters.length; i++) {
-                String paramname = parameters[i].getName();
-                if (SIZE_KEY.equalsIgnoreCase(paramname)) {
-                    try {
-                        setSize(new Long(parameters[i].getValue()
-                                ).longValue());
-                    } catch (NumberFormatException nfe) {
-                        setError("Invalid size setting "
-                            + parameters[i].getValue());
-                    }
-                }
-                else if (UNITS_KEY.equalsIgnoreCase(paramname)) {
-                    ByteUnits units = new ByteUnits();
-                    units.setValue(parameters[i].getValue());
-                    setUnits(units);
-                }
-                else if (WHEN_KEY.equalsIgnoreCase(paramname)) {
-                    SizeComparisons cmp = new SizeComparisons();
-                    cmp.setValue(parameters[i].getValue());
-                    setWhen(cmp);
-                }
-                else {
-                    setError("Invalid parameter " + paramname);
-                }
-            }
-        }
-    }
-
-    /**
-     * <p>Checks to make sure all settings are kosher. In this case, it
-     * means that the size attribute has been set (to a positive value),
-     * that the multiplier has a valid setting, and that the size limit
-     * is valid. Since the latter is a calculated value, this can only
-     * fail due to a programming error.
-     * </p>
-     * <p>If a problem is detected, the setError() method is called.
-     * </p>
-     */
-    public void verifySettings() {
-        if (size < 0) {
-            setError("The size attribute is required, and must be positive");
-        }
-        else if (multiplier < 1) {
-            setError("Invalid Units supplied, must be K,Ki,M,Mi,G,Gi,T,or Ti");
-        }
-        else if (sizelimit < 0) {
-            setError("Internal error: Code is not setting sizelimit correctly");
-        }
-    }
-
-    /**
-     * The heart of the matter. This is where the selector gets to decide
-     * on the inclusion of a file in a particular fileset.
-     *
-     * @param basedir A java.io.File object for the base directory
-     * @param filename The name of the file to check
-     * @param file A File object for this filename
-     * @return whether the file should be selected or not
-     */
-    public boolean isSelected(File basedir, String filename, File file) {
-
-        // throw BuildException on error
-        validate();
-
-        // Directory size never selected for
-        if (file.isDirectory()) {
-            return true;
-        }
-        if (cmp == 0) {
-            return (file.length() < sizelimit);
-        }
-        else if (cmp == 1) {
-            return (file.length() > sizelimit);
-        }
-        else {
-            return (file.length() == sizelimit);
-        }
-    }
-
-
-
-    /**
-     * Enumerated attribute with the values for units.
-     * <p>
-     * This treats the standard SI units as representing powers of ten,
-     * as they should. If you want the powers of 2 that approximate
-     * the SI units, use the first two characters followed by a
-     * <code>bi</code>. So 1024 (2^10) becomes <code>kibi</code>,
-     * 1048576 (2^20) becomes <code>mebi</code>, 1073741824 (2^30)
-     * becomes <code>gibi</code>, and so on. The symbols are also
-     * accepted, and these are the first letter capitalized followed
-     * by an <code>i</code>. <code>Ki</code>, <code>Mi</code>,
-     * <code>Gi</code>, and so on. Capitalization variations on these
-     * are also accepted.
-     * <p>
-     * This binary prefix system is approved by the IEC and appears on
-     * its way for approval by other agencies, but it is not an SI
-     * standard. It disambiguates things for us, though.
-     */
-    public static class ByteUnits extends EnumeratedAttribute {
-        public String[] getValues() {
-            return new String[] {"K", "k", "kilo", "KILO",
-                                 "Ki", "KI", "ki", "kibi", "KIBI",
-                                 "M", "m", "mega", "MEGA",
-                                 "Mi", "MI", "mi", "mebi", "MEBI",
-                                 "G", "g", "giga", "GIGA",
-                                 "Gi", "GI", "gi", "gibi", "GIBI",
-                                 "T", "t", "tera", "TERA",
-            /* You wish! */      "Ti", "TI", "ti", "tebi", "TEBI"
-                                 };
-        }
-    }
-
-    /**
-     * Enumerated attribute with the values for size comparison.
-     */
-    public static class SizeComparisons extends EnumeratedAttribute {
-        public String[] getValues() {
-            return new String[] {"less", "more", "equal"};
-        }
-    }
-
-}
-
diff --git a/src/main/org/apache/tools/ant/util/CollectionUtils.java b/src/main/org/apache/tools/ant/util/CollectionUtils.java
deleted file mode 100644
index 63cca4f..0000000
--- a/src/main/org/apache/tools/ant/util/CollectionUtils.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.util;
-
-import java.util.Enumeration;
-import java.util.Vector;
-
-/**
- * A set of helper methods related to collection manipulation.
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- *
- * @since Ant 1.5
- */
-public class CollectionUtils {
-
-    /**
-     * Believe it or not, Vector.equals() doesn't do any good in 1.1
-     *
-     * @since 1.1, Ant 1.5
-     */
-    public static boolean equals(Vector v1, Vector v2) {
-        if (v1 == v2) {
-            return true;
-        }
-        
-        if (v1 == null || v2 == null) {
-            return false;
-        }
-
-        if (v1.size() != v2.size()) {
-            return false;
-        }
-
-        Enumeration e1 = v1.elements();
-        Enumeration e2 = v2.elements();
-        while (e1.hasMoreElements()) {
-            if (!e1.nextElement().equals(e2.nextElement())) {
-                return false;
-            }
-        }
-        
-        return true;
-    }
-}
diff --git a/src/main/org/apache/tools/ant/util/DOMElementWriter.java b/src/main/org/apache/tools/ant/util/DOMElementWriter.java
deleted file mode 100644
index 217ceb6..0000000
--- a/src/main/org/apache/tools/ant/util/DOMElementWriter.java
+++ /dev/null
@@ -1,318 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.util;
-
-import java.io.IOException;
-import java.io.Writer;
-import java.io.OutputStream;
-import java.io.OutputStreamWriter;
-
-import org.w3c.dom.Element;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Attr;
-import org.w3c.dom.NodeList;
-import org.w3c.dom.Node;
-import org.w3c.dom.Text;
-
-/**
- * Writes a DOM tree to a given Writer.
- *
- * <p>Utility class used by {@link org.apache.tools.ant.XmlLogger
- * XmlLogger} and
- * org.apache.tools.ant.taskdefs.optional.junit.XMLJUnitResultFormatter
- * XMLJUnitResultFormatter}.</p>
- *
- * @author The original author of XmlLogger
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</tt>
- */
-public class DOMElementWriter {
-
-    private static String lSep = System.getProperty("line.separator");
-    private StringBuffer sb = new StringBuffer();
-
-    /**
-     * Don't try to be too smart but at least recognize the predefined
-     * entities.
-     */
-    protected String[] knownEntities = {"gt", "amp", "lt", "apos", "quot"};
-
-
-    /**
-     * Writes a DOM tree to a stream in UTF8 encoding. Note that
-     * it appends the &lt;?xml version='1.0' encoding='UTF-8'?&gt;.
-     * The indent number is set to 0 and a 2-space indent.
-     * @param root the root element of the DOM tree.
-     * @param out the outputstream to write to.
-     * @throws IOException if an error happens while writing to the stream.
-     */
-    public void write(Element root, OutputStream out) throws IOException {
-        Writer wri = new OutputStreamWriter(out, "UTF8");
-        wri.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
-        write(root, wri, 0, "  ");
-        wri.flush();
-    }
-
-    /**
-     * Writes a DOM tree to a stream.
-     * @param element the Root DOM element of the tree
-     * @param out where to send the output
-     * @param indent number of 
-     * @param indentWith string that should be used to indent the corresponding tag.
-     * @throws IOException if an error happens while writing to the stream.
-     */
-    public void write(Element element, Writer out, int indent, 
-                      String indentWith)
-        throws IOException {
-
-        // Write indent characters
-        for (int i = 0; i < indent; i++) {
-            out.write(indentWith);
-        }
-
-        // Write element
-        out.write("<");
-        out.write(element.getTagName());
-
-        // Write attributes
-        NamedNodeMap attrs = element.getAttributes();
-        for (int i = 0; i < attrs.getLength(); i++) {
-            Attr attr = (Attr) attrs.item(i);
-            out.write(" ");
-            out.write(attr.getName());
-            out.write("=\"");
-            out.write(encode(attr.getValue()));
-            out.write("\"");
-        }
-        out.write(">");
-
-        // Write child elements and text
-        boolean hasChildren = false;
-        NodeList children = element.getChildNodes();
-        for (int i = 0; i < children.getLength(); i++) {
-            Node child = children.item(i);
-
-            switch (child.getNodeType()) {
-                
-            case Node.ELEMENT_NODE:
-                if (!hasChildren) {
-                    out.write(lSep);
-                    hasChildren = true;
-                }
-                write((Element) child, out, indent + 1, indentWith);
-                break;
-                
-            case Node.TEXT_NODE:
-                out.write(encode(child.getNodeValue()));
-                break;
-                
-            case Node.CDATA_SECTION_NODE:
-                out.write("<![CDATA[");
-                out.write(encodedata(((Text) child).getData()));
-                out.write("]]>");
-                break;
-
-            case Node.ENTITY_REFERENCE_NODE:
-                out.write('&');
-                out.write(child.getNodeName());
-                out.write(';');
-                break;
-
-            case Node.PROCESSING_INSTRUCTION_NODE:
-                out.write("<?");
-                out.write(child.getNodeName());
-                String data = child.getNodeValue();
-                if (data != null && data.length() > 0) {
-                    out.write(' ');
-                    out.write(data);
-                }
-                out.write("?>");
-                break;
-            }
-        }
-
-        // If we had child elements, we need to indent before we close
-        // the element, otherwise we're on the same line and don't need
-        // to indent
-        if (hasChildren) {
-            for (int i = 0; i < indent; i++) {
-                out.write(indentWith);
-            }
-        }
-
-        // Write element close
-        out.write("</");
-        out.write(element.getTagName());
-        out.write(">");
-        out.write(lSep);
-        out.flush();
-    }
-
-    /**
-     * Escape &lt;, &gt; &amp; &apos;, &quot; as their entities and
-     * drop characters that are illegal in XML documents.
-     */
-    public String encode(String value) {
-        sb.setLength(0);
-        for (int i = 0; i < value.length(); i++) {
-            char c = value.charAt(i);
-            switch (c) {
-            case '<':
-                sb.append("&lt;");
-                break;
-            case '>':
-                sb.append("&gt;");
-                break;
-            case '\'':
-                sb.append("&apos;");
-                break;
-            case '\"':
-                sb.append("&quot;");
-                break;
-            case '&':
-                int nextSemi = value.indexOf(";", i);
-                if (nextSemi < 0
-                    || !isReference(value.substring(i, nextSemi + 1))) {
-                    sb.append("&amp;");
-                } else {
-                    sb.append('&');
-                }
-                break;
-            default:
-                if (isLegalCharacter(c)) {
-                    sb.append(c);
-                }
-                break;
-            }
-        }
-        return sb.toString();
-    }
-
-    /**
-     * Drop characters that are illegal in XML documents.
-     *
-     * <p>See XML 1.0 2.2 <a
-     * href="http://www.w3.org/TR/1998/REC-xml-19980210#charsets">http://www.w3.org/TR/1998/REC-xml-19980210#charsets</a>.</p>
-     */
-    public String encodedata(final String value) {
-        sb.setLength(0);
-        for (int i = 0; i < value.length(); ++i) {
-            char c = value.charAt(i);
-            if (isLegalCharacter(c)) {
-                sb.append(c);
-            }
-        }
-        return sb.toString();
-    }
-
-    /**
-     * Is the given argument a character or entity reference?
-     */
-    public boolean isReference(String ent) {
-        if (!(ent.charAt(0) == '&') || !ent.endsWith(";")) {
-            return false;
-        }
-
-        if (ent.charAt(1) == '#') {
-            if (ent.charAt(2) == 'x') {
-                try {
-                    Integer.parseInt(ent.substring(3, ent.length() - 1), 16);
-                    return true;
-                } catch (NumberFormatException nfe) {
-                    return false;
-                }
-            } else {
-                try {
-                    Integer.parseInt(ent.substring(2, ent.length() - 1));
-                    return true;
-                } catch (NumberFormatException nfe) {
-                    return false;
-                }
-            }
-        }
-
-        String name = ent.substring(1, ent.length() - 1);
-        for (int i = 0; i < knownEntities.length; i++) {
-            if (name.equals(knownEntities[i])) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Is the given character allowed inside an XML document?
-     *
-     * <p>See XML 1.0 2.2 <a
-     * href="http://www.w3.org/TR/1998/REC-xml-19980210#charsets">
-     * http://www.w3.org/TR/1998/REC-xml-19980210#charsets</a>.</p>
-     *
-     * @since 1.10, Ant 1.5
-     */
-    public boolean isLegalCharacter(char c) {
-        if (c == 0x9 || c == 0xA || c == 0xD) {
-            return true;
-        } else if (c < 0x20) {
-            return false;
-        } else if (c <= 0xD7FF) {
-            return true;
-        } else if (c < 0xE000) {
-            return false;
-        } else if (c <= 0xFFFD) {
-            return true;
-        }
-        return false;
-    }
-}
diff --git a/src/main/org/apache/tools/ant/util/DateUtils.java b/src/main/org/apache/tools/ant/util/DateUtils.java
deleted file mode 100644
index 128b950..0000000
--- a/src/main/org/apache/tools/ant/util/DateUtils.java
+++ /dev/null
@@ -1,222 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.util;
-
-import java.text.ChoiceFormat;
-import java.text.DateFormat;
-import java.text.MessageFormat;
-import java.text.SimpleDateFormat;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.TimeZone;
-
-/**
- * Helper methods to deal with date/time formatting with a specific
- * defined format (<a href="http://www.w3.org/TR/NOTE-datetime">ISO8601</a>)
- * or a plurialization correct elapsed time in minutes and seconds.
- *
- * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- *
- * @since Ant 1.5
- * 
- * @version $Revision$
- */
-public final class DateUtils {
-
-    /**
-     * ISO8601-like pattern for date-time. It does not support timezone.
-     *  <tt>yyyy-MM-ddTHH:mm:ss</tt>
-     */
-    public static final String ISO8601_DATETIME_PATTERN
-            = "yyyy-MM-dd'T'HH:mm:ss";
-
-    /**
-     * ISO8601-like pattern for date. <tt>yyyy-MM-dd</tt>
-     */
-    public static final String ISO8601_DATE_PATTERN
-            = "yyyy-MM-dd";
-
-    /**
-     * ISO8601-like pattern for time.  <tt>HH:mm:ss</tt>
-     */
-    public static final String ISO8601_TIME_PATTERN
-            = "HH:mm:ss";
-
-
-// code from Magesh moved from DefaultLogger and slightly modified
-    private static final MessageFormat MINUTE_SECONDS
-            = new MessageFormat("{0}{1}");
-
-    private static final double[] LIMITS = {0, 1, 2};
-
-    private static final String[] MINUTES_PART =
-            {"", "1 minute ", "{0,number} minutes "};
-
-    private static final String[] SECONDS_PART =
-            {"0 seconds", "1 second", "{1,number} seconds"};
-
-    private static final ChoiceFormat MINUTES_FORMAT =
-            new ChoiceFormat(LIMITS, MINUTES_PART);
-
-    private static final ChoiceFormat SECONDS_FORMAT =
-            new ChoiceFormat(LIMITS, SECONDS_PART);
-
-    static {
-        MINUTE_SECONDS.setFormat(0, MINUTES_FORMAT);
-        MINUTE_SECONDS.setFormat(1, SECONDS_FORMAT);
-    }
-
-    /** private constructor */
-    private DateUtils() {
-    }
-
-
-    /**
-     * Format a date/time into a specific pattern.
-     * @param date the date to format expressed in milliseconds.
-     * @param pattern the pattern to use to format the date.
-     * @return the formatted date.
-     */
-    public static String format(long date, String pattern) {
-        return format(new Date(date), pattern);
-    }
-
-
-    /**
-     * Format a date/time into a specific pattern.
-     * @param date the date to format expressed in milliseconds.
-     * @param pattern the pattern to use to format the date.
-     * @return the formatted date.
-     */
-    public static String format(Date date, String pattern) {
-        DateFormat df = createDateFormat(pattern);
-        return df.format(date);
-    }
-
-
-    /**
-     * Format an elapsed time into a plurialization correct string.
-     * It is limited only to report elapsed time in minutes and
-     * seconds and has the following behavior.
-     * <ul>
-     * <li>minutes are not displayed when 0. (ie: "45 seconds")</li>
-     * <li>seconds are always displayed in plural form (ie "0 seconds" or
-     * "10 seconds") except for 1 (ie "1 second")</li>
-     * </ul>
-     * @param time the elapsed time to report in milliseconds.
-     * @return the formatted text in minutes/seconds.
-     */
-    public static String formatElapsedTime(long millis) {
-        long seconds = millis / 1000;
-        long minutes = seconds / 60;
-        Object[] args = {new Long(minutes), new Long(seconds % 60)};
-        return MINUTE_SECONDS.format(args);
-    }
-
-    /**
-     * return a lenient date format set to GMT time zone.
-     * @param pattern the pattern used for date/time formatting.
-     * @return the configured format for this pattern.
-     */
-    private static DateFormat createDateFormat(String pattern) {
-        SimpleDateFormat sdf = new SimpleDateFormat(pattern);
-        TimeZone gmt = TimeZone.getTimeZone("GMT");
-        sdf.setTimeZone(gmt);
-        sdf.setLenient(true);
-        return sdf;
-    }
-
-    /**
-     * Calculate the phase of the moon for a given date.
-     *
-     * <p>Code heavily influenced by hacklib.c in <a
-     * href="http://www.nethack.org/">Nethack</a></p>
-     *
-     * <p>The Algorithm:
-     *
-     * <pre>
-     * moon period = 29.53058 days ~= 30, year = 365.2422 days
-     *
-     * days moon phase advances on first day of year compared to preceding year
-     *  = 365.2422 - 12*29.53058 ~= 11
-     *
-     * years in Metonic cycle (time until same phases fall on the same days of
-     *  the month) = 18.6 ~= 19
-     *
-     * moon phase on first day of year (epact) ~= (11*(year%19) + 18) % 30
-     *  (18 as initial condition for 1900)
-     *
-     * current phase in days = first day phase + days elapsed in year
-     *
-     * 6 moons ~= 177 days
-     * 177 ~= 8 reported phases * 22
-     * + 11/22 for rounding
-     * </pre>
-     *
-     * @return The phase of the moon as a number between 0 and 7 with
-     *         0 meaning new moon and 4 meaning full moon.
-     *
-     * @since 1.2, Ant 1.5
-     */
-    public static int getPhaseOfMoon(Calendar cal) {
-        int dayOfTheYear = cal.get(Calendar.DAY_OF_YEAR);
-        int yearInMetonicCycle = ((cal.get(Calendar.YEAR) - 1900) % 19) + 1;
-        int epact = (11 * yearInMetonicCycle + 18) % 30;
-        if ((epact == 25 && yearInMetonicCycle > 11) || epact == 24) {
-            epact++;
-        }
-        return (((((dayOfTheYear + epact) * 6) + 11) % 177) / 22) & 7;
-    }
-}
diff --git a/src/main/org/apache/tools/ant/util/FileNameMapper.java b/src/main/org/apache/tools/ant/util/FileNameMapper.java
deleted file mode 100644
index 2ad493f..0000000
--- a/src/main/org/apache/tools/ant/util/FileNameMapper.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.util;
-
-/**
- * Interface to be used by SourceFileScanner.
- *
- * <p>Used to find the name of the target file(s) corresponding to a
- * source file.</p>
- *
- * <p>The rule by which the file names are transformed is specified
- * via the setFrom and setTo methods. The exact meaning of these is
- * implementation dependent.</p>
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- */
-public interface FileNameMapper {
-
-    /**
-     * Sets the from part of the transformation rule.
-     */
-    void setFrom(String from);
-
-    /**
-     * Sets the to part of the transformation rule.
-     */
-    void setTo(String to);
-
-    /**
-     * Returns an array containing the target filename(s) for the
-     * given source file.
-     *
-     * <p>if the given rule doesn't apply to the source file,
-     * implementation must return null. SourceFileScanner will then
-     * omit the source file in question.</p> 
-     *
-     * @param sourceFileName the name of the source file relative to
-     *                       some given basedirectory.
-     */
-    String[] mapFileName(String sourceFileName);
-}
diff --git a/src/main/org/apache/tools/ant/util/FileUtils.java b/src/main/org/apache/tools/ant/util/FileUtils.java
deleted file mode 100644
index cb8acbb..0000000
--- a/src/main/org/apache/tools/ant/util/FileUtils.java
+++ /dev/null
@@ -1,835 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.util;
-
-import java.io.BufferedInputStream;
-import java.io.BufferedReader;
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.FileReader;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.OutputStreamWriter;
-import java.io.Reader;
-
-import java.lang.reflect.Method;
-import java.text.DecimalFormat;
-import java.util.Random;
-import java.util.Stack;
-import java.util.StringTokenizer;
-import java.util.Vector;
-import java.net.URL;
-import java.net.MalformedURLException;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.filters.util.ChainReaderHelper;
-import org.apache.tools.ant.types.FilterSetCollection;
-import org.apache.tools.ant.taskdefs.condition.Os;
-
-/**
- * This class also encapsulates methods which allow Files to be
- * refered to using abstract path names which are translated to native
- * system file paths at runtime as well as copying files or setting
- * there last modification time.
- *
- * @author duncan@x180.com
- * @author Conor MacNeill
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- * @author <a href="mailto:umagesh@apache.org">Magesh Umasankar</a>
- * @author <a href="mailto:jtulley@novell.com">Jeff Tulley</a> 
- *
- * @version $Revision$
- */
-
-public class FileUtils {
-    private static Random rand = new Random(System.currentTimeMillis());
-    private static Object lockReflection = new Object();
-    private static java.lang.reflect.Method setLastModified = null;
-
-    private boolean onNetWare = Os.isFamily("netware");
-
-    /**
-     * Factory method.
-     */
-    public static FileUtils newFileUtils() {
-        return new FileUtils();
-    }
-
-    /**
-     * Empty constructor.
-     */
-    protected FileUtils() {}
-
-    /**
-     * Get the URL for a file taking into account # characters
-     *
-     * @param file the file whose URL representation is required.
-     * @return The FileURL value
-     * @throws MalformedURLException if the URL representation cannot be
-     *      formed.
-     */
-    public URL getFileURL(File file) throws MalformedURLException {
-        String uri = "file:" + file.getAbsolutePath().replace('\\', '/');
-        for (int i = uri.indexOf('#'); i != -1; i = uri.indexOf('#')) {
-            uri = uri.substring(0, i) + "%23" + uri.substring(i + 1);
-        }
-        if (file.isDirectory()) {
-            uri += "/";
-        }
-        return new URL(uri);
-    }
-    
-    /**
-     * Convienence method to copy a file from a source to a destination.
-     * No filtering is performed.
-     *
-     * @throws IOException
-     */
-    public void copyFile(String sourceFile, String destFile) throws IOException {
-        copyFile(new File(sourceFile), new File(destFile), null, false, false);
-    }
-
-    /**
-     * Convienence method to copy a file from a source to a destination
-     * specifying if token filtering must be used.
-     *
-     * @throws IOException
-     */
-    public void copyFile(String sourceFile, String destFile, FilterSetCollection filters)
-        throws IOException {
-        copyFile(new File(sourceFile), new File(destFile), filters, false, false);
-    }
-
-    /**
-     * Convienence method to copy a file from a source to a
-     * destination specifying if token filtering must be used and if
-     * source files may overwrite newer destination files.
-     *
-     * @throws IOException
-     */
-    public void copyFile(String sourceFile, String destFile, FilterSetCollection filters,
-                         boolean overwrite) throws IOException {
-        copyFile(new File(sourceFile), new File(destFile), filters,
-                 overwrite, false);
-    }
-
-     /**
-     * Convienence method to copy a file from a source to a
-     * destination specifying if token filtering must be used, if
-     * source files may overwrite newer destination files and the
-     * last modified time of <code>destFile</code> file should be made equal
-     * to the last modified time of <code>sourceFile</code>.
-     *
-     * @throws IOException
-     */
-    public void copyFile(String sourceFile, String destFile, FilterSetCollection filters,
-                         boolean overwrite, boolean preserveLastModified)
-        throws IOException {
-        copyFile(new File(sourceFile), new File(destFile), filters,
-                 overwrite, preserveLastModified);
-    }
-
-    /**
-     * Convienence method to copy a file from a source to a
-     * destination specifying if token filtering must be used, if
-     * source files may overwrite newer destination files and the
-     * last modified time of <code>destFile</code> file should be made equal
-     * to the last modified time of <code>sourceFile</code>.
-     *
-     * @throws IOException
-     *
-     * @since 1.14, Ant 1.5
-     */
-    public void copyFile(String sourceFile, String destFile,
-                         FilterSetCollection filters, boolean overwrite,
-                         boolean preserveLastModified, String encoding)
-        throws IOException {
-        copyFile(new File(sourceFile), new File(destFile), filters,
-                 overwrite, preserveLastModified, encoding);
-    }
-
-    /**
-     * Convienence method to copy a file from a source to a
-     * destination specifying if token filtering must be used, if
-     * filter chains must be used, if source files may overwrite
-     * newer destination files and the last modified time of
-     * <code>destFile</code> file should be made equal
-     * to the last modified time of <code>sourceFile</code>.
-     *
-     * @throws IOException
-     *
-     * @since 1.15, Ant 1.5
-     */
-    public void copyFile(String sourceFile, String destFile,
-                         FilterSetCollection filters, Vector filterChains,
-                         boolean overwrite, boolean preserveLastModified,
-                         String encoding, Project project)
-        throws IOException {
-        copyFile(new File(sourceFile), new File(destFile), filters,
-                 filterChains, overwrite, preserveLastModified,
-                 encoding, project);
-    }
-
-    /**
-     * Convienence method to copy a file from a source to a destination.
-     * No filtering is performed.
-     *
-     * @throws IOException
-     */
-    public void copyFile(File sourceFile, File destFile) throws IOException {
-        copyFile(sourceFile, destFile, null, false, false);
-    }
-
-    /**
-     * Convienence method to copy a file from a source to a destination
-     * specifying if token filtering must be used.
-     *
-     * @throws IOException
-     */
-    public void copyFile(File sourceFile, File destFile, FilterSetCollection filters)
-        throws IOException {
-        copyFile(sourceFile, destFile, filters, false, false);
-    }
-
-    /**
-     * Convienence method to copy a file from a source to a
-     * destination specifying if token filtering must be used and if
-     * source files may overwrite newer destination files.
-     *
-     * @throws IOException
-     */
-    public void copyFile(File sourceFile, File destFile, FilterSetCollection filters,
-                         boolean overwrite) throws IOException {
-        copyFile(sourceFile, destFile, filters, overwrite, false);
-    }
-
-    /**
-     * Convienence method to copy a file from a source to a
-     * destination specifying if token filtering must be used, if
-     * source files may overwrite newer destination files and the
-     * last modified time of <code>destFile</code> file should be made equal
-     * to the last modified time of <code>sourceFile</code>.
-     *
-     * @throws IOException
-     */
-    public void copyFile(File sourceFile, File destFile, FilterSetCollection filters,
-                         boolean overwrite, boolean preserveLastModified)
-        throws IOException {
-        copyFile(sourceFile, destFile, filters, overwrite,
-                 preserveLastModified, null);
-    }
-
-    /**
-     * Convienence method to copy a file from a source to a
-     * destination specifying if token filtering must be used, if
-     * source files may overwrite newer destination files, the last
-     * modified time of <code>destFile</code> file should be made
-     * equal to the last modified time of <code>sourceFile</code> and
-     * which character encoding to assume.
-     *
-     * @throws IOException
-     *
-     * @since 1.14, Ant 1.5
-     */
-    public void copyFile(File sourceFile, File destFile,
-                         FilterSetCollection filters, boolean overwrite,
-                         boolean preserveLastModified, String encoding)
-        throws IOException {
-        copyFile(sourceFile, destFile, filters, null, overwrite,
-                 preserveLastModified, encoding, null);
-    }
-
-    /**
-     * Convienence method to copy a file from a source to a
-     * destination specifying if token filtering must be used, if
-     * filter chains must be used, if source files may overwrite
-     * newer destination files and the last modified time of
-     * <code>destFile</code> file should be made equal
-     * to the last modified time of <code>sourceFile</code>.
-     *
-     * @throws IOException
-     *
-     * @since 1.15, Ant 1.5
-     */
-    public void copyFile(File sourceFile, File destFile,
-                         FilterSetCollection filters, Vector filterChains,
-                         boolean overwrite, boolean preserveLastModified,
-                         String encoding, Project project)
-        throws IOException {
-
-        if (overwrite || !destFile.exists() ||
-            destFile.lastModified() < sourceFile.lastModified()) {
-
-            if (destFile.exists() && destFile.isFile()) {
-                destFile.delete();
-            }
-
-            // ensure that parent dir of dest file exists!
-            // not using getParentFile method to stay 1.1 compat
-            File parent = getParentFile(destFile);
-            if (!parent.exists()) {
-                parent.mkdirs();
-            }
-
-            final boolean filterSetsAvailable = (filters != null
-                                                 && filters.hasFilters());
-            final boolean filterChainsAvailable = (filterChains != null
-                                                   && filterChains.size() > 0);
-
-            if (filterSetsAvailable || filterChainsAvailable) {
-                BufferedReader in = null;
-                BufferedWriter out = null;
-
-                try {
-                    if (encoding == null) {
-                        in = new BufferedReader(new FileReader(sourceFile));
-                        out = new BufferedWriter(new FileWriter(destFile));
-                    } else {
-                        in = 
-                            new BufferedReader(new InputStreamReader(
-                                                 new FileInputStream(sourceFile), 
-                                                 encoding));
-                        out = 
-                            new BufferedWriter(new OutputStreamWriter(
-                                                 new FileOutputStream(destFile), 
-                                                 encoding));
-                    }
-
-                    if (filterChainsAvailable) {
-                        ChainReaderHelper crh = new ChainReaderHelper();
-                        crh.setBufferSize(8192);
-                        crh.setPrimaryReader(in);
-                        crh.setFilterChains(filterChains);
-                        crh.setProject(project);
-                        Reader rdr = crh.getAssembledReader();
-                        in = new BufferedReader(rdr);
-                    }
-                    
-                    int length;
-                    String newline = null;
-                    String line = in.readLine();
-                    while (line != null) {
-                        if (line.length() == 0) {
-                            out.newLine();
-                        } else {
-                            if (filterSetsAvailable) {
-                                newline = filters.replaceTokens(line);
-                            } else {
-                                newline = line;
-                            }
-                            out.write(newline);
-                            out.newLine();
-                        }
-                        line = in.readLine();
-                    }
-                } finally {
-                    if (out != null) {
-                        out.close();
-                    }
-                    if (in != null) {
-                        in.close();
-                    }
-                }
-            } else {
-                FileInputStream in = null;
-                FileOutputStream out = null;
-                try {
-                    in = new FileInputStream(sourceFile);
-                    out = new FileOutputStream(destFile);
-
-                    byte[] buffer = new byte[8 * 1024];
-                    int count = 0;
-                    do {
-                        out.write(buffer, 0, count);
-                        count = in.read(buffer, 0, buffer.length);
-                    } while (count != -1);
-                } finally {
-                    if (out != null) {
-                        out.close();
-                    }
-                    if (in != null) {
-                        in.close();
-                    }
-                }
-            }
-
-            if (preserveLastModified) {
-                setFileLastModified(destFile, sourceFile.lastModified());
-            }
-        }
-    }
-
-    /**
-     * see whether we have a setLastModified method in File and return it.
-     */
-    protected final Method getSetLastModified() {
-        if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_1)) {
-            return null;
-        }
-        if (setLastModified == null) {
-            synchronized (lockReflection) {
-                if (setLastModified == null) {
-                    try {
-                        setLastModified =
-                            java.io.File.class.getMethod("setLastModified",
-                                                         new Class[] {Long.TYPE});
-                    } catch (NoSuchMethodException nse) {
-                        throw new BuildException("File.setlastModified not in JDK > 1.1?",
-                                                 nse);
-                    }
-                }
-            }
-        }
-        return setLastModified;
-    }
-
-    /**
-     * Calls File.setLastModified(long time) in a Java 1.1 compatible way.
-     */
-    public void setFileLastModified(File file, long time) throws BuildException {
-        if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_1)) {
-            return;
-        }
-        Long[] times = new Long[1];
-        if (time < 0) {
-            times[0] = new Long(System.currentTimeMillis());
-        } else {
-            times[0] = new Long(time);
-        }
-
-        try {
-            getSetLastModified().invoke(file, times);
-        } catch (java.lang.reflect.InvocationTargetException ite) {
-            Throwable nested = ite.getTargetException();
-            throw new BuildException("Exception setting the modification time "
-                                     + "of " + file, nested);
-        } catch (Throwable other) {
-            throw new BuildException("Exception setting the modification time "
-                                     + "of " + file, other);
-        }
-    }
-
-    /**
-     * Interpret the filename as a file relative to the given file -
-     * unless the filename already represents an absolute filename.
-     *
-     * @param file the "reference" file for relative paths. This
-     * instance must be an absolute file and must not contain
-     * &quot;./&quot; or &quot;../&quot; sequences (same for \ instead
-     * of /).  If it is null, this call is equivalent to
-     * <code>new java.io.File(filename)</code>.
-     *
-     * @param filename a file name
-     *
-     * @return an absolute file that doesn't contain &quot;./&quot; or
-     * &quot;../&quot; sequences and uses the correct separator for
-     * the current platform.
-     */
-    public File resolveFile(File file, String filename) {
-        filename = filename.replace('/', File.separatorChar)
-            .replace('\\', File.separatorChar);
-
-        // deal with absolute files
-        if (!onNetWare) {
-            if (filename.startsWith(File.separator) 
-                || (filename.length() >= 2 
-                    && Character.isLetter(filename.charAt(0)) 
-                    && filename.charAt(1) == ':')) {
-                return normalize(filename);
-            }
-        } else {
-            // the assumption that the : will appear as the second character in
-            // the path name breaks down when NetWare is a supported platform.
-            // Netware volumes are of the pattern: "data:\"
-            int colon = filename.indexOf(":");
-            if (filename.startsWith(File.separator) 
-                || (colon > -1)) {
-                return normalize(filename);
-            }
-        }
-
-        if (file == null) {
-            return new File(filename);
-        }
-
-        File helpFile = new File(file.getAbsolutePath());
-        StringTokenizer tok = new StringTokenizer(filename, File.separator);
-        while (tok.hasMoreTokens()) {
-            String part = tok.nextToken();
-            if (part.equals("..")) {
-                helpFile = getParentFile(helpFile);
-                if (helpFile == null) {
-                    String msg = "The file or path you specified ("
-                        + filename + ") is invalid relative to "
-                        + file.getPath();
-                    throw new BuildException(msg);
-                }
-            } else if (part.equals(".")) {
-                // Do nothing here
-            } else {
-                helpFile = new File(helpFile, part);
-            }
-        }
-
-        return new File(helpFile.getAbsolutePath());
-    }
-
-    /**
-     * &quot;normalize&quot; the given absolute path.
-     *
-     * <p>This includes:
-     * <ul>
-     *   <li>Uppercase the drive letter if there is one.</li>
-     *   <li>Remove redundant slashes after the drive spec.</li>
-     *   <li>resolve all ./, .\, ../ and ..\ sequences.</li>
-     *   <li>DOS style paths that start with a drive letter will have
-     *     \ as the separator.</li>
-     * </ul>
-     *
-     * @throws java.lang.NullPointerException if the file path is
-     * equal to null.
-     */
-    public File normalize(String path) {
-        String orig = path;
-
-        path = path.replace('/', File.separatorChar)
-            .replace('\\', File.separatorChar);
-
-        // make sure we are dealing with an absolute path
-        int colon = path.indexOf(":");
-
-        if (!onNetWare) {
-            if (!path.startsWith(File.separator) &&
-                !(path.length() >= 2 &&
-                   Character.isLetter(path.charAt(0)) &&
-                   colon == 1)) {
-                String msg = path + " is not an absolute path";
-                throw new BuildException(msg);
-            }
-        } else {
-            if (!path.startsWith(File.separator) 
-                && (colon == -1)) {
-                String msg = path + " is not an absolute path";
-                throw new BuildException(msg);
-            }
-        }
-
-        boolean dosWithDrive = false;
-        String root = null;
-        // Eliminate consecutive slashes after the drive spec
-        if ((!onNetWare && 
-             path.length() >= 2 &&
-             Character.isLetter(path.charAt(0)) &&
-             path.charAt(1) == ':') ||
-            (onNetWare && colon > -1)) {
-
-            dosWithDrive = true;
-
-            char[] ca = path.replace('/', '\\').toCharArray();
-            StringBuffer sbRoot = new StringBuffer();
-            for (int i = 0; i < colon; i++) {
-                sbRoot.append(Character.toUpperCase(ca[i]));
-            }
-            sbRoot.append(':');
-            if (colon + 1 < path.length()) {
-                sbRoot.append(File.separatorChar);
-            }
-            root = sbRoot.toString();
-
-            // Eliminate consecutive slashes after the drive spec
-            StringBuffer sbPath = new StringBuffer();
-            for (int i = colon + 1; i < ca.length; i++) {
-                if ((ca[i] != '\\') ||
-                    (ca[i] == '\\' && ca[i - 1] != '\\')) {
-                    sbPath.append(ca[i]);
-                }
-            }
-            path = sbPath.toString().replace('\\', File.separatorChar);
-
-        } else {
-            if (path.length() == 1) {
-                root = File.separator;
-                path = "";
-            } else if (path.charAt(1) == File.separatorChar) {
-                // UNC drive
-                root = File.separator + File.separator;
-                path = path.substring(2);
-            } else {
-                root = File.separator;
-                path = path.substring(1);
-            }
-        }
-
-        Stack s = new Stack();
-        s.push(root);
-        StringTokenizer tok = new StringTokenizer(path, File.separator);
-        while (tok.hasMoreTokens()) {
-            String thisToken = tok.nextToken();
-            if (".".equals(thisToken)) {
-                continue;
-            } else if ("..".equals(thisToken)) {
-                if (s.size() < 2) {
-                    throw new BuildException("Cannot resolve path " + orig);
-                } else {
-                    s.pop();
-                }
-            } else { // plain component
-                s.push(thisToken);
-            }
-        }
-
-        StringBuffer sb = new StringBuffer();
-        for (int i = 0; i < s.size(); i++) {
-            if (i > 1) {
-                // not before the filesystem root and not after it, since root
-                // already contains one
-                sb.append(File.separatorChar);
-            }
-            sb.append(s.elementAt(i));
-        }
-
-
-        path = sb.toString();
-        if (dosWithDrive) {
-            path = path.replace('/', '\\');
-        }
-        return new File(path);
-    }
-
-    /**
-     * Create a temporary file in a given directory.
-     *
-     * <p>The file denoted by the returned abstract pathname did not
-     * exist before this method was invoked, any subsequent invocation
-     * of this method will yield a different file name.</p>
-     *
-     * <p>This method is different to File.createTempFile of JDK 1.2
-     * as it doesn't create the file itself and doesn't use platform
-     * specific temporary directory when the parentDir attribute is
-     * null.</p>
-     *
-     * @param parentDir Directory to create the temporary file in -
-     * current working directory will be assumed if this parameter is
-     * null.
-     *
-     * @since 1.8
-     */
-    public File createTempFile(String prefix, String suffix, File parentDir) {
-
-        File result = null;
-        String parent = null;
-        if (parentDir != null) {
-            parent = parentDir.getPath();
-        }
-        DecimalFormat fmt = new DecimalFormat("#####");
-        synchronized (rand) {
-            do {
-                result = new File(parent,
-                                  prefix + fmt.format(rand.nextInt())
-                                  + suffix);
-            } while (result.exists());
-        }
-        return result;
-    }
-
-    /**
-     * Compares the contents of two files.
-     *
-     * <p>simple but sub-optimal comparision algorithm.  written for
-     * working rather than fast. Better would be a block read into
-     * buffers followed by long comparisions apart from the final 1-7
-     * bytes.</p>
-     *
-     * @since 1.9
-     */
-    public boolean contentEquals(File f1, File f2) throws IOException {
-        if (f1.exists() != f2.exists()) {
-            return false;
-        }
-
-        if (!f1.exists()) {
-            // two not existing files are equal
-            return true;
-        }
-
-        if (f1.isDirectory() || f2.isDirectory()) {
-            // don't want to compare directory contents for now
-            return false;
-        }
-
-        if (f1.equals(f2)) {
-            // same filename => true
-            return true;
-        }
-
-        if (f1.length() != f2.length()) {
-            // different size =>false
-            return false;
-        }
-
-        InputStream in1 = null;
-        InputStream in2 = null;
-        try {
-            in1 = new BufferedInputStream(new FileInputStream(f1));
-            in2 = new BufferedInputStream(new FileInputStream(f2));
-
-            int expectedByte = in1.read();
-            while (expectedByte != -1) {
-                if (expectedByte != in2.read()) {
-                    return false;
-                }
-                expectedByte = in1.read();
-            }
-            if (in2.read() != -1) {
-                return false;
-            }
-            return true;
-        } finally {
-            if (in1 != null) {
-                try {
-                    in1.close();
-                } catch (IOException e) {}
-            }
-            if (in2 != null) {
-                try {
-                    in2.close();
-                } catch (IOException e) {}
-            }
-        }
-    }
-
-    /**
-     * Emulation of File.getParentFile for JDK 1.1
-     *
-     * @since 1.10
-     */
-    public File getParentFile(File f) {
-        if (f != null) {
-            String p = f.getParent();
-            if (p != null) {
-                return new File(p);
-            }
-        }
-        return null;
-    }
-
-    /**
-     * Read from reader till EOF
-     */
-    public static final String readFully(Reader rdr) throws IOException {
-        return readFully(rdr, 8192);
-    }
-
-    /**
-     * Read from reader till EOF
-     */
-    public static final String readFully(Reader rdr, int bufferSize) throws IOException {
-        final char[] buffer = new char[bufferSize];
-        int bufferLength = 0;
-        String text = null;
-        StringBuffer textBuffer = null;
-        while (bufferLength != -1) {
-            bufferLength = rdr.read(buffer);
-            if (bufferLength != -1) {
-                if (textBuffer == null) {
-                    textBuffer = new StringBuffer(
-                                    new String(buffer, 0, bufferLength));
-                } else {
-                    textBuffer.append(new String(buffer, 0, bufferLength));
-                }
-            }
-        }
-        if (textBuffer != null) {
-            text = textBuffer.toString();
-        }
-        return text;
-    }
-
-    /**
-     * Emulation of File.createNewFile for JDK 1.1.
-     *
-     * <p>This method does <strong>not</strong> guarantee that the
-     * operation is atomic.</p>
-     *
-     * @since 1.21, Ant 1.5
-     */
-    public boolean createNewFile(File f) throws IOException {
-        if (f != null) {
-            if (f.exists()) {
-                return false;
-            }
-            
-            FileOutputStream fos = null;
-            try {
-                fos = new FileOutputStream(f);
-                fos.write(new byte[0]);
-            } finally {
-                if (fos != null) {
-                    fos.close();
-                }
-            }
-            
-            return true;
-        }
-        return false;
-    }
-
-}
-
diff --git a/src/main/org/apache/tools/ant/util/FlatFileNameMapper.java b/src/main/org/apache/tools/ant/util/FlatFileNameMapper.java
deleted file mode 100644
index 4412d17..0000000
--- a/src/main/org/apache/tools/ant/util/FlatFileNameMapper.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.util;
-
-/**
- * Implementation of FileNameMapper that always returns the source
- * file name without any leading directory information.
- *
- * <p>This is the default FileNameMapper for the copy and move
- * tasks if the flatten attribute has been set.</p>
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- */
-public class FlatFileNameMapper implements FileNameMapper {
-
-    /**
-     * Ignored.
-     */
-    public void setFrom(String from) {}
-
-    /**
-     * Ignored.
-     */
-    public void setTo(String to) {}
-
-    /**
-     * Returns an one-element array containing the source file name
-     * without any leading directory information.
-     */
-    public String[] mapFileName(String sourceFileName) {
-        return new String[] {new java.io.File(sourceFileName).getName()};
-    }
-}
diff --git a/src/main/org/apache/tools/ant/util/GlobPatternMapper.java b/src/main/org/apache/tools/ant/util/GlobPatternMapper.java
deleted file mode 100644
index 0e78fb3..0000000
--- a/src/main/org/apache/tools/ant/util/GlobPatternMapper.java
+++ /dev/null
@@ -1,156 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000,2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.util;
-
-/**
- * Implementation of FileNameMapper that does simple wildcard pattern
- * replacements.
- *
- * <p>This does simple translations like *.foo -> *.bar where the
- * prefix to .foo will be left unchanged. It only handles a single *
- * character, use regular expressions for more complicated
- * situations.</p>
- *
- * <p>This is one of the more useful Mappers, it is used by javac for
- * example.</p>
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- */
-public class GlobPatternMapper implements FileNameMapper {
-    /**
-     * Part of &quot;from&quot; pattern before the *.
-     */
-    protected String fromPrefix = null;
-
-    /**
-     * Part of &quot;from&quot; pattern after the *.
-     */
-    protected String fromPostfix = null;
-    
-    /**
-     * Length of the prefix (&quot;from&quot; pattern).
-     */
-    protected int prefixLength;
-
-    /**
-     * Length of the postfix (&quot;from&quot; pattern).
-     */
-    protected int postfixLength;
-
-    /**
-     * Part of &quot;to&quot; pattern before the *.
-     */
-    protected String toPrefix = null;
-
-    /**
-     * Part of &quot;to&quot; pattern after the *.
-     */
-    protected String toPostfix = null;
-    
-    /**
-     * Sets the &quot;from&quot; pattern. Required.
-     */
-    public void setFrom(String from) {
-        int index = from.lastIndexOf("*");
-        if (index == -1) {
-            fromPrefix = from;
-            fromPostfix = "";
-        } else {
-            fromPrefix = from.substring(0, index);
-            fromPostfix = from.substring(index + 1);
-        }
-        prefixLength = fromPrefix.length();
-        postfixLength = fromPostfix.length();
-    }
-
-    /**
-     * Sets the &quot;to&quot; pattern. Required.
-     */
-    public void setTo(String to) {
-        int index = to.lastIndexOf("*");
-        if (index == -1) {
-            toPrefix = to;
-            toPostfix = "";
-        } else {
-            toPrefix = to.substring(0, index);
-            toPostfix = to.substring(index + 1);
-        }
-    }
-
-    /**
-     * Returns null if the source file name doesn't match the
-     * &quot;from&quot; pattern, an one-element array containing the
-     * translated file otherwise.
-     */
-    public String[] mapFileName(String sourceFileName) {
-        if (fromPrefix == null 
-            || !sourceFileName.startsWith(fromPrefix) 
-            || !sourceFileName.endsWith(fromPostfix)) {
-            return null;
-        }
-        return new String[] {toPrefix 
-                                 + extractVariablePart(sourceFileName)
-                                 + toPostfix};
-    }
-
-    /**
-     * Returns the part of the given string that matches the * in the
-     * &quot;from&quot; pattern.
-     */
-    protected String extractVariablePart(String name) {
-        return name.substring(prefixLength,
-                              name.length() - postfixLength);
-    }
-}
diff --git a/src/main/org/apache/tools/ant/util/IdentityMapper.java b/src/main/org/apache/tools/ant/util/IdentityMapper.java
deleted file mode 100644
index 587150a..0000000
--- a/src/main/org/apache/tools/ant/util/IdentityMapper.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.util;
-
-/**
- * Implementation of FileNameMapper that always returns the source file name.
- *
- * <p>This is the default FileNameMapper for the copy and move
- * tasks.</p>
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- */
-public class IdentityMapper implements FileNameMapper {
-
-    /**
-     * Ignored.
-     */
-    public void setFrom(String from) {}
-
-    /**
-     * Ignored.
-     */
-    public void setTo(String to) {}
-
-    /**
-     * Returns an one-element array containing the source file name.
-     */
-    public String[] mapFileName(String sourceFileName) {
-        return new String[] {sourceFileName};
-    }
-}
diff --git a/src/main/org/apache/tools/ant/util/JAXPUtils.java b/src/main/org/apache/tools/ant/util/JAXPUtils.java
deleted file mode 100644
index 840daa5..0000000
--- a/src/main/org/apache/tools/ant/util/JAXPUtils.java
+++ /dev/null
@@ -1,183 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.util;
-
-import org.apache.tools.ant.BuildException;
-
-import org.xml.sax.Parser;
-import org.xml.sax.SAXException;
-import org.xml.sax.XMLReader;
-
-import javax.xml.parsers.SAXParserFactory;
-import javax.xml.parsers.SAXParser;
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.parsers.FactoryConfigurationError;
-
-/**
- * Collection of helper methods that retrieve a ParserFactory or
- * Parsers and Readers.
- *
- * <p>This class will create only a single factory instance.</p>
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- *
- * @since Ant 1.5
- */
-public class JAXPUtils {
-
-    /**
-     * Parser factory to use to create parsers.
-     * @see #getParserFactory
-     *
-     * @since Ant 1.5
-     */
-    private static SAXParserFactory parserFactory = null;
-
-    /**
-     * Returns the parser factory to use. Only one parser factory is
-     * ever created by this method and is then cached for future use.
-     *
-     * @return a SAXParserFactory to use
-     *
-     * @since Ant 1.5
-     */
-    public synchronized static SAXParserFactory getParserFactory() 
-        throws BuildException {
-
-        if (parserFactory == null) {
-            parserFactory = newParserFactory();
-        }
-        return parserFactory;
-    }
-
-    /**
-     * Returns a new  parser factory instance.
-     *
-     * @since Ant 1.5
-     */
-    public static SAXParserFactory newParserFactory() throws BuildException {
-
-        try {
-            return SAXParserFactory.newInstance();
-        } catch (FactoryConfigurationError e) {
-            throw new BuildException("XML parser factory has not been "
-                                     + "configured correctly: " 
-                                     + e.getMessage(), e);
-        }
-    }
-
-    /**
-     * Returns a newly created SAX 1 Parser, using the default parser
-     * factory.
-     *
-     * @return a SAX 1 Parser.
-     * @see #getParserFactory
-     * @since Ant 1.5
-     */
-    public static Parser getParser() throws BuildException {
-        try {
-            return newSAXParser().getParser();
-        } catch (SAXException e) {
-            throw convertToBuildException(e);
-        }
-    }
-
-    /**
-     * Returns a newly created SAX 2 XMLReader, using the default parser
-     * factory.
-     *
-     * @return a SAX 2 XMLReader.
-     * @see #getParserFactory
-     * @since Ant 1.5
-     */
-    public static XMLReader getXMLReader() throws BuildException {
-        try {
-            return newSAXParser().getXMLReader();
-        } catch (SAXException e) {
-            throw convertToBuildException(e);
-        }
-    }
-
-    /**
-     * @return a new SAXParser instance as helper for getParser and
-     * getXMLReader.
-     *
-     * @since Ant 1.5
-     */
-    private static SAXParser newSAXParser() throws BuildException {
-        try {
-            return getParserFactory().newSAXParser();
-        } catch (ParserConfigurationException e) {
-            throw new BuildException("Cannot create parser for the given "
-                                     + "configuration: " + e.getMessage(), e);
-        } catch (SAXException e) {
-            throw convertToBuildException(e);
-        }
-    }
-
-    /**
-     * Translate a SAXException into a BuildException
-     *
-     * @since Ant 1.5
-     */
-    private static BuildException convertToBuildException(SAXException e) {
-        Exception nested = e.getException();
-        if (nested != null) {
-            return new BuildException(nested);
-        } else {
-            return new BuildException(e);
-        }
-    }
-
-}
diff --git a/src/main/org/apache/tools/ant/util/JavaEnvUtils.java b/src/main/org/apache/tools/ant/util/JavaEnvUtils.java
deleted file mode 100644
index 549212f..0000000
--- a/src/main/org/apache/tools/ant/util/JavaEnvUtils.java
+++ /dev/null
@@ -1,247 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.util;
-
-import org.apache.tools.ant.taskdefs.condition.Os;
-import java.io.File;
-
-/**
- * A set of helper methods related to locating executables or checking
- * conditons of a given Java installation.
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- *
- * @since Ant 1.5
- */
-public class JavaEnvUtils {
-
-    /** Are we on a DOS-based system */
-    private static final boolean isDos = Os.isFamily("dos");
-    /** Are we on Novell NetWare */
-    private static final boolean isNetware = Os.isName("netware");
-    /** Are we on AIX */
-    private static final boolean isAix = Os.isName("aix");
-
-    /** shortcut for System.getProperty("java.home") */
-    private static final String javaHome = System.getProperty("java.home");
-
-    /** FileUtils instance for path normalization */
-    private static final FileUtils fileUtils = FileUtils.newFileUtils();
-
-    /** Version of currently running VM. */
-    private static String javaVersion;
-
-    /** Version constant for Java 1.0 */
-    public static final String JAVA_1_0 = "1.0";
-    /** Version constant for Java 1.1 */
-    public static final String JAVA_1_1 = "1.1";
-    /** Version constant for Java 1.2 */
-    public static final String JAVA_1_2 = "1.2";
-    /** Version constant for Java 1.3 */
-    public static final String JAVA_1_3 = "1.3";
-    /** Version constant for Java 1.4 */
-    public static final String JAVA_1_4 = "1.4";
-
-    static {
-
-        // Determine the Java version by looking at available classes
-        // java.lang.CharSequence was introduced in JDK 1.4
-        // java.lang.StrictMath was introduced in JDK 1.3
-        // java.lang.ThreadLocal was introduced in JDK 1.2
-        // java.lang.Void was introduced in JDK 1.1
-        // Count up version until a NoClassDefFoundError ends the try
-
-        try {
-            javaVersion = JAVA_1_0;
-            Class.forName("java.lang.Void");
-            javaVersion = JAVA_1_1;
-            Class.forName("java.lang.ThreadLocal");
-            javaVersion = JAVA_1_2;
-            Class.forName("java.lang.StrictMath");
-            javaVersion = JAVA_1_3;
-            Class.forName("java.lang.CharSequence");
-            javaVersion = JAVA_1_4;
-        } catch (ClassNotFoundException cnfe) {
-            // swallow as we've hit the max class version that
-            // we have
-        }
-    }
-
-    /**
-     * Returns the version of Java this class is running under.
-     * @return the version of Java as a String, e.g. "1.1"
-     */
-    public static String getJavaVersion() {
-        return javaVersion;
-    }
-
-    /**
-     * Compares the current Java version to the passed in String -
-     * assumes the argument is one of the constants defined in this
-     * class.
-     * @return true if the version of Java is the same as the given
-     * version.
-     * @since Ant 1.5
-     */
-    public static boolean isJavaVersion(String version) {
-        return javaVersion == version;
-    }
-
-    /**
-     * Finds an executable that is part of a JRE installation based on
-     * the java.home system property.
-     *
-     * <p><code>java</code>, <code>keytool</code>,
-     * <code>policytool</code>, <code>orbd</code>, <code>rmid</code>,
-     * <code>rmiregistry</code>, <code>servertool</code> and
-     * <code>tnameserv</code> are JRE executables on Sun based
-     * JRE's.</p>
-     *
-     * <p>You typically find them in <code>JAVA_HOME/jre/bin</code> if
-     * <code>JAVA_HOME</code> points to your JDK installation.  JDK
-     * &lt; 1.2 has them in the same directory as the JDK
-     * executables.</p>
-     *
-     * @since Ant 1.5
-     */
-    public static String getJreExecutable(String command) {
-        if (isNetware) {
-            // Extrapolating from:
-            // "NetWare may have a "java" in that directory, but 99% of
-            // the time, you don't want to execute it" -- Jeff Tulley
-            // <JTULLEY@novell.com>
-            return command;
-        }
-
-        File jExecutable = findInDir(javaHome + "/bin", command);
-
-        if (jExecutable == null && isAix) {
-            // On IBM's JDK 1.2 the directory layout is different, 1.3 follows
-            // Sun's layout.
-            jExecutable = findInDir(javaHome + "/sh", command);
-        }
-
-        if (jExecutable != null) {
-            return jExecutable.getAbsolutePath();
-        } else {
-            // Unfortunately on Windows java.home doesn't always refer
-            // to the correct location, so we need to fall back to
-            // assuming java is somewhere on the PATH.
-            return addExtension(command);
-        }
-    }
-
-    /**
-     * Finds an executable that is part of a JDK installation based on
-     * the java.home system property.
-     *
-     * <p>You typically find them in <code>JAVA_HOME/bin</code> if
-     * <code>JAVA_HOME</code> points to your JDK installation.</p>
-     *
-     * @since Ant 1.5
-     */
-    public static String getJdkExecutable(String command) {
-        if (isNetware) {
-            // Extrapolating from:
-            // "NetWare may have a "java" in that directory, but 99% of
-            // the time, you don't want to execute it" -- Jeff Tulley
-            // <JTULLEY@novell.com>
-            return command;
-        }
-
-        File jExecutable = findInDir(javaHome + "/../bin", command);
-
-        if (jExecutable == null && isAix) {
-            // On IBM's JDK 1.2 the directory layout is different, 1.3 follows
-            // Sun's layout.
-            jExecutable = findInDir(javaHome + "/../sh", command);
-        }
-
-        if (jExecutable != null) {
-            return jExecutable.getAbsolutePath();
-        } else {
-            // fall back to JRE bin directory, also catches JDK 1.0 and 1.1
-            // where java.home points to the root of the JDK
-            return getJreExecutable(command);
-        }
-    }
-
-    /**
-     * Adds a system specific extension to the name of an executable.
-     *
-     * @since Ant 1.5
-     */
-    private static String addExtension(String command) {
-        // This is the most common extension case - exe for windows and OS/2,
-        // nothing for *nix.
-        return command + (isDos ? ".exe" : "");
-    }
-
-    /**
-     * Look for an executable in a given directory.
-     *
-     * @return null if the executable cannot be found.
-     */
-    private static File findInDir(String dirName, String commandName) {
-        File dir = fileUtils.normalize(dirName);
-        File executable = null;
-        if (dir.exists()) {
-            executable = new File(dir, addExtension(commandName));
-            if (!executable.exists()) {
-                executable = null;
-            }
-        }
-        return executable;
-    }
-}
diff --git a/src/main/org/apache/tools/ant/util/KeepAliveOutputStream.java b/src/main/org/apache/tools/ant/util/KeepAliveOutputStream.java
deleted file mode 100644
index f6944d4..0000000
--- a/src/main/org/apache/tools/ant/util/KeepAliveOutputStream.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.util;
-
-import java.io.FilterOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-
-/**
- * Class that can be used to wrap <tt>System.out</tt> and <tt>System.err</tt>
- * without getting anxious about any client closing the stream.
- *
- * <p>
- * In code-language it means that it is not necessary to do:
- * <pre>
- * if (out != System.out && out!= System.err){
- *   out.close();
- * }
- * </pre>
- * </p>
- *
- * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
- */
-public class KeepAliveOutputStream extends FilterOutputStream {
-
-    public KeepAliveOutputStream(OutputStream out) {
-        super(out);
-    }
-
-    /** this method does nothing */
-    public void close() throws IOException {
-        //
-    }
-}
-
diff --git a/src/main/org/apache/tools/ant/util/LoaderUtils.java b/src/main/org/apache/tools/ant/util/LoaderUtils.java
deleted file mode 100644
index 0b903c2..0000000
--- a/src/main/org/apache/tools/ant/util/LoaderUtils.java
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.util;
-
-import java.lang.reflect.InvocationTargetException;
-
-import java.lang.reflect.Method;
-import org.apache.tools.ant.BuildException;
-
-/**
- * ClassLoader utility methods
- *
- * @author Conor MacNeill
- */
-public class LoaderUtils {
-    /** The getContextClassLoader method */
-    private static Method getContextClassLoader;
-    /** The setContextClassLoader method */
-    private static Method setContextClassLoader;
-
-    // Set up the reflection-based Java2 methods if possible
-    static {
-        try {
-            getContextClassLoader
-                 = Thread.class.getMethod("getContextClassLoader",
-                new Class[0]);
-            Class[] setContextArgs = new Class[]{ClassLoader.class};
-            setContextClassLoader
-                 = Thread.class.getMethod("setContextClassLoader",
-                setContextArgs);
-        } catch (Exception e) {
-            // ignore any problems accessing the methods - probably JDK 1.1
-        }
-    }
-
-    /**
-     * JDK1.1 compatible access to get the context class loader. Has no
-     * effect on JDK 1.1
-     *
-     * @param loader the ClassLoader to be used as the context class loader
-     *      on the current thread.
-     */
-    public static void setContextClassLoader(ClassLoader loader) {
-        if (setContextClassLoader == null) {
-            return;
-        }
-
-        try {
-            Thread currentThread = Thread.currentThread();
-            setContextClassLoader.invoke(currentThread,
-                new Object[]{loader});
-        } catch (IllegalAccessException e) {
-            throw new BuildException
-                ("Unexpected IllegalAccessException", e);
-        } catch (InvocationTargetException e) {
-            throw new BuildException
-                ("Unexpected InvocationTargetException", e);
-        }
-
-    }
-
-
-    /**
-     * JDK1.1 compatible access to set the context class loader.
-     *
-     * @return the ClassLoader instance being used as the context
-     *      classloader on the current thread. Returns null on JDK 1.1
-     */
-    public static ClassLoader getContextClassLoader() {
-        if (getContextClassLoader == null) {
-            return null;
-        }
-
-        try {
-            Thread currentThread = Thread.currentThread();
-            return (ClassLoader) getContextClassLoader.invoke(currentThread,
-                new Object[0]);
-        } catch (IllegalAccessException e) {
-            throw new BuildException
-                ("Unexpected IllegalAccessException", e);
-        } catch (InvocationTargetException e) {
-            throw new BuildException
-                ("Unexpected InvocationTargetException", e);
-        }
-    }
-
-    /**
-     * Indicates if the context class loader methods are available
-     *
-     * @return true if the get and set methods dealing with the context
-     *      classloader are available.
-     */
-    public static boolean isContextLoaderAvailable() {
-        return getContextClassLoader != null &&
-            setContextClassLoader != null;
-    }
-}
-
diff --git a/src/main/org/apache/tools/ant/util/MergingMapper.java b/src/main/org/apache/tools/ant/util/MergingMapper.java
deleted file mode 100644
index 524b7ad..0000000
--- a/src/main/org/apache/tools/ant/util/MergingMapper.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.util;
-
-/**
- * Implementation of FileNameMapper that always returns the same
- * target file name.
- *
- * <p>This is the default FileNameMapper for the archiving tasks and
- * uptodate.</p>
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- */
-public class MergingMapper implements FileNameMapper {
-    protected String[] mergedFile = null;
-
-    /**
-     * Ignored.
-     */
-    public void setFrom(String from) {}
-
-    /**
-     * Sets the name of the merged file.
-     */
-    public void setTo(String to) {
-        mergedFile = new String[] {to};
-    }
-
-    /**
-     * Returns an one-element array containing the file name set via setTo.
-     */
-    public String[] mapFileName(String sourceFileName) {
-        return mergedFile;
-    }
-
-}
diff --git a/src/main/org/apache/tools/ant/util/PackageNameMapper.java b/src/main/org/apache/tools/ant/util/PackageNameMapper.java
deleted file mode 100644
index 7d641a8..0000000
--- a/src/main/org/apache/tools/ant/util/PackageNameMapper.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.util;
-
-import java.io.File;
-
-/**
- * Maps directory name matches into a dotted package name. This is
- * useful for matching JUnit test cases againt their XML formatter
- * results.
- * <pre>
- * &lt;mapper classname="org.apache.tools.ant.util.PackageNameMapper"
- *         from="*Test.java" to="${test.data.dir}/TEST-*Test.xml"/&gt;
- * </pre>
- *
- *@author     Erik Hatcher
- */
-public class PackageNameMapper extends GlobPatternMapper {
-    /**
-     *  Returns the part of the given string that matches the * in the
-     *  &quot;from&quot; pattern replacing file separators with dots
-     *
-     *@param  name  Source filename
-     *@return       Replaced variable part
-     */
-    protected String extractVariablePart(String name) {
-        String var = name.substring(prefixLength,
-                name.length() - postfixLength);
-        return var.replace(File.separatorChar, '.');
-    }
-}
-
diff --git a/src/main/org/apache/tools/ant/util/RegexpPatternMapper.java b/src/main/org/apache/tools/ant/util/RegexpPatternMapper.java
deleted file mode 100644
index bf1fd15..0000000
--- a/src/main/org/apache/tools/ant/util/RegexpPatternMapper.java
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000,2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.util;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.util.regexp.RegexpMatcher;
-import org.apache.tools.ant.util.regexp.RegexpMatcherFactory;
-
-
-import java.util.Vector;
-
-/**
- * Implementation of FileNameMapper that does regular expression
- * replacements.
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- */
-public class RegexpPatternMapper implements FileNameMapper {
-    protected RegexpMatcher reg = null;
-    protected char[] to = null;
-    protected StringBuffer result = new StringBuffer();
-
-    public RegexpPatternMapper() throws BuildException {
-        reg = (new RegexpMatcherFactory()).newRegexpMatcher();
-    }
-    
-    /**
-     * Sets the &quot;from&quot; pattern. Required.
-     */
-    public void setFrom(String from) throws BuildException {
-        try {
-            reg.setPattern(from);
-        } catch (NoClassDefFoundError e) {
-            // depending on the implementation the actual RE won't
-            // get instantiated in the constructor.
-            throw new BuildException("Cannot load regular expression matcher",
-                                     e);
-        }
-    }
-
-    /**
-     * Sets the &quot;to&quot; pattern. Required.
-     */
-    public void setTo(String to) {
-        this.to = to.toCharArray();
-    }
-
-    /**
-     * Returns null if the source file name doesn't match the
-     * &quot;from&quot; pattern, an one-element array containing the
-     * translated file otherwise.
-     */
-    public String[] mapFileName(String sourceFileName) {
-        if (reg == null  || to == null
-            || !reg.matches(sourceFileName)) {
-            return null;
-        }
-        return new String[] {replaceReferences(sourceFileName)};
-    }
-
-    /**
-     * Replace all backreferences in the to pattern with the matched
-     * groups of the source.
-     */
-    protected String replaceReferences(String source) {
-        Vector v = reg.getGroups(source);
-        
-        result.setLength(0);
-        for (int i = 0; i < to.length; i++) {
-            if (to[i] == '\\') {
-                if (++i < to.length) {
-                    int value = Character.digit(to[i], 10);
-                    if (value > -1) {
-                        result.append((String) v.elementAt(value));
-                    } else {
-                        result.append(to[i]);
-                    }
-                } else {
-                    // XXX - should throw an exception instead?
-                    result.append('\\');
-                }
-            } else {
-                result.append(to[i]);
-            }
-        }
-        return result.toString();
-    }
-
-}
diff --git a/src/main/org/apache/tools/ant/util/SourceFileScanner.java b/src/main/org/apache/tools/ant/util/SourceFileScanner.java
deleted file mode 100644
index 1277f27..0000000
--- a/src/main/org/apache/tools/ant/util/SourceFileScanner.java
+++ /dev/null
@@ -1,183 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.util;
-
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.taskdefs.condition.Os;
-
-import java.io.File;
-import java.util.Vector;
-
-/**
- * Utility class that collects the functionality of the various
- * scanDir methods that have been scattered in several tasks before.
- *
- * <p>The only method returns an array of source files. The array is a
- * subset of the files given as a parameter and holds only those that
- * are newer than their corresponding target files.</p>
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- */
-public class SourceFileScanner {
-
-    protected Task task;
-
-    private FileUtils fileUtils;
-
-    /**
-     * @param task The task we should log messages through
-     */
-    public SourceFileScanner(Task task) {
-        this.task = task;
-        fileUtils = FileUtils.newFileUtils();
-    }
-
-    /**
-     * Restrict the given set of files to those that are newer than
-     * their corresponding target files.
-     *
-     * @param files   the original set of files
-     * @param srcDir  all files are relative to this directory
-     * @param destDir target files live here. if null file names
-     *                returned by the mapper are assumed to be absolute.
-     * @param mapper  knows how to construct a target file names from
-     *                source file names.
-     */
-    public String[] restrict(String[] files, File srcDir, File destDir,
-                             FileNameMapper mapper) {
-
-        long now = (new java.util.Date()).getTime();
-        StringBuffer targetList = new StringBuffer();
-
-        /*
-          If we're on Windows, we have to munge the time up to 2 secs to
-          be able to check file modification times.
-          (Windows has a max resolution of two secs for modification times)
-          Actually this is a feature of the FAT file system, NTFS does
-          not have it, so if we could reliably passively test for an NTFS
-          file systems we could turn this off...
-        */
-        if (Os.isFamily("windows")) {
-            now += 2000;
-        }
-
-        Vector v = new Vector();
-        for (int i = 0; i < files.length; i++) {
-
-            String[] targets = mapper.mapFileName(files[i]);
-            if (targets == null || targets.length == 0) {
-                task.log(files[i] + " skipped - don\'t know how to handle it",
-                         Project.MSG_VERBOSE);
-                continue;
-            }
-
-            File src = fileUtils.resolveFile(srcDir, files[i]);
-
-            if (src.lastModified() > now) {
-                task.log("Warning: " + files[i] + " modified in the future.", 
-                         Project.MSG_WARN);
-            }
-
-            boolean added = false;
-            targetList.setLength(0);
-            for (int j = 0; !added && j < targets.length; j++) {
-                File dest = fileUtils.resolveFile(destDir, targets[j]);
-                
-                if (!dest.exists()) {
-                    task.log(files[i] + " added as " + dest.getAbsolutePath()
-                        + " doesn\'t exist.", Project.MSG_VERBOSE);
-                    v.addElement(files[i]);
-                    added = true;
-                } else if (src.lastModified() > dest.lastModified()) {
-                    task.log(files[i] + " added as " + dest.getAbsolutePath()
-                        + " is outdated.", Project.MSG_VERBOSE);
-                    v.addElement(files[i]);
-                    added = true;
-                } else {
-                    if (targetList.length() > 0) {
-                        targetList.append(", ");
-                    }
-                    targetList.append(dest.getAbsolutePath());
-                }
-            }
-
-            if (!added) {
-                task.log(files[i] + " omitted as " + targetList.toString()
-                         + (targets.length == 1 ? " is" : " are ")
-                         + " up to date.", Project.MSG_VERBOSE);
-            }
-            
-        }
-        String[] result = new String[v.size()];
-        v.copyInto(result);
-        return result;
-    }
-
-    /**
-     * Convinience layer on top of restrict that returns the source
-     * files as File objects (containing absolute paths if srcDir is
-     * absolute).
-     */
-    public File[] restrictAsFiles(String[] files, File srcDir, File destDir,
-                                  FileNameMapper mapper) {
-        String[] res = restrict(files, srcDir, destDir, mapper);
-        File[] result = new File[res.length];
-        for (int i = 0; i < res.length; i++) {
-            result[i] = new File(srcDir, res[i]);
-        }
-        return result;
-    }
-}
diff --git a/src/main/org/apache/tools/ant/util/StringUtils.java b/src/main/org/apache/tools/ant/util/StringUtils.java
deleted file mode 100644
index 1e4bc56..0000000
--- a/src/main/org/apache/tools/ant/util/StringUtils.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.util;
-
-import java.io.StringWriter;
-import java.io.PrintWriter;
-import java.util.Vector;
-
-/**
- * A set of helper methods related to string manipulation.
- *
- * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
- */
-public final class StringUtils {
-
-    /** the line separator for this OS */
-    public static final String LINE_SEP = System.getProperty("line.separator");
-
-    /**
-     * Splits up a string into a list of lines. It is equivalent
-     * to <tt>split(data, '\n')</tt>.
-     * @param data the string to split up into lines.
-     * @return the list of lines available in the string.
-     */
-    public static Vector lineSplit(String data){
-        return split(data, '\n');
-    }
-
-    /**
-     * Splits up a string where elements are separated by a specific
-     * character and return all elements.
-     * @param data the string to split up.
-     * @param ch the separator character.
-     * @return the list of elements.
-     */
-    public static Vector split(String data, int ch){
-        Vector elems = new Vector();
-        int pos = -1;
-        int i = 0;
-        while ((pos = data.indexOf(ch, i)) != -1){
-            String elem = data.substring(i, pos);
-            elems.addElement(elem);
-            i = pos + 1;
-        }
-        elems.addElement(data.substring(i));
-        return elems;
-    }
-
-    /**
-     * Replace occurrences into a string.
-     * @param data the string to replace occurrences into
-     * @param from the occurrence to replace.
-     * @param to the occurrence to be used as a replacement.
-     * @return the new string with replaced occurrences.
-     */
-    public static String replace(String data, String from, String to){
-        StringBuffer buf = new StringBuffer(data.length());
-        int pos = -1;
-        int i = 0;
-        while ((pos = data.indexOf(from, i)) != -1){
-            buf.append(data.substring(i, pos)).append(to);
-            i = pos + from.length();
-        }
-        buf.append(data.substring(i));
-        return buf.toString();
-    }
-
-    /**
-     * Convenient method to retrieve the full stacktrace from a given exception.
-     * @param t the exception to get the stacktrace from.
-     * @return the stacktrace from the given exception.
-     */
-    public static String getStackTrace(Throwable t) {
-        StringWriter sw = new StringWriter();
-        PrintWriter pw = new PrintWriter(sw, true);
-        t.printStackTrace(pw);
-        pw.flush();
-        pw.close();
-        return sw.toString();
-    }
-
-}
diff --git a/src/main/org/apache/tools/ant/util/TaskLogger.java b/src/main/org/apache/tools/ant/util/TaskLogger.java
deleted file mode 100644
index 6e9ecad..0000000
--- a/src/main/org/apache/tools/ant/util/TaskLogger.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.util;
-
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.Project;
-
-/**
- * A facade that makes logging nicers to use.
- *
- * @author <a href="mailto:peter@apache.org">Peter Donald</a>
- * @version $Revision$ $Date$
- */
-public final class TaskLogger
-{
-    /**
-     * Task to use to do logging.
-     */
-    private Task m_task;
-
-    public TaskLogger( final Task task )
-    {
-        this.m_task = task;
-    }
-
-    public void info( final String message )
-    {
-        m_task.log( message, Project.MSG_INFO );
-    }
-
-    public void error( final String message )
-    {
-        m_task.log( message, Project.MSG_ERR );
-    }
-
-    public void warning( final String message )
-    {
-        m_task.log( message, Project.MSG_WARN );
-    }
-
-    public void verbose( final String message )
-    {
-        m_task.log( message, Project.MSG_VERBOSE );
-    }
-
-    public void debug( final String message )
-    {
-        m_task.log( message, Project.MSG_DEBUG );
-    }
-}
diff --git a/src/main/org/apache/tools/ant/util/TimeoutObserver.java b/src/main/org/apache/tools/ant/util/TimeoutObserver.java
deleted file mode 100644
index dd38b82..0000000
--- a/src/main/org/apache/tools/ant/util/TimeoutObserver.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.util;
-
-/**
- * Interface for classes that want to be notified by Watchdog.
- *
- * @since Ant 1.5
- *
- * @see org.apache.tools.ant.util.Watchdog
- *
- * @author <a href="stefan.bodewig@epost.de">Stefan Bodewig</a>
- */
-public interface TimeoutObserver {
-
-    void timeoutOccured(Watchdog w);
-
-}
diff --git a/src/main/org/apache/tools/ant/util/Watchdog.java b/src/main/org/apache/tools/ant/util/Watchdog.java
deleted file mode 100644
index 358fa25..0000000
--- a/src/main/org/apache/tools/ant/util/Watchdog.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.util;
-
-import java.util.Enumeration;
-import java.util.Vector;
-
-/**
- * Generalization of <code>ExecuteWatchdog</code>
- *
- * @since Ant 1.5
- *
- * @see org.apache.tools.ant.taskdefs.ExecuteWatchdog
- *
- * @author <a href="stefan.bodewig@epost.de">Stefan Bodewig</a>
- * @author thomas.haas@softwired-inc.com
- * @author <a href="mailto:sbailliez@imediation.com">Stephane Bailliez</a>
- */
-public class Watchdog implements Runnable {
-
-    private Vector observers = new Vector(1);
-    private long timeout = -1;
-    private boolean stopped = false;
-
-    public Watchdog(long timeout) {
-        if (timeout < 1) {
-            throw new IllegalArgumentException("timeout lesser than 1.");
-        }
-        this.timeout = timeout;
-    }
-
-    public void addTimeoutObserver(TimeoutObserver to) {
-        observers.addElement(to);
-    }
-
-    public void removeTimeoutObserver(TimeoutObserver to) {
-        observers.removeElement(to);
-    }
-
-    protected final void fireTimeoutOccured() {
-        Enumeration enum = observers.elements();
-        while (enum.hasMoreElements()) {
-            ((TimeoutObserver) enum.nextElement()).timeoutOccured(this);
-        }
-    }
-
-    public synchronized void start() {
-        stopped = false;
-        Thread t = new Thread(this, "WATCHDOG");
-        t.setDaemon(true);
-        t.start();
-    }
-
-    public synchronized void stop() {
-        stopped = true;
-        notifyAll();
-    }
-
-    public synchronized void run() {
-        final long until = System.currentTimeMillis() + timeout;
-        long now;
-        while (!stopped && until > (now = System.currentTimeMillis())) {
-            try {
-                wait(until - now);
-            } catch (InterruptedException e) {}
-        }
-        if (!stopped) {
-            fireTimeoutOccured();
-        }
-    }
-
-}
diff --git a/src/main/org/apache/tools/ant/util/depend/AbstractAnalyzer.java b/src/main/org/apache/tools/ant/util/depend/AbstractAnalyzer.java
deleted file mode 100644
index 94dcbd9..0000000
--- a/src/main/org/apache/tools/ant/util/depend/AbstractAnalyzer.java
+++ /dev/null
@@ -1,321 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.util.depend;
-import java.io.File;
-import java.io.IOException;
-import java.util.Enumeration;
-import java.util.Vector;
-import java.util.zip.ZipFile;
-import org.apache.tools.ant.types.Path;
-
-/**
- * An abstract implementation of the analyzer interface providing support
- * for the bulk of interface methods.
- *
- * @author Conor MacNeill
- */
-public abstract class AbstractAnalyzer implements DependencyAnalyzer {
-    /** Maximum number of loops for looking for indirect dependencies. */
-    public static final int MAX_LOOPS = 1000;
-
-    /** The source path for the source files */
-    private Path sourcePath = new Path(null);
-
-    /** The classpath containg dirs and jars of class files */
-    private Path classPath = new Path(null);
-
-    /** The list of root classes */
-    private Vector rootClasses = new Vector();
-
-    /** true if dependencies have been determined */
-    private boolean determined = false;
-
-    /** the list of File objects that the root classes depend upon */
-    private Vector fileDependencies;
-    /** the list of java classes the root classes depend upon */
-    private Vector classDependencies;
-
-    /** true if indirect dependencies should be gathered */
-    private boolean closure = true;
-
-    /** Setup the analyzer */
-    protected AbstractAnalyzer() {
-        reset();
-    }
-
-    /**
-     * Set the closure flag. If this flag is true the analyzer will traverse
-     * all class relationships until it has collected the entire set of
-     * direct and indirect dependencies
-     *
-     * @param closure true if dependencies should be traversed to determine
-     *      indirect dependencies.
-     */
-    public void setClosure(boolean closure) {
-        this.closure = closure;
-    }
-
-    /**
-     * Get the list of files in the file system upon which the root classes
-     * depend. The files will be either the classfiles or jar files upon
-     * which the root classes depend.
-     *
-     * @return an enumeration of File instances.
-     */
-    public Enumeration getFileDependencies() {
-        if (!supportsFileDependencies()) {
-            throw new RuntimeException("File dependencies are not supported " 
-                + "by this analyzer");
-        }
-        if (!determined) {
-            determineDependencies(fileDependencies, classDependencies);
-        }
-        return fileDependencies.elements();
-    }
-
-    /**
-     * Get the list of classes upon which root classes depend. This is a
-     * list of Java classnames in dot notation.
-     *
-     * @return an enumeration of Strings, each being the name of a Java
-     *      class in dot notation.
-     */
-    public Enumeration getClassDependencies() {
-        if (!determined) {
-            determineDependencies(fileDependencies, classDependencies);
-        }
-        return classDependencies.elements();
-    }
-
-    /**
-     * Get the file that contains the class definition
-     *
-     * @param classname the name of the required class
-     * @return the file instance, zip or class, containing the 
-     *         class or null if the class could not be found.
-     * @exception IOException if the files in the classpath cannot be read.
-     */
-    public File getClassContainer(String classname) throws IOException {
-        String classLocation = classname.replace('.', '/') + ".class";
-        // we look through the classpath elements. If the element is a dir
-        // we look for the file. IF it is a zip, we look for the zip entry
-        return getResourceContainer(classLocation, classPath.list());
-    }
-
-    /**
-     * Get the file that contains the class source.
-     *
-     * @param classname the name of the required class
-     * @return the file instance, zip or java, containing the 
-     *         source or null if the source for the class could not be found.
-     * @exception IOException if the files in the sourcepath cannot be read.
-     */
-    public File getSourceContainer(String classname) throws IOException {
-        String sourceLocation = classname.replace('.', '/') + ".java";
-
-        // we look through the source path elements. If the element is a dir
-        // we look for the file. If it is a zip, we look for the zip entry.
-        // This isn't normal for source paths but we get it for free
-        return getResourceContainer(sourceLocation, sourcePath.list());
-    }
-
-    /**
-     * Add a source path to the source path used by this analyzer. The
-     * elements in the given path contain the source files for the classes
-     * being analyzed. Not all analyzers will use this information.
-     *
-     * @param sourcePath The Path instance specifying the source path
-     *      elements.
-     */
-    public void addSourcePath(Path sourcePath) {
-        if (sourcePath == null) {
-            return;
-        }
-        this.sourcePath.append(sourcePath);
-        this.sourcePath.setProject(sourcePath.getProject());
-    }
-
-    /**
-     * Add a classpath to the classpath being used by the analyzer. The
-     * classpath contains the binary classfiles for the classes being
-     * analyzed The elements may either be the directories or jar files.Not
-     * all analyzers will use this information.
-     *
-     * @param classPath the Path instance specifying the classpath elements
-     */
-    public void addClassPath(Path classPath) {
-        if (classPath == null) {
-            return;
-        }
-
-        this.classPath.append(classPath);
-        this.classPath.setProject(classPath.getProject());
-    }
-
-    /**
-     * Add a root class. The root classes are used to drive the
-     * determination of dependency information. The analyzer will start at
-     * the root classes and add dependencies from there.
-     *
-     * @param className the name of the class in Java dot notation.
-     */
-    public void addRootClass(String className) {
-        if (className == null) {
-            return;
-        }
-        if (!rootClasses.contains(className)) {
-            rootClasses.addElement(className);
-        }
-    }
-
-    /**
-     * Configure an aspect of the analyzer. The set of aspects that are
-     * supported is specific to each analyzer instance.
-     *
-     * @param name the name of the aspect being configured
-     * @param info the configuration info.
-     */
-    public void config(String name, Object info) {
-        // do nothing by default
-    }
-
-    /**
-     * Reset the dependency list. This will reset the determined
-     * dependencies and the also list of root classes.
-     */
-    public void reset() {
-        rootClasses.removeAllElements();
-        determined = false;
-        fileDependencies = new Vector();
-        classDependencies = new Vector();
-    }
-
-    /**
-     * Get an enumeration of the root classes
-     *
-     * @return an enumeration of Strings, each of which is a class name 
-     *         for a root class.
-     */
-    protected Enumeration getRootClasses() {
-        return rootClasses.elements();
-    }
-
-    /**
-     * Indicate if the analyzer is required to follow 
-     * indirect class relationships.
-     *
-     * @return true if indirect relationships should be followed.
-     */
-    protected boolean isClosureRequired() {
-        return closure;
-    }
-
-    /**
-     * Determine the dependencies of the current set of root classes
-     *
-     * @param files a vector into which Files upon which the root classes
-     *      depend should be placed.
-     * @param classes a vector of Strings into which the names of classes
-     *      upon which the root classes depend should be placed.
-     */
-    protected abstract void determineDependencies(Vector files, Vector classes);
-
-    /**
-     * Indicate if the particular subclass supports file dependency
-     * information.
-     *
-     * @return true if file dependencies are supported.
-     */
-    protected abstract boolean supportsFileDependencies();
-
-    /**
-     * Get the file that contains the resource
-     *
-     * @param resourceLocation the name of the required resource.
-     * @param paths the paths which will be searched for the resource.
-     * @return the file instance, zip or class, containing the 
-     *         class or null if the class could not be found.
-     * @exception IOException if the files in the given paths cannot be read.
-     */
-    private File getResourceContainer(String resourceLocation, String[] paths)
-         throws IOException {
-        for (int i = 0; i < paths.length; ++i) {
-            File element = new File(paths[i]);
-            if (!element.exists()) {
-                continue;
-            }
-            if (element.isDirectory()) {
-                File resource = new File(element, resourceLocation);
-                if (resource.exists()) {
-                    return resource;
-                }
-            } else {
-                // must be a zip of some sort
-                ZipFile zipFile = null;
-                try {
-                    zipFile = new ZipFile(element);
-                    if (zipFile.getEntry(resourceLocation) != null) {
-                        return element;
-                    }
-                } finally {
-                    if (zipFile != null) {
-                        zipFile.close();
-                    }
-                }
-            }
-        }
-        return null;
-    }
-}
-
diff --git a/src/main/org/apache/tools/ant/util/depend/DependencyAnalyzer.java b/src/main/org/apache/tools/ant/util/depend/DependencyAnalyzer.java
deleted file mode 100644
index 3217d8d..0000000
--- a/src/main/org/apache/tools/ant/util/depend/DependencyAnalyzer.java
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.util.depend;
-import java.io.File;
-import java.io.IOException;
-import java.util.Enumeration;
-
-import org.apache.tools.ant.types.Path;
-
-/**
- * A dependency analyzer analyzes dependencies between Java classes to
- * determine the minimal set of classes which are required by a set of
- * &quot;root&quot; classes. Different implementations of this interface can
- * use different strategies and libraries to determine the required set. For
- * example, some analyzers will use class files while others might use
- * source files. Analyzer specific configuration is catered for through a
- * generic configure method
- *
- * @author Conor MacNeill
- */
-public interface DependencyAnalyzer {
-    /**
-     * Add a source path to the source path used by this analyzer. The
-     * elements in the given path contain the source files for the classes
-     * being analyzed. Not all analyzers will use this information.
-     *
-     * @param sourcePath The Path instance specifying the source path
-     *      elements.
-     */
-    void addSourcePath(Path sourcePath);
-
-    /**
-     * Add a classpath to the classpath being used by the analyzer. The
-     * classpath contains the binary classfiles for the classes being
-     * analyzed The elements may either be the directories or jar files.Not
-     * all analyzers will use this information.
-     *
-     * @param classpath the Path instance specifying the classpath elements
-     */
-    void addClassPath(Path classpath);
-
-    /**
-     * Add a root class. The root classes are used to drive the
-     * determination of dependency information. The analyzer will start at
-     * the root classes and add dependencies from there.
-     *
-     * @param classname the name of the class in Java dot notation.
-     */
-    void addRootClass(String classname);
-
-    /**
-     * Get the list of files in the file system upon which the root classes
-     * depend. The files will be either the classfiles or jar files upon
-     * which the root classes depend.
-     *
-     * @return an enumeration of File instances.
-     */
-    Enumeration getFileDependencies();
-
-    /**
-     * Get the list of classes upon which root classes depend. This is a
-     * list of Java classnames in dot notation.
-     *
-     * @return an enumeration of Strings, each being the name of a Java
-     *      class in dot notation.
-     */
-    Enumeration getClassDependencies();
-
-
-    /**
-     * Reset the dependency list. This will reset the determined
-     * dependencies and the also list of root classes.
-     */
-    void reset();
-
-    /**
-     * Configure an aspect of the analyzer. The set of aspects that are
-     * supported is specific to each analyzer instance.
-     *
-     * @param name the name of the aspect being configured
-     * @param info the configuration information.
-     */
-    void config(String name, Object info);
-
-    /**
-     * Set the closure flag. If this flag is true the analyzer will traverse
-     * all class relationships until it has collected the entire set of
-     * direct and indirect dependencies
-     *
-     * @param closure true if dependencies should be traversed to determine
-     *      indirect dependencies.
-     */
-    void setClosure(boolean closure);
-
-
-    /**
-     * Get the file that contains the class definition
-     *
-     * @param classname the name of the required class
-     * @return the file instance, zip or class, containing the 
-     *         class or null if the class could not be found.
-     * @exception IOException if the files in the classpath cannot be read.
-     */
-    File getClassContainer(String classname) throws IOException;
-
-    /**
-     * Get the file that contains the class source.
-     *
-     * @param classname the name of the required class
-     * @return the file instance, zip or java, containing the 
-     *         source or null if the source for the class could not be found.
-     * @exception IOException if the files in the sourcepath cannot be read.
-     */
-    File getSourceContainer(String classname) throws IOException;
-}
-
diff --git a/src/main/org/apache/tools/ant/util/depend/bcel/AncestorAnalyzer.java b/src/main/org/apache/tools/ant/util/depend/bcel/AncestorAnalyzer.java
deleted file mode 100644
index eeab869..0000000
--- a/src/main/org/apache/tools/ant/util/depend/bcel/AncestorAnalyzer.java
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.util.depend.bcel;
-import java.io.File;
-import java.io.IOException;
-import java.util.Enumeration;
-import java.util.Hashtable;
-import java.util.Vector;
-import org.apache.bcel.classfile.ClassParser;
-import org.apache.bcel.classfile.JavaClass;
-import org.apache.tools.ant.util.depend.AbstractAnalyzer;
-
-/**
- * A dependency analyzer which returns superclass and superinterface
- * dependencies.
- *
- * @author Conor MacNeill
- */
-public class AncestorAnalyzer extends AbstractAnalyzer {
-    
-    public AncestorAnalyzer() {
-        // force BCEL classes to load now
-        try {
-            ClassParser parser = new ClassParser("force");
-        } catch (IOException e) {
-            // ignore
-        }
-    }
-    
-    /**
-     * Determine the dependencies of the configured root classes.
-     *
-     * @param files a vector to be populated with the files which contain
-     *      the dependency classes
-     * @param classes a vector to be populated with the names of the
-     *      depencency classes.
-     */
-    protected void determineDependencies(Vector files, Vector classes) {
-        // we get the root classes and build up a set of
-        // classes upon which they depend
-        Hashtable dependencies = new Hashtable();
-        Hashtable containers = new Hashtable();
-        Hashtable toAnalyze = new Hashtable();
-        Hashtable nextAnalyze = new Hashtable();
-        for (Enumeration e = getRootClasses(); e.hasMoreElements();) {
-            String classname = (String) e.nextElement();
-            toAnalyze.put(classname, classname);
-        }
-
-        int count = 0;
-        int maxCount = isClosureRequired() ? MAX_LOOPS : 2;
-        while (toAnalyze.size() != 0 && count++ < maxCount) {
-            nextAnalyze.clear();
-            for (Enumeration e = toAnalyze.keys(); e.hasMoreElements();) {
-                String classname = (String) e.nextElement();
-                dependencies.put(classname, classname);
-                try {
-                    File container = getClassContainer(classname);
-                    if (container == null) {
-                        continue;
-                    }
-                    containers.put(container, container);
-
-                    ClassParser parser = null;
-                    if (container.getName().endsWith(".class")) {
-                        parser = new ClassParser(container.getPath());
-                    } else {
-                        parser = new ClassParser(container.getPath(),
-                            classname.replace('.', '/') + ".class");
-                    }
-
-                    JavaClass javaClass = parser.parse();
-                    String[] interfaces = javaClass.getInterfaceNames();
-                    for (int i = 0; i < interfaces.length; ++i) {
-                        String interfaceName = interfaces[i];
-                        if (!dependencies.containsKey(interfaceName)) {
-                            nextAnalyze.put(interfaceName, interfaceName);
-                        }
-                    }
-
-                    if (javaClass.isClass()) {
-                        String superClass = javaClass.getSuperclassName();
-                        if (!dependencies.containsKey(superClass)) {
-                            nextAnalyze.put(superClass, superClass);
-                        }
-                    }
-                } catch (IOException ioe) {
-                    // ignore
-                }
-            }
-
-            Hashtable temp = toAnalyze;
-            toAnalyze = nextAnalyze;
-            nextAnalyze = temp;
-        }
-
-        files.removeAllElements();
-        for (Enumeration e = containers.keys(); e.hasMoreElements();) {
-            files.addElement((File) e.nextElement());
-        }
-
-        classes.removeAllElements();
-        for (Enumeration e = dependencies.keys(); e.hasMoreElements();) {
-            classes.addElement((String) e.nextElement());
-        }
-    }
-
-    /**
-     * Indicate if this analyzer can determine dependent files.
-     *
-     * @return true if the analyzer provides dependency file information.
-     */
-    protected boolean supportsFileDependencies() {
-        return true;
-    }
-
-}
-
diff --git a/src/main/org/apache/tools/ant/util/depend/bcel/DependencyVisitor.java b/src/main/org/apache/tools/ant/util/depend/bcel/DependencyVisitor.java
deleted file mode 100644
index 2c6c3e8..0000000
--- a/src/main/org/apache/tools/ant/util/depend/bcel/DependencyVisitor.java
+++ /dev/null
@@ -1,182 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.util.depend.bcel;
-
-import java.util.Enumeration;
-import java.util.Hashtable;
-import java.util.StringTokenizer;
-import org.apache.bcel.classfile.ConstantClass;
-import org.apache.bcel.classfile.ConstantPool;
-import org.apache.bcel.classfile.EmptyVisitor;
-import org.apache.bcel.classfile.Field;
-import org.apache.bcel.classfile.JavaClass;
-import org.apache.bcel.classfile.Method;
-
-/**
- * A BCEL visitor implementation to collect class dependency information
- *
- * @author Conor MacNeill
- * @author <a href="mailto:hengels@innovidata.com">Holger Engels</a>
- */
-public class DependencyVisitor extends EmptyVisitor {
-    /** The collectd dependencies */
-    private Hashtable dependencies = new Hashtable();
-    /**
-     * The current class's constant pool - used to determine class names
-     * from class references.
-     */
-    private ConstantPool constantPool;
-
-    /**
-     * Get the dependencies collected by this visitor
-     *
-     * @return a Enumeration of classnames, being the classes upon which the
-     *      visited classes depend.
-     */
-    public Enumeration getDependencies() {
-        return dependencies.keys();
-    }
-
-    /** Clear the curretn set of collected dependencies. */
-    public void clearDependencies() {
-        dependencies.clear();
-    }
-
-    /**
-     * Visit the constant pool of a class
-     *
-     * @param constantPool the constant pool of the class being visited.
-     */
-    public void visitConstantPool(ConstantPool constantPool) {
-        this.constantPool = constantPool;
-    }
-
-    /**
-     * Visit a class reference
-     *
-     * @param constantClass the constantClass entry for the class reference
-     */
-    public void visitConstantClass(ConstantClass constantClass) {
-        String classname
-             = constantClass.getConstantValue(constantPool).toString();
-        addSlashClass(classname);
-    }
-
-    /**
-     * Visit a field of the class.
-     *
-     * @param field the field being visited
-     */
-    public void visitField(Field field) {
-        addClasses(field.getSignature());
-    }
-
-    /**
-     * Visit a Java class
-     *
-     * @param javaClass the class being visited.
-     */
-    public void visitJavaClass(JavaClass javaClass) {
-        addClass(javaClass.getClassName());
-    }
-
-    /**
-     * Visit a method of the current class
-     *
-     * @param method the method being visited.
-     */
-    public void visitMethod(Method method) {
-        String signature = method.getSignature();
-        int pos = signature.indexOf(")");
-        addClasses(signature.substring(1, pos));
-        addClasses(signature.substring(pos + 1));
-    }
-
-    /**
-     * Add a classname to the list of dependency classes
-     *
-     * @param classname the class to be added to the list of dependencies.
-     */
-    void addClass(String classname) {
-        dependencies.put(classname, classname);
-    }
-
-    /**
-     * Add all the classes from a descriptor string.
-     *
-     * @param string the descriptor string, being descriptors separated by
-     *      ';' characters.
-     */
-    private void addClasses(String string) {
-        StringTokenizer tokens = new StringTokenizer(string, ";");
-        while (tokens.hasMoreTokens()) {
-            String descriptor = tokens.nextToken();
-            int pos = descriptor.indexOf('L');
-            if (pos != -1) {
-                addSlashClass(descriptor.substring(pos + 1));
-            }
-        }
-    }
-
-    /**
-     * Adds a class name in slash format 
-     * (for example org/apache/tools/ant/Main).
-     *
-     * @param classname the class name in slash format
-     */
-    private void addSlashClass(String classname) {
-        addClass(classname.replace('/', '.'));
-    }
-}
-
diff --git a/src/main/org/apache/tools/ant/util/depend/bcel/FullAnalyzer.java b/src/main/org/apache/tools/ant/util/depend/bcel/FullAnalyzer.java
deleted file mode 100644
index 1e7d3c9..0000000
--- a/src/main/org/apache/tools/ant/util/depend/bcel/FullAnalyzer.java
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.util.depend.bcel;
-import java.io.File;
-import java.io.IOException;
-import java.util.Enumeration;
-import java.util.Hashtable;
-import java.util.Vector;
-import org.apache.bcel.classfile.ClassParser;
-import org.apache.bcel.classfile.DescendingVisitor;
-import org.apache.bcel.classfile.JavaClass;
-import org.apache.tools.ant.util.depend.AbstractAnalyzer;
-
-/**
- * An analyzer capable fo traversing all class - class relationships.
- *
- * @author Conor MacNeill
- * @author <a href="mailto:hengels@innovidata.com">Holger Engels</a>
- */
-public class FullAnalyzer extends AbstractAnalyzer {
-    public FullAnalyzer() {
-        // force BCEL classes to load now
-        try {
-            ClassParser parser = new ClassParser("force");
-        } catch (IOException e) {
-            // ignore
-        }
-    }
-    
-    /**
-     * Determine the dependencies of the configured root classes.
-     *
-     * @param files a vector to be populated with the files which contain
-     *      the dependency classes
-     * @param classes a vector to be populated with the names of the
-     *      depencency classes.
-     */
-    protected void determineDependencies(Vector files, Vector classes) {
-        // we get the root classes and build up a set of
-        // classes upon which they depend
-        Hashtable dependencies = new Hashtable();
-        Hashtable containers = new Hashtable();
-        Hashtable toAnalyze = new Hashtable();
-        for (Enumeration e = getRootClasses(); e.hasMoreElements();) {
-            String classname = (String) e.nextElement();
-            toAnalyze.put(classname, classname);
-        }
-
-        int count = 0;
-        int maxCount = isClosureRequired() ? MAX_LOOPS : 2;
-        while (toAnalyze.size() != 0 && count++ < maxCount) {
-            DependencyVisitor dependencyVisitor = new DependencyVisitor();
-            for (Enumeration e = toAnalyze.keys(); e.hasMoreElements();) {
-                String classname = (String) e.nextElement();
-                dependencies.put(classname, classname);
-                try {
-                    File container = getClassContainer(classname);
-                    if (container == null) {
-                        continue;
-                    }
-                    containers.put(container, container);
-
-                    ClassParser parser = null;
-                    if (container.getName().endsWith(".class")) {
-                        parser = new ClassParser(container.getPath());
-                    } else {
-                        parser = new ClassParser(container.getPath(),
-                            classname.replace('.', '/') + ".class");
-                    }
-
-                    JavaClass javaClass = parser.parse();
-                    DescendingVisitor traverser
-                         = new DescendingVisitor(javaClass, dependencyVisitor);
-                    traverser.visit();
-                } catch (IOException ioe) {
-                    // ignore
-                }
-            }
-
-            toAnalyze.clear();
-
-            // now recover all the dependencies collected and add to the list.
-            Enumeration depsEnum = dependencyVisitor.getDependencies();
-            while (depsEnum.hasMoreElements()) {
-                String className = (String) depsEnum.nextElement();
-                if (!dependencies.containsKey(className)) {
-                    toAnalyze.put(className, className);
-                }
-            }
-        }
-
-        files.removeAllElements();
-        for (Enumeration e = containers.keys(); e.hasMoreElements();) {
-            files.addElement((File) e.nextElement());
-        }
-
-        classes.removeAllElements();
-        for (Enumeration e = dependencies.keys(); e.hasMoreElements();) {
-            classes.addElement((String) e.nextElement());
-        }
-    }
-
-    /**
-     * Indicate if this analyzer can determine dependent files.
-     *
-     * @return true if the analyzer provides dependency file information.
-     */
-    protected boolean supportsFileDependencies() {
-        return true;
-    }
-}
-
diff --git a/src/main/org/apache/tools/ant/util/facade/FacadeTaskHelper.java b/src/main/org/apache/tools/ant/util/facade/FacadeTaskHelper.java
deleted file mode 100644
index 73ac32e..0000000
--- a/src/main/org/apache/tools/ant/util/facade/FacadeTaskHelper.java
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.util.facade;
-
-import java.util.Enumeration;
-import java.util.Vector;
-
-/**
- * Helper class for facade implementations - encapsulates treatment of
- * explicit implementation choices, magic properties and
- * implementation specific command line arguments.
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- *
- * @version $Revision$
- *
- * @since Ant 1.5
- */
-public class FacadeTaskHelper {
-
-    /**
-     * Command line arguments.
-     */
-    private Vector args = new Vector();
-
-    /**
-     * The explicitly chosen implementation.
-     */
-    private String userChoice;
-
-    /**
-     * The magic property to consult.
-     */
-    private String magicValue;
-
-    /**
-     * The default value.
-     */
-    private String defaultValue;
-
-    /**
-     * @param defaultValue The default value for the implementation.
-     * Must not be null.
-     */
-    public FacadeTaskHelper(String defaultValue) {
-        this(defaultValue, null);
-    }
-
-    /**
-     * @param defaultValue The default value for the implementation.
-     * Must not be null.
-     * @param magic the value of a magic property that may hold a user
-     * choice.  May be null.
-     */
-    public FacadeTaskHelper(String defaultValue, String magicValue) {
-        this.defaultValue = defaultValue;
-        this.magicValue = magicValue;
-    }
-
-    /**
-     * Used to set the value of the magic property.
-     */
-    public void setMagicValue(String magicValue) {
-        this.magicValue = magicValue;
-    }
-
-    /**
-     * Used for explicit user choices.
-     */
-    public void setImplementation(String userChoice) {
-        this.userChoice = userChoice;
-    }
-
-    /**
-     * Retrieves the implementation.
-     */
-    public String getImplementation() {
-        return userChoice != null ? userChoice
-                                  : (magicValue != null ? magicValue
-                                                        : defaultValue);
-    }
-
-    /**
-     * Retrieves the explicit user choice
-     */
-    public String getExplicitChoice() {
-        return userChoice;
-    }
-
-    /**
-     * Command line argument.
-     */
-    public void addImplementationArgument(ImplementationSpecificArgument arg) {
-        args.addElement(arg);
-    }
-
-    /**
-     * Retrieves the command line arguments enabled for the current
-     * facade implementation.
-     */
-    public String[] getArgs() {
-        Vector tmp = new Vector(args.size());
-        for (Enumeration enum = args.elements(); enum.hasMoreElements();) {
-            ImplementationSpecificArgument arg = 
-                ((ImplementationSpecificArgument) enum.nextElement());
-            String[] curr = arg.getParts(getImplementation());
-            for (int i = 0; i < curr.length; i++) {
-                tmp.addElement(curr[i]);
-            }
-        }
-        String[] res = new String[tmp.size()];
-        tmp.copyInto(res);
-        return res;
-    }
-}
diff --git a/src/main/org/apache/tools/ant/util/facade/ImplementationSpecificArgument.java b/src/main/org/apache/tools/ant/util/facade/ImplementationSpecificArgument.java
deleted file mode 100644
index 96943d1..0000000
--- a/src/main/org/apache/tools/ant/util/facade/ImplementationSpecificArgument.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.util.facade;
-
-import org.apache.tools.ant.types.Commandline;
-
-/**
- * Extension of Commandline.Argument with a new attribute that choses
- * a specific implementation of the facade.
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- *
- * @version $Revision$
- *
- * @since Ant 1.5
- */
-public class ImplementationSpecificArgument extends Commandline.Argument {
-    private String impl;
-
-    public ImplementationSpecificArgument() {
-        super();
-    }
-
-    public void setImplementation(String impl) {
-        this.impl = impl;
-    }
-
-    public final String[] getParts(String chosenImpl) {
-        if (impl == null || impl.equals(chosenImpl)) {
-            return super.getParts();
-        } else {
-            return new String[0];
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/util/optional/NoExitSecurityManager.java b/src/main/org/apache/tools/ant/util/optional/NoExitSecurityManager.java
deleted file mode 100644
index 9a88487..0000000
--- a/src/main/org/apache/tools/ant/util/optional/NoExitSecurityManager.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.util.optional;
-
-import org.apache.tools.ant.ExitException;
-
-import java.security.Permission;
-
-/**
- * This is intended as a replacement for the default system manager.
- * The goal is to intercept System.exit calls and make it throw an
- * exception instead so that a System.exit in a task does not
- * fully terminate Ant.
- *
- * @see ExitException
- * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
- */
-public class NoExitSecurityManager extends SecurityManager {
-
-    public void checkExit(int status) {
-        throw new ExitException(status);
-    }
-
-    public void checkPermission(Permission perm) {
-        // no permission here
-    }
-}
diff --git a/src/main/org/apache/tools/ant/util/regexp/JakartaOroMatcher.java b/src/main/org/apache/tools/ant/util/regexp/JakartaOroMatcher.java
deleted file mode 100644
index 2e0cc2d..0000000
--- a/src/main/org/apache/tools/ant/util/regexp/JakartaOroMatcher.java
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights 
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.util.regexp;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.oro.text.regex.MatchResult;
-import org.apache.oro.text.regex.Pattern;
-import org.apache.oro.text.regex.Perl5Compiler;
-import org.apache.oro.text.regex.Perl5Matcher;
-
-
-
-import java.util.Vector;
-
-/**
- * Implementation of RegexpMatcher for Jakarta-ORO.
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> 
- * @author <a href="mailto:mattinger@mindless.com">Matthew Inger</a>
- */
-public class JakartaOroMatcher implements RegexpMatcher {
-
-    private String pattern;
-    protected final Perl5Compiler compiler = new Perl5Compiler();
-    protected final Perl5Matcher matcher = new Perl5Matcher();
-
-    public JakartaOroMatcher() {}
-
-    /**
-     * Set the regexp pattern from the String description.
-     */
-    public void setPattern(String pattern) {
-        this.pattern = pattern;
-    }
-
-    /**
-     * Get a String representation of the regexp pattern
-     */
-    public String getPattern() {
-        return this.pattern;
-    }
-
-    /**
-     * Get a compiled representation of the regexp pattern
-     */
-    protected Pattern getCompiledPattern(int options)
-        throws BuildException {
-        try {
-            // compute the compiler options based on the input options first
-            Pattern p = compiler.compile(pattern, getCompilerOptions(options));
-            return p;
-        } catch (Exception e) {
-            throw new BuildException(e);
-        }
-    }
-
-    /**
-     * Does the given argument match the pattern?
-     */
-    public boolean matches(String argument) throws BuildException {
-        return matches(argument, MATCH_DEFAULT);
-    }
-
-    /**
-     * Does the given argument match the pattern?
-     */
-    public boolean matches(String input, int options)
-        throws BuildException {
-        Pattern p = getCompiledPattern(options);
-        return matcher.contains(input, p);
-    }
-
-    /**
-     * Returns a Vector of matched groups found in the argument.
-     *
-     * <p>Group 0 will be the full match, the rest are the
-     * parenthesized subexpressions</p>.
-     */
-    public Vector getGroups(String argument) throws BuildException {
-        return getGroups(argument, MATCH_DEFAULT);
-    }
-
-    /**
-     * Returns a Vector of matched groups found in the argument.
-     *
-     * <p>Group 0 will be the full match, the rest are the
-     * parenthesized subexpressions</p>.
-     */
-    public Vector getGroups(String input, int options)
-        throws BuildException {
-        if (!matches(input, options)) {
-            return null;
-        }
-        Vector v = new Vector();
-        MatchResult mr = matcher.getMatch();
-        int cnt = mr.groups();
-        for (int i = 0; i < cnt; i++) {
-            v.addElement(mr.group(i));
-        }
-        return v;
-    }
-
-    protected int getCompilerOptions(int options) {
-        int cOptions = Perl5Compiler.DEFAULT_MASK;
-
-        if (RegexpUtil.hasFlag(options, MATCH_CASE_INSENSITIVE)) {
-            cOptions |= Perl5Compiler.CASE_INSENSITIVE_MASK;
-        }
-        if (RegexpUtil.hasFlag(options, MATCH_MULTILINE)) {
-            cOptions |= Perl5Compiler.MULTILINE_MASK;
-        }
-        if (RegexpUtil.hasFlag(options, MATCH_SINGLELINE)) {
-            cOptions |= Perl5Compiler.SINGLELINE_MASK;
-        }
-        
-        return cOptions;
-    }
-
-}
diff --git a/src/main/org/apache/tools/ant/util/regexp/JakartaOroRegexp.java b/src/main/org/apache/tools/ant/util/regexp/JakartaOroRegexp.java
deleted file mode 100644
index 893755a..0000000
--- a/src/main/org/apache/tools/ant/util/regexp/JakartaOroRegexp.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights 
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.util.regexp;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.oro.text.regex.Perl5Substitution;
-import org.apache.oro.text.regex.Substitution;
-import org.apache.oro.text.regex.Util;
-
-
-
-/***
- * Regular expression implementation using the Jakarta Oro package
- * @author Matthew Inger <a href="mailto:mattinger@mindless.com">mattinger@mindless.com</a>
- */
-public class JakartaOroRegexp extends JakartaOroMatcher implements Regexp {
-
-    public JakartaOroRegexp() {
-        super();
-    }
-
-    public String substitute(String input, String argument, int options)
-        throws BuildException {
-        // translate \1 to $1 so that the Perl5Substitution will work
-        StringBuffer subst = new StringBuffer();
-        for (int i = 0; i < argument.length(); i++) {
-            char c = argument.charAt(i);
-            if (c == '\\') {
-                if (++i < argument.length()) {
-                    c = argument.charAt(i);
-                    int value = Character.digit(c, 10);
-                    if (value > -1) {
-                        subst.append("$").append(value);
-                    } else {
-                        subst.append(c);
-                    }
-                } else {
-                    // XXX - should throw an exception instead?
-                    subst.append('\\');
-                }
-            } else {
-                subst.append(c);
-            }
-        }
-        
-
-        // Do the substitution
-        Substitution s = 
-            new Perl5Substitution(subst.toString(), 
-                                  Perl5Substitution.INTERPOLATE_ALL);
-        return Util.substitute(matcher,
-                               getCompiledPattern(options),
-                               s,
-                               input,
-                               getSubsOptions(options));
-    }
-
-    protected int getSubsOptions(int options) {
-        boolean replaceAll = RegexpUtil.hasFlag(options, REPLACE_ALL);
-        int subsOptions = 1;
-        if (replaceAll) {
-            subsOptions = Util.SUBSTITUTE_ALL;
-        }
-        return subsOptions;
-    }
-
-}
diff --git a/src/main/org/apache/tools/ant/util/regexp/JakartaRegexpMatcher.java b/src/main/org/apache/tools/ant/util/regexp/JakartaRegexpMatcher.java
deleted file mode 100644
index 97629d1..0000000
--- a/src/main/org/apache/tools/ant/util/regexp/JakartaRegexpMatcher.java
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights 
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.util.regexp;
-
-import org.apache.regexp.RE;
-import org.apache.regexp.RESyntaxException;
-
-import org.apache.tools.ant.BuildException;
-import java.util.Vector;
-
-/**
- * Implementation of RegexpMatcher for Jakarta-Regexp.
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> 
- * @author Matthew Inger <a href="mailto:mattinger@mindless.com">mattinger@mindless.com</a>
- */
-public class JakartaRegexpMatcher implements RegexpMatcher {
-
-    private String pattern;
-
-    /**
-     * Set the regexp pattern from the String description.
-     */
-    public void setPattern(String pattern) {
-        this.pattern = pattern;
-    }
-
-    /**
-     * Get a String representation of the regexp pattern
-     */
-    public String getPattern() {
-        return pattern;
-    }
-
-    protected RE getCompiledPattern(int options)
-        throws BuildException {
-        int cOptions = getCompilerOptions(options);
-        try {
-            RE reg = new RE(pattern);
-            reg.setMatchFlags(cOptions);
-            return reg;
-        } catch (RESyntaxException e) {
-            throw new BuildException(e);
-        }
-    }
-
-    /**
-     * Does the given argument match the pattern?
-     */
-    public boolean matches(String argument) throws BuildException {
-        return matches(argument, MATCH_DEFAULT);
-    }
-
-    /**
-     * Does the given argument match the pattern?
-     */
-    public boolean matches(String input, int options)
-        throws BuildException {
-        return matches(input, getCompiledPattern(options));
-    }
-
-    private boolean matches(String input, RE reg) {
-        return reg.match(input);
-    }
-
-    /**
-     * Returns a Vector of matched groups found in the argument.
-     *
-     * <p>Group 0 will be the full match, the rest are the
-     * parenthesized subexpressions</p>.
-     */
-    public Vector getGroups(String argument) throws BuildException {
-        return getGroups(argument, MATCH_DEFAULT);
-    }
-
-    public Vector getGroups(String input, int options)
-        throws BuildException {
-        RE reg = getCompiledPattern(options);
-        if (!matches(input, reg)) {
-            return null;
-        }
-        Vector v = new Vector();
-        int cnt = reg.getParenCount();
-        for (int i = 0; i < cnt; i++) {
-            v.addElement(reg.getParen(i));
-        }
-        return v;
-    }
-
-    protected int getCompilerOptions(int options) {
-        int cOptions = RE.MATCH_NORMAL;
-
-        if (RegexpUtil.hasFlag(options, MATCH_CASE_INSENSITIVE)) {
-            cOptions |= RE.MATCH_CASEINDEPENDENT;
-        }
-        if (RegexpUtil.hasFlag(options, MATCH_MULTILINE)) {
-            cOptions |= RE.MATCH_MULTILINE;
-        }
-        if (RegexpUtil.hasFlag(options, MATCH_SINGLELINE)) {
-            cOptions |= RE.MATCH_SINGLELINE;
-        }
-
-        return cOptions;
-    }
-
-}
diff --git a/src/main/org/apache/tools/ant/util/regexp/JakartaRegexpRegexp.java b/src/main/org/apache/tools/ant/util/regexp/JakartaRegexpRegexp.java
deleted file mode 100644
index f33ab6c..0000000
--- a/src/main/org/apache/tools/ant/util/regexp/JakartaRegexpRegexp.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights 
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.util.regexp;
-
-
-import org.apache.tools.ant.BuildException;
-import org.apache.regexp.RE;
-import java.util.Vector;
-
-/***
- * Regular expression implementation using the Jakarta Regexp package
- * @author Matthew Inger <a href="mailto:mattinger@mindless.com">mattinger@mindless.com</a>
- */
-public class JakartaRegexpRegexp extends JakartaRegexpMatcher 
-    implements Regexp {
-
-    public JakartaRegexpRegexp() {
-        super();
-    }
-
-    protected int getSubsOptions(int options) {
-        int subsOptions = RE.REPLACE_FIRSTONLY;
-        if (RegexpUtil.hasFlag(options, REPLACE_ALL)) {
-            subsOptions = RE.REPLACE_ALL;
-        }
-        return subsOptions;
-    }
-
-    public String substitute(String input, String argument, int options)
-        throws BuildException {
-        Vector v = getGroups(input, options);
-
-        // replace \1 with the corresponding group
-        StringBuffer result = new StringBuffer();
-        for (int i = 0; i < argument.length(); i++) {
-            char c = argument.charAt(i);
-            if (c == '\\') {
-                if (++i < argument.length()) {
-                    c = argument.charAt(i);
-                    int value = Character.digit(c, 10);
-                    if (value > -1) {
-                        result.append((String) v.elementAt(value));
-                    } else {
-                        result.append(c);
-                    }
-                } else {
-                    // XXX - should throw an exception instead?
-                    result.append('\\');
-                }
-            } else {
-                result.append(c);
-            }
-        }
-        argument = result.toString();
-
-        RE reg = getCompiledPattern(options);
-        int sOptions = getSubsOptions(options);
-        return reg.subst(input, argument, sOptions);
-    }    
-}
diff --git a/src/main/org/apache/tools/ant/util/regexp/Jdk14RegexpMatcher.java b/src/main/org/apache/tools/ant/util/regexp/Jdk14RegexpMatcher.java
deleted file mode 100644
index f10a02c..0000000
--- a/src/main/org/apache/tools/ant/util/regexp/Jdk14RegexpMatcher.java
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights 
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.util.regexp;
-
-import java.util.Vector;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-import java.util.regex.PatternSyntaxException;
-
-import org.apache.tools.ant.BuildException;
-
-/**
- * Implementation of RegexpMatcher for the built-in regexp matcher of
- * JDK 1.4. UNIX_LINES option is enabled as a default.
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> 
- * @author Matthew Inger <a href="mailto:mattinger@mindless.com">mattinger@mindless.com</a>
- */
-public class Jdk14RegexpMatcher implements RegexpMatcher {
-
-    private String pattern;
-
-    public Jdk14RegexpMatcher() {}
-
-    /**
-     * Set the regexp pattern from the String description.
-     */
-    public void setPattern(String pattern) {
-        this.pattern = pattern;
-    }
-
-    /**
-     * Get a String representation of the regexp pattern
-     */
-    public String getPattern() {
-        return pattern;
-    }
-
-    protected Pattern getCompiledPattern(int options)
-        throws BuildException {
-        int cOptions = getCompilerOptions(options);
-        try {
-            Pattern p = Pattern.compile(this.pattern, cOptions);
-            return p;
-        } catch (PatternSyntaxException e) {
-            throw new BuildException(e);
-        }
-    }
-
-    /**
-     * Does the given argument match the pattern?
-     */
-    public boolean matches(String argument) throws BuildException {
-        return matches(argument, MATCH_DEFAULT);
-    }
-
-    /**
-     * Does the given argument match the pattern?
-     */
-    public boolean matches(String input, int options)
-        throws BuildException {
-        try {
-            Pattern p = getCompiledPattern(options);
-            return p.matcher(input).find();
-        } catch (Exception e) {
-            throw new BuildException(e);
-        }
-    }
-
-    /**
-     * Returns a Vector of matched groups found in the argument.
-     *
-     * <p>Group 0 will be the full match, the rest are the
-     * parenthesized subexpressions</p>.
-     */
-    public Vector getGroups(String argument) throws BuildException {
-        return getGroups(argument, MATCH_DEFAULT);
-    }
-
-    /**
-     * Returns a Vector of matched groups found in the argument.
-     *
-     * <p>Group 0 will be the full match, the rest are the
-     * parenthesized subexpressions</p>.
-     */
-    public Vector getGroups(String input, int options)
-        throws BuildException {
-        Pattern p = getCompiledPattern(options);
-        Matcher matcher = p.matcher(input);
-        if (!matcher.find()) {
-            return null;
-        }
-        Vector v = new Vector();
-        int cnt = matcher.groupCount();
-        for (int i = 0; i <= cnt; i++) {
-            v.addElement(matcher.group(i));
-        }
-        return v;
-    }
-
-    protected int getCompilerOptions(int options) {
-        // be strict about line separator
-        int cOptions = Pattern.UNIX_LINES;
-
-        if (RegexpUtil.hasFlag(options, MATCH_CASE_INSENSITIVE)) {
-            cOptions |= Pattern.CASE_INSENSITIVE;
-        }
-        if (RegexpUtil.hasFlag(options, MATCH_MULTILINE)) {
-            cOptions |= Pattern.MULTILINE;
-        }
-        if (RegexpUtil.hasFlag(options, MATCH_SINGLELINE)) {
-            cOptions |= Pattern.DOTALL;
-        }
-
-        return cOptions;
-    }
-
-}
diff --git a/src/main/org/apache/tools/ant/util/regexp/Jdk14RegexpRegexp.java b/src/main/org/apache/tools/ant/util/regexp/Jdk14RegexpRegexp.java
deleted file mode 100644
index 69b64db..0000000
--- a/src/main/org/apache/tools/ant/util/regexp/Jdk14RegexpRegexp.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights 
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.util.regexp;
-
-
-import org.apache.tools.ant.BuildException;
-
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-
-/***
- * Regular expression implementation using the JDK 1.4 regular expression package
- * @author Matthew Inger <a href="mailto:mattinger@mindless.com">mattinger@mindless.com</a>
- */
-public class Jdk14RegexpRegexp extends Jdk14RegexpMatcher implements Regexp {
-
-    public Jdk14RegexpRegexp() {
-        super();
-    }
-
-    protected int getSubsOptions(int options) {
-        int subsOptions = REPLACE_FIRST;
-        if (RegexpUtil.hasFlag(options, REPLACE_ALL)) {
-            subsOptions = REPLACE_ALL;
-        }
-        return subsOptions;
-    }
-
-    public String substitute(String input, String argument, int options)
-        throws BuildException {
-        // translate \1 to $(1) so that the Matcher will work
-        StringBuffer subst = new StringBuffer();
-        for (int i = 0; i < argument.length(); i++) {
-            char c = argument.charAt(i);
-            if (c == '\\') {
-                if (++i < argument.length()) {
-                    c = argument.charAt(i);
-                    int value = Character.digit(c, 10);
-                    if (value > -1) {
-                        subst.append("$").append(value);
-                    } else {
-                        subst.append(c);
-                    }
-                } else {
-                    // XXX - should throw an exception instead?
-                    subst.append('\\');
-                }
-            } else {
-                subst.append(c);
-            }
-        }
-        argument = subst.toString();
-        
-        int sOptions = getSubsOptions(options);
-        Pattern p = getCompiledPattern(options);
-        StringBuffer sb = new StringBuffer();
-
-        Matcher m = p.matcher(input);
-        if (RegexpUtil.hasFlag(sOptions, REPLACE_ALL)) {
-            sb.append(m.replaceAll(argument));
-        } else {
-            boolean res = m.find();
-            if (res) {
-                m.appendReplacement(sb, argument);
-                m.appendTail(sb);
-            } else {
-                sb.append(input);
-            }
-        }
-
-        return sb.toString();
-    }    
-}
diff --git a/src/main/org/apache/tools/ant/util/regexp/Regexp.java b/src/main/org/apache/tools/ant/util/regexp/Regexp.java
deleted file mode 100644
index 7a29ec2..0000000
--- a/src/main/org/apache/tools/ant/util/regexp/Regexp.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights 
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.util.regexp;
-
-import org.apache.tools.ant.BuildException;
-
-/***
- * Interface which represents a regular expression, and the operations
- * that can be performed on it.
- *
- * @author <a href="mailto:mattinger@mindless.com">Matthew Inger</a>
- */
-public interface Regexp extends RegexpMatcher {
-
-    /**
-     * Replace only the first occurance of the regular expression
-     */
-    int REPLACE_FIRST          = 0x00000001;
-
-    /**
-     * Replace all occurances of the regular expression
-     */
-    int REPLACE_ALL            = 0x00000010;
-
-    /**
-     * Perform a substitution on the regular expression.
-     * @param input The string to substitute on
-     * @param argument The string which defines the substitution
-     * @param options The list of options for the match and replace. See the
-     *                MATCH_ and REPLACE_ constants above.
-     */
-    String substitute(String input, String argument, int options)
-        throws BuildException;
-}
diff --git a/src/main/org/apache/tools/ant/util/regexp/RegexpFactory.java b/src/main/org/apache/tools/ant/util/regexp/RegexpFactory.java
deleted file mode 100644
index 4af37ca..0000000
--- a/src/main/org/apache/tools/ant/util/regexp/RegexpFactory.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights 
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.util.regexp;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-
-/***
- * Regular expression factory, which will create Regexp objects.  The
- * actual implementation class depends on the System or Ant Property:
- * <code>ant.regexp.regexpimpl</code>.
- *
- * @author Matthew Inger <a href="mailto:mattinger@mindless.com">mattinger@mindless.com</a>
- * @version $Revision$
- */
-public class RegexpFactory extends RegexpMatcherFactory {
-    public RegexpFactory() {
-    }
-
-    /***
-     * Create a new regular expression matcher instance.
-     */
-    public Regexp newRegexp() throws BuildException {
-        return (Regexp) newRegexp(null);
-    }
-
-    /***
-     * Create a new regular expression matcher instance.
-     *
-     * @param p Project whose ant.regexp.regexpimpl property will be used.
-     */
-    public Regexp newRegexp(Project p) throws BuildException {
-        String systemDefault = null;
-        if (p == null) {
-            systemDefault = System.getProperty("ant.regexp.regexpimpl");
-        } else {
-            systemDefault = p.getProperty("ant.regexp.regexpimpl");
-        }
-        
-        if (systemDefault != null) {
-            return createRegexpInstance(systemDefault);
-            // XXX     should we silently catch possible exceptions and try to 
-            //         load a different implementation?
-        }
-
-        try {
-            return createRegexpInstance("org.apache.tools.ant.util.regexp.Jdk14RegexpRegexp");
-        } catch (BuildException be) {}
-        
-        try {
-            return createRegexpInstance("org.apache.tools.ant.util.regexp.JakartaOroRegexp");
-        } catch (BuildException be) {}
-        
-        try {
-            return createRegexpInstance("org.apache.tools.ant.util.regexp.JakartaRegexpRegexp");
-        } catch (BuildException be) {}
-
-        throw new BuildException("No supported regular expression matcher found");
-    }
-
-    /**
-     * Wrapper over RegexpMatcherFactory.createInstance that ensures that 
-     * we are dealing with a Regexp implementation.
-     *
-     * @since 1.3
-     * 
-     * @see RegexpMatcherFactory#createInstance(String)
-     */
-    protected Regexp createRegexpInstance(String classname) 
-        throws BuildException {
-
-        RegexpMatcher m = createInstance(classname);
-        if (m instanceof Regexp) {
-            return (Regexp) m;
-        } else {
-            throw new BuildException(classname + " doesn't implement the Regexp interface");
-        }
-    }
-
-}
diff --git a/src/main/org/apache/tools/ant/util/regexp/RegexpMatcher.java b/src/main/org/apache/tools/ant/util/regexp/RegexpMatcher.java
deleted file mode 100644
index 3dd2c0e..0000000
--- a/src/main/org/apache/tools/ant/util/regexp/RegexpMatcher.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights 
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.util.regexp;
-
-import org.apache.tools.ant.BuildException;
-import java.util.Vector;
-
-/**
- * Interface describing a regular expression matcher.
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> 
- * @author <a href="mailto:mattinger@mindless.com">Matthew Inger</a>
- */
-public interface RegexpMatcher {
-
-    /***
-     * Default Mask (case insensitive, neither multiline nor
-     * singleline specified).
-     */
-    int MATCH_DEFAULT          = 0x00000000;
-
-    /***
-     * Perform a case insenstive match
-     */
-    int MATCH_CASE_INSENSITIVE = 0x00000100;
-    
-    /***
-     * Treat the input as a multiline input
-     */
-    int MATCH_MULTILINE        = 0x00001000;
-
-    /***
-     * Treat the input as singleline input ('.' matches newline)
-     */
-    int MATCH_SINGLELINE       = 0x00010000;
-
-
-    /**
-     * Set the regexp pattern from the String description.
-     */
-    void setPattern(String pattern) throws BuildException;
-
-    /**
-     * Get a String representation of the regexp pattern
-     */
-    String getPattern() throws BuildException;
-
-    /**
-     * Does the given argument match the pattern?
-     */
-    boolean matches(String argument) throws BuildException;
-
-    /**
-     * Returns a Vector of matched groups found in the argument.
-     *
-     * <p>Group 0 will be the full match, the rest are the
-     * parenthesized subexpressions</p>.
-     */
-    Vector getGroups(String argument) throws BuildException;
-
-    /***
-     * Does this regular expression match the input, given
-     * certain options
-     * @param input The string to check for a match
-     * @param options The list of options for the match. See the
-     *                MATCH_ constants above.
-     */
-    boolean matches(String input, int options) throws BuildException;
-
-    /***
-     * Get the match groups from this regular expression.  The return
-     * type of the elements is always String.
-     * @param input The string to check for a match
-     * @param options The list of options for the match. See the
-     *                MATCH_ constants above.
-     */
-    Vector getGroups(String input, int options) throws BuildException;
-
-}
diff --git a/src/main/org/apache/tools/ant/util/regexp/RegexpMatcherFactory.java b/src/main/org/apache/tools/ant/util/regexp/RegexpMatcherFactory.java
deleted file mode 100644
index 6d70bcb..0000000
--- a/src/main/org/apache/tools/ant/util/regexp/RegexpMatcherFactory.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights 
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.util.regexp;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-
-/**
- * Simple Factory Class that produces an implementation of
- * RegexpMatcher based on the system property
- * <code>ant.regexp.matcherimpl</code> and the classes
- * available.
- * 
- * <p>In a more general framework this class would be abstract and
- * have a static newInstance method.</p>
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> 
- */
-public class RegexpMatcherFactory {
-
-    public RegexpMatcherFactory() {}
-
-    /***
-     * Create a new regular expression instance.
-     */
-    public RegexpMatcher newRegexpMatcher() throws BuildException {
-        return newRegexpMatcher(null);
-    }
-
-    /***
-     * Create a new regular expression instance.
-     *
-     * @param p Project whose ant.regexp.regexpimpl property will be used.
-     */
-    public RegexpMatcher newRegexpMatcher(Project p)
-        throws BuildException {
-        String systemDefault = null;
-        if (p == null) {
-            systemDefault = System.getProperty("ant.regexp.regexpimpl");
-        } else {
-            systemDefault = p.getProperty("ant.regexp.regexpimpl");
-        }
-        
-        if (systemDefault != null) {
-            return createInstance(systemDefault);
-            // XXX     should we silently catch possible exceptions and try to 
-            //         load a different implementation?
-        }
-
-        try {
-            return createInstance("org.apache.tools.ant.util.regexp.Jdk14RegexpMatcher");
-        } catch (BuildException be) {}
-        
-        try {
-            return createInstance("org.apache.tools.ant.util.regexp.JakartaOroMatcher");
-        } catch (BuildException be) {}
-        
-        try {
-            return createInstance("org.apache.tools.ant.util.regexp.JakartaRegexpMatcher");
-        } catch (BuildException be) {}
-
-        throw new BuildException("No supported regular expression matcher found");
-   }
-
-    protected RegexpMatcher createInstance(String className) 
-        throws BuildException {
-        try {
-            Class implClass = Class.forName(className);
-            return (RegexpMatcher) implClass.newInstance();
-        } catch (Throwable t) {
-            throw new BuildException(t);
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/ant/util/regexp/RegexpUtil.java b/src/main/org/apache/tools/ant/util/regexp/RegexpUtil.java
deleted file mode 100644
index 2ad2da0..0000000
--- a/src/main/org/apache/tools/ant/util/regexp/RegexpUtil.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights 
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.util.regexp;
-
-/***
- * Regular expression utilities class which handles flag operations
- *
- * @author <a href="mailto:mattinger@mindless.com">Matthew Inger</a>
- */
-public class RegexpUtil {
-    public static final boolean hasFlag(int options, int flag) {
-        return ((options & flag) > 0);
-    }
-
-    public static final int removeFlag(int options, int flag) {
-        return (options & (0xFFFFFFFF - flag));
-    }
-}
diff --git a/src/main/org/apache/tools/ant/version.txt b/src/main/org/apache/tools/ant/version.txt
deleted file mode 100644
index b6b2f8d..0000000
--- a/src/main/org/apache/tools/ant/version.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-VERSION=@VERSION@
-DATE=@DATE@
diff --git a/src/main/org/apache/tools/bzip2/BZip2Constants.java b/src/main/org/apache/tools/bzip2/BZip2Constants.java
deleted file mode 100644
index 6e28d7a..0000000
--- a/src/main/org/apache/tools/bzip2/BZip2Constants.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-/*
- * This package is based on the work done by Keiron Liddle, Aftex Software
- * <keiron@aftexsw.com> to whom the Ant project is very grateful for his
- * great code.
- */
-
-package org.apache.tools.bzip2;
-
-/**
- * Base class for both the compress and decompress classes.
- * Holds common arrays, and static data.
- *
- * @author <a href="mailto:keiron@aftexsw.com">Keiron Liddle</a>
- */
-public interface BZip2Constants {
-
-    int baseBlockSize = 100000;
-    int MAX_ALPHA_SIZE = 258;
-    int MAX_CODE_LEN = 23;
-    int RUNA = 0;
-    int RUNB = 1;
-    int N_GROUPS = 6;
-    int G_SIZE = 50;
-    int N_ITERS = 4;
-    int MAX_SELECTORS = (2 + (900000 / G_SIZE));
-    int NUM_OVERSHOOT_BYTES = 20;
-
-    int[] rNums = {
-        619, 720, 127, 481, 931, 816, 813, 233, 566, 247,
-        985, 724, 205, 454, 863, 491, 741, 242, 949, 214,
-        733, 859, 335, 708, 621, 574, 73, 654, 730, 472,
-        419, 436, 278, 496, 867, 210, 399, 680, 480, 51,
-        878, 465, 811, 169, 869, 675, 611, 697, 867, 561,
-        862, 687, 507, 283, 482, 129, 807, 591, 733, 623,
-        150, 238, 59, 379, 684, 877, 625, 169, 643, 105,
-        170, 607, 520, 932, 727, 476, 693, 425, 174, 647,
-        73, 122, 335, 530, 442, 853, 695, 249, 445, 515,
-        909, 545, 703, 919, 874, 474, 882, 500, 594, 612,
-        641, 801, 220, 162, 819, 984, 589, 513, 495, 799,
-        161, 604, 958, 533, 221, 400, 386, 867, 600, 782,
-        382, 596, 414, 171, 516, 375, 682, 485, 911, 276,
-        98, 553, 163, 354, 666, 933, 424, 341, 533, 870,
-        227, 730, 475, 186, 263, 647, 537, 686, 600, 224,
-        469, 68, 770, 919, 190, 373, 294, 822, 808, 206,
-        184, 943, 795, 384, 383, 461, 404, 758, 839, 887,
-        715, 67, 618, 276, 204, 918, 873, 777, 604, 560,
-        951, 160, 578, 722, 79, 804, 96, 409, 713, 940,
-        652, 934, 970, 447, 318, 353, 859, 672, 112, 785,
-        645, 863, 803, 350, 139, 93, 354, 99, 820, 908,
-        609, 772, 154, 274, 580, 184, 79, 626, 630, 742,
-        653, 282, 762, 623, 680, 81, 927, 626, 789, 125,
-        411, 521, 938, 300, 821, 78, 343, 175, 128, 250,
-        170, 774, 972, 275, 999, 639, 495, 78, 352, 126,
-        857, 956, 358, 619, 580, 124, 737, 594, 701, 612,
-        669, 112, 134, 694, 363, 992, 809, 743, 168, 974,
-        944, 375, 748, 52, 600, 747, 642, 182, 862, 81,
-        344, 805, 988, 739, 511, 655, 814, 334, 249, 515,
-        897, 955, 664, 981, 649, 113, 974, 459, 893, 228,
-        433, 837, 553, 268, 926, 240, 102, 654, 459, 51,
-        686, 754, 806, 760, 493, 403, 415, 394, 687, 700,
-        946, 670, 656, 610, 738, 392, 760, 799, 887, 653,
-        978, 321, 576, 617, 626, 502, 894, 679, 243, 440,
-        680, 879, 194, 572, 640, 724, 926, 56, 204, 700,
-        707, 151, 457, 449, 797, 195, 791, 558, 945, 679,
-        297, 59, 87, 824, 713, 663, 412, 693, 342, 606,
-        134, 108, 571, 364, 631, 212, 174, 643, 304, 329,
-        343, 97, 430, 751, 497, 314, 983, 374, 822, 928,
-        140, 206, 73, 263, 980, 736, 876, 478, 430, 305,
-        170, 514, 364, 692, 829, 82, 855, 953, 676, 246,
-        369, 970, 294, 750, 807, 827, 150, 790, 288, 923,
-        804, 378, 215, 828, 592, 281, 565, 555, 710, 82,
-        896, 831, 547, 261, 524, 462, 293, 465, 502, 56,
-        661, 821, 976, 991, 658, 869, 905, 758, 745, 193,
-        768, 550, 608, 933, 378, 286, 215, 979, 792, 961,
-        61, 688, 793, 644, 986, 403, 106, 366, 905, 644,
-        372, 567, 466, 434, 645, 210, 389, 550, 919, 135,
-        780, 773, 635, 389, 707, 100, 626, 958, 165, 504,
-        920, 176, 193, 713, 857, 265, 203, 50, 668, 108,
-        645, 990, 626, 197, 510, 357, 358, 850, 858, 364,
-        936, 638
-    };
-}
diff --git a/src/main/org/apache/tools/bzip2/CBZip2InputStream.java b/src/main/org/apache/tools/bzip2/CBZip2InputStream.java
deleted file mode 100644
index ef6404a..0000000
--- a/src/main/org/apache/tools/bzip2/CBZip2InputStream.java
+++ /dev/null
@@ -1,878 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-/*
- * This package is based on the work done by Keiron Liddle, Aftex Software
- * <keiron@aftexsw.com> to whom the Ant project is very grateful for his
- * great code.
- */
-package org.apache.tools.bzip2;
-
-import java.io.InputStream;
-import java.io.IOException;
-
-/**
- * An input stream that decompresses from the BZip2 format (without the file
- * header chars) to be read as any other stream.
- *
- * @author <a href="mailto:keiron@aftexsw.com">Keiron Liddle</a>
- */
-public class CBZip2InputStream extends InputStream implements BZip2Constants {
-    private static void cadvise() {
-        System.out.println("CRC Error");
-        //throw new CCoruptionError();
-    }
-
-    private static void badBGLengths() {
-        cadvise();
-    }
-
-    private static void bitStreamEOF() {
-        cadvise();
-    }
-
-    private static void compressedStreamEOF() {
-        cadvise();
-    }
-
-    private void makeMaps() {
-        int i;
-        nInUse = 0;
-        for (i = 0; i < 256; i++) {
-            if (inUse[i]) {
-                seqToUnseq[nInUse] = (char) i;
-                unseqToSeq[i] = (char) nInUse;
-                nInUse++;
-            }
-        }
-    }
-
-    /*
-      index of the last char in the block, so
-      the block size == last + 1.
-    */
-    private int  last;
-
-    /*
-      index in zptr[] of original string after sorting.
-    */
-    private int  origPtr;
-
-    /*
-      always: in the range 0 .. 9.
-      The current block size is 100000 * this number.
-    */
-    private int blockSize100k;
-
-    private boolean blockRandomised;
-
-    private int bytesIn;
-    private int bytesOut;
-    private int bsBuff;
-    private int bsLive;
-    private CRC mCrc = new CRC();
-
-    private boolean[] inUse = new boolean[256];
-    private int nInUse;
-
-    private char[] seqToUnseq = new char[256];
-    private char[] unseqToSeq = new char[256];
-
-    private char[] selector = new char[MAX_SELECTORS];
-    private char[] selectorMtf = new char[MAX_SELECTORS];
-
-    private int[] tt;
-    private char[] ll8;
-
-    /*
-      freq table collected to save a pass over the data
-      during decompression.
-    */
-    private int unzftab[] = new int[256];
-
-    private int limit[][] = new int[N_GROUPS][MAX_ALPHA_SIZE];
-    private int base[][] = new int[N_GROUPS][MAX_ALPHA_SIZE];
-    private int perm[][] = new int[N_GROUPS][MAX_ALPHA_SIZE];
-    private int minLens[] = new int[N_GROUPS];
-
-    private InputStream bsStream;
-
-    private boolean streamEnd = false;
-
-    private int currentChar = -1;
-
-    private static final int START_BLOCK_STATE = 1;
-    private static final int RAND_PART_A_STATE = 2;
-    private static final int RAND_PART_B_STATE = 3;
-    private static final int RAND_PART_C_STATE = 4;
-    private static final int NO_RAND_PART_A_STATE = 5;
-    private static final int NO_RAND_PART_B_STATE = 6;
-    private static final int NO_RAND_PART_C_STATE = 7;
-
-    private int currentState = START_BLOCK_STATE;
-
-    private int storedBlockCRC, storedCombinedCRC;
-    private int computedBlockCRC, computedCombinedCRC;
-
-    int i2, count, chPrev, ch2;
-    int i, tPos;
-    int rNToGo = 0;
-    int rTPos  = 0;
-    int j2;
-    char z;
-
-    public CBZip2InputStream(InputStream zStream) {
-        ll8 = null;
-        tt = null;
-        bsSetStream(zStream);
-        initialize();
-        initBlock();
-        setupBlock();
-    }
-
-    public int read() {
-        if (streamEnd) {
-            return -1;
-        } else {
-            int retChar = currentChar;
-            switch(currentState) {
-            case START_BLOCK_STATE:
-                break;
-            case RAND_PART_A_STATE:
-                break;
-            case RAND_PART_B_STATE:
-                setupRandPartB();
-                break;
-            case RAND_PART_C_STATE:
-                setupRandPartC();
-                break;
-            case NO_RAND_PART_A_STATE:
-                break;
-            case NO_RAND_PART_B_STATE:
-                setupNoRandPartB();
-                break;
-            case NO_RAND_PART_C_STATE:
-                setupNoRandPartC();
-                break;
-            default:
-                break;
-            }
-            return retChar;
-        }
-    }
-
-    private void initialize() {
-        char magic3, magic4;
-        magic3 = bsGetUChar();
-        magic4 = bsGetUChar();
-        if (magic3 != 'h' || magic4 < '1' || magic4 > '9') {
-            bsFinishedWithStream();
-            streamEnd = true;
-            return;
-        }
-
-        setDecompressStructureSizes(magic4 - '0');
-        computedCombinedCRC = 0;
-    }
-
-    private void initBlock() {
-        char magic1, magic2, magic3, magic4;
-        char magic5, magic6;
-        magic1 = bsGetUChar();
-        magic2 = bsGetUChar();
-        magic3 = bsGetUChar();
-        magic4 = bsGetUChar();
-        magic5 = bsGetUChar();
-        magic6 = bsGetUChar();
-        if (magic1 == 0x17 && magic2 == 0x72 && magic3 == 0x45
-            && magic4 == 0x38 && magic5 == 0x50 && magic6 == 0x90) {
-            complete();
-            return;
-        }
-
-        if (magic1 != 0x31 || magic2 != 0x41 || magic3 != 0x59
-            || magic4 != 0x26 || magic5 != 0x53 || magic6 != 0x59) {
-            badBlockHeader();
-            streamEnd = true;
-            return;
-        }
-
-        storedBlockCRC = bsGetInt32();
-
-        if (bsR(1) == 1) {
-            blockRandomised = true;
-        } else {
-            blockRandomised = false;
-        }
-
-        //        currBlockNo++;
-        getAndMoveToFrontDecode();
-
-        mCrc.initialiseCRC();
-        currentState = START_BLOCK_STATE;
-    }
-
-    private void endBlock() {
-        computedBlockCRC = mCrc.getFinalCRC();
-        /* A bad CRC is considered a fatal error. */
-        if (storedBlockCRC != computedBlockCRC) {
-            crcError();
-        }
-
-        computedCombinedCRC = (computedCombinedCRC << 1)
-            | (computedCombinedCRC >>> 31);
-        computedCombinedCRC ^= computedBlockCRC;
-    }
-
-    private void complete() {
-        storedCombinedCRC = bsGetInt32();
-        if (storedCombinedCRC != computedCombinedCRC) {
-            crcError();
-        }
-
-        bsFinishedWithStream();
-        streamEnd = true;
-    }
-
-    private static void blockOverrun() {
-        cadvise();
-    }
-
-    private static void badBlockHeader() {
-        cadvise();
-    }
-
-    private static void crcError() {
-        cadvise();
-    }
-
-    private void bsFinishedWithStream() {
-        try {
-            if (this.bsStream != null) {
-                if (this.bsStream != System.in) {
-                    this.bsStream.close();
-                    this.bsStream= null;
-                }
-            }
-        } catch (IOException ioe) {
-        }
-    }
-
-    private void bsSetStream(InputStream f) {
-        bsStream = f;
-        bsLive = 0;
-        bsBuff = 0;
-        bytesOut = 0;
-        bytesIn = 0;
-    }
-
-    private int bsR(int n) {
-        int v;
-        {
-            while (bsLive < n) {
-                int zzi;
-                char thech = 0;
-                try {
-                    thech = (char) bsStream.read();
-                } catch (IOException e) {
-                    compressedStreamEOF();
-                }
-                if (thech == -1) {
-                    compressedStreamEOF();
-                }
-                zzi = thech;
-                bsBuff = (bsBuff << 8) | (zzi & 0xff);
-                bsLive += 8;
-            }
-        }
-
-        v = (bsBuff >> (bsLive - n)) & ((1 << n) - 1);
-        bsLive -= n;
-        return v;
-    }
-
-    private char bsGetUChar() {
-        return (char) bsR(8);
-    }
-
-    private int bsGetint() {
-        int u = 0;
-        u = (u << 8) | bsR(8);
-        u = (u << 8) | bsR(8);
-        u = (u << 8) | bsR(8);
-        u = (u << 8) | bsR(8);
-        return u;
-    }
-
-    private int bsGetIntVS(int numBits) {
-        return (int) bsR(numBits);
-    }
-
-    private int bsGetInt32() {
-        return (int) bsGetint();
-    }
-
-    private void hbCreateDecodeTables(int[] limit, int[] base,
-                                      int[] perm, char[] length,
-                                      int minLen, int maxLen, int alphaSize) {
-        int pp, i, j, vec;
-
-        pp = 0;
-        for (i = minLen; i <= maxLen; i++) {
-            for (j = 0; j < alphaSize; j++) {
-                if (length[j] == i) {
-                    perm[pp] = j;
-                    pp++;
-                }
-            }
-        };
-
-        for (i = 0; i < MAX_CODE_LEN; i++) {
-            base[i] = 0;
-        }
-        for (i = 0; i < alphaSize; i++) {
-            base[length[i] + 1]++;
-        }
-
-        for (i = 1; i < MAX_CODE_LEN; i++) {
-            base[i] += base[i - 1];
-        }
-
-        for (i = 0; i < MAX_CODE_LEN; i++) {
-            limit[i] = 0;
-        }
-        vec = 0;
-
-        for (i = minLen; i <= maxLen; i++) {
-            vec += (base[i + 1] - base[i]);
-            limit[i] = vec - 1;
-            vec <<= 1;
-        }
-        for (i = minLen + 1; i <= maxLen; i++) {
-            base[i] = ((limit[i - 1] + 1) << 1) - base[i];
-        }
-    }
-
-    private void recvDecodingTables() {
-        char len[][] = new char[N_GROUPS][MAX_ALPHA_SIZE];
-        int i, j, t, nGroups, nSelectors, alphaSize;
-        int minLen, maxLen;
-        boolean[] inUse16 = new boolean[16];
-
-        /* Receive the mapping table */
-        for (i = 0; i < 16; i++) {
-            if (bsR(1) == 1) {
-                inUse16[i] = true;
-            } else {
-                inUse16[i] = false;
-            }
-        }
-
-        for (i = 0; i < 256; i++) {
-            inUse[i] = false;
-        }
-
-        for (i = 0; i < 16; i++) {
-            if (inUse16[i]) {
-                for (j = 0; j < 16; j++) {
-                    if (bsR(1) == 1) {
-                        inUse[i * 16 + j] = true;
-                    }
-                }
-            }
-        }
-
-        makeMaps();
-        alphaSize = nInUse + 2;
-
-        /* Now the selectors */
-        nGroups = bsR(3);
-        nSelectors = bsR(15);
-        for (i = 0; i < nSelectors; i++) {
-            j = 0;
-            while (bsR(1) == 1) {
-                j++;
-            }
-            selectorMtf[i] = (char) j;
-        }
-
-        /* Undo the MTF values for the selectors. */
-        {
-            char[] pos = new char[N_GROUPS];
-            char tmp, v;
-            for (v = 0; v < nGroups; v++) {
-                pos[v] = v;
-            }
-
-            for (i = 0; i < nSelectors; i++) {
-                v = selectorMtf[i];
-                tmp = pos[v];
-                while (v > 0) {
-                    pos[v] = pos[v - 1];
-                    v--;
-                }
-                pos[0] = tmp;
-                selector[i] = tmp;
-            }
-        }
-
-        /* Now the coding tables */
-        for (t = 0; t < nGroups; t++) {
-            int curr = bsR(5);
-            for (i = 0; i < alphaSize; i++) {
-                while (bsR(1) == 1) {
-                    if (bsR(1) == 0) {
-                        curr++;
-                    } else {
-                        curr--;
-                    }
-                }
-                len[t][i] = (char) curr;
-            }
-        }
-
-        /* Create the Huffman decoding tables */
-        for (t = 0; t < nGroups; t++) {
-            minLen = 32;
-            maxLen = 0;
-            for (i = 0; i < alphaSize; i++) {
-                if (len[t][i] > maxLen) {
-                    maxLen = len[t][i];
-                }
-                if (len[t][i] < minLen) {
-                    minLen = len[t][i];
-                }
-            }
-            hbCreateDecodeTables(limit[t], base[t], perm[t], len[t], minLen,
-                                 maxLen, alphaSize);
-            minLens[t] = minLen;
-        }
-    }
-
-    private void getAndMoveToFrontDecode() {
-        char[] yy = new char[256];
-        int i, j, nextSym, limitLast;
-        int EOB, groupNo, groupPos;
-
-        limitLast = baseBlockSize * blockSize100k;
-        origPtr = bsGetIntVS(24);
-
-        recvDecodingTables();
-        EOB = nInUse + 1;
-        groupNo = -1;
-        groupPos = 0;
-
-        /*
-          Setting up the unzftab entries here is not strictly
-          necessary, but it does save having to do it later
-          in a separate pass, and so saves a block's worth of
-          cache misses.
-        */
-        for (i = 0; i <= 255; i++) {
-            unzftab[i] = 0;
-        }
-
-        for (i = 0; i <= 255; i++) {
-            yy[i] = (char) i;
-        }
-
-        last = -1;
-
-        {
-            int zt, zn, zvec, zj;
-            if (groupPos == 0) {
-                groupNo++;
-                groupPos = G_SIZE;
-            }
-            groupPos--;
-            zt = selector[groupNo];
-            zn = minLens[zt];
-            zvec = bsR(zn);
-            while (zvec > limit[zt][zn]) {
-                zn++;
-                {
-                    {
-                        while (bsLive < 1) {
-                            int zzi;
-                            char thech = 0;
-                            try {
-                                thech = (char) bsStream.read();
-                            } catch (IOException e) {
-                                compressedStreamEOF();
-                            }
-                            if (thech == -1) {
-                                compressedStreamEOF();
-                            }
-                            zzi = thech;
-                            bsBuff = (bsBuff << 8) | (zzi & 0xff);
-                            bsLive += 8;
-                        }
-                    }
-                    zj = (bsBuff >> (bsLive - 1)) & 1;
-                    bsLive--;
-                }
-                zvec = (zvec << 1) | zj;
-            }
-            nextSym = perm[zt][zvec - base[zt][zn]];
-        }
-
-        while (true) {
-
-            if (nextSym == EOB) {
-                break;
-            }
-
-            if (nextSym == RUNA || nextSym == RUNB) {
-                char ch;
-                int s = -1;
-                int N = 1;
-                do {
-                    if (nextSym == RUNA) {
-                        s = s + (0 + 1) * N;
-                    } else if (nextSym == RUNB) {
-                        s = s + (1 + 1) * N;
-                           }
-                    N = N * 2;
-                    {
-                        int zt, zn, zvec, zj;
-                        if (groupPos == 0) {
-                            groupNo++;
-                            groupPos = G_SIZE;
-                        }
-                        groupPos--;
-                        zt = selector[groupNo];
-                        zn = minLens[zt];
-                        zvec = bsR(zn);
-                        while (zvec > limit[zt][zn]) {
-                            zn++;
-                            {
-                                {
-                                    while (bsLive < 1) {
-                                        int zzi;
-                                        char thech = 0;
-                                        try {
-                                            thech = (char) bsStream.read();
-                                        } catch (IOException e) {
-                                            compressedStreamEOF();
-                                        }
-                                        if (thech == -1) {
-                                            compressedStreamEOF();
-                                        }
-                                        zzi = thech;
-                                        bsBuff = (bsBuff << 8) | (zzi & 0xff);
-                                        bsLive += 8;
-                                    }
-                                }
-                                zj = (bsBuff >> (bsLive - 1)) & 1;
-                                bsLive--;
-                            }
-                            zvec = (zvec << 1) | zj;
-                        };
-                        nextSym = perm[zt][zvec - base[zt][zn]];
-                    }
-                } while (nextSym == RUNA || nextSym == RUNB);
-
-                s++;
-                ch = seqToUnseq[yy[0]];
-                unzftab[ch] += s;
-
-                while (s > 0) {
-                    last++;
-                    ll8[last] = ch;
-                    s--;
-                };
-
-                if (last >= limitLast) {
-                    blockOverrun();
-                }
-                continue;
-            } else {
-                char tmp;
-                last++;
-                if (last >= limitLast) {
-                    blockOverrun();
-                }
-
-                tmp = yy[nextSym - 1];
-                unzftab[seqToUnseq[tmp]]++;
-                ll8[last] = seqToUnseq[tmp];
-
-                /*
-                  This loop is hammered during decompression,
-                  hence the unrolling.
-
-                  for (j = nextSym-1; j > 0; j--) yy[j] = yy[j-1];
-                */
-
-                j = nextSym - 1;
-                for (; j > 3; j -= 4) {
-                    yy[j]     = yy[j - 1];
-                    yy[j - 1] = yy[j - 2];
-                    yy[j - 2] = yy[j - 3];
-                    yy[j - 3] = yy[j - 4];
-                }
-                for (; j > 0; j--) {
-                    yy[j] = yy[j - 1];
-                }
-
-                yy[0] = tmp;
-                {
-                    int zt, zn, zvec, zj;
-                    if (groupPos == 0) {
-                        groupNo++;
-                        groupPos = G_SIZE;
-                    }
-                    groupPos--;
-                    zt = selector[groupNo];
-                    zn = minLens[zt];
-                    zvec = bsR(zn);
-                    while (zvec > limit[zt][zn]) {
-                        zn++;
-                        {
-                            {
-                                while (bsLive < 1) {
-                                    int zzi;
-                                    char thech = 0;
-                                    try {
-                                        thech = (char) bsStream.read();
-                                    } catch (IOException e) {
-                                        compressedStreamEOF();
-                                    }
-                                    zzi = thech;
-                                    bsBuff = (bsBuff << 8) | (zzi & 0xff);
-                                    bsLive += 8;
-                                }
-                            }
-                            zj = (bsBuff >> (bsLive - 1)) & 1;
-                            bsLive--;
-                        }
-                        zvec = (zvec << 1) | zj;
-                    };
-                    nextSym = perm[zt][zvec - base[zt][zn]];
-                }
-                continue;
-            }
-        }
-    }
-
-    private void setupBlock() {
-        int[] cftab = new int[257];
-        char ch;
-
-        cftab[0] = 0;
-        for (i = 1; i <= 256; i++) {
-            cftab[i] = unzftab[i - 1];
-        }
-        for (i = 1; i <= 256; i++) {
-            cftab[i] += cftab[i - 1];
-        }
-
-        for (i = 0; i <= last; i++) {
-            ch = (char) ll8[i];
-            tt[cftab[ch]] = i;
-            cftab[ch]++;
-        }
-        cftab = null;
-
-        tPos = tt[origPtr];
-
-        count = 0;
-        i2 = 0;
-        ch2 = 256;   /* not a char and not EOF */
-
-        if (blockRandomised) {
-            rNToGo = 0;
-            rTPos = 0;
-            setupRandPartA();
-        } else {
-            setupNoRandPartA();
-        }
-    }
-
-    private void setupRandPartA() {
-        if (i2 <= last) {
-            chPrev = ch2;
-            ch2 = ll8[tPos];
-            tPos = tt[tPos];
-            if (rNToGo == 0) {
-                rNToGo = rNums[rTPos];
-                rTPos++;
-                if (rTPos == 512) {
-                    rTPos = 0;
-                }
-            }
-            rNToGo--;
-            ch2 ^= (int) ((rNToGo == 1) ? 1 : 0);
-            i2++;
-
-            currentChar = ch2;
-            currentState = RAND_PART_B_STATE;
-            mCrc.updateCRC(ch2);
-        } else {
-            endBlock();
-            initBlock();
-            setupBlock();
-        }
-    }
-
-    private void setupNoRandPartA() {
-        if (i2 <= last) {
-            chPrev = ch2;
-            ch2 = ll8[tPos];
-            tPos = tt[tPos];
-            i2++;
-
-            currentChar = ch2;
-            currentState = NO_RAND_PART_B_STATE;
-            mCrc.updateCRC(ch2);
-        } else {
-            endBlock();
-            initBlock();
-            setupBlock();
-        }
-    }
-
-    private void setupRandPartB() {
-        if (ch2 != chPrev) {
-            currentState = RAND_PART_A_STATE;
-            count = 1;
-            setupRandPartA();
-        } else {
-            count++;
-            if (count >= 4) {
-                z = ll8[tPos];
-                tPos = tt[tPos];
-                if (rNToGo == 0) {
-                    rNToGo = rNums[rTPos];
-                    rTPos++;
-                    if (rTPos == 512) {
-                        rTPos = 0;
-                    }
-                }
-                rNToGo--;
-                z ^= ((rNToGo == 1) ? 1 : 0);
-                j2 = 0;
-                currentState = RAND_PART_C_STATE;
-                setupRandPartC();
-            } else {
-                currentState = RAND_PART_A_STATE;
-                setupRandPartA();
-            }
-        }
-    }
-
-    private void setupRandPartC() {
-        if (j2 < (int) z) {
-            currentChar = ch2;
-            mCrc.updateCRC(ch2);
-            j2++;
-        } else {
-            currentState = RAND_PART_A_STATE;
-            i2++;
-            count = 0;
-            setupRandPartA();
-        }
-    }
-
-    private void setupNoRandPartB() {
-        if (ch2 != chPrev) {
-            currentState = NO_RAND_PART_A_STATE;
-            count = 1;
-            setupNoRandPartA();
-        } else {
-            count++;
-            if (count >= 4) {
-                z = ll8[tPos];
-                tPos = tt[tPos];
-                currentState = NO_RAND_PART_C_STATE;
-                j2 = 0;
-                setupNoRandPartC();
-            } else {
-                currentState = NO_RAND_PART_A_STATE;
-                setupNoRandPartA();
-            }
-        }
-    }
-
-    private void setupNoRandPartC() {
-        if (j2 < (int) z) {
-            currentChar = ch2;
-            mCrc.updateCRC(ch2);
-            j2++;
-        } else {
-            currentState = NO_RAND_PART_A_STATE;
-            i2++;
-            count = 0;
-            setupNoRandPartA();
-        }
-    }
-
-    private void setDecompressStructureSizes(int newSize100k) {
-        if (!(0 <= newSize100k && newSize100k <= 9 && 0 <= blockSize100k
-               && blockSize100k <= 9)) {
-            // throw new IOException("Invalid block size");
-        }
-
-        blockSize100k = newSize100k;
-
-        if (newSize100k == 0) {
-            return;
-        }
-
-        int n = baseBlockSize * newSize100k;
-        ll8 = new char[n];
-        tt = new int[n];
-    }
-}
-
diff --git a/src/main/org/apache/tools/bzip2/CBZip2OutputStream.java b/src/main/org/apache/tools/bzip2/CBZip2OutputStream.java
deleted file mode 100644
index 39a2a5f..0000000
--- a/src/main/org/apache/tools/bzip2/CBZip2OutputStream.java
+++ /dev/null
@@ -1,1672 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-/*
- * This package is based on the work done by Keiron Liddle, Aftex Software
- * <keiron@aftexsw.com> to whom the Ant project is very grateful for his
- * great code.
- */
-
-package org.apache.tools.bzip2;
-
-import java.io.OutputStream;
-import java.io.IOException;
-
-/**
- * An output stream that compresses into the BZip2 format (without the file
- * header chars) into another stream.
- *
- * @author <a href="mailto:keiron@aftexsw.com">Keiron Liddle</a>
- *
- * TODO:    Update to BZip2 1.0.1
- */
-public class CBZip2OutputStream extends OutputStream implements BZip2Constants {
-    protected static final int SETMASK = (1 << 21);
-    protected static final int CLEARMASK = (~SETMASK);
-    protected static final int GREATER_ICOST = 15;
-    protected static final int LESSER_ICOST = 0;
-    protected static final int SMALL_THRESH = 20;
-    protected static final int DEPTH_THRESH = 10;
-
-    /*
-      If you are ever unlucky/improbable enough
-      to get a stack overflow whilst sorting,
-      increase the following constant and try
-      again.  In practice I have never seen the
-      stack go above 27 elems, so the following
-      limit seems very generous.
-    */
-    protected static final int QSORT_STACK_SIZE = 1000;
-
-    private static void panic() {
-        System.out.println("panic");
-        //throw new CError();
-    }
-
-    private void makeMaps() {
-        int i;
-        nInUse = 0;
-        for (i = 0; i < 256; i++) {
-            if (inUse[i]) {
-                seqToUnseq[nInUse] = (char) i;
-                unseqToSeq[i] = (char) nInUse;
-                nInUse++;
-            }
-        }
-    }
-
-    protected static void hbMakeCodeLengths(char[] len, int[] freq,
-                                            int alphaSize, int maxLen) {
-        /*
-          Nodes and heap entries run from 1.  Entry 0
-          for both the heap and nodes is a sentinel.
-        */
-        int nNodes, nHeap, n1, n2, i, j, k;
-        boolean  tooLong;
-
-        int[] heap = new int[MAX_ALPHA_SIZE + 2];
-        int[] weight = new int[MAX_ALPHA_SIZE * 2];
-        int[] parent = new int[MAX_ALPHA_SIZE * 2];
-
-        for (i = 0; i < alphaSize; i++) {
-            weight[i + 1] = (freq[i] == 0 ? 1 : freq[i]) << 8;
-        }
-
-        while (true) {
-            nNodes = alphaSize;
-            nHeap = 0;
-
-            heap[0] = 0;
-            weight[0] = 0;
-            parent[0] = -2;
-
-            for (i = 1; i <= alphaSize; i++) {
-                parent[i] = -1;
-                nHeap++;
-                heap[nHeap] = i;
-                {
-                    int zz, tmp;
-                    zz = nHeap;
-                    tmp = heap[zz];
-                    while (weight[tmp] < weight[heap[zz >> 1]]) {
-                        heap[zz] = heap[zz >> 1];
-                        zz >>= 1;
-                    }
-                    heap[zz] = tmp;
-                }
-            }
-            if (!(nHeap < (MAX_ALPHA_SIZE + 2))) {
-                panic();
-            }
-
-            while (nHeap > 1) {
-                n1 = heap[1];
-                heap[1] = heap[nHeap];
-                nHeap--;
-                {
-                    int zz = 0, yy = 0, tmp = 0;
-                    zz = 1;
-                    tmp = heap[zz];
-                    while (true) {
-                        yy = zz << 1;
-                        if (yy > nHeap) {
-                            break;
-                        }
-                        if (yy < nHeap &&
-                            weight[heap[yy + 1]] < weight[heap[yy]]) {
-                            yy++;
-                        }
-                        if (weight[tmp] < weight[heap[yy]]) {
-                            break;
-                        }
-                        heap[zz] = heap[yy];
-                        zz = yy;
-                    }
-                    heap[zz] = tmp;
-                }
-                n2 = heap[1];
-                heap[1] = heap[nHeap];
-                nHeap--;
-                {
-                    int zz = 0, yy = 0, tmp = 0;
-                    zz = 1;
-                    tmp = heap[zz];
-                    while (true) {
-                        yy = zz << 1;
-                        if (yy > nHeap) {
-                            break;
-                        }
-                        if (yy < nHeap &&
-                            weight[heap[yy + 1]] < weight[heap[yy]]) {
-                            yy++;
-                        }
-                        if (weight[tmp] < weight[heap[yy]]) {
-                            break;
-                        }
-                        heap[zz] = heap[yy];
-                        zz = yy;
-                    }
-                    heap[zz] = tmp;
-                }
-                nNodes++;
-                parent[n1] = parent[n2] = nNodes;
-
-                weight[nNodes] = ((weight[n1] & 0xffffff00)
-                                  + (weight[n2] & 0xffffff00))
-                    | (1 + (((weight[n1] & 0x000000ff) >
-                             (weight[n2] & 0x000000ff)) ?
-                            (weight[n1] & 0x000000ff) :
-                            (weight[n2] & 0x000000ff)));
-
-                parent[nNodes] = -1;
-                nHeap++;
-                heap[nHeap] = nNodes;
-                {
-                    int zz = 0, tmp = 0;
-                    zz = nHeap;
-                    tmp = heap[zz];
-                    while (weight[tmp] < weight[heap[zz >> 1]]) {
-                        heap[zz] = heap[zz >> 1];
-                        zz >>= 1;
-                    }
-                    heap[zz] = tmp;
-                }
-            }
-            if (!(nNodes < (MAX_ALPHA_SIZE * 2))) {
-                panic();
-            }
-
-            tooLong = false;
-            for (i = 1; i <= alphaSize; i++) {
-                j = 0;
-                k = i;
-                while (parent[k] >= 0) {
-                    k = parent[k];
-                    j++;
-                }
-                len[i - 1] = (char) j;
-                if (j > maxLen) {
-                    tooLong = true;
-                }
-            }
-
-            if (!tooLong) {
-                break;
-            }
-
-            for (i = 1; i < alphaSize; i++) {
-                j = weight[i] >> 8;
-                j = 1 + (j / 2);
-                weight[i] = j << 8;
-            }
-        }
-    }
-
-    /*
-      index of the last char in the block, so
-      the block size == last + 1.
-    */
-    int last;
-
-    /*
-      index in zptr[] of original string after sorting.
-    */
-    int origPtr;
-
-    /*
-      always: in the range 0 .. 9.
-      The current block size is 100000 * this number.
-    */
-    int blockSize100k;
-
-    boolean blockRandomised;
-
-    int bytesIn;
-    int bytesOut;
-    int bsBuff;
-    int bsLive;
-    CRC mCrc = new CRC();
-
-    private boolean[] inUse = new boolean[256];
-    private int nInUse;
-
-    private char[] seqToUnseq = new char[256];
-    private char[] unseqToSeq = new char[256];
-
-    private char[] selector = new char[MAX_SELECTORS];
-    private char[] selectorMtf = new char[MAX_SELECTORS];
-
-    private char[] block;
-    private int[] quadrant;
-    private int[] zptr;
-    private short[] szptr;
-    private int[] ftab;
-
-    private int nMTF;
-
-    private int[] mtfFreq = new int[MAX_ALPHA_SIZE];
-
-    /*
-     * Used when sorting.  If too many long comparisons
-     * happen, we stop sorting, randomise the block
-     * slightly, and try again.
-     */
-    private int workFactor;
-    private int workDone;
-    private int workLimit;
-    private boolean firstAttempt;
-    private int nBlocksRandomised;
-
-    private int currentChar = -1;
-    private int runLength = 0;
-
-    public CBZip2OutputStream(OutputStream inStream) throws IOException {
-        this(inStream, 9);
-    }
-
-    public CBZip2OutputStream(OutputStream inStream, int inBlockSize)
-        throws IOException {
-        block = null;
-        quadrant = null;
-        zptr = null;
-        ftab = null;
-
-        bsSetStream(inStream);
-
-        workFactor = 50;
-        if (inBlockSize > 9) {
-            inBlockSize = 9;
-        }
-        if (inBlockSize < 1) {
-            inBlockSize = 1;
-        }
-        blockSize100k = inBlockSize;
-        allocateCompressStructures();
-        initialize();
-        initBlock();
-    }
-
-    /**
-     *
-     * modified by Oliver Merkel, 010128
-     *
-     */
-    public void write(int bv) throws IOException {
-        int b = (256 + bv) % 256;
-        if (currentChar != -1) {
-            if (currentChar == b) {
-                runLength++;
-                if (runLength > 254) {
-                    writeRun();
-                    currentChar = -1;
-                    runLength = 0;
-                }
-            } else {
-                writeRun();
-                runLength = 1;
-                currentChar = b;
-            }
-        } else {
-            currentChar = b;
-            runLength++;
-        }
-    }
-
-    private void writeRun() throws IOException {
-        if (last < allowableBlockSize) {
-            inUse[currentChar] = true;
-            for (int i = 0; i < runLength; i++) {
-                mCrc.updateCRC((char) currentChar);
-            }
-            switch (runLength) {
-            case 1:
-                last++;
-                block[last + 1] = (char) currentChar;
-                break;
-            case 2:
-                last++;
-                block[last + 1] = (char) currentChar;
-                last++;
-                block[last + 1] = (char) currentChar;
-                break;
-            case 3:
-                last++;
-                block[last + 1] = (char) currentChar;
-                last++;
-                block[last + 1] = (char) currentChar;
-                last++;
-                block[last + 1] = (char) currentChar;
-                break;
-            default:
-                inUse[runLength - 4] = true;
-                last++;
-                block[last + 1] = (char) currentChar;
-                last++;
-                block[last + 1] = (char) currentChar;
-                last++;
-                block[last + 1] = (char) currentChar;
-                last++;
-                block[last + 1] = (char) currentChar;
-                last++;
-                block[last + 1] = (char) (runLength - 4);
-                break;
-            }
-        } else {
-            endBlock();
-            initBlock();
-            writeRun();
-        }
-    }
-
-    boolean closed = false;
-
-    public void finalize() throws Throwable {
-        close();
-    }
-
-    public void close() throws IOException {
-        if (closed) {
-            return;
-        }
-
-        if (runLength > 0) {
-            writeRun();
-        }
-        currentChar = -1;
-        endBlock();
-        endCompression();
-        closed = true;
-        super.close();
-        bsStream.close();
-    }
-
-    public void flush() throws IOException {
-        super.flush();
-        bsStream.flush();
-    }
-
-    private int blockCRC, combinedCRC;
-
-    private void initialize() throws IOException {
-        bytesIn = 0;
-        bytesOut = 0;
-        nBlocksRandomised = 0;
-
-        /* Write `magic' bytes h indicating file-format == huffmanised,
-           followed by a digit indicating blockSize100k.
-        */
-        bsPutUChar('h');
-        bsPutUChar('0' + blockSize100k);
-
-        combinedCRC = 0;
-    }
-
-    private int allowableBlockSize;
-
-    private void initBlock() {
-        //        blockNo++;
-        mCrc.initialiseCRC();
-        last = -1;
-        //        ch = 0;
-
-        for (int i = 0; i < 256; i++) {
-            inUse[i] = false;
-        }
-
-        /* 20 is just a paranoia constant */
-        allowableBlockSize = baseBlockSize * blockSize100k - 20;
-    }
-
-    private void endBlock() throws IOException {
-        blockCRC = mCrc.getFinalCRC();
-        combinedCRC = (combinedCRC << 1) | (combinedCRC >>> 31);
-        combinedCRC ^= blockCRC;
-
-        /* sort the block and establish posn of original string */
-        doReversibleTransformation();
-
-        /*
-          A 6-byte block header, the value chosen arbitrarily
-          as 0x314159265359 :-).  A 32 bit value does not really
-          give a strong enough guarantee that the value will not
-          appear by chance in the compressed datastream.  Worst-case
-          probability of this event, for a 900k block, is about
-          2.0e-3 for 32 bits, 1.0e-5 for 40 bits and 4.0e-8 for 48 bits.
-          For a compressed file of size 100Gb -- about 100000 blocks --
-          only a 48-bit marker will do.  NB: normal compression/
-          decompression do *not* rely on these statistical properties.
-          They are only important when trying to recover blocks from
-          damaged files.
-        */
-        bsPutUChar(0x31);
-        bsPutUChar(0x41);
-        bsPutUChar(0x59);
-        bsPutUChar(0x26);
-        bsPutUChar(0x53);
-        bsPutUChar(0x59);
-
-        /* Now the block's CRC, so it is in a known place. */
-        bsPutint(blockCRC);
-
-        /* Now a single bit indicating randomisation. */
-        if (blockRandomised) {
-            bsW(1, 1);
-            nBlocksRandomised++;
-        } else {
-            bsW(1, 0);
-        }
-
-        /* Finally, block's contents proper. */
-        moveToFrontCodeAndSend();
-    }
-
-    private void endCompression() throws IOException {
-        /*
-          Now another magic 48-bit number, 0x177245385090, to
-          indicate the end of the last block.  (sqrt(pi), if
-          you want to know.  I did want to use e, but it contains
-          too much repetition -- 27 18 28 18 28 46 -- for me
-          to feel statistically comfortable.  Call me paranoid.)
-        */
-        bsPutUChar(0x17);
-        bsPutUChar(0x72);
-        bsPutUChar(0x45);
-        bsPutUChar(0x38);
-        bsPutUChar(0x50);
-        bsPutUChar(0x90);
-
-        bsPutint(combinedCRC);
-
-        bsFinishedWithStream();
-    }
-
-    private void hbAssignCodes (int[] code, char[] length, int minLen,
-                                int maxLen, int alphaSize) {
-        int n, vec, i;
-
-        vec = 0;
-        for (n = minLen; n <= maxLen; n++) {
-            for (i = 0; i < alphaSize; i++) {
-                if (length[i] == n) {
-                    code[i] = vec;
-                    vec++;
-                }
-            };
-            vec <<= 1;
-        }
-    }
-
-    private void bsSetStream(OutputStream f) {
-        bsStream = f;
-        bsLive = 0;
-        bsBuff = 0;
-        bytesOut = 0;
-        bytesIn = 0;
-    }
-
-    private void bsFinishedWithStream() throws IOException {
-        while (bsLive > 0) {
-            int ch = (bsBuff >> 24);
-            try {
-                bsStream.write(ch); // write 8-bit
-            } catch (IOException e) {
-                throw  e;
-            }
-            bsBuff <<= 8;
-            bsLive -= 8;
-            bytesOut++;
-        }
-    }
-
-    private void bsW(int n, int v) throws IOException {
-        while (bsLive >= 8) {
-            int ch = (bsBuff >> 24);
-            try {
-                bsStream.write(ch); // write 8-bit
-            } catch (IOException e) {
-                throw e;
-            }
-            bsBuff <<= 8;
-            bsLive -= 8;
-            bytesOut++;
-        }
-        bsBuff |= (v << (32 - bsLive - n));
-        bsLive += n;
-    }
-
-    private void bsPutUChar(int c) throws IOException {
-        bsW(8, c);
-    }
-
-    private void bsPutint(int u) throws IOException {
-        bsW(8, (u >> 24) & 0xff);
-        bsW(8, (u >> 16) & 0xff);
-        bsW(8, (u >>  8) & 0xff);
-        bsW(8,  u        & 0xff);
-    }
-
-    private void bsPutIntVS(int numBits, int c) throws IOException {
-        bsW(numBits, c);
-    }
-
-    private void sendMTFValues() throws IOException {
-        char len[][] = new char[N_GROUPS][MAX_ALPHA_SIZE];
-
-        int v, t, i, j, gs, ge, totc, bt, bc, iter;
-        int nSelectors = 0, alphaSize, minLen, maxLen, selCtr;
-        int nGroups, nBytes;
-
-        alphaSize = nInUse + 2;
-        for (t = 0; t < N_GROUPS; t++) {
-            for (v = 0; v < alphaSize; v++) {
-                len[t][v] = (char) GREATER_ICOST;
-            }
-        }
-
-        /* Decide how many coding tables to use */
-        if (nMTF <= 0) {
-            panic();
-        }
-
-        if (nMTF < 200) {
-            nGroups = 2;
-        } else if (nMTF < 600) {
-            nGroups = 3;
-        } else if (nMTF < 1200) {
-            nGroups = 4;
-        } else if (nMTF < 2400) {
-            nGroups = 5;
-        } else {
-            nGroups = 6;
-        }
-
-        /* Generate an initial set of coding tables */ {
-            int nPart, remF, tFreq, aFreq;
-
-            nPart = nGroups;
-            remF  = nMTF;
-            gs = 0;
-            while (nPart > 0) {
-                tFreq = remF / nPart;
-                ge = gs - 1;
-                aFreq = 0;
-                while (aFreq < tFreq && ge < alphaSize - 1) {
-                    ge++;
-                    aFreq += mtfFreq[ge];
-                }
-
-                if (ge > gs && nPart != nGroups && nPart != 1
-                    && ((nGroups - nPart) % 2 == 1)) {
-                    aFreq -= mtfFreq[ge];
-                    ge--;
-                }
-
-                for (v = 0; v < alphaSize; v++) {
-                    if (v >= gs && v <= ge) {
-                        len[nPart - 1][v] = (char) LESSER_ICOST;
-                    } else {
-                        len[nPart - 1][v] = (char) GREATER_ICOST;
-                    }
-                }
-
-                nPart--;
-                gs = ge + 1;
-                remF -= aFreq;
-            }
-        }
-
-        int[][] rfreq = new int[N_GROUPS][MAX_ALPHA_SIZE];
-        int[] fave = new int[N_GROUPS];
-        short[] cost = new short[N_GROUPS];
-        /*
-          Iterate up to N_ITERS times to improve the tables.
-        */
-        for (iter = 0; iter < N_ITERS; iter++) {
-            for (t = 0; t < nGroups; t++) {
-                fave[t] = 0;
-            }
-
-            for (t = 0; t < nGroups; t++) {
-                for (v = 0; v < alphaSize; v++) {
-                    rfreq[t][v] = 0;
-                }
-            }
-
-            nSelectors = 0;
-            totc = 0;
-            gs = 0;
-            while (true) {
-
-                /* Set group start & end marks. */
-                if (gs >= nMTF) {
-                    break;
-                }
-                ge = gs + G_SIZE - 1;
-                if (ge >= nMTF) {
-                    ge = nMTF - 1;
-                }
-
-                /*
-                  Calculate the cost of this group as coded
-                  by each of the coding tables.
-                */
-                for (t = 0; t < nGroups; t++) {
-                    cost[t] = 0;
-                }
-
-                if (nGroups == 6) {
-                    short cost0, cost1, cost2, cost3, cost4, cost5;
-                    cost0 = cost1 = cost2 = cost3 = cost4 = cost5 = 0;
-                    for (i = gs; i <= ge; i++) {
-                        short icv = szptr[i];
-                        cost0 += len[0][icv];
-                        cost1 += len[1][icv];
-                        cost2 += len[2][icv];
-                        cost3 += len[3][icv];
-                        cost4 += len[4][icv];
-                        cost5 += len[5][icv];
-                    }
-                    cost[0] = cost0;
-                    cost[1] = cost1;
-                    cost[2] = cost2;
-                    cost[3] = cost3;
-                    cost[4] = cost4;
-                    cost[5] = cost5;
-                } else {
-                    for (i = gs; i <= ge; i++) {
-                        short icv = szptr[i];
-                        for (t = 0; t < nGroups; t++) {
-                            cost[t] += len[t][icv];
-                        }
-                    }
-                }
-
-                /*
-                  Find the coding table which is best for this group,
-                  and record its identity in the selector table.
-                */
-                bc = 999999999;
-                bt = -1;
-                for (t = 0; t < nGroups; t++) {
-                    if (cost[t] < bc) {
-                        bc = cost[t];
-                        bt = t;
-                    }
-                };
-                totc += bc;
-                fave[bt]++;
-                selector[nSelectors] = (char) bt;
-                nSelectors++;
-
-                /*
-                  Increment the symbol frequencies for the selected table.
-                */
-                for (i = gs; i <= ge; i++) {
-                    rfreq[bt][szptr[i]]++;
-                }
-
-                gs = ge + 1;
-            }
-
-            /*
-              Recompute the tables based on the accumulated frequencies.
-            */
-            for (t = 0; t < nGroups; t++) {
-                hbMakeCodeLengths(len[t], rfreq[t], alphaSize, 20);
-            }
-        }
-
-        rfreq = null;
-        fave = null;
-        cost = null;
-
-        if (!(nGroups < 8)) {
-            panic();
-        }
-        if (!(nSelectors < 32768 && nSelectors <= (2 + (900000 / G_SIZE)))) {
-            panic();
-        }
-
-
-        /* Compute MTF values for the selectors. */
-        {
-            char[] pos = new char[N_GROUPS];
-            char ll_i, tmp2, tmp;
-            for (i = 0; i < nGroups; i++) {
-                pos[i] = (char) i;
-            }
-            for (i = 0; i < nSelectors; i++) {
-                ll_i = selector[i];
-                j = 0;
-                tmp = pos[j];
-                while (ll_i != tmp) {
-                    j++;
-                    tmp2 = tmp;
-                    tmp = pos[j];
-                    pos[j] = tmp2;
-                }
-                pos[0] = tmp;
-                selectorMtf[i] = (char) j;
-            }
-        }
-
-        int[][] code = new int[N_GROUPS][MAX_ALPHA_SIZE];
-
-        /* Assign actual codes for the tables. */
-        for (t = 0; t < nGroups; t++) {
-            minLen = 32;
-            maxLen = 0;
-            for (i = 0; i < alphaSize; i++) {
-                if (len[t][i] > maxLen) {
-                    maxLen = len[t][i];
-                }
-                if (len[t][i] < minLen) {
-                    minLen = len[t][i];
-                }
-            }
-            if (maxLen > 20) {
-                panic();
-            }
-            if (minLen < 1) {
-                panic();
-            }
-            hbAssignCodes(code[t], len[t], minLen, maxLen, alphaSize);
-        }
-
-        /* Transmit the mapping table. */
-        {
-            boolean[] inUse16 = new boolean[16];
-            for (i = 0; i < 16; i++) {
-                inUse16[i] = false;
-                for (j = 0; j < 16; j++) {
-                    if (inUse[i * 16 + j]) {
-                        inUse16[i] = true;
-                    }
-                }
-            }
-
-            nBytes = bytesOut;
-            for (i = 0; i < 16; i++) {
-                if (inUse16[i]) {
-                    bsW(1, 1);
-                } else {
-                    bsW(1, 0);
-                }
-            }
-
-            for (i = 0; i < 16; i++) {
-                if (inUse16[i]) {
-                    for (j = 0; j < 16; j++) {
-                        if (inUse[i * 16 + j]) {
-                            bsW(1, 1);
-                        } else {
-                            bsW(1, 0);
-                        }
-                    }
-                }
-            }
-
-        }
-
-        /* Now the selectors. */
-        nBytes = bytesOut;
-        bsW (3, nGroups);
-        bsW (15, nSelectors);
-        for (i = 0; i < nSelectors; i++) {
-            for (j = 0; j < selectorMtf[i]; j++) {
-                bsW(1, 1);
-            }
-            bsW(1, 0);
-        }
-
-        /* Now the coding tables. */
-        nBytes = bytesOut;
-
-        for (t = 0; t < nGroups; t++) {
-            int curr = len[t][0];
-            bsW(5, curr);
-            for (i = 0; i < alphaSize; i++) {
-                while (curr < len[t][i]) {
-                    bsW(2, 2);
-                    curr++; /* 10 */
-                }
-                while (curr > len[t][i]) {
-                    bsW(2, 3);
-                    curr--; /* 11 */
-                }
-                bsW (1, 0);
-            }
-        }
-
-        /* And finally, the block data proper */
-        nBytes = bytesOut;
-        selCtr = 0;
-        gs = 0;
-        while (true) {
-            if (gs >= nMTF) {
-                break;
-            }
-            ge = gs + G_SIZE - 1;
-            if (ge >= nMTF) {
-                ge = nMTF - 1;
-            }
-            for (i = gs; i <= ge; i++) {
-                bsW(len[selector[selCtr]][szptr[i]],
-                    code[selector[selCtr]][szptr[i]]);
-            }
-
-            gs = ge + 1;
-            selCtr++;
-        }
-        if (!(selCtr == nSelectors)) {
-            panic();
-        }
-    }
-
-    private void moveToFrontCodeAndSend () throws IOException {
-        bsPutIntVS(24, origPtr);
-        generateMTFValues();
-        sendMTFValues();
-    }
-
-    private OutputStream bsStream;
-
-    private void simpleSort(int lo, int hi, int d) {
-        int i, j, h, bigN, hp;
-        int v;
-
-        bigN = hi - lo + 1;
-        if (bigN < 2) {
-            return;
-        }
-
-        hp = 0;
-        while (incs[hp] < bigN) {
-            hp++;
-        }
-        hp--;
-
-        for (; hp >= 0; hp--) {
-            h = incs[hp];
-
-            i = lo + h;
-            while (true) {
-                /* copy 1 */
-                if (i > hi) {
-                    break;
-                }
-                v = zptr[i];
-                j = i;
-                while (fullGtU(zptr[j - h] + d, v + d)) {
-                    zptr[j] = zptr[j - h];
-                    j = j - h;
-                    if (j <= (lo + h - 1)) {
-                        break;
-                    }
-                }
-                zptr[j] = v;
-                i++;
-
-                /* copy 2 */
-                if (i > hi) {
-                    break;
-                }
-                v = zptr[i];
-                j = i;
-                while (fullGtU(zptr[j - h] + d, v + d)) {
-                    zptr[j] = zptr[j - h];
-                    j = j - h;
-                    if (j <= (lo + h - 1)) {
-                        break;
-                    }
-                }
-                zptr[j] = v;
-                i++;
-
-                /* copy 3 */
-                if (i > hi) {
-                    break;
-                }
-                v = zptr[i];
-                j = i;
-                while (fullGtU(zptr[j - h] + d, v + d)) {
-                    zptr[j] = zptr[j - h];
-                    j = j - h;
-                    if (j <= (lo + h - 1)) {
-                        break;
-                    }
-                }
-                zptr[j] = v;
-                i++;
-
-                if (workDone > workLimit && firstAttempt) {
-                    return;
-                }
-            }
-        }
-    }
-
-    private void vswap(int p1, int p2, int n) {
-        int temp = 0;
-        while (n > 0) {
-            temp = zptr[p1];
-            zptr[p1] = zptr[p2];
-            zptr[p2] = temp;
-            p1++;
-            p2++;
-            n--;
-        }
-    }
-
-    private char med3(char a, char b, char c) {
-        char t;
-        if (a > b) {
-            t = a;
-            a = b;
-            b = t;
-        }
-        if (b > c) {
-            t = b;
-            b = c;
-            c = t;
-        }
-        if (a > b) {
-            b = a;
-        }
-        return b;
-    }
-
-    private class StackElem {
-        int ll;
-        int hh;
-        int dd;
-    }
-
-    private void qSort3(int loSt, int hiSt, int dSt) {
-        int unLo, unHi, ltLo, gtHi, med, n, m;
-        int sp, lo, hi, d;
-        StackElem[] stack = new StackElem[QSORT_STACK_SIZE];
-        for (int count = 0; count < QSORT_STACK_SIZE; count++) {
-            stack[count] = new StackElem();
-        }
-
-        sp = 0;
-
-        stack[sp].ll = loSt;
-        stack[sp].hh = hiSt;
-        stack[sp].dd = dSt;
-        sp++;
-
-        while (sp > 0) {
-            if (sp >= QSORT_STACK_SIZE) {
-                panic();
-            }
-
-            sp--;
-            lo = stack[sp].ll;
-            hi = stack[sp].hh;
-            d = stack[sp].dd;
-
-            if (hi - lo < SMALL_THRESH || d > DEPTH_THRESH) {
-                simpleSort(lo, hi, d);
-                if (workDone > workLimit && firstAttempt) {
-                    return;
-                }
-                continue;
-            }
-
-            med = med3(block[zptr[lo] + d + 1],
-                       block[zptr[hi            ] + d  + 1],
-                       block[zptr[(lo + hi) >> 1] + d + 1]);
-
-            unLo = ltLo = lo;
-            unHi = gtHi = hi;
-
-            while (true) {
-                while (true) {
-                    if (unLo > unHi) {
-                        break;
-                    }
-                    n = ((int) block[zptr[unLo] + d + 1]) - med;
-                    if (n == 0) {
-                        int temp = 0;
-                        temp = zptr[unLo];
-                        zptr[unLo] = zptr[ltLo];
-                        zptr[ltLo] = temp;
-                        ltLo++;
-                        unLo++;
-                        continue;
-                    };
-                    if (n >  0) {
-                        break;
-                    }
-                    unLo++;
-                }
-                while (true) {
-                    if (unLo > unHi) {
-                        break;
-                    }
-                    n = ((int) block[zptr[unHi] + d + 1]) - med;
-                    if (n == 0) {
-                        int temp = 0;
-                        temp = zptr[unHi];
-                        zptr[unHi] = zptr[gtHi];
-                        zptr[gtHi] = temp;
-                        gtHi--;
-                        unHi--;
-                        continue;
-                    };
-                    if (n <  0) {
-                        break;
-                    }
-                    unHi--;
-                }
-                if (unLo > unHi) {
-                    break;
-                }
-                int temp = 0;
-                temp = zptr[unLo];
-                zptr[unLo] = zptr[unHi];
-                zptr[unHi] = temp;
-                unLo++;
-                unHi--;
-            }
-
-            if (gtHi < ltLo) {
-                stack[sp].ll = lo;
-                stack[sp].hh = hi;
-                stack[sp].dd = d + 1;
-                sp++;
-                continue;
-            }
-
-            n = ((ltLo - lo) < (unLo - ltLo)) ? (ltLo - lo) : (unLo - ltLo);
-            vswap(lo, unLo - n, n);
-            m = ((hi - gtHi) < (gtHi - unHi)) ? (hi - gtHi) : (gtHi - unHi);
-            vswap(unLo, hi - m + 1, m);
-
-            n = lo + unLo - ltLo - 1;
-            m = hi - (gtHi - unHi) + 1;
-
-            stack[sp].ll = lo;
-            stack[sp].hh = n;
-            stack[sp].dd = d;
-            sp++;
-
-            stack[sp].ll = n + 1;
-            stack[sp].hh = m - 1;
-            stack[sp].dd = d + 1;
-            sp++;
-
-            stack[sp].ll = m;
-            stack[sp].hh = hi;
-            stack[sp].dd = d;
-            sp++;
-        }
-    }
-
-    private void mainSort() {
-        int i, j, ss, sb;
-        int[] runningOrder = new int[256];
-        int[] copy = new int[256];
-        boolean[] bigDone = new boolean[256];
-        int c1, c2;
-        int numQSorted;
-
-        /*
-          In the various block-sized structures, live data runs
-          from 0 to last+NUM_OVERSHOOT_BYTES inclusive.  First,
-          set up the overshoot area for block.
-        */
-
-        //   if (verbosity >= 4) fprintf ( stderr, "   sort initialise ...\n" );
-        for (i = 0; i < NUM_OVERSHOOT_BYTES; i++) {
-            block[last + i + 2] = block[(i % (last + 1)) + 1];
-        }
-        for (i = 0; i <= last + NUM_OVERSHOOT_BYTES; i++) {
-            quadrant[i] = 0;
-        }
-
-        block[0] = (char) (block[last + 1]);
-
-        if (last < 4000) {
-            /*
-              Use simpleSort(), since the full sorting mechanism
-              has quite a large constant overhead.
-            */
-            for (i = 0; i <= last; i++) {
-                zptr[i] = i;
-            }
-            firstAttempt = false;
-            workDone = workLimit = 0;
-            simpleSort(0, last, 0);
-        } else {
-            numQSorted = 0;
-            for (i = 0; i <= 255; i++) {
-                bigDone[i] = false;
-            }
-
-            for (i = 0; i <= 65536; i++) {
-                ftab[i] = 0;
-            }
-
-            c1 = block[0];
-            for (i = 0; i <= last; i++) {
-                c2 = block[i + 1];
-                ftab[(c1 << 8) + c2]++;
-                c1 = c2;
-            }
-
-            for (i = 1; i <= 65536; i++) {
-                ftab[i] += ftab[i - 1];
-            }
-
-            c1 = block[1];
-            for (i = 0; i < last; i++) {
-                c2 = block[i + 2];
-                j = (c1 << 8) + c2;
-                c1 = c2;
-                ftab[j]--;
-                zptr[ftab[j]] = i;
-            }
-
-            j = ((block[last + 1]) << 8) + (block[1]);
-            ftab[j]--;
-            zptr[ftab[j]] = last;
-
-            /*
-              Now ftab contains the first loc of every small bucket.
-              Calculate the running order, from smallest to largest
-              big bucket.
-            */
-
-            for (i = 0; i <= 255; i++) {
-                runningOrder[i] = i;
-            }
-
-            {
-                int vv;
-                int h = 1;
-                do {
-                    h = 3 * h + 1;
-                }
-                while (h <= 256);
-                do {
-                    h = h / 3;
-                    for (i = h; i <= 255; i++) {
-                        vv = runningOrder[i];
-                        j = i;
-                        while ((ftab[((runningOrder[j - h]) + 1) << 8]
-                                - ftab[(runningOrder[j - h]) << 8]) >
-                               (ftab[((vv) + 1) << 8] - ftab[(vv) << 8])) {
-                            runningOrder[j] = runningOrder[j - h];
-                            j = j - h;
-                            if (j <= (h - 1)) {
-                                break;
-                            }
-                        }
-                        runningOrder[j] = vv;
-                    }
-                } while (h != 1);
-            }
-
-            /*
-              The main sorting loop.
-            */
-            for (i = 0; i <= 255; i++) {
-
-                /*
-                  Process big buckets, starting with the least full.
-                */
-                ss = runningOrder[i];
-
-                /*
-                  Complete the big bucket [ss] by quicksorting
-                  any unsorted small buckets [ss, j].  Hopefully
-                  previous pointer-scanning phases have already
-                  completed many of the small buckets [ss, j], so
-                  we don't have to sort them at all.
-                */
-                for (j = 0; j <= 255; j++) {
-                    sb = (ss << 8) + j;
-                    if (!((ftab[sb] & SETMASK) == SETMASK)) {
-                        int lo = ftab[sb] & CLEARMASK;
-                        int hi = (ftab[sb + 1] & CLEARMASK) - 1;
-                        if (hi > lo) {
-                            qSort3(lo, hi, 2);
-                            numQSorted += (hi - lo + 1);
-                            if (workDone > workLimit && firstAttempt) {
-                                return;
-                            }
-                        }
-                        ftab[sb] |= SETMASK;
-                    }
-                }
-
-                /*
-                  The ss big bucket is now done.  Record this fact,
-                  and update the quadrant descriptors.  Remember to
-                  update quadrants in the overshoot area too, if
-                  necessary.  The "if (i < 255)" test merely skips
-                  this updating for the last bucket processed, since
-                  updating for the last bucket is pointless.
-                */
-                bigDone[ss] = true;
-
-                if (i < 255) {
-                    int bbStart  = ftab[ss << 8] & CLEARMASK;
-                    int bbSize   = (ftab[(ss + 1) << 8] & CLEARMASK) - bbStart;
-                    int shifts   = 0;
-
-                    while ((bbSize >> shifts) > 65534) {
-                        shifts++;
-                    }
-
-                    for (j = 0; j < bbSize; j++) {
-                        int a2update = zptr[bbStart + j];
-                        int qVal = (j >> shifts);
-                        quadrant[a2update] = qVal;
-                        if (a2update < NUM_OVERSHOOT_BYTES) {
-                            quadrant[a2update + last + 1] = qVal;
-                        }
-                    }
-
-                    if (!(((bbSize - 1) >> shifts) <= 65535)) {
-                        panic();
-                    }
-                }
-
-                /*
-                  Now scan this big bucket so as to synthesise the
-                  sorted order for small buckets [t, ss] for all t != ss.
-                */
-                for (j = 0; j <= 255; j++) {
-                    copy[j] = ftab[(j << 8) + ss] & CLEARMASK;
-                }
-
-                for (j = ftab[ss << 8] & CLEARMASK;
-                     j < (ftab[(ss + 1) << 8] & CLEARMASK); j++) {
-                    c1 = block[zptr[j]];
-                    if (!bigDone[c1]) {
-                        zptr[copy[c1]] = zptr[j] == 0 ? last : zptr[j] - 1;
-                        copy[c1]++;
-                    }
-                }
-
-                for (j = 0; j <= 255; j++) {
-                    ftab[(j << 8) + ss] |= SETMASK;
-                }
-            }
-        }
-    }
-
-    private void randomiseBlock() {
-        int i;
-        int rNToGo = 0;
-        int rTPos  = 0;
-        for (i = 0; i < 256; i++) {
-            inUse[i] = false;
-        }
-
-        for (i = 0; i <= last; i++) {
-            if (rNToGo == 0) {
-                rNToGo = (char) rNums[rTPos];
-                rTPos++;
-                if (rTPos == 512) {
-                    rTPos = 0;
-                }
-            }
-            rNToGo--;
-            block[i + 1] ^= ((rNToGo == 1) ? 1 : 0);
-            // handle 16 bit signed numbers
-            block[i + 1] &= 0xFF;
-
-            inUse[block[i + 1]] = true;
-        }
-    }
-
-    private void doReversibleTransformation() {
-        int i;
-
-        workLimit = workFactor * last;
-        workDone = 0;
-        blockRandomised = false;
-        firstAttempt = true;
-
-        mainSort();
-
-        if (workDone > workLimit && firstAttempt) {
-            randomiseBlock();
-            workLimit = workDone = 0;
-            blockRandomised = true;
-            firstAttempt = false;
-            mainSort();
-        }
-
-        origPtr = -1;
-        for (i = 0; i <= last; i++) {
-            if (zptr[i] == 0) {
-                origPtr = i;
-                break;
-            }
-        };
-
-        if (origPtr == -1) {
-            panic();
-        }
-    }
-
-    private boolean fullGtU(int i1, int i2) {
-        int k;
-        char c1, c2;
-        int s1, s2;
-
-        c1 = block[i1 + 1];
-        c2 = block[i2 + 1];
-        if (c1 != c2) {
-            return (c1 > c2);
-        }
-        i1++;
-        i2++;
-
-        c1 = block[i1 + 1];
-        c2 = block[i2 + 1];
-        if (c1 != c2) {
-            return (c1 > c2);
-        }
-        i1++;
-        i2++;
-
-        c1 = block[i1 + 1];
-        c2 = block[i2 + 1];
-        if (c1 != c2) {
-            return (c1 > c2);
-        }
-        i1++;
-        i2++;
-
-        c1 = block[i1 + 1];
-        c2 = block[i2 + 1];
-        if (c1 != c2) {
-            return (c1 > c2);
-        }
-        i1++;
-        i2++;
-
-        c1 = block[i1 + 1];
-        c2 = block[i2 + 1];
-        if (c1 != c2) {
-            return (c1 > c2);
-        }
-        i1++;
-        i2++;
-
-        c1 = block[i1 + 1];
-        c2 = block[i2 + 1];
-        if (c1 != c2) {
-            return (c1 > c2);
-        }
-        i1++;
-        i2++;
-
-        k = last + 1;
-
-        do {
-            c1 = block[i1 + 1];
-            c2 = block[i2 + 1];
-            if (c1 != c2) {
-                return (c1 > c2);
-            }
-            s1 = quadrant[i1];
-            s2 = quadrant[i2];
-            if (s1 != s2) {
-                return (s1 > s2);
-            }
-            i1++;
-            i2++;
-
-            c1 = block[i1 + 1];
-            c2 = block[i2 + 1];
-            if (c1 != c2) {
-                return (c1 > c2);
-            }
-            s1 = quadrant[i1];
-            s2 = quadrant[i2];
-            if (s1 != s2) {
-                return (s1 > s2);
-            }
-            i1++;
-            i2++;
-
-            c1 = block[i1 + 1];
-            c2 = block[i2 + 1];
-            if (c1 != c2) {
-                return (c1 > c2);
-            }
-            s1 = quadrant[i1];
-            s2 = quadrant[i2];
-            if (s1 != s2) {
-                return (s1 > s2);
-            }
-            i1++;
-            i2++;
-
-            c1 = block[i1 + 1];
-            c2 = block[i2 + 1];
-            if (c1 != c2) {
-                return (c1 > c2);
-            }
-            s1 = quadrant[i1];
-            s2 = quadrant[i2];
-            if (s1 != s2) {
-                return (s1 > s2);
-            }
-            i1++;
-            i2++;
-
-            if (i1 > last) {
-                i1 -= last;
-                i1--;
-            };
-            if (i2 > last) {
-                i2 -= last;
-                i2--;
-            };
-
-            k -= 4;
-            workDone++;
-        } while (k >= 0);
-
-        return false;
-    }
-
-    /*
-      Knuth's increments seem to work better
-      than Incerpi-Sedgewick here.  Possibly
-      because the number of elems to sort is
-      usually small, typically <= 20.
-    */
-    private int[] incs = { 1, 4, 13, 40, 121, 364, 1093, 3280,
-                           9841, 29524, 88573, 265720,
-                           797161, 2391484 };
-
-    private void allocateCompressStructures () {
-        int n = baseBlockSize * blockSize100k;
-        block = new char[(n + 1 + NUM_OVERSHOOT_BYTES)];
-        quadrant = new int[(n + NUM_OVERSHOOT_BYTES)];
-        zptr = new int[n];
-        ftab = new int[65537];
-
-        if (block == null || quadrant == null || zptr == null
-            || ftab == null) {
-            //int totalDraw = (n + 1 + NUM_OVERSHOOT_BYTES) + (n + NUM_OVERSHOOT_BYTES) + n + 65537;
-            //compressOutOfMemory ( totalDraw, n );
-        }
-
-        /*
-          The back end needs a place to store the MTF values
-          whilst it calculates the coding tables.  We could
-          put them in the zptr array.  However, these values
-          will fit in a short, so we overlay szptr at the
-          start of zptr, in the hope of reducing the number
-          of cache misses induced by the multiple traversals
-          of the MTF values when calculating coding tables.
-          Seems to improve compression speed by about 1%.
-        */
-        //    szptr = zptr;
-
-
-        szptr = new short[2 * n];
-    }
-
-    private void generateMTFValues() {
-        char[] yy = new char[256];
-        int  i, j;
-        char tmp;
-        char tmp2;
-        int zPend;
-        int wr;
-        int EOB;
-
-        makeMaps();
-        EOB = nInUse + 1;
-
-        for (i = 0; i <= EOB; i++) {
-            mtfFreq[i] = 0;
-        }
-
-        wr = 0;
-        zPend = 0;
-        for (i = 0; i < nInUse; i++) {
-            yy[i] = (char) i;
-        }
-
-
-        for (i = 0; i <= last; i++) {
-            char ll_i;
-
-            ll_i = unseqToSeq[block[zptr[i]]];
-
-            j = 0;
-            tmp = yy[j];
-            while (ll_i != tmp) {
-                j++;
-                tmp2 = tmp;
-                tmp = yy[j];
-                yy[j] = tmp2;
-            };
-            yy[0] = tmp;
-
-            if (j == 0) {
-                zPend++;
-            } else {
-                if (zPend > 0) {
-                    zPend--;
-                    while (true) {
-                        switch (zPend % 2) {
-                        case 0:
-                            szptr[wr] = (short) RUNA;
-                            wr++;
-                            mtfFreq[RUNA]++;
-                            break;
-                        case 1:
-                            szptr[wr] = (short) RUNB;
-                            wr++;
-                            mtfFreq[RUNB]++;
-                            break;
-                        };
-                        if (zPend < 2) {
-                            break;
-                        }
-                        zPend = (zPend - 2) / 2;
-                    };
-                    zPend = 0;
-                }
-                szptr[wr] = (short) (j + 1);
-                wr++;
-                mtfFreq[j + 1]++;
-            }
-        }
-
-        if (zPend > 0) {
-            zPend--;
-            while (true) {
-                switch (zPend % 2) {
-                case 0:
-                    szptr[wr] = (short) RUNA;
-                    wr++;
-                    mtfFreq[RUNA]++;
-                    break;
-                case 1:
-                    szptr[wr] = (short) RUNB;
-                    wr++;
-                    mtfFreq[RUNB]++;
-                    break;
-                }
-                if (zPend < 2) {
-                    break;
-                }
-                zPend = (zPend - 2) / 2;
-            }
-        }
-
-        szptr[wr] = (short) EOB;
-        wr++;
-        mtfFreq[EOB]++;
-
-        nMTF = wr;
-    }
-}
-
-
diff --git a/src/main/org/apache/tools/bzip2/CRC.java b/src/main/org/apache/tools/bzip2/CRC.java
deleted file mode 100644
index f4822a4..0000000
--- a/src/main/org/apache/tools/bzip2/CRC.java
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-/*
- * This package is based on the work done by Keiron Liddle, Aftex Software
- * <keiron@aftexsw.com> to whom the Ant project is very grateful for his
- * great code.
- */
-
-package org.apache.tools.bzip2;
-
-/**
- * A simple class the hold and calculate the CRC for sanity checking
- * of the data.
- *
- * @author <a href="mailto:keiron@aftexsw.com">Keiron Liddle</a>
- */
-class CRC {
-    public static int crc32Table[] = {
-        0x00000000, 0x04c11db7, 0x09823b6e, 0x0d4326d9,
-        0x130476dc, 0x17c56b6b, 0x1a864db2, 0x1e475005,
-        0x2608edb8, 0x22c9f00f, 0x2f8ad6d6, 0x2b4bcb61,
-        0x350c9b64, 0x31cd86d3, 0x3c8ea00a, 0x384fbdbd,
-        0x4c11db70, 0x48d0c6c7, 0x4593e01e, 0x4152fda9,
-        0x5f15adac, 0x5bd4b01b, 0x569796c2, 0x52568b75,
-        0x6a1936c8, 0x6ed82b7f, 0x639b0da6, 0x675a1011,
-        0x791d4014, 0x7ddc5da3, 0x709f7b7a, 0x745e66cd,
-        0x9823b6e0, 0x9ce2ab57, 0x91a18d8e, 0x95609039,
-        0x8b27c03c, 0x8fe6dd8b, 0x82a5fb52, 0x8664e6e5,
-        0xbe2b5b58, 0xbaea46ef, 0xb7a96036, 0xb3687d81,
-        0xad2f2d84, 0xa9ee3033, 0xa4ad16ea, 0xa06c0b5d,
-        0xd4326d90, 0xd0f37027, 0xddb056fe, 0xd9714b49,
-        0xc7361b4c, 0xc3f706fb, 0xceb42022, 0xca753d95,
-        0xf23a8028, 0xf6fb9d9f, 0xfbb8bb46, 0xff79a6f1,
-        0xe13ef6f4, 0xe5ffeb43, 0xe8bccd9a, 0xec7dd02d,
-        0x34867077, 0x30476dc0, 0x3d044b19, 0x39c556ae,
-        0x278206ab, 0x23431b1c, 0x2e003dc5, 0x2ac12072,
-        0x128e9dcf, 0x164f8078, 0x1b0ca6a1, 0x1fcdbb16,
-        0x018aeb13, 0x054bf6a4, 0x0808d07d, 0x0cc9cdca,
-        0x7897ab07, 0x7c56b6b0, 0x71159069, 0x75d48dde,
-        0x6b93dddb, 0x6f52c06c, 0x6211e6b5, 0x66d0fb02,
-        0x5e9f46bf, 0x5a5e5b08, 0x571d7dd1, 0x53dc6066,
-        0x4d9b3063, 0x495a2dd4, 0x44190b0d, 0x40d816ba,
-        0xaca5c697, 0xa864db20, 0xa527fdf9, 0xa1e6e04e,
-        0xbfa1b04b, 0xbb60adfc, 0xb6238b25, 0xb2e29692,
-        0x8aad2b2f, 0x8e6c3698, 0x832f1041, 0x87ee0df6,
-        0x99a95df3, 0x9d684044, 0x902b669d, 0x94ea7b2a,
-        0xe0b41de7, 0xe4750050, 0xe9362689, 0xedf73b3e,
-        0xf3b06b3b, 0xf771768c, 0xfa325055, 0xfef34de2,
-        0xc6bcf05f, 0xc27dede8, 0xcf3ecb31, 0xcbffd686,
-        0xd5b88683, 0xd1799b34, 0xdc3abded, 0xd8fba05a,
-        0x690ce0ee, 0x6dcdfd59, 0x608edb80, 0x644fc637,
-        0x7a089632, 0x7ec98b85, 0x738aad5c, 0x774bb0eb,
-        0x4f040d56, 0x4bc510e1, 0x46863638, 0x42472b8f,
-        0x5c007b8a, 0x58c1663d, 0x558240e4, 0x51435d53,
-        0x251d3b9e, 0x21dc2629, 0x2c9f00f0, 0x285e1d47,
-        0x36194d42, 0x32d850f5, 0x3f9b762c, 0x3b5a6b9b,
-        0x0315d626, 0x07d4cb91, 0x0a97ed48, 0x0e56f0ff,
-        0x1011a0fa, 0x14d0bd4d, 0x19939b94, 0x1d528623,
-        0xf12f560e, 0xf5ee4bb9, 0xf8ad6d60, 0xfc6c70d7,
-        0xe22b20d2, 0xe6ea3d65, 0xeba91bbc, 0xef68060b,
-        0xd727bbb6, 0xd3e6a601, 0xdea580d8, 0xda649d6f,
-        0xc423cd6a, 0xc0e2d0dd, 0xcda1f604, 0xc960ebb3,
-        0xbd3e8d7e, 0xb9ff90c9, 0xb4bcb610, 0xb07daba7,
-        0xae3afba2, 0xaafbe615, 0xa7b8c0cc, 0xa379dd7b,
-        0x9b3660c6, 0x9ff77d71, 0x92b45ba8, 0x9675461f,
-        0x8832161a, 0x8cf30bad, 0x81b02d74, 0x857130c3,
-        0x5d8a9099, 0x594b8d2e, 0x5408abf7, 0x50c9b640,
-        0x4e8ee645, 0x4a4ffbf2, 0x470cdd2b, 0x43cdc09c,
-        0x7b827d21, 0x7f436096, 0x7200464f, 0x76c15bf8,
-        0x68860bfd, 0x6c47164a, 0x61043093, 0x65c52d24,
-        0x119b4be9, 0x155a565e, 0x18197087, 0x1cd86d30,
-        0x029f3d35, 0x065e2082, 0x0b1d065b, 0x0fdc1bec,
-        0x3793a651, 0x3352bbe6, 0x3e119d3f, 0x3ad08088,
-        0x2497d08d, 0x2056cd3a, 0x2d15ebe3, 0x29d4f654,
-        0xc5a92679, 0xc1683bce, 0xcc2b1d17, 0xc8ea00a0,
-        0xd6ad50a5, 0xd26c4d12, 0xdf2f6bcb, 0xdbee767c,
-        0xe3a1cbc1, 0xe760d676, 0xea23f0af, 0xeee2ed18,
-        0xf0a5bd1d, 0xf464a0aa, 0xf9278673, 0xfde69bc4,
-        0x89b8fd09, 0x8d79e0be, 0x803ac667, 0x84fbdbd0,
-        0x9abc8bd5, 0x9e7d9662, 0x933eb0bb, 0x97ffad0c,
-        0xafb010b1, 0xab710d06, 0xa6322bdf, 0xa2f33668,
-        0xbcb4666d, 0xb8757bda, 0xb5365d03, 0xb1f740b4
-    };
-
-    public CRC() {
-        initialiseCRC();
-    }
-
-    void initialiseCRC() {
-        globalCrc = 0xffffffff;
-    }
-
-    int getFinalCRC() {
-        return ~globalCrc;
-    }
-
-    int getGlobalCRC() {
-        return globalCrc;
-    }
-
-    void setGlobalCRC(int newCrc) {
-        globalCrc = newCrc;
-    }
-
-    void updateCRC(int inCh) {
-        int temp = (globalCrc >> 24) ^ inCh;
-        if (temp < 0) {
-            temp = 256 + temp;
-        }
-        globalCrc = (globalCrc << 8) ^ CRC.crc32Table[temp];
-    }
-
-    int globalCrc;
-}
-
diff --git a/src/main/org/apache/tools/mail/ErrorInQuitException.java b/src/main/org/apache/tools/mail/ErrorInQuitException.java
deleted file mode 100644
index 9d16784..0000000
--- a/src/main/org/apache/tools/mail/ErrorInQuitException.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.mail;
-
-import java.io.IOException;
-
-/**
- * Specialized IOException that get thrown if SMPT's QUIT command fails.
- *
- * <p>This seems to happen with some version of MS Exchange that
- * doesn't respond with a 221 code immediately.  See <a
- * href="http://nagoya.apache.org/bugzilla/show_bug.cgi?id=5273">Bug
- * report 5273</a>.</p>
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> 
- * @version $Revision$
- */
-public class ErrorInQuitException extends IOException {
-
-    public ErrorInQuitException(IOException e) {
-        super(e.getMessage());
-    }
-
-}
diff --git a/src/main/org/apache/tools/mail/MailMessage.java b/src/main/org/apache/tools/mail/MailMessage.java
deleted file mode 100644
index 92098d3..0000000
--- a/src/main/org/apache/tools/mail/MailMessage.java
+++ /dev/null
@@ -1,495 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-/*
- * The original version of this class was donated by Jason Hunter,
- * who wrote the class as part of the com.oreilly.servlet
- * package for his book "Java Servlet Programming" (O'Reilly).
- * See http://www.servlets.com.
- * 
- */
-
-package org.apache.tools.mail;
-
-import java.io.IOException;
-import java.io.PrintStream;
-import java.io.BufferedOutputStream;
-import java.io.OutputStream;
-import java.net.Socket;
-import java.net.InetAddress;
-import java.util.Vector;
-import java.util.Hashtable;
-import java.util.Enumeration;
-
-/** 
- * A class to help send SMTP email.
- * This class is an improvement on the sun.net.smtp.SmtpClient class 
- * found in the JDK.  This version has extra functionality, and can be used
- * with JVMs that did not extend from the JDK.  It's not as robust as
- * the JavaMail Standard Extension classes, but it's easier to use and 
- * easier to install, and has an Open Source license.
- * <p>
- * It can be used like this:
- * <blockquote><pre>
- * String mailhost = "localhost";  // or another mail host
- * String from = "Mail Message Servlet &lt;MailMessage@server.com&gt;";
- * String to = "to@you.com";
- * String cc1 = "cc1@you.com";
- * String cc2 = "cc2@you.com";
- * String bcc = "bcc@you.com";
- * &nbsp;
- * MailMessage msg = new MailMessage(mailhost);
- * msg.setPort(25);
- * msg.from(from);
- * msg.to(to);
- * msg.cc(cc1);
- * msg.cc(cc2);
- * msg.bcc(bcc);
- * msg.setSubject("Test subject");
- * PrintStream out = msg.getPrintStream();
- * &nbsp;
- * Enumeration enum = req.getParameterNames();
- * while (enum.hasMoreElements()) {
- *   String name = (String)enum.nextElement();
- *   String value = req.getParameter(name);
- *   out.println(name + " = " + value);
- * }
- * &nbsp;
- * msg.sendAndClose();
- * </pre></blockquote>
- * <p>
- * Be sure to set the from address, then set the recepient 
- * addresses, then set the subject and other headers, then get the 
- * PrintStream, then write the message, and finally send and close.
- * The class does minimal error checking internally; it counts on the mail
- * host to complain if there's any malformatted input or out of order 
- * execution.  
- * <p>
- * An attachment mechanism based on RFC 1521 could be implemented on top of
- * this class.  In the meanwhile, JavaMail is the best solution for sending
- * email with attachments.
- * <p>
- * Still to do:
- * <ul>
- * <li>Figure out how to close the connection in case of error
- * </ul>
- *
- * @author Jason Hunter
- * @version 1.1, 2000/03/19, added angle brackets to address, helps some servers
- * version 1.0, 1999/12/29
- */
-public class MailMessage {
-
-    /** default port for SMTP: 25 */
-    public static final int DEFAULT_PORT = 25;
-
-    /** host name for the mail server */
-    private String host;
-
-    /** host port for the mail server */
-    private int port = DEFAULT_PORT;
-
-    /** sender email address */
-    private String from;
-
-    /** list of email addresses to send to */
-    private Vector to;
-
-    /** list of email addresses to cc to */
-    private Vector cc;
-
-    /** headers to send in the mail */
-    private Hashtable headers;
-
-    private MailPrintStream out;
-
-    private SmtpResponseReader in;
-
-    private Socket socket;
-
-  /**
-   * Constructs a new MailMessage to send an email.
-   * Use localhost as the mail server.
-   *
-   * @exception IOException if there's any problem contacting the mail server
-   */
-  public MailMessage() throws IOException {
-    this("localhost");
-  }
-
-  /**
-   * Constructs a new MailMessage to send an email.
-   * Use the given host as the mail server.
-   *
-   * @param host the mail server to use
-   * @exception IOException if there's any problem contacting the mail server
-   */
-  public MailMessage(String host) throws IOException {
-    this.host = host;
-    to = new Vector();
-    cc = new Vector();
-    headers = new Hashtable();
-    setHeader("X-Mailer", "org.apache.tools.mail.MailMessage (jakarta.apache.org)");
-    connect();
-    sendHelo();
-  }
-
-    /**
-     * Set the port to connect to the SMTP host.
-     * @param port the port to use for connection.
-     * @see #DEFAULT_PORT
-     */
-    public void setPort(int port){
-        this.port = port;
-    }
-
-  /**
-   * Sets the from address.  Also sets the "From" header.  This method should
-   * be called only once.
-   *
-   * @exception IOException if there's any problem reported by the mail server
-   */
-  public void from(String from) throws IOException {
-    sendFrom(from);
-    this.from = from;
-  }
-
-  /**
-   * Sets the to address.  Also sets the "To" header.  This method may be
-   * called multiple times.
-   *
-   * @exception IOException if there's any problem reported by the mail server
-   */
-  public void to(String to) throws IOException {
-    sendRcpt(to);
-    this.to.addElement(to);
-  }
-
-  /**
-   * Sets the cc address.  Also sets the "Cc" header.  This method may be
-   * called multiple times.
-   *
-   * @exception IOException if there's any problem reported by the mail server
-   */
-  public void cc(String cc) throws IOException {
-    sendRcpt(cc);
-    this.cc.addElement(cc);
-  }
-
-  /**
-   * Sets the bcc address.  Does NOT set any header since it's a *blind* copy.
-   * This method may be called multiple times.
-   *
-   * @exception IOException if there's any problem reported by the mail server
-   */
-  public void bcc(String bcc) throws IOException {
-    sendRcpt(bcc);
-    // No need to keep track of Bcc'd addresses
-  }
-
-  /**
-   * Sets the subject of the mail message.  Actually sets the "Subject" 
-   * header.
-   */
-  public void setSubject(String subj) {
-    headers.put("Subject", subj);
-  }
-
-  /**
-   * Sets the named header to the given value.  RFC 822 provides the rules for
-   * what text may constitute a header name and value.
-   */
-  public void setHeader(String name, String value) {
-    // Blindly trust the user doesn't set any invalid headers
-    headers.put(name, value);
-  }
-
-  /**
-   * Returns a PrintStream that can be used to write the body of the message.
-   * A stream is used since email bodies are byte-oriented.  A writer could 
-   * be wrapped on top if necessary for internationalization.
-   *
-   * @exception IOException if there's any problem reported by the mail server
-   */
-  public PrintStream getPrintStream() throws IOException {
-    setFromHeader();
-    setToHeader();
-    setCcHeader();
-    sendData();
-    flushHeaders();
-    return out;
-  }
-
-  void setFromHeader() {
-    setHeader("From", from);
-  }
-
-  void setToHeader() {
-    setHeader("To", vectorToList(to));
-  }
-
-  void setCcHeader() {
-    setHeader("Cc", vectorToList(cc));
-  }
-
-  String vectorToList(Vector v) {
-    StringBuffer buf = new StringBuffer();
-    Enumeration e = v.elements();
-    while (e.hasMoreElements()) {
-      buf.append(e.nextElement());
-      if (e.hasMoreElements()) {
-        buf.append(", ");
-      }
-    }
-    return buf.toString();
-  }
-
-  void flushHeaders() throws IOException {
-    // XXX Should I care about order here?
-    Enumeration e = headers.keys();
-    while (e.hasMoreElements()) {
-      String name = (String) e.nextElement();
-      String value = (String) headers.get(name);
-      out.println(name + ": " + value);
-    }
-    out.println();
-    out.flush();
-  }
-
-  /**
-   * Sends the message and closes the connection to the server.
-   * The MailMessage object cannot be reused.
-   *
-   * @exception IOException if there's any problem reported by the mail server
-   */
-  public void sendAndClose() throws IOException {
-      try {
-          sendDot();
-          sendQuit();
-      } finally {
-          disconnect();
-      }
-  }
-
-  // Make a limited attempt to extract a sanitized email address
-  // Prefer text in <brackets>, ignore anything in (parentheses)
-  static String sanitizeAddress(String s) {
-    int paramDepth = 0;
-    int start = 0;
-    int end = 0;
-    int len = s.length();
-
-    for (int i = 0; i < len; i++) {
-      char c = s.charAt(i);
-      if (c == '(') {
-        paramDepth++;
-        if (start == 0) {
-          end = i;  // support "address (name)"
-        }
-      } else if (c == ')') {
-        paramDepth--;
-        if (end == 0) {
-          start = i + 1;  // support "(name) address"
-        }
-      } else if (paramDepth == 0 && c == '<') {
-        start = i + 1;
-      } else if (paramDepth == 0 && c == '>') {
-        end = i;
-      }
-    }
-
-    if (end == 0) {
-      end = len;
-    }
-
-    return s.substring(start, end);
-  }
-
-  // * * * * * Raw protocol methods below here * * * * *
-
-  void connect() throws IOException {
-    socket = new Socket(host, port);
-    out = new MailPrintStream(
-          new BufferedOutputStream(
-          socket.getOutputStream())); 
-    in = new SmtpResponseReader(socket.getInputStream());
-    getReady();
-  }
-
-  void getReady() throws IOException {
-    String response = in.getResponse();
-    int[] ok = { 220 };
-    if (!isResponseOK(response, ok)) {
-      throw new IOException(
-        "Didn't get introduction from server: " + response);
-    }
-  }
-
-  void sendHelo() throws IOException {
-    String local = InetAddress.getLocalHost().getHostName();
-    int[] ok = { 250 };
-    send("HELO " + local, ok);
-  }
-
-  void sendFrom(String from) throws IOException {
-    int[] ok = { 250 };
-    send("MAIL FROM: " + "<" + sanitizeAddress(from) + ">", ok);
-  }
-
-  void sendRcpt(String rcpt) throws IOException {
-    int[] ok = { 250, 251 };
-    send("RCPT TO: " + "<" + sanitizeAddress(rcpt) + ">", ok);
-  }
-
-  void sendData() throws IOException {
-    int[] ok = { 354 };
-    send("DATA", ok);
-  }
-
-  void sendDot() throws IOException {
-    int[] ok = { 250 };
-    send("\r\n.", ok);  // make sure dot is on new line
-  }
-
-    void sendQuit() throws IOException {
-        int[] ok = { 221 };
-        try {
-            send("QUIT", ok);
-        } catch (IOException e) {
-            throw new ErrorInQuitException(e);
-        }
-    }
-
-    void send(String msg, int[] ok) throws IOException {
-        out.rawPrint(msg + "\r\n");  // raw supports <CRLF>.<CRLF>
-        String response = in.getResponse();
-        if (!isResponseOK(response, ok)) {
-            throw new IOException("Unexpected reply to command: " 
-                                  + msg + ": " + response);
-        }
-    }
-
-  boolean isResponseOK(String response, int[] ok) {
-    // Check that the response is one of the valid codes
-    for (int i = 0; i < ok.length; i++) {
-      if (response.startsWith("" + ok[i])) {
-        return true;
-      }
-    }
-    return false;
-  }
-
-    void disconnect() throws IOException {
-        if (out != null) {
-            out.close(); 
-        }
-        if (in != null) {
-            try {
-                in.close(); 
-            } catch (IOException e) {
-            }
-        }
-        if (socket != null) {
-            try {
-                socket.close(); 
-            } catch (IOException e) {
-            }
-        }
-    }
-}
-
-// This PrintStream subclass makes sure that <CRLF>. becomes <CRLF>..
-// per RFC 821.  It also ensures that new lines are always \r\n.
-//
-class MailPrintStream extends PrintStream {
-
-  int lastChar;
-
-  public MailPrintStream(OutputStream out) {
-    super(out, true);  // deprecated, but email is byte-oriented
-  }
-
-  // Mac does \n\r, but that's tough to distinguish from Windows \r\n\r\n.
-  // Don't tackle that problem right now.
-  public void write(int b) {
-    if (b == '\n' && lastChar != '\r') {
-      rawWrite('\r');  // ensure always \r\n
-      rawWrite(b);
-    } else if (b == '.' && lastChar == '\n') {
-      rawWrite('.');  // add extra dot
-      rawWrite(b);
-    } else {
-      rawWrite(b);
-    }
-    lastChar = b;
-  }
-
-  public void write(byte[] buf, int off, int len) {
-    for (int i = 0; i < len; i++) {
-      write(buf[off + i]);
-    }
-  }
-
-  void rawWrite(int b) {
-    super.write(b);
-  }
-
-  void rawPrint(String s) {
-    int len = s.length();
-    for (int i = 0; i < len; i++) {
-      rawWrite(s.charAt(i));
-    }
-  }
-}
-
diff --git a/src/main/org/apache/tools/mail/SmtpResponseReader.java b/src/main/org/apache/tools/mail/SmtpResponseReader.java
deleted file mode 100644
index c5ee0d9..0000000
--- a/src/main/org/apache/tools/mail/SmtpResponseReader.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.mail;
-
-import java.io.InputStream;
-import java.io.IOException;
-import java.io.BufferedReader;
-import java.io.InputStreamReader;
-
-/**
- * A wrapper around the raw input from the SMTP server that assembles
- * multi line responses into a single String.
- *
- * <p>The same rules used here would apply to FTP and other Telnet
- * based protocols as well.</p>
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> 
- */
-public class SmtpResponseReader {
-
-    protected BufferedReader reader = null;
-    private StringBuffer result = new StringBuffer();
-
-    /**
-     * Wrap this input stream.
-     */
-    public SmtpResponseReader(InputStream in) {
-        reader = new BufferedReader(new InputStreamReader(in)); 
-    }
-
-    /**
-     * Read until the server indicates that the response is complete.
-     *
-     * @return Responsecode (3 digits) + Blank + Text from all
-     *         response line concatenated (with blanks replacing the \r\n
-     *         sequences).
-     */
-    public String getResponse() throws IOException {
-        result.setLength(0);
-        String line = reader.readLine();
-        if (line != null && line.length() >= 3) {
-            result.append(line.substring(0, 3));
-            result.append(" ");
-        }
-        
-        while (line != null) {
-            append(line);
-            if (!hasMoreLines(line)) {
-                break;
-            }
-            line = reader.readLine();
-        }
-        return result.toString().trim();
-    }
-
-    /**
-     * Closes the underlying stream.
-     */
-    public void close() throws IOException {
-        reader.close();
-    }
-
-    /**
-     * Should we expect more input?
-     */
-    protected boolean hasMoreLines(String line) {
-        return line.length() > 3 && line.charAt(3) == '-';
-    }
-
-    /**
-     * Append the text from this line of the resonse.
-     */
-    private void append(String line) {
-        if (line.length() > 4) {
-            result.append(line.substring(4));
-            result.append(" ");
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/tar/TarBuffer.java b/src/main/org/apache/tools/tar/TarBuffer.java
deleted file mode 100644
index 1549e66..0000000
--- a/src/main/org/apache/tools/tar/TarBuffer.java
+++ /dev/null
@@ -1,442 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000,2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-/*
- * This package is based on the work done by Timothy Gerard Endres 
- * (time@ice.com) to whom the Ant project is very grateful for his great code.
- */
- 
-package org.apache.tools.tar;
-
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.IOException;
-
-/**
- * The TarBuffer class implements the tar archive concept
- * of a buffered input stream. This concept goes back to the
- * days of blocked tape drives and special io devices. In the
- * Java universe, the only real function that this class
- * performs is to ensure that files have the correct "block"
- * size, or other tars will complain.
- * <p>
- * You should never have a need to access this class directly.
- * TarBuffers are created by Tar IO Streams.
- * 
- * @author Timothy Gerard Endres <a href="mailto:time@ice.com">time@ice.com</a>
- */
- 
-public class TarBuffer {
-        
-    public static final int DEFAULT_RCDSIZE = (512);
-    public static final int DEFAULT_BLKSIZE = (DEFAULT_RCDSIZE * 20);
-    
-    private InputStream     inStream;
-    private OutputStream    outStream;
-    private byte[]          blockBuffer;
-    private int             currBlkIdx;
-    private int             currRecIdx;
-    private int             blockSize;
-    private int             recordSize;
-    private int             recsPerBlock;
-    private boolean         debug;
-
-    public TarBuffer(InputStream inStream) {
-        this(inStream, TarBuffer.DEFAULT_BLKSIZE);
-    }
-
-    public TarBuffer(InputStream inStream, int blockSize) {
-        this(inStream, blockSize, TarBuffer.DEFAULT_RCDSIZE);
-    }
-
-    public TarBuffer(InputStream inStream, int blockSize, int recordSize) {
-        this.inStream = inStream;
-        this.outStream = null;
-
-        this.initialize(blockSize, recordSize);
-    }
-
-    public TarBuffer(OutputStream outStream) {
-        this(outStream, TarBuffer.DEFAULT_BLKSIZE);
-    }
-
-    public TarBuffer(OutputStream outStream, int blockSize) {
-        this(outStream, blockSize, TarBuffer.DEFAULT_RCDSIZE);
-    }
-
-    public TarBuffer(OutputStream outStream, int blockSize, int recordSize) {
-        this.inStream = null;
-        this.outStream = outStream;
-
-        this.initialize(blockSize, recordSize);
-    }
-
-    /**
-     * Initialization common to all constructors.
-     */
-    private void initialize(int blockSize, int recordSize) {
-        this.debug = false;
-        this.blockSize = blockSize;
-        this.recordSize = recordSize;
-        this.recsPerBlock = (this.blockSize / this.recordSize);
-        this.blockBuffer = new byte[this.blockSize];
-
-        if (this.inStream != null) {
-            this.currBlkIdx = -1;
-            this.currRecIdx = this.recsPerBlock;
-        } else {
-            this.currBlkIdx = 0;
-            this.currRecIdx = 0;
-        } 
-    } 
-
-    /**
-     * Get the TAR Buffer's block size. Blocks consist of multiple records.
-     */
-    public int getBlockSize() {
-        return this.blockSize;
-    } 
-
-    /**
-     * Get the TAR Buffer's record size.
-     */
-    public int getRecordSize() {
-        return this.recordSize;
-    } 
-
-    /**
-     * Set the debugging flag for the buffer.
-     * 
-     * @param debug If true, print debugging output.
-     */
-    public void setDebug(boolean debug) {
-        this.debug = debug;
-    } 
-
-    /**
-     * Determine if an archive record indicate End of Archive. End of
-     * archive is indicated by a record that consists entirely of null bytes.
-     * 
-     * @param record The record data to check.
-     */
-    public boolean isEOFRecord(byte[] record) {
-        for (int i = 0, sz = this.getRecordSize(); i < sz; ++i) {
-            if (record[i] != 0) {
-                return false;
-            } 
-        }
-
-        return true;
-    } 
-
-    /**
-     * Skip over a record on the input stream.
-     */
-    public void skipRecord() throws IOException {
-        if (this.debug) {
-            System.err.println("SkipRecord: recIdx = " + this.currRecIdx 
-                               + " blkIdx = " + this.currBlkIdx);
-        } 
-
-        if (this.inStream == null) {
-            throw new IOException("reading (via skip) from an output buffer");
-        } 
-
-        if (this.currRecIdx >= this.recsPerBlock) {
-            if (!this.readBlock()) {
-                return;    // UNDONE
-            } 
-        } 
-
-        this.currRecIdx++;
-    } 
-
-    /**
-     * Read a record from the input stream and return the data.
-     * 
-     * @return The record data.
-     */
-    public byte[] readRecord() throws IOException {
-        if (this.debug) {
-            System.err.println("ReadRecord: recIdx = " + this.currRecIdx 
-                               + " blkIdx = " + this.currBlkIdx);
-        } 
-
-        if (this.inStream == null) {
-            throw new IOException("reading from an output buffer");
-        } 
-
-        if (this.currRecIdx >= this.recsPerBlock) {
-            if (!this.readBlock()) {
-                return null;
-            } 
-        } 
-
-        byte[] result = new byte[this.recordSize];
-
-        System.arraycopy(this.blockBuffer, 
-                         (this.currRecIdx * this.recordSize), result, 0, 
-                         this.recordSize);
-
-        this.currRecIdx++;
-
-        return result;
-    } 
-
-    /**
-     * @return false if End-Of-File, else true
-     */
-    private boolean readBlock() throws IOException {
-        if (this.debug) {
-            System.err.println("ReadBlock: blkIdx = " + this.currBlkIdx);
-        } 
-
-        if (this.inStream == null) {
-            throw new IOException("reading from an output buffer");
-        } 
-
-        this.currRecIdx = 0;
-
-        int offset = 0;
-        int bytesNeeded = this.blockSize;
-
-        while (bytesNeeded > 0) {
-            long numBytes = this.inStream.read(this.blockBuffer, offset, 
-                                               bytesNeeded);
-
-            // 
-            // NOTE
-            // We have fit EOF, and the block is not full!
-            // 
-            // This is a broken archive. It does not follow the standard
-            // blocking algorithm. However, because we are generous, and
-            // it requires little effort, we will simply ignore the error
-            // and continue as if the entire block were read. This does
-            // not appear to break anything upstream. We used to return
-            // false in this case.
-            // 
-            // Thanks to 'Yohann.Roussel@alcatel.fr' for this fix.
-            // 
-            if (numBytes == -1) {
-                break;
-            } 
-
-            offset += numBytes;
-            bytesNeeded -= numBytes;
-
-            if (numBytes != this.blockSize) {
-                if (this.debug) {
-                    System.err.println("ReadBlock: INCOMPLETE READ " 
-                                       + numBytes + " of " + this.blockSize 
-                                       + " bytes read.");
-                } 
-            } 
-        } 
-
-        this.currBlkIdx++;
-
-        return true;
-    } 
-
-    /**
-     * Get the current block number, zero based.
-     * 
-     * @return The current zero based block number.
-     */
-    public int getCurrentBlockNum() {
-        return this.currBlkIdx;
-    } 
-
-    /**
-     * Get the current record number, within the current block, zero based.
-     * Thus, current offset = (currentBlockNum * recsPerBlk) + currentRecNum.
-     * 
-     * @return The current zero based record number.
-     */
-    public int getCurrentRecordNum() {
-        return this.currRecIdx - 1;
-    } 
-
-    /**
-     * Write an archive record to the archive.
-     * 
-     * @param record The record data to write to the archive.
-     */
-    public void writeRecord(byte[] record) throws IOException {
-        if (this.debug) {
-            System.err.println("WriteRecord: recIdx = " + this.currRecIdx 
-                               + " blkIdx = " + this.currBlkIdx);
-        } 
-
-        if (this.outStream == null) {
-            throw new IOException("writing to an input buffer");
-        } 
-
-        if (record.length != this.recordSize) {
-            throw new IOException("record to write has length '" 
-                                  + record.length 
-                                  + "' which is not the record size of '" 
-                                  + this.recordSize + "'");
-        } 
-
-        if (this.currRecIdx >= this.recsPerBlock) {
-            this.writeBlock();
-        } 
-
-        System.arraycopy(record, 0, this.blockBuffer, 
-                         (this.currRecIdx * this.recordSize), 
-                         this.recordSize);
-
-        this.currRecIdx++;
-    } 
-
-    /**
-     * Write an archive record to the archive, where the record may be
-     * inside of a larger array buffer. The buffer must be "offset plus
-     * record size" long.
-     * 
-     * @param buf The buffer containing the record data to write.
-     * @param offset The offset of the record data within buf.
-     */
-    public void writeRecord(byte[] buf, int offset) throws IOException {
-        if (this.debug) {
-            System.err.println("WriteRecord: recIdx = " + this.currRecIdx 
-                               + " blkIdx = " + this.currBlkIdx);
-        } 
-
-        if (this.outStream == null) {
-            throw new IOException("writing to an input buffer");
-        } 
-
-        if ((offset + this.recordSize) > buf.length) {
-            throw new IOException("record has length '" + buf.length 
-                                  + "' with offset '" + offset 
-                                  + "' which is less than the record size of '" 
-                                  + this.recordSize + "'");
-        } 
-
-        if (this.currRecIdx >= this.recsPerBlock) {
-            this.writeBlock();
-        } 
-
-        System.arraycopy(buf, offset, this.blockBuffer, 
-                         (this.currRecIdx * this.recordSize), 
-                         this.recordSize);
-
-        this.currRecIdx++;
-    } 
-
-    /**
-     * Write a TarBuffer block to the archive.
-     */
-    private void writeBlock() throws IOException {
-        if (this.debug) {
-            System.err.println("WriteBlock: blkIdx = " + this.currBlkIdx);
-        } 
-
-        if (this.outStream == null) {
-            throw new IOException("writing to an input buffer");
-        } 
-
-        this.outStream.write(this.blockBuffer, 0, this.blockSize);
-        this.outStream.flush();
-
-        this.currRecIdx = 0;
-        this.currBlkIdx++;
-    } 
-
-    /**
-     * Flush the current data block if it has any data in it.
-     */
-    private void flushBlock() throws IOException {
-        if (this.debug) {
-            System.err.println("TarBuffer.flushBlock() called.");
-        } 
-
-        if (this.outStream == null) {
-            throw new IOException("writing to an input buffer");
-        } 
-
-        if (this.currRecIdx > 0) {
-            this.writeBlock();
-        } 
-    } 
-
-    /**
-     * Close the TarBuffer. If this is an output buffer, also flush the
-     * current block before closing.
-     */
-    public void close() throws IOException {
-        if (this.debug) {
-            System.err.println("TarBuffer.closeBuffer().");
-        } 
-
-        if (this.outStream != null) {
-            this.flushBlock();
-
-            if (this.outStream != System.out 
-                    && this.outStream != System.err) {
-                this.outStream.close();
-
-                this.outStream = null;
-            } 
-        } else if (this.inStream != null) {
-            if (this.inStream != System.in) {
-                this.inStream.close();
-
-                this.inStream = null;
-            } 
-        } 
-    } 
-}
diff --git a/src/main/org/apache/tools/tar/TarConstants.java b/src/main/org/apache/tools/tar/TarConstants.java
deleted file mode 100644
index 611fd4f..0000000
--- a/src/main/org/apache/tools/tar/TarConstants.java
+++ /dev/null
@@ -1,191 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights 
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-/*
- * This package is based on the work done by Timothy Gerard Endres 
- * (time@ice.com) to whom the Ant project is very grateful for his great code.
- */
-
-package org.apache.tools.tar;
-
-/**
- * This interface contains all the definitions used in the package.
- *
- * @author Timothy Gerard Endres <a href="mailto:time@ice.com">time@ice.com</a>
- * @author Stefano Mazzocchi <a href="mailto:stefano@apache.org">stefano@apache.org</a>
- */
-
-public interface TarConstants {
-    
-    /**
-     * The length of the name field in a header buffer.
-     */
-    int    NAMELEN = 100;
-
-    /**
-     * The length of the mode field in a header buffer.
-     */
-    int    MODELEN = 8;
-
-    /**
-     * The length of the user id field in a header buffer.
-     */
-    int    UIDLEN = 8;
-
-    /**
-     * The length of the group id field in a header buffer.
-     */
-    int    GIDLEN = 8;
-
-    /**
-     * The length of the checksum field in a header buffer.
-     */
-    int    CHKSUMLEN = 8;
-
-    /**
-     * The length of the size field in a header buffer.
-     */
-    int    SIZELEN = 12;
-
-    /**
-     * The length of the magic field in a header buffer.
-     */
-    int    MAGICLEN = 8;
-
-    /**
-     * The length of the modification time field in a header buffer.
-     */
-    int    MODTIMELEN = 12;
-
-    /**
-     * The length of the user name field in a header buffer.
-     */
-    int    UNAMELEN = 32;
-
-    /**
-     * The length of the group name field in a header buffer.
-     */
-    int    GNAMELEN = 32;
-
-    /**
-     * The length of the devices field in a header buffer.
-     */
-    int    DEVLEN = 8;
-
-    /**
-     * LF_ constants represent the "link flag" of an entry, or more commonly,
-     * the "entry type". This is the "old way" of indicating a normal file.
-     */
-    byte   LF_OLDNORM = 0;
-
-    /**
-     * Normal file type.
-     */
-    byte   LF_NORMAL = (byte) '0';
-
-    /**
-     * Link file type.
-     */
-    byte   LF_LINK = (byte) '1';
-
-    /**
-     * Symbolic link file type.
-     */
-    byte   LF_SYMLINK = (byte) '2';
-
-    /**
-     * Character device file type.
-     */
-    byte   LF_CHR = (byte) '3';
-
-    /**
-     * Block device file type.
-     */
-    byte   LF_BLK = (byte) '4';
-
-    /**
-     * Directory file type.
-     */
-    byte   LF_DIR = (byte) '5';
-
-    /**
-     * FIFO (pipe) file type.
-     */
-    byte   LF_FIFO = (byte) '6';
-
-    /**
-     * Contiguous file type.
-     */
-    byte   LF_CONTIG = (byte) '7';
-
-    /**
-     * The magic tag representing a POSIX tar archive.
-     */
-    String TMAGIC = "ustar";
-
-    /**
-     * The magic tag representing a GNU tar archive.
-     */
-    String GNU_TMAGIC = "ustar  ";
-
-    /**
-     * The namr of the GNU tar entry which contains a long name.
-     */
-    String GNU_LONGLINK = "././@LongLink";
-    
-    /**
-     * Identifies the *next* file on the tape as having a long name.  
-     */
-    byte LF_GNUTYPE_LONGNAME = (byte) 'L';
-}
diff --git a/src/main/org/apache/tools/tar/TarEntry.java b/src/main/org/apache/tools/tar/TarEntry.java
deleted file mode 100644
index 777b8cb..0000000
--- a/src/main/org/apache/tools/tar/TarEntry.java
+++ /dev/null
@@ -1,606 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-/*
- * This package is based on the work done by Timothy Gerard Endres 
- * (time@ice.com) to whom the Ant project is very grateful for his great code.
- */
-
-package org.apache.tools.tar;
-
-import java.io.File;
-import java.util.Date;
-
-/**
- * This class represents an entry in a Tar archive. It consists
- * of the entry's header, as well as the entry's File. Entries
- * can be instantiated in one of three ways, depending on how
- * they are to be used.
- * <p>
- * TarEntries that are created from the header bytes read from
- * an archive are instantiated with the TarEntry( byte[] )
- * constructor. These entries will be used when extracting from
- * or listing the contents of an archive. These entries have their
- * header filled in using the header bytes. They also set the File
- * to null, since they reference an archive entry not a file.
- * <p>
- * TarEntries that are created from Files that are to be written
- * into an archive are instantiated with the TarEntry( File )
- * constructor. These entries have their header filled in using
- * the File's information. They also keep a reference to the File
- * for convenience when writing entries.
- * <p>
- * Finally, TarEntries can be constructed from nothing but a name.
- * This allows the programmer to construct the entry by hand, for
- * instance when only an InputStream is available for writing to
- * the archive, and the header information is constructed from
- * other information. In this case the header fields are set to
- * defaults and the File is set to null.
- * 
- * <p>
- * The C structure for a Tar Entry's header is:
- * <pre>
- * struct header {
- * char name[NAMSIZ];
- * char mode[8];
- * char uid[8];
- * char gid[8];
- * char size[12];
- * char mtime[12];
- * char chksum[8];
- * char linkflag;
- * char linkname[NAMSIZ];
- * char magic[8];
- * char uname[TUNMLEN];
- * char gname[TGNMLEN];
- * char devmajor[8];
- * char devminor[8];
- * } header;
- * </pre>
- * 
- * @author Timothy Gerard Endres <a href="mailto:time@ice.com">time@ice.com</a>
- * @author Stefano Mazzocchi <a href="mailto:stefano@apache.org">stefano@apache.org</a>
- */
- 
-public class TarEntry implements TarConstants {
-
-    private StringBuffer name;      /** The entry's name. */
-    private int          mode;      /** The entry's permission mode. */
-    private int          userId;    /** The entry's user id. */
-    private int          groupId;   /** The entry's group id. */
-    private long         size;      /** The entry's size. */
-    private long         modTime;   /** The entry's modification time. */
-    private int          checkSum;  /** The entry's checksum. */
-    private byte         linkFlag;  /** The entry's link flag. */
-    private StringBuffer linkName;  /** The entry's link name. */
-    private StringBuffer magic;     /** The entry's magic tag. */
-    private StringBuffer userName;  /** The entry's user name. */
-    private StringBuffer groupName; /** The entry's group name. */
-    private int          devMajor;  /** The entry's major device number. */
-    private int          devMinor;  /** The entry's minor device number. */
-    private File         file;      /** The entry's file reference */ 
-
-    /** 
-     * Construct an empty entry and prepares the header values.
-     */ 
-    private TarEntry () {
-        this.magic = new StringBuffer(TMAGIC);
-        this.name = new StringBuffer();
-        this.linkName = new StringBuffer();
-    
-        String user = System.getProperty("user.name", "");
-    
-        if (user.length() > 31) {
-            user = user.substring(0, 31);
-        } 
-    
-        this.userId = 0;
-        this.groupId = 0;
-        this.userName = new StringBuffer(user);
-        this.groupName = new StringBuffer("");
-        this.file = null;
-    }
-        
-    /** 
-     * Construct an entry with only a name. This allows the programmer
-     * to construct the entry's header "by hand". File is set to null.
-     */ 
-    public TarEntry(String name) {
-        this();
-        
-        boolean isDir = name.endsWith("/");
-        
-        this.checkSum = 0;
-        this.devMajor = 0;
-        this.devMinor = 0;
-        this.name = new StringBuffer(name);
-        this.mode = isDir ? 040755 : 0100644;
-        this.linkFlag = isDir ? LF_DIR : LF_NORMAL;
-        this.userId = 0;
-        this.groupId = 0;
-        this.size = 0;
-        this.checkSum = 0;
-        this.modTime = (new Date()).getTime() / 1000;
-        this.linkName = new StringBuffer("");
-        this.userName = new StringBuffer("");
-        this.groupName = new StringBuffer("");
-        this.devMajor = 0;
-        this.devMinor = 0;
-
-    }   
-        
-    /** 
-     * Construct an entry with a name an a link flag.
-     */ 
-    public TarEntry(String name, byte linkFlag) {
-        this(name);
-        this.linkFlag = linkFlag;
-    }   
-        
-    /** 
-     * Construct an entry for a file. File is set to file, and the
-     * header is constructed from information from the file.
-     *  
-     * @param file The file that the entry represents.
-     */ 
-    public TarEntry(File file) {
-        this();
-        
-        this.file = file;
-        
-        String name = file.getPath();
-        String osname = System.getProperty("os.name");
-        
-        if (osname != null) {
-        
-            // Strip off drive letters!
-            // REVIEW Would a better check be "(File.separator == '\')"?
-            String win32Prefix = "Windows";
-            String prefix = osname.substring(0, win32Prefix.length());
-        
-            if (prefix.equalsIgnoreCase(win32Prefix)) {
-                if (name.length() > 2) {
-                    char ch1 = name.charAt(0);
-                    char ch2 = name.charAt(1);
-        
-                    if (ch2 == ':' 
-                            && ((ch1 >= 'a' && ch1 <= 'z') 
-                                || (ch1 >= 'A' && ch1 <= 'Z'))) {
-                        name = name.substring(2);
-                    } 
-                } 
-            } else if (osname.toLowerCase().indexOf("netware") > -1) {
-                int colon = name.indexOf(':');
-                if (colon != -1) {
-                    name = name.substring(colon + 1);
-                }
-            }
-        } 
-        
-        name = name.replace(File.separatorChar, '/');
-        
-        // No absolute pathnames
-        // Windows (and Posix?) paths can start with "\\NetworkDrive\",
-        // so we loop on starting /'s.
-        while (name.startsWith("/")) {
-            name = name.substring(1);
-        }
-        
-        this.linkName = new StringBuffer("");
-        this.name = new StringBuffer(name);
-        
-        if (file.isDirectory()) {
-            this.mode = 040755;
-            this.linkFlag = LF_DIR;
-        
-            if (this.name.charAt(this.name.length() - 1) != '/') {
-                this.name.append("/");
-            } 
-        } else {
-            this.mode = 0100644;
-            this.linkFlag = LF_NORMAL;
-        } 
-        
-        this.size = file.length();
-        this.modTime = file.lastModified() / 1000;
-        this.checkSum = 0;
-        this.devMajor = 0;
-        this.devMinor = 0;
-    }   
-        
-    /** 
-     * Construct an entry from an archive's header bytes. File is set
-     * to null.
-     *  
-     * @param headerBuf The header bytes from a tar archive entry.
-     */ 
-    public TarEntry(byte[] headerBuf) {
-        this();
-        this.parseTarHeader(headerBuf);
-    }   
-        
-    /** 
-     * Determine if the two entries are equal. Equality is determined
-     * by the header names being equal.
-     *  
-     * @return it Entry to be checked for equality.
-     * @return True if the entries are equal.
-     */ 
-    public boolean equals(TarEntry it) {
-        return this.getName().equals(it.getName());
-    }   
-        
-    /** 
-     * Determine if the given entry is a descendant of this entry.
-     * Descendancy is determined by the name of the descendant
-     * starting with this entry's name.
-     *  
-     * @param desc Entry to be checked as a descendent of this.
-     * @return True if entry is a descendant of this.
-     */ 
-    public boolean isDescendent(TarEntry desc) {
-        return desc.getName().startsWith(this.getName());
-    }   
-        
-    /** 
-     * Get this entry's name.
-     *  
-     * @return This entry's name.
-     */ 
-    public String getName() {
-        return this.name.toString();
-    }   
-        
-    /** 
-     * Set this entry's name.
-     *  
-     * @param name This entry's new name.
-     */ 
-    public void setName(String name) {
-        this.name = new StringBuffer(name);
-    }   
-
-    /**
-     * Set the mode for this entry
-     */
-    public void setMode(int mode) {
-        this.mode = mode;
-    }
-    
-        
-    /** 
-     * Get this entry's user id.
-     *  
-     * @return This entry's user id.
-     */ 
-    public int getUserId() {
-        return this.userId;
-    }   
-        
-    /** 
-     * Set this entry's user id.
-     *  
-     * @param userId This entry's new user id.
-     */ 
-    public void setUserId(int userId) {
-        this.userId = userId;
-    }   
-        
-    /** 
-     * Get this entry's group id.
-     *  
-     * @return This entry's group id.
-     */ 
-    public int getGroupId() {
-        return this.groupId;
-    }   
-        
-    /** 
-     * Set this entry's group id.
-     *  
-     * @param groupId This entry's new group id.
-     */ 
-    public void setGroupId(int groupId) {
-        this.groupId = groupId;
-    }   
-        
-    /** 
-     * Get this entry's user name.
-     *  
-     * @return This entry's user name.
-     */ 
-    public String getUserName() {
-        return this.userName.toString();
-    }   
-        
-    /** 
-     * Set this entry's user name.
-     *  
-     * @param userName This entry's new user name.
-     */ 
-    public void setUserName(String userName) {
-        this.userName = new StringBuffer(userName);
-    }   
-        
-    /** 
-     * Get this entry's group name.
-     *  
-     * @return This entry's group name.
-     */ 
-    public String getGroupName() {
-        return this.groupName.toString();
-    }   
-        
-    /** 
-     * Set this entry's group name.
-     *  
-     * @param groupName This entry's new group name.
-     */ 
-    public void setGroupName(String groupName) {
-        this.groupName = new StringBuffer(groupName);
-    }   
-        
-    /** 
-     * Convenience method to set this entry's group and user ids.
-     *  
-     * @param userId This entry's new user id.
-     * @param groupId This entry's new group id.
-     */ 
-    public void setIds(int userId, int groupId) {
-        this.setUserId(userId);
-        this.setGroupId(groupId);
-    }   
-        
-    /** 
-     * Convenience method to set this entry's group and user names.
-     *  
-     * @param userName This entry's new user name.
-     * @param groupName This entry's new group name.
-     */ 
-    public void setNames(String userName, String groupName) {
-        this.setUserName(userName);
-        this.setGroupName(groupName);
-    }   
-        
-    /** 
-     * Set this entry's modification time. The parameter passed
-     * to this method is in "Java time".
-     *  
-     * @param time This entry's new modification time.
-     */ 
-    public void setModTime(long time) {
-        this.modTime = time / 1000;
-    }   
-        
-    /** 
-     * Set this entry's modification time.
-     *  
-     * @param time This entry's new modification time.
-     */ 
-    public void setModTime(Date time) {
-        this.modTime = time.getTime() / 1000;
-    }   
-        
-    /** 
-     * Set this entry's modification time.
-     *  
-     * @param time This entry's new modification time.
-     */ 
-    public Date getModTime() {
-        return new Date(this.modTime * 1000);
-    }   
-        
-    /** 
-     * Get this entry's file.
-     *  
-     * @return This entry's file.
-     */ 
-    public File getFile() {
-        return this.file;
-    }   
-        
-    /** 
-     * Get this entry's mode.
-     *
-     * @return This entry's mode.
-     */
-    public int getMode() {
-        return this.mode;
-    }
-
-    /**
-     * Get this entry's file size.
-     *  
-     * @return This entry's file size.
-     */ 
-    public long getSize() {
-        return this.size;
-    }   
-        
-    /** 
-     * Set this entry's file size.
-     *  
-     * @param size This entry's new file size.
-     */ 
-    public void setSize(long size) {
-        this.size = size;
-    }   
-
-        
-    /**
-     * Indicate if this entry is a GNU long name block
-     *
-     * @return true if this is a long name extension provided by GNU tar
-     */
-    public boolean isGNULongNameEntry() {
-        return linkFlag == LF_GNUTYPE_LONGNAME &&
-               name.toString().equals(GNU_LONGLINK);
-    }               
-
-    /** 
-     * Return whether or not this entry represents a directory.
-     *  
-     * @return True if this entry is a directory.
-     */ 
-    public boolean isDirectory() {
-        if (this.file != null) {
-            return this.file.isDirectory();
-        } 
-        
-        if (this.linkFlag == LF_DIR) {
-            return true;
-        } 
-        
-        if (this.getName().endsWith("/")) {
-            return true;
-        } 
-        
-        return false;
-    }   
-        
-    /** 
-     * If this entry represents a file, and the file is a directory, return
-     * an array of TarEntries for this entry's children.
-     *  
-     * @return An array of TarEntry's for this entry's children.
-     */ 
-    public TarEntry[] getDirectoryEntries() {
-        if (this.file == null || !this.file.isDirectory()) {
-            return new TarEntry[0];
-        } 
-        
-        String[]   list = this.file.list();
-        TarEntry[] result = new TarEntry[list.length];
-        
-        for (int i = 0; i < list.length; ++i) {
-            result[i] = new TarEntry(new File(this.file, list[i]));
-        } 
-        
-        return result;
-    }   
-        
-    /** 
-     * Write an entry's header information to a header buffer.
-     *  
-     * @param outbuf The tar entry header buffer to fill in.
-     */ 
-    public void writeEntryHeader(byte[] outbuf) {
-        int offset = 0;
-        
-        offset = TarUtils.getNameBytes(this.name, outbuf, offset, NAMELEN);
-        offset = TarUtils.getOctalBytes(this.mode, outbuf, offset, MODELEN);
-        offset = TarUtils.getOctalBytes(this.userId, outbuf, offset, UIDLEN);
-        offset = TarUtils.getOctalBytes(this.groupId, outbuf, offset, GIDLEN);
-        offset = TarUtils.getLongOctalBytes(this.size, outbuf, offset, SIZELEN);
-        offset = TarUtils.getLongOctalBytes(this.modTime, outbuf, offset, MODTIMELEN);
-        
-        int csOffset = offset;
-        
-        for (int c = 0; c < CHKSUMLEN; ++c) {
-            outbuf[offset++] = (byte) ' ';
-        }
-        
-        outbuf[offset++] = this.linkFlag;
-        offset = TarUtils.getNameBytes(this.linkName, outbuf, offset, NAMELEN);
-        offset = TarUtils.getNameBytes(this.magic, outbuf, offset, MAGICLEN);
-        offset = TarUtils.getNameBytes(this.userName, outbuf, offset, UNAMELEN);
-        offset = TarUtils.getNameBytes(this.groupName, outbuf, offset, GNAMELEN);
-        offset = TarUtils.getOctalBytes(this.devMajor, outbuf, offset, DEVLEN);
-        offset = TarUtils.getOctalBytes(this.devMinor, outbuf, offset, DEVLEN);
-        
-        while (offset < outbuf.length) {
-            outbuf[offset++] = 0;
-        }
-        
-        long checkSum = TarUtils.computeCheckSum(outbuf);
-        
-        TarUtils.getCheckSumOctalBytes(checkSum, outbuf, csOffset, CHKSUMLEN);
-    }   
-        
-    /** 
-     * Parse an entry's header information from a header buffer.
-     *  
-     * @param header The tar entry header buffer to get information from.
-     */ 
-    public void parseTarHeader(byte[] header) {
-        int offset = 0;
-        
-        this.name = TarUtils.parseName(header, offset, NAMELEN);  
-        offset += NAMELEN;
-        this.mode = (int) TarUtils.parseOctal(header, offset, MODELEN); 
-        offset += MODELEN;
-        this.userId = (int) TarUtils.parseOctal(header, offset, UIDLEN);
-        offset += UIDLEN;
-        this.groupId = (int) TarUtils.parseOctal(header, offset, GIDLEN);
-        offset += GIDLEN;
-        this.size = TarUtils.parseOctal(header, offset, SIZELEN);
-        offset += SIZELEN;
-        this.modTime = TarUtils.parseOctal(header, offset, MODTIMELEN);
-        offset += MODTIMELEN;
-        this.checkSum = (int) TarUtils.parseOctal(header, offset, CHKSUMLEN);
-        offset += CHKSUMLEN;
-        this.linkFlag = header[offset++];
-        this.linkName = TarUtils.parseName(header, offset, NAMELEN);
-        offset += NAMELEN;
-        this.magic = TarUtils.parseName(header, offset, MAGICLEN);
-        offset += MAGICLEN;
-        this.userName = TarUtils.parseName(header, offset, UNAMELEN);
-        offset += UNAMELEN;
-        this.groupName = TarUtils.parseName(header, offset, GNAMELEN);
-        offset += GNAMELEN;
-        this.devMajor = (int) TarUtils.parseOctal(header, offset, DEVLEN);
-        offset += DEVLEN;
-        this.devMinor = (int) TarUtils.parseOctal(header, offset, DEVLEN);
-    }
-}       
diff --git a/src/main/org/apache/tools/tar/TarInputStream.java b/src/main/org/apache/tools/tar/TarInputStream.java
deleted file mode 100644
index 4a9529a..0000000
--- a/src/main/org/apache/tools/tar/TarInputStream.java
+++ /dev/null
@@ -1,411 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-/*
- * This package is based on the work done by Timothy Gerard Endres
- * (time@ice.com) to whom the Ant project is very grateful for his great code.
- */
-
-package org.apache.tools.tar;
-
-import java.io.FilterInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-
-/**
- * The TarInputStream reads a UNIX tar archive as an InputStream.
- * methods are provided to position at each successive entry in
- * the archive, and the read each entry as a normal input stream
- * using read().
- *
- * @author Timothy Gerard Endres <a href="mailto:time@ice.com">time@ice.com</a>
- * @author Stefano Mazzocchi <a href="mailto:stefano@apache.org">stefano@apache.org</a>
- */
-public class TarInputStream extends FilterInputStream {
-
-    protected boolean debug;
-    protected boolean hasHitEOF;
-    protected int entrySize;
-    protected int entryOffset;
-    protected byte[] oneBuf;
-    protected byte[] readBuf;
-    protected TarBuffer buffer;
-    protected TarEntry currEntry;
-    private boolean v7Format;
-    
-    public TarInputStream(InputStream is) {
-        this(is, TarBuffer.DEFAULT_BLKSIZE, TarBuffer.DEFAULT_RCDSIZE);
-    }
-
-    public TarInputStream(InputStream is, int blockSize) {
-        this(is, blockSize, TarBuffer.DEFAULT_RCDSIZE);
-    }
-
-    public TarInputStream(InputStream is, int blockSize, int recordSize) {
-        super(is);
-
-        this.buffer = new TarBuffer(is, blockSize, recordSize);
-        this.readBuf = null;
-        this.oneBuf = new byte[1];
-        this.debug = false;
-        this.hasHitEOF = false;
-        this.v7Format = false;
-    }
-
-    /**
-     * Sets the debugging flag.
-     *
-     * @param debugF True to turn on debugging.
-     */
-    public void setDebug(boolean debug) {
-        this.debug = debug;
-        this.buffer.setDebug(debug);
-    }
-
-    /**
-     * Closes this stream. Calls the TarBuffer's close() method.
-     */
-    public void close() throws IOException {
-        this.buffer.close();
-    }
-
-    /**
-     * Get the record size being used by this stream's TarBuffer.
-     *
-     * @return The TarBuffer record size.
-     */
-    public int getRecordSize() {
-        return this.buffer.getRecordSize();
-    }
-
-    /**
-     * Get the available data that can be read from the current
-     * entry in the archive. This does not indicate how much data
-     * is left in the entire archive, only in the current entry.
-     * This value is determined from the entry's size header field
-     * and the amount of data already read from the current entry.
-     *
-     *
-     * @return The number of available bytes for the current entry.
-     */
-    public int available() throws IOException {
-        return this.entrySize - this.entryOffset;
-    }
-
-    /**
-     * Skip bytes in the input buffer. This skips bytes in the
-     * current entry's data, not the entire archive, and will
-     * stop at the end of the current entry's data if the number
-     * to skip extends beyond that point.
-     *
-     * @param numToSkip The number of bytes to skip.
-     */
-    public long skip(long numToSkip) throws IOException {
-        // REVIEW
-        // This is horribly inefficient, but it ensures that we
-        // properly skip over bytes via the TarBuffer...
-        //
-        byte[] skipBuf = new byte[8 * 1024];
-        long skip = numToSkip;
-        while (skip > 0) {
-            int realSkip = (int) (skip > skipBuf.length ? skipBuf.length : skip);
-            int numRead = this.read(skipBuf, 0, realSkip);
-            if (numRead == -1) {
-                break;
-            }
-            skip -= numRead;
-        }
-        return (numToSkip - skip);
-    }
-
-    /**
-     * Since we do not support marking just yet, we return false.
-     *
-     * @return False.
-     */
-    public boolean markSupported() {
-        return false;
-    }
-
-    /**
-     * Since we do not support marking just yet, we do nothing.
-     *
-     * @param markLimit The limit to mark.
-     */
-    public void mark(int markLimit) {
-    }
-
-    /**
-     * Since we do not support marking just yet, we do nothing.
-     */
-    public void reset() {
-    }
-
-    /**
-     * Get the next entry in this tar archive. This will skip
-     * over any remaining data in the current entry, if there
-     * is one, and place the input stream at the header of the
-     * next entry, and read the header and instantiate a new
-     * TarEntry from the header bytes and return that entry.
-     * If there are no more entries in the archive, null will
-     * be returned to indicate that the end of the archive has
-     * been reached.
-     *
-     * @return The next TarEntry in the archive, or null.
-     */
-    public TarEntry getNextEntry() throws IOException {
-        if (this.hasHitEOF) {
-            return null;
-        }
-
-        if (this.currEntry != null) {
-            int numToSkip = this.entrySize - this.entryOffset;
-
-            if (this.debug) {
-                System.err.println("TarInputStream: SKIP currENTRY '"
-                        + this.currEntry.getName() + "' SZ "
-                        + this.entrySize + " OFF "
-                        + this.entryOffset + "  skipping "
-                        + numToSkip + " bytes");
-            }
-
-            if (numToSkip > 0) {
-                this.skip(numToSkip);
-            }
-
-            this.readBuf = null;
-        }
-
-        byte[] headerBuf = this.buffer.readRecord();
-
-        if (headerBuf == null) {
-            if (this.debug) {
-                System.err.println("READ NULL RECORD");
-            }
-            this.hasHitEOF = true;
-        } else if (this.buffer.isEOFRecord(headerBuf)) {
-            if (this.debug) {
-                System.err.println("READ EOF RECORD");
-            }
-            this.hasHitEOF = true;
-        }
-
-        if (this.hasHitEOF) {
-            this.currEntry = null;
-        } else {
-            this.currEntry = new TarEntry(headerBuf);
-
-            if (!(headerBuf[257] == 'u' && headerBuf[258] == 's'
-                    && headerBuf[259] == 't' && headerBuf[260] == 'a'
-                    && headerBuf[261] == 'r')) {
-                this.v7Format = true;
-            }
-
-            if (this.debug) {
-                System.err.println("TarInputStream: SET CURRENTRY '"
-                        + this.currEntry.getName()
-                        + "' size = "
-                        + this.currEntry.getSize());
-            }
-
-            this.entryOffset = 0;
-
-            // REVIEW How do we resolve this discrepancy?!
-            this.entrySize = (int) this.currEntry.getSize();
-        }
-
-        if (this.currEntry != null && this.currEntry.isGNULongNameEntry()) {
-            // read in the name
-            StringBuffer longName = new StringBuffer();
-            byte[] buffer = new byte[256];
-            int length = 0;
-            while ((length = read(buffer)) >= 0) {
-                longName.append(new String(buffer, 0, length));
-            }
-            getNextEntry();
-            this.currEntry.setName(longName.toString());
-        }
-
-        return this.currEntry;
-    }
-
-    /**
-     * Reads a byte from the current tar archive entry.
-     *
-     * This method simply calls read( byte[], int, int ).
-     *
-     * @return The byte read, or -1 at EOF.
-     */
-    public int read() throws IOException {
-        int num = this.read(this.oneBuf, 0, 1);
-
-        if (num == -1) {
-            return num;
-        } else {
-            return (int) this.oneBuf[0];
-        }
-    }
-
-    /**
-     * Reads bytes from the current tar archive entry.
-     *
-     * This method simply calls read( byte[], int, int ).
-     *
-     * @param buf The buffer into which to place bytes read.
-     * @return The number of bytes read, or -1 at EOF.
-     */
-    public int read(byte[] buf) throws IOException {
-        return this.read(buf, 0, buf.length);
-    }
-
-    /**
-     * Reads bytes from the current tar archive entry.
-     *
-     * This method is aware of the boundaries of the current
-     * entry in the archive and will deal with them as if they
-     * were this stream's start and EOF.
-     *
-     * @param buf The buffer into which to place bytes read.
-     * @param offset The offset at which to place bytes read.
-     * @param numToRead The number of bytes to read.
-     * @return The number of bytes read, or -1 at EOF.
-     */
-    public int read(byte[] buf, int offset, int numToRead) throws IOException {
-        int totalRead = 0;
-
-        if (this.entryOffset >= this.entrySize) {
-            return -1;
-        }
-
-        if ((numToRead + this.entryOffset) > this.entrySize) {
-            numToRead = (this.entrySize - this.entryOffset);
-        }
-
-        if (this.readBuf != null) {
-            int sz = (numToRead > this.readBuf.length) ? this.readBuf.length
-                    : numToRead;
-
-            System.arraycopy(this.readBuf, 0, buf, offset, sz);
-
-            if (sz >= this.readBuf.length) {
-                this.readBuf = null;
-            } else {
-                int newLen = this.readBuf.length - sz;
-                byte[] newBuf = new byte[newLen];
-
-                System.arraycopy(this.readBuf, sz, newBuf, 0, newLen);
-
-                this.readBuf = newBuf;
-            }
-
-            totalRead += sz;
-            numToRead -= sz;
-            offset += sz;
-        }
-
-        while (numToRead > 0) {
-            byte[] rec = this.buffer.readRecord();
-
-            if (rec == null) {
-                // Unexpected EOF!
-                throw new IOException("unexpected EOF with " + numToRead
-                        + " bytes unread");
-            }
-
-            int sz = numToRead;
-            int recLen = rec.length;
-
-            if (recLen > sz) {
-                System.arraycopy(rec, 0, buf, offset, sz);
-
-                this.readBuf = new byte[recLen - sz];
-
-                System.arraycopy(rec, sz, this.readBuf, 0, recLen - sz);
-            } else {
-                sz = recLen;
-
-                System.arraycopy(rec, 0, buf, offset, recLen);
-            }
-
-            totalRead += sz;
-            numToRead -= sz;
-            offset += sz;
-        }
-
-        this.entryOffset += totalRead;
-
-        return totalRead;
-    }
-
-    /**
-     * Copies the contents of the current tar archive entry directly into
-     * an output stream.
-     *
-     * @param out The OutputStream into which to write the entry's data.
-     */
-    public void copyEntryContents(OutputStream out) throws IOException {
-        byte[] buf = new byte[32 * 1024];
-
-        while (true) {
-            int numRead = this.read(buf, 0, buf.length);
-
-            if (numRead == -1) {
-                break;
-            }
-
-            out.write(buf, 0, numRead);
-        }
-    }
-}
diff --git a/src/main/org/apache/tools/tar/TarOutputStream.java b/src/main/org/apache/tools/tar/TarOutputStream.java
deleted file mode 100644
index b9d602c..0000000
--- a/src/main/org/apache/tools/tar/TarOutputStream.java
+++ /dev/null
@@ -1,349 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-/*
- * This package is based on the work done by Timothy Gerard Endres 
- * (time@ice.com) to whom the Ant project is very grateful for his great code.
- */
-
-package org.apache.tools.tar;
-
-import java.io.FilterOutputStream;
-import java.io.OutputStream;
-import java.io.IOException;
-
-/**
- * The TarOutputStream writes a UNIX tar archive as an OutputStream.
- * Methods are provided to put entries, and then write their contents
- * by writing to this stream using write().
- * 
- * @author Timothy Gerard Endres <a href="mailto:time@ice.com">time@ice.com</a>
- */
-public class TarOutputStream extends FilterOutputStream {
-    /** Fail if a long file name is required in the archive. */
-    public static final int LONGFILE_ERROR = 0;
-    
-    /** Long paths will be truncated in the archive. */
-    public static final int LONGFILE_TRUNCATE = 1;
-    
-    /** GNU tar extensions are used to store long file names in the archive. */
-    public static final int LONGFILE_GNU = 2;
-    
-    protected boolean   debug;
-    protected int       currSize;
-    protected int       currBytes;
-    protected byte[]    oneBuf;
-    protected byte[]    recordBuf;
-    protected int       assemLen;
-    protected byte[]    assemBuf;
-    protected TarBuffer buffer;
-    protected int       longFileMode = LONGFILE_ERROR;
-
-    public TarOutputStream(OutputStream os) {
-        this(os, TarBuffer.DEFAULT_BLKSIZE, TarBuffer.DEFAULT_RCDSIZE);
-    }
-
-    public TarOutputStream(OutputStream os, int blockSize) {
-        this(os, blockSize, TarBuffer.DEFAULT_RCDSIZE);
-    }
-
-    public TarOutputStream(OutputStream os, int blockSize, int recordSize) {
-        super(os);
-
-        this.buffer = new TarBuffer(os, blockSize, recordSize);
-        this.debug = false;
-        this.assemLen = 0;
-        this.assemBuf = new byte[recordSize];
-        this.recordBuf = new byte[recordSize];
-        this.oneBuf = new byte[1];
-    }
-
-    public void setLongFileMode(int longFileMode) {
-        this.longFileMode = longFileMode;
-    }
-    
-
-    /**
-     * Sets the debugging flag.
-     * 
-     * @param debugF True to turn on debugging.
-     */
-    public void setDebug(boolean debugF) {
-        this.debug = debugF;
-    } 
-
-    /**
-     * Sets the debugging flag in this stream's TarBuffer.
-     * 
-     * @param debugF True to turn on debugging.
-     */
-    public void setBufferDebug(boolean debug) {
-        this.buffer.setDebug(debug);
-    } 
-
-    /**
-     * Ends the TAR archive without closing the underlying OutputStream.
-     * The result is that the EOF record of nulls is written.
-     */
-    public void finish() throws IOException {
-        this.writeEOFRecord();
-    } 
-
-    /**
-     * Ends the TAR archive and closes the underlying OutputStream.
-     * This means that finish() is called followed by calling the
-     * TarBuffer's close().
-     */
-    public void close() throws IOException {
-        this.finish();
-        this.buffer.close();
-    } 
-
-    /**
-     * Get the record size being used by this stream's TarBuffer.
-     * 
-     * @return The TarBuffer record size.
-     */
-    public int getRecordSize() {
-        return this.buffer.getRecordSize();
-    } 
-
-    /**
-     * Put an entry on the output stream. This writes the entry's
-     * header record and positions the output stream for writing
-     * the contents of the entry. Once this method is called, the
-     * stream is ready for calls to write() to write the entry's
-     * contents. Once the contents are written, closeEntry()
-     * <B>MUST</B> be called to ensure that all buffered data
-     * is completely written to the output stream.
-     * 
-     * @param entry The TarEntry to be written to the archive.
-     */
-    public void putNextEntry(TarEntry entry) throws IOException {
-        if (entry.getName().length() >= TarConstants.NAMELEN) {
-
-            if (longFileMode == LONGFILE_GNU) {
-                // create a TarEntry for the LongLink, the contents
-                // of which are the entry's name 
-                TarEntry longLinkEntry = new TarEntry(TarConstants.GNU_LONGLINK,
-                                                      TarConstants.LF_GNUTYPE_LONGNAME);
-                 
-                longLinkEntry.setSize(entry.getName().length() + 1);
-                putNextEntry(longLinkEntry);                                                    
-                write(entry.getName().getBytes());
-                write(0);
-                closeEntry();
-            } else if (longFileMode != LONGFILE_TRUNCATE) {
-                throw new RuntimeException("file name '" + entry.getName() 
-                                             + "' is too long ( > " 
-                                             + TarConstants.NAMELEN + " bytes)");
-            }
-        } 
-
-        entry.writeEntryHeader(this.recordBuf);
-        this.buffer.writeRecord(this.recordBuf);
-
-        this.currBytes = 0;
-
-        if (entry.isDirectory()) {
-            this.currSize = 0;
-        } else {
-            this.currSize = (int) entry.getSize();
-        }
-    } 
-
-    /**
-     * Close an entry. This method MUST be called for all file
-     * entries that contain data. The reason is that we must
-     * buffer data written to the stream in order to satisfy
-     * the buffer's record based writes. Thus, there may be
-     * data fragments still being assembled that must be written
-     * to the output stream before this entry is closed and the
-     * next entry written.
-     */
-    public void closeEntry() throws IOException {
-        if (this.assemLen > 0) {
-            for (int i = this.assemLen; i < this.assemBuf.length; ++i) {
-                this.assemBuf[i] = 0;
-            }
-
-            this.buffer.writeRecord(this.assemBuf);
-
-            this.currBytes += this.assemLen;
-            this.assemLen = 0;
-        } 
-
-        if (this.currBytes < this.currSize) {
-            throw new IOException("entry closed at '" + this.currBytes 
-                                  + "' before the '" + this.currSize 
-                                  + "' bytes specified in the header were written");
-        } 
-    } 
-
-    /**
-     * Writes a byte to the current tar archive entry.
-     * 
-     * This method simply calls read( byte[], int, int ).
-     * 
-     * @param b The byte written.
-     */
-    public void write(int b) throws IOException {
-        this.oneBuf[0] = (byte) b;
-
-        this.write(this.oneBuf, 0, 1);
-    } 
-
-    /**
-     * Writes bytes to the current tar archive entry.
-     * 
-     * This method simply calls write( byte[], int, int ).
-     * 
-     * @param wBuf The buffer to write to the archive.
-     * @return The number of bytes read, or -1 at EOF.
-     */
-    public void write(byte[] wBuf) throws IOException {
-        this.write(wBuf, 0, wBuf.length);
-    } 
-
-    /**
-     * Writes bytes to the current tar archive entry. This method
-     * is aware of the current entry and will throw an exception if
-     * you attempt to write bytes past the length specified for the
-     * current entry. The method is also (painfully) aware of the
-     * record buffering required by TarBuffer, and manages buffers
-     * that are not a multiple of recordsize in length, including
-     * assembling records from small buffers.
-     * 
-     * @param wBuf The buffer to write to the archive.
-     * @param wOffset The offset in the buffer from which to get bytes.
-     * @param numToWrite The number of bytes to write.
-     */
-    public void write(byte[] wBuf, int wOffset, int numToWrite) throws IOException {
-        if ((this.currBytes + numToWrite) > this.currSize) {
-            throw new IOException("request to write '" + numToWrite 
-                                  + "' bytes exceeds size in header of '" 
-                                  + this.currSize + "' bytes");
-
-            // 
-            // We have to deal with assembly!!!
-            // The programmer can be writing little 32 byte chunks for all
-            // we know, and we must assemble complete records for writing.
-            // REVIEW Maybe this should be in TarBuffer? Could that help to
-            // eliminate some of the buffer copying.
-            // 
-        } 
-
-        if (this.assemLen > 0) {
-            if ((this.assemLen + numToWrite) >= this.recordBuf.length) {
-                int aLen = this.recordBuf.length - this.assemLen;
-
-                System.arraycopy(this.assemBuf, 0, this.recordBuf, 0, 
-                                 this.assemLen);
-                System.arraycopy(wBuf, wOffset, this.recordBuf, 
-                                 this.assemLen, aLen);
-                this.buffer.writeRecord(this.recordBuf);
-
-                this.currBytes += this.recordBuf.length;
-                wOffset += aLen;
-                numToWrite -= aLen;
-                this.assemLen = 0;
-            } else {
-                System.arraycopy(wBuf, wOffset, this.assemBuf, this.assemLen, 
-                                 numToWrite);
-
-                wOffset += numToWrite;
-                this.assemLen += numToWrite;
-                numToWrite -= numToWrite;
-            } 
-        } 
-
-        // 
-        // When we get here we have EITHER:
-        // o An empty "assemble" buffer.
-        // o No bytes to write (numToWrite == 0)
-        // 
-        while (numToWrite > 0) {
-            if (numToWrite < this.recordBuf.length) {
-                System.arraycopy(wBuf, wOffset, this.assemBuf, this.assemLen, 
-                                 numToWrite);
-
-                this.assemLen += numToWrite;
-
-                break;
-            } 
-
-            this.buffer.writeRecord(wBuf, wOffset);
-
-            int num = this.recordBuf.length;
-
-            this.currBytes += num;
-            numToWrite -= num;
-            wOffset += num;
-        } 
-    } 
-
-    /**
-     * Write an EOF (end of archive) record to the tar archive.
-     * An EOF record consists of a record of all zeros.
-     */
-    private void writeEOFRecord() throws IOException {
-        for (int i = 0; i < this.recordBuf.length; ++i) {
-            this.recordBuf[i] = 0;
-        }
-
-        this.buffer.writeRecord(this.recordBuf);
-    } 
-}
-
-
diff --git a/src/main/org/apache/tools/tar/TarUtils.java b/src/main/org/apache/tools/tar/TarUtils.java
deleted file mode 100644
index 5fa18dc..0000000
--- a/src/main/org/apache/tools/tar/TarUtils.java
+++ /dev/null
@@ -1,234 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-/*
- * This package is based on the work done by Timothy Gerard Endres 
- * (time@ice.com) to whom the Ant project is very grateful for his great code.
- */
-
-package org.apache.tools.tar;
-
-/**
- * This class provides static utility methods to work with byte streams.
- * 
- * @author Timothy Gerard Endres <a href="mailto:time@ice.com">time@ice.com</a>
- * @author Stefano Mazzocchi <a href="mailto:stefano@apache.org">stefano@apache.org</a>
- */
-public class TarUtils {
-
-    /**
-     * Parse an octal string from a header buffer. This is used for the
-     * file permission mode value.
-     * 
-     * @param header The header buffer from which to parse.
-     * @param offset The offset into the buffer from which to parse.
-     * @param length The number of header bytes to parse.
-     * @return The long value of the octal string.
-     */
-    public static long parseOctal(byte[] header, int offset, int length) {
-        long    result = 0;
-        boolean stillPadding = true;
-        int     end = offset + length;
-
-        for (int i = offset; i < end; ++i) {
-            if (header[i] == 0) {
-                break;
-            } 
-
-            if (header[i] == (byte) ' ' || header[i] == '0') {
-                if (stillPadding) {
-                    continue;
-                } 
-
-                if (header[i] == (byte) ' ') {
-                    break;
-                } 
-            } 
-
-            stillPadding = false;
-            result = (result << 3) + (header[i] - '0');
-        } 
-
-        return result;
-    } 
-
-    /**
-     * Parse an entry name from a header buffer.
-     * 
-     * @param header The header buffer from which to parse.
-     * @param offset The offset into the buffer from which to parse.
-     * @param length The number of header bytes to parse.
-     * @return The header's entry name.
-     */
-    public static StringBuffer parseName(byte[] header, int offset, int length) {
-        StringBuffer result = new StringBuffer(length);
-        int          end = offset + length;
-
-        for (int i = offset; i < end; ++i) {
-            if (header[i] == 0) {
-                break;
-            } 
-
-            result.append((char) header[i]);
-        } 
-
-        return result;
-    } 
-
-    /**
-     * Determine the number of bytes in an entry name.
-     * 
-     * @param header The header buffer from which to parse.
-     * @param offset The offset into the buffer from which to parse.
-     * @param length The number of header bytes to parse.
-     * @return The number of bytes in a header's entry name.
-     */
-    public static int getNameBytes(StringBuffer name, byte[] buf, int offset, int length) {
-        int i;
-
-        for (i = 0; i < length && i < name.length(); ++i) {
-            buf[offset + i] = (byte) name.charAt(i);
-        } 
-
-        for (; i < length; ++i) {
-            buf[offset + i] = 0;
-        } 
-
-        return offset + length;
-    } 
-
-    /**
-     * Parse an octal integer from a header buffer.
-     * 
-     * @param header The header buffer from which to parse.
-     * @param offset The offset into the buffer from which to parse.
-     * @param length The number of header bytes to parse.
-     * @return The integer value of the octal bytes.
-     */
-    public static int getOctalBytes(long value, byte[] buf, int offset, int length) {
-        byte[] result = new byte[length];
-        int    idx = length - 1;
-
-        buf[offset + idx] = 0;
-        --idx;
-        buf[offset + idx] = (byte) ' ';
-        --idx;
-
-        if (value == 0) {
-            buf[offset + idx] = (byte) '0';
-            --idx;
-        } else {
-            for (long val = value; idx >= 0 && val > 0; --idx) {
-                buf[offset + idx] = (byte) ((byte) '0' + (byte) (val & 7));
-                val = val >> 3;
-            } 
-        } 
-
-        for (; idx >= 0; --idx) {
-            buf[offset + idx] = (byte) ' ';
-        } 
-
-        return offset + length;
-    } 
-
-    /**
-     * Parse an octal long integer from a header buffer.
-     * 
-     * @param header The header buffer from which to parse.
-     * @param offset The offset into the buffer from which to parse.
-     * @param length The number of header bytes to parse.
-     * @return The long value of the octal bytes.
-     */
-    public static int getLongOctalBytes(long value, byte[] buf, int offset, int length) {
-        byte[] temp = new byte[length + 1];
-
-        getOctalBytes(value, temp, 0, length + 1);
-        System.arraycopy(temp, 0, buf, offset, length);
-
-        return offset + length;
-    } 
-
-    /**
-     * Parse the checksum octal integer from a header buffer.
-     * 
-     * @param header The header buffer from which to parse.
-     * @param offset The offset into the buffer from which to parse.
-     * @param length The number of header bytes to parse.
-     * @return The integer value of the entry's checksum.
-     */
-    public static int getCheckSumOctalBytes(long value, byte[] buf, int offset, int length) {
-        getOctalBytes(value, buf, offset, length);
-
-        buf[offset + length - 1] = (byte) ' ';
-        buf[offset + length - 2] = 0;
-
-        return offset + length;
-    }
-    
-    /** 
-     * Compute the checksum of a tar entry header.
-     *  
-     * @param buf The tar entry's header buffer.
-     * @return The computed checksum.
-     */ 
-    public static long computeCheckSum(byte[] buf) {
-        long sum = 0;
-        
-        for (int i = 0; i < buf.length; ++i) {
-            sum += 255 & buf[i];
-        } 
-        
-        return sum;
-    }    
-}
diff --git a/src/main/org/apache/tools/zip/AsiExtraField.java b/src/main/org/apache/tools/zip/AsiExtraField.java
deleted file mode 100644
index 17056d3..0000000
--- a/src/main/org/apache/tools/zip/AsiExtraField.java
+++ /dev/null
@@ -1,366 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.zip;
-
-import java.util.zip.CRC32;
-import java.util.zip.ZipException;
-
-/**
- * Adds Unix file permission and UID/GID fields as well as symbolic
- * link handling.
- *
- * <p>This class uses the ASi extra field in the format:
- * <pre>
- *         Value         Size            Description
- *         -----         ----            -----------
- * (Unix3) 0x756e        Short           tag for this extra block type
- *         TSize         Short           total data size for this block
- *         CRC           Long            CRC-32 of the remaining data
- *         Mode          Short           file permissions
- *         SizDev        Long            symlink'd size OR major/minor dev num
- *         UID           Short           user ID
- *         GID           Short           group ID
- *         (var.)        variable        symbolic link filename
- * </pre>
- * taken from appnote.iz (Info-ZIP note, 981119) found at <a
- * href="ftp://ftp.uu.net/pub/archiving/zip/doc/">ftp://ftp.uu.net/pub/archiving/zip/doc/</a></p>
-
- *
- * <p>Short is two bytes and Long is four bytes in big endian byte and
- * word order, device numbers are currently not supported.</p>
- *
- * @author <a href="stefan.bodewig@epost.de">Stefan Bodewig</a>
- * @version $Revision$
- */
-public class AsiExtraField implements ZipExtraField, UnixStat, Cloneable {
-
-    private static final ZipShort HEADER_ID = new ZipShort(0x756E);
-
-    /**
-     * Standard Unix stat(2) file mode.
-     *
-     * @since 1.1
-     */
-    private int mode = 0;
-    /**
-     * User ID.
-     *
-     * @since 1.1
-     */
-    private int uid = 0;
-    /**
-     * Group ID.
-     *
-     * @since 1.1
-     */
-    private int gid = 0;
-    /**
-     * File this entry points to, if it is a symbolic link.
-     *
-     * <p>empty string - if entry is not a symbolic link.</p>
-     *
-     * @since 1.1
-     */
-    private String link = "";
-    /**
-     * Is this an entry for a directory?
-     *
-     * @since 1.1
-     */
-    private boolean dirFlag = false;
-
-    /**
-     * Instance used to calculate checksums.
-     *
-     * @since 1.1
-     */
-    private CRC32 crc = new CRC32();
-
-    public AsiExtraField() {
-    }
-
-    /**
-     * The Header-ID.
-     *
-     * @since 1.1
-     */
-    public ZipShort getHeaderId() {
-        return HEADER_ID;
-    }
-
-    /**
-     * Length of the extra field in the local file data - without
-     * Header-ID or length specifier.
-     *
-     * @since 1.1
-     */
-    public ZipShort getLocalFileDataLength() {
-        return new ZipShort(4         // CRC
-                          + 2         // Mode
-                          + 4         // SizDev
-                          + 2         // UID
-                          + 2         // GID
-                          + getLinkedFile().getBytes().length);
-    }
-
-    /**
-     * Delegate to local file data.
-     *
-     * @since 1.1
-     */
-    public ZipShort getCentralDirectoryLength() {
-        return getLocalFileDataLength();
-    }
-
-    /**
-     * The actual data to put into local file data - without Header-ID
-     * or length specifier.
-     *
-     * @since 1.1
-     */
-    public byte[] getLocalFileDataData() {
-        // CRC will be added later
-        byte[] data = new byte[getLocalFileDataLength().getValue() - 4];
-        System.arraycopy((new ZipShort(getMode())).getBytes(), 0, data, 0, 2);
-
-        byte[] linkArray = getLinkedFile().getBytes();
-        System.arraycopy((new ZipLong(linkArray.length)).getBytes(),
-                         0, data, 2, 4);
-
-        System.arraycopy((new ZipShort(getUserId())).getBytes(), 
-                         0, data, 6, 2);
-        System.arraycopy((new ZipShort(getGroupId())).getBytes(),
-                         0, data, 8, 2);
-
-        System.arraycopy(linkArray, 0, data, 10, linkArray.length);
-
-        crc.reset();
-        crc.update(data);
-        long checksum = crc.getValue();
-
-        byte[] result = new byte[data.length + 4];
-        System.arraycopy((new ZipLong(checksum)).getBytes(), 0, result, 0, 4);
-        System.arraycopy(data, 0, result, 4, data.length);
-        return result;
-    }
-
-    /**
-     * Delegate to local file data.
-     *
-     * @since 1.1
-     */
-    public byte[] getCentralDirectoryData() {
-        return getLocalFileDataData();
-    }
-
-    /**
-     * Set the user id.
-     *
-     * @since 1.1
-     */
-    public void setUserId(int uid) {
-        this.uid = uid;
-    }
-
-    /**
-     * Get the user id.
-     *
-     * @since 1.1
-     */
-    public int getUserId() {
-        return uid;
-    }
-
-    /**
-     * Set the group id.
-     *
-     * @since 1.1
-     */
-    public void setGroupId(int gid) {
-        this.gid = gid;
-    }
-
-    /**
-     * Get the group id.
-     *
-     * @since 1.1
-     */
-    public int getGroupId() {
-        return gid;
-    }
-
-    /**
-     * Indicate that this entry is a symbolic link to the given filename.
-     *
-     * @param name Name of the file this entry links to, empty String
-     *             if it is not a symbolic link.
-     *
-     * @since 1.1
-     */
-    public void setLinkedFile(String name) {
-        link = name;
-        mode = getMode(mode);
-    }
-
-    /**
-     * Name of linked file
-     *
-     * @return name of the file this entry links to if it is a
-     *         symbolic link, the empty string otherwise.
-     *
-     * @since 1.1
-     */
-    public String getLinkedFile() {
-        return link;
-    }
-
-    /**
-     * Is this entry a symbolic link?
-     *
-     * @since 1.1
-     */
-    public boolean isLink() {
-        return getLinkedFile().length() != 0;
-    }
-
-    /**
-     * File mode of this file.
-     *
-     * @since 1.1
-     */
-    public void setMode(int mode) {
-        this.mode = getMode(mode);
-    }
-
-    /**
-     * File mode of this file.
-     *
-     * @since 1.1
-     */
-    public int getMode() {
-        return mode;
-    }
-
-    /**
-     * Indicate whether this entry is a directory.
-     *
-     * @since 1.1
-     */
-    public void setDirectory(boolean dirFlag) {
-        this.dirFlag = dirFlag;
-        mode = getMode(mode);
-    }
-
-    /**
-     * Is this entry a directory?
-     *
-     * @since 1.1
-     */
-    public boolean isDirectory() {
-        return dirFlag && !isLink();
-    }
-
-    /**
-     * Populate data from this array as if it was in local file data.
-     *
-     * @since 1.1
-     */
-    public void parseFromLocalFileData(byte[] data, int offset, int length)
-        throws ZipException {
-
-        long givenChecksum = (new ZipLong(data, offset)).getValue();
-        byte[] tmp = new byte[length - 4];
-        System.arraycopy(data, offset + 4, tmp, 0, length - 4);
-        crc.reset();
-        crc.update(tmp);
-        long realChecksum = crc.getValue();
-        if (givenChecksum != realChecksum) {
-            throw new ZipException("bad CRC checksum " 
-                                   + Long.toHexString(givenChecksum)
-                                   + " instead of " 
-                                   + Long.toHexString(realChecksum));
-        }
-        
-        int newMode = (new ZipShort(tmp, 0)).getValue();
-        byte[] linkArray = new byte[(int) (new ZipLong(tmp, 2)).getValue()];
-        uid = (new ZipShort(tmp, 6)).getValue();
-        gid = (new ZipShort(tmp, 8)).getValue();
-
-        if (linkArray.length == 0) {
-            link = "";
-        } else {
-            System.arraycopy(tmp, 10, linkArray, 0, linkArray.length);
-            link = new String(linkArray);
-        }
-        setDirectory((newMode & DIR_FLAG) != 0);
-        setMode(newMode);
-    }
-
-    /**
-     * Get the file mode for given permissions with the correct file type.
-     *
-     * @since 1.1
-     */
-    protected int getMode(int mode) {
-        int type = FILE_FLAG;
-        if (isLink()) {
-            type = LINK_FLAG;
-        } else if (isDirectory()) {
-            type = DIR_FLAG;
-        }
-        return type | (mode & PERM_MASK);
-    }
-    
-}
diff --git a/src/main/org/apache/tools/zip/ExtraFieldUtils.java b/src/main/org/apache/tools/zip/ExtraFieldUtils.java
deleted file mode 100644
index 04a587e..0000000
--- a/src/main/org/apache/tools/zip/ExtraFieldUtils.java
+++ /dev/null
@@ -1,205 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.zip;
-
-import java.util.Hashtable;
-import java.util.Vector;
-import java.util.zip.ZipException;
-
-/**
- * ZipExtraField related methods
- *
- * @author <a href="stefan.bodewig@epost.de">Stefan Bodewig</a>
- * @version $Revision$
- */
-public class ExtraFieldUtils {
-
-    /**
-     * Static registry of known extra fields.
-     *
-     * @since 1.1
-     */
-    private static Hashtable implementations;
-
-    static {
-        implementations = new Hashtable();
-        register(AsiExtraField.class);
-    }
-
-    /**
-     * Register a ZipExtraField implementation.
-     *
-     * <p>The given class must have a no-arg constructor and implement
-     * the {@link ZipExtraField ZipExtraField interface}.</p>
-     *
-     * @since 1.1
-     */
-    public static void register(Class c) {
-        try {
-            ZipExtraField ze = (ZipExtraField) c.newInstance();
-            implementations.put(ze.getHeaderId(), c);
-        } catch (ClassCastException cc) {
-            throw new RuntimeException(c + 
-                                       " doesn\'t implement ZipExtraField");
-        } catch (InstantiationException ie) {
-            throw new RuntimeException(c + " is not a concrete class");
-        } catch (IllegalAccessException ie) {
-            throw new RuntimeException(c + 
-                                       "\'s no-arg constructor is not public");
-        }
-    }
-
-    /**
-     * Create an instance of the approriate ExtraField, falls back to
-     * {@link UnrecognizedExtraField UnrecognizedExtraField}.
-     *
-     * @since 1.1
-     */
-    public static ZipExtraField createExtraField(ZipShort headerId)
-        throws InstantiationException, IllegalAccessException {
-        Class c = (Class) implementations.get(headerId);
-        if (c != null) {
-            return (ZipExtraField) c.newInstance();
-        }
-        UnrecognizedExtraField u = new UnrecognizedExtraField();
-        u.setHeaderId(headerId);
-        return u;
-    }
-
-    /**
-     * Split the array into ExtraFields and populate them with the
-     * give data.
-     *
-     * @since 1.1
-     */
-    public static ZipExtraField[] parse(byte[] data) throws ZipException {
-        Vector v = new Vector();
-        int start = 0;
-        while (start <= data.length - 4) {
-            ZipShort headerId = new ZipShort(data, start);
-            int length = (new ZipShort(data, start + 2)).getValue();
-            if (start + 4 + length > data.length) {
-                throw new ZipException("data starting at " + start
-                    + " is in unknown format");
-            }
-            try {
-                ZipExtraField ze = createExtraField(headerId);
-                ze.parseFromLocalFileData(data, start + 4, length);
-                v.addElement(ze);
-            } catch (InstantiationException ie) {
-                throw new ZipException(ie.getMessage());
-            } catch (IllegalAccessException iae) {
-                throw new ZipException(iae.getMessage());
-            }
-            start += (length + 4);
-        }
-        if (start != data.length) { // array not exhausted
-            throw new ZipException("data starting at " + start
-                + " is in unknown format");
-        }
-        
-        ZipExtraField[] result = new ZipExtraField[v.size()];
-        v.copyInto(result);
-        return result;
-    }
-
-    /**
-     * Merges the local file data fields of the given ZipExtraFields.
-     *
-     * @since 1.1
-     */
-    public static byte[] mergeLocalFileDataData(ZipExtraField[] data) {
-        int sum = 4 * data.length;
-        for (int i = 0; i < data.length; i++) {
-            sum += data[i].getLocalFileDataLength().getValue();
-        }
-        byte[] result = new byte[sum];
-        int start = 0;
-        for (int i = 0; i < data.length; i++) {
-            System.arraycopy(data[i].getHeaderId().getBytes(),
-                             0, result, start, 2);
-            System.arraycopy(data[i].getLocalFileDataLength().getBytes(),
-                             0, result, start + 2, 2);
-            byte[] local = data[i].getLocalFileDataData();
-            System.arraycopy(local, 0, result, start + 4, local.length);
-            start += (local.length + 4);
-        }
-        return result;
-    }
-
-    /**
-     * Merges the central directory fields of the given ZipExtraFields.
-     *
-     * @since 1.1
-     */
-    public static byte[] mergeCentralDirectoryData(ZipExtraField[] data) {
-        int sum = 4 * data.length;
-        for (int i = 0; i < data.length; i++) {
-            sum += data[i].getCentralDirectoryLength().getValue();
-        }
-        byte[] result = new byte[sum];
-        int start = 0;
-        for (int i = 0; i < data.length; i++) {
-            System.arraycopy(data[i].getHeaderId().getBytes(),
-                             0, result, start, 2);
-            System.arraycopy(data[i].getCentralDirectoryLength().getBytes(),
-                             0, result, start + 2, 2);
-            byte[] local = data[i].getCentralDirectoryData();
-            System.arraycopy(local, 0, result, start + 4, local.length);
-            start += (local.length + 4);
-        }
-        return result;
-    }
-}
diff --git a/src/main/org/apache/tools/zip/UnixStat.java b/src/main/org/apache/tools/zip/UnixStat.java
deleted file mode 100644
index 950084d..0000000
--- a/src/main/org/apache/tools/zip/UnixStat.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.zip;
-
-/**
- * Constants from stat.h on Unix systems.
- *
- * @author <a href="stefan.bodewig@epost.de">Stefan Bodewig</a>
- * @version $Revision$
- */
-public interface UnixStat {
-
-    /**
-     * Bits used for permissions (and sticky bit)
-     *
-     * @since 1.1
-     */
-    int PERM_MASK =           07777;
-    /**
-     * Indicates symbolic links.
-     *
-     * @since 1.1
-     */
-    int LINK_FLAG =         0120000;
-    /**
-     * Indicates plain files.
-     *
-     * @since 1.1
-     */
-    int FILE_FLAG =         0100000;
-    /**
-     * Indicates directories.
-     *
-     * @since 1.1
-     */
-    int DIR_FLAG =           040000;
-    
-    // ----------------------------------------------------------
-    // somewhat arbitrary choices that are quite common for shared 
-    // installations
-    // -----------------------------------------------------------
-
-    /**
-     * Default permissions for symbolic links.
-     *
-     * @since 1.1
-     */
-    int DEFAULT_LINK_PERM =    0777;
-    /**
-     * Default permissions for directories.
-     *
-     * @since 1.1
-     */
-    int DEFAULT_DIR_PERM =     0755;
-    /**
-     * Default permissions for plain files.
-     *
-     * @since 1.1
-     */
-    int DEFAULT_FILE_PERM =    0644;
-}
diff --git a/src/main/org/apache/tools/zip/UnrecognizedExtraField.java b/src/main/org/apache/tools/zip/UnrecognizedExtraField.java
deleted file mode 100644
index d230291..0000000
--- a/src/main/org/apache/tools/zip/UnrecognizedExtraField.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.zip;
-
-/**
- * Simple placeholder for all those extra fields we don't want to deal
- * with.
- *
- * <p>Assumes local file data and central directory entries are
- * identical - unless told the opposite.</p>
- *
- * @author <a href="stefan.bodewig@epost.de">Stefan Bodewig</a>
- * @version $Revision$
- */
-public class UnrecognizedExtraField implements ZipExtraField {
-
-    /**
-     * The Header-ID.
-     *
-     * @since 1.1
-     */
-    private ZipShort headerId;
-
-    public void setHeaderId(ZipShort headerId) {
-        this.headerId = headerId;
-    }
-
-    public ZipShort getHeaderId() {
-        return headerId;
-    }
-
-    /**
-     * Extra field data in local file data - without
-     * Header-ID or length specifier.
-     *
-     * @since 1.1
-     */
-    private byte[] localData;
-
-    public void setLocalFileDataData(byte[] data) {
-        localData = data;
-    }
-
-    public ZipShort getLocalFileDataLength() {
-        return new ZipShort(localData.length);
-    }
-
-    public byte[] getLocalFileDataData() {
-        return localData;
-    }
-
-    /**
-     * Extra field data in central directory - without
-     * Header-ID or length specifier.
-     *
-     * @since 1.1
-     */
-    private byte[] centralData;
-
-    public void setCentralDirectoryData(byte[] data) {
-        centralData = data;
-    }
-
-    public ZipShort getCentralDirectoryLength() {
-        if (centralData != null) {
-            return new ZipShort(centralData.length);
-        }
-        return getLocalFileDataLength();
-    }
-
-    public byte[] getCentralDirectoryData() {
-        if (centralData != null) {
-            return centralData;
-        }
-        return getLocalFileDataData();
-    }
-
-    public void parseFromLocalFileData(byte[] data, int offset, int length) {
-        byte[] tmp = new byte[length];
-        System.arraycopy(data, offset, tmp, 0, length);
-        setLocalFileDataData(tmp);
-    }
-}
diff --git a/src/main/org/apache/tools/zip/ZipEntry.java b/src/main/org/apache/tools/zip/ZipEntry.java
deleted file mode 100644
index ef2296f..0000000
--- a/src/main/org/apache/tools/zip/ZipEntry.java
+++ /dev/null
@@ -1,402 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.zip;
-
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.util.Vector;
-import java.util.zip.ZipException;
-
-/**
- * Extension that adds better handling of extra fields and provides
- * access to the internal and external file attributes.
- *
- * @author <a href="stefan.bodewig@epost.de">Stefan Bodewig</a>
- * @version $Revision$
- */
-public class ZipEntry extends java.util.zip.ZipEntry {
-
-    private int internalAttributes = 0;
-    private long externalAttributes = 0;
-    private Vector extraFields = new Vector();
-
-    /**
-     * Creates a new zip entry with the specified name.
-     *
-     * @since 1.1
-     */
-    public ZipEntry(String name) {
-        super(name);
-    }
-
-    /**
-     * Creates a new zip entry with fields taken from the specified zip entry.
-     *
-     * @since 1.1
-     */
-    public ZipEntry(java.util.zip.ZipEntry entry) throws ZipException {
-        /*
-         * REVISIT: call super(entry) instead of this stuff in Ant2,
-         *          "copy constructor" has not been available in JDK 1.1
-         */
-        super(entry.getName());
-
-        setComment(entry.getComment());
-        setMethod(entry.getMethod());
-        setTime(entry.getTime());
-
-        long size = entry.getSize();
-        if (size > 0) {
-            setSize(size);
-        }
-        long cSize = entry.getCompressedSize();
-        if (cSize > 0) {
-            setComprSize(cSize);
-        }
-        long crc = entry.getCrc();
-        if (crc > 0) {
-            setCrc(crc);
-        }
-        
-        byte[] extra = entry.getExtra();
-        if (extra != null) {
-            setExtraFields(ExtraFieldUtils.parse(extra));
-        } else {
-            // initializes extra data to an empty byte array
-            setExtra();
-        }
-    }
-
-    /**
-     * Creates a new zip entry with fields taken from the specified zip entry.
-     *
-     * @since 1.1
-     */
-    public ZipEntry(ZipEntry entry) throws ZipException {
-        this((java.util.zip.ZipEntry) entry);
-        setInternalAttributes(entry.getInternalAttributes());
-        setExternalAttributes(entry.getExternalAttributes());
-        setExtraFields(entry.getExtraFields());
-    }
-
-    /**
-     * Overwrite clone
-     *
-     * @since 1.1
-     */
-    public Object clone() {
-        ZipEntry e = null;
-        try {
-            e = new ZipEntry((java.util.zip.ZipEntry) super.clone());
-        } catch (Exception ex) {
-            // impossible as extra data is in correct format
-            ex.printStackTrace();
-        }
-        e.setInternalAttributes(getInternalAttributes());
-        e.setExternalAttributes(getExternalAttributes());
-        e.setExtraFields(getExtraFields());
-        return e;
-    }
-
-    /**
-     * Retrieves the internal file attributes.
-     *
-     * @since 1.1
-     */
-    public int getInternalAttributes() {
-        return internalAttributes;
-    }
-
-    /**
-     * Sets the internal file attributes.
-     *
-     * @since 1.1
-     */
-    public void setInternalAttributes(int value) {
-        internalAttributes = value;
-    }
-
-    /**
-     * Retrieves the external file attributes.
-     *
-     * @since 1.1
-     */
-    public long getExternalAttributes() {
-        return externalAttributes;
-    }
-
-    /**
-     * Sets the external file attributes.
-     *
-     * @since 1.1
-     */
-    public void setExternalAttributes(long value) {
-        externalAttributes = value;
-    }
-
-    /**
-     * Replaces all currently attached extra fields with the new array.
-     *
-     * @since 1.1
-     */
-    public void setExtraFields(ZipExtraField[] fields) {
-        extraFields.removeAllElements();
-        for (int i = 0; i < fields.length; i++) {
-            extraFields.addElement(fields[i]);
-        }
-        setExtra();
-    }
-
-    /**
-     * Retrieves extra fields.
-     *
-     * @since 1.1
-     */
-    public ZipExtraField[] getExtraFields() {
-        ZipExtraField[] result = new ZipExtraField[extraFields.size()];
-        extraFields.copyInto(result);
-        return result;
-    }
-
-    /**
-     * Adds an extra fields - replacing an already present extra field
-     * of the same type.
-     *
-     * @since 1.1
-     */
-    public void addExtraField(ZipExtraField ze) {
-        ZipShort type = ze.getHeaderId();
-        boolean done = false;
-        for (int i = 0; !done && i < extraFields.size(); i++) {
-            if (((ZipExtraField) extraFields.elementAt(i)).getHeaderId().equals(type)) {
-                extraFields.setElementAt(ze, i);
-                done = true;
-            }
-        }
-        if (!done) {
-            extraFields.addElement(ze);
-        }
-        setExtra();
-    }
-
-    /**
-     * Remove an extra fields.
-     *
-     * @since 1.1
-     */
-    public void removeExtraField(ZipShort type) {
-        boolean done = false;
-        for (int i = 0; !done && i < extraFields.size(); i++) {
-            if (((ZipExtraField) extraFields.elementAt(i)).getHeaderId().equals(type)) {
-                extraFields.removeElementAt(i);
-                done = true;
-            }
-        }
-        if (!done) {
-            throw new java.util.NoSuchElementException();
-        }
-        setExtra();
-    }
-
-    /**
-     * Throws an Exception if extra data cannot be parsed into extra fields.
-     *
-     * @since 1.1
-     */
-    public void setExtra(byte[] extra) throws RuntimeException {
-        try {
-            setExtraFields(ExtraFieldUtils.parse(extra));
-        } catch (Exception e) {
-            throw new RuntimeException(e.getMessage());
-        }
-    }
-
-    /**
-     * Unfortunately {@link java.util.zip.ZipOutputStream
-     * java.util.zip.ZipOutputStream} seems to access the extra data
-     * directly, so overriding getExtra doesn't help - we need to
-     * modify super's data directly.
-     *
-     * @since 1.1
-     */
-    protected void setExtra() {
-        super.setExtra(ExtraFieldUtils.mergeLocalFileDataData(getExtraFields()));
-    }
-
-    /**
-     * Retrieves the extra data for the local file data.
-     *
-     * @since 1.1
-     */
-    public byte[] getLocalFileDataExtra() {
-        byte[] extra = getExtra();
-        return extra != null ? extra : new byte[0];
-    }
-
-    /**
-     * Retrieves the extra data for the central directory.
-     *
-     * @since 1.1
-     */
-    public byte[] getCentralDirectoryExtra() {
-        return ExtraFieldUtils.mergeCentralDirectoryData(getExtraFields());
-    }
-
-    /**
-     * Helper for JDK 1.1 <-> 1.2 incompatibility.
-     *
-     * @since 1.2
-     */
-    private Long compressedSize = null;
-
-    /**
-     * Make this class work in JDK 1.1 like a 1.2 class.
-     *
-     * <p>This either stores the size for later usage or invokes
-     * setCompressedSize via reflection.</p>
-     *
-     * @since 1.2
-     */
-    public void setComprSize(long size) {
-        if (haveSetCompressedSize()) {
-            performSetCompressedSize(this, size);
-        } else {
-            compressedSize = new Long(size);
-        }
-    }
-
-    /**
-     * Override to make this class work in JDK 1.1 like a 1.2 class.
-     *
-     * @since 1.2
-     */
-    public long getCompressedSize() {
-        if (compressedSize != null) {
-            // has been set explicitly and we are running in a 1.1 VM
-            return compressedSize.longValue();
-        }
-        return super.getCompressedSize();
-    }
-
-    /**
-     * Helper for JDK 1.1
-     *
-     * @since 1.2
-     */
-    private static Method setCompressedSizeMethod = null;
-    /**
-     * Helper for JDK 1.1
-     *
-     * @since 1.2
-     */
-    private static Object lockReflection = new Object();
-    /**
-     * Helper for JDK 1.1
-     *
-     * @since 1.2
-     */
-    private static boolean triedToGetMethod = false;
-
-    /**
-     * Are we running JDK 1.2 or higher?
-     *
-     * @since 1.2
-     */
-    private static boolean haveSetCompressedSize() {
-        checkSCS();
-        return setCompressedSizeMethod != null;
-    }
-
-    /**
-     * Invoke setCompressedSize via reflection.
-     *
-     * @since 1.2
-     */
-    private static void performSetCompressedSize(ZipEntry ze, long size) {
-        Long[] s = {new Long(size)};
-        try {
-            setCompressedSizeMethod.invoke(ze, s);
-        } catch (InvocationTargetException ite) {
-            Throwable nested = ite.getTargetException();
-            throw new RuntimeException("Exception setting the compressed size "
-                                       + "of " + ze + ": "
-                                       + nested.getMessage());
-        } catch (Throwable other) {
-            throw new RuntimeException("Exception setting the compressed size "
-                                       + "of " + ze + ": "
-                                       + other.getMessage());
-        }
-    }
-
-    /**
-     * Try to get a handle to the setCompressedSize method.
-     *
-     * @since 1.2
-     */
-    private static void checkSCS() {
-        if (!triedToGetMethod) {
-            synchronized (lockReflection) {
-                triedToGetMethod = true;
-                try {
-                    setCompressedSizeMethod = 
-                        java.util.zip.ZipEntry.class.getMethod("setCompressedSize", 
-                                                               new Class[] {Long.TYPE});
-                } catch (NoSuchMethodException nse) {
-                }
-            }
-        }
-    }
-
-}
diff --git a/src/main/org/apache/tools/zip/ZipExtraField.java b/src/main/org/apache/tools/zip/ZipExtraField.java
deleted file mode 100644
index 2742c7e..0000000
--- a/src/main/org/apache/tools/zip/ZipExtraField.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.zip;
-
-import java.util.zip.ZipException;
-
-/**
- * General format of extra field data.
- *
- * <p>Extra fields usually appear twice per file, once in the local
- * file data and once in the central directory.  Usually they are the
- * same, but they don't have to be.  {@link
- * java.util.zip.ZipOutputStream java.util.zip.ZipOutputStream} will
- * only use the local file data in both places.</p>
- *
- * @author <a href="stefan.bodewig@epost.de">Stefan Bodewig</a>
- * @version $Revision$
- */
-public interface ZipExtraField {
-
-    /**
-     * The Header-ID.
-     *
-     * @since 1.1
-     */
-    ZipShort getHeaderId();
-
-    /**
-     * Length of the extra field in the local file data - without
-     * Header-ID or length specifier.
-     *
-     * @since 1.1
-     */
-    ZipShort getLocalFileDataLength();
-
-    /**
-     * Length of the extra field in the central directory - without
-     * Header-ID or length specifier.
-     *
-     * @since 1.1
-     */
-    ZipShort getCentralDirectoryLength();
-
-    /**
-     * The actual data to put into local file data - without Header-ID
-     * or length specifier.
-     *
-     * @since 1.1
-     */
-    byte[] getLocalFileDataData();
-
-    /**
-     * The actual data to put central directory - without Header-ID or
-     * length specifier.
-     *
-     * @since 1.1
-     */
-    byte[] getCentralDirectoryData();
-
-    /**
-     * Populate data from this array as if it was in local file data.
-     *
-     * @since 1.1
-     */
-    void parseFromLocalFileData(byte[] data, int offset, int length)
-        throws ZipException;
-}
diff --git a/src/main/org/apache/tools/zip/ZipLong.java b/src/main/org/apache/tools/zip/ZipLong.java
deleted file mode 100644
index de81e55..0000000
--- a/src/main/org/apache/tools/zip/ZipLong.java
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.zip;
-
-/**
- * Utility class that represents a four byte integer with conversion
- * rules for the big endian byte order of ZIP files.
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- * @version $Revision$
- */
-public final class ZipLong implements Cloneable {
-
-    private long value;
-
-    /**
-     * Create instance from a number.
-     *
-     * @since 1.1
-     */
-    public ZipLong(long value) {
-        this.value = value;
-    }
-
-    /**
-     * Create instance from bytes.
-     *
-     * @since 1.1
-     */
-    public ZipLong (byte[] bytes) {
-        this(bytes, 0);
-    }
-
-    /**
-     * Create instance from the four bytes starting at offset.
-     *
-     * @since 1.1
-     */
-    public ZipLong (byte[] bytes, int offset) {
-        value = (bytes[offset + 3] << 24) & 0xFF000000l;
-        value += (bytes[offset + 2] << 16) & 0xFF0000;
-        value += (bytes[offset + 1] << 8) & 0xFF00;
-        value += (bytes[offset] & 0xFF);
-    }
-
-    /**
-     * Get value as two bytes in big endian byte order.
-     *
-     * @since 1.1
-     */
-    public byte[] getBytes() {
-        byte[] result = new byte[4];
-        result[0] = (byte) ((value & 0xFF));
-        result[1] = (byte) ((value & 0xFF00) >> 8);
-        result[2] = (byte) ((value & 0xFF0000) >> 16);
-        result[3] = (byte) ((value & 0xFF000000l) >> 24);
-        return result;
-    }
-
-    /**
-     * Get value as Java int.
-     *
-     * @since 1.1
-     */
-    public long getValue() {
-        return value;
-    }
-
-    /**
-     * Override to make two instances with same value equal.
-     *
-     * @since 1.1
-     */
-    public boolean equals(Object o) {
-        if (o == null || !(o instanceof ZipLong)) {
-            return false;
-        }
-        return value == ((ZipLong) o).getValue();
-    }
-
-    /**
-     * Override to make two instances with same value equal.
-     *
-     * @since 1.1
-     */
-    public int hashCode() {
-        return (int) value;
-    }
-
-}// ZipLong
diff --git a/src/main/org/apache/tools/zip/ZipOutputStream.java b/src/main/org/apache/tools/zip/ZipOutputStream.java
deleted file mode 100644
index 4348c56..0000000
--- a/src/main/org/apache/tools/zip/ZipOutputStream.java
+++ /dev/null
@@ -1,684 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.zip;
-
-import java.io.OutputStream;
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.util.Date;
-import java.util.Hashtable;
-import java.util.Vector;
-import java.util.zip.CRC32;
-import java.util.zip.Deflater;
-import java.util.zip.DeflaterOutputStream;
-import java.util.zip.ZipException;
-
-/**
- * Reimplementation of {@link java.util.zip.ZipOutputStream
- * java.util.zip.ZipOutputStream} that does handle the extended
- * functionality of this package, especially internal/external file
- * attributes and extra fields with different layouts for local file
- * data and central directory entries.
- *
- * <p>This implementation will use a Data Descriptor to store size and
- * CRC information for DEFLATED entries, this means, you don't need to
- * calculate them yourself.  Unfortunately this is not possible for
- * the STORED method, here setting the CRC and uncompressed size
- * information is required before {@link #putNextEntry putNextEntry}
- * will be called.</p>
- *
- * @author <a href="stefan.bodewig@epost.de">Stefan Bodewig</a>
- * @version $Revision$
- */
-public class ZipOutputStream extends DeflaterOutputStream {
-
-    /**
-     * Current entry.
-     *
-     * @since 1.1
-     */
-    private ZipEntry entry;
-
-    /**
-     * The file comment.
-     *
-     * @since 1.1
-     */
-    private String comment = "";
-
-    /**
-     * Compression level for next entry.
-     *
-     * @since 1.1
-     */
-    private int level = Deflater.DEFAULT_COMPRESSION;
-
-    /**
-     * Has the compression level changed when compared to the last
-     * entry?
-     *
-     * @since 1.5
-     */
-    private boolean hasCompressionLevelChanged = false;
-
-    /**
-     * Default compression method for next entry.
-     *
-     * @since 1.1
-     */
-    private int method = DEFLATED;
-
-    /**
-     * List of ZipEntries written so far.
-     *
-     * @since 1.1
-     */
-    private Vector entries = new Vector();
-
-    /**
-     * CRC instance to avoid parsing DEFLATED data twice.
-     *
-     * @since 1.1
-     */
-    private CRC32 crc = new CRC32();
-
-    /**
-     * Count the bytes written to out.
-     *
-     * @since 1.1
-     */
-    private long written = 0;
-
-    /**
-     * Data for current entry started here.
-     *
-     * @since 1.1
-     */
-    private long dataStart = 0;
-
-    /**
-     * Start of central directory.
-     *
-     * @since 1.1
-     */
-    private ZipLong cdOffset = new ZipLong(0);
-
-    /**
-     * Length of central directory.
-     *
-     * @since 1.1
-     */
-    private ZipLong cdLength = new ZipLong(0);
-
-    /**
-     * Helper, a 0 as ZipShort.
-     *
-     * @since 1.1
-     */
-    private static final byte[] ZERO = {0, 0};
-
-    /**
-     * Helper, a 0 as ZipLong.
-     *
-     * @since 1.1
-     */
-    private static final byte[] LZERO = {0, 0, 0, 0};
-
-    /**
-     * Holds the offsets of the LFH starts for each entry
-     *
-     * @since 1.1
-     */
-    private Hashtable offsets = new Hashtable();
-
-    /**
-     * The encoding to use for filenames and the file comment.
-     *
-     * <p>For a list of possible values see <a
-     * href="http://java.sun.com/products/jdk/1.2/docs/guide/internat/encoding.doc.html">http://java.sun.com/products/jdk/1.2/docs/guide/internat/encoding.doc.html</a>.
-     * Defaults to the platform's default character encoding.</p>
-     *
-     * @since 1.3
-     */
-    private String encoding = null;
-
-    /**
-     * Compression method for deflated entries.
-     *
-     * @since 1.1
-     */
-    public static final int DEFLATED = ZipEntry.DEFLATED;
-
-    /**
-     * Compression method for deflated entries.
-     *
-     * @since 1.1
-     */
-    public static final int STORED = ZipEntry.STORED;
-
-    /**
-     * Creates a new ZIP OutputStream filtering the underlying stream.
-     *
-     * @since 1.1
-     */
-    public ZipOutputStream(OutputStream out) {
-        super(out, new Deflater(Deflater.DEFAULT_COMPRESSION, true));
-    }
-
-    /**
-     * The encoding to use for filenames and the file comment.
-     *
-     * <p>For a list of possible values see <a
-     * href="http://java.sun.com/products/jdk/1.2/docs/guide/internat/encoding.doc.html">http://java.sun.com/products/jdk/1.2/docs/guide/internat/encoding.doc.html</a>.
-     * Defaults to the platform's default character encoding.</p>
-     *
-     * @since 1.3
-     */
-    public void setEncoding(String encoding) {
-        this.encoding = encoding;
-    }
-
-    /**
-     * The encoding to use for filenames and the file comment.
-     *
-     * @return null if using the platform's default character encoding.
-     * 
-     * @since 1.3
-     */
-    public String getEncoding() {
-        return encoding;
-    }
-
-    /*
-     * Found out by experiment, that DeflaterOutputStream.close()
-     * will call finish() - so we don't need to override close
-     * ourselves.
-     */
-
-    /**
-     * Finishs writing the contents and closes this as well as the
-     * underlying stream.
-     *
-     * @since 1.1
-     */
-    public void finish() throws IOException {
-        closeEntry();
-        cdOffset = new ZipLong(written);
-        for (int i = 0; i < entries.size(); i++) {
-            writeCentralFileHeader((ZipEntry) entries.elementAt(i));
-        }
-        cdLength = new ZipLong(written - cdOffset.getValue());
-        writeCentralDirectoryEnd();
-        offsets.clear();
-        entries.removeAllElements();
-    }
-
-    /**
-     * Writes all necessary data for this entry.
-     *
-     * @since 1.1
-     */
-    public void closeEntry() throws IOException {
-        if (entry == null) {
-            return;
-        }
-
-        long realCrc = crc.getValue();
-        crc.reset();
-
-        if (entry.getMethod() == DEFLATED) {
-            def.finish();
-            while (!def.finished()) {
-                deflate();
-            }
-
-            entry.setSize(def.getTotalIn());
-            entry.setComprSize(def.getTotalOut());
-            entry.setCrc(realCrc);
-
-            def.reset();
-
-            written += entry.getCompressedSize();
-        } else {
-            if (entry.getCrc() != realCrc) {
-                throw new ZipException("bad CRC checksum for entry "
-                                       + entry.getName() + ": " 
-                                       + Long.toHexString(entry.getCrc())
-                                       + " instead of " 
-                                       + Long.toHexString(realCrc));
-            }
-
-            if (entry.getSize() != written - dataStart) {
-                throw new ZipException("bad size for entry "
-                                       + entry.getName() + ": " 
-                                       + entry.getSize()
-                                       + " instead of " 
-                                       + (written - dataStart));
-            }
-
-        }
-
-        writeDataDescriptor(entry);
-        entry = null;
-   }
-
-    /**
-     * Begin writing next entry.
-     *
-     * @since 1.1
-     */
-    public void putNextEntry(ZipEntry ze) throws IOException {
-        closeEntry();
-
-        entry = ze;
-        entries.addElement(entry);
-
-        if (entry.getMethod() == -1) { // not specified
-            entry.setMethod(method);
-        }
-        
-        if (entry.getTime() == -1) { // not specified
-            entry.setTime(System.currentTimeMillis());
-        }
-
-        if (entry.getMethod() == STORED) {
-            if (entry.getSize() == -1) {
-                throw new ZipException("uncompressed size is required for STORED method");
-            }
-            if (entry.getCrc() == -1) {
-                throw new ZipException("crc checksum is required for STORED method");
-            }
-            entry.setComprSize(entry.getSize());
-        } else if (hasCompressionLevelChanged) {
-            def.setLevel(level);
-            hasCompressionLevelChanged = false;
-        }        
-        writeLocalFileHeader(entry);
-    }
-
-    /**
-     * Set the file comment.
-     *
-     * @since 1.1
-     */
-    public void setComment(String comment) {
-        this.comment = comment;
-    }
-
-    /**
-     * Sets the compression level for subsequent entries.
-     *
-     * <p>Default is Deflater.DEFAULT_COMPRESSION.</p>
-     *
-     * @since 1.1
-     */
-    public void setLevel(int level) {
-        hasCompressionLevelChanged = (this.level != level);
-        this.level = level;
-    }
-
-    /**
-     * Sets the default compression method for subsequent entries.
-     *
-     * <p>Default is DEFLATED.</p>
-     *
-     * @since 1.1
-     */
-    public void setMethod(int method) {
-        this.method = method;
-    }
-
-    /**
-     * Writes bytes to ZIP entry.
-     *
-     * <p>Override is necessary to support STORED entries, as well as
-     * calculationg CRC automatically for DEFLATED entries.</p>
-     */
-    public void write(byte[] b, int offset, int length) throws IOException {
-        if (entry.getMethod() == DEFLATED) {
-            super.write(b, offset, length);
-        } else {
-            out.write(b, offset, length);
-            written += length;
-        }
-        crc.update(b, offset, length);
-    }
-
-    /*
-     * Various ZIP constants
-     */
-    /**
-     * local file header signature
-     *
-     * @since 1.1
-     */
-    protected static final ZipLong LFH_SIG = new ZipLong(0X04034B50L);
-    /**
-     * data descriptor signature
-     *
-     * @since 1.1
-     */
-    protected static final ZipLong DD_SIG = new ZipLong(0X08074B50L);
-    /**
-     * central file header signature
-     *
-     * @since 1.1
-     */
-    protected static final ZipLong CFH_SIG = new ZipLong(0X02014B50L);
-    /**
-     * end of central dir signature
-     *
-     * @since 1.1
-     */
-    protected static final ZipLong EOCD_SIG = new ZipLong(0X06054B50L);
-
-    /**
-     * Writes the local file header entry
-     *
-     * @since 1.1
-     */
-    protected void writeLocalFileHeader(ZipEntry ze) throws IOException {
-        offsets.put(ze, new ZipLong(written));
-
-        out.write(LFH_SIG.getBytes());
-        written += 4;
-
-        // version needed to extract
-        // general purpose bit flag
-        if (ze.getMethod() == DEFLATED) {
-            // requires version 2 as we are going to store length info
-            // in the data descriptor
-            out.write((new ZipShort(20)).getBytes());
-
-            // bit3 set to signal, we use a data descriptor
-            out.write((new ZipShort(8)).getBytes());
-        } else {
-            out.write((new ZipShort(10)).getBytes());
-            out.write(ZERO);
-        }
-        written += 4;
-
-        // compression method
-        out.write((new ZipShort(ze.getMethod())).getBytes());
-        written += 2;
-
-        // last mod. time and date
-        out.write(toDosTime(new Date(ze.getTime())).getBytes());
-        written += 4;
-
-        // CRC
-        // compressed length
-        // uncompressed length
-        if (ze.getMethod() == DEFLATED) {
-            out.write(LZERO);
-            out.write(LZERO);
-            out.write(LZERO);
-        } else {
-            out.write((new ZipLong(ze.getCrc())).getBytes());
-            out.write((new ZipLong(ze.getSize())).getBytes());
-            out.write((new ZipLong(ze.getSize())).getBytes());
-        }
-        written += 12;
-        
-        // file name length
-        byte[] name = getBytes(ze.getName());
-        out.write((new ZipShort(name.length)).getBytes());
-        written += 2;
-        
-        // extra field length
-        byte[] extra = ze.getLocalFileDataExtra();
-        out.write((new ZipShort(extra.length)).getBytes());
-        written += 2;
-
-        // file name
-        out.write(name);
-        written += name.length;
-
-        // extra field
-        out.write(extra);
-        written += extra.length;
-
-        dataStart = written;
-    }
-
-    /**
-     * Writes the data descriptor entry
-     *
-     * @since 1.1
-     */
-    protected void writeDataDescriptor(ZipEntry ze) throws IOException {
-        if (ze.getMethod() != DEFLATED) {
-            return;
-        }
-        out.write(DD_SIG.getBytes());
-        out.write((new ZipLong(entry.getCrc())).getBytes());
-        out.write((new ZipLong(entry.getCompressedSize())).getBytes());
-        out.write((new ZipLong(entry.getSize())).getBytes());
-        written += 16;
-    }
-
-    /**
-     * Writes the central file header entry
-     *
-     * @since 1.1
-     */
-    protected void writeCentralFileHeader(ZipEntry ze) throws IOException {
-        out.write(CFH_SIG.getBytes());
-        written += 4;
-
-        // version made by
-        out.write((new ZipShort(20)).getBytes());
-        written += 2;
-
-        // version needed to extract
-        // general purpose bit flag
-        if (ze.getMethod() == DEFLATED) {
-            // requires version 2 as we are going to store length info
-            // in the data descriptor
-            out.write((new ZipShort(20)).getBytes());
-
-            // bit3 set to signal, we use a data descriptor
-            out.write((new ZipShort(8)).getBytes());
-        } else {
-            out.write((new ZipShort(10)).getBytes());
-            out.write(ZERO);
-        }
-        written += 4;
-
-        // compression method
-        out.write((new ZipShort(ze.getMethod())).getBytes());
-        written += 2;
-
-        // last mod. time and date
-        out.write(toDosTime(new Date(ze.getTime())).getBytes());
-        written += 4;
-
-        // CRC
-        // compressed length
-        // uncompressed length
-        out.write((new ZipLong(ze.getCrc())).getBytes());
-        out.write((new ZipLong(ze.getCompressedSize())).getBytes());
-        out.write((new ZipLong(ze.getSize())).getBytes());
-        written += 12;
-        
-        // file name length
-        byte[] name = getBytes(ze.getName());
-        out.write((new ZipShort(name.length)).getBytes());
-        written += 2;
-        
-        // extra field length
-        byte[] extra = ze.getCentralDirectoryExtra();
-        out.write((new ZipShort(extra.length)).getBytes());
-        written += 2;
-
-        // file comment length
-        String comm = ze.getComment();
-        if (comm == null) {
-            comm = "";
-        }
-        byte[] comment = getBytes(comm);
-        out.write((new ZipShort(comment.length)).getBytes());
-        written += 2;
-        
-        // disk number start
-        out.write(ZERO);
-        written += 2;
-
-        // internal file attributes
-        out.write((new ZipShort(ze.getInternalAttributes())).getBytes());
-        written += 2;
-
-        // external file attributes
-        out.write((new ZipLong(ze.getExternalAttributes())).getBytes());
-        written += 4;
-
-        // relative offset of LFH
-        out.write(((ZipLong) offsets.get(ze)).getBytes());
-        written += 4;
-
-        // file name
-        out.write(name);
-        written += name.length;
-
-        // extra field
-        out.write(extra);
-        written += extra.length;
-
-        // file comment
-        out.write(comment);
-        written += comment.length;
-    }
-
-    /**
-     * Writes the &quot;End of central dir record&quot;
-     *
-     * @since 1.1
-     */
-    protected void writeCentralDirectoryEnd() throws IOException {
-        out.write(EOCD_SIG.getBytes());
-        
-        // disk numbers
-        out.write(ZERO);
-        out.write(ZERO);
-
-        // number of entries
-        byte[] num = (new ZipShort(entries.size())).getBytes();
-        out.write(num);
-        out.write(num);
-
-        // length and location of CD
-        out.write(cdLength.getBytes());
-        out.write(cdOffset.getBytes());
-
-        // ZIP file comment
-        byte[] data = getBytes(comment);
-        out.write((new ZipShort(data.length)).getBytes());
-        out.write(data);
-    }
-
-    /**
-     * Smallest date/time ZIP can handle.
-     *
-     * @since 1.1
-     */
-    private static final ZipLong DOS_TIME_MIN = new ZipLong(0x00002100L);
-
-    /**
-     * Convert a Date object to a DOS date/time field.
-     *
-     * <p>Stolen from InfoZip's <code>fileio.c</code></p>
-     *
-     * @since 1.1
-     */
-    protected static ZipLong toDosTime(Date time) {
-        int year = time.getYear() + 1900;
-        int month = time.getMonth() + 1;
-        if (year < 1980) {
-            return DOS_TIME_MIN;
-        }
-        long value =  ((year - 1980) << 25)
-            |         (month << 21)
-            |         (time.getDate() << 16)
-            |         (time.getHours() << 11)
-            |         (time.getMinutes() << 5)
-            |         (time.getSeconds() >> 1);
-        
-        byte[] result = new byte[4];
-        result[0] = (byte) ((value & 0xFF));
-        result[1] = (byte) ((value & 0xFF00) >> 8);
-        result[2] = (byte) ((value & 0xFF0000) >> 16);
-        result[3] = (byte) ((value & 0xFF000000l) >> 24);
-        return new ZipLong(result);
-    }
-
-    /**
-     * Retrieve the bytes for the given String in the encoding set for
-     * this Stream.
-     *
-     * @since 1.3
-     */
-    protected byte[] getBytes(String name) throws ZipException {
-        if (encoding == null) {
-            return name.getBytes();
-        } else {
-            try {
-                return name.getBytes(encoding);
-            } catch (UnsupportedEncodingException uee) {
-                throw new ZipException(uee.getMessage());
-            }
-        }
-    }
-
-}
diff --git a/src/main/org/apache/tools/zip/ZipShort.java b/src/main/org/apache/tools/zip/ZipShort.java
deleted file mode 100644
index 0ec9582..0000000
--- a/src/main/org/apache/tools/zip/ZipShort.java
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.zip;
-
-/**
- * Utility class that represents a two byte integer with conversion
- * rules for the big endian byte order of ZIP files.
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- * @version $Revision$
- */
-public final class ZipShort implements Cloneable {
-
-    private int value;
-
-    /**
-     * Create instance from a number.
-     *
-     * @since 1.1
-     */
-    public ZipShort (int value) {
-        this.value = value;
-    }
-
-    /**
-     * Create instance from bytes.
-     *
-     * @since 1.1
-     */
-    public ZipShort (byte[] bytes) {
-        this(bytes, 0);
-    }
-
-    /**
-     * Create instance from the two bytes starting at offset.
-     *
-     * @since 1.1
-     */
-    public ZipShort (byte[] bytes, int offset) {
-        value = (bytes[offset + 1] << 8) & 0xFF00;
-        value += (bytes[offset] & 0xFF);
-    }
-
-    /**
-     * Get value as two bytes in big endian byte order.
-     *
-     * @since 1.1
-     */
-    public byte[] getBytes() {
-        byte[] result = new byte[2];
-        result[0] = (byte) (value & 0xFF);
-        result[1] = (byte) ((value & 0xFF00) >> 8);
-        return result;
-    }
-
-    /**
-     * Get value as Java int.
-     *
-     * @since 1.1
-     */
-    public int getValue() {
-        return value;
-    }
-
-    /**
-     * Override to make two instances with same value equal.
-     *
-     * @since 1.1
-     */
-    public boolean equals(Object o) {
-        if (o == null || !(o instanceof ZipShort)) {
-            return false;
-        }
-        return value == ((ZipShort) o).getValue();
-    }
-
-    /**
-     * Override to make two instances with same value equal.
-     *
-     * @since 1.1
-     */
-    public int hashCode() {
-        return value;
-    }
-
-}// ZipShort
diff --git a/src/script/ant b/src/script/ant
deleted file mode 100644
index 3609e81..0000000
--- a/src/script/ant
+++ /dev/null
@@ -1,180 +0,0 @@
-#! /bin/sh
-
-#   Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
-#   reserved.
-
-# load system-wide ant configuration
-if [ -f "/etc/ant.conf" ] ; then 
-  . /etc/ant.conf
-fi
-
-# provide default values for people who don't use RPMs
-if [ -z "$rpm_mode" ] ; then
-  rpm_mode=false;
-fi
-if [ -z "$usejikes" ] ; then
-  usejikes=false;
-fi
-
-# load user ant configuration
-if [ -f "$HOME/.antrc" ] ; then 
-  . $HOME/.antrc
-fi
-
-# OS specific support.  $var _must_ be set to either true or false.
-cygwin=false;
-darwin=false;
-case "`uname`" in
-  CYGWIN*) cygwin=true ;;
-  Darwin*) darwin=true
-           if [ -z "$JAVA_HOME" ] ; then
-             JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Home   
-           fi
-           ;;
-esac
-
-if [ -z "$ANT_HOME" ] ; then
-  # try to find ANT
-  if [ -d /opt/ant ] ; then 
-    ANT_HOME=/opt/ant
-  fi
-
-  if [ -d ${HOME}/opt/ant ] ; then 
-    ANT_HOME=${HOME}/opt/ant
-  fi
-
-  ## resolve links - $0 may be a link to ant's home
-  PRG=$0
-  progname=`basename $0`
-  saveddir=`pwd`
-
-  # need this for relative symlinks
-  cd `dirname $PRG`
-  
-  while [ -h "$PRG" ] ; do
-    ls=`ls -ld "$PRG"`
-    link=`expr "$ls" : '.*-> \(.*\)$'`
-    if expr "$link" : '.*/.*' > /dev/null; then
-	PRG="$link"
-    else
-	PRG="`dirname $PRG`/$link"
-    fi
-  done
-  
-  ANT_HOME=`dirname "$PRG"`/..
-
-  # make it fully qualified
-  ANT_HOME=`cd "$ANT_HOME" && pwd`
-
-  cd $saveddir
-fi
-
-# For Cygwin, ensure paths are in UNIX format before anything is touched
-if $cygwin ; then
-  [ -n "$ANT_HOME" ] &&
-    ANT_HOME=`cygpath --unix "$ANT_HOME"`
-  [ -n "$JAVA_HOME" ] &&
-    JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
-  [ -n "$CLASSPATH" ] &&
-    CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
-fi
-
-if [ -z "$JAVACMD" ] ; then 
-  if [ -n "$JAVA_HOME"  ] ; then
-    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then 
-      # IBM's JDK on AIX uses strange locations for the executables
-      JAVACMD="$JAVA_HOME/jre/sh/java"
-    else
-      JAVACMD="$JAVA_HOME/bin/java"
-    fi
-  else
-    JAVACMD=java
-  fi
-fi
- 
-if [ ! -x "$JAVACMD" ] ; then
-  echo "Error: JAVA_HOME is not defined correctly."
-  echo "  We cannot execute $JAVACMD"
-  exit 1
-fi
-
-if [ -n "$CLASSPATH" ] ; then
-  LOCALCLASSPATH="$CLASSPATH"
-fi
-
-# in rpm_mode get ant/optional/xml parser&api from JAVALIBDIR 
-if $rpm_mode; then
-  JAVALIBDIR=/usr/share/java
-  for i in ant ant-optional jaxp_parser xml_apis 
-  do
-    if [ -z "$LOCALCLASSPATH" ] ; then
-      LOCALCLASSPATH=$JAVALIBDIR/$i.jar
-    else
-      LOCALCLASSPATH="$i.jar":"$LOCALCLASSPATH"
-    fi
-  done
-else
-  # add in the dependency .jar files in non-RPM mode (the default)
-  DIRLIBS="${ANT_HOME}"/lib
-  for i in "${DIRLIBS}"/*.jar
-  do
-    # if the directory is empty, then it will return the input string
-    # this is stupid, so case for it
-    if [ "$i" != "${DIRLIBS}/*.jar" ] ; then
-      if [ -z "$LOCALCLASSPATH" ] ; then
-        LOCALCLASSPATH=$i
-      else
-        LOCALCLASSPATH="$i":"$LOCALCLASSPATH"
-      fi
-    fi
-  done
-fi
-
-if [ -n "$JAVA_HOME" ] ; then
-  if [ -f "$JAVA_HOME/lib/tools.jar" ] ; then
-    LOCALCLASSPATH="$LOCALCLASSPATH:$JAVA_HOME/lib/tools.jar"
-  fi
-
-  if [ -f "$JAVA_HOME/lib/classes.zip" ] ; then
-    LOCALCLASSPATH="$LOCALCLASSPATH:$JAVA_HOME/lib/classes.zip"
-  fi
-
-  # OSX hack to make Ant work with jikes
-  if $darwin ; then
-    OSXHACK="/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Classes"
-    if [ -d ${OSXHACK} ] ; then
-      for i in ${OSXHACK}/*.jar
-      do
-        JIKESPATH=$JIKESPATH:$i
-      done
-    fi
-  fi
-else
-  echo "Warning: JAVA_HOME environment variable is not set."
-  echo "  If build fails because sun.* classes could not be found"
-  echo "  you will need to set the JAVA_HOME environment variable"
-  echo "  to the installation directory of java."
-fi
-
-# supply JIKESPATH to Ant as jikes.class.path
-if [ -n "$JIKESPATH" ] ; then
-  if $cygwin ; then
-    JIKESPATH=`cygpath --path --windows "$JIKESPATH"`
-  fi
-  ANT_OPTS="$ANT_OPTS -Djikes.class.path=$JIKESPATH"
-fi
-
-# Allow Jikes support (off by default)
-if $usejikes; then
-  ANT_OPTS="$ANT_OPTS -Dbuild.compiler=jikes"
-fi
-
-# For Cygwin, switch paths to Windows format before running java
-if $cygwin; then
-  ANT_HOME=`cygpath --path --windows "$ANT_HOME"`
-  JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
-  CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
-  LOCALCLASSPATH=`cygpath --path --windows "$LOCALCLASSPATH"`
-fi
-
-"$JAVACMD" -classpath "$LOCALCLASSPATH" -Dant.home="${ANT_HOME}" $ANT_OPTS org.apache.tools.ant.Main $ANT_ARGS "$@"
diff --git a/src/script/ant.bat b/src/script/ant.bat
deleted file mode 100755
index 8c261ad..0000000
--- a/src/script/ant.bat
+++ /dev/null
@@ -1,114 +0,0 @@
-@echo off
-
-REM   Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
-REM   reserved.
-
-if exist "%HOME%\antrc_pre.bat" call "%HOME%\antrc_pre.bat"
-
-if not "%OS%"=="Windows_NT" goto win9xStart
-:winNTStart
-@setlocal
-
-rem %~dp0 is name of current script under NT
-set DEFAULT_ANT_HOME=%~dp0
-
-rem : operator works similar to make : operator
-set DEFAULT_ANT_HOME=%DEFAULT_ANT_HOME%\..
-
-if "%ANT_HOME%"=="" set ANT_HOME=%DEFAULT_ANT_HOME%
-set DEFAULT_ANT_HOME=
-
-rem Need to check if we are using the 4NT shell...
-if "%@eval[2+2]" == "4" goto setup4NT
-
-rem On NT/2K grab all arguments at once
-set ANT_CMD_LINE_ARGS=%*
-goto doneStart
-
-:setup4NT
-set ANT_CMD_LINE_ARGS=%$
-goto doneStart
-
-:win9xStart
-rem Slurp the command line arguments.  This loop allows for an unlimited number of 
-rem agruments (up to the command line limit, anyway).
-
-set ANT_CMD_LINE_ARGS=
-
-:setupArgs
-if %1a==a goto doneStart
-set ANT_CMD_LINE_ARGS=%ANT_CMD_LINE_ARGS% %1
-shift
-goto setupArgs
-
-:doneStart
-rem This label provides a place for the argument list loop to break out 
-rem and for NT handling to skip to.
-
-rem find ANT_HOME
-if not "%ANT_HOME%"=="" goto checkJava
-
-rem check for ant in Program Files on system drive
-if not exist "%SystemDrive%\Program Files\ant" goto checkSystemDrive
-set ANT_HOME=%SystemDrive%\Program Files\ant
-goto checkJava
-
-:checkSystemDrive
-rem check for ant in root directory of system drive
-if not exist %SystemDrive%\ant\nul goto checkCDrive
-set ANT_HOME=%SystemDrive%\ant
-goto checkJava
-
-:checkCDrive
-rem check for ant in C:\ant for Win9X users
-if not exist C:\ant\nul goto noAntHome
-set ANT_HOME=C:\ant
-goto checkJava
-
-:noAntHome
-echo ANT_HOME is not set and ant could not be located. Please set ANT_HOME.
-goto end
-
-:checkJava
-set _JAVACMD=%JAVACMD%
-set LOCALCLASSPATH=%CLASSPATH%
-for %%i in ("%ANT_HOME%\lib\*.jar") do call "%ANT_HOME%\bin\lcp.bat" %%i
-
-if "%JAVA_HOME%" == "" goto noJavaHome
-if "%_JAVACMD%" == "" set _JAVACMD=%JAVA_HOME%\bin\java
-if not exist "%_JAVACMD%.exe" echo Error: "%_JAVACMD%.exe" not found - check JAVA_HOME && goto end
-if exist "%JAVA_HOME%\lib\tools.jar" call "%ANT_HOME%\bin\lcp.bat" %JAVA_HOME%\lib\tools.jar
-if exist "%JAVA_HOME%\lib\classes.zip" call "%ANT_HOME%\bin\lcp.bat" %JAVA_HOME%\lib\classes.zip
-goto checkJikes
-
-:noJavaHome
-if "%_JAVACMD%" == "" set _JAVACMD=java
-echo.
-echo Warning: JAVA_HOME environment variable is not set.
-echo   If build fails because sun.* classes could not be found
-echo   you will need to set the JAVA_HOME environment variable
-echo   to the installation directory of java.
-echo.
-
-:checkJikes
-if not "%JIKESPATH%" == "" goto runAntWithJikes
-
-:runAnt
-"%_JAVACMD%" -classpath "%LOCALCLASSPATH%" -Dant.home="%ANT_HOME%" %ANT_OPTS% org.apache.tools.ant.Main %ANT_ARGS% %ANT_CMD_LINE_ARGS%
-goto end
-
-:runAntWithJikes
-"%_JAVACMD%" -classpath "%LOCALCLASSPATH%" -Dant.home="%ANT_HOME%" -Djikes.class.path="%JIKESPATH%" %ANT_OPTS% org.apache.tools.ant.Main %ANT_ARGS% %ANT_CMD_LINE_ARGS%
-
-:end
-set LOCALCLASSPATH=
-set _JAVACMD=
-set ANT_CMD_LINE_ARGS=
-
-if not "%OS%"=="Windows_NT" goto mainEnd
-:winNTend
-@endlocal
-
-:mainEnd
-if exist "%HOME%\antrc_post.bat" call "%HOME%\antrc_post.bat"
-
diff --git a/src/script/antRun b/src/script/antRun
deleted file mode 100644
index cf9272e..0000000
--- a/src/script/antRun
+++ /dev/null
@@ -1,12 +0,0 @@
-#! /bin/sh
-
-#   Copyright (c) 2001 The Apache Software Foundation.  All rights
-#   reserved.
-
-# Args: DIR command
-cd "$1"
-CMD="$2"
-shift
-shift
-
-exec $CMD "$@"
diff --git a/src/script/antRun.bat b/src/script/antRun.bat
deleted file mode 100755
index 6ecbe38..0000000
--- a/src/script/antRun.bat
+++ /dev/null
@@ -1,23 +0,0 @@
-@echo off
-
-REM   Copyright (c) 2001 The Apache Software Foundation.  All rights
-REM   reserved.
-
-rem Change drive and directory to %1 (Win9X only for NT/2K use "cd /d")
-cd %1
-%1\
-set ANT_RUN_CMD=%2
-shift
-shift
-
-set PARAMS=
-:loop
-if ""%1 == "" goto runCommand
-set PARAMS=%PARAMS% %1
-shift
-goto loop
-
-:runCommand
-rem echo %ANT_RUN_CMD% %PARAMS%
-%ANT_RUN_CMD% %PARAMS%
-
diff --git a/src/script/antRun.pl b/src/script/antRun.pl
deleted file mode 100644
index 649d9e5..0000000
--- a/src/script/antRun.pl
+++ /dev/null
@@ -1,51 +0,0 @@
-#!/usr/bin/perl
-#######################################################################
-#
-# antRun.pl
-#
-# wrapper script for invoking commands on a platform with Perl installed
-# this is akin to antRun.bat, and antRun the SH script 
-#
-# created:         2001-10-18
-# last modified:   2001-11-13
-# author:          Jeff Tulley jtulley@novell.com 
-#######################################################################
-#be fussy about variables
-use strict;
-
-#turn warnings on during dev; generates a few spurious uninitialised var access warnings
-#use warnings;
-
-#and set $debug to 1 to turn on trace info (currently unused)
-my $debug=1;
-
-#######################################################################
-# change drive and directory to "%1"
-my $ANT_RUN_CMD = @ARGV[0];
-
-# assign current run command to "%2"
-chdir (@ARGV[0]) || die "Can't cd to $ARGV[0]: $!\n";
-if ($^O eq "NetWare") {
-    # There is a bug in Perl 5 on NetWare, where chdir does not
-    # do anything.  On NetWare, the following path-prefixed form should 
-    # always work. (afaict)
-    $ANT_RUN_CMD .= "/".@ARGV[1];
-}
-else {
-    $ANT_RUN_CMD = @ARGV[1];
-}
-
-# dispose of the first two arguments, leaving only the command's args.
-shift;
-shift;
-
-# run the command
-my $returnValue = system $ANT_RUN_CMD, @ARGV;
-if ($returnValue eq 0) {
-    exit 0;
-}
-else {
-    # only 0 and 1 are widely recognized as exit values
-    # so change the exit value to 1
-    exit 1;
-}
diff --git a/src/script/complete-ant-cmd.pl b/src/script/complete-ant-cmd.pl
deleted file mode 100644
index 618056b..0000000
--- a/src/script/complete-ant-cmd.pl
+++ /dev/null
@@ -1,102 +0,0 @@
-#!/usr/bin/perl
-#
-#   Copyright (c) 2001 The Apache Software Foundation.  All rights
-#   reserved.
-#
-# A script to allow Bash or Z-Shell to complete an Ant command-line.  
-#
-# To install for Bash 2.0 or better, add the following to ~/.bashrc:
-# 
-#     $ complete -C complete-ant-cmd ant build.sh
-#
-# To install for Z-Shell 2.5 or better, add the following to ~/.zshrc:
-#
-#     function ant_complete () {
-#         local args_line args
-#         read -l args_line
-#         set -A args $args_line
-#         set -A reply $(COMP_LINE=$args_line complete-ant-cmd ${args[1]} $1)
-#     }
-#     compctl -K ant_complete ant build.sh
-#     
-# @author Mike Williams <mikew@cortexebusiness.com.au>
-
-my $cmdLine = $ENV{'COMP_LINE'};
-my $antCmd = $ARGV[0];
-my $word = $ARGV[1];
-
-my @completions;
-if ($word =~ /^-/) {
-    list( restrict( $word, getArguments() ));
-} elsif ($cmdLine =~ /-(f|buildfile)\s+\S*$/) {
-    list( getBuildFiles($word) );
-} else {
-    list( restrict( $word, getTargets() ));
-}
-
-exit(0);
-
-sub list {
-    for (@_) {
-        print "$_\n";
-    }
-}
-
-sub restrict {
-    my ($word, @completions) = @_;
-    grep( /^\Q$word\E/, @completions );
-}
-
-sub getArguments {
-    qw(-buildfile -debug -emacs -f -find -help -listener -logfile 
-       -logger -projecthelp -quiet -verbose -version); 
-}
-
-
-sub getBuildFiles {
-    my ($word) = @_;
-    grep( /\.xml$/, glob( "$word*" ));
-}
-
-sub getTargets {
-
-    # Look for build-file
-    my $buildFile = 'build.xml';
-    if ($cmdLine =~ /-(f|buildfile)\s+(\S+)/) {
-        $buildFile = $2;
-    }
-    return () unless (-f $buildFile);
-
-    # Run "ant -projecthelp" to list targets.  Keep a cache of results in a
-    # cache-file.
-    my $cacheFile = $buildFile;
-    $cacheFile =~ s|(.*/)?(.*)|${1}.ant-targets-${2}|;
-    if ((!-e $cacheFile) || (-M $buildFile) < (-M $cacheFile)) {
-        open( CACHE, '>'.$cacheFile ) || die "can\'t write $cacheFile: $!\n";
-        open( HELP, "$antCmd -projecthelp -f '$buildFile'|" ) || return(); 
-        my %targets;
-        while( <HELP> ) {
-            if (/^\s+(\S+)/) {
-                $targets{$1}++;
-            }
-        }
-        my @targets = sort keys %targets;
-        for (@targets) { print CACHE "$_\n"; }
-        return @targets;
-    }
-    
-    # Read the target-cache
-    open( CACHE, $cacheFile ) || die "can\'t read $cacheFile: $!\n";
-    my @targets;
-    while (<CACHE>) {
-        chop;
-        s/\r$//;  # for Cygwin
-        push( @targets, $_ );
-    }
-    close( CACHE );
-    @targets;
-
-}
-
-
-
diff --git a/src/script/lcp.bat b/src/script/lcp.bat
deleted file mode 100755
index 982b117..0000000
--- a/src/script/lcp.bat
+++ /dev/null
@@ -1,12 +0,0 @@
-REM   Copyright (c) 2001 The Apache Software Foundation.  All rights
-REM   reserved.
-
-set _CLASSPATHCOMPONENT=%1
-:argCheck
-if %2a==a goto gotAllArgs
-shift
-set _CLASSPATHCOMPONENT=%_CLASSPATHCOMPONENT% %1
-goto argCheck
-:gotAllArgs
-set LOCALCLASSPATH=%_CLASSPATHCOMPONENT%;%LOCALCLASSPATH%
-
diff --git a/src/script/runant.pl b/src/script/runant.pl
deleted file mode 100644
index f4e5067..0000000
--- a/src/script/runant.pl
+++ /dev/null
@@ -1,137 +0,0 @@
-#!/usr/bin/perl
-#
-#   Copyright (c) 2001 The Apache Software Foundation.  All rights
-#   reserved.
-#
-#######################################################################
-#
-# runant.pl
-#
-# wrapper script for invoking ant in a platform with Perl installed
-# this may include cgi-bin invocation, which is considered somewhat daft.
-# (slo: that should be a separate file which can be derived from this
-# and returns the XML formatted output)
-#
-# the code is not totally portable due to classpath and directory splitting
-# issues. oops. (NB, use File::Spec::Functions  will help and the code is
-# structured for the catfile() call, but because of perl version funnies
-# the code is not included. 
-#
-# created:         2000-8-24
-# last modified:   2000-8-24
-# author:          Steve Loughran steve_l@sourceforge.net
-#######################################################################
-#
-# Assumptions:
-#
-# - the "java" executable/script is on the command path
-# - ANT_HOME has been set
-# - target platform uses ":" as classpath separator or perl indicates it is dos/win32
-# - target platform uses "/" as directory separator.
-
-#be fussy about variables
-use strict;
-
-#platform specifics (disabled)
-#use File::Spec::Functions;
-
-#turn warnings on during dev; generates a few spurious uninitialised var access warnings
-#use warnings;
-
-#and set $debug to 1 to turn on trace info
-my $debug=0;
-
-#######################################################################
-#
-# check to make sure environment is setup
-#
-
-my $HOME = $ENV{ANT_HOME};
-if ($HOME eq "")
-        {
-    die "\n\nANT_HOME *MUST* be set!\n\n";
-        }
-
-my $JAVACMD = $ENV{JAVACMD};
-$JAVACMD = "java" if $JAVACMD eq "";
-
-#ISSUE: what java wants to split up classpath varies from platform to platform 
-#and perl is not too hot at hinting which box it is on.
-#here I assume ":" 'cept on win32 and dos. Add extra tests here as needed.
-my $s=":";
-if(($^O eq "MSWin32") || ($^O eq "dos") || ($^O eq "cygwin"))
-        {
-        $s=";";
-        }
-
-#build up standard classpath
-my $localpath=$ENV{CLASSPATH};
-if ($localpath eq "")
-        {
-        print "warning: no initial classpath\n" if ($debug);
-        $localpath="";
-        }
-
-#add jar files. I am sure there is a perl one liner to do this.
-my $jarpattern="$HOME/lib/*.jar";
-my @jarfiles =glob($jarpattern);
-print "jarfiles=@jarfiles\n" if ($debug);
-my $jar;
-foreach $jar (@jarfiles )
-        {
-        $localpath.="$s$jar";
-        }
-
-#if Java home is defined, look for tools.jar & classes.zip and add to classpath
-my $JAVA_HOME = $ENV{JAVA_HOME};
-if ($JAVA_HOME ne "")
-        {
-        my $tools="$JAVA_HOME/lib/tools.jar";
-        if (-e "$tools")
-                {
-                $localpath .= "$s$tools";
-                }
-        my $classes="$JAVA_HOME/lib/classes.zip";
-        if (-e $classes)
-                {
-                $localpath .= "$s$classes";
-                }
-        }
-else
-        {
-    print "\n\nWarning: JAVA_HOME environment variable is not set.\n".
-                "If the build fails because sun.* classes could not be found\n".
-                "you will need to set the JAVA_HOME environment variable\n".
-                "to the installation directory of java\n";
-        }
-
-#set JVM options and Ant arguments, if any
-my @ANT_OPTS=split(" ", $ENV{ANT_OPTS});
-my @ANT_ARGS=split(" ", $ENV{ANT_ARGS});
-
-#jikes
-if($ENV{JIKESPATH} ne "")
-        {
-        push @ANT_OPTS, "-Djikes.class.path=$ENV{JIKESPATH}";
-        }
-
-#construct arguments to java
-my @ARGS;
-push @ARGS, "-classpath", "$localpath", "-Dant.home=$HOME";
-push @ARGS, @ANT_OPTS;
-push @ARGS, "org.apache.tools.ant.Main", @ANT_ARGS;
-push @ARGS, @ARGV;
-
-print "\n $JAVACMD @ARGS\n\n" if ($debug);
-
-my $returnValue = system $JAVACMD, @ARGS;
-if ($returnValue eq 0)
-        {
-        exit 0;
-        }
-else
-        {
-        # only 0 and 1 are widely recognized as exit values
-        # so change the exit value to 1
-        exit 1;
-        }
diff --git a/src/script/runant.py b/src/script/runant.py
deleted file mode 100644
index 45150fd..0000000
--- a/src/script/runant.py
+++ /dev/null
@@ -1,99 +0,0 @@
-#!/usr/bin/python
-"""
-
- runant.py
-
-	This script is a translation of the runant.pl written by Steve Loughran.
-	It runs ant with/out arguments, it should be quite portable (thanks to
-	the python os library)
-	This script has been tested with Python2.0/Win2K
-
-        Copyright (c) 2001 The Apache Software Foundation.  All rights
-        reserved.
-
- created:         2001-04-11
- author:          Pierre Dittgen pierre.dittgen@criltelecom.com
-
- Assumptions:
-
- - the "java" executable/script is on the command path
- - ANT_HOME has been set
-"""
-import os, os.path, string, sys
-
-# Change it to 1 to get extra debug information
-debug = 0
-
-#######################################################################
-#
-# check to make sure environment is setup
-#
-if not os.environ.has_key('ANT_HOME'):
-	print '\n\nANT_HOME *MUST* be set!\n\n'
-	sys.exit(1)
-else:
-	ANT_HOME = os.environ['ANT_HOME']
-
-if not os.environ.has_key('JAVACMD'):
-	JAVACMD = 'java'
-else:
-	JAVACMD = os.environ['JAVACMD']
-
-# Sets the separator char for CLASSPATH
-SEPARATOR = ':'
-if os.name == 'dos' or os.name == 'nt':
-	SEPARATOR = ';'
-
-# Build up standard classpath
-localpath = ''
-if os.environ.has_key('CLASSPATH'):
-	localpath = os.environ['CLASSPATH']
-else:
-	if debug:
-		print 'Warning: no initial classpath\n'
-
-# Add jar files
-LIBDIR = os.path.join(ANT_HOME, 'lib')
-jarfiles = []
-for file in os.listdir(LIBDIR):
-	if file[-4:] == '.jar':
-		jarfiles.append(os.path.join(LIBDIR,file))
-if debug:
-	print 'Jar files:'
-	for jar in jarfiles:
-		print jar
-localpath = localpath + SEPARATOR + string.join(jarfiles, SEPARATOR)
-
-# If JAVA_HOME is defined, look for tools.jar & classes.zip
-# and add to classpath
-if os.environ.has_key('JAVA_HOME') and os.environ['JAVA_HOME'] != '':
-	JAVA_HOME = os.environ['JAVA_HOME']
-	TOOLS = os.path.join(JAVA_HOME, os.path.join('lib', 'tools.jar'))
-	if os.path.exists(TOOLS):
-		localpath = localpath + SEPARATOR + TOOLS
-	CLASSES = os.path.join(JAVA_HOME, os.path.join('lib', 'classes.zip'))
-	if os.path.exists(CLASSES):
-		localpath = localpath + SEPARATOR + CLASSES
-else:
-	print '\n\nWarning: JAVA_HOME environment variable is not set.\n', \
-		'If the build fails because sun.* classes could not be found\n', \
-		'you will need to set the JAVA_HOME environment variable\n', \
-		'to the installation directory of java\n'
-
-# Jikes
-ANT_OPTS = []
-if os.environ.has_key('ANT_OPTS'):
-	ANT_OPTS = string.split(os.environ['ANT_OPTS'])
-if os.environ.has_key('JIKESPATH'):
-	ANT_OPTS.append('-Djikes.class.path=' + os.environ['JIKESPATH'])
-
-# Builds the commandline
-cmdline = '%s -classpath %s -Dant.home=%s %s org.apache.tools.ant.Main %s' \
-	 % (JAVACMD, localpath, ANT_HOME, string.join(ANT_OPTS,' '), \
-	 	string.join(sys.argv[1:], ' '))
-
-if debug:
-	print '\n%s\n\n' % (cmdline)
-
-# Run the biniou!
-os.system(cmdline)
diff --git a/src/testcases/org/apache/tools/ant/BuildFileTest.java b/src/testcases/org/apache/tools/ant/BuildFileTest.java
deleted file mode 100644
index 2d1b833..0000000
--- a/src/testcases/org/apache/tools/ant/BuildFileTest.java
+++ /dev/null
@@ -1,466 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant;
-
-import junit.framework.*;
-import org.apache.tools.ant.*;
-import java.io.*;
-import java.net.URL;
-
-/**
- * A BuildFileTest is a TestCase which executes targets from an Ant buildfile 
- * for testing.
- * 
- * This class provides a number of utility methods for particular build file 
- * tests which extend this class. 
- * 
- * @author Nico Seessle <nico@seessle.de>
- * @author Conor MacNeill
- */
-public abstract class BuildFileTest extends TestCase { 
-    
-    protected Project project;
-    
-    private StringBuffer logBuffer;
-    private StringBuffer fullLogBuffer;
-    private StringBuffer outBuffer;
-    private StringBuffer errBuffer;
-    private BuildException buildException;
-    
-    /**
-     *  Constructor for the BuildFileTest object
-     *
-     *@param  name string to pass up to TestCase constructor
-     */    
-    public BuildFileTest(String name) {
-        super(name);
-    }
-    
-    /**
-     *  run a target, expect for any build exception 
-     *
-     *@param  target target to run
-     *@param  cause  information string to reader of report
-     */    
-    protected void expectBuildException(String target, String cause) { 
-        expectSpecificBuildException(target, cause, null);
-    }
-
-    /**
-     * Assert that only the given message has been logged with a
-     * priority &gt;= INFO when running the given target.
-     */
-    protected void expectLog(String target, String log) { 
-        executeTarget(target);
-        String realLog = getLog();
-        assertEquals(log, realLog);
-    }
-
-    /**
-     * Assert that the given message has been logged with a priority
-     * &gt;= INFO when running the given target.
-     */
-    protected void expectLogContaining(String target, String log) { 
-        executeTarget(target);
-        String realLog = getLog();
-        assertTrue("expecting log to contain \""+log+"\" log was \""
-                   + realLog + "\"", 
-                   realLog.indexOf(log) >= 0);
-    }
-
-    /**
-     *  Gets the log the BuildFileTest object.
-     *  only valid if configureProject() has
-     *  been called.
-     * @pre logBuffer!=null
-     * @return    The log value
-     */    
-    protected String getLog() { 
-        return logBuffer.toString();
-    }
-
-    /**
-     * Assert that the given message has been logged with a priority
-     * &gt;= DEBUG when running the given target.
-     */
-    protected void expectDebuglog(String target, String log) { 
-        executeTarget(target);
-        String realLog = getFullLog();
-        assertEquals(log, realLog);
-    }
-
-    /**
-     *  Gets the log the BuildFileTest object.
-     *  only valid if configureProject() has
-     *  been called.
-     * @pre fullLogBuffer!=null
-     * @return    The log value
-     */
-    protected String getFullLog() { 
-        return fullLogBuffer.toString();
-    }
-
-    /**
-     *  execute the target, verify output matches expectations
-     *
-     *@param  target  target to execute
-     *@param  output  output to look for
-     */
-    
-    protected void expectOutput(String target, String output) { 
-        executeTarget(target);
-        String realOutput = getOutput();
-        assertEquals(output, realOutput);
-    }
-
-    /**
-     *  execute the target, verify output matches expectations
-     *  and that we got the named error at the end
-     *@param  target  target to execute
-     *@param  output  output to look for
-     *@param  error   Description of Parameter
-     */
-     
-    protected void expectOutputAndError(String target, String output, String error) { 
-        executeTarget(target);
-        String realOutput = getOutput();
-        assertEquals(output, realOutput);
-        String realError = getError();
-        assertEquals(error, realError);
-    }
-
-    protected String getOutput() {
-        return cleanBuffer(outBuffer);
-    }
-     
-    protected String getError() {
-        return cleanBuffer(errBuffer);
-    }
-        
-    protected BuildException getBuildException() {
-        return buildException;
-    }
-
-    private String cleanBuffer(StringBuffer buffer) {
-        StringBuffer cleanedBuffer = new StringBuffer();
-        boolean cr = false;
-        for (int i = 0; i < buffer.length(); i++) { 
-            char ch = buffer.charAt(i);
-            if (ch == '\r') {
-                cr = true;
-                continue;
-            }
-
-            if (!cr) { 
-                cleanedBuffer.append(ch);
-            } else { 
-                if (ch == '\n') {
-                    cleanedBuffer.append(ch);
-                } else {
-                    cleanedBuffer.append('\r').append(ch);
-                }
-            }
-        }
-        return cleanedBuffer.toString();
-    }
-    
-    /**
-     *  set up to run the named project
-     *
-     * @param  filename name of project file to run
-     */    
-    protected void configureProject(String filename) { 
-        logBuffer = new StringBuffer();
-        fullLogBuffer = new StringBuffer();
-        project = new Project();
-        project.init();
-        project.setUserProperty( "ant.file" , new File(filename).getAbsolutePath() );
-        project.addBuildListener(new AntTestListener());
-        ProjectHelper.configureProject(project, new File(filename));
-    }
-    
-    /**
-     *  execute a target we have set up
-     * @pre configureProject has been called
-     * @param  targetName  target to run
-     */    
-    protected void executeTarget(String targetName) { 
-        PrintStream sysOut = System.out;
-        PrintStream sysErr = System.err;
-        try { 
-            sysOut.flush();
-            sysErr.flush();
-            outBuffer = new StringBuffer();
-            PrintStream out = new PrintStream(new AntOutputStream());
-            System.setOut(out);
-            errBuffer = new StringBuffer();
-            PrintStream err = new PrintStream(new AntOutputStream());
-            System.setErr(err);
-            logBuffer = new StringBuffer();
-            fullLogBuffer = new StringBuffer();
-            buildException = null;
-            project.executeTarget(targetName);
-        } finally { 
-            System.setOut(sysOut);
-            System.setErr(sysErr);
-        }
-        
-    }
-    
-    /**
-     * Get the project which has been configured for a test.
-     *
-     * @return the Project instance for this test.
-     */
-    protected Project getProject() {
-        return project;
-    }
-
-    /**
-     * get the directory of the project
-     * @return the base dir of the project
-     */
-    protected File getProjectDir() {
-        return project.getBaseDir();
-    }
-
-    /**
-     *  run a target, wait for a build exception 
-     *
-     *@param  target target to run
-     *@param  cause  information string to reader of report
-     *@param  msg    the message value of the build exception we are waiting for
-              set to null for any build exception to be valid
-     */    
-    protected void expectSpecificBuildException(String target, String cause, String msg) { 
-        try {
-            executeTarget(target);
-        } catch (org.apache.tools.ant.BuildException ex) {
-            buildException = ex;
-            if ((null != msg) && (!ex.getMessage().equals(msg))) {
-                fail("Should throw BuildException because '" + cause
-                        + "' with message '" + msg
-                        + "' (actual message '" + ex.getMessage() + "' instead)");
-            }
-            return;
-        }
-        fail("Should throw BuildException because: " + cause);
-    }
-    
-    /**
-     *  run a target, expect an exception string
-     *  containing the substring we look for (case sensitive match)
-     *
-     *@param  target target to run
-     *@param  cause  information string to reader of report
-     *@param  msg    the message value of the build exception we are waiting for
-     *@param  contains  substring of the build exception to look for
-     */
-    protected void expectBuildExceptionContaining(String target, String cause, String contains) { 
-        try {
-            executeTarget(target);
-        } catch (org.apache.tools.ant.BuildException ex) {
-            buildException = ex;
-            if ((null != contains) && (ex.getMessage().indexOf(contains) == -1)) {
-                fail("Should throw BuildException because '" + cause + "' with message containing '" + contains + "' (actual message '" + ex.getMessage() + "' instead)");
-            }
-            return;
-        }
-        fail("Should throw BuildException because: " + cause);
-    }
-    
-
-    /**
-     * call a target, verify property is as expected
-     *
-     * @param target build file target
-     * @param property property name
-     * @param value expected value
-     */
-
-    protected void expectPropertySet(String target, String property, String value) {
-        executeTarget(target);
-        assertPropertyEquals(property, value);
-    }
-
-    /**
-     * assert that a property equals a value; comparison is case sensitive.
-     * @param property property name
-     * @param value expected value
-     */
-    protected void assertPropertyEquals(String property, String value) {
-        String result = project.getProperty(property);
-        assertEquals("property " + property,value,result);
-    }
-
-
-    /**
-     * call a target, verify named property is "true".
-     *
-     * @param target build file target
-     * @param property property name
-     */
-    protected void expectPropertySet(String target, String property) {
-        expectPropertySet(target, property, "true");
-    }
-
-
-    /**
-     * call a target, verify property is null
-     * @param target build file target
-     * @param property property name
-     */
-    protected void expectPropertyUnset(String target, String property) {
-        expectPropertySet(target, property, null);
-    }
-
-    /**
-     * Retrieve a resource from the caller classloader to avoid
-     * assuming a vm working directory. The resource path must be
-     * relative to the package name or absolute from the root path.
-     * @param resource the resource to retrieve its url.
-     * @throws AssertionFailureException if resource is not found.
-     */
-    protected URL getResource(String resource){
-        URL url = getClass().getResource(resource);
-        assertNotNull("Could not find resource :" + resource, url);
-        return url;
-    }
-
-    /**
-     * an output stream which saves stuff to our buffer.
-     */
-    private class AntOutputStream extends java.io.OutputStream {
-        public void write(int b) { 
-            outBuffer.append((char)b);
-        }
-    }
-
-    /**
-     * our own personal build listener
-     */
-    private class AntTestListener implements BuildListener {
-        /**
-         *  Fired before any targets are started.
-         */
-        public void buildStarted(BuildEvent event) {
-        }
-
-        /**
-         *  Fired after the last target has finished. This event
-         *  will still be thrown if an error occured during the build.
-         *
-         *  @see BuildEvent#getException()
-         */
-        public void buildFinished(BuildEvent event) {
-        }
-
-        /**
-         *  Fired when a target is started.
-         *
-         *  @see BuildEvent#getTarget()
-         */
-        public void targetStarted(BuildEvent event) {
-            //System.out.println("targetStarted " + event.getTarget().getName());
-        }
-
-        /**
-         *  Fired when a target has finished. This event will
-         *  still be thrown if an error occured during the build.
-         *
-         *  @see BuildEvent#getException()
-         */
-        public void targetFinished(BuildEvent event) {
-            //System.out.println("targetFinished " + event.getTarget().getName());
-        }
-
-        /**
-         *  Fired when a task is started.
-         *
-         *  @see BuildEvent#getTask()
-         */
-        public void taskStarted(BuildEvent event) {
-            //System.out.println("taskStarted " + event.getTask().getTaskName());
-        }
-
-        /**
-         *  Fired when a task has finished. This event will still
-         *  be throw if an error occured during the build.
-         *
-         *  @see BuildEvent#getException()
-         */
-        public void taskFinished(BuildEvent event) {
-            //System.out.println("taskFinished " + event.getTask().getTaskName());
-        }
-
-        /**
-         *  Fired whenever a message is logged.
-         *
-         *  @see BuildEvent#getMessage()
-         *  @see BuildEvent#getPriority()
-         */
-        public void messageLogged(BuildEvent event) {
-            if (event.getPriority() == Project.MSG_INFO ||
-                event.getPriority() == Project.MSG_WARN ||
-                event.getPriority() == Project.MSG_ERR) {
-                logBuffer.append(event.getMessage());
-            }
-            fullLogBuffer.append(event.getMessage());
-            
-        }
-    }
-
-
-}
diff --git a/src/testcases/org/apache/tools/ant/DirectoryScannerTest.java b/src/testcases/org/apache/tools/ant/DirectoryScannerTest.java
deleted file mode 100644
index 024e9a0..0000000
--- a/src/testcases/org/apache/tools/ant/DirectoryScannerTest.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant;
-
-import junit.framework.TestCase;
-import junit.framework.AssertionFailedError;
-import java.io.File;
-
-/**
- * JUnit 3 testcases for org.apache.tools.ant.DirectoryScanner
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> 
- */
-public class DirectoryScannerTest extends TestCase {
-
-    public DirectoryScannerTest(String name) {super(name);}
-
-    /**
-     * Test inspired by Bug#1415.
-     */
-    public void testChildrenOfExcludedDirectory() {
-        File dir = new File("src/main/org/apache/tools");
-        DirectoryScanner ds = new DirectoryScanner();
-        ds.setBasedir(dir);
-        ds.setExcludes(new String[] {"ant/**"});
-        ds.scan();
-
-        boolean haveZipPackage = false;
-        boolean haveTaskdefsPackage = false;
-        String[] included = ds.getIncludedDirectories();
-        for (int i=0; i<included.length; i++) {
-            if (included[i].equals("zip")) {
-                haveZipPackage = true;
-            } else if (included[i].equals("ant"+File.separator+"taskdefs")) {
-                haveTaskdefsPackage = true;
-            }
-        }
-        assertTrue("(1) zip package included", haveZipPackage);
-        assertTrue("(1) taskdefs package not included", !haveTaskdefsPackage);
-
-        ds = new DirectoryScanner();
-        ds.setBasedir(dir);
-        ds.setExcludes(new String[] {"ant"});
-        ds.scan();
-        haveZipPackage = false;
-        included = ds.getIncludedDirectories();
-        for (int i=0; i<included.length; i++) {
-            if (included[i].equals("zip")) {
-                haveZipPackage = true;
-            } else if (included[i].equals("ant"+File.separator+"taskdefs")) {
-                haveTaskdefsPackage = true;
-            }
-        }
-        assertTrue("(2) zip package included", haveZipPackage);
-        assertTrue("(2) taskdefs package included", haveTaskdefsPackage);
-
-    }
-
-}
diff --git a/src/testcases/org/apache/tools/ant/DummyTaskAbstract.java b/src/testcases/org/apache/tools/ant/DummyTaskAbstract.java
deleted file mode 100644
index 4316d69..0000000
--- a/src/testcases/org/apache/tools/ant/DummyTaskAbstract.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant;
-
-import org.apache.tools.ant.Task;
-
-public abstract class DummyTaskAbstract extends Task {
-
-    public DummyTaskAbstract() {
-    }
-
-    public void execute() {
-    }
-    
-    public abstract void abstractDummy();
-}
diff --git a/src/testcases/org/apache/tools/ant/DummyTaskInterface.java b/src/testcases/org/apache/tools/ant/DummyTaskInterface.java
deleted file mode 100644
index 6e1142d..0000000
--- a/src/testcases/org/apache/tools/ant/DummyTaskInterface.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant;
-
-public interface DummyTaskInterface {
-
-    void execute();
-
-}
diff --git a/src/testcases/org/apache/tools/ant/DummyTaskOk.java b/src/testcases/org/apache/tools/ant/DummyTaskOk.java
deleted file mode 100644
index a7e5de3..0000000
--- a/src/testcases/org/apache/tools/ant/DummyTaskOk.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant;
-
-import org.apache.tools.ant.Task;
-
-public class DummyTaskOk extends Task {
-
-    public DummyTaskOk() {
-    }
-
-    public void execute() {
-    }
-    
-}
diff --git a/src/testcases/org/apache/tools/ant/DummyTaskOkNonTask.java b/src/testcases/org/apache/tools/ant/DummyTaskOkNonTask.java
deleted file mode 100644
index cbdd22e..0000000
--- a/src/testcases/org/apache/tools/ant/DummyTaskOkNonTask.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant;
-
-public class DummyTaskOkNonTask {
-
-    public DummyTaskOkNonTask() {
-    }
-
-    public void execute() {
-    }
-    
-}
diff --git a/src/testcases/org/apache/tools/ant/DummyTaskWithNonPublicExecute.java b/src/testcases/org/apache/tools/ant/DummyTaskWithNonPublicExecute.java
deleted file mode 100644
index 43bbf73..0000000
--- a/src/testcases/org/apache/tools/ant/DummyTaskWithNonPublicExecute.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant;
-
-public class DummyTaskWithNonPublicExecute {
-
-    public DummyTaskWithNonPublicExecute() {
-    }
-
-    void execute() {
-    }
-    
-}
diff --git a/src/testcases/org/apache/tools/ant/DummyTaskWithNonVoidExecute.java b/src/testcases/org/apache/tools/ant/DummyTaskWithNonVoidExecute.java
deleted file mode 100644
index 8765f0e..0000000
--- a/src/testcases/org/apache/tools/ant/DummyTaskWithNonVoidExecute.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant;
-
-public class DummyTaskWithNonVoidExecute {
-
-    public DummyTaskWithNonVoidExecute() {
-    }
-
-    public int execute() {
-        return 0;
-    }
-    
-}
diff --git a/src/testcases/org/apache/tools/ant/DummyTaskWithoutDefaultConstructor.java b/src/testcases/org/apache/tools/ant/DummyTaskWithoutDefaultConstructor.java
deleted file mode 100644
index d8643f2..0000000
--- a/src/testcases/org/apache/tools/ant/DummyTaskWithoutDefaultConstructor.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant;
-
-import org.apache.tools.ant.Task;
-
-public class DummyTaskWithoutDefaultConstructor extends Task {
-
-    public DummyTaskWithoutDefaultConstructor(int dummy) {
-    }
-
-    public void execute() {
-    }
-    
-}
diff --git a/src/testcases/org/apache/tools/ant/DummyTaskWithoutExecute.java b/src/testcases/org/apache/tools/ant/DummyTaskWithoutExecute.java
deleted file mode 100644
index 2215239..0000000
--- a/src/testcases/org/apache/tools/ant/DummyTaskWithoutExecute.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant;
-
-public class DummyTaskWithoutExecute {
-
-    public DummyTaskWithoutExecute() {
-    }
-
-    public void execute(String dummy) {
-    }
-    
-}
diff --git a/src/testcases/org/apache/tools/ant/DummyTaskWithoutPublicConstructor.java b/src/testcases/org/apache/tools/ant/DummyTaskWithoutPublicConstructor.java
deleted file mode 100644
index 07d78b8..0000000
--- a/src/testcases/org/apache/tools/ant/DummyTaskWithoutPublicConstructor.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant;
-
-import org.apache.tools.ant.Task;
-
-public class DummyTaskWithoutPublicConstructor extends Task {
-
-    DummyTaskWithoutPublicConstructor() {
-    }
-
-    public void execute() {
-    }
-    
-}
diff --git a/src/testcases/org/apache/tools/ant/ImmutableTest.java b/src/testcases/org/apache/tools/ant/ImmutableTest.java
deleted file mode 100644
index bfb3c7e..0000000
--- a/src/testcases/org/apache/tools/ant/ImmutableTest.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant;
-
-import org.apache.tools.ant.BuildFileTest;
-
-/**
- * @author Erik Hatcher
- */
-public class ImmutableTest extends BuildFileTest { 
-
-    public ImmutableTest(String name) { 
-        super(name);
-    }
-    
-    public void setUp() { 
-        configureProject("src/etc/testcases/core/immutable.xml");
-    }
-    
-    // override allowed on <available>
-    public void test1() { 
-        executeTarget("test1");
-        assertEquals("override", project.getProperty("test"));
-    }
-    
-    // ensure <tstamp>'s new prefix attribute is working
-    public void test2() {
-        executeTarget("test2");
-        assertNotNull(project.getProperty("DSTAMP"));
-        assertNotNull(project.getProperty("start.DSTAMP"));
-    }
-
-    // ensure <tstamp> follows the immutability rule
-    public void test3() {
-        executeTarget("test3");
-        assertEquals("original", project.getProperty("DSTAMP"));
-    }
-
-    // ensure <condition> follows the immutability rule
-    public void test4() {
-        executeTarget("test4");
-        assertEquals("original", project.getProperty("test"));
-    }
-    // ensure <checksum> follows the immutability rule
-    public void test5() {
-        executeTarget("test5");
-        assertEquals("original", project.getProperty("test"));
-    }
-
-    // ensure <exec> follows the immutability rule
-    public void test6() {
-        executeTarget("test6");
-        assertEquals("original", project.getProperty("test1"));
-        assertEquals("original", project.getProperty("test2"));
-    }
-
-    // ensure <pathconvert> follows the immutability rule
-    public void test7() {
-        executeTarget("test7");
-        assertEquals("original", project.getProperty("test"));
-    }
-}
-
diff --git a/src/testcases/org/apache/tools/ant/IncludeTest.java b/src/testcases/org/apache/tools/ant/IncludeTest.java
deleted file mode 100644
index 6eccbde..0000000
--- a/src/testcases/org/apache/tools/ant/IncludeTest.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant;
-
-import org.apache.tools.ant.BuildFileTest;
-
-/**
- * Test the build file inclusion using XML entities.
- *
- * @author Conor MacNeill
- */
-public class IncludeTest extends BuildFileTest { 
-    
-    public IncludeTest(String name) { 
-        super(name);
-    }    
-    
-    public void test1() { 
-        configureProject("src/etc/testcases/core/include/basic/include.xml");
-        expectLog("test1", "from included entity");
-    }
-    
-    public void test2() { 
-        configureProject("src/etc/testcases/core/include/frag#ment/include.xml");
-        expectLog("test1", "from included entity");
-    }
-    
-    public void test3() { 
-        configureProject("src/etc/testcases/core/include/frag#ment/simple.xml");
-        expectLog("test1", "from simple buildfile");
-    }
-    
-    public void test4() { 
-        configureProject("src/etc/testcases/core/include/basic/relative.xml");
-        expectLog("test1", "from included entity");
-    }
-    
-    public void test5() { 
-        configureProject("src/etc/testcases/core/include/frag#ment/relative.xml");
-        expectLog("test1", "from included entity");
-    }
-}
diff --git a/src/testcases/org/apache/tools/ant/IntrospectionHelperTest.java b/src/testcases/org/apache/tools/ant/IntrospectionHelperTest.java
deleted file mode 100644
index c82002b..0000000
--- a/src/testcases/org/apache/tools/ant/IntrospectionHelperTest.java
+++ /dev/null
@@ -1,494 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant;
-
-import junit.framework.TestCase;
-import junit.framework.AssertionFailedError;
-import java.io.File;
-import java.util.*;
-import org.apache.tools.ant.taskdefs.condition.Os;
-
-/**
- * JUnit 3 testcases for org.apache.tools.ant.IntrospectionHelper.
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> 
- */
-
-public class IntrospectionHelperTest extends TestCase {
-
-    private Project p;
-    private static final String projectBasedir = File.separator;
-
-    public IntrospectionHelperTest(String name) {
-        super(name);
-    }
-    
-    public void setUp() {
-        p = new Project();
-        p.setBasedir(projectBasedir);
-    }
-
-    public void testAddText() throws BuildException {
-        IntrospectionHelper ih = IntrospectionHelper.getHelper(java.lang.String.class);
-        try {
-            ih.addText(p, "", "test");
-            fail("String doesn\'t support addText");
-        } catch (BuildException be) {
-        }
-
-        ih = IntrospectionHelper.getHelper(getClass());
-        ih.addText(p, this, "test");
-        try {
-            ih.addText(p, this, "test2");
-            fail("test2 shouldn\'t be equal to test");
-        } catch (BuildException be) {
-            assertTrue(be.getException() instanceof AssertionFailedError);
-        }
-    }
-
-    public void testSupportsCharacters() {
-        IntrospectionHelper ih = IntrospectionHelper.getHelper(java.lang.String.class);
-        assertTrue("String doesn\'t support addText", !ih.supportsCharacters());
-        ih = IntrospectionHelper.getHelper(getClass());
-        assertTrue("IntrospectionHelperTest supports addText", 
-               ih.supportsCharacters());
-    }
-
-    public void addText(String text) {
-        assertEquals("test", text);
-    }
-    
-    public void testElementCreators() throws BuildException {
-        IntrospectionHelper ih = IntrospectionHelper.getHelper(getClass());
-        try {
-            ih.getElementType("one");
-            fail("don't have element type one");
-        } catch (BuildException be) {
-        }
-        try {
-            ih.getElementType("two");
-            fail("createTwo takes arguments");
-        } catch (BuildException be) {
-        }
-        try {
-            ih.getElementType("three");
-            fail("createThree returns void");
-        } catch (BuildException be) {
-        }
-        try {
-            ih.getElementType("four");
-            fail("createFour returns array");
-        } catch (BuildException be) {
-        }
-        try {
-            ih.getElementType("five");
-            fail("createFive returns primitive type");
-        } catch (BuildException be) {
-        }
-        assertEquals(java.lang.String.class, ih.getElementType("six"));
-        assertEquals("test", ih.createElement(p, this, "six"));
-
-        try {
-            ih.getElementType("seven");
-            fail("addSeven takes two arguments");
-        } catch (BuildException be) {
-        }
-        try {
-            ih.getElementType("eight");
-            fail("addEight takes no arguments");
-        } catch (BuildException be) {
-        }
-        try {
-            ih.getElementType("nine");
-            fail("nine return non void");
-        } catch (BuildException be) {
-        }
-        try {
-            ih.getElementType("ten");
-            fail("addTen takes array argument");
-        } catch (BuildException be) {
-        }
-        try {
-            ih.getElementType("eleven");
-            fail("addEleven takes primitive argument");
-        } catch (BuildException be) {
-        }
-        try {
-            ih.getElementType("twelve");
-            fail("no primitive constructor for java.lang.Class");
-        } catch (BuildException be) {
-        }
-        assertEquals(java.lang.StringBuffer.class, ih.getElementType("thirteen"));
-        assertEquals("test", ih.createElement(p, this, "thirteen").toString());
-
-        try {
-            ih.createElement(p, this, "fourteen");
-            fail("fourteen throws NullPointerException");
-        } catch (BuildException be) {
-            assertTrue(be.getException() instanceof NullPointerException);
-        }
-
-        try {
-            ih.createElement(p, this, "fourteen");
-            fail("fifteen throws NullPointerException");
-        } catch (BuildException be) {
-            assertTrue(be.getException() instanceof NullPointerException);
-        }
-    }
-    
-    public void testGetNestedElements() {
-        Hashtable h = new Hashtable();
-        h.put("six", java.lang.String.class);
-        h.put("thirteen", java.lang.StringBuffer.class);
-        h.put("fourteen", java.lang.StringBuffer.class);
-        h.put("fifteen", java.lang.StringBuffer.class);
-        IntrospectionHelper ih = IntrospectionHelper.getHelper(getClass());
-        Enumeration enum = ih.getNestedElements();
-        while (enum.hasMoreElements()) {
-            String name = (String) enum.nextElement();
-            Class expect = (Class) h.get(name);
-            assertNotNull("Support for "+name+" in IntrospectioNHelperTest?",
-                          expect);
-            assertEquals("Return type of "+name, expect, ih.getElementType(name));
-            h.remove(name);
-        }
-        assertTrue("Found all", h.isEmpty());
-    }
-
-    public Object createTwo(String s) {
-        return null;
-    }
-
-    public void createThree() {}
-
-    public Object[] createFour() {
-        return null;
-    }
-
-    public int createFive() {
-        return 0;
-    }
-
-    public String createSix() {
-        return "test";
-    }
-
-    public StringBuffer createFifteen() {
-        throw new NullPointerException();
-    }
-
-    public void addSeven(String s, String s2) {}
-
-    public void addEight() {}
-
-    public String addNine(String s) {
-        return null;
-    }
-
-    public void addTen(String[] s) {}
-
-    public void addEleven(int i) {}
-
-    public void addTwelve(Class c) {}
-
-    public void addThirteen(StringBuffer sb) {
-        sb.append("test");
-    }
-    
-    public void addFourteen(StringBuffer s) {
-        throw new NullPointerException();
-    }
-
-    public void testAttributeSetters() throws BuildException {
-        IntrospectionHelper ih = IntrospectionHelper.getHelper(getClass());
-        try {
-            ih.setAttribute(p, this, "one", "test");
-            fail("setOne doesn't exist");
-        } catch (BuildException be) {
-        }
-        try {
-            ih.setAttribute(p, this, "two", "test");
-            fail("setTwo returns non void");
-        } catch (BuildException be) {
-        }
-        try {
-            ih.setAttribute(p, this, "three", "test");
-            fail("setThree takes no args");
-        } catch (BuildException be) {
-        }
-        try {
-            ih.setAttribute(p, this, "four", "test");
-            fail("setFour takes two args");
-        } catch (BuildException be) {
-        }
-        try {
-            ih.setAttribute(p, this, "five", "test");
-            fail("setFive takes array arg");
-        } catch (BuildException be) {
-        }
-        try {
-            ih.setAttribute(p, this, "six", "test");
-            fail("Project doesn't have a String constructor");
-        } catch (BuildException be) {
-        }
-        ih.setAttribute(p, this, "seven", "2");
-        try {
-            ih.setAttribute(p, this, "seven", "3");
-            fail("2 shouldn't be equals to three");
-        } catch (BuildException be) {
-            assertTrue(be.getException() instanceof AssertionFailedError);
-        }
-        ih.setAttribute(p, this, "eight", "2");
-        try {
-            ih.setAttribute(p, this, "eight", "3");
-            fail("2 shouldn't be equals to three - as int");
-        } catch (BuildException be) {
-            assertTrue(be.getException() instanceof AssertionFailedError);
-        }
-        ih.setAttribute(p, this, "nine", "2");
-        try {
-            ih.setAttribute(p, this, "nine", "3");
-            fail("2 shouldn't be equals to three - as Integer");
-        } catch (BuildException be) {
-            assertTrue(be.getException() instanceof AssertionFailedError);
-        }
-        ih.setAttribute(p, this, "ten", "2");
-        try {
-            ih.setAttribute(p, this, "ten", "3");
-            fail(projectBasedir+"2 shouldn't be equals to "+projectBasedir+"3");
-        } catch (BuildException be) {
-            assertTrue(be.getException() instanceof AssertionFailedError);
-        }
-        ih.setAttribute(p, this, "eleven", "2");
-        try {
-            ih.setAttribute(p, this, "eleven", "on");
-            fail("on shouldn't be false");
-        } catch (BuildException be) {
-            assertTrue(be.getException() instanceof AssertionFailedError);
-        }
-        ih.setAttribute(p, this, "twelve", "2");
-        try {
-            ih.setAttribute(p, this, "twelve", "on");
-            fail("on shouldn't be false");
-        } catch (BuildException be) {
-            assertTrue(be.getException() instanceof AssertionFailedError);
-        }
-        ih.setAttribute(p, this, "thirteen", "org.apache.tools.ant.Project");
-        try {
-            ih.setAttribute(p, this, "thirteen", "org.apache.tools.ant.ProjectHelper");
-            fail("org.apache.tools.ant.Project shouldn't be equal to org.apache.tools.ant.ProjectHelper");
-        } catch (BuildException be) {
-            assertTrue(be.getException() instanceof AssertionFailedError);
-        }
-        try {
-            ih.setAttribute(p, this, "thirteen", "org.apache.tools.ant.Project2");
-            fail("org.apache.tools.ant.Project2 doesn't exist");
-        } catch (BuildException be) {
-            assertTrue(be.getException() instanceof ClassNotFoundException);
-        }
-        ih.setAttribute(p, this, "fourteen", "2");
-        try {
-            ih.setAttribute(p, this, "fourteen", "on");
-            fail("2 shouldn't be equals to three - as StringBuffer");
-        } catch (BuildException be) {
-            assertTrue(be.getException() instanceof AssertionFailedError);
-        }
-        ih.setAttribute(p, this, "fifteen", "abcd");
-        try {
-            ih.setAttribute(p, this, "fifteen", "on");
-            fail("o shouldn't be equal to a");
-        } catch (BuildException be) {
-            assertTrue(be.getException() instanceof AssertionFailedError);
-        }
-        ih.setAttribute(p, this, "sixteen", "abcd");
-        try {
-            ih.setAttribute(p, this, "sixteen", "on");
-            fail("o shouldn't be equal to a");
-        } catch (BuildException be) {
-            assertTrue(be.getException() instanceof AssertionFailedError);
-        }
-        ih.setAttribute(p, this, "seventeen", "17");
-        try {
-            ih.setAttribute(p, this, "seventeen", "3");
-            fail("17 shouldn't be equals to three");
-        } catch (BuildException be) {
-            assertTrue(be.getException() instanceof AssertionFailedError);
-        }
-        ih.setAttribute(p, this, "eightteen", "18");
-        try {
-            ih.setAttribute(p, this, "eightteen", "3");
-            fail("18 shouldn't be equals to three");
-        } catch (BuildException be) {
-            assertTrue(be.getException() instanceof AssertionFailedError);
-        }
-        ih.setAttribute(p, this, "nineteen", "19");
-        try {
-            ih.setAttribute(p, this, "nineteen", "3");
-            fail("19 shouldn't be equals to three");
-        } catch (BuildException be) {
-            assertTrue(be.getException() instanceof AssertionFailedError);
-        }
-    }
-
-    public void testGetAttributes() {
-        Hashtable h = new Hashtable();
-        h.put("seven", java.lang.String.class);
-        h.put("eight", java.lang.Integer.TYPE);
-        h.put("nine", java.lang.Integer.class);
-        h.put("ten", java.io.File.class);
-        h.put("eleven", java.lang.Boolean.TYPE);
-        h.put("twelve", java.lang.Boolean.class);
-        h.put("thirteen", java.lang.Class.class);
-        h.put("fourteen", java.lang.StringBuffer.class);
-        h.put("fifteen", java.lang.Character.TYPE);
-        h.put("sixteen", java.lang.Character.class);
-        h.put("seventeen", java.lang.Byte.TYPE);
-        h.put("eightteen", java.lang.Short.TYPE);
-        h.put("nineteen", java.lang.Double.TYPE);
-
-        /*
-         * JUnit 3.7 adds a getName method to TestCase - so we now
-         * have a name attribute in IntrospectionHelperTest if we run
-         * under JUnit 3.7 but not in earlier versions.
-         *
-         * Simply add it here and remove it after the tests.
-         */
-        h.put("name", java.lang.String.class);
-
-        IntrospectionHelper ih = IntrospectionHelper.getHelper(getClass());
-        Enumeration enum = ih.getAttributes();
-        while (enum.hasMoreElements()) {
-            String name = (String) enum.nextElement();
-            Class expect = (Class) h.get(name);
-            assertNotNull("Support for "+name+" in IntrospectionHelperTest?",
-                          expect);
-            assertEquals("Type of "+name, expect, ih.getAttributeType(name));
-            h.remove(name);
-        }
-        h.remove("name");
-        assertTrue("Found all", h.isEmpty());
-    }
-
-    public int setTwo(String s) {
-        return 0;
-    }
-
-    public void setThree() {}
-
-    public void setFour(String s1, String s2) {}
-
-    public void setFive(String[] s) {}
-
-    public void setSix(Project p) {}
-
-    public void setSeven(String s) {
-        assertEquals("2", s);
-    }
-
-    public void setEight(int i) {
-        assertEquals(2, i);
-    }
-
-    public void setNine(Integer i) {
-        assertEquals(2, i.intValue());
-    }
-
-    public void setTen(File f) {
-        if (Os.isFamily("unix")) { 
-            assertEquals(projectBasedir+"2", f.getAbsolutePath());
-        } else if (Os.isFamily("netware")) {
-            assertEquals(projectBasedir+"2", f.getAbsolutePath().toLowerCase(Locale.US));
-        } else {
-            assertEquals(":"+projectBasedir+"2", f.getAbsolutePath().toLowerCase(Locale.US).substring(1));
-        }
-    }
-
-    public void setEleven(boolean b) {
-        assertTrue(!b);
-    }
-
-    public void setTwelve(Boolean b) {
-        assertTrue(!b.booleanValue());
-    }
-
-    public void setThirteen(Class c) {
-        assertEquals(Project.class, c);
-    }
-
-    public void setFourteen(StringBuffer sb) {
-        assertEquals("2", sb.toString());
-    }
-
-    public void setFifteen(char c) {
-        assertEquals(c, 'a');
-    }
-
-    public void setSixteen(Character c) {
-        assertEquals(c.charValue(), 'a');
-    }
-
-    public void setSeventeen(byte b) {
-        assertEquals(17, b);
-    }
-
-    public void setEightteen(short s) {
-        assertEquals(18, s);
-    }
-
-    public void setNineteen(double d) {
-        assertEquals(19, d, 1e-6);
-    }
-
-}// IntrospectionHelperTest
diff --git a/src/testcases/org/apache/tools/ant/MockBuildListener.java b/src/testcases/org/apache/tools/ant/MockBuildListener.java
deleted file mode 100644
index 258bf21..0000000
--- a/src/testcases/org/apache/tools/ant/MockBuildListener.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant;
-
-import java.util.Vector;
-
-import junit.framework.Assert;
-
-public class MockBuildListener extends Assert implements BuildListener {
-  
-    private final Vector buffer = new Vector();
-    private final Project project;
-    
-    public MockBuildListener(final Project project) {
-        this.project = project;
-    }
-    
-    public void buildStarted(BuildEvent event) {}
-    public void buildFinished(BuildEvent event) {}
-    public void targetStarted(BuildEvent event) {}
-    public void targetFinished(BuildEvent event) {}
-    public void taskStarted(BuildEvent event) {}
-    public void taskFinished(BuildEvent event) {}
-            
-    public void messageLogged(final BuildEvent actual) {
-        if(actual.getPriority()==Project.MSG_DEBUG)
-            return;
-        assertTrue("unexpected messageLogged: "+actual.getMessage(), !buffer.isEmpty());
-        assertEquals("unexpected project ", project, actual.getProject());
-
-        BuildEvent expected = (BuildEvent) buffer.elementAt(0);
-        buffer.removeElementAt(0);
-        assertEquals("unexpected messageLogged ", expected.getMessage(), actual.getMessage());
-        assertEquals("unexpected priority ", expected.getPriority(), actual.getPriority());
-    }
-    
-    public void assertEmpty() {
-        assertTrue("MockBuildListener is not empty", buffer.isEmpty());
-    }
-    
-    public void addBuildEvent(final String message, final int priority) {
-        final BuildEvent be = new BuildEvent(project);
-        be.setMessage(message, priority);
-        buffer.addElement(be);
-    }
-    
-}
diff --git a/src/testcases/org/apache/tools/ant/ProjectTest.java b/src/testcases/org/apache/tools/ant/ProjectTest.java
deleted file mode 100644
index 47afe6c..0000000
--- a/src/testcases/org/apache/tools/ant/ProjectTest.java
+++ /dev/null
@@ -1,250 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant;
-
-import org.apache.tools.ant.input.DefaultInputHandler;
-import org.apache.tools.ant.input.InputHandler;
-import org.apache.tools.ant.input.PropertyFileInputHandler;
-import org.apache.tools.ant.types.*;
-import org.apache.tools.ant.util.JavaEnvUtils;
-
-import java.io.File;
-
-import junit.framework.AssertionFailedError;
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-/**
- * Very limited test class for Project. Waiting to be extended.
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> 
- */
-public class ProjectTest extends TestCase {
-
-    private Project p;
-    private String root;
-    private MockBuildListener mbl;
-
-    public ProjectTest(String name) {
-        super(name);
-    }
-
-    public void setUp() {
-        p = new Project();
-        p.init();
-        root = new File(File.separator).getAbsolutePath();
-        mbl = new MockBuildListener(p);
-    }
-
-    public void testDataTypes() throws BuildException {
-        assertNull("dummy is not a known data type", 
-                   p.createDataType("dummy"));
-        Object o = p.createDataType("fileset");
-        assertNotNull("fileset is a known type", o);
-        assertTrue("fileset creates FileSet", o instanceof FileSet);
-        assertTrue("PatternSet", 
-               p.createDataType("patternset") instanceof PatternSet);
-        assertTrue("Path", p.createDataType("path") instanceof Path);
-    }
-
-    /**
-     * This test has been a starting point for moving the code to FileUtils.
-     */
-    public void testResolveFile() {
-        /*
-         * Start with simple absolute file names.
-         */
-        assertEquals(File.separator, 
-                     p.resolveFile("/", null).getPath());
-        assertEquals(File.separator, 
-                     p.resolveFile("\\", null).getPath());
-
-        /*
-         * throw in drive letters
-         */
-        String driveSpec = "C:";
-        assertEquals(driveSpec + "\\", 
-                     p.resolveFile(driveSpec + "/", null).getPath());
-        assertEquals(driveSpec + "\\", 
-                     p.resolveFile(driveSpec + "\\", null).getPath());
-        String driveSpecLower = "c:";
-        assertEquals(driveSpec + "\\", 
-                     p.resolveFile(driveSpecLower + "/", null).getPath());
-        assertEquals(driveSpec + "\\", 
-                     p.resolveFile(driveSpecLower + "\\", null).getPath());
-        /*
-         * promised to eliminate consecutive slashes after drive letter.
-         */
-        assertEquals(driveSpec + "\\", 
-                     p.resolveFile(driveSpec + "/////", null).getPath());
-        assertEquals(driveSpec + "\\", 
-                     p.resolveFile(driveSpec + "\\\\\\\\\\\\", null).getPath());
-
-        /*
-         * Now test some relative file name magic.
-         */
-        assertEquals(localize("/1/2/3/4"),
-                     p.resolveFile("4", new File(localize("/1/2/3"))).getPath());
-        assertEquals(localize("/1/2/3/4"),
-                     p.resolveFile("./4", new File(localize("/1/2/3"))).getPath());
-        assertEquals(localize("/1/2/3/4"),
-                     p.resolveFile(".\\4", new File(localize("/1/2/3"))).getPath());
-        assertEquals(localize("/1/2/3/4"),
-                     p.resolveFile("./.\\4", new File(localize("/1/2/3"))).getPath());
-        assertEquals(localize("/1/2/3/4"),
-                     p.resolveFile("../3/4", new File(localize("/1/2/3"))).getPath());
-        assertEquals(localize("/1/2/3/4"),
-                     p.resolveFile("..\\3\\4", new File(localize("/1/2/3"))).getPath());
-        assertEquals(localize("/1/2/3/4"),
-                     p.resolveFile("../../5/.././2/./3/6/../4", new File(localize("/1/2/3"))).getPath());
-        assertEquals(localize("/1/2/3/4"),
-                     p.resolveFile("..\\../5/..\\./2/./3/6\\../4", new File(localize("/1/2/3"))).getPath());
-
-    }
-
-    /**
-     * adapt file separators to local conventions
-     */
-    private String localize(String path) {
-        path = root + path.substring(1);
-        return path.replace('\\', File.separatorChar).replace('/', File.separatorChar);
-    }
-    
-
-    private void assertTaskDefFails(final Class taskClass, 
-                                       final String message) {
-        final String dummyName = "testTaskDefinitionDummy";
-        try {
-            mbl.addBuildEvent(message, Project.MSG_ERR);
-            p.addTaskDefinition(dummyName, taskClass);
-            fail("expected BuildException(\""+message+"\", Project.MSG_ERR) when adding task " + taskClass);
-        }
-        catch(BuildException e) {
-            assertEquals(message, e.getMessage());
-            mbl.assertEmpty();
-            assertTrue(!p.getTaskDefinitions().containsKey(dummyName));
-        }
-    }
-    
-    public void testAddTaskDefinition() {
-        p.addBuildListener(mbl);
-
-        p.addTaskDefinition("Ok", DummyTaskOk.class);
-        assertEquals(DummyTaskOk.class, p.getTaskDefinitions().get("Ok"));
-        p.addTaskDefinition("OkNonTask", DummyTaskOkNonTask.class);
-        assertEquals(DummyTaskOkNonTask.class, p.getTaskDefinitions().get("OkNonTask"));
-        mbl.assertEmpty();
-
-        assertTaskDefFails(DummyTaskPrivate.class,   DummyTaskPrivate.class   + " is not public");
-
-        try {
-            assertTaskDefFails(DummyTaskProtected.class, 
-                               DummyTaskProtected.class + " is not public");
-        } catch (AssertionFailedError e) {
-            /*
-             * I don't understand this, but this is what happens with
-             * > java -fullversion
-             * java full version "Linux_JDK_1.1.8_v3_green_threads"
-             * from time to time
-             */
-            assertTrue(JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_1));
-            assertTaskDefFails(DummyTaskProtected.class, 
-                               "No public no-arg constructor in " 
-                               + DummyTaskProtected.class);
-        }
-        
-        assertTaskDefFails(DummyTaskPackage.class,   DummyTaskPackage.class   + " is not public");
-
-        assertTaskDefFails(DummyTaskAbstract.class,  DummyTaskAbstract.class  + " is abstract"); 
-        assertTaskDefFails(DummyTaskInterface.class, DummyTaskInterface.class + " is abstract");
-
-        assertTaskDefFails(DummyTaskWithoutDefaultConstructor.class, "No public no-arg constructor in " + DummyTaskWithoutDefaultConstructor.class);
-        assertTaskDefFails(DummyTaskWithoutPublicConstructor.class,  "No public no-arg constructor in " + DummyTaskWithoutPublicConstructor.class);
-        
-        assertTaskDefFails(DummyTaskWithoutExecute.class,       "No public execute() in " + DummyTaskWithoutExecute.class);
-        assertTaskDefFails(DummyTaskWithNonPublicExecute.class, "No public execute() in " + DummyTaskWithNonPublicExecute.class);
-        
-        mbl.addBuildEvent("return type of execute() should be void but was \"int\" in " + DummyTaskWithNonVoidExecute.class, Project.MSG_WARN);
-        p.addTaskDefinition("NonVoidExecute", DummyTaskWithNonVoidExecute.class);
-        mbl.assertEmpty();
-        assertEquals(DummyTaskWithNonVoidExecute.class, p.getTaskDefinitions().get("NonVoidExecute"));
-    }
-        
-    public void testInputHandler() {
-        InputHandler ih = p.getInputHandler();
-        assertNotNull(ih);
-        assertTrue(ih instanceof DefaultInputHandler);
-        InputHandler pfih = new PropertyFileInputHandler();
-        p.setInputHandler(pfih);
-        assertSame(pfih, p.getInputHandler());
-    }
-
-    private class DummyTaskPrivate extends Task {
-        public DummyTaskPrivate() {}
-        public void execute() {}
-    }
-
-    protected class DummyTaskProtected extends Task {
-        public DummyTaskProtected() {}
-        public void execute() {}
-    }
-
-}
-
-class DummyTaskPackage extends Task {
-    public DummyTaskPackage() {}
-    public void execute() {}
-}
diff --git a/src/testcases/org/apache/tools/ant/PropertyExpansionTest.java b/src/testcases/org/apache/tools/ant/PropertyExpansionTest.java
deleted file mode 100644
index 624ffcd..0000000
--- a/src/testcases/org/apache/tools/ant/PropertyExpansionTest.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-
-package org.apache.tools.ant;
-
-/**
- * class to look at how we expand properties
- */
-public class PropertyExpansionTest extends BuildFileTest {
-
-
-    public PropertyExpansionTest(String name) {
-        super(name);
-    }
-
-    /**
-     * we bind to an existing test file because we are too lazy to write our
-     * own, and we don't really care what it is
-     */
-    public void setUp() {
-        configureProject("src/etc/testcases/core/immutable.xml");
-    }
-
-    /**
-     * run through the test cases of expansion
-     */
-    public void testPropertyExpansion() {
-        assertExpandsTo("","");
-        assertExpandsTo("$","$");
-        assertExpandsTo("$$-","$-");
-        assertExpandsTo("$$","$");
-        project.setProperty("expanded","EXPANDED");
-        assertExpandsTo("a${expanded}b","aEXPANDEDb");
-        assertExpandsTo("${expanded}${expanded}","EXPANDEDEXPANDED");
-        assertExpandsTo("$$$","$$");
-        assertExpandsTo("$$$$-","$$-");
-        assertExpandsTo("","");
-        assertExpandsTo("Class$$subclass","Class$subclass");    
-    }
-    
-    /**
-     * new things we want
-     */
-    public void testDollarPassthru() {
-        assertExpandsTo("$-","$-");    
-        assertExpandsTo("Class$subclass","Class$subclass");    
-        assertExpandsTo("$$$-","$$-");
-        assertExpandsTo("$$$$$","$$$");
-        assertExpandsTo("${unassigned.property}","${unassigned.property}");
-        assertExpandsTo("a$b","a$b");
-        assertExpandsTo("$}}","$}}");
-    }
-
-    
-    /**
-     * old things we dont want; not a test no more
-     */
-    public void oldtestQuirkyLegacyBehavior() {
-        assertExpandsTo("Class$subclass","Classsubclass");    
-        assertExpandsTo("$$$-","$-");
-        assertExpandsTo("a$b","ab");
-        assertExpandsTo("$}}","}}");
-    }
-
-    /**
-     * little helper method to validate stuff
-     */
-    private void assertExpandsTo(String source,String expected) {
-        String actual=project.replaceProperties(source);
-        assertEquals(source,expected,actual);
-    }
-
-//end class
-}
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/AbstractCvsTaskTest.java b/src/testcases/org/apache/tools/ant/taskdefs/AbstractCvsTaskTest.java
deleted file mode 100644
index 3156d54..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/AbstractCvsTaskTest.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs;
- 
-import java.io.File;
-
-import org.apache.tools.ant.BuildFileTest;
-
-/**
- * @author stephan <stephan@wanderinghorse.net>
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- * @version $Revision$
- */
-public class AbstractCvsTaskTest extends BuildFileTest {
-
-    public AbstractCvsTaskTest() {
-        this( "AbstractCvsTaskTest" );
-    }
-
-    public AbstractCvsTaskTest(String name) {
-        super(name);
-    }
-
-    public void setUp() {
-        configureProject("src/etc/testcases/taskdefs/abstractcvstask.xml");
-    }
-
-    public void tearDown() {
-        executeTarget("cleanup");
-    }
-
-    public void testAbstractCvsTask() {
-        executeTarget( "all" );
-    }
-
-    public void testPackageAttribute() {
-        File f = getProject().resolveFile("tmpdir/jakarta-ant/build.xml");
-        assertTrue("starting empty", !f.exists());
-        expectLogContaining("package-attribute", "U jakarta-ant/build.xml");
-        assertTrue("now it is there", f.exists());
-    }
-
-    public void testTagAttribute() {
-        File f = getProject().resolveFile("tmpdir/jakarta-ant/build.xml");
-        assertTrue("starting empty", !f.exists());
-        expectLogContaining("tag-attribute", "ANT_141 (revision: 1.175.2.13)");
-        assertTrue("now it is there", f.exists());
-    }
-}
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/AntStructureTest.java b/src/testcases/org/apache/tools/ant/taskdefs/AntStructureTest.java
deleted file mode 100644
index d133dc9..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/AntStructureTest.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.BuildFileTest;
-/**
- * @author Nico Seessle <nico@seessle.de> 
- */
-public class AntStructureTest extends BuildFileTest { 
-    
-    public AntStructureTest(String name) { 
-        super(name);
-    }    
-    
-    public void setUp() { 
-        configureProject("src/etc/testcases/taskdefs/antstructure.xml");
-    }
-    
-    public void test1() { 
-        expectBuildException("test1", "required argument not specified");
-    }
-}
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/AntTest.java b/src/testcases/org/apache/tools/ant/taskdefs/AntTest.java
deleted file mode 100644
index d419708..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/AntTest.java
+++ /dev/null
@@ -1,407 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import java.io.File;
-
-import junit.framework.AssertionFailedError;
-
-import org.apache.tools.ant.BuildEvent;
-import org.apache.tools.ant.BuildFileTest;
-import org.apache.tools.ant.BuildListener;
-import org.apache.tools.ant.input.InputHandler;
-import org.apache.tools.ant.input.PropertyFileInputHandler;
-import org.apache.tools.ant.types.Path;
-
-/**
- * @author Nico Seessle <nico@seessle.de> 
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> 
- * @version $Revision$
- */
-public class AntTest extends BuildFileTest { 
-    
-    public AntTest(String name) { 
-        super(name);
-    }    
-    
-    public void setUp() { 
-        configureProject("src/etc/testcases/taskdefs/ant.xml");
-    }
-    
-    public void tearDown() {
-        executeTarget("cleanup");
-    }
-
-    public void test1() { 
-        expectBuildException("test1", "recursive call");
-    }
-
-    // target must be specified
-    public void test2() { 
-        expectBuildException("test2", "required argument not specified");
-    }
-
-    // Should fail since a recursion will occur...
-    public void test3() { 
-        expectBuildException("test1", "recursive call");
-    }
-
-    public void test4() { 
-        expectBuildException("test4", "target doesn't exist");
-    }
-
-    public void test5() { 
-        executeTarget("test5");
-    }
-
-    public void test6() { 
-        executeTarget("test6");
-    }
-
-    public void testExplicitBasedir1() {
-        File dir1 = getProjectDir();
-        File dir2 = project.resolveFile("..");
-        testBaseDirs("explicitBasedir1", 
-                     new String[] {dir1.getAbsolutePath(), 
-                                   dir2.getAbsolutePath()
-                     });
-    }
-
-    public void testExplicitBasedir2() {
-        File dir1 = getProjectDir();
-        File dir2 = project.resolveFile("..");
-        testBaseDirs("explicitBasedir2",
-                     new String[] {dir1.getAbsolutePath(), 
-                                   dir2.getAbsolutePath()
-                     });
-    }
-
-    public void testInheritBasedir() {
-        String basedir = getProjectDir().getAbsolutePath();
-        testBaseDirs("inheritBasedir", new String[] {basedir, basedir});
-    }
-
-    public void testDoNotInheritBasedir() {
-        File dir1 = getProjectDir();
-        File dir2 = project.resolveFile("ant");
-        String basedir = getProjectDir().getAbsolutePath();
-        testBaseDirs("doNotInheritBasedir",
-                     new String[] {dir1.getAbsolutePath(), 
-                                   dir2.getAbsolutePath()
-                     });
-    }
-
-    public void testBasedirTripleCall() {
-        File dir1 = getProjectDir();
-        File dir2 = project.resolveFile("ant");
-        testBaseDirs("tripleCall", 
-                     new String[] {dir1.getAbsolutePath(), 
-                                   dir2.getAbsolutePath(),
-                                   dir1.getAbsolutePath()
-                     });
-    }
-
-    protected void testBaseDirs(String target, String[] dirs) {
-        BasedirChecker bc = new BasedirChecker(dirs);
-        project.addBuildListener(bc);
-        executeTarget(target);
-        AssertionFailedError ae = bc.getError();
-        if (ae != null) {
-            throw ae;
-        }
-    }
-
-    public void testReferenceInheritance() {
-        Path p = Path.systemClasspath;
-        p.setProject(project);
-        project.addReference("path", p);
-        project.addReference("no-override", p);
-        testReference("testInherit", new String[] {"path", "path"},
-                      new boolean[] {true, true}, p);
-        testReference("testInherit", 
-                      new String[] {"no-override", "no-override"},
-                      new boolean[] {true, false}, p);
-        testReference("testInherit", 
-                      new String[] {"no-override", "no-override"},
-                      new boolean[] {false, false}, null);
-    }
-
-    public void testReferenceNoInheritance() {
-        Path p = Path.systemClasspath;
-        p.setProject(project);
-        project.addReference("path", p);
-        project.addReference("no-override", p);
-        testReference("testNoInherit", new String[] {"path", "path"},
-                      new boolean[] {true, false}, p);
-        testReference("testNoInherit", new String[] {"path", "path"},
-                      new boolean[] {false, true}, null);
-        testReference("testInherit", 
-                      new String[] {"no-override", "no-override"},
-                      new boolean[] {true, false}, p);
-        testReference("testInherit", 
-                      new String[] {"no-override", "no-override"},
-                      new boolean[] {false, false}, null);
-    }
-
-    public void testReferenceRename() {
-        Path p = Path.systemClasspath;
-        p.setProject(project);
-        project.addReference("path", p);
-        testReference("testRename", new String[] {"path", "path"},
-                      new boolean[] {true, false}, p);
-        testReference("testRename", new String[] {"path", "path"},
-                      new boolean[] {false, true}, null);
-        testReference("testRename", new String[] {"newpath", "newpath"},
-                      new boolean[] {false, true}, p);
-    }
-
-    protected void testReference(String target, String[] keys, 
-                                 boolean[] expect, Object value) {
-        ReferenceChecker rc = new ReferenceChecker(keys, expect, value);
-        project.addBuildListener(rc);
-        executeTarget(target);
-        AssertionFailedError ae = rc.getError();
-        if (ae != null) {
-            throw ae;
-        }
-        project.removeBuildListener(rc);
-    }
-
-    public void testLogfilePlacement() {
-        File[] logFiles = new File[] {
-            getProject().resolveFile("test1.log"),
-            getProject().resolveFile("test2.log"),
-            getProject().resolveFile("ant/test3.log"),
-            getProject().resolveFile("ant/test4.log")
-        };
-        for (int i=0; i<logFiles.length; i++) {
-            assertTrue(logFiles[i].getName()+" doesn\'t exist",
-                       !logFiles[i].exists());
-        }
-        
-        executeTarget("testLogfilePlacement");
-
-        for (int i=0; i<logFiles.length; i++) {
-            assertTrue(logFiles[i].getName()+" exists",
-                       logFiles[i].exists());
-        }
-    }
-
-    public void testInputHandlerInheritance() {
-        InputHandler ih = new PropertyFileInputHandler();
-        getProject().setInputHandler(ih);
-        InputHandlerChecker ic = new InputHandlerChecker(ih);
-        getProject().addBuildListener(ic);
-        executeTarget("tripleCall");
-        AssertionFailedError ae = ic.getError();
-        if (ae != null) {
-            throw ae;
-        }
-        getProject().removeBuildListener(ic);
-    }
-
-    private class BasedirChecker implements BuildListener {
-        private String[] expectedBasedirs;
-        private int calls = 0;
-        private AssertionFailedError error;
-
-        BasedirChecker(String[] dirs) {
-            expectedBasedirs = dirs;
-        }
-
-        public void buildStarted(BuildEvent event) {}
-        public void buildFinished(BuildEvent event) {}
-        public void targetFinished(BuildEvent event){}
-        public void taskStarted(BuildEvent event) {}
-        public void taskFinished(BuildEvent event) {}
-        public void messageLogged(BuildEvent event) {}
-
-        public void targetStarted(BuildEvent event) {
-            if (error == null) {
-                try {
-                    if (calls == expectedBasedirs.length) {
-                        assertEquals("cleanup",
-                                     event.getTarget().getName());
-                    } else {
-                        assertEquals(expectedBasedirs[calls++],
-                                     event.getProject().getBaseDir().getAbsolutePath());
-                    }
-                } catch (AssertionFailedError e) {
-                    error = e;
-                }
-            }
-        }
-
-        AssertionFailedError getError() {
-            return error;
-        }
-
-    }
-
-    private class ReferenceChecker implements BuildListener {
-        private String[] keys;
-        private boolean[] expectSame;
-        private Object value;
-        private int calls = 0;
-        private AssertionFailedError error;
-
-        ReferenceChecker(String[] keys, boolean[] expectSame, Object value) {
-            this.keys = keys;
-            this.expectSame = expectSame;
-            this.value = value;
-        }
-
-        public void buildStarted(BuildEvent event) {}
-        public void buildFinished(BuildEvent event) {}
-        public void targetFinished(BuildEvent event){}
-        public void taskStarted(BuildEvent event) {}
-        public void taskFinished(BuildEvent event) {}
-        public void messageLogged(BuildEvent event) {}
-
-        public void targetStarted(BuildEvent event) {
-            if (error == null) {
-                try {
-                    String msg = 
-                        "Call " + calls + " refid=\'" + keys[calls] + "\'";
-                    if (value == null) {
-                        Object o = event.getProject().getReference(keys[calls]);
-                        if (expectSame[calls++]) {
-                            assertNull(msg, o);
-                        } else {
-                            assertNotNull(msg, o);
-                        }
-                    } else {
-                        // a rather convoluted equals() test
-                        Path expect = (Path) value;
-                        Path received = (Path) event.getProject().getReference(keys[calls]);
-                        boolean shouldBeEqual = expectSame[calls++];
-                        if (received == null) {
-                            assertTrue(msg, !shouldBeEqual);
-                        } else {
-                            String[] l1 = expect.list();
-                            String[] l2 = received.list();
-                            if (l1.length == l2.length) {
-                                for (int i=0; i<l1.length; i++) {
-                                    if (!l1[i].equals(l2[i])) {
-                                        assertTrue(msg, !shouldBeEqual);
-                                    }
-                                }
-                                assertTrue(msg, shouldBeEqual);
-                            } else {
-                                assertTrue(msg, !shouldBeEqual);
-                            }
-                        }
-                    }
-                } catch (AssertionFailedError e) {
-                    error = e;
-                }
-            }
-        }
-
-        AssertionFailedError getError() {
-            return error;
-        }
-
-    }
-
-    private class InputHandlerChecker implements BuildListener {
-        private InputHandler ih;
-        private AssertionFailedError error;
-
-        InputHandlerChecker(InputHandler value) {
-            ih = value;
-        }
-
-        public void buildStarted(BuildEvent event) {
-            check(event);
-        }
-        public void buildFinished(BuildEvent event) {
-            check(event);
-        }
-        public void targetFinished(BuildEvent event) {
-            check(event);
-        }
-        public void taskStarted(BuildEvent event) {
-            check(event);
-        }
-        public void taskFinished(BuildEvent event) {
-            check(event);
-        }
-        public void messageLogged(BuildEvent event) {
-            check(event);
-        }
-
-        public void targetStarted(BuildEvent event) {
-            check(event);
-        }
-
-        private void check(BuildEvent event) {
-            if (error == null) {
-                try {
-                    assertNotNull(event.getProject().getInputHandler());
-                    assertSame(ih, event.getProject().getInputHandler());
-                } catch (AssertionFailedError e) {
-                    error = e;
-                }
-            }
-        }
-
-        AssertionFailedError getError() {
-            return error;
-        }
-
-    }
-
-}
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/AvailableTest.java b/src/testcases/org/apache/tools/ant/taskdefs/AvailableTest.java
deleted file mode 100644
index 2006590..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/AvailableTest.java
+++ /dev/null
@@ -1,229 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.BuildFileTest;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.util.JavaEnvUtils;
-
-/**
- * @author Nico Seessle <nico@seessle.de>
- */
-public class AvailableTest extends BuildFileTest {
-
-    public AvailableTest(String name) {
-        super(name);
-    }
-
-    public void setUp() {
-        configureProject("src/etc/testcases/taskdefs/available.xml");
-    }
-
-    // Nothing specified -> Fail
-    public void test1() {
-        expectBuildException("test1", "required argument not specified");
-    }
-
-    // Only property specified -> Fail
-    public void test2() {
-        expectBuildException("test2", "required argument not specified");
-    }
-
-    // Only file specified -> Fail
-    public void test3() {
-        expectBuildException("test3", "required argument not specified");
-    }
-
-    // file doesn't exist -> property 'test' == null
-    public void test4() {
-        executeTarget("test4");
-        assertTrue(project.getProperty("test") == null);
-    }
-
-    // file does exist -> property 'test' == 'true'
-    public void test5() {
-        executeTarget("test5");
-        assertEquals("true", project.getProperty("test"));
-    }
-
-    // resource doesn't exist -> property 'test' == null
-    public void test6() {
-        executeTarget("test6");
-        assertTrue(project.getProperty("test") == null);
-    }
-
-    // resource does exist -> property 'test' == 'true'
-    public void test7() {
-        executeTarget("test7");
-        assertEquals("true", project.getProperty("test"));
-    }
-
-    // class doesn't exist -> property 'test' == null
-    public void test8() {
-        executeTarget("test8");
-        assertTrue(project.getProperty("test") == null);
-    }
-
-    // class does exist -> property 'test' == 'true'
-    public void test9() {
-        executeTarget("test9");
-        assertEquals("true", project.getProperty("test"));
-    }
-
-    // All three specified and all three exist -> true
-    public void test10() {
-        executeTarget("test10");
-        assertEquals("true", project.getProperty("test"));
-    }
-
-    // All three specified but class missing -> null
-    public void test11() {
-        executeTarget("test11");
-        assertNull(project.getProperty("test"));
-    }
-
-    // Specified property-name is "" -> true
-    public void test12() {
-        executeTarget("test12");
-        assertNull(project.getProperty("test"));
-        assertEquals("true", project.getProperty(""));
-    }
-
-    // Specified file is "" -> invalid files do not exist
-    public void test13() {
-        executeTarget("test13");
-        assertNull(project.getProperty("test"));
-    }
-
-    // Specified file is "" actually a directory, so it should pass
-    public void test13b() {
-        executeTarget("test13b");
-        assertEquals("true", project.getProperty("test"));
-    }
-
-    // Specified resource is "" -> can such a thing exist?
-    /*
-     * returns non null IBM JDK 1.3 Linux
-     */
-//    public void test14() {
-//        executeTarget("test14");
-//        assertEquals(project.getProperty("test"), null);
-//    }
-
-    // Specified class is "" -> can not exist
-    public void test15() {
-        executeTarget("test15");
-        assertNull(project.getProperty("test"));
-    }
-
-    // Specified dir is "" -> this is the current directory and should
-    // always exist
-    public void test16() {
-        executeTarget("test16");
-        assertEquals("true", project.getProperty("test"));
-    }
-
-    // Specified dir is "../taskdefs" -> should exist since it's the
-    // location of the buildfile used...
-    public void test17() {
-        executeTarget("test17");
-        assertEquals("true", project.getProperty("test"));
-    }
-
-    // Specified dir is "../this_dir_should_never_exist" -> null
-    public void test18() {
-        executeTarget("test18");
-        assertNull(project.getProperty("test"));
-    }
-
-    // Invalid type specified
-    public void test19() {
-        expectBuildException("test19", "Invalid value for type attribute.");
-    }
-
-    // Core class that exists in system classpath is ignored
-    public void test20() {
-        executeTarget("test20");
-        assertNull(project.getProperty("test"));
-    }
-
-    // Core class that exists in system classpath is ignored, but found in specified classpath
-    public void test21() {
-        if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_1)) {
-            // java.* classes are not found in JDK 1.1 even if specified in classpath attribute; test24 shows correct operation
-            return;
-        }
-        executeTarget("test21");
-        assertEquals("true",project.getProperty("test"));
-    }
-
-    // Core class that exists in system classpath is not ignored with ignoresystemclass="false"
-    public void test22() {
-        executeTarget("test22");
-        assertEquals("true",project.getProperty("test"));
-    }
-
-    // Core class that exists in system classpath is not ignored with default ignoresystemclasses value
-    public void test23() {
-        executeTarget("test23");
-        assertEquals("true",project.getProperty("test"));
-    }
-
-    // Class is found in specified classpath
-    public void test24() {
-        executeTarget("test24");
-        assertEquals("true",project.getProperty("test"));
-    }
-}
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/BUnzip2Test.java b/src/testcases/org/apache/tools/ant/taskdefs/BUnzip2Test.java
deleted file mode 100644
index 596fcdd..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/BUnzip2Test.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.BuildFileTest;
-import org.apache.tools.ant.util.FileUtils;
-
-import java.io.IOException;
-
-/**
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- * @version $Revision$
- */
-public class BUnzip2Test extends BuildFileTest {
-
-    public BUnzip2Test(String name) {
-        super(name);
-    }
-
-    public void setUp() {
-        configureProject("src/etc/testcases/taskdefs/bunzip2.xml");
-    }
-
-    public void tearDown() {
-        executeTarget("cleanup");
-    }
-
-    public void testRealTest() throws java.io.IOException {
-        FileUtils fileUtils = FileUtils.newFileUtils();
-        executeTarget("realTest");
-        assertTrue(fileUtils.contentEquals(project.resolveFile("expected/asf-logo-huge.tar"),
-                                           project.resolveFile("asf-logo-huge.tar")));
-    }
-}
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/BZip2Test.java b/src/testcases/org/apache/tools/ant/taskdefs/BZip2Test.java
deleted file mode 100644
index 9815567..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/BZip2Test.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.BuildFileTest;
-import org.apache.tools.ant.util.FileUtils;
-
-import java.io.IOException;
-
-/**
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- * @version $Revision$
- */
-public class BZip2Test extends BuildFileTest {
-
-    public BZip2Test(String name) {
-        super(name);
-    }
-
-    public void setUp() {
-        configureProject("src/etc/testcases/taskdefs/bzip2.xml");
-    }
-
-    public void tearDown() {
-        executeTarget("cleanup");
-    }
-
-    public void testRealTest() throws java.io.IOException {
-        FileUtils fileUtils = FileUtils.newFileUtils();
-        executeTarget("realTest");
-        assertTrue(fileUtils.contentEquals(project.resolveFile("expected/asf-logo-huge.tar.bz2"),
-                                           project.resolveFile("asf-logo-huge.tar.bz2")));
-    }
-
-    public void testDateCheck(){
-        executeTarget("testDateCheck");
-        String log = getLog();
-        assertTrue(
-            "Expecting message ending with 'asf-logo.gif.bz2 is up to date.' but got '" + log + "'",
-            log.endsWith("asf-logo.gif.bz2 is up to date."));
-    }
-
-}
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/BasenameTest.java b/src/testcases/org/apache/tools/ant/taskdefs/BasenameTest.java
deleted file mode 100644
index 02d34a6..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/BasenameTest.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import java.io.File;
-import org.apache.tools.ant.BuildFileTest;
-
-/**
- * @author Diane Holt <holtdl@apache.org> 
- */
-public class BasenameTest extends BuildFileTest { 
-    
-    public BasenameTest(String name) { 
-        super(name);
-    }    
-    
-    public void setUp() { 
-        configureProject("src/etc/testcases/taskdefs/basename.xml");
-    }
-
-    public void test1() { 
-        expectBuildException("test1", "required attribute missing");
-    }
-
-    public void test2() { 
-        expectBuildException("test2", "required attribute missing");
-    }
-
-    public void test3() { 
-        expectBuildException("test3", "required attribute missing");
-    }
-
-    public void test4() { 
-        executeTarget("test4");
-        String expected = "foo.txt";
-        String checkprop = project.getProperty("file.w.suf");
-        if (!checkprop.equals(expected)) { 
-            fail("basename failed");
-        }
-    }
-    
-    public void test5() { 
-        executeTarget("test5");
-        String expected = "foo";
-        String checkprop = project.getProperty("file.wo.suf");
-        if (!checkprop.equals(expected)) { 
-            fail("basename failed");
-        }
-    }
-    
-}
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/CVSPassTest.java b/src/testcases/org/apache/tools/ant/taskdefs/CVSPassTest.java
deleted file mode 100644
index 28085de..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/CVSPassTest.java
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import java.io.*;
-import org.apache.tools.ant.*;
-import org.apache.tools.ant.BuildFileTest;
-
-/**
- * Tests CVSLogin task.
- *
- * @author <a href="mailto:jeff@custommonkey.org">Jeff Martin</a>
- */
-public class CVSPassTest extends BuildFileTest { 
-    private final String EOL = System.getProperty("line.separator");
-    private final String JAKARTA_URL =
-        ":pserver:anoncvs@jakarta.apache.org:/home/cvspublic Ay=0=h<Z";
-    private final String XML_URL =
-        ":pserver:anoncvs@xml.apache.org:/home/cvspublic Ay=0=h<Z";
-    private final String TIGRIS_URL =
-        ":pserver:guest@cvs.tigris.org:/cvs AIbdZ,";
-    
-    
-    public CVSPassTest(String name) { 
-        super(name);
-    }
-
-    public void setUp() { 
-        configureProject("src/etc/testcases/taskdefs/cvspass.xml");
-    }
-
-    public void testNoCVSRoot() { 
-        try{
-            executeTarget("test1");
-            fail("BuildException not thrown");
-        }catch(BuildException e){
-            assertEquals("cvsroot is required", e.getMessage());
-        }
-    }
-
-    public void testNoPassword() { 
-        try{
-            executeTarget("test2");
-            fail("BuildException not thrown");
-        }catch(BuildException e){
-            assertEquals("password is required", e.getMessage());
-        }
-    }
-
-    public void tearDown() {
-        executeTarget("cleanup");
-    }
-
-    public void testPassFile() throws Exception { 
-        executeTarget("test3");
-        File f = new File(getProjectDir(), "testpassfile.tmp");
-
-        assertTrue( "Passfile "+f+" not created", f.exists());
-
-        assertEquals(JAKARTA_URL+EOL, readFile(f));
-
-    }
-
-    public void testPassFileDuplicateEntry() throws Exception { 
-        executeTarget("test4");
-        File f = new File(getProjectDir(), "testpassfile.tmp");
-
-        assertTrue( "Passfile "+f+" not created", f.exists());
-
-        assertEquals(
-            JAKARTA_URL+ EOL+
-            TIGRIS_URL+ EOL,
-            readFile(f));
-    }
-
-    public void testPassFileMultipleEntry() throws Exception { 
-        executeTarget("test5");
-        File f = new File(getProjectDir(), "testpassfile.tmp");
-
-        assertTrue( "Passfile "+f+" not created", f.exists());
-
-        assertEquals(
-            JAKARTA_URL+ EOL+
-            XML_URL+ EOL+
-            TIGRIS_URL+ EOL,
-            readFile(f));
-    }
-
-    private String readFile(File f) throws Exception {
-        BufferedReader reader = null; 
-        
-        try {
-            reader = new BufferedReader(new FileReader(f));
-
-            StringBuffer buf = new StringBuffer();
-            String line=null;
-            while((line=reader.readLine())!=null){
-                buf.append(line + EOL);
-            }
-            return buf.toString();
-        } finally {
-            if (reader != null) {
-                reader.close();
-            }
-        }
-    }
-}
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/ChecksumTest.java b/src/testcases/org/apache/tools/ant/taskdefs/ChecksumTest.java
deleted file mode 100644
index d8d558c..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/ChecksumTest.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.BuildFileTest;
-import org.apache.tools.ant.util.FileUtils;
-
-import java.io.IOException;
-
-/**
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- * @version $Revision$
- */
-public class ChecksumTest extends BuildFileTest {
-
-    public ChecksumTest(String name) {
-        super(name);
-    }
-
-    public void setUp() { 
-        configureProject("src/etc/testcases/taskdefs/checksum.xml");
-    }
-
-    public void tearDown() {
-        executeTarget("cleanup");
-    }
-
-    public void testCreateMd5() throws IOException {
-        FileUtils fileUtils = FileUtils.newFileUtils();
-        executeTarget("createMd5");
-        assertTrue(fileUtils.contentEquals(project.resolveFile("expected/asf-logo.gif.md5"),
-                                           project.resolveFile("../asf-logo.gif.md5")));
-    }
-
-    public void testSetProperty() {
-        executeTarget("setProperty");
-        assertEquals("0541d3df42520911f268abc730f3afe0",
-                     project.getProperty("logo.md5"));
-        assertTrue(!project.resolveFile("../asf-logo.gif.MD5").exists());
-    }
-
-    public void testVerifyAsTask() {
-        testVerify("verifyAsTask");
-        assertNotNull(project.getProperty("no.logo.md5"));
-        assertEquals("false", project.getProperty("no.logo.md5"));
-    }
-
-    public void testVerifyAsCondition() {
-        testVerify("verifyAsCondition");
-        assertNull(project.getProperty("no.logo.md5"));
-    }
-
-    private void testVerify(String target) {
-        assertNull(project.getProperty("logo.md5"));
-        assertNull(project.getProperty("no.logo.md5"));
-        executeTarget(target);
-        assertNotNull(project.getProperty("logo.md5"));
-        assertEquals("true", project.getProperty("logo.md5"));
-    }
-
-}
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/ConcatTest.java b/src/testcases/org/apache/tools/ant/taskdefs/ConcatTest.java
deleted file mode 100644
index c8089de..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/ConcatTest.java
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.BuildFileTest;
-
-import java.io.File;
-
-/**
- * A test class for the 'concat' task, used to concatenate a series of
- * files into a single stream.
- *
- * @author <a href="mailto:derek@activate.net">Derek Slager</a>
- */
-public class ConcatTest 
-    extends BuildFileTest {
-
-    /**
-     * The name of the temporary file.
-     */
-    private static final String tempFile = "concat.tmp";
-
-    /**
-     * The name of the temporary file.
-     */
-    private static final String tempFile2 = "concat.tmp.2";
-
-    /**
-     * Required constructor.
-     */
-    public ConcatTest(String name) {
-        super(name);
-    }
-
-    /**
-     * Test set up, called by the unit test framework prior to each
-     * test.
-     */
-    public void setUp() {
-        configureProject("src/etc/testcases/taskdefs/concat.xml");
-    }
-
-    /**
-     * Test tear down, called by the unit test framework prior to each
-     * test.
-     */
-    public void tearDown() {
-        // Remove temporary files.
-        String[] rm = new String[] { tempFile, tempFile2 };
-        for (int i = 0; i < rm.length; i++) {
-            File f = new File(getProjectDir(), rm[i]);
-            if (f.exists()) {
-                f.delete();
-            }
-        }
-    }
-
-    /**
-     * Expect an exception when insufficient information is provided.
-     */
-    public void test1() {
-        expectBuildException("test1", "Insufficient information.");
-    }
-
-    /**
-     * Expect an exception when the destination file is invalid.
-     */
-    public void test2() {
-        expectBuildException("test2", "Invalid destination file.");
-    }
-
-    /**
-     * Cats the string 'Hello, World!' to a temporary file.
-     */
-    public void test3() {
-
-        File file = new File(getProjectDir(), tempFile);
-        if (file.exists()) {
-            file.delete();
-        }
-
-        executeTarget("test3");
-
-        assertTrue(file.exists());
-    }
-
-    /**
-     * Cats the file created in test3 three times.
-     */
-    public void test4() {
-
-        test3();
-
-        File file = new File(getProjectDir(), tempFile);
-        final long origSize = file.length();
-
-        executeTarget("test4");
-
-        File file2 = new File(getProjectDir(), tempFile2);
-        final long newSize = file2.length();
-
-        assertEquals(origSize * 3, newSize);
-    }
-
-    /**
-     * Cats the string 'Hello, World!' to the console.
-     */
-    public void test5() {
-        expectLog("test5", "Hello, World!");
-    }
-
-}
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/ConditionTest.java b/src/testcases/org/apache/tools/ant/taskdefs/ConditionTest.java
deleted file mode 100644
index 92a5c59..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/ConditionTest.java
+++ /dev/null
@@ -1,259 +0,0 @@
-/*
- *  The Apache Software License, Version 1.1
- *
- *  Copyright (c) 2002 The Apache Software Foundation.  All rights
- *  reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions
- *  are met:
- *
- *  1. Redistributions of source code must retain the above copyright
- *  notice, this list of conditions and the following disclaimer.
- *
- *  2. Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in
- *  the documentation and/or other materials provided with the
- *  distribution.
- *
- *  3. The end-user documentation included with the redistribution, if
- *  any, must include the following acknowlegement:
- *  "This product includes software developed by the
- *  Apache Software Foundation (http://www.apache.org/)."
- *  Alternately, this acknowlegement may appear in the software itself,
- *  if and wherever such third-party acknowlegements normally appear.
- *
- *  4. The names "The Jakarta Project", "Ant", and "Apache Software
- *  Foundation" must not be used to endorse or promote products derived
- *  from this software without prior written permission. For written
- *  permission, please contact apache@apache.org.
- *
- *  5. Products derived from this software may not be called "Apache"
- *  nor may "Apache" appear in their names without prior written
- *  permission of the Apache Group.
- *
- *  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- *  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- *  OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- *  DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- *  ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- *  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- *  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- *  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- *  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- *  SUCH DAMAGE.
- *  ====================================================================
- *
- *  This software consists of voluntary contributions made by many
- *  individuals on behalf of the Apache Software Foundation.  For more
- *  information on the Apache Software Foundation, please see
- *  <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.BuildFileTest;
-import java.lang.reflect.InvocationTargetException;
-
-/**
- * @author steve_l
- * @created 13 January 2002
- */
-public class ConditionTest extends BuildFileTest {
-
-    /**
-     * Constructor for the ConditionTest object
-     *
-     * @param name we dont know
-     */
-    public ConditionTest(String name) {
-        super(name);
-    }
-
-
-    /**
-     * The JUnit setup method
-     */
-    public void setUp() {
-        configureProject("src/etc/testcases/taskdefs/condition.xml");
-    }
-
-
-    /**
-     * The teardown method for JUnit
-     */
-    public void tearDown() {
-        executeTarget("cleanup");
-    }
-
-    public void testBasic() {
-       expectPropertySet("basic","basic"); 
-    }
-
-    public void testConditionIncomplete() {
-        expectSpecificBuildException("condition-incomplete", 
-                                     "property attribute has been omitted",
-                                     "The property attribute is required."); 
-    }
-    
-    public void testConditionEmpty() {
-        expectSpecificBuildException("condition-empty", 
-                                     "no conditions",
-                                     "You must nest a condition into <condition>"); 
-    }    
-
-    public void testShortcut() {
-        expectPropertySet("shortcut","shortcut","set"); 
-    }
-    
-    public void testUnset() {
-        expectPropertyUnset("dontset","dontset"); 
-    }
-  
-    public void testSetValue() {
-        expectPropertySet("setvalue","setvalue","woowoo"); 
-    }
-    
-    public void testNegation() {
-        expectPropertySet("negation","negation"); 
-    }
-    
-    public void testNegationFalse() {
-        expectPropertyUnset("negationfalse","negationfalse"); 
-    }
-    
-    public void testNegationIncomplete() {
-        expectSpecificBuildException("negationincomplete", 
-                                     "no conditions in <not>",
-                                     "You must nest a condition into <not>"); 
-    }
-    
-    public void testAnd() {
-        expectPropertySet("and","and"); 
-    }   
-        
-    public void testAndFails() {
-        expectPropertyUnset("andfails","andfails"); 
-    }   
- 
-    public void testAndIncomplete() {
-        expectPropertyUnset("andincomplete","andincomplete"); 
-    } 
-
-    public void testAndempty() {
-        expectPropertySet("andempty","andempty"); 
-    }   
-    
-    public void testOr() {
-        expectPropertySet("or","or"); 
-    }
-
-    public void testOrincomplete() {
-        expectPropertySet("or","or"); 
-    } 
-  
-    public void testOrFails() {
-        expectPropertyUnset("orfails","orfails"); 
-    }   
- 
-    public void testOrboth() {
-        expectPropertySet("orboth","orboth"); 
-    }   
-
-    public void testFilesmatchIdentical() {
-        expectPropertySet("filesmatch-identical","filesmatch-identical"); 
-    }       
-    
-    
-    public void testFilesmatchIncomplete() {
-        expectSpecificBuildException("filesmatch-incomplete", 
-                                     "Missing file2 attribute",
-                                     "both file1 and file2 are required in filesmatch"); 
-    }
-    
-    public void testFilesmatchOddsizes() {
-        expectPropertyUnset("filesmatch-oddsizes","filesmatch-oddsizes"); 
-    }    
-    
-    public void testFilesmatchExistence() {
-        expectPropertyUnset("filesmatch-existence", "filesmatch-existence"); 
-    } 
-
-    public void testFilesmatchDifferent() {
-        expectPropertyUnset("filesmatch-different","filesmatch-different"); 
-    } 
-    
-    public void testFilesmatchMatch() {
-        expectPropertySet("filesmatch-match","filesmatch-match"); 
-    }   
-    
-    
-    public void testContains() {
-        expectPropertySet("contains","contains"); 
-    }   
-        
-    
-    public void testContainsDoesnt() {
-        expectPropertyUnset("contains-doesnt","contains-doesnt"); 
-    }   
-
-    public void testContainsAnycase() {
-        expectPropertySet("contains-anycase","contains-anycase"); 
-    } 
-
-    
-    public void testContainsIncomplete1() {
-        expectSpecificBuildException("contains-incomplete1", 
-                    "Missing contains attribute",
-                    "both string and substring are required in contains"); 
-    } 
-    
-    public void testContainsIncomplete2() {
-        expectSpecificBuildException("contains-incomplete2", 
-                    "Missing contains attribute",
-                    "both string and substring are required in contains"); 
-    } 
-    
-    public void testIstrue() {
-        expectPropertySet("istrue","istrue"); 
-    } 
-
-    public void testIstrueNot() {
-        expectPropertyUnset("istrue-not","istrue-not"); 
-    } 
- 
-    public void testIstrueFalse() {
-        expectPropertyUnset("istrue-false","istrue-false"); 
-    } 
-
-    
-    public void testIstrueIncomplete1() {
-        expectSpecificBuildException("istrue-incomplete", 
-                    "Missing attribute",
-                    "Nothing to test for truth"); 
-    } 
-
-    public void testIsfalseTrue() {
-        expectPropertyUnset("isfalse-true","isfalse-true"); 
-    } 
-
-    public void testIsfalseNot() {
-        expectPropertySet("isfalse-not","isfalse-not"); 
-    } 
- 
-    public void testIsfalseFalse() {
-        expectPropertySet("isfalse-false","isfalse-false"); 
-    } 
-
-    
-    public void testIsfalseIncomplete1() {
-        expectSpecificBuildException("isfalse-incomplete", 
-                    "Missing attribute",
-                    "Nothing to test for falsehood"); 
-    }     
-    
-}
-
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/CopyTest.java b/src/testcases/org/apache/tools/ant/taskdefs/CopyTest.java
deleted file mode 100644
index 2eda152..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/CopyTest.java
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.BuildFileTest;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.util.FileUtils;
-import org.apache.tools.ant.util.JavaEnvUtils;
-import java.io.File;
-import java.io.IOException;
-
-/**
- * Tests FileSet using the Copy task.
- *
- * @author David Rees <dave@ubiqsoft.com>
- */
-public class CopyTest extends BuildFileTest {
-
-    public CopyTest(String name) {
-        super(name);
-    }
-
-    public void setUp() {
-        configureProject("src/etc/testcases/taskdefs/copy.xml");
-    }
-
-    public void test1() {
-        executeTarget("test1");
-        File f = new File(getProjectDir(), "copytest1.tmp");
-        if ( !f.exists()) {
-            fail("Copy failed");
-        }
-    }
-
-    public void tearDown() {
-        executeTarget("cleanup");
-    }
-
-    public void test2() {
-        executeTarget("test2");
-        File f = new File(getProjectDir(), "copytest1dir/copy.xml");
-        if ( !f.exists()) {
-            fail("Copy failed");
-        }
-    }
-
-    public void test3() {
-        executeTarget("test3");
-        File file3  = new File(getProjectDir(), "copytest3.tmp");
-        assertTrue(file3.exists());
-        File file3a = new File(getProjectDir(), "copytest3a.tmp");
-        assertTrue(file3a.exists());
-        File file3b = new File(getProjectDir(), "copytest3b.tmp");
-        assertTrue(file3b.exists());
-        File file3c = new File(getProjectDir(), "copytest3c.tmp");
-        assertTrue(file3c.exists());
-
-        //file length checks rely on touch generating a zero byte file
-        if(file3.length()==0) {
-            fail("could not overwrite an existing, older file");
-        }
-        if(file3c.length()!=0) {
-            fail("could not force overwrite an existing, newer file");
-        }
-        if(file3b.length()==0) {
-            fail("unexpectedly overwrote an existing, newer file");
-        }
-
-        //file time checks for java1.2+
-        if (!JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_1)) {
-            assertTrue(file3a.lastModified()==file3.lastModified());
-            assertTrue(file3c.lastModified()<file3a.lastModified());
-        }
-
-    }
-
-    public void testFilterSet() throws IOException {
-        executeTarget("testFilterSet");
-        FileUtils fileUtils = FileUtils.newFileUtils();
-        File tmp  = new File(getProjectDir(), "copy.filterset.tmp");
-        File check  = new File(getProjectDir(), "expected/copy.filterset.filtered");
-        assertTrue(tmp.exists());
-        assertTrue(fileUtils.contentEquals(tmp, check));
-    }
-
-    public void testFilterChain() throws IOException {
-        executeTarget("testFilterChain");
-        FileUtils fileUtils = FileUtils.newFileUtils();
-        File tmp  = new File(getProjectDir(), "copy.filterchain.tmp");
-        File check  = new File(getProjectDir(), "expected/copy.filterset.filtered");
-        assertTrue(tmp.exists());
-        assertTrue(fileUtils.contentEquals(tmp, check));
-    }
-
-    public void testSingleFileFileset() {
-        executeTarget("test_single_file_fileset");
-        File file  = new File(getProjectDir(),
-                                        "copytest_single_file_fileset.tmp");
-        assertTrue(file.exists());
-    }
-}
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/CopydirTest.java b/src/testcases/org/apache/tools/ant/taskdefs/CopydirTest.java
deleted file mode 100644
index e04053f..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/CopydirTest.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import java.io.File;
-import org.apache.tools.ant.BuildFileTest;
-
-/**
- * @author Nico Seessle <nico@seessle.de> 
- */
-public class CopydirTest extends BuildFileTest { 
-    
-    public CopydirTest(String name) { 
-        super(name);
-    }    
-    
-    public void setUp() { 
-        configureProject("src/etc/testcases/taskdefs/copydir.xml");
-    }
-    
-    public void tearDown() {
-        executeTarget("cleanup");
-    }
-    
-    public void test1() { 
-        expectBuildException("test1", "required argument not specified");
-    }
-
-    public void test2() { 
-        expectBuildException("test2", "required argument not specified");
-    }
-
-    public void test3() { 
-        expectBuildException("test3", "required argument not specified");
-    }
-
-    public void test4() { 
-        expectLog("test4", "DEPRECATED - The copydir task is deprecated.  Use copy instead.Warning: src == dest");
-    }
-    
-    public void test5() { 
-        executeTarget("test5");
-        java.io.File f = new java.io.File(getProjectDir(), "../taskdefs.tmp");
-        if (!f.exists() || !f.isDirectory()) { 
-            fail("Copy failed");
-        }
-        // We keep this, so we have something to delete in later tests :-)
-    }
-
-    public void test6() { 
-        expectBuildException("test6", "target is file");
-    }
-    
-}
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/CopyfileTest.java b/src/testcases/org/apache/tools/ant/taskdefs/CopyfileTest.java
deleted file mode 100644
index ec575b5..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/CopyfileTest.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import java.io.File;
-import org.apache.tools.ant.BuildFileTest;
-
-/**
- * @author Nico Seessle <nico@seessle.de> 
- */
-public class CopyfileTest extends BuildFileTest { 
-    
-    public void test6() { 
-        expectBuildException("test6", "target is directory");
-    }
-
-    public CopyfileTest(String name) { 
-        super(name);
-    }    
-    
-    public void setUp() { 
-        configureProject("src/etc/testcases/taskdefs/copyfile.xml");
-    }
-    
-    public void tearDown() {
-        executeTarget("cleanup");
-    }
-    
-    public void test1() { 
-        expectBuildException("test1", "required argument not specified");
-    }
-
-    public void test2() { 
-        expectBuildException("test2", "required argument not specified");
-    }
-
-    public void test3() { 
-        expectBuildException("test3", "required argument not specified");
-    }
-
-    public void test4() { 
-        expectLog("test4", "DEPRECATED - The copyfile task is deprecated.  Use copy instead.Warning: src == dest");
-    }
-
-    public void test5() { 
-        executeTarget("test5");
-        java.io.File f = new java.io.File(getProjectDir(), "copyfile.tmp");
-        if (f.exists()) { 
-            f.delete();
-        } else {
-            fail("Copy failed");
-        }
-    }
-}
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/DeleteTest.java b/src/testcases/org/apache/tools/ant/taskdefs/DeleteTest.java
deleted file mode 100644
index 057e991..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/DeleteTest.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000,2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.BuildFileTest;
-
-/**
- * @author Nico Seessle <nico@seessle.de> 
- */
-public class DeleteTest extends BuildFileTest { 
-    
-    public DeleteTest(String name) { 
-        super(name);
-    }    
-    
-    public void setUp() { 
-        configureProject("src/etc/testcases/taskdefs/delete.xml");
-    }
-
-    public void tearDown() {
-        executeTarget("cleanup");
-    }
-    
-    public void test1() { 
-        expectBuildException("test1", "required argument not specified");
-    }
-
-    public void test2() { 
-        executeTarget("test2");
-    }
-
-    public void test4() { 
-        executeTarget("test4");
-    }
-}
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/DeltreeTest.java b/src/testcases/org/apache/tools/ant/taskdefs/DeltreeTest.java
deleted file mode 100644
index f1c77e5..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/DeltreeTest.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.BuildFileTest;
-
-/**
- * @author Nico Seessle <nico@seessle.de> 
- */
-public class DeltreeTest extends BuildFileTest { 
-    
-    public DeltreeTest(String name) { 
-        super(name);
-    }    
-    
-    public void setUp() { 
-        configureProject("src/etc/testcases/taskdefs/deltree.xml");
-    }
-
-    public void test1() { 
-        expectBuildException("test1", "required argument not specified");
-    }
-
-    public void test2() { 
-        // We try to delete the directory created in CopydirTest
-        executeTarget("test2");
-    }
-
-}
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/DemuxOutputTask.java b/src/testcases/org/apache/tools/ant/taskdefs/DemuxOutputTask.java
deleted file mode 100644
index 68a7f33..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/DemuxOutputTask.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.*;
-import org.apache.tools.ant.BuildFileTest;
-import java.util.Random;
-/**
- * A simple task that prints to System.out and System.err and then catches
- * the output which it then check. If the output does not match, an
- * exception is thrown
- *
- * @since 1.5
- * @author Conor MacNeill
- * @created 21 February 2002
- */
-public class DemuxOutputTask extends Task {
-    private String randomOutValue;
-    private String randomErrValue;
-    private boolean outputReceived = false;
-    private boolean errorReceived = false;
-    
-    public void execute() {
-        Random generator = new Random();
-        randomOutValue = "Output Value is " + generator.nextInt();
-        randomErrValue = "Error Value is " + generator.nextInt();
-        
-        System.out.println(randomOutValue);
-        System.err.println(randomErrValue);
-        if (!outputReceived) {
-            throw new BuildException("Did not receive output");
-        } 
-        
-        if (!errorReceived) {
-            throw new BuildException("Did not receive error");
-        }
-    }
-
-    protected void handleOutput(String line) {
-        if (line.length() != 0 && !line.equals(randomOutValue)) {
-            String message = "Received = [" + line + "], expected = [" 
-                + randomOutValue + "]";
-            throw new BuildException(message);
-        }
-        outputReceived = true;
-    }
-    
-    protected void handleErrorOutput(String line) {
-        if (line.length() != 0 && !line.equals(randomErrValue)) {
-            String message = "Received = [" + line + "], expected = [" 
-                + randomErrValue + "]";
-            throw new BuildException(message);
-        }
-        errorReceived = true;
-    }
-    
-    
-}
-
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/DependSetTest.java b/src/testcases/org/apache/tools/ant/taskdefs/DependSetTest.java
deleted file mode 100644
index f77a1d5..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/DependSetTest.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.BuildFileTest;
-
-/**
- * Tests DependSet.
- *
- * @author <a href="mailto:cstrong@arielpartners.com">Craeg Strong</a>
- */
-public class DependSetTest extends BuildFileTest { 
-    
-    public DependSetTest(String name) { 
-        super(name);
-    }
-
-    public void setUp() { 
-        configureProject("src/etc/testcases/taskdefs/dependset.xml");
-    }
-
-    public void test1() { 
-       expectBuildException("test1","At least one <srcfileset> or <srcfilelist> element must be set");
-    }
-
-    public void tearDown() {
-        executeTarget("cleanup");
-    }
-
-    public void test2() { 
-       expectBuildException("test2","At least one <targetfileset> or <targetfilelist> element must be set");
-    }
-
-    public void test3() { 
-       expectBuildException("test1","At least one <srcfileset> or <srcfilelist> element must be set");
-    }
-
-    public void test4() { 
-        executeTarget("test4");
-    }
-
-    public void test5() { 
-        executeTarget("test5");
-        java.io.File f = new java.io.File(getProjectDir(), "older.tmp");
-        if (f.exists()) {
-           fail("dependset failed to remove out of date file " + f.toString());
-        }
-    }
-
-}
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/DirnameTest.java b/src/testcases/org/apache/tools/ant/taskdefs/DirnameTest.java
deleted file mode 100644
index 0bd3f34..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/DirnameTest.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import java.io.File;
-import org.apache.tools.ant.BuildFileTest;
-
-/**
- * @author Diane Holt <holtdl@apache.org> 
- */
-public class DirnameTest extends BuildFileTest { 
-    
-    public DirnameTest(String name) { 
-        super(name);
-    }    
-    
-    public void setUp() { 
-        configureProject("src/etc/testcases/taskdefs/dirname.xml");
-    }
-
-    public void test1() { 
-        expectBuildException("test1", "required attribute missing");
-    }
-
-    public void test2() { 
-        expectBuildException("test2", "required attribute missing");
-    }
-
-    public void test3() { 
-        expectBuildException("test3", "required attribute missing");
-    }
-
-    public void test4() { 
-        executeTarget("test4");
-        String filesep = System.getProperty("file.separator");
-        String expected = filesep + "usr" + filesep + "local";
-        String checkprop = project.getProperty("local.dir");
-        if (!checkprop.equals(expected)) { 
-            fail("dirname failed");
-        }
-    }
-    
-    public void test5() { 
-        executeTarget("test5");
-        String expected = project.getProperty("basedir");
-        String checkprop = project.getProperty("base.dir");
-        if (!checkprop.equals(expected)) { 
-            fail("dirname failed");
-        }
-    }
-    
-}
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/DynamicTask.java b/src/testcases/org/apache/tools/ant/taskdefs/DynamicTask.java
deleted file mode 100644
index d4ea947..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/DynamicTask.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.DynamicConfigurator;
-import org.apache.tools.ant.Task;
-
-public class DynamicTask extends Task implements DynamicConfigurator {
-
-    public void execute() {
-    }
-
-    public void setDynamicAttribute(String name, String value) {
-        project.setNewProperty(name, value);
-    }
-
-    public Object createDynamicElement(String name) {
-        return new Sub();
-    }
-
-    public class Sub implements DynamicConfigurator {
-        public void setDynamicAttribute(String name, String value) {
-            getProject().setNewProperty(name, value);
-        }
-
-        public Object createDynamicElement(String name) {
-            return null;
-        }
-    }
-}
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/DynamicTest.java b/src/testcases/org/apache/tools/ant/taskdefs/DynamicTest.java
deleted file mode 100644
index 86b548f..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/DynamicTest.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.BuildFileTest;
-
-public class DynamicTest extends BuildFileTest { 
-    
-    public DynamicTest(String name) { 
-        super(name);
-    }
-    
-    public void setUp() { 
-        configureProject("src/etc/testcases/taskdefs/dynamictask.xml");
-    }
-
-    public void testSimple() {
-        executeTarget("simple");
-        assertEquals("1", project.getProperty("prop1"));
-        assertEquals("2", project.getProperty("prop2"));
-        assertEquals("3", project.getProperty("prop3"));
-        assertEquals("4", project.getProperty("prop4"));
-    }
-}
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/EchoTest.java b/src/testcases/org/apache/tools/ant/taskdefs/EchoTest.java
deleted file mode 100644
index a8b214d..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/EchoTest.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.BuildFileTest;
-
-/**
- * @author Nico Seessle <nico@seessle.de> 
- */
-public class EchoTest extends BuildFileTest { 
-    
-    public EchoTest(String name) { 
-        super(name);
-    }    
-    
-    public void setUp() { 
-        configureProject("src/etc/testcases/taskdefs/echo.xml");
-    }
-    
-    // Output an empty String
-    public void test1() { 
-        expectLog("test1", "");
-    }
-
-    // Output 'OUTPUT OF ECHO'
-    public void test2() { 
-        expectLog("test2", "OUTPUT OF ECHO");
-    }
-    
-    public void test3() { 
-        expectLog("test3", "\n"+
-                              "    This \n"+
-                              "    is\n"+
-                              "    a \n"+
-                              "    multiline\n"+
-                              "    message\n"+
-                              "    ");
-    }
-}
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/ExecuteJavaTest.java b/src/testcases/org/apache/tools/ant/taskdefs/ExecuteJavaTest.java
deleted file mode 100644
index 16761c5..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/ExecuteJavaTest.java
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.types.Path;
-import org.apache.tools.ant.types.Commandline;
-import org.apache.tools.ant.util.JavaEnvUtils;
-
-import java.io.File;
-
-import junit.framework.TestCase;
-
-/**
- * Simple testcase for the ExecuteJava class - mostly stolen from
- * ExecuteWatchdogTest.
- *
- * @author <a href="mailto:sbailliez@imediation.com">Stephane Bailliez</a>
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- */
-public class ExecuteJavaTest extends TestCase {
-
-    private final static int TIME_OUT = 5000;
-
-    private final static int CLOCK_ERROR=200;
-    private final static int TIME_OUT_TEST=TIME_OUT-CLOCK_ERROR;
-    
-    private ExecuteJava ej;
-    private Project project;
-
-    public ExecuteJavaTest(String name) {
-        super(name);
-    }
-
-    protected void setUp(){
-        ej = new ExecuteJava();
-        ej.setTimeout(new Long(TIME_OUT));
-        project = new Project();
-        project.setBasedir(".");
-        ej.setClasspath(new Path(project, getTestClassPath()));
-    }
-
-    private Commandline getCommandline(int timetorun) throws Exception {
-        Commandline cmd = new Commandline();
-        cmd.setExecutable(TimeProcess.class.getName());
-        cmd.createArgument().setValue(String.valueOf(timetorun));
-        return cmd;
-    }
-
-    public void testNoTimeOut() throws Exception {
-        Commandline cmd = getCommandline(TIME_OUT/2);
-        ej.setJavaCommand(cmd);
-        ej.execute(project);
-        assertTrue("process should not have been killed", !ej.killedProcess());
-    }
-
-    // test that the watchdog ends the process
-    public void testTimeOut() throws Exception {
-        Commandline cmd = getCommandline(TIME_OUT*2);
-        ej.setJavaCommand(cmd);
-        long now = System.currentTimeMillis();
-        ej.execute(project);
-        long elapsed = System.currentTimeMillis() - now;
-        assertTrue("process should have been killed", ej.killedProcess());
-
-        assertTrue("elapse time of "+elapsed
-                   +" ms is less than timeout value of "+TIME_OUT_TEST+" ms", 
-                   elapsed >= TIME_OUT_TEST);
-        assertTrue("elapse time of "+elapsed
-                   +" ms is greater than run value of "+(TIME_OUT*2)+" ms", 
-                   elapsed < TIME_OUT*2);
-    }
-
-
-    /**
-     * Dangerous method to obtain the classpath for the test. This is
-     * severely tighted to the build.xml properties.
-     */
-    private static String getTestClassPath(){
-        String classpath = System.getProperty("build.tests");
-        if (classpath == null) {
-            System.err.println("WARNING: 'build.tests' property is not available !");
-            classpath = System.getProperty("java.class.path");
-        }
-
-        // JDK 1.1 needs classes.zip in -classpath argument
-        if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_1)) {
-            classpath +=   File.pathSeparator
-                + System.getProperty("java.home")
-                + File.separator + "lib"
-                + File.separator + "classes.zip";
-        }
-
-        return classpath;
-    }
-
-}
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/ExecuteWatchdogTest.java b/src/testcases/org/apache/tools/ant/taskdefs/ExecuteWatchdogTest.java
deleted file mode 100644
index 913bbc2..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/ExecuteWatchdogTest.java
+++ /dev/null
@@ -1,200 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.util.JavaEnvUtils;
-
-import java.net.*;
-import junit.framework.*;
-import java.io.*;
-
-/**
- * Simple testcase for the ExecuteWatchdog class.
- *
- * @author <a href="mailto:sbailliez@imediation.com">Stephane Bailliez</a>
- */
-public class ExecuteWatchdogTest extends TestCase {
-
-    private final static int TIME_OUT = 5000;
-
-    private final static String TEST_CLASSPATH = getTestClassPath();
-
-    private final static int CLOCK_ERROR=200;
-    private final static int TIME_OUT_TEST=TIME_OUT-CLOCK_ERROR;
-    
-    private ExecuteWatchdog watchdog;
-
-    public ExecuteWatchdogTest(String name) {
-        super(name);
-    }
-
-    protected void setUp(){
-        watchdog = new ExecuteWatchdog(TIME_OUT);
-    }
-
-    /**
-     * Dangerous method to obtain the classpath for the test. This is
-     * severely tighted to the build.xml properties.
-     */
-    private static String getTestClassPath(){
-        String classpath = System.getProperty("build.tests");
-        if (classpath == null) {
-            System.err.println("WARNING: 'build.tests' property is not available !");
-            classpath = System.getProperty("java.class.path");
-        }
-
-        // JDK 1.1 needs classes.zip in -classpath argument
-        if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_1)) {
-            classpath +=   File.pathSeparator
-                + System.getProperty("java.home")
-                + File.separator + "lib"
-                + File.separator + "classes.zip";
-        }
-
-        return classpath;
-    }
-
-    private Process getProcess(int timetorun) throws Exception {
-        String[] cmdArray = {
-            "java", "-classpath", TEST_CLASSPATH,
-            TimeProcess.class.getName(), String.valueOf(timetorun)
-        };
-        //System.out.println("Testing with classpath: " + System.getProperty("java.class.path"));
-        return Runtime.getRuntime().exec(cmdArray);
-    }
-
-    private String getErrorOutput(Process p) throws Exception {
-        BufferedReader err = new BufferedReader( new InputStreamReader(p.getErrorStream()) );
-        StringBuffer buf = new StringBuffer();
-        String line;
-        while ( (line = err.readLine()) != null){
-            buf.append(line);
-        }
-        return buf.toString();
-    }
-    
-    private int waitForEnd(Process p) throws Exception {
-        int retcode = p.waitFor();
-        if (retcode != 0){
-            String err = getErrorOutput(p);
-            if (err.length() > 0){
-                System.err.println("ERROR:");
-                System.err.println(err);
-            }
-        }
-        return retcode;
-    }
-
-    public void testNoTimeOut() throws Exception {
-        Process process = getProcess(TIME_OUT/2);
-        watchdog.start(process);
-        int retCode = waitForEnd(process);
-        assertTrue("process should not have been killed", !watchdog.killedProcess());
-        assertEquals(0, retCode);
-    }
-
-    // test that the watchdog ends the process
-    public void testTimeOut() throws Exception {
-        Process process = getProcess(TIME_OUT*2);
-        long now = System.currentTimeMillis();
-        watchdog.start(process);
-        int retCode = process.waitFor();
-        long elapsed = System.currentTimeMillis() - now;
-        assertTrue("process should have been killed", watchdog.killedProcess());
-                //      assertTrue("return code is invalid: " + retCode, retCode!=0);
-        assertTrue("elapse time of "+elapsed+" ms is less than timeout value of "+TIME_OUT_TEST+" ms", elapsed >= TIME_OUT_TEST);
-        assertTrue("elapse time of "+elapsed+" ms is greater than run value of "+(TIME_OUT*2)+" ms", elapsed < TIME_OUT*2);
-    }
-
-    // test a process that runs and failed
-    public void testFailed() throws Exception {
-        Process process = getProcess(-1); // process should abort
-        watchdog.start(process);
-        int retCode = process.waitFor();
-        assertTrue("process should not have been killed", !watchdog.killedProcess());
-        assertTrue("return code is invalid: " + retCode, retCode!=0);
-    }
-
-    public void testManualStop() throws Exception {
-        final Process process = getProcess(TIME_OUT*2);
-        watchdog.start(process);
-
-        // I assume that starting this takes less than TIME_OUT/2 ms...
-        Thread thread = new Thread(){
-                public void run(){
-                    try {
-                        process.waitFor();
-                    } catch(InterruptedException e){
-                        // not very nice but will do the job
-                        fail("process interrupted in thread");
-                    }
-                }
-        };
-        thread.start();
-
-        // wait for TIME_OUT/2, there should be about TIME_OUT/2 ms remaining before timeout
-        thread.join(TIME_OUT/2);
-
-         // now stop the watchdog.
-        watchdog.stop();
-
-        // wait for the thread to die, should be the end of the process
-        thread.join();
-
-        // process should be dead and well finished
-        assertEquals(0, process.exitValue());
-        assertTrue("process should not have been killed", !watchdog.killedProcess());
-    }
-}
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/FailTest.java b/src/testcases/org/apache/tools/ant/taskdefs/FailTest.java
deleted file mode 100644
index 5631391..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/FailTest.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.BuildFileTest;
-
-/**
- * @author Nico Seessle <nico@seessle.de> 
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> 
- */
-public class FailTest extends BuildFileTest { 
-    
-    public FailTest(String name) { 
-        super(name);
-    }    
-    
-    public void setUp() { 
-        configureProject("src/etc/testcases/taskdefs/fail.xml");
-    }
-
-    public void test1() { 
-        expectBuildException("test1", "it is required to fail :-)");
-    }
-
-    public void test2() { 
-        expectSpecificBuildException("test2", 
-            "it is required to fail :-)",
-            "test2");
-    }
-    
-    public void testText() { 
-        expectSpecificBuildException("testText",
-            "it is required to fail :-)",
-            "testText");
-    }
-    
-    public void testIf() {
-        try {
-            executeTarget("testIf");
-        } catch (BuildException be) {
-            fail("foo has not been defined, testIf must not fail");
-        }
-        project.setProperty("foo", "");
-        expectBuildException("testIf", "testIf must fail if foo has been set");
-    }
-
-    public void testUnless() {
-        expectBuildException("testUnless", 
-                             "testUnless must fail unless foo has been set");
-        project.setProperty("foo", "");
-        try {
-            executeTarget("testUnless");
-        } catch (BuildException be) {
-            fail("foo has been defined, testUnless must not fail");
-        }
-    }
-}
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/FilterTest.java b/src/testcases/org/apache/tools/ant/taskdefs/FilterTest.java
deleted file mode 100644
index a8ce987..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/FilterTest.java
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileReader;
-import java.io.IOException;
-import org.apache.tools.ant.BuildFileTest;
-
-/**
- * @author Nico Seessle <nico@seessle.de> 
- */
-public class FilterTest extends BuildFileTest { 
-      
-    public FilterTest(String name) { 
-        super(name);
-    }    
-    
-    public void setUp() { 
-        configureProject("src/etc/testcases/taskdefs/filter.xml");
-    }
-
-    public void tearDown() {
-        executeTarget("cleanup");
-    }
-    
-    public void test1() { 
-        expectBuildException("test1", "required argument missing");
-    }
-
-    public void test2() { 
-        expectBuildException("test2", "required argument missing");
-    }
-
-    public void test3() { 
-        expectBuildException("test3", "required argument missing");
-    }
-    
-    public void test4() { 
-        executeTarget("test4");
-    }
-    
-    public void test5() {
-        executeTarget("test5");
-        assertEquals("2000",
-                     getFilteredFile("5", "filtered.tmp"));
-    }
-    
-
-    public void test6() {
-        executeTarget("test6");
-        assertEquals("2000",
-                     getFilteredFile("6", "taskdefs.tmp/filter1.txt"));
-    }
-
-    public void test7() {
-        executeTarget("test7");
-        assertEquals("<%@ include file=\"root/some/include.jsp\"%>",
-                     getFilteredFile("7", "filtered.tmp"));
-    }
-
-    public void test8() {
-        executeTarget("test8");
-        assertEquals("<%@ include file=\"root/some/include.jsp\"%>",
-                     getFilteredFile("8", "taskdefs.tmp/filter2.txt"));
-    }
-    
-    private String getFilteredFile(String testNumber, String filteredFile) {
-    
-        String line = null;
-        File f = new File(getProjectDir(), filteredFile);
-        if (!f.exists()) {
-            fail("filter test"+testNumber+" failed");
-        } else {
-            BufferedReader in = null;
-            try {
-                in = new BufferedReader(new FileReader(f));
-            } catch (FileNotFoundException fnfe) {
-                fail("filter test"+testNumber+" failed, filtered file: " + f.toString() + " not found");
-            }
-            try {
-                line = in.readLine();
-                in.close();
-            } catch (IOException ioe) {
-                fail("filter test"+testNumber+" failed.  IOException while reading filtered file: " + ioe);
-            }
-        }
-        f.delete();
-        return line;
-    }
-}
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/FixCrLfTest.java b/src/testcases/org/apache/tools/ant/taskdefs/FixCrLfTest.java
deleted file mode 100644
index 2408918..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/FixCrLfTest.java
+++ /dev/null
@@ -1,215 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import java.io.*;
-
-import junit.framework.AssertionFailedError;
-import org.apache.tools.ant.BuildFileTest;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.util.JavaEnvUtils;
-
-/**
- * @author <a href="mailto:pbwest@powerup.com.au">Peter B. West</a>
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- */
-public class FixCrLfTest extends BuildFileTest {
-
-    public FixCrLfTest(String name) {
-        super(name);
-    }
-
-    public void setUp() { 
-        configureProject("src/etc/testcases/taskdefs/fixcrlf/build.xml");
-    }
-    
-    public void tearDown() { 
-        executeTarget("cleanup");
-    }
-    
-    public void test1() throws IOException { 
-        executeTarget("test1");
-        assertEqualContent(new File("src/etc/testcases/taskdefs/fixcrlf/expected/Junk1.java"),
-                           new File("src/etc/testcases/taskdefs/fixcrlf/result/Junk1.java"));
-    }
-    
-    public void test2() throws IOException { 
-        executeTarget("test2");
-        assertEqualContent(new File("src/etc/testcases/taskdefs/fixcrlf/expected/Junk2.java"),
-                           new File("src/etc/testcases/taskdefs/fixcrlf/result/Junk2.java"));
-    }
-    
-    public void test3() throws IOException { 
-        executeTarget("test3");
-        assertEqualContent(new File("src/etc/testcases/taskdefs/fixcrlf/expected/Junk3.java"),
-                           new File("src/etc/testcases/taskdefs/fixcrlf/result/Junk3.java"));
-    }
-    
-    public void test4() throws IOException { 
-        executeTarget("test4");
-        assertEqualContent(new File("src/etc/testcases/taskdefs/fixcrlf/expected/Junk4.java"),
-                           new File("src/etc/testcases/taskdefs/fixcrlf/result/Junk4.java"));
-    }
-    
-    public void test5() throws IOException { 
-        executeTarget("test5");
-        assertEqualContent(new File("src/etc/testcases/taskdefs/fixcrlf/expected/Junk5.java"),
-                           new File("src/etc/testcases/taskdefs/fixcrlf/result/Junk5.java"));
-    }
-    
-    public void test6() throws IOException { 
-        executeTarget("test6");
-        assertEqualContent(new File("src/etc/testcases/taskdefs/fixcrlf/expected/Junk6.java"),
-                           new File("src/etc/testcases/taskdefs/fixcrlf/result/Junk6.java"));
-    }
-    
-    public void test7() throws IOException { 
-        executeTarget("test7");
-        assertEqualContent(new File("src/etc/testcases/taskdefs/fixcrlf/expected/Junk7.java"),
-                           new File("src/etc/testcases/taskdefs/fixcrlf/result/Junk7.java"));
-    }
-    
-    public void test8() throws IOException {  
-        executeTarget("test8");
-        assertEqualContent(new File("src/etc/testcases/taskdefs/fixcrlf/expected/Junk8.java"),
-                           new File("src/etc/testcases/taskdefs/fixcrlf/result/Junk8.java"));
-    }
-    
-    public void test9() throws IOException { 
-        executeTarget("test9");
-        assertEqualContent(new File("src/etc/testcases/taskdefs/fixcrlf/expected/Junk9.java"),
-                           new File("src/etc/testcases/taskdefs/fixcrlf/result/Junk9.java"));
-    }
-    
-    public void testMacLines() throws IOException { 
-        executeTarget("testMacLines");
-        assertEqualContent(new File("src/etc/testcases/taskdefs/fixcrlf/expected/Mac2Unix"),
-                           new File("src/etc/testcases/taskdefs/fixcrlf/result/Mac2Unix"));
-    }
-
-    public void testNoOverwrite() throws IOException {
-        executeTarget("test1");
-        File result = 
-            new File("src/etc/testcases/taskdefs/fixcrlf/result/Junk1.java");
-        long modTime = result.lastModified();
-
-        /*
-         * Sleep for some time to make sure a newer file would get a
-         * more recent timestamp according to the file system's
-         * granularity (should be > 2s to account for Windows FAT).
-         */
-        try {
-            Thread.currentThread().sleep(5000);
-        } catch (InterruptedException ie) {
-            fail(ie.getMessage());
-        } // end of try-catch
-
-        /* 
-         * make sure we get a new Project instance or the target won't get run
-         * a second time.
-         */
-        configureProject("src/etc/testcases/taskdefs/fixcrlf/build.xml");
-
-        executeTarget("test1");
-        result = 
-            new File("src/etc/testcases/taskdefs/fixcrlf/result/Junk1.java");
-        assertEquals(modTime, result.lastModified());
-    }
-
-    public void testEncoding() throws IOException { 
-        if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_1)) {
-            // UTF16 is not supported in JDK 1.1
-            return;
-        }
-        executeTarget("testEncoding");
-        assertEqualContent(new File("src/etc/testcases/taskdefs/fixcrlf/expected/input.lf.utf16"),
-                           new File("src/etc/testcases/taskdefs/fixcrlf/result/input.crlf.utf16"));
-    }
-    
-    public void testLongLines() throws IOException { 
-        executeTarget("testLongLines");
-        assertEqualContent(new File("src/etc/testcases/taskdefs/fixcrlf/expected/longlines.lf"),
-                           new File("src/etc/testcases/taskdefs/fixcrlf/result/longlines.crlf"));
-    }
-    
-    public void assertEqualContent(File expect, File result) 
-        throws AssertionFailedError, IOException {
-        if (!result.exists()) {
-            fail("Expected file "+result+" doesn\'t exist");
-        }
-
-        InputStream inExpect = null;
-        InputStream inResult = null;
-        try {
-            inExpect = new BufferedInputStream(new FileInputStream(expect));
-            inResult = new BufferedInputStream(new FileInputStream(result));
-
-            int expectedByte = inExpect.read();
-            while (expectedByte != -1) {
-                assertEquals(expectedByte, inResult.read());
-                expectedByte = inExpect.read();
-            }
-            assertEquals("End of file", -1, inResult.read());
-        } finally {
-            if (inResult != null) {
-                inResult.close();
-            }
-            if (inExpect != null) {
-                inExpect.close();
-            }
-        }
-    }
-
-}
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/GUnzipTest.java b/src/testcases/org/apache/tools/ant/taskdefs/GUnzipTest.java
deleted file mode 100644
index 407c1cd..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/GUnzipTest.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs;
- 
-import java.io.File;
-import org.apache.tools.ant.BuildFileTest;
-import org.apache.tools.ant.util.FileUtils;
-
-/**
- * @author Nico Seessle <nico@seessle.de> 
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- * @version $Revision$
- */
-public class GUnzipTest extends BuildFileTest { 
-    
-    public GUnzipTest(String name) { 
-        super(name);
-    }    
-    
-    public void setUp() { 
-        configureProject("src/etc/testcases/taskdefs/gunzip.xml");
-    }
-
-    public void tearDown() {
-        executeTarget("cleanup");
-    }
-
-    public void test1() { 
-        expectBuildException("test1", "required argument missing");
-    }
-
-    public void test2() { 
-        expectBuildException("test2", "attribute src invalid");
-    }
-
-    public void testRealTest() throws java.io.IOException {
-        FileUtils fileUtils = FileUtils.newFileUtils();
-        executeTarget("realTest");
-        assertTrue(fileUtils.contentEquals(project.resolveFile("../asf-logo.gif"),
-                                           project.resolveFile("asf-logo.gif")));
-    }
-    
-    public void testTestGzipTask() throws java.io.IOException {
-        FileUtils fileUtils = FileUtils.newFileUtils();
-        executeTarget("testGzipTask");
-        assertTrue(fileUtils.contentEquals(project.resolveFile("../asf-logo.gif"),
-                                           project.resolveFile("asf-logo.gif")));
-    }
-    
-}
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/GetTest.java b/src/testcases/org/apache/tools/ant/taskdefs/GetTest.java
deleted file mode 100644
index e5c526a..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/GetTest.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import java.io.File;
-import org.apache.tools.ant.BuildFileTest;
-
-/**
- * @author Nico Seessle <nico@seessle.de> 
- */
-public class GetTest extends BuildFileTest { 
-    
-    public GetTest(String name) { 
-        super(name);
-    }    
-    
-    public void setUp() { 
-        configureProject("src/etc/testcases/taskdefs/get.xml");
-    }
-
-    public void test1() { 
-        expectBuildException("test1", "required argument missing");
-    }
-
-    public void test2() { 
-        expectBuildException("test2", "required argument missing");
-    }
-
-    public void test3() { 
-        expectBuildException("test3", "required argument missing");
-    }
-
-    public void test4() { 
-        expectBuildException("test4", "src invalid");
-    }
-
-    public void test5() { 
-        expectBuildException("test5", "dest invalid (or no http-server on local machine)");
-    }
-
-    public void test6() { 
-        executeTarget("test6");
-        java.io.File f = new File(getProjectDir(), "get.tmp");
-        if (!f.exists()) { 
-            fail("get failed");
-        } else {
-            f.delete();
-        }
-        
-    }
-    
-}
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/GzipTest.java b/src/testcases/org/apache/tools/ant/taskdefs/GzipTest.java
deleted file mode 100644
index 372f854..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/GzipTest.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import java.io.File;
-import org.apache.tools.ant.BuildFileTest;
- 
-/**
- * @author Nico Seessle <nico@seessle.de> 
- */
-public class GzipTest extends BuildFileTest { 
-    
-    public GzipTest(String name) { 
-        super(name);
-    }    
-    
-    public void setUp() { 
-        configureProject("src/etc/testcases/taskdefs/gzip.xml");
-    }
-
-    public void test1() { 
-        expectBuildException("test1", "required argument missing");
-    }
-
-    public void test2() { 
-        expectBuildException("test2", "required argument missing");
-    }
-
-    public void test3() { 
-        expectBuildException("test3", "required argument missing");
-    }
-
-    public void test4() { 
-        expectBuildException("test4", "zipfile must not point to a directory");
-    }
-
-    public void testGZip(){
-        executeTarget("realTest");
-        String log = getLog();
-        assertTrue("Expecting message starting with 'Building:' but got '"
-            + log + "'", log.startsWith("Building:"));
-        assertTrue("Expecting message ending with 'asf-logo.gif.gz' but got '"
-            + log + "'", log.endsWith("asf-logo.gif.gz"));
-    }
-
-    public void testDateCheck(){
-        executeTarget("testDateCheck");
-        String log = getLog();
-        assertTrue(
-            "Expecting message ending with 'asf-logo.gif.gz is up to date.' but got '" + log + "'",
-            log.endsWith("asf-logo.gif.gz is up to date."));
-    }
-
-    public void tearDown(){
-        executeTarget("cleanup");
-    }
-
-}
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/InitializeClassTest.java b/src/testcases/org/apache/tools/ant/taskdefs/InitializeClassTest.java
deleted file mode 100644
index c6c1494..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/InitializeClassTest.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.PrintStream;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.BuildFileTest;
-import org.apache.tools.ant.util.FileUtils;
-
-/**
- * Test to see if static initializers are invoked the same way
- * when <java> is invoked in forked and unforked modes.
- *
- * @author <a href="mailto:umagesh@apache.org">Magesh Umasankar</a>
- */
-public class InitializeClassTest extends BuildFileTest {
-
-    public InitializeClassTest(String name) {
-        super(name);
-    }
-
-    public void setUp() {
-        configureProject("src/etc/testcases/taskdefs/initializeclass.xml");
-    }
-
-    public void testAll() throws IOException {
-        executeTarget("forked");
-        PrintStream ps = System.out;
-        File f1 = new File("src/etc/testcases/taskdefs/forkedout");
-        File f2 = new File("src/etc/testcases/taskdefs/unforkedout");
-        PrintStream newps = new PrintStream(new FileOutputStream(f2));
-        System.setOut(newps);
-        project.executeTarget("unforked");
-        System.setOut(ps);
-        newps.close();
-        FileUtils fu = FileUtils.newFileUtils();
-        assertTrue(fu.contentEquals(f1, f2));
-    }
-
-    public void tearDown() {
-        File f1 = new File("src/etc/testcases/taskdefs/forkedout");
-        File f2 = new File("src/etc/testcases/taskdefs/unforkedout");
-        f1.delete();
-        f2.delete();
-    }
-}
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/InputTest.java b/src/testcases/org/apache/tools/ant/taskdefs/InputTest.java
deleted file mode 100644
index f35cc4f..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/InputTest.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.BuildFileTest;
-import org.apache.tools.ant.input.PropertyFileInputHandler;
-import org.apache.tools.ant.util.JavaEnvUtils;
-
-/**
- * @author Ulrich Schmidt <usch@usch.net>
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- */
-public class InputTest extends BuildFileTest {
-
-    private String targetPostfix = "";
-
-    public InputTest(String name) {
-        super(name);
-        if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_1)) {
-            targetPostfix = ".1";
-        }
-    }
-
-    public void setUp() {
-        configureProject("src/etc/testcases/taskdefs/input.xml");
-        System.getProperties()
-            .put(PropertyFileInputHandler.FILE_NAME_KEY,
-                 getProject().resolveFile("input.properties")
-                 .getAbsolutePath());
-        getProject().setInputHandler(new PropertyFileInputHandler());
-    }
-
-    public void test1() {
-        executeTarget("test1" + targetPostfix);
-    }
-
-    public void test2() {
-        executeTarget("test2" + targetPostfix);
-    }
-
-    public void test3() {
-        expectSpecificBuildException("test3" + targetPostfix, "invalid input",
-                                     "Found invalid input test for \'"
-                                     + getKey("All data is"
-                                              + " going to be deleted from DB"
-                                              + " continue?")
-                                     + "\'");
-    }
-
-    public void test5() {
-        executeTarget("test5" + targetPostfix);
-    }
-
-    public void test6() {
-        executeTarget("test6" + targetPostfix);
-        assertEquals("scott", project.getProperty("db.user"));
-    }
-
-    private String getKey(String key) {
-        if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_1)) {
-            key = key.replace(' ', '_');
-        }
-        return key;
-    }
-
-}
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/JarTest.java b/src/testcases/org/apache/tools/ant/taskdefs/JarTest.java
deleted file mode 100644
index b589c42..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/JarTest.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import java.io.File;
-import java.util.Date;
-import org.apache.tools.ant.BuildFileTest;
-
-/**
- * @author Erik Meade <emeade@geekfarm.org>
- */
-public class JarTest extends BuildFileTest {
-
-    private static long jarModifiedDate;
-    private static String tempJar = "tmp.jar";
-
-    public JarTest(String name) {
-        super(name);
-    }
-
-    public void setUp() {
-        configureProject("src/etc/testcases/taskdefs/jar.xml");
-    }
-
-    public void tearDown() {
-        executeTarget("cleanup");
-    }
-    
-    public void test1() {
-        expectBuildException("test1", "required argument not specified");
-    }
-
-    public void test2() {
-        expectBuildException("test2", "manifest file does not exist");
-    }
-
-    public void test3() {
-        expectBuildException("test3", "Unrecognized whenempty attribute: format C: /y");
-    }
-
-    public void test4() {
-        executeTarget("test4");
-        File jarFile = new File(getProjectDir(), tempJar);
-        assertTrue(jarFile.exists());
-        jarModifiedDate = jarFile.lastModified();
-    }
-
-    public void XXXtest5() {
-        executeTarget("test5");
-        File jarFile = new File(getProjectDir(), tempJar);
-        assertEquals(jarModifiedDate, jarFile.lastModified());
-    }
-}
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/JavaTest.java b/src/testcases/org/apache/tools/ant/taskdefs/JavaTest.java
deleted file mode 100644
index 5bb13ab..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/JavaTest.java
+++ /dev/null
@@ -1,217 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import junit.framework.*;
-import java.io.*;
-import org.apache.tools.ant.*;
-
-/**
- * stress out java task
- * @author steve loughran
- * @author <a href="mailto:sbailliez@apache.org>Stephane Bailliez</a> 
- */
-public class JavaTest extends BuildFileTest {
-    
-    private boolean runFatalTests=false;
-    
-    public JavaTest(String name) { 
-        super(name);
-    }    
-    
-    /**
-     * configure the project. 
-     * if the property junit.run.fatal.tests is set we run
-     * the fatal tests
-     */
-    public void setUp() { 
-        configureProject("src/etc/testcases/taskdefs/java.xml");
-        
-        //final String propname="tests-classpath.value";
-        //String testClasspath=System.getProperty(propname);
-        //System.out.println("Test cp="+testClasspath);
-        String propname="tests-classpath.value";
-        String runFatal=System.getProperty("junit.run.fatal.tests");
-        if(runFatal!=null)
-            runFatalTests=true;
-    }
-
-    public void tearDown() {
-    }
-
-    public void testNoJarNoClassname(){
-        expectBuildExceptionContaining("testNoJarNoClassname",
-            "parameter validation",
-            "Classname must not be null.");   
-    }
-
-    public void testJarNoFork() {
-        expectBuildExceptionContaining("testJarNoFork",
-            "parameter validation",
-            "Cannot execute a jar in non-forked mode. Please set fork='true'. ");        
-    }
-      
-    public void testJarAndClassName() { 
-        expectBuildException("testJarAndClassName",
-            "Should not be able to set both classname AND jar");
-    }
-                
-
-    public void testClassnameAndJar() { 
-        expectBuildException("testClassnameAndJar",
-            "Should not be able to set both classname AND jar");
-    }
-
-    public void testRun() {
-        executeTarget("testRun");
-    }
-        
-
-
-    /** this test fails but we ignore the return value;
-     *  we verify that failure only matters when failonerror is set
-     */
-    public void testRunFail() {
-        if(runFatalTests) {
-            executeTarget("testRunFail");
-        }
-    }
-    
-    public void testRunFailFoe() {
-        if(runFatalTests) {
-            expectBuildExceptionContaining("testRunFailFoe",
-                "java failures being propagated",
-                "Java returned:");
-        }
-}
-
-    public void testRunFailFoeFork() {
-        expectBuildExceptionContaining("testRunFailFoeFork",
-            "java failures being propagated",
-            "Java returned:");
-    }
-
-    public void testExcepting() {
-        expectLogContaining("testExcepting", 
-                            "Exception raised inside called program");
-    }
-    
-    public void testExceptingFork() {
-        expectLogContaining("testExceptingFork", 
-                            "Java Result:");
-    }
-    
-    public void testExceptingFoe() {
-        expectBuildExceptionContaining("testExceptingFoe",
-            "passes exception through",
-            "Exception raised inside called program");
-    }
-    
-    public void testExceptingFoeFork() {
-        expectBuildExceptionContaining("testExceptingFoeFork",
-            "exceptions turned into error codes",
-            "Java returned:");        
-    }   
-        
-    
-    /**
-     * entry point class with no dependencies other
-     * than normal JRE runtime
-     */
-    public static class EntryPoint {
-        
-    /**
-     * this entry point is used by the java.xml tests to
-     * generate failure strings to handle
-     * argv[0] = exit code (optional)
-     * argv[1] = string to print to System.out (optional)
-     * argv[1] = string to print to System.err (optional)
-     */
-        public static void main(String[] argv) {
-            int exitCode=0;
-            if(argv.length>0) {
-                try {
-                    exitCode=Integer.parseInt(argv[0]);
-                } catch(NumberFormatException nfe) {
-                    exitCode=-1;
-                }
-            }
-            if(argv.length>1) {
-                System.out.println(argv[1]);
-            }
-            if(argv.length>2) {
-                System.err.println(argv[2]);
-            }
-            if(exitCode!=0) {
-                System.exit(exitCode);
-            }
-        }
-    }
-    
-    /**
-     * entry point class with no dependencies other
-     * than normal JRE runtime
-     */
-    public static class ExceptingEntryPoint {
-        
-        /**
-         * throw a run time exception which does not need 
-         * to be in the signature of the entry point
-         */
-        public static void main(String[] argv) {
-            throw new NullPointerException("Exception raised inside called program");
-        }
-    }
-}
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/JavacTest.java b/src/testcases/org/apache/tools/ant/taskdefs/JavacTest.java
deleted file mode 100644
index 4056041..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/JavacTest.java
+++ /dev/null
@@ -1,250 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.taskdefs.compilers.CompilerAdapter;
-import org.apache.tools.ant.taskdefs.compilers.CompilerAdapterFactory;
-import org.apache.tools.ant.taskdefs.compilers.DefaultCompilerAdapter;
-import org.apache.tools.ant.taskdefs.compilers.Javac12;
-import org.apache.tools.ant.taskdefs.compilers.Javac13;
-import org.apache.tools.ant.taskdefs.compilers.JavacExternal;
-import org.apache.tools.ant.util.JavaEnvUtils;
-
-import junit.framework.TestCase;
-
-/**
- * Testcase for <javac>.
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- * @version $Revision$ $Date$
- */
-public class JavacTest extends TestCase {
-
-    private Project project;
-    private Javac javac;
-
-    public JavacTest(String name) {
-        super(name);
-    }
-
-    public void setUp() {
-        project = new Project();
-        project.init();
-        javac = new Javac();
-        javac.setProject(project);
-    }
-
-    /**
-     * Test setting the name of the javac executable.
-     */
-    public void testForkedExecutableName() {
-        assertNull("no fork means no executable", javac.getJavacExecutable());
-
-        project.setProperty("build.compiler", "modern");
-        assertNull("no fork means no executable", javac.getJavacExecutable());
-
-        javac.setFork(true);
-        assertNotNull("normal fork", javac.getJavacExecutable());
-        assertTrue("name should contain \"javac\"", 
-                   javac.getJavacExecutable().indexOf("javac") > -1);
-
-        project.setProperty("build.compiler", "extJavac");
-        javac.setFork(false);
-        assertNotNull("fork via property", javac.getJavacExecutable());
-        assertTrue("name should contain \"javac\"", 
-                   javac.getJavacExecutable().indexOf("javac") > -1);
-
-        project.setProperty("build.compiler", "whatever");
-        assertNull("no fork and not extJavac means no executable", 
-                   javac.getJavacExecutable());
-
-        String myJavac = "Slartibartfast";
-        javac.setFork(true);
-        javac.setExecutable(myJavac);
-        assertEquals(myJavac, javac.getJavacExecutable());
-    }
-
-    /**
-     * Test nested compiler args.
-     */
-    public void testCompilerArg() {
-        String[] args = javac.getCurrentCompilerArgs();
-        assertNotNull(args);
-        assertEquals("no args", 0, args.length);
-
-        Javac.ImplementationSpecificArgument arg = javac.createCompilerArg();
-        String ford = "Ford";
-        String prefect = "Prefect";
-        String testArg = ford + " " + prefect;
-        arg.setValue(testArg);
-        args = javac.getCurrentCompilerArgs();
-        assertEquals("unconditional single arg", 1, args.length);
-        assertEquals(testArg, args[0]);
-
-        arg.setCompiler("jikes");
-        args = javac.getCurrentCompilerArgs();
-        assertNotNull(args);
-        assertEquals("implementation is jikes but build.compiler is null", 
-                     0, args.length);
-
-        project.setProperty("build.compiler", "jvc");
-        args = javac.getCurrentCompilerArgs();
-        assertNotNull(args);
-        assertEquals("implementation is jikes but build.compiler is jvc", 
-                     0, args.length);
-
-        project.setProperty("build.compiler", "jikes");
-        args = javac.getCurrentCompilerArgs();
-        assertEquals("both are jikes", 1, args.length);
-        assertEquals(testArg, args[0]);
-
-        arg.setLine(testArg);
-        args = javac.getCurrentCompilerArgs();
-        assertEquals("split at space", 2, args.length);
-        assertEquals(ford, args[0]);
-        assertEquals(prefect, args[1]);
-    }
-
-    /**
-     * Test nested compiler args in the fork="true" and
-     * implementation="extJavac" case.
-     */
-    public void testCompilerArgForForkAndExtJavac() {
-        Javac.ImplementationSpecificArgument arg = javac.createCompilerArg();
-        String ford = "Ford";
-        String prefect = "Prefect";
-        String testArg = ford + " " + prefect;
-        arg.setValue(testArg);
-        arg.setCompiler("extJavac");
-        javac.setFork(true);
-        String[] args = javac.getCurrentCompilerArgs();
-        assertEquals("both are forked javac", 1, args.length);
-        assertEquals(testArg, args[0]);
-    }
-
-    /**
-     * Test compiler attribute.
-     */
-    public void testCompilerAttribute() {
-        // check defaults
-        String compiler = javac.getCompiler();
-        assertNotNull(compiler);
-        assertTrue("default value", 
-                   "javac1.1".equals(compiler) 
-                   || "javac1.2".equals(compiler) 
-                   || "javac1.3".equals(compiler) 
-                   || "javac1.4".equals(compiler) 
-                   || "classic".equals(compiler));
-
-        javac.setFork(true);
-        assertNotNull(javac.getCompiler());
-        assertEquals("extJavac", javac.getCompiler());
-        assertEquals(compiler, javac.getCompilerVersion());
-
-        // check build.compiler provides defaults
-        javac = new Javac();
-        javac.setProject(project);
-        project.setNewProperty("build.compiler", "jikes");
-        compiler = javac.getCompiler();
-        assertNotNull(compiler);
-        assertEquals("jikes", compiler);
-
-        javac.setFork(true);
-        compiler = javac.getCompiler();
-        assertNotNull(compiler);
-        assertEquals("jikes", compiler);
-
-        // check attribute overrides build.compiler
-        javac.setFork(false);
-        javac.setCompiler("jvc");
-        compiler = javac.getCompiler();
-        assertNotNull(compiler);
-        assertEquals("jvc", compiler);
-
-        javac.setFork(true);
-        compiler = javac.getCompiler();
-        assertNotNull(compiler);
-        assertEquals("jvc", compiler);
-    }
-
-    public void testCompilerAdapter() {
-        if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_1) 
-            || JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_2) 
-            || JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_3)) {
-            javac.setCompiler("javac1.1");
-        } else {
-            javac.setCompiler("javac1.4");
-        }
-
-        javac.setDepend(true);
-        CompilerAdapter adapter = 
-            CompilerAdapterFactory.getCompiler(javac.getCompiler(), javac);
-
-        if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_1) 
-            || JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_2) 
-            || JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_3)) {
-            assertTrue(adapter instanceof Javac12);
-        } else {
-            assertTrue(adapter instanceof Javac13);
-        }
-
-        javac.setFork(true);
-        adapter = 
-            CompilerAdapterFactory.getCompiler(javac.getCompiler(), javac);
-        assertTrue(adapter instanceof JavacExternal);
-    }
-
-}
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/LoadFileTest.java b/src/testcases/org/apache/tools/ant/taskdefs/LoadFileTest.java
deleted file mode 100644
index 86876f9..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/LoadFileTest.java
+++ /dev/null
@@ -1,196 +0,0 @@
-/*
- *  The Apache Software License, Version 1.1
- *
- *  Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- *  reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions
- *  are met:
- *
- *  1. Redistributions of source code must retain the above copyright
- *  notice, this list of conditions and the following disclaimer.
- *
- *  2. Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in
- *  the documentation and/or other materials provided with the
- *  distribution.
- *
- *  3. The end-user documentation included with the redistribution, if
- *  any, must include the following acknowlegement:
- *  "This product includes software developed by the
- *  Apache Software Foundation (http://www.apache.org/)."
- *  Alternately, this acknowlegement may appear in the software itself,
- *  if and wherever such third-party acknowlegements normally appear.
- *
- *  4. The names "The Jakarta Project", "Ant", and "Apache Software
- *  Foundation" must not be used to endorse or promote products derived
- *  from this software without prior written permission. For written
- *  permission, please contact apache@apache.org.
- *
- *  5. Products derived from this software may not be called "Apache"
- *  nor may "Apache" appear in their names without prior written
- *  permission of the Apache Group.
- *
- *  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- *  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- *  OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- *  DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- *  ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- *  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- *  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- *  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- *  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- *  SUCH DAMAGE.
- *  ====================================================================
- *
- *  This software consists of voluntary contributions made by many
- *  individuals on behalf of the Apache Software Foundation.  For more
- *  information on the Apache Software Foundation, please see
- *  <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.BuildFileTest;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.BuildException;
-import java.io.File;
-
-/**
- * Test the load file task
- *
- * @author Steve Loughran
- * @author <a href="mailto:umagesh@apache.org">Magesh Umasankar</a>
- * @created 10 December 2001
- */
-public class LoadFileTest extends BuildFileTest {
-
-    /**
-     * Constructor for the LoadFileTest object
-     *
-     * @param name Description of Parameter
-     */
-    public LoadFileTest(String name) {
-        super(name);
-    }
-
-
-    /**
-     * The JUnit setup method
-     */
-    public void setUp() {
-        configureProject("src/etc/testcases/taskdefs/loadfile.xml");
-    }
-
-
-    /**
-     * The teardown method for JUnit
-     */
-    public void tearDown() {
-        executeTarget("cleanup");
-    }
-
-
-    /**
-     * A unit test for JUnit
-     */
-    public void testNoSourcefileDefined() {
-        expectBuildException("testNoSourcefileDefined",
-                "source file not defined");
-    }
-
-
-    /**
-     * A unit test for JUnit
-     */
-    public void testNoPropertyDefined() {
-        expectBuildException("testNoPropertyDefined",
-                "output property not defined");
-    }
-
-
-    /**
-     * A unit test for JUnit
-     */
-    public void testNoSourcefilefound() {
-        expectBuildExceptionContaining("testNoSourcefilefound",
-                "File not found",
-                "Unable to load file");
-    }
-
-    /**
-     * A unit test for JUnit
-     */
-    public void testFailOnError()
-            throws BuildException {
-        expectPropertyUnset("testFailOnError","testFailOnError");
-    }
-
-
-    /**
-     * A unit test for JUnit
-     */
-    public void testLoadAFile()
-            throws BuildException {
-        executeTarget("testLoadAFile");
-        if(project.getProperty("testLoadAFile").indexOf("eh?")<0) {
-            fail("property is not all in the file");
-        }
-    }
-
-
-    /**
-     * A unit test for JUnit
-     */
-    public void testLoadAFileEnc()
-            throws BuildException {
-        executeTarget("testLoadAFileEnc");
-        if(project.getProperty("testLoadAFileEnc")==null) {
-            fail("file load failed");
-        }
-    }
-
-    /**
-     * A unit test for JUnit
-     */
-    public void testEvalProps()
-            throws BuildException {
-        executeTarget("testEvalProps");
-        if(project.getProperty("testEvalProps").indexOf("rain")<0) {
-            fail("property eval broken");
-        }
-    }
-
-    /**
-     * Test FilterChain and FilterReaders
-     */
-    public void testFilterChain()
-            throws BuildException {
-        executeTarget("testFilterChain");
-        if(project.getProperty("testFilterChain").indexOf("World!")<0) {
-            fail("Filter Chain broken");
-        }
-    }
-
-    /**
-     * Test StripJavaComments filterreader functionality.
-     */
-    public final void testStripJavaComments()
-            throws BuildException {
-        executeTarget("testStripJavaComments");
-        final String expected = project.getProperty("expected");
-        final String generated = project.getProperty("testStripJavaComments");
-        assertEquals(expected, generated);
-    }
-
-    /**
-     * A unit test for JUnit
-     */
-    public void testOneLine()
-            throws BuildException {
-            expectPropertySet("testOneLine","testOneLine","1,2,3,4");
-
-    }
-}
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/LoadPropertiesTest.java b/src/testcases/org/apache/tools/ant/taskdefs/LoadPropertiesTest.java
deleted file mode 100644
index 624e9aa..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/LoadPropertiesTest.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.*;
-import org.apache.tools.ant.BuildFileTest;
-
-/**
- * @author <a href="mailto:umagesh@apache.org">Magesh Umasankar</a>
- */
-public class LoadPropertiesTest extends BuildFileTest {
-
-    public LoadPropertiesTest(String name) {
-        super(name);
-    }
-
-    /**
-     * The JUnit setup method
-     */
-    public void setUp() {
-        configureProject("src/etc/testcases/taskdefs/loadproperties.xml");
-    }
-
-    /**
-     * The teardown method for JUnit
-     */
-    public void tearDown() {
-        executeTarget("cleanup");
-    }
-
-    public void testPrefixedProperties() {
-        executeTarget("testPrefixedProperties");
-        String url = project.getProperty("server1.http.url");
-        assertEquals("http://localhost:80", url);
-    }
-}
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/ManifestTest.java b/src/testcases/org/apache/tools/ant/taskdefs/ManifestTest.java
deleted file mode 100644
index 24c7a79..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/ManifestTest.java
+++ /dev/null
@@ -1,331 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import java.io.File;
-import java.io.FileReader;
-import java.io.IOException;
-import java.util.Date;
-import java.util.Vector;
-import java.util.Enumeration;
-import org.apache.tools.ant.BuildFileTest;
-import org.apache.tools.ant.Project;
-
-/**
- * Testcase for the Manifest class used in the jar task. 
- * 
- * @author Conor MacNeill
- */
-public class ManifestTest extends BuildFileTest {
-
-    public static final String EXPANDED_MANIFEST
-        = "src/etc/testcases/taskdefs/manifests/META-INF/MANIFEST.MF";
-
-    public static final String LONG_LINE
-        = "AReallyLongLineToTestLineBreakingInManifests-ACapabilityWhich" + 
-          "IsSureToLeadToHundredsOfQuestionsAboutWhyAntMungesManifests" +
-          "OfCourseTheAnswerIsThatIsWhatTheSpecRequiresAndIfAnythingHas" +
-          "AProblemWithThatItIsNotABugInAnt";
-        
-    public ManifestTest(String name) {
-        super(name);
-    }
-
-    public void setUp() {
-        configureProject("src/etc/testcases/taskdefs/manifest.xml");
-    }
-
-    public void tearDown() {
-        executeTarget("clean");
-    }
-
-    /**
-     * Empty manifest - is OK 
-     */
-    public void test1() throws ManifestException, IOException {
-        executeTarget("test1");
-        Manifest manifest = getManifest(EXPANDED_MANIFEST);
-        String version = manifest.getManifestVersion();
-        assertEquals("Manifest was not created with correct version - ", "1.0", version);
-    }
-    
-    /**
-     * Simple Manifest with version 2.0
-     */
-    public void test2() throws ManifestException, IOException {
-        executeTarget("test2");
-        Manifest manifest = getManifest(EXPANDED_MANIFEST);
-        String version = manifest.getManifestVersion();
-        assertEquals("Manifest was not created with correct version - ", "2.0", version);
-    }
-    
-    /**
-     * Malformed manifest - no : on the line
-     */
-    public void test3() {
-        expectBuildExceptionContaining("test3", "Manifest is invalid - no colon on header line",
-                                       "Invalid Manifest");
-    }
-
-    /**
-     * Malformed manifest - starts with continuation line
-     */
-    public void test4() {
-        expectBuildExceptionContaining("test4", "Manifest is invalid - section starts with continuation line",
-                                       "Invalid Manifest");
-   }
-
-    /**
-     * Malformed manifest - Name attribute in main section
-     */
-    public void test5() {
-        executeTarget("test5");
-        String output = getLog();
-        boolean hasWarning = output.indexOf("Manifest warning: \"Name\" attributes should not occur in the main section") != -1;
-        assertEquals("Expected warning about Name in main section", true, hasWarning);
-    }
-    
-    /**
-     * New Section not starting with Name attribute.
-     */
-    public void test6() {
-        expectBuildExceptionContaining("test6", "Manifest is invalid - section starts with incorrect attribute",
-                                       "Invalid Manifest");
-        String output = getLog();
-        boolean hasWarning = output.indexOf("Manifest sections should start with a \"Name\" attribute") != -1;
-        assertEquals("Expected warning about section not starting with Name: attribute", true, hasWarning);
-    }
-     
-    /**
-     * From attribute is illegal
-     */
-    public void test7() {
-        executeTarget("test7");
-
-        boolean hasWarning = getLog().indexOf("Manifest attributes should not start with \"From\"") != -1;
-        assertEquals("Expected warning about From: attribute", true, hasWarning);
-    }
-
-    /**
-     * Inline manifest - OK
-     */
-    public void test8() throws IOException, ManifestException {
-        executeTarget("test8");
-        Manifest manifest = getManifest(EXPANDED_MANIFEST);
-        Manifest.Section mainSection = manifest.getMainSection();
-        String classpath = mainSection.getAttributeValue("class-path");
-        assertEquals("Class-Path attribute was not set correctly - ", "fubar", classpath);
-        
-        Manifest.Section testSection = manifest.getSection("Test");
-        String testAttr = testSection.getAttributeValue("TestAttr");
-        assertEquals("TestAttr attribute was not set correctly - ", "Test", testAttr);
-    }
-     
-    /**
-     * Inline manifest - Invalid since has a Name attribute in the section element
-     */
-    public void test9() {
-        expectBuildExceptionContaining("test9", "Construction is invalid - Name attribute should not be used",
-                                       "Specify the section name using the \"name\" attribute of the <section> element");
-    }
-     
-    /**
-     * Inline manifest - Invalid attribute without name
-     */
-    public void test10() {
-        expectBuildExceptionContaining("test10", "Attribute has no name",
-                                       "Attributes must have name and value");
-    }
-     
-    /**
-     * Inline manifest - Invalid attribute without value
-     */
-    public void test11() {
-        expectBuildExceptionContaining("test11", "Attribute has no value",
-                                       "Attributes must have name and value");
-    }
-     
-    /**
-     * Inline manifest - Invalid attribute without value
-     */
-    public void test12() {
-        expectBuildExceptionContaining("test12", "Section with no name",
-                                       "Sections must have a name");
-    }
-     
-    /**
-     * Inline manifest - Duplicate attribute
-     */
-    public void test13() {
-        expectBuildExceptionContaining("test13", "Duplicate Attribute",
-                                       "The attribute \"Test\" may not occur more than once in the same section");
-    }
-     
-    /**
-     * Inline manifest - OK since classpath entries can be duplicated.
-     */
-    public void test14() throws IOException, ManifestException {
-        executeTarget("test14");
-        Manifest manifest = getManifest(EXPANDED_MANIFEST);
-        Manifest.Section mainSection = manifest.getMainSection();
-        String classpath = mainSection.getAttributeValue("class-path");
-        assertEquals("Class-Path attribute was not set correctly - ", 
-            "Test1 Test2 Test3 Test4", classpath);
-    }
-     
-    /**
-     * Tets long line wrapping
-     */
-    public void testLongLine() throws IOException, ManifestException {
-        Project project = getProject();
-        project.setUserProperty("test.longline", LONG_LINE);
-        executeTarget("testLongLine");
-
-        Manifest manifest = getManifest(EXPANDED_MANIFEST);
-        Manifest.Section mainSection = manifest.getMainSection();
-        String classpath = mainSection.getAttributeValue("class-path");
-        assertEquals("Class-Path attribute was not set correctly - ", 
-            LONG_LINE, classpath);
-    }
-     
-    /**
-     * Tests ordering of sections
-     */
-    public void testOrder1() throws IOException, ManifestException {
-        executeTarget("testOrder1");
-
-        Manifest manifest = getManifest(EXPANDED_MANIFEST);
-        Enumeration e = manifest.getSectionNames();
-        String section1 = (String)e.nextElement();
-        String section2 = (String)e.nextElement();
-        assertEquals("First section name unexpected", "Test1", section1);
-        assertEquals("Second section name unexpected", "Test2", section2);
-        
-        Manifest.Section section = manifest.getSection("Test1");
-        e = section.getAttributeKeys();
-        String attr1Key = (String)e.nextElement();
-        String attr2Key = (String)e.nextElement();
-        String attr1 = section.getAttribute(attr1Key).getName();
-        String attr2 = section.getAttribute(attr2Key).getName();
-        assertEquals("First attribute name unexpected", "TestAttr1", attr1);
-        assertEquals("Second attribute name unexpected", "TestAttr2", attr2);
-    }
-     
-    /**
-     * Tests ordering of sections
-     */
-    public void testOrder2() throws IOException, ManifestException {
-        executeTarget("testOrder2");
-
-        Manifest manifest = getManifest(EXPANDED_MANIFEST);
-        Enumeration e = manifest.getSectionNames();
-        String section1 = (String)e.nextElement();
-        String section2 = (String)e.nextElement();
-        assertEquals("First section name unexpected", "Test2", section1);
-        assertEquals("Second section name unexpected", "Test1", section2);
-
-        Manifest.Section section = manifest.getSection("Test1");
-        e = section.getAttributeKeys();
-        String attr1Key = (String)e.nextElement();
-        String attr2Key = (String)e.nextElement();
-        String attr1 = section.getAttribute(attr1Key).getName();
-        String attr2 = section.getAttribute(attr2Key).getName();
-        assertEquals("First attribute name unexpected", "TestAttr2", attr1);
-        assertEquals("Second attribute name unexpected", "TestAttr1", attr2);
-    }
-     
-    /**
-     * file attribute for manifest task is required.
-     */
-    public void testNoFile() {
-        expectBuildException("testNoFile", "file is required");
-    }
-    
-    /**
-     * replace changes Manifest-Version from 2.0 to 1.0
-     */
-    public void testReplace() throws IOException, ManifestException {
-        executeTarget("testReplace");
-        Manifest mf = getManifest("src/etc/testcases/taskdefs/mftest.mf");
-        assertNotNull(mf);
-        assertEquals(Manifest.getDefaultManifest(), mf);
-    }
-
-    /**
-     * update keeps the Manifest-Version and adds a new attribute Foo
-     */
-    public void testUpdate() throws IOException, ManifestException {
-        executeTarget("testUpdate");
-        Manifest mf = getManifest("src/etc/testcases/taskdefs/mftest.mf");
-        assertNotNull(mf);
-        assertTrue(!Manifest.getDefaultManifest().equals(mf));
-        String mfAsString = mf.toString();
-        assertNotNull(mfAsString);
-        assertTrue(mfAsString.startsWith("Manifest-Version: 2.0"));
-        assertTrue(mfAsString.indexOf("Foo: Bar") > -1);
-    }
-
-    /**
-     * Reads mftest.mf.
-     */
-    private Manifest getManifest(String filename) throws IOException, ManifestException {
-        FileReader r = new FileReader(filename);
-        try {
-            return new Manifest(r);
-        } finally {
-            r.close();
-        }
-    }
-}
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/MkdirTest.java b/src/testcases/org/apache/tools/ant/taskdefs/MkdirTest.java
deleted file mode 100644
index ec6e69c..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/MkdirTest.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.BuildFileTest;
-
-/**
- * @author Nico Seessle <nico@seessle.de> 
- */
-public class MkdirTest extends BuildFileTest { 
-    
-    public MkdirTest(String name) { 
-        super(name);
-    }
-
-    public void setUp() { 
-        configureProject("src/etc/testcases/taskdefs/mkdir.xml");
-    }
-
-    public void test1() { 
-        expectBuildException("test1", "required argument missing");
-    }
-
-    public void test2() {
-        expectBuildException("test2", "directory already exists as a file");
-    }
-
-    public void test3() { 
-        executeTarget("test3");
-        java.io.File f = new java.io.File(getProjectDir(), "testdir.tmp");
-        if (!f.exists() || !f.isDirectory()) { 
-            fail("mkdir failed");
-        } else {
-            f.delete();
-        }
-    }
-}
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/MoveTest.java b/src/testcases/org/apache/tools/ant/taskdefs/MoveTest.java
deleted file mode 100644
index ae3cbe1..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/MoveTest.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.BuildFileTest;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.util.FileUtils;
-import java.io.File;
-import java.io.IOException;
-
-/**
- * Tests the Move task.
- *
- * @author <a href="mailto:umagesh@apache.org">Magesh Umasankar</a>
- */
-public class MoveTest extends BuildFileTest {
-
-    public MoveTest(String name) {
-        super(name);
-    }
-
-    public void setUp() {
-        configureProject("src/etc/testcases/taskdefs/move.xml");
-    }
-
-    public void tearDown() {
-        executeTarget("cleanup");
-    }
-
-    public void testFilterSet() throws IOException {
-        executeTarget("testFilterSet");
-        FileUtils fileUtils = FileUtils.newFileUtils();
-        File tmp  = new File(getProjectDir(), "move.filterset.tmp");
-        File check  = new File(getProjectDir(), "expected/copy.filterset.filtered");
-        assertTrue(tmp.exists());
-        assertTrue(fileUtils.contentEquals(tmp, check));
-    }
-
-    public void testFilterChain() throws IOException {
-        executeTarget("testFilterChain");
-        FileUtils fileUtils = FileUtils.newFileUtils();
-        File tmp  = new File(getProjectDir(), "move.filterchain.tmp");
-        File check  = new File(getProjectDir(), "expected/copy.filterset.filtered");
-        assertTrue(tmp.exists());
-        assertTrue(fileUtils.contentEquals(tmp, check));
-    }
-}
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/ParallelTest.java b/src/testcases/org/apache/tools/ant/taskdefs/ParallelTest.java
deleted file mode 100644
index 1e7d3ac..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/ParallelTest.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs;
-import java.io.PrintStream;
-
-import org.apache.tools.ant.BuildFileTest;
-import org.apache.tools.ant.DemuxOutputStream;
-import org.apache.tools.ant.Project;
-
-/**
- * Test of the parallel TaskContainer
- *
- * @author Conor MacNeill
- * @created 21 February 2002
- */
-public class ParallelTest extends BuildFileTest {
-    /** Standard property value for the basic test */
-    public final static String DIRECT_MESSAGE = "direct";
-    /** Standard property value for the basic and fail test */
-    public final static String DELAYED_MESSAGE = "delayed";
-    /** Standard property value for the fail test */
-    public final static String FAILURE_MESSAGE = "failure";
-
-    /** the build fiel associated with this test */
-    public final static String TEST_BUILD_FILE
-         = "src/etc/testcases/taskdefs/parallel.xml";
-
-    /**
-     * Constructor for the ParallelTest object
-     *
-     * @param name name of the test
-     */
-    public ParallelTest(String name) {
-        super(name);
-    }
-
-    /** The JUnit setup method */
-    public void setUp() {
-        configureProject(TEST_BUILD_FILE);
-    }
-
-    /** tests basic operation of the parallel task */
-    public void testBasic() {
-        // should get no output at all
-        Project project = getProject();
-        project.setUserProperty("test.direct", DIRECT_MESSAGE);
-        project.setUserProperty("test.delayed", DELAYED_MESSAGE);
-        expectOutputAndError("testBasic", "", "");
-        String log = getLog();
-        assertEquals("parallel tasks didn't output correct data", log,
-            DIRECT_MESSAGE + DELAYED_MESSAGE);
-
-    }
-
-    /** tests the failure of a task within a parallel construction */
-    public void testFail() {
-        // should get no output at all
-        Project project = getProject();
-        project.setUserProperty("test.failure", FAILURE_MESSAGE);
-        project.setUserProperty("test.delayed", DELAYED_MESSAGE);
-        expectBuildExceptionContaining("testFail",
-            "fail task in one parallel branch", FAILURE_MESSAGE);
-    }
-
-    /** tests the demuxing of output streams in a multithreaded situation */
-    public void testDemux() {
-        Project project = getProject();
-        project.addTaskDefinition("demuxtest", DemuxOutputTask.class);
-        PrintStream out = System.out;
-        PrintStream err = System.err;
-        System.setOut(new PrintStream(new DemuxOutputStream(project, false)));
-        System.setErr(new PrintStream(new DemuxOutputStream(project, true)));
-
-        try {
-            project.executeTarget("testDemux");
-        } finally {
-            System.setOut(out);
-            System.setErr(err);
-        }
-    }
-}
-
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/PropertyTest.java b/src/testcases/org/apache/tools/ant/taskdefs/PropertyTest.java
deleted file mode 100644
index 55a22a7..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/PropertyTest.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.*;
-import org.apache.tools.ant.BuildFileTest;
-
-/**
- * @author Conor MacNeill
- */
-public class PropertyTest extends BuildFileTest { 
-    
-    public PropertyTest(String name) { 
-        super(name);
-    }    
-    
-    public void setUp() { 
-        configureProject("src/etc/testcases/taskdefs/property.xml");
-    }
-
-    public void test1() { 
-        // should get no output at all
-        expectOutputAndError("test1", "", "");
-    }
-
-    public void test2() { 
-        expectLog("test2", "testprop1=aa, testprop3=xxyy, testprop4=aazz");
-    }
-    
-    public void test3() {
-        try {
-            executeTarget("test3");
-        }
-        catch (BuildException e) {
-            assertEquals("Circular definition not detected - ", true,
-                     e.getMessage().indexOf("was circularly defined") != -1);
-            return;                     
-        }
-        fail("Did not throw exception on circular exception");                     
-    }
-
-    public void test4() { 
-        expectLog("test4", "http.url is http://localhost:999");
-    }
-    
-    public void testPrefixSuccess() {
-        executeTarget("prefix.success");
-        assertEquals("80", project.getProperty("server1.http.port"));
-    }
-
-    public void testPrefixFailure() {
-       try {
-            executeTarget("prefix.fail");
-        }
-        catch (BuildException e) {
-            assertEquals("Prefix allowed on non-resource/file load - ", true,
-                     e.getMessage().indexOf("Prefix is only valid") != -1);
-            return;                     
-        }
-        fail("Did not throw exception on invalid use of prefix");
-    }
-    
-}
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/RenameTest.java b/src/testcases/org/apache/tools/ant/taskdefs/RenameTest.java
deleted file mode 100644
index 3535369..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/RenameTest.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-import org.apache.tools.ant.BuildFileTest;
-
-/**
- * @author Nico Seessle <nico@seessle.de> 
- */
-public class RenameTest extends BuildFileTest { 
-    
-    public RenameTest(String name) { 
-        super(name);
-    }    
-    
-    public void setUp() { 
-        configureProject("src/etc/testcases/taskdefs/rename.xml");
-    }
-
-    public void test1() { 
-        expectBuildException("test1", "required argument missing");
-    }
-    public void test2() { 
-        expectBuildException("test2", "required argument missing");
-    }
-    public void test3() { 
-        expectBuildException("test3", "required argument missing");
-    }
-/*
-    public void test4() {
-        expectBuildException("test4", "source and destination the same");
-    }
-    public void test5() {
-        executeTarget("test5");
-    }
-    */
-    public void test6() {
-        executeTarget("test6");
-    }
-    
-}
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/ReplaceTest.java b/src/testcases/org/apache/tools/ant/taskdefs/ReplaceTest.java
deleted file mode 100644
index afd861c..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/ReplaceTest.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.BuildFileTest;
-
-/**
- * @author Nico Seessle <nico@seessle.de> 
- */
-public class ReplaceTest extends BuildFileTest { 
-    
-    public ReplaceTest(String name) { 
-        super(name);
-    }    
-    
-    public void setUp() { 
-        configureProject("src/etc/testcases/taskdefs/replace.xml");
-    }
-    
-    public void test1() { 
-        expectBuildException("test1", "required argument not specified");
-    }
-
-    public void test2() { 
-        expectBuildException("test2", "required argument not specified");
-    }
-
-    public void test3() { 
-        expectBuildException("test3", "required argument not specified");
-    }
-
-    public void test4() { 
-        expectBuildException("test4", "empty token not allowed");
-    }
-
-    public void test5() { 
-        executeTarget("test5");
-    }
-
-    public void test6() { 
-        expectBuildException("test6", "required argument not specified");
-    }
-
-    public void test7() { 
-        expectBuildException("test7", "empty token not allowed");
-    }
-
-    public void test8() { 
-        executeTarget("test8");
-    }
-
-}
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/RmicTest.java b/src/testcases/org/apache/tools/ant/taskdefs/RmicTest.java
deleted file mode 100644
index 421e13a..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/RmicTest.java
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.Project;
-
-import junit.framework.TestCase;
-
-/**
- * Testcase for <rmic>.
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- * @version $Revision$
- * @since Ant 1.5
- */
-public class RmicTest extends TestCase {
-
-    private Project project;
-    private Rmic rmic;
-
-    public RmicTest(String name) {
-        super(name);
-    }
-
-    public void setUp() {
-        project = new Project();
-        project.init();
-        rmic = new Rmic();
-        rmic.setProject(project);
-    }
-
-    /**
-     * Test nested compiler args.
-     */
-    public void testCompilerArg() {
-        String[] args = rmic.getCurrentCompilerArgs();
-        assertNotNull(args);
-        assertEquals("no args", 0, args.length);
-
-        Rmic.ImplementationSpecificArgument arg = rmic.createCompilerArg();
-        String ford = "Ford";
-        String prefect = "Prefect";
-        String testArg = ford + " " + prefect;
-        arg.setValue(testArg);
-        args = rmic.getCurrentCompilerArgs();
-        assertEquals("unconditional single arg", 1, args.length);
-        assertEquals(testArg, args[0]);
-
-        arg.setCompiler("weblogic");
-        args = rmic.getCurrentCompilerArgs();
-        assertNotNull(args);
-        assertEquals("implementation is weblogic but build.rmic is null", 
-                     0, args.length);
-
-        project.setProperty("build.rmic", "sun");
-        args = rmic.getCurrentCompilerArgs();
-        assertNotNull(args);
-        assertEquals("implementation is weblogic but build.rmic is sun", 
-                     0, args.length);
-
-        project.setProperty("build.rmic", "weblogic");
-        args = rmic.getCurrentCompilerArgs();
-        assertEquals("both are weblogic", 1, args.length);
-        assertEquals(testArg, args[0]);
-    }
-
-    /**
-     * Test compiler attribute.
-     */
-    public void testCompilerAttribute() {
-        // check defaults
-        String compiler = rmic.getCompiler();
-        assertNotNull(compiler);
-        assertTrue("default value", 
-                   "sun".equals(compiler) || "kaffe".equals(compiler));
-
-        project.setNewProperty("build.rmic", "weblogic");
-        compiler = rmic.getCompiler();
-        assertNotNull(compiler);
-        assertEquals("weblogic", compiler);
-
-        // check attribute overrides build.compiler
-        rmic.setCompiler("kaffe");
-        compiler = rmic.getCompiler();
-        assertNotNull(compiler);
-        assertEquals("kaffe", compiler);
-    }
-
-}
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/SQLExecTest.java b/src/testcases/org/apache/tools/ant/taskdefs/SQLExecTest.java
deleted file mode 100644
index bfd0ee5..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/SQLExecTest.java
+++ /dev/null
@@ -1,274 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs;
-
-import java.sql.Driver;
-import java.sql.Connection;
-import java.sql.SQLException;
-import java.sql.DriverPropertyInfo;
-import java.util.Properties;
-import java.io.File;
-import java.net.URL;
-
-import junit.framework.TestCase;
-
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.BuildException;
-
-/**
- * Simple testcase to test for driver caching.
- * To test for your own database, you may need to tweak getProperties(int)
- * and add a couple of keys. see testOracle and testMySQL for an example.
- *
- * It would be much better to extend this testcase by using HSQL
- * as the test db, so that a db is really used.
- *
- * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
- */
-public class SQLExecTest extends TestCase {
-
-    // some database keys, see #getProperties(int)
-    public final static int NULL = 0;
-    public final static int ORACLE = 1;
-    public final static int MYSQL = 2;
-
-    // keys used in properties.
-    public final static String DRIVER = "driver";
-    public final static String USER = "user";
-    public final static String PASSWORD = "password";
-    public final static String URL = "url";
-    public final static String PATH = "path";
-    public final static String SQL = "sql";
-
-    public SQLExecTest(String s) {
-        super(s);
-    }
-
-    protected void setUp() throws Exception {
-        // make sure the cache is cleared.
-        SQLExec.getLoaderMap().clear();
-    }
-
-   // simple test to ensure that the caching does work...
-    public void testDriverCaching(){
-       SQLExec sql = createTask(getProperties(NULL));
-        assertTrue(!SQLExec.getLoaderMap().containsKey(NULL_DRIVER));
-        try {
-            sql.execute();
-        } catch (BuildException e){
-            assertTrue(e.getException().getMessage().indexOf("No suitable Driver") != -1);
-        }
-        assertTrue(SQLExec.getLoaderMap().containsKey(NULL_DRIVER));
-        assertSame(sql.getLoader(), SQLExec.getLoaderMap().get(NULL_DRIVER));
-        ClassLoader loader1 = sql.getLoader();
-
-        // 2nd run..
-        sql = createTask(getProperties(NULL));
-        // the driver must still be cached.
-        assertTrue(sql.getLoaderMap().containsKey(NULL_DRIVER));
-        try {
-            sql.execute();
-        } catch (BuildException e){
-            assertTrue(e.getException().getMessage().indexOf("No suitable Driver") != -1);
-        }
-        assertTrue(sql.getLoaderMap().containsKey(NULL_DRIVER));
-        assertSame(sql.getLoader(), sql.getLoaderMap().get(NULL_DRIVER));
-        assertSame(loader1, sql.getLoader());
-    }
-
-    public void testNull() throws Exception {
-        doMultipleCalls(1000, NULL, true, true);
-    }
-
-    /*
-    public void testOracle(){
-        doMultipleCalls(1000, ORACLE, true, false);
-    }*/
-
-    /*
-    public void testMySQL(){
-        doMultipleCalls(1000, MYSQL, true, false);
-    }*/
-
-
-    /**
-     * run a sql tasks multiple times.
-     * @param calls number of times to execute the task
-     * @param database the database to execute on.
-     * @param caching should caching be enabled ?
-     * @param catchexception true to catch exception for each call, false if not.
-     */
-    protected void doMultipleCalls(int calls, int database, boolean caching, boolean catchexception){
-        Properties props = getProperties(database);
-        for (int i = 0; i < calls; i++){
-            SQLExec sql = createTask(props);
-            sql.setCaching(caching);
-            try  {
-                sql.execute();
-            } catch (BuildException e){
-                if (!catchexception){
-                    throw e;
-                }
-            }
-        }
-    }
-
-    /**
-     * Create a task from a set of properties
-     * @see #getProperties(int)
-     */
-    protected SQLExec createTask(Properties props){
-        SQLExec sql = new SQLExec();
-        sql.setProject( new Project() );
-        sql.setDriver( props.getProperty(DRIVER) );
-        sql.setUserid( props.getProperty(USER) );
-        sql.setPassword( props.getProperty(PASSWORD) );
-        sql.setUrl( props.getProperty(URL) );
-        sql.createClasspath().setLocation( new File(props.getProperty(PATH)) );
-        sql.addText( props.getProperty(SQL) );
-        return sql;
-    }
-
-    /**
-     * try to find the path from a resource (jar file or directory name)
-     * so that it can be used as a classpath to load the resource.
-     */
-    protected String findResourcePath(String resource){
-        resource = resource.replace('.', '/') + ".class";
-        URL url = getClass().getClassLoader().getResource(resource);
-        if (url == null) {
-            return null;
-        }
-        String u = url.toString();
-        if (u.startsWith("jar:file:")) {
-            int pling = u.indexOf("!");
-            return u.substring("jar:file:".length(), pling);
-        } else if (u.startsWith("file:")) {
-            int tail = u.indexOf(resource);
-            return u.substring("file:".length(), tail);
-        }
-        return null;
-    }
-
-    /**
-     * returns a configuration associated to a specific database.
-     * If you want to test on your specific base, you'd better
-     * tweak this to make it run or add your own database.
-     * The driver lib should be dropped into the system classloader.
-     */
-    protected Properties getProperties(int database){
-        Properties props = null;
-        switch (database){
-            case ORACLE:
-                props = getProperties("oracle.jdbc.driver.OracleDriver", "test", "test", "jdbc:oracle:thin:@127.0.0.1:1521:orcl");
-                break;
-            case MYSQL:
-                props = getProperties("org.gjt.mm.mysql.Driver", "test", "test", "jdbc:mysql://127.0.0.1:3306/test");
-                break;
-            case NULL:
-            default:
-                props = getProperties(NULL_DRIVER, "test", "test", "jdbc:database://hostname:port/name");
-        }
-        // look for the driver path...
-        String path = findResourcePath(props.getProperty(DRIVER));
-        props.put(PATH, path);
-        props.put(SQL, "create table OOME_TEST(X INTEGER NOT NULL);\ndrop table if exists OOME_TEST;");
-        return props;
-    }
-
-    /** helper method to build properties */
-    protected Properties getProperties(String driver, String user, String pwd, String url){
-        Properties props = new Properties();
-        props.put(DRIVER, driver);
-        props.put(USER, user);
-        props.put(PASSWORD, pwd);
-        props.put(URL, url);
-        return props;
-    }
-
-
-//--- NULL JDBC driver just for simple test since there are no db driver
-// available as a default in Ant :)
-
-    public final static String NULL_DRIVER = NullDriver.class.getName();
-
-    public static class NullDriver implements Driver {
-        public Connection connect(String url, Properties info)
-                throws SQLException {
-            return null;
-        }
-
-        public boolean acceptsURL(String url) throws SQLException {
-            return false;
-        }
-
-        public DriverPropertyInfo[] getPropertyInfo(String url, Properties info)
-                throws SQLException {
-            return new DriverPropertyInfo[0];
-        }
-
-        public int getMajorVersion() {
-            return 0;
-        }
-
-        public int getMinorVersion() {
-            return 0;
-        }
-
-        public boolean jdbcCompliant() {
-            return false;
-        }
-    }
-
-}
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/SleepTest.java b/src/testcases/org/apache/tools/ant/taskdefs/SleepTest.java
deleted file mode 100644
index f894deb..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/SleepTest.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.BuildFileTest;
-/**
- * @author steve_l@iseran.com steve loughran
- * @created 01 May 2001
- */
-public class SleepTest extends BuildFileTest {
-
-
-    private final static String TASKDEFS_DIR = "src/etc/testcases/taskdefs/";
-    private final static boolean TRACE=false;
-	private final static int ERROR_RANGE=1000;
-	
-    public SleepTest(String name) {
-        super(name);
-    }
-
-    public void setUp() {
-        configureProject(TASKDEFS_DIR + "sleep.xml");
-    }
-
-    public void test1() {
-       Timer timer=new Timer();
-        executeTarget("test1");
-        timer.stop();
-        if(TRACE) System.out.println(" test1 elapsed time="+timer.time());
-        assertTrue(timer.time()>=0);
-    }
-
-    public void test2() {
-        Timer timer=new Timer();
-        executeTarget("test2");
-        timer.stop();
-        if(TRACE) System.out.println(" test2 elapsed time="+timer.time());
-        assertTrue(timer.time()>=0);
-    }
-
-    public void test3() {
-        Timer timer=new Timer();
-        executeTarget("test3");
-        timer.stop();
-        if(TRACE) System.out.println(" test3 elapsed time="+timer.time());
-        assertTrue(timer.time()>=(2000-ERROR_RANGE));
-    }
-
-    public void test4() {
-        Timer timer=new Timer();
-        executeTarget("test3");
-        timer.stop();
-        if(TRACE) System.out.println(" test4 elapsed time="+timer.time());
-        assertTrue(timer.time()>=(2000-ERROR_RANGE) && timer.time()<60000);
-    }
-
-    public void test5() {
-        expectBuildException("test5",
-            "Negative sleep periods are not supported");
-    }
-
-    public void test6() {
-        Timer timer=new Timer();
-        executeTarget("test6");
-        timer.stop();
-        if(TRACE) System.out.println(" test6 elapsed time="+timer.time());
-        assertTrue(timer.time()<2000);
-    }
-
-
-    /**
-    * inner timer class
-    */
-    private static class Timer {
-        long start=0;
-        long stop=0;
-
-        public Timer() {
-            start();
-        }
-
-        public void start() {
-            start=System.currentTimeMillis();
-        }
-
-        public void stop() {
-            stop=System.currentTimeMillis();
-        }
-
-        public long time() {
-            return stop-start;
-        }
-    }
-
-}
-
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/TStampTest.java b/src/testcases/org/apache/tools/ant/taskdefs/TStampTest.java
deleted file mode 100644
index f931781..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/TStampTest.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs;
-
-import java.util.Calendar;
-import java.util.TimeZone;
-import java.util.Date;
-import java.text.SimpleDateFormat;
-
-import junit.framework.TestCase;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.Location;
-
-/**
- *
- * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
- */
-public class TStampTest extends TestCase {
-
-    protected Tstamp tstamp;
-    protected Project project;
-    protected Location location;
-
-    public TStampTest(String s) {
-        super(s);
-    }
-
-    protected void setUp() throws Exception {
-        location = new Location("test.xml");
-        project = new Project();
-        tstamp = new Tstamp();
-        tstamp.setLocation(location);
-        tstamp.setProject(project);
-    }
-
-    public void testTimeZone() throws Exception {
-        Tstamp.CustomFormat format = tstamp.createFormat();
-        format.setProperty("today");
-        format.setPattern("HH:mm:ss z");
-        format.setTimezone("GMT");
-        Date date = Calendar.getInstance().getTime();
-        format.execute(project, date, location);
-        String today = project.getProperty("today");
-
-        SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss z");
-        sdf.setTimeZone( TimeZone.getTimeZone("GMT") );
-        String expected = sdf.format(date);
-
-        assertEquals(expected, today);
-    }
-
-}
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/TarTest.java b/src/testcases/org/apache/tools/ant/taskdefs/TarTest.java
deleted file mode 100644
index 05be9e8..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/TarTest.java
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-import org.apache.tools.ant.BuildFileTest;
-
-/**
- * @author Nico Seessle <nico@seessle.de>
- */
-public class TarTest extends BuildFileTest {
-
-    public TarTest(String name) {
-        super(name);
-    }
-
-    public void setUp() {
-        configureProject("src/etc/testcases/taskdefs/tar.xml");
-    }
-
-    public void test1() {
-        expectBuildException("test1", "required argument not specified");
-    }
-
-    public void test2() {
-        expectBuildException("test2", "required argument not specified");
-    }
-
-    public void test3() {
-        expectBuildException("test3", "required argument not specified");
-    }
-
-    public void test4() {
-        expectBuildException("test4", "tar cannot include itself");
-    }
-
-    public void test5() {
-        executeTarget("test5");
-        java.io.File f
-            = new java.io.File("src/etc/testcases/taskdefs/test5.tar");
-
-        if (!f.exists()) {
-            fail("Tarring a directory failed");
-        }
-    }
-
-    public void test6() {
-        expectBuildException("test6", "Invalid value specified for longfile attribute.");
-    }
-
-    public void test7() {
-        executeTarget("test7");
-        java.io.File f1
-            = new java.io.File("src/etc/testcases/taskdefs/test7-prefix");
-
-        if (!(f1.exists() && f1.isDirectory())) {
-            fail("The prefix attribute is not working properly.");
-        }
-
-        java.io.File f2
-            = new java.io.File("src/etc/testcases/taskdefs/test7dir");
-
-        if (!(f2.exists() && f2.isDirectory())) {
-            fail("The prefix attribute is not working properly.");
-        }
-    }
-
-    public void test8() {
-        executeTarget("test8");
-        java.io.File f1
-            = new java.io.File("src/etc/testcases/taskdefs/test8.xml");
-        if (! f1.exists()) {
-            fail("The fullpath attribute or the preserveLeadingSlashes attribute does not work propertly");
-        }
-    }
-
-    public void test9() {
-        expectBuildException("test9", "Invalid value specified for compression attribute.");
-    }
-
-    public void test10() {
-        executeTarget("test10");
-        java.io.File f1
-            = new java.io.File("src/etc/testcases/taskdefs/test10.xml");
-        if (! f1.exists()) {
-            fail("The fullpath attribute or the preserveLeadingSlashes attribute does not work propertly");
-        }
-    }
-
-    public void test11() {
-        executeTarget("test11");
-        java.io.File f1
-            = new java.io.File("src/etc/testcases/taskdefs/test11.xml");
-        if (! f1.exists()) {
-            fail("The fullpath attribute or the preserveLeadingSlashes attribute does not work propertly");
-        }
-    }
-
-
-    public void tearDown() {
-        executeTarget("cleanup");
-    }
-}
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/TaskdefTest.java b/src/testcases/org/apache/tools/ant/taskdefs/TaskdefTest.java
deleted file mode 100644
index e5ecb72..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/TaskdefTest.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.BuildFileTest;
-
-/**
- * @author Nico Seessle <nico@seessle.de> 
- */
-public class TaskdefTest extends BuildFileTest { 
-    
-    public TaskdefTest(String name) { 
-        super(name);
-    }    
-    
-    public void setUp() { 
-        configureProject("src/etc/testcases/taskdefs/taskdef.xml");
-    }
-    
-    public void test1() { 
-        expectBuildException("test1", "required argument not specified");
-    }
-
-    public void test2() { 
-        expectBuildException("test2", "required argument not specified");
-    }
-
-    public void test3() { 
-        expectBuildException("test3", "required argument not specified");
-    }
-
-    public void test4() { 
-        expectBuildException("test4", "classname specified doesn't exist");
-    }
-
-    public void test5() { 
-        expectBuildException("test5", "No public execute() in " + Project.class);
-    }
-
-    public void test5a() { 
-        executeTarget("test5a");
-    }
-
-    public void test6() {
-        expectLog("test6", "simpletask: worked");
-    }
-
-    public void test7() {
-        expectLog("test7", "worked");
-    }
-
-    public void testGlobal() {
-        expectLog("testGlobal", "worked");
-    }
-
-    public void testOverride() {
-        executeTarget("testOverride");
-        String log = getLog();
-        assertTrue("override warning sent", 
-                   log.indexOf("Trying to override old definition of task copy") > -1);
-        assertTrue("task inside target worked", 
-                   log.indexOf("In target") > -1);
-        assertTrue("task inside target worked", 
-                   log.indexOf("In TaskContainer") > -1);
-    }
-}
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/TaskdefsTest.java b/src/testcases/org/apache/tools/ant/taskdefs/TaskdefsTest.java
deleted file mode 100644
index 0ef140d..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/TaskdefsTest.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import junit.framework.*;
-import java.io.*;
-import org.apache.tools.ant.BuildFileTest;
-
-/**
- * @author Nico Seessle <nico@seessle.de> 
- *
- * @deprecated use BuildFileTest instead.
- */
-public abstract class TaskdefsTest extends BuildFileTest { 
-    
-    public TaskdefsTest(String name) {
-        super(name);
-    }
-}
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/TestProcess.java b/src/testcases/org/apache/tools/ant/taskdefs/TestProcess.java
deleted file mode 100644
index 8f1da4e..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/TestProcess.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-/**
- * Interactive Testcase for Processdestroyer.
- *
- * @author <a href="mailto:mnewcomb@tacintel.com">Michael Newcomb</a>
- */
-public class TestProcess
-    implements Runnable
-{
-    private boolean run = true;
-    private boolean done = false;
-
-    public void shutdown()
-    {
-        if (!done)
-        {
-            System.out.println("shutting down TestProcess");
-            run = false;
-            
-            synchronized(this)
-            {
-                while (!done)
-                {
-                    try { wait(); } catch (InterruptedException ie) {}
-                }
-            }
-            
-            System.out.println("TestProcess shut down");
-        }
-    }
-
-    public void run()
-    {
-        for (int i = 0; i < 5 && run; i++)
-        {
-            System.out.println(Thread.currentThread().getName());
-            
-            try { Thread.sleep(2000); } catch (InterruptedException ie) {}
-        }
-
-        synchronized(this)
-        {
-            done = true;
-            notifyAll();
-        }
-    }
-
-    public Thread getShutdownHook()
-    {
-        return new TestProcessShutdownHook();
-    }
-
-    private class TestProcessShutdownHook
-        extends Thread
-    {
-        public void run()
-        {
-            shutdown();
-        }
-    }
-
-    public static void main(String[] args)
-    {
-        TestProcess tp = new TestProcess();
-        new Thread(tp, "TestProcess thread").start();
-        Runtime.getRuntime().addShutdownHook(tp.getShutdownHook());
-    }
-}
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/TimeProcess.java b/src/testcases/org/apache/tools/ant/taskdefs/TimeProcess.java
deleted file mode 100644
index b1de8e0..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/TimeProcess.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs;
-
-/**
- * Helper class for ExecuteWatchdogTest and ExecuteJavaTest.
- *
- * <p>Used to be an inner class of ExecuteWatchdogTest.
- *
- * @author <a href="mailto:sbailliez@imediation.com">Stephane Bailliez</a>
- */
-public class TimeProcess {
-    public static void main(String[] args) throws Exception {
-        int time = Integer.parseInt(args[0]);
-        if (time < 1) {
-            throw new IllegalArgumentException("Invalid time: " + time);
-        }
-        Thread.sleep(time);
-    }
-}
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/TypedefTest.java b/src/testcases/org/apache/tools/ant/taskdefs/TypedefTest.java
deleted file mode 100644
index c750d35..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/TypedefTest.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.BuildFileTest;
-
-/**
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- * @version $Revision$
- */
-public class TypedefTest extends BuildFileTest { 
-    
-    public TypedefTest(String name) { 
-        super(name);
-    }    
-    
-    public void setUp() { 
-        configureProject("src/etc/testcases/taskdefs/typedef.xml");
-    }
-    
-    public void testEmpty() { 
-        expectBuildException("empty", "required argument not specified");
-    }
-
-    public void testNoName() { 
-        expectBuildException("noName", "required argument not specified");
-    }
-
-    public void testNoClassname() { 
-        expectBuildException("noClassname", "required argument not specified");
-    }
-
-    public void testClassNotFound() { 
-        expectBuildException("classNotFound", 
-                             "classname specified doesn't exist");
-    }
-
-    public void testGlobal() {
-        expectLog("testGlobal", "");
-        Object ref = project.getReferences().get("global");
-        assertNotNull("ref is not null", ref);
-        assertEquals("org.example.types.TypedefTestType",
-                     ref.getClass().getName());
-    }
-
-    public void testLocal() {
-        expectLog("testLocal", 
-                  "Overriding previous definition of reference to local");
-        Object ref = project.getReferences().get("local");
-        assertNotNull("ref is not null", ref);
-        assertEquals("org.example.types.TypedefTestType",
-                     ref.getClass().getName());
-    }
-
-}
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/UntarTest.java b/src/testcases/org/apache/tools/ant/taskdefs/UntarTest.java
deleted file mode 100644
index b938779..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/UntarTest.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs;
-
-import java.io.File;
-import org.apache.tools.ant.BuildFileTest;
-import org.apache.tools.ant.util.FileUtils;
-
-/**
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- * @version $Revision$
- */
-public class UntarTest extends BuildFileTest {
-
-    public UntarTest(String name) {
-        super(name);
-    }
-
-    public void setUp() {
-        configureProject("src/etc/testcases/taskdefs/untar.xml");
-    }
-
-    public void tearDown() {
-        executeTarget("cleanup");
-    }
-
-    public void testRealTest() throws java.io.IOException {
-        FileUtils fileUtils = FileUtils.newFileUtils();
-        executeTarget("realTest");
-        assertTrue(fileUtils.contentEquals(project.resolveFile("../asf-logo.gif"),
-                                           project.resolveFile("asf-logo.gif")));
-    }
-
-    public void testRealGzipTest() throws java.io.IOException {
-        FileUtils fileUtils = FileUtils.newFileUtils();
-        executeTarget("realGzipTest");
-        assertTrue(fileUtils.contentEquals(project.resolveFile("../asf-logo.gif"),
-                                           project.resolveFile("asf-logo.gif")));
-    }
-
-    public void testRealBzip2Test() throws java.io.IOException {
-        FileUtils fileUtils = FileUtils.newFileUtils();
-        executeTarget("realBzip2Test");
-        assertTrue(fileUtils.contentEquals(project.resolveFile("../asf-logo.gif"),
-                                           project.resolveFile("asf-logo.gif")));
-    }
-
-    public void testTestTarTask() throws java.io.IOException {
-        FileUtils fileUtils = FileUtils.newFileUtils();
-        executeTarget("testTarTask");
-        assertTrue(fileUtils.contentEquals(project.resolveFile("../asf-logo.gif"),
-                                           project.resolveFile("asf-logo.gif")));
-    }
-
-    public void testTestGzipTarTask() throws java.io.IOException {
-        FileUtils fileUtils = FileUtils.newFileUtils();
-        executeTarget("testGzipTarTask");
-        assertTrue(fileUtils.contentEquals(project.resolveFile("../asf-logo.gif"),
-                                           project.resolveFile("asf-logo.gif")));
-    }
-
-    public void testTestBzip2TarTask() throws java.io.IOException {
-        FileUtils fileUtils = FileUtils.newFileUtils();
-        executeTarget("testBzip2TarTask");
-        assertTrue(fileUtils.contentEquals(project.resolveFile("../asf-logo.gif"),
-                                           project.resolveFile("asf-logo.gif")));
-    }
-
-    public void testSrcDirTest() throws java.io.IOException {
-        FileUtils fileUtils = FileUtils.newFileUtils();
-        expectBuildException("srcDirTest", "Src cannot be a directory.");
-    }
-}
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/UnzipTest.java b/src/testcases/org/apache/tools/ant/taskdefs/UnzipTest.java
deleted file mode 100644
index aedaa19..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/UnzipTest.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-import org.apache.tools.ant.BuildFileTest;
-import org.apache.tools.ant.util.FileUtils;
-
-/**
- * @author Nico Seessle <nico@seessle.de> 
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- */
-public class UnzipTest extends BuildFileTest { 
-    
-    public UnzipTest(String name) { 
-        super(name);
-    }    
-    
-    public void setUp() { 
-        configureProject("src/etc/testcases/taskdefs/unzip.xml");
-    }
-    
-    public void tearDown() {
-        executeTarget("cleanup");
-    }
-
-    public void test1() { 
-        expectBuildException("test1", "required argument not specified");
-    }
-
-    public void test2() { 
-        expectBuildException("test2", "required argument not specified");
-    }
-
-    public void test3() { 
-        expectBuildException("test3", "required argument not specified");
-    }
-
-
-    public void testRealTest() throws java.io.IOException {
-        FileUtils fileUtils = FileUtils.newFileUtils();
-        executeTarget("realTest");
-        assertTrue(fileUtils.contentEquals(project.resolveFile("../asf-logo.gif"),
-                                           project.resolveFile("asf-logo.gif")));
-    }
-    
-    public void testTestZipTask() throws java.io.IOException {
-        FileUtils fileUtils = FileUtils.newFileUtils();
-        executeTarget("testZipTask");
-        assertTrue(fileUtils.contentEquals(project.resolveFile("../asf-logo.gif"),
-                                           project.resolveFile("asf-logo.gif")));
-    }
-    
-}
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/WarTest.java b/src/testcases/org/apache/tools/ant/taskdefs/WarTest.java
deleted file mode 100644
index 303cf18..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/WarTest.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.BuildFileTest;
-
-/**
- * Testcase for the war task
- * 
- * @author Conor MacNeill
- */
-public class WarTest extends BuildFileTest {
-    public static final String TEST_BUILD_FILE
-        = "src/etc/testcases/taskdefs/war.xml";
-    
-    public WarTest(String name) {
-        super(name);
-    }
-
-    public void setUp() {
-        configureProject(TEST_BUILD_FILE);
-    }
-
-    public void tearDown() {
-        executeTarget("clean");
-    }
-
-    /**
-     * Test direct dependency removal
-     */
-    public void testLibRefs() {
-        executeTarget("testlibrefs");
-    }
-}
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/XmlPropertyTest.java b/src/testcases/org/apache/tools/ant/taskdefs/XmlPropertyTest.java
deleted file mode 100644
index 98d35d8..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/XmlPropertyTest.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-
-import org.apache.tools.ant.BuildFileTest;
-
-/**
- * @author Erik Hatcher
- */
-public class XmlPropertyTest extends BuildFileTest {
-
-    public XmlPropertyTest(String name) {
-        super(name);
-    }
-
-    public void setUp() {
-        configureProject("src/etc/testcases/taskdefs/xmlproperty.xml");
-    }
-
-
-    public void testProperties() {
-        executeTarget("test");
-//        System.out.println(this.getFullLog());
-        assertEquals("true", project.getProperty("root-tag(myattr)"));
-        assertEquals("Text", project.getProperty("root-tag.inner-tag"));
-        assertEquals("val", project.getProperty("root-tag.inner-tag(someattr)"));
-        assertEquals("false", project.getProperty("root-tag.a2.a3.a4"));
-    }
-
-}
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/ZipTest.java b/src/testcases/org/apache/tools/ant/taskdefs/ZipTest.java
deleted file mode 100644
index 270d324..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/ZipTest.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs;
-import org.apache.tools.ant.BuildFileTest;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.zip.ZipFile;
-import java.util.Enumeration;
-
-/**
- * @author Nico Seessle <nico@seessle.de>
- */
-public class ZipTest extends BuildFileTest {
-
-    public ZipTest(String name) {
-        super(name);
-    }
-
-    public void setUp() {
-        configureProject("src/etc/testcases/taskdefs/zip.xml");
-    }
-
-    public void test1() {
-        expectBuildException("test1", "required argument not specified");
-    }
-
-    public void test2() {
-        expectBuildException("test2", "required argument not specified");
-    }
-
-    public void test3() {
-        expectBuildException("test3", "zip cannot include itself");
-    }
-
-    public void test4() {
-        expectBuildException("test4", "zip cannot include itself");
-    }
-
-    public void tearDown() {
-        executeTarget("cleanup");
-    }
-
-    public void test5() {
-        executeTarget("test5");
-    }
-
-
-    public void test6() {
-        executeTarget("test6");
-    }
-
-
-    public void test7() {
-        executeTarget("test7");
-    }
-
-    public void test8() {
-        executeTarget("test8");
-    }
-
-    public void testZipgroupfileset() throws IOException {
-        executeTarget("testZipgroupfileset");
-
-        ZipFile zipFile = new ZipFile(new File(getProjectDir(), "zipgroupfileset.zip"));
-
-        assertTrue(zipFile.getEntry("ant.xml") != null);
-        assertTrue(zipFile.getEntry("optional/jspc.xml") != null);
-        assertTrue(zipFile.getEntry("zip/zipgroupfileset3.zip") != null);
-
-        assertTrue(zipFile.getEntry("test6.mf") == null);
-        assertTrue(zipFile.getEntry("test7.mf") == null);
-
-        zipFile.close();
-    }
-}
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/condition/ContainsTest.java b/src/testcases/org/apache/tools/ant/taskdefs/condition/ContainsTest.java
deleted file mode 100644
index 0ddf5fd..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/condition/ContainsTest.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.condition;
-
-import junit.framework.TestCase;
-
-/**
- * Testcase for the &lt;contains&gt; condition.
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- * @version $Revision$
- */
-public class ContainsTest extends TestCase {
-
-    public ContainsTest(String name) {
-        super(name);
-    }
-
-    public void testCaseSensitive() {
-        Contains con = new Contains();
-        con.setString("abc");
-        con.setSubstring("A");
-        assertTrue(!con.eval());
-
-        con.setCasesensitive(false);
-        assertTrue(con.eval());
-    }
-
-}
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/condition/EqualsTest.java b/src/testcases/org/apache/tools/ant/taskdefs/condition/EqualsTest.java
deleted file mode 100644
index be8b5fb..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/condition/EqualsTest.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.condition;
-
-import junit.framework.TestCase;
-
-/**
- * Testcase for the &lt;equals&gt; condition.
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- * @version $Revision$
- */
-public class EqualsTest extends TestCase {
-
-    public EqualsTest(String name) {
-        super(name);
-    }
-
-    public void testTrim() {
-        Equals eq = new Equals();
-        eq.setArg1("a");
-        eq.setArg2(" a");
-        assertTrue(!eq.eval());
-
-        eq.setTrim(true);
-        assertTrue(eq.eval());
-
-        eq.setArg2("a\t");
-        assertTrue(eq.eval());
-    }
-
-    public void testCaseSensitive() {
-        Equals eq = new Equals();
-        eq.setArg1("a");
-        eq.setArg2("A");
-        assertTrue(!eq.eval());
-
-        eq.setCasesensitive(false);
-        assertTrue(eq.eval());
-    }
-
-}
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/dir1/B.java b/src/testcases/org/apache/tools/ant/taskdefs/dir1/B.java
deleted file mode 100644
index 62f6699..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/dir1/B.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.dir1;
-
-public class B extends org.apache.tools.ant.taskdefs.dir2.A {
-    static {
-        System.out.println("B CLASS INITIALIZATION");
-        setA(new B());
-    }
-
-    public String toString() {
-        return "I am a B.";
-    }
-}
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/dir2/A.java b/src/testcases/org/apache/tools/ant/taskdefs/dir2/A.java
deleted file mode 100644
index 2a87afc..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/dir2/A.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.dir2;
-
-public class A {
-    public static void main(String [] args) {
-        System.out.println("MAIN");
-        System.out.println(a);
-    }
-
-    static A a=new A();
-
-    static {
-        System.out.println("A CLASS INITIALIZATION");
-    }
-
-    protected static void setA(A oa) {
-        a=oa;
-    }
-
-    public String toString() {
-        return "I am a A.";
-    }
-}
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/optional/ANTLRTest.java b/src/testcases/org/apache/tools/ant/taskdefs/optional/ANTLRTest.java
deleted file mode 100644
index b253188..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/optional/ANTLRTest.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional;
-
-import java.io.*;
-import org.apache.tools.ant.BuildFileTest;
-/**
- * If you want to run tests, it is highly recommended
- * to download ANTLR (www.antlr.org), build the 'all' jar
- * with the mkalljar script and drop the jar (about 300KB) into
- * Ant lib.
- * - Running w/ the default antlr.jar (70KB) does not work (missing class)
- * - Running w/ the antlr jar made w/ mkjar (88KB) does not work (still another class missing)
- *
- * Unless of course you specify the ANTLR classpath in your
- * system classpath. (see ANTLR install.html)
- *
- * @author Erik Meade <emeade@geekfarm.org>
- */
-public class ANTLRTest extends BuildFileTest {
-
-    private final static String TASKDEFS_DIR = "src/etc/testcases/taskdefs/optional/antlr/";
-
-    public ANTLRTest(String name) {
-        super(name);
-    }
-
-    public void setUp() {
-        configureProject(TASKDEFS_DIR + "antlr.xml");
-    }
-
-    public void tearDown() {
-        executeTarget("cleanup");
-    }
-    
-    public void test1() {
-        expectBuildException("test1", "required argument, target, missing");
-    }
-
-    public void test2() {
-        expectBuildException("test2", "Invalid output directory");
-    }
-
-    public void test3() {
-        executeTarget("test3");
-        File outputDirectory = new File(TASKDEFS_DIR + "antlr.tmp");
-        String[] calcFiles = outputDirectory.list(new CalcFileFilter());
-        assertEquals(5, calcFiles.length);
-    }
-
-    public void test4() {
-        executeTarget("test4");
-    }
-
-    public void test5() {
-        // should print "panic: Cannot find importVocab file 'JavaTokenTypes.txt'"
-        // since it needs to run java.g first before java.tree.g
-        expectBuildException("test5", "ANTLR returned: 1");
-    }
-
-    public void test6() {
-        executeTarget("test6");
-    }
-
-    public void test7() {
-        expectBuildException("test7", "Unable to determine generated class");
-    }
-}
-
-class CalcFileFilter implements FilenameFilter {
-    public boolean accept(File dir, String name) {
-        return name.startsWith("Calc");
-    }
-}
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/optional/AbstractXSLTLiaisonTest.java b/src/testcases/org/apache/tools/ant/taskdefs/optional/AbstractXSLTLiaisonTest.java
deleted file mode 100644
index 01c7a40..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/optional/AbstractXSLTLiaisonTest.java
+++ /dev/null
@@ -1,133 +0,0 @@
-package org.apache.tools.ant.taskdefs.optional;
-
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Jakarta-Regexp", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- */
-
-import junit.framework.TestCase;
-import org.apache.tools.ant.taskdefs.XSLTLiaison;
-import org.w3c.dom.Document;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.net.URL;
-
-/**
- * Abtract testcase for XSLTLiaison.
- * Override createLiaison for each XSLTLiaison.
- *
- * <a href="sbailliez@apache.org">Stephane Bailliez</a>
- */
-public abstract class AbstractXSLTLiaisonTest extends TestCase {
-
-    protected XSLTLiaison liaison;
-
-    protected  AbstractXSLTLiaisonTest(String name){
-        super(name);
-    }
-
-    protected void setUp() throws Exception {
-        liaison = createLiaison();
-    }
-
-    // to override
-    protected abstract XSLTLiaison createLiaison() throws Exception ;
-
-    /** load the file from the caller classloader that loaded this class */
-    protected File getFile(String name) throws FileNotFoundException {
-        URL url = getClass().getResource(name);
-        if (url == null){
-          throw new FileNotFoundException("Unable to load '" + name + "' from classpath");
-        }
-        return new File(url.getFile());
-    }
-
-    /** keep it simple stupid */
-    public void testTransform() throws Exception {
-        File xsl = getFile("/taskdefs/optional/xsltliaison-in.xsl");
-        liaison.setStylesheet(xsl);
-        liaison.addParam("param", "value");
-        File in = getFile("/taskdefs/optional/xsltliaison-in.xml");
-        File out = new File("xsltliaison.tmp");
-        try {
-            liaison.transform(in, out);
-        } finally {
-            out.delete();
-        }
-    }
-
-    public void testEncoding() throws Exception {
-        File xsl = getFile("/taskdefs/optional/xsltliaison-encoding-in.xsl");
-        liaison.setStylesheet(xsl);
-        File in = getFile("/taskdefs/optional/xsltliaison-encoding-in.xml");
-        File out = new File("xsltliaison-encoding.tmp");
-        try {
-            liaison.transform(in, out);
-            Document doc = parseXML(out);
-            assertEquals("root",doc.getDocumentElement().getNodeName());
-            assertEquals("message",doc.getDocumentElement().getFirstChild().getNodeName());
-            assertEquals("\u00E9\u00E0\u00E8\u00EF\u00F9",doc.getDocumentElement().getFirstChild().getFirstChild().getNodeValue());
-        } finally {
-            out.delete();
-        }
-    }
-
-    public Document parseXML(File file) throws Exception {
-        DocumentBuilderFactory dbfactory = DocumentBuilderFactory.newInstance();
-        DocumentBuilder dbuilder = dbfactory.newDocumentBuilder();
-        return dbuilder.parse(file);
-    }
-}
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/optional/EchoPropertiesTest.java b/src/testcases/org/apache/tools/ant/taskdefs/optional/EchoPropertiesTest.java
deleted file mode 100644
index 3108159..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/optional/EchoPropertiesTest.java
+++ /dev/null
@@ -1,206 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional;
-
-import org.apache.tools.ant.BuildFileTest;
-
-import java.io.*;
-import java.util.Properties;
-
-/**
- * Tests the EchoProperties task.
- *
- * @author    Matt Albrecht <a href="mailto:groboclown@users.sourceforge.net">groboclown@users.sourceforge.net</a>
- * @created   17-Jan-2002
- * @since     Ant 1.5
- */
-public class EchoPropertiesTest extends BuildFileTest {
-
-    private final static String TASKDEFS_DIR = "src/etc/testcases/taskdefs/optional/";
-    private static final String GOOD_OUTFILE = "test.properties";
-    private static final String PREFIX_OUTFILE = "test-prefix.properties";
-    private static final String BAD_OUTFILE = ".";
-
-    public EchoPropertiesTest(String name) {
-        super(name);
-    }
-
-    public void setUp() {
-        configureProject(TASKDEFS_DIR + "echoproperties.xml");
-        project.setProperty( "test.property", "is set" );
-    }
-
-    public void tearDown() {
-        executeTarget("cleanup");
-    }
-    
-    
-    public void testEchoToLog() {
-        executeTarget( "testEchoToLog" );
-        String out = getLog();
-        assertTrue(
-            "Did not output testEchoToLog.",
-            out.indexOf( "test.property=is set" ) >= 0 );
-    }
-    
-    
-    public void testEchoToBadFile() {
-        expectBuildExceptionContaining( "testEchoToBadFile",
-            "outfile is not writeable",
-            "Destfile "+toAbsolute(BAD_OUTFILE)+" could not be written to." );
-    }
-    
-    
-    public void testEchoToBadFileFail() {
-        expectBuildExceptionContaining( "testEchoToBadFileFail",
-            "outfile is not writeable",
-            "Destfile "+toAbsolute(BAD_OUTFILE)+" could not be written to." );
-    }
-    
-    
-    public void testEchoToBadFileNoFail() {
-        expectLog( "testEchoToBadFileNoFail",
-            "Destfile "+toAbsolute(BAD_OUTFILE)+" could not be written to." );
-    }
-    
-    
-    public void testEchoToGoodFile() throws Exception {
-        executeTarget( "testEchoToGoodFile" );
-        assertGoodFile();
-    }
-    
-    
-    public void testEchoToGoodFileFail() throws Exception {
-        executeTarget( "testEchoToGoodFileFail" );
-        assertGoodFile();
-    }
-    
-    
-    public void testEchoToGoodFileNoFail() throws Exception {
-        executeTarget( "testEchoToGoodFileNoFail" );
-        assertGoodFile();
-    }
-
-
-    public void testEchoPrefix() throws Exception {
-        executeTarget( "testEchoPrefix" );
-        Properties props=loadPropFile(PREFIX_OUTFILE);
-//        props.list(System.out);
-        assertEquals("prefix didn't include 'a.set' property","true",props.getProperty("a.set"));
-        assertNull("prefix failed to filter out property 'b.set'",
-                   props.getProperty("b.set"));
-    }
-
-    protected Properties loadPropFile(String relativeFilename)
-            throws IOException {
-        File f = createRelativeFile( relativeFilename );
-        Properties props=new Properties();
-        InputStream in=null;
-        try  {
-            in=new BufferedInputStream(new FileInputStream(f));
-            props.load(in);
-        } finally {
-            if(in!=null) {
-                try { in.close(); } catch(IOException e) {}
-            }
-        }
-        return props;
-    }
-
-    protected void assertGoodFile() throws Exception {
-        File f = createRelativeFile( GOOD_OUTFILE );
-        assertTrue(
-            "Did not create "+f.getAbsolutePath(),
-            f.exists() );
-        Properties props=loadPropFile(GOOD_OUTFILE);
-        props.list(System.out);
-        assertEquals("test property not found ",
-                     "is set",props.getProperty("test.property"));
-/*
-        // read in the file
-        FileReader fr = new FileReader( f );
-        try {
-            BufferedReader br = new BufferedReader( fr );
-            String read = null;
-            while ( (read = br.readLine()) != null)
-            {
-                if (read.indexOf("test.property=is set") >= 0)
-                {
-                    // found the property we set - it's good.
-                    return;
-                }
-            }
-            fail( "did not encounter set property in generated file." );
-        } finally {
-            try { fr.close(); } catch(IOException e) {}
-        }
-*/
-    }
-
-
-    protected String toAbsolute( String filename ) {
-        return createRelativeFile( filename ).getAbsolutePath();
-    }
-
-
-    protected File createRelativeFile( String filename ) {
-        if (filename.equals( "." )) {
-            return getProjectDir();
-        }
-        // else
-        return new File( getProjectDir(), filename );
-    }
-}
-
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/optional/JspcTest.java b/src/testcases/org/apache/tools/ant/taskdefs/optional/JspcTest.java
deleted file mode 100644
index 9e550b3..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/optional/JspcTest.java
+++ /dev/null
@@ -1,202 +0,0 @@
-/*
- *  The Apache Software License, Version 1.1
- *
- *  Copyright (c) 2002 The Apache Software Foundation.  All rights
- *  reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions
- *  are met:
- *
- *  1. Redistributions of source code must retain the above copyright
- *  notice, this list of conditions and the following disclaimer.
- *
- *  2. Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in
- *  the documentation and/or other materials provided with the
- *  distribution.
- *
- *  3. The end-user documentation included with the redistribution, if
- *  any, must include the following acknowlegement:
- *  "This product includes software developed by the
- *  Apache Software Foundation (http://www.apache.org/)."
- *  Alternately, this acknowlegement may appear in the software itself,
- *  if and wherever such third-party acknowlegements normally appear.
- *
- *  4. The names "The Jakarta Project", "Ant", and "Apache Software
- *  Foundation" must not be used to endorse or promote products derived
- *  from this software without prior written permission. For written
- *  permission, please contact apache@apache.org.
- *
- *  5. Products derived from this software may not be called "Apache"
- *  nor may "Apache" appear in their names without prior written
- *  permission of the Apache Group.
- *
- *  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- *  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- *  OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- *  DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- *  ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- *  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- *  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- *  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- *  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- *  SUCH DAMAGE.
- *  ====================================================================
- *
- *  This software consists of voluntary contributions made by many
- *  individuals on behalf of the Apache Software Foundation.  For more
- *  information on the Apache Software Foundation, please see
- *  <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional;
-
-import java.io.*;
-import java.util.Properties;
-
-import org.apache.tools.ant.BuildFileTest;
-
-/**
- * Tests the Jspc task.
- *
- * @author slo
- * @created 07 March 2002
- * @since Ant 1.5
- */
-public class JspcTest extends BuildFileTest {
-    /**
-     * Description of the Field
-     */
-    private File baseDir;
-    /**
-     * Description of the Field
-     */
-    private File outDir;
-
-    /**
-     * Description of the Field
-     */
-    private final static String TASKDEFS_DIR = "src/etc/testcases/taskdefs/optional/";
-
-
-    /**
-     * Constructor for the JspcTest object
-     *
-     * @param name Description of Parameter
-     */
-    public JspcTest(String name) {
-        super(name);
-    }
-
-
-    /**
-     * The JUnit setup method
-     */
-    public void setUp() {
-        configureProject(TASKDEFS_DIR + "jspc.xml");
-        baseDir = new File(TASKDEFS_DIR);
-        outDir = new File(baseDir, "jsp/java");
-    }
-
-
-    /**
-     * The teardown method for JUnit
-     */
-    public void tearDown() {
-        executeTarget("cleanup");
-    }
-
-
-    /**
-     * A unit test for JUnit
-     */
-    public void testSimple() throws Exception {
-        executeJspCompile("testSimple", "simple.java");
-    }
-
-
-    /**
-     * A unit test for JUnit
-     */
-    public void testUriroot() throws Exception {
-        executeJspCompile("testUriroot", "uriroot.java");
-    }
-
-
-    /**
-     * A unit test for JUnit
-     */
-    public void testXml() throws Exception {
-        executeJspCompile("testXml", "xml.java");
-    }
-
-
-    /**
-     * try a keyword in a file
-     */
-    public void testKeyword() throws Exception {
-        executeJspCompile("testKeyword", "default_00025.java");
-    }
-
-
-    /**
-     * what happens to 1nvalid-classname
-     */
-    public void testInvalidClassname() throws Exception {
-        executeJspCompile("testInvalidClassname", 
-                "_00031nvalid_0002dclassname.java");
-    }
-
-    
-    /**
-     * A unit test for JUnit
-     */
-    public void testNoTld() throws Exception {
-        expectBuildExceptionContaining("testNoTld",
-                "Jasper found an error in a file",
-                "Java returned: 9");
-    }
-
-
-
-    /**
-     * run a target then verify the named file gets created
-     *
-     * @param target Description of Parameter
-     * @param javafile Description of Parameter
-     * @exception Exception trouble
-     */
-    protected void executeJspCompile(String target, String javafile)
-        throws Exception {
-        executeTarget(target);
-        assertJavaFileCreated(javafile);
-    }
-
-
-    /**
-     * verify that a named file was created
-     *
-     * @param filename Description of Parameter
-     * @exception Exception trouble
-     */
-    protected void assertJavaFileCreated(String filename)
-        throws Exception {
-        File file = getOutputFile(filename);
-        assertTrue("file " + filename + " not found", file.exists());
-        assertTrue("file " + filename + " is empty", file.length() > 0);
-    }
-
-
-    /**
-     * Gets the OutputFile attribute of the JspcTest object
-     *
-     * @param subpath Description of Parameter
-     * @return The OutputFile value
-     */
-    protected File getOutputFile(String subpath) {
-        return new File(outDir, subpath);
-    }
-}
-
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/optional/PropertyFileTest.java b/src/testcases/org/apache/tools/ant/taskdefs/optional/PropertyFileTest.java
deleted file mode 100644
index 95b2e17..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/optional/PropertyFileTest.java
+++ /dev/null
@@ -1,240 +0,0 @@
-/*
- *  The Apache Software License, Version 1.1
- *
- *  Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- *  reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions
- *  are met:
- *
- *  1. Redistributions of source code must retain the above copyright
- *  notice, this list of conditions and the following disclaimer.
- *
- *  2. Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in
- *  the documentation and/or other materials provided with the
- *  distribution.
- *
- *  3. The end-user documentation included with the redistribution, if
- *  any, must include the following acknowlegement:
- *  "This product includes software developed by the
- *  Apache Software Foundation (http://www.apache.org/)."
- *  Alternately, this acknowlegement may appear in the software itself,
- *  if and wherever such third-party acknowlegements normally appear.
- *
- *  4. The names "The Jakarta Project", "Ant", and "Apache Software
- *  Foundation" must not be used to endorse or promote products derived
- *  from this software without prior written permission. For written
- *  permission, please contact apache@apache.org.
- *
- *  5. Products derived from this software may not be called "Apache"
- *  nor may "Apache" appear in their names without prior written
- *  permission of the Apache Group.
- *
- *  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- *  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- *  OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- *  DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- *  ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- *  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- *  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- *  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- *  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- *  SUCH DAMAGE.
- *  ====================================================================
- *
- *  This software consists of voluntary contributions made by many
- *  individuals on behalf of the Apache Software Foundation.  For more
- *  information on the Apache Software Foundation, please see
- *  <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional;
-
-import org.apache.tools.ant.BuildFileTest;
-
-import java.util.Properties;
-import java.io.FileOutputStream;
-import java.io.FileInputStream;
-import java.io.InputStream;
-import java.io.File;
-
-/**
- *  JUnit testcase that excercises the optional PropertyFile task in ant.
- *  (this is really more of a functional test so far.., but it's enough to let
- *   me start refactoring...)
- *
- *@author     Levi Cook <levicook@papajo.com>
- *@created    October 2, 2001
- */
-
-public class PropertyFileTest extends BuildFileTest {
-
-    public PropertyFileTest(String name) {
-        super(name);
-    }
-
-
-    /**
-     *  The JUnit setup method
-     */
-    public void setUp() throws Exception {
-        destroyTempFiles();
-        initTestPropFile();
-        initBuildPropFile();
-        configureProject(projectFilePath);
-    }
-
-
-    /**
-     *  The JUnit tearDown method
-     */
-    public void tearDown() {
-        destroyTempFiles();
-    }
-
-
-    /**
-     *  A unit test for JUnit- Excercises the propertyfile tasks ability to
-     *  update properties that are already defined-
-     */
-    public void testUpdatesExistingProperties() throws Exception {
-        Properties beforeUpdate = getTestProperties();
-        assertEquals(FNAME, beforeUpdate.getProperty(FNAME_KEY));
-        assertEquals(LNAME, beforeUpdate.getProperty(LNAME_KEY));
-        assertEquals(EMAIL, beforeUpdate.getProperty(EMAIL_KEY));
-        assertEquals(null, beforeUpdate.getProperty(PHONE_KEY));
-        assertEquals(null, beforeUpdate.getProperty(AGE_KEY));
-        assertEquals(null, beforeUpdate.getProperty(DATE_KEY));
-      
-        // ask ant to update the properties...
-        executeTarget("update-existing-properties");
-      
-        Properties afterUpdate = getTestProperties();
-        assertEquals(NEW_FNAME, afterUpdate.getProperty(FNAME_KEY));
-        assertEquals(NEW_LNAME, afterUpdate.getProperty(LNAME_KEY));
-        assertEquals(NEW_EMAIL, afterUpdate.getProperty(EMAIL_KEY));
-        assertEquals(NEW_PHONE, afterUpdate.getProperty(PHONE_KEY));
-        assertEquals(NEW_AGE, afterUpdate.getProperty(AGE_KEY));
-        assertEquals(NEW_DATE, afterUpdate.getProperty(DATE_KEY));
-    }
-
-    public void testExerciseDefaultAndIncrement() throws Exception {
-        executeTarget("exercise");
-        assertEquals("3",project.getProperty("int.with.default"));
-        assertEquals("1",project.getProperty("int.without.default"));
-        assertEquals("-->",project.getProperty("string.with.default"));
-        assertEquals(".",project.getProperty("string.without.default"));
-        assertEquals("2002/01/21 12:18", project.getProperty("ethans.birth"));
-        assertEquals("2003/01/21", project.getProperty("first.birthday"));
-        assertEquals("0124", project.getProperty("olderThanAWeek"));
-        assertEquals("37", project.getProperty("existing.prop"));
-    }
-
-/*
-    public void testDirect() throws Exception {
-        PropertyFile pf = new PropertyFile();
-        pf.setProject(project);
-        pf.setFile(new File(testPropsFilePath));
-        PropertyFile.Entry entry = pf.createEntry();
-
-        entry.setKey("date");
-        entry.setValue("123");
-        PropertyFile.Entry.Type type = new PropertyFile.Entry.Type();
-        type.setValue("date");
-        entry.setType(type);
-
-        entry.setPattern("yyyy/MM/dd");
-        
-        PropertyFile.Entry.Operation operation = new PropertyFile.Entry.Operation();
-        operation.setValue("+");
-        pf.execute();
-
-        Properties props = getTestProperties();
-        assertEquals("yeehaw", props.getProperty("date"));
-    }
-*/
-
-    private Properties getTestProperties() throws Exception {
-        Properties testProps = new Properties();
-        FileInputStream propsFile = new FileInputStream(testPropsFilePath);
-        testProps.load(propsFile);
-        propsFile.close();
-        return testProps;
-    }
-
-
-    private void initTestPropFile() throws Exception {
-        Properties testProps = new Properties();
-        testProps.put(FNAME_KEY, FNAME);
-        testProps.put(LNAME_KEY, LNAME);
-        testProps.put(EMAIL_KEY, EMAIL);
-        testProps.put("existing.prop", "37");
-      
-        FileOutputStream fos = new FileOutputStream(testPropsFilePath);
-        testProps.save(fos, "defaults");
-        fos.close();
-    }
-
-
-    private void initBuildPropFile() throws Exception {
-        Properties buildProps = new Properties();
-        buildProps.put(testPropertyFileKey, testPropertyFile);
-        buildProps.put(FNAME_KEY, NEW_FNAME);
-        buildProps.put(LNAME_KEY, NEW_LNAME);
-        buildProps.put(EMAIL_KEY, NEW_EMAIL);
-        buildProps.put(PHONE_KEY, NEW_PHONE);
-        buildProps.put(AGE_KEY, NEW_AGE);
-        buildProps.put(DATE_KEY, NEW_DATE);
-      
-        FileOutputStream fos = new FileOutputStream(buildPropsFilePath);
-        buildProps.save(fos, null);
-        fos.close();
-    }
-
-
-    private void destroyTempFiles() {
-        File tempFile = new File(testPropsFilePath);
-        tempFile.delete();
-        tempFile = null;
-
-        tempFile = new File(buildPropsFilePath);
-        tempFile.delete();
-        tempFile = null;
-    }
-   
-
-
-    private static final String 
-        projectFilePath     = "src/etc/testcases/taskdefs/optional/propertyfile.xml",
-      
-        testPropertyFile    = "propertyfile.test.properties",
-        testPropertyFileKey = "test.propertyfile",
-        testPropsFilePath   = "src/etc/testcases/taskdefs/optional/" + testPropertyFile,
-      
-        buildPropsFilePath  = "src/etc/testcases/taskdefs/optional/propertyfile.build.properties",
-      
-        FNAME     = "Bruce",
-        NEW_FNAME = "Clark",
-        FNAME_KEY = "firstname",
-      
-        LNAME     = "Banner",
-        NEW_LNAME = "Kent",
-        LNAME_KEY = "lastname",
-      
-        EMAIL     = "incredible@hulk.com",
-        NEW_EMAIL = "kc@superman.com",
-        EMAIL_KEY = "email",
-   
-        NEW_PHONE = "(520) 555-1212",
-        PHONE_KEY = "phone",
-      
-        NEW_AGE = "30",
-        AGE_KEY = "age",
-      
-        NEW_DATE = "2001/01/01 12:45",
-        DATE_KEY = "date";
-}
-
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/optional/PvcsTest.java b/src/testcases/org/apache/tools/ant/taskdefs/optional/PvcsTest.java
deleted file mode 100644
index ee959b2..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/optional/PvcsTest.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional;
-
-import java.io.*;
-import org.apache.tools.ant.BuildFileTest;
-
-/**
- * @author Thomas Christensen <tchristensen@nordija.com>
- */
-public class PvcsTest extends BuildFileTest { 
-    
-    public PvcsTest(String name) { 
-        super(name);
-    }    
-    
-    public void setUp() { 
-        configureProject("src/etc/testcases/taskdefs/optional/pvcs.xml");
-    }
-    
-    public void test1() { 
-        expectBuildException("test1", "Required argument repository not specified");
-    }
-
-    public void test2() {
-        executeTarget("test2");
-    }
-
-    public void test3() { 
-        executeTarget("test3");
-    }
-
-    public void test4() { 
-        executeTarget("test4");
-    }
-
-    public void test5() { 
-        executeTarget("test5");
-    }
-
-    public void test6() { 
-        expectBuildException("test6", "Failed executing: /never/heard/of/a/directory/structure/like/this/pcli lvf -z -aw -pr//ct4serv2/pvcs/monitor /. Exception: /never/heard/of/a/directory/structure/like/this/pcli: not found");
-    }
-}
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/optional/ReplaceRegExpTest.java b/src/testcases/org/apache/tools/ant/taskdefs/optional/ReplaceRegExpTest.java
deleted file mode 100644
index a46c5d2..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/optional/ReplaceRegExpTest.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- *  The Apache Software License, Version 1.1
- *
- *  Copyright (c) 2001 The Apache Software Foundation.  All rights
- *  reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions
- *  are met:
- *
- *  1. Redistributions of source code must retain the above copyright
- *  notice, this list of conditions and the following disclaimer.
- *
- *  2. Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in
- *  the documentation and/or other materials provided with the
- *  distribution.
- *
- *  3. The end-user documentation included with the redistribution, if
- *  any, must include the following acknowlegement:
- *  "This product includes software developed by the
- *  Apache Software Foundation (http://www.apache.org/)."
- *  Alternately, this acknowlegement may appear in the software itself,
- *  if and wherever such third-party acknowlegements normally appear.
- *
- *  4. The names "The Jakarta Project", "Ant", and "Apache Software
- *  Foundation" must not be used to endorse or promote products derived
- *  from this software without prior written permission. For written
- *  permission, please contact apache@apache.org.
- *
- *  5. Products derived from this software may not be called "Apache"
- *  nor may "Apache" appear in their names without prior written
- *  permission of the Apache Group.
- *
- *  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- *  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- *  OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- *  DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- *  ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- *  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- *  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- *  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- *  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- *  SUCH DAMAGE.
- *  ====================================================================
- *
- *  This software consists of voluntary contributions made by many
- *  individuals on behalf of the Apache Software Foundation.  For more
- *  information on the Apache Software Foundation, please see
- *  <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional;
-
-import org.apache.tools.ant.BuildFileTest;
-
-import java.util.Properties;
-import java.io.FileInputStream;
-import java.io.IOException;
-
-/**
- * JUnit Testcase for the optional replaceregexp task.
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> 
- * @version $Revision$
- */
-public class ReplaceRegExpTest extends BuildFileTest {
-
-    public ReplaceRegExpTest(String name) {
-        super(name);
-    }
-    
-    public void setUp() { 
-        configureProject("src/etc/testcases/taskdefs/optional/replaceregexp.xml");
-    }
-    
-    public void tearDown() { 
-        executeTarget("cleanup");
-    }
-    
-    public void testReplace() throws IOException {
-        Properties original = new Properties();
-        FileInputStream propsFile = null;
-        try {
-            propsFile = new FileInputStream("src/etc/testcases/taskdefs/optional/replaceregexp.properties");
-            original.load(propsFile);
-        } finally {
-            if (propsFile != null) {
-                propsFile.close();
-                propsFile = null;
-            }
-        }
-
-        assertEquals("Def", original.get("OldAbc"));
-
-        executeTarget("testReplace");
-
-        Properties after = new Properties();
-        try {
-            propsFile = new FileInputStream("src/etc/testcases/taskdefs/optional/test.properties");
-            after.load(propsFile);
-        } finally {
-            if (propsFile != null) {
-                propsFile.close();
-                propsFile = null;
-            }
-        }
-
-        assertNull(after.get("OldAbc"));
-        assertEquals("AbcDef", after.get("NewProp"));
-    }
-
-}// ReplaceRegExpTest
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/optional/TraXLiaisonTest.java b/src/testcases/org/apache/tools/ant/taskdefs/optional/TraXLiaisonTest.java
deleted file mode 100644
index b0988c5..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/optional/TraXLiaisonTest.java
+++ /dev/null
@@ -1,138 +0,0 @@
-package org.apache.tools.ant.taskdefs.optional;
-
-import org.apache.tools.ant.taskdefs.XSLTLiaison;
-import org.apache.tools.ant.taskdefs.XSLTLogger;
-import org.apache.tools.ant.taskdefs.condition.Os;
-import org.apache.tools.ant.BuildException;
-
-import java.io.File;
-
-import junit.framework.AssertionFailedError;
-
-/* 
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights 
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer. 
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:  
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Jakarta-Regexp", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- */
-
-/**
- * TraX XSLTLiaison testcase
- * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
- */
-public class TraXLiaisonTest extends AbstractXSLTLiaisonTest 
-    implements XSLTLogger {
-
-    public TraXLiaisonTest(String name){
-        super(name);
-    }
-
-    public void tearDown() {
-        File f = new File("xalan2-redirect-out.tmp");
-        if (f.exists()) {
-            f.delete();
-        }
-    }
-
-    public XSLTLiaison createLiaison() throws Exception {
-        TraXLiaison l = new TraXLiaison();
-        l.setLogger(this);
-        return l;
-    }
-
-    public void testXalan2Redirect() throws Exception {
-        File xsl = getFile("/taskdefs/optional/xalan-redirect-in.xsl");
-        liaison.setStylesheet(xsl);
-        File out = new File("xalan2-redirect-out-dummy.tmp");
-        File in = getFile("/taskdefs/optional/xsltliaison-in.xsl");
-        try {
-            liaison.addParam("xalan-version", "2");
-            liaison.transform(in, out);
-        } finally {
-            out.delete();
-        }
-    }
-
-    public void testMultipleTransform() throws Exception {
-        File xsl = getFile("/taskdefs/optional/xsltliaison-in.xsl");
-        liaison.setStylesheet(xsl);
-        liaison.addParam("param", "value");
-        File in = getFile("/taskdefs/optional/xsltliaison-in.xml");
-        // test for 10 consecutives transform
-        for (int i = 0; i < 50; i++){
-            File out = new File("xsltliaison" + i + ".tmp");
-            try {
-                liaison.transform(in, out);
-            } catch (Exception e){
-                throw new BuildException("failed in transform " + i, e);
-            } finally {
-                out.delete();
-            }
-        }
-    }
-
-    public void testSystemId(){
-        File file = null;
-        if ( File.separatorChar == '\\' ){
-            file = new File("d:\\jdk");
-        } else {
-            file = new File("/user/local/bin");
-        }
-        String systemid = ((TraXLiaison)liaison).getSystemId(file);
-        assertTrue("SystemIDs should start by file:///", systemid.startsWith("file:///"));
-        assertTrue("SystemIDs should not start with file:////", !systemid.startsWith("file:////"));
-    }
-
-    public void log(String message) {
-        throw new AssertionFailedError("Liaison sent message: "+message);
-    }
-
-}
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/optional/WsdlToDotnetTest.java b/src/testcases/org/apache/tools/ant/taskdefs/optional/WsdlToDotnetTest.java
deleted file mode 100644
index 64547d3..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/optional/WsdlToDotnetTest.java
+++ /dev/null
@@ -1,176 +0,0 @@
-/*
- *  The Apache Software License, Version 1.1
- *
- *  Copyright (c) 2002 The Apache Software Foundation.  All rights
- *  reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions
- *  are met:
- *
- *  1. Redistributions of source code must retain the above copyright
- *  notice, this list of conditions and the following disclaimer.
- *
- *  2. Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in
- *  the documentation and/or other materials provided with the
- *  distribution.
- *
- *  3. The end-user documentation included with the redistribution, if
- *  any, must include the following acknowlegement:
- *  "This product includes software developed by the
- *  Apache Software Foundation (http://www.apache.org/)."
- *  Alternately, this acknowlegement may appear in the software itself,
- *  if and wherever such third-party acknowlegements normally appear.
- *
- *  4. The names "The Jakarta Project", "Ant", and "Apache Software
- *  Foundation" must not be used to endorse or promote products derived
- *  from this software without prior written permission. For written
- *  permission, please contact apache@apache.org.
- *
- *  5. Products derived from this software may not be called "Apache"
- *  nor may "Apache" appear in their names without prior written
- *  permission of the Apache Group.
- *
- *  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- *  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- *  OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- *  DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- *  ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- *  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- *  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- *  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- *  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- *  SUCH DAMAGE.
- *  ====================================================================
- *
- *  This software consists of voluntary contributions made by many
- *  individuals on behalf of the Apache Software Foundation.  For more
- *  information on the Apache Software Foundation, please see
- *  <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional;
-
-import java.io.*;
-import java.util.Properties;
-
-import org.apache.tools.ant.BuildFileTest;
-
-/**
- * Tests the WsdlToDotnet task.
- *
- * @author steve loughran
- * @since Ant 1.5
- */
-public class WsdlToDotnetTest extends BuildFileTest {
-
-    /**
-     * Description of the Field
-     */
-    private final static String TASKDEFS_DIR = "src/etc/testcases/taskdefs/optional/";
-
-
-    /**
-     * Constructor 
-     *
-     * @param name testname
-     */
-    public WsdlToDotnetTest(String name) {
-        super(name);
-    }
-
-
-    /**
-     * The JUnit setup method
-     */
-    public void setUp() {
-        configureProject(TASKDEFS_DIR + "WsdlToDotnet.xml");
-    }
-
-
-    /**
-     * The teardown method for JUnit
-     */
-    public void tearDown() {
-        executeTarget("teardown");
-    }
-
-
-    
-    /**
-     * A unit test for JUnit
-     */
-    public void testNoParams() throws Exception {
-        expectBuildExceptionContaining("testNoParams",
-                "expected failure",
-                "destination file must be specified");
-    }
-
-    /**
-     * A unit test for JUnit
-     */
-    public void testNoSrc() throws Exception {
-        expectBuildExceptionContaining("testNoSrc",
-                "expected failure",
-                "you must specify either a source file or a URL");
-    }
-
-    /**
-     * A unit test for JUnit
-     */
-    public void testDestIsDir() throws Exception {
-        expectBuildExceptionContaining("testDestIsDir",
-                "expected failure",
-                "is a directory");
-    }
-    
-    /**
-     * A unit test for JUnit
-     */
-    public void testBothSrc() throws Exception {
-        expectBuildExceptionContaining("testBothSrc",
-                "expected failure",
-                "both a source file and a URL");
-    } 
-     /**
-     * A unit test for JUnit
-     */
-    public void testSrcIsDir() throws Exception {
-        expectBuildExceptionContaining("testSrcIsDir",
-                "expected failure",
-                "is a directory");
-    } 
-    
-    /**
-     * A unit test for JUnit
-     */
-    public void testSrcIsMissing() throws Exception {
-        expectBuildExceptionContaining("testSrcIsMissing",
-                "expected failure",
-                "does not exist");
-    }
-     
-    /**
-     * A unit test for JUnit
-     */
-    public void testLocalWsdl() throws Exception {
-        executeTarget("testLocalWsdl");
-    } 
-    /**
-     * A unit test for JUnit
-     */
-    public void testLocalWsdlServer() throws Exception {
-        executeTarget("testLocalWsdlServer");
-    } 
-     /**
-     * A unit test for JUnit
-     */
-    public void testInvalidExtraOps() throws Exception {
-        expectBuildExceptionContaining("testInvalidExtraOps",
-                "expected failure",
-                "WSDL returned: 1");
-    }   
-}
-
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/optional/XalanLiaisonTest.java b/src/testcases/org/apache/tools/ant/taskdefs/optional/XalanLiaisonTest.java
deleted file mode 100644
index 8eb6cc9..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/optional/XalanLiaisonTest.java
+++ /dev/null
@@ -1,95 +0,0 @@
-package org.apache.tools.ant.taskdefs.optional;
-
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights 
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer. 
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:  
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Jakarta-Regexp", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- */
-
-import org.apache.tools.ant.taskdefs.XSLTLiaison;
-
-import java.io.File;
-
-/**
- * Xalan Liaison testcase
- * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
- */
-public class XalanLiaisonTest extends AbstractXSLTLiaisonTest {
-    public XalanLiaisonTest(String name){
-        super(name);
-    }
-
-    public void tearDown() {
-        File f = new File("xalan1-redirect-out.tmp");
-        if (f.exists()) {
-            f.delete();
-        }
-    }
-
-    protected XSLTLiaison createLiaison() throws Exception {
-        return new XalanLiaison();
-    }
-
-    public void testXalan1Redirect() throws Exception {
-        File xsl = getFile("/taskdefs/optional/xalan-redirect-in.xsl");
-        liaison.setStylesheet(xsl);
-        File out = new File("xalan1-redirect-out-dummy.tmp");
-        File in = getFile("/taskdefs/optional/xsltliaison-in.xsl");
-        try {
-            liaison.addParam("xalan-version", "1");
-            liaison.transform(in, out);
-        } finally {
-            out.delete();
-        }
-    }
-}
-
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/optional/XmlValidateTest.java b/src/testcases/org/apache/tools/ant/taskdefs/optional/XmlValidateTest.java
deleted file mode 100644
index ecb12a9..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/optional/XmlValidateTest.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- *  The Apache Software License, Version 1.1
- *
- *  Copyright (c) 2002 The Apache Software Foundation.  All rights
- *  reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions
- *  are met:
- *
- *  1. Redistributions of source code must retain the above copyright
- *  notice, this list of conditions and the following disclaimer.
- *
- *  2. Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in
- *  the documentation and/or other materials provided with the
- *  distribution.
- *
- *  3. The end-user documentation included with the redistribution, if
- *  any, must include the following acknowlegement:
- *  "This product includes software developed by the
- *  Apache Software Foundation (http://www.apache.org/)."
- *  Alternately, this acknowlegement may appear in the software itself,
- *  if and wherever such third-party acknowlegements normally appear.
- *
- *  4. The names "The Jakarta Project", "Ant", and "Apache Software
- *  Foundation" must not be used to endorse or promote products derived
- *  from this software without prior written permission. For written
- *  permission, please contact apache@apache.org.
- *
- *  5. Products derived from this software may not be called "Apache"
- *  nor may "Apache" appear in their names without prior written
- *  permission of the Apache Group.
- *
- *  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- *  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- *  OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- *  DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- *  ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- *  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- *  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- *  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- *  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- *  SUCH DAMAGE.
- *  ====================================================================
- *
- *  This software consists of voluntary contributions made by many
- *  individuals on behalf of the Apache Software Foundation.  For more
- *  information on the Apache Software Foundation, please see
- *  <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional;
-
-import java.io.*;
-import java.util.Properties;
-
-import org.apache.tools.ant.BuildFileTest;
-
-/**
- * Tests the XmlValidateTest task.
- *
- * @author steve loughran
- * @since Ant 1.5
- */
-public class XmlValidateTest extends BuildFileTest {
-
-    /**
-     * where tasks run
-     */
-    private final static String TASKDEFS_DIR = "src/etc/testcases/taskdefs/optional/";
-
-
-    /**
-     * Constructor 
-     *
-     * @param name testname
-     */
-    public XmlValidateTest(String name) {
-        super(name);
-    }
-
-
-    /**
-     * The JUnit setup method
-     */
-    public void setUp() {
-        configureProject(TASKDEFS_DIR + "xmlvalidate.xml");
-    }
-
-
-    /**
-     * The teardown method for JUnit
-     */
-    public void tearDown() {
-    }
-
-
-    /**
-     * A unit test for JUnit
-     */
-    public void testValidate() throws Exception {
-         executeTarget("testValidate");
-    }
-    
-
-    /**
-     * A unit test for JUnit
-     */
-    public void testDeepValidate() throws Exception {
-         executeTarget("testDeepValidate");
-    }
-
-    /**
-     *
-     */
-    public void testXmlCatalog() {
-        executeTarget("xmlcatalog");
-    }
-}
-
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/optional/XslpLiaisonTest.java b/src/testcases/org/apache/tools/ant/taskdefs/optional/XslpLiaisonTest.java
deleted file mode 100644
index 4b8f47f..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/optional/XslpLiaisonTest.java
+++ /dev/null
@@ -1,72 +0,0 @@
-package org.apache.tools.ant.taskdefs.optional;
-
-import org.apache.tools.ant.taskdefs.XSLTLiaison;
-
-/* 
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights 
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer. 
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:  
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Jakarta-Regexp", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- */
-
-/**
- * XSLP Liaison testcase
- * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
- */
-public class XslpLiaisonTest extends AbstractXSLTLiaisonTest {
-    public XslpLiaisonTest(String name){
-        super(name);
-    }
-
-    protected XSLTLiaison createLiaison() throws Exception {
-        return new XslpLiaison();
-    }
-}
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/optional/XsltTest.java b/src/testcases/org/apache/tools/ant/taskdefs/optional/XsltTest.java
deleted file mode 100644
index 2853284..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/optional/XsltTest.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- *  The Apache Software License, Version 1.1
- *
- *  Copyright (c) 2002 The Apache Software Foundation.  All rights
- *  reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions
- *  are met:
- *
- *  1. Redistributions of source code must retain the above copyright
- *  notice, this list of conditions and the following disclaimer.
- *
- *  2. Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in
- *  the documentation and/or other materials provided with the
- *  distribution.
- *
- *  3. The end-user documentation included with the redistribution, if
- *  any, must include the following acknowlegement:
- *  "This product includes software developed by the
- *  Apache Software Foundation (http://www.apache.org/)."
- *  Alternately, this acknowlegement may appear in the software itself,
- *  if and wherever such third-party acknowlegements normally appear.
- *
- *  4. The names "The Jakarta Project", "Ant", and "Apache Software
- *  Foundation" must not be used to endorse or promote products derived
- *  from this software without prior written permission. For written
- *  permission, please contact apache@apache.org.
- *
- *  5. Products derived from this software may not be called "Apache"
- *  nor may "Apache" appear in their names without prior written
- *  permission of the Apache Group.
- *
- *  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- *  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- *  OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- *  DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- *  ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- *  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- *  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- *  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- *  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- *  SUCH DAMAGE.
- *  ====================================================================
- *
- *  This software consists of voluntary contributions made by many
- *  individuals on behalf of the Apache Software Foundation.  For more
- *  information on the Apache Software Foundation, please see
- *  <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional;
-
-import java.io.*;
-import java.util.Properties;
-
-import org.apache.tools.ant.BuildFileTest;
-
-/**
- * Tests the style/xslt task.
- *
- * @author steve loughran
- * @since Ant 1.5
- */
-public class XsltTest extends BuildFileTest {
-
-    /**
-     * where tasks run
-     */
-    private final static String TASKDEFS_DIR = "src/etc/testcases/taskdefs/optional/";
-
-
-    /**
-     * Constructor 
-     *
-     * @param name testname
-     */
-    public XsltTest(String name) {
-        super(name);
-    }
-
-
-    /**
-     * The JUnit setup method
-     */
-    public void setUp() {
-        configureProject(TASKDEFS_DIR + "xslt.xml");
-    }
-
-
-    /**
-     * The teardown method for JUnit
-     */
-    public void tearDown() {
-        executeTarget("teardown");
-    }
-
-
-    
-    /**
-     * A unit test for JUnit
-     */
-    public void testCatchNoDtd() throws Exception {
-        expectBuildExceptionContaining("testCatchNoDtd",
-                "expected failure",
-                "Fatal error during transformation");
-    }
-
-    /**
-     * A unit test for JUnit
-     */
-    public void testCatalog() throws Exception {
-         executeTarget("testCatalog");
-    }
-}
-
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/optional/depend/DependTest.java b/src/testcases/org/apache/tools/ant/taskdefs/optional/depend/DependTest.java
deleted file mode 100644
index 20bae54..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/optional/depend/DependTest.java
+++ /dev/null
@@ -1,206 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.taskdefs.optional.depend;
-
-import java.io.File;
-import java.io.FileReader;
-import java.io.IOException;
-import java.util.Date;
-import java.util.Vector;
-import java.util.Enumeration;
-import java.util.Hashtable;
-import org.apache.tools.ant.BuildFileTest;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.types.FileSet;
-import org.apache.tools.ant.DirectoryScanner;
-
-/**
- * Testcase for the Depend optional task. 
- * 
- * @author Conor MacNeill
- */
-public class DependTest extends BuildFileTest {
-    public static final String RESULT_FILESET = "result";
-    
-    public static final String TEST_BUILD_FILE
-        = "src/etc/testcases/taskdefs/optional/depend/depend.xml";
-    
-    public DependTest(String name) {
-        super(name);
-    }
-
-    public void setUp() {
-        configureProject(TEST_BUILD_FILE);
-    }
-
-    public void tearDown() {
-        executeTarget("clean");
-    }
-
-    /**
-     * Test direct dependency removal
-     */
-    public void testDirect() {
-        Project project = getProject();
-        executeTarget("testdirect");
-        Hashtable files = getResultFiles();
-        assertEquals("Depend did not leave correct number of files", 2, 
-            files.size());
-        assertTrue("Result did not contain A.class", 
-            files.containsKey("A.class"));
-        assertTrue("Result did not contain D.class", 
-            files.containsKey("D.class"));
-    }
-
-    /**
-     * Test dependency traversal (closure)
-     */
-    public void testClosure() {
-        Project project = getProject();
-        executeTarget("testclosure");
-        Hashtable files = getResultFiles();
-        assertEquals("Depend did not leave correct number of files", 1, 
-            files.size());
-        assertTrue("Result did not contain D.class", 
-            files.containsKey("D.class"));
-    }
-
-    /**
-     * Test that inner class dependencies trigger deletion of the outer class
-     */
-    public void testInner() {
-        Project project = getProject();
-        executeTarget("testinner");
-        assertEquals("Depend did not leave correct number of files", 0, 
-            getResultFiles().size());
-    }
-
-    /**
-     * Test that multi-leve inner class dependencies trigger deletion of 
-     * the outer class
-     */
-    public void testInnerInner() {
-        Project project = getProject();
-        executeTarget("testinnerinner");
-        assertEquals("Depend did not leave correct number of files", 0, 
-            getResultFiles().size());
-    }
-    
-    /**
-     * Test that an exception is thrown when there is no source 
-     */
-    public void testNoSource() {
-        expectBuildExceptionContaining("testnosource", 
-            "No source specified", "srcdir attribute must be set");
-    }
-        
-    /**
-     * Test that an exception is thrown when the source attribute is empty
-     */
-    public void testEmptySource() {
-        expectBuildExceptionContaining("testemptysource", 
-            "No source specified", "srcdir attribute must be non-empty");
-    }
-
-    /**
-     * Read the result fileset into a Hashtable
-     * 
-     * @return a Hashtable containing the names of the files in the result 
-     * fileset
-     */
-    private Hashtable getResultFiles() {
-        FileSet resultFileSet = (FileSet)project.getReference(RESULT_FILESET);
-        DirectoryScanner scanner = resultFileSet.getDirectoryScanner(project);
-        String[] scannedFiles = scanner.getIncludedFiles();
-        Hashtable files = new Hashtable();
-        for (int i = 0; i < scannedFiles.length; ++i) {
-            files.put(scannedFiles[i], scannedFiles[i]);
-        }
-        return files;
-    }
-    
-    
-    /**
-     * Test mutual dependency between inner and outer do not cause both to be
-     * deleted
-     */
-    public void testInnerClosure() {
-        Project project = getProject();
-        executeTarget("testinnerclosure");
-        assertEquals("Depend did not leave correct number of files", 2, 
-            getResultFiles().size());
-    }
-
-    /**
-     * Test the operation of the cache
-     */
-    public void testCache() {
-        executeTarget("testcache");
-    }
-
-    /**
-     * Test the detection and warning of non public classes
-     */
-    public void testNonPublic() {
-        executeTarget("testnonpublic");
-        String log = getLog();
-        assertTrue("Expected warning about APrivate", 
-            log.indexOf("The class APrivate in file") != -1);
-        assertTrue("but has not been deleted because its source file " 
-            + "could not be determined", 
-            log.indexOf("The class APrivate in file") != -1);
-    }
-
-}
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/optional/junit/JUnitClassLoaderTest.java b/src/testcases/org/apache/tools/ant/taskdefs/optional/junit/JUnitClassLoaderTest.java
deleted file mode 100644
index 76e27eb..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/optional/junit/JUnitClassLoaderTest.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.junit;
-
-import junit.framework.TestCase;
-
-/**
- * Test to ensure that the classloader loading JUnit testcase
- * is also the context classloader.
- *
- * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
- */
-public class JUnitClassLoaderTest extends TestCase {
-
-    public JUnitClassLoaderTest(String s) {
-        super(s);
-    }
-
-    public void testContextClassLoader(){
-        ClassLoader context = Thread.currentThread().getContextClassLoader();
-        ClassLoader caller = getClass().getClassLoader();
-        assertSame(context, caller);
-    }
-}
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/optional/junit/JUnitTestRunnerTest.java b/src/testcases/org/apache/tools/ant/taskdefs/optional/junit/JUnitTestRunnerTest.java
deleted file mode 100644
index 4a78793..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/optional/junit/JUnitTestRunnerTest.java
+++ /dev/null
@@ -1,190 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.junit;
-
-import java.io.*;
-import junit.framework.*;
-import org.apache.tools.ant.BuildException;
-
-/**
- * Small testcase for the runner, tests are very very very basics.
- * They must be enhanced with time.
- *
- * @author <a href="mailto:sbailliez@imediation.com">Stephane Bailliez</a>
- */
-public class JUnitTestRunnerTest extends TestCase {
-
-    // mandatory constructor
-    public JUnitTestRunnerTest(String name){
-        super(name);
-    }
-
-    // check that having no suite generates no errors
-    public void testNoSuite(){
-        TestRunner runner = createRunner(NoSuiteTestCase.class);
-        runner.run();
-        assertEquals(runner.getFormatter().getError(), JUnitTestRunner.SUCCESS, runner.getRetCode());
-    }
-
-    // check that a suite generates no errors
-    public void testSuite(){
-        TestRunner runner = createRunner(SuiteTestCase.class);
-        runner.run();
-        assertEquals(runner.getFormatter().getError(), JUnitTestRunner.SUCCESS, runner.getRetCode());
-    }
-
-    // check that an invalid suite generates an error.
-    public void testInvalidSuite(){
-        TestRunner runner = createRunner(InvalidSuiteTestCase.class);
-        runner.run();
-        String error = runner.getFormatter().getError();
-        assertEquals(error, JUnitTestRunner.ERRORS, runner.getRetCode());
-        assertTrue(error, error.indexOf("thrown on purpose") != -1);
-    }
-
-    // check that something which is not a testcase generates no errors
-    // at first even though this is incorrect.
-    public void testNoTestCase(){
-        TestRunner runner = createRunner(NoTestCase.class);
-        runner.run();
-        assertEquals(runner.getFormatter().getError(), JUnitTestRunner.FAILURES, runner.getRetCode());
-    }
-
-    // check that an exception in the constructor is noticed
-    public void testInvalidTestCase(){
-        TestRunner runner = createRunner(InvalidTestCase.class);
-        runner.run();
-        String error = runner.getFormatter().getError();
-        assertEquals(error, JUnitTestRunner.FAILURES, runner.getRetCode());
-        //@fixme as of now does not report the original stacktrace.
-        //assertTrue(error, error.indexOf("thrown on purpose") != -1);
-    }
-    
-    protected TestRunner createRunner(Class clazz){
-        return new TestRunner(new JUnitTest(clazz.getName()), true, true, true);
-    }
-
-    // the test runner that wrap the dummy formatter that interests us
-    private final static class TestRunner extends JUnitTestRunner {
-        private ResultFormatter formatter = new ResultFormatter();
-        TestRunner(JUnitTest test, boolean haltonerror, boolean filtertrace, boolean haltonfailure){
-            super(test, haltonerror, filtertrace,  haltonfailure, TestRunner.class.getClassLoader());
-            // use the classloader that loaded this class otherwise
-            // it will not be able to run inner classes if this test
-            // is ran in non-forked mode.
-            addFormatter(formatter);
-        }
-        ResultFormatter getFormatter(){
-            return formatter;
-        }
-    }
-
-    // dummy formatter just to catch the error
-    private final static class ResultFormatter implements JUnitResultFormatter {
-        private Throwable error;
-        public void setSystemOutput(String output){}
-        public void setSystemError(String output){}
-        public void startTestSuite(JUnitTest suite) throws BuildException{}
-        public void endTestSuite(JUnitTest suite) throws BuildException{}
-        public void setOutput(java.io.OutputStream out){}
-        public void startTest(Test t) {}
-        public void endTest(Test test) {}
-        public void addFailure(Test test, Throwable t) { }
-        public void addFailure(Test test, AssertionFailedError t) { }
-        public void addError(Test test, Throwable t) {
-            error = t;
-        }
-        String getError(){
-            if (error == null){
-                return "";
-            }
-            StringWriter sw = new StringWriter();
-            error.printStackTrace(new PrintWriter(sw));
-            return sw.toString();
-        }
-    }
-
-    public static class NoTestCase {
-    }
-
-    public static class InvalidTestCase extends TestCase {
-        public InvalidTestCase(String name){
-            super(name);
-            throw new NullPointerException("thrown on purpose");
-        }
-    }
-    
-    public static class NoSuiteTestCase extends TestCase {
-        public NoSuiteTestCase(String name){ super(name); }
-        public void testA(){}
-    }
-
-    public static class SuiteTestCase extends NoSuiteTestCase {
-        public SuiteTestCase(String name){ super(name); }
-        public static Test suite(){
-            return new TestSuite(SuiteTestCase.class);
-        }
-    }
-
-    public static class InvalidSuiteTestCase extends NoSuiteTestCase {
-        public InvalidSuiteTestCase(String name){ super(name); }
-        public static Test suite(){
-            throw new NullPointerException("thrown on purpose");
-        }
-    }
-    public static void main(String[] args){
-        junit.textui.TestRunner.run(JUnitTestRunnerTest.class);
-    }
-}
-
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/optional/metamata/MAuditParserTest.java b/src/testcases/org/apache/tools/ant/taskdefs/optional/metamata/MAuditParserTest.java
deleted file mode 100644
index 552229c..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/optional/metamata/MAuditParserTest.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.metamata;
-
-import java.io.File;
-
-import junit.framework.TestCase;
-
-import org.apache.tools.ant.util.StringUtils;
-
-/**
- * Test for the Audit parser.
- *
- * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
- */
-public class MAuditParserTest extends TestCase {
-
-    private MAuditParser parser;
-
-    public MAuditParserTest(String s) {
-        super(s);
-    }
-
-    protected void setUp() {
-        parser = new MAuditParser();
-    }
-
-    public void testViolation() {
-        String line = "file:\\WebGain\\QA\\examples\\auditexamples\\Vector.java:55: Array declarators (\"[]\") should be placed with their component types and not after field/method declarations (5.27).";
-        // the replace is done to simulate a platform dependant separator since
-        // the parser may do some magic with the file separator
-        line = StringUtils.replace(line, "\\", File.separator);
-        MAuditParser.Violation violation = parser.parseLine(line);
-        assertEquals("\\WebGain\\QA\\examples\\auditexamples\\Vector.java",
-                StringUtils.replace(violation.file, File.separator, "\\"));
-        assertEquals("55", violation.line);
-        assertEquals("Array declarators (\"[]\") should be placed with their component types and not after field/method declarations (5.27).", violation.error);
-    }
-
-    public void testNonViolation(){
-        String line = "Audit completed with 36 violations.";
-        Object violation = parser.parseLine(line);
-        assertNull(violation);
-    }
-
-    public void testFilePathInViolation(){
-        String line = "file:\\WebGain\\QA\\examples\\auditexamples\\Hashtable.java:302: Loop variable defined at file:\\WebGain\\QA\\examples\\auditexamples\\Hashtable.java:300 is being modified (5.16).";
-        line = StringUtils.replace(line, "\\", File.separator);
-        MAuditParser.Violation violation = parser.parseLine(line);
-        assertEquals("\\WebGain\\QA\\examples\\auditexamples\\Hashtable.java",
-                StringUtils.replace(violation.file, File.separator, "\\"));
-        assertEquals("302", violation.line);
-        assertEquals("Loop variable defined at Hashtable.java:300 is being modified (5.16).", violation.error);
-    }
-
-}
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/optional/perforce/P4ChangeTest.java b/src/testcases/org/apache/tools/ant/taskdefs/optional/perforce/P4ChangeTest.java
deleted file mode 100644
index ff2906a..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/optional/perforce/P4ChangeTest.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.perforce;
-
-import junit.framework.TestCase;
-import org.apache.oro.text.perl.Perl5Util;
-
-/**
- * Basic testcase to ensure that backslashing is OK.
- * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
- */
-public class P4ChangeTest extends TestCase {
-
-    protected P4Change p4change;
-
-    public P4ChangeTest(String s) {
-        super(s);
-    }
-
-    protected void setUp() throws Exception {
-        p4change = new P4Change();
-    }
-
-    public void testBackslash(){
-        String input = "comment with a / inside";
-        String output = p4change.backslash(input);
-        assertEquals("comment with a \\/ inside", output);
-    }
-
-    public void testSubstitute(){
-        Perl5Util util = new Perl5Util();
-        String tosubstitute = "xx<here>xx";
-        String input = p4change.backslash("/a/b/c/");
-        String output = util.substitute("s/<here>/" + input + "/", tosubstitute);
-        assertEquals("xx/a/b/c/xx", output);
-    }
-
-}
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/optional/sitraka/ClassFileTest.java b/src/testcases/org/apache/tools/ant/taskdefs/optional/sitraka/ClassFileTest.java
deleted file mode 100644
index d695df1..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/optional/sitraka/ClassFileTest.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.sitraka;
-
-import java.io.IOException;
-import java.io.InputStream;
-
-import junit.framework.TestCase;
-import org.apache.tools.ant.taskdefs.optional.sitraka.bytecode.ClassFile;
-import org.apache.tools.ant.taskdefs.optional.sitraka.bytecode.MethodInfo;
-
-/**
- * Nothing special about this testcase...
- *
- * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
- */
-public class ClassFileTest extends TestCase {
-    public ClassFileTest(String s) {
-        super(s);
-    }
-
-    public void testVector() throws IOException {
-        String classname = ClassTest.class.getName().replace('.', '/') + ".class";
-        InputStream is = getClass().getClassLoader().getResourceAsStream(classname);
-		assertNotNull("Unable to find resource " + classname + "in caller classloader");
-        ClassFile clazzfile = new ClassFile(is);
-        assertEquals("ClassTest", clazzfile.getName());
-        assertEquals("ClassFileTest.java", clazzfile.getSourceFile());
-        MethodInfo[] methods = clazzfile.getMethods();
-        assertEquals(3, methods.length);
-        assertHasMethod("void <init>()", 2, methods);
-        assertHasMethod("void testTwoLines()", 2, methods);
-        assertHasMethod("void testOneLine()", 3, methods);
-    }
-
-    protected void assertHasMethod(String methodsig, int line, MethodInfo[] methods) {
-        boolean found = false;
-        for (int i = 0; i < methods.length; i++) {
-            MethodInfo method = methods[i];
-            if (methodsig.equals(method.getFullSignature())) {
-                assertEquals(methodsig, line, method.getNumberOfLines());
-                return;
-            }
-        }
-        fail("Could not find method " + methodsig);
-    }
-}
-
-class ClassTest {
-
-    // 2 lines
-            public ClassTest() {
-    }
-
-    // 2 lines
-            public void testTwoLines() {
-        System.out.println("This is 1 line");
-    }
-
-    // 1 line
-            public void testOneLine() {
-        try {
-            throw new Exception();
-        } catch (Exception e) {
-        }
-    }
-}
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/optional/sitraka/ClassPathLoaderTest.java b/src/testcases/org/apache/tools/ant/taskdefs/optional/sitraka/ClassPathLoaderTest.java
deleted file mode 100644
index b69223c..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/optional/sitraka/ClassPathLoaderTest.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.sitraka;
-
-import java.util.Hashtable;
-import java.io.File;
-
-import junit.framework.TestCase;
-import org.apache.tools.ant.taskdefs.optional.sitraka.bytecode.ClassPathLoader;
-
-/**
- * Minimal testing for the classpath loader..
- *
- * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
- */
-public class ClassPathLoaderTest extends TestCase {
-    public ClassPathLoaderTest(String s) {
-        super(s);
-    }
-
-    public void testgetClasses() throws Exception {
-        // good performance test...load all classes in rt.jar
-        String path = System.getProperty("java.home") + File.separator + "lib/rt.jar";
-        ClassPathLoader cl = new ClassPathLoader(path);
-		Hashtable map = cl.getClasses();
-        assertTrue(map.size() > 0);
-    }
-
-}
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/optional/sitraka/XMLReportTest.java b/src/testcases/org/apache/tools/ant/taskdefs/optional/sitraka/XMLReportTest.java
deleted file mode 100644
index 75ae61d..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/optional/sitraka/XMLReportTest.java
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.sitraka;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.OutputStream;
-import java.net.URL;
-import javax.xml.transform.OutputKeys;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.dom.DOMSource;
-import javax.xml.transform.stream.StreamResult;
-
-import junit.framework.TestCase;
-import org.w3c.dom.Document;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-
-/**
- * Ensure that reference classpath feature is working fine...
- * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
- */
-public class XMLReportTest extends TestCase {
-    public XMLReportTest(String s) {
-        super(s);
-    }
-
-    protected File getFile(String name) throws FileNotFoundException {
-        URL url = getClass().getResource(name);
-        if (url == null) {
-            throw new FileNotFoundException("Unable to load '" + name + "' from classpath");
-        }
-        return new File(url.getFile());
-    }
-
-    public void testCreateDocument() throws Exception {
-        // this is a sample from running Ant include data for java.* only
-        File reportFile = getFile("/taskdefs/optional/sitraka/covreport-test.xml");
-        XMLReport report = new XMLReport(reportFile);
-        ReportFilters filters = new ReportFilters();
-        ReportFilters.Include incl = new ReportFilters.Include();
-        incl.setClass("java.util.Vector");
-        incl.setMethod("set*");
-        filters.addInclude(incl);
-        report.setReportFilters(filters);
-        Document doc = report.createDocument(new String[]{ System.getProperty("java.home") + "/lib/rt.jar"});
-
-        Node snapshot = doc.getDocumentElement();
-        assertEquals("snapshot", snapshot.getNodeName());
-
-        // there is only java.util
-        NodeList packages = doc.getElementsByTagName("package");
-        assertEquals(1, packages.getLength());
-        assertEquals("java.util", packages.item(0).getAttributes().getNamedItem("name").getNodeValue());
-
-        // there is only Vector
-        NodeList classes = doc.getElementsByTagName("class");
-        assertEquals(1, classes.getLength());
-        assertEquals("Vector", classes.item(0).getAttributes().getNamedItem("name").getNodeValue());
-
-        // there are 3 set* methods
-        // set(int, Object)
-        // setSize(int)
-        // setElementAt(Object, int)
-        NodeList methods = doc.getElementsByTagName("method");
-        assertEquals(3, methods.getLength());
-
-        //dump(doc, System.out);
-    }
-
-    /**
-     *  might be useful to spit out the document
-     * it's a nightmare to navigate in a DOM structure in a debugger.
-     */
-    protected void dump(Document doc, OutputStream out) throws Exception {
-        TransformerFactory tfactory = TransformerFactory.newInstance();
-        Transformer transformer = tfactory.newTransformer();
-        transformer.setOutputProperty(OutputKeys.INDENT, "no");
-        transformer.setOutputProperty(OutputKeys.METHOD, "xml");
-        transformer.transform(new DOMSource(doc), new StreamResult(out));
-    }
-}
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/optional/sos/SOSTest.java b/src/testcases/org/apache/tools/ant/taskdefs/optional/sos/SOSTest.java
deleted file mode 100644
index 4b08e69..0000000
--- a/src/testcases/org/apache/tools/ant/taskdefs/optional/sos/SOSTest.java
+++ /dev/null
@@ -1,701 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.taskdefs.optional.sos;
-
-import junit.framework.TestCase;
-import junit.framework.AssertionFailedError;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.types.Commandline;
-import org.apache.tools.ant.types.Path;
-import org.apache.tools.ant.util.FileUtils;
-import org.apache.tools.ant.taskdefs.optional.sos.*;
-import java.io.File;
-
-/**
- * Basic testcase to ensure that command line generation is ok
- * @author <a href="mailto:jesse@cryptocard.com">Jesse Stockall</a>
- */
-public class SOSTest extends TestCase {
-
-    private SOSGet sosGet;
-    private SOSCheckin sosCheckin;
-    private SOSCheckout sosCheckout;
-    private SOSLabel sosLabel;
-    private Project project;
-    private Commandline commandline;
-    private FileUtils fileUtils;
-
-    private static final String VSS_SERVER_PATH = "\\\\server\\vss\\srcsafe.ini";
-    private static final String VSS_PROJECT_PATH = "/SourceRoot/Project";
-    private static final String SOS_SERVER_PATH = "192.168.0.1:8888";
-    private static final String SOS_USERNAME = "ant";
-    private static final String SOS_PASSWORD = "rocks";
-    private static final String LOCAL_PATH = "testdir";
-    private static final String SRC_FILE = "Class1.java";
-    private static final String SRC_LABEL = "label1";
-    private static final String SRC_COMMENT = "I fixed a bug";
-    private static final String SOS_HOME = "/home/user/.sos";
-    private static final String VERSION = "007";
-
-    public SOSTest(String s) {
-        super(s);
-    }
-
-    protected void setUp() throws Exception {
-        sosGet = new SOSGet();
-        sosCheckin = new SOSCheckin();
-        sosCheckout = new SOSCheckout();
-        sosLabel = new SOSLabel();
-        project = new Project();
-        project.setBasedir(".");
-        fileUtils = FileUtils.newFileUtils();
-    }
-
-    protected void tearDown() throws Exception {
-        File file = new File(project.getBaseDir(), LOCAL_PATH);
-        if (file.exists()) {
-            file.delete();
-        }
-	}
-
-    /**
-     * Test SOSGetFile flags & commandline generation
-     */
-    public void testGetFileFlags() {
-        String[] sTestCmdLine = { "soscmd", "-command", "GetFile", "-file",
-            SRC_FILE, "-revision", "007", "-server", SOS_SERVER_PATH, "-name",
-            SOS_USERNAME, "-password", SOS_PASSWORD, "-database", VSS_SERVER_PATH,
-            "-project", "$"+VSS_PROJECT_PATH, "-verbose", "-nocompress",
-            "-nocache", "-workdir", project.getBaseDir().getAbsolutePath()
-			+ File.separator + LOCAL_PATH };
-
-        Path path = new Path(project, LOCAL_PATH);
-
-        // Set up a SOSGet task
-        sosGet.setProject(project);
-        sosGet.setVssServerPath(VSS_SERVER_PATH);
-        sosGet.setSosServerPath(SOS_SERVER_PATH);
-        sosGet.setProjectPath(VSS_PROJECT_PATH);
-        sosGet.setFile(SRC_FILE);
-        sosGet.setUsername(SOS_USERNAME);
-        sosGet.setPassword(SOS_PASSWORD);
-        sosGet.setVersion(VERSION);
-        sosGet.setLocalPath(path);
-        sosGet.setNoCache(true);
-        sosGet.setNoCompress(true);
-        sosGet.setVerbose(true);
-        sosGet.setRecursive(true);
-
-        commandline = sosGet.buildCmdLine();
-        String[] sGeneratedCmdLine = commandline.getCommandline();
-        int i = 0;
-        while (i < sTestCmdLine.length) {
-            try {
-                assertEquals("GetFile arg # " + String.valueOf(i),
-                                sTestCmdLine[i],
-                                sGeneratedCmdLine[i]);
-                i++;
-            } catch (ArrayIndexOutOfBoundsException aioob) {
-               fail("GetFile missing arg");
-            }
-
-        }
-        if (sGeneratedCmdLine.length > sTestCmdLine.length) {
-            // We have extra elements
-            fail("GetFile extra args");
-        }
-    }
-
-    /**
-     * Test SOSGetProject flags & commandline generation
-     */
-    public void testGetProjectFlags() {
-        String[] sTestCmdLine = { "soscmd", "-command", "GetProject", "-recursive",
-            "-label", SRC_LABEL, "-server", SOS_SERVER_PATH, "-name", SOS_USERNAME,
-            "-password", "", "-database", VSS_SERVER_PATH , "-project",
-            "$"+VSS_PROJECT_PATH, "", "", "-soshome", SOS_HOME, "-workdir",
-            project.getBaseDir().getAbsolutePath() };
-        // Set up a SOSGet task
-        sosGet.setProject(project);
-        sosGet.setVssServerPath(VSS_SERVER_PATH);
-        sosGet.setSosServerPath(SOS_SERVER_PATH);
-        sosGet.setProjectPath(VSS_PROJECT_PATH);
-        sosGet.setLabel(SRC_LABEL);
-        sosGet.setUsername(SOS_USERNAME);
-        sosGet.setSosHome(SOS_HOME);
-        sosGet.setNoCache(true);
-        sosGet.setNoCompress(false);
-        sosGet.setVerbose(false);
-        sosGet.setRecursive(true);
-
-        commandline = sosGet.buildCmdLine();
-        String[] sGeneratedCmdLine = commandline.getCommandline();
-
-        int i = 0;
-        while (i < sTestCmdLine.length) {
-            try {
-                assertEquals("GetProject arg # " + String.valueOf(i),
-                                sTestCmdLine[i],
-                                sGeneratedCmdLine[i]);
-                i++;
-            } catch (ArrayIndexOutOfBoundsException aioob) {
-                fail("GetProject missing arg");
-            }
-
-        }
-        if (sGeneratedCmdLine.length > sTestCmdLine.length) {
-            // We have extra elements
-            fail("GetProject extra args");
-        }
-    }
-
-    /**
-     * Test SOSGet required attributes 1 by 1
-     */
-    public void testGetExceptions() {
-        boolean buildEx = false;
-
-        // Set up a SOSGet task
-        sosGet.setProject(project);
-        // No options set - SosServerPath should fail
-        try {
-            commandline = sosGet.buildCmdLine();
-        } catch (BuildException be) {
-            if (be.getMessage().compareTo("sosserverpath attribute must be set!") == 0) {
-                buildEx = true;
-            }
-        }
-        assertTrue("GetException SosServerPath", buildEx);
-        buildEx = false;
-
-        // Set SosServerPath - Username should fail
-        sosGet.setSosServerPath(SOS_SERVER_PATH);
-        try {
-            commandline = sosGet.buildCmdLine();
-        } catch (BuildException be) {
-            if (be.getMessage().compareTo("username attribute must be set!") == 0) {
-                buildEx = true;
-            }
-        }
-        assertTrue("GetException Username", buildEx);
-        buildEx = false;
-
-        // Set Username - VssServerPath should fail
-        sosGet.setUsername(SOS_USERNAME);
-        try {
-            commandline = sosGet.buildCmdLine();
-        } catch (BuildException be) {
-            if (be.getMessage().compareTo("vssserverpath attribute must be set!") == 0) {
-                buildEx = true;
-            }
-        }
-        assertTrue("GetException VssServerPath", buildEx);
-        buildEx = false;
-
-        // Set VssServerPath - ProjectPath should fail
-        sosGet.setVssServerPath(VSS_SERVER_PATH);
-        try {
-            commandline = sosGet.buildCmdLine();
-        } catch (BuildException be) {
-            if (be.getMessage().compareTo("projectpath attribute must be set!") == 0) {
-                buildEx = true;
-            }
-        }
-        assertTrue("GetException ProjectPath", buildEx);
-
-        // Set ProjectPath - All required options set
-        sosGet.setProjectPath(VSS_PROJECT_PATH);
-        try {
-            commandline = sosGet.buildCmdLine();
-            buildEx = true;
-        } catch (BuildException be) {
-            buildEx = false;
-        }
-        assertTrue("GetException All required options set", buildEx);
-    }
-
-    /**
-     * Test CheckInFile option flags
-     */
-    public void testCheckinFileFlags() {
-        String[] sTestCmdLine = { "soscmd", "-command", "CheckInFile", "-file",
-            SRC_FILE, "-server", SOS_SERVER_PATH, "-name", SOS_USERNAME,
-            "-password", SOS_PASSWORD, "-database", VSS_SERVER_PATH, "-project",
-            "$"+VSS_PROJECT_PATH, "-verbose", "-nocompress", "-nocache",
-            "-workdir", project.getBaseDir().getAbsolutePath() + File.separator
-			+ LOCAL_PATH, "-log", SRC_COMMENT };
-
-        Path path = new Path(project, LOCAL_PATH);
-
-        // Set up a SOSCheckin task
-        sosCheckin.setProject(project);
-        sosCheckin.setVssServerPath(VSS_SERVER_PATH);
-        sosCheckin.setSosServerPath(SOS_SERVER_PATH);
-        sosCheckin.setProjectPath(VSS_PROJECT_PATH);
-        sosCheckin.setFile(SRC_FILE);
-        sosCheckin.setComment(SRC_COMMENT);
-        sosCheckin.setUsername(SOS_USERNAME);
-        sosCheckin.setPassword(SOS_PASSWORD);
-        sosCheckin.setLocalPath(path);
-        sosCheckin.setNoCache(true);
-        sosCheckin.setNoCompress(true);
-        sosCheckin.setVerbose(true);
-        sosCheckin.setRecursive(true);
-
-        commandline = sosCheckin.buildCmdLine();
-        String[] sGeneratedCmdLine = commandline.getCommandline();
-
-        int i = 0;
-        while (i < sTestCmdLine.length) {
-            try {
-                assertEquals("CheckInFile arg # " + String.valueOf(i),
-                                sTestCmdLine[i],
-                                sGeneratedCmdLine[i]);
-                i++;
-            } catch (ArrayIndexOutOfBoundsException aioob) {
-                fail("CheckInFile missing arg");
-            }
-
-        }
-        if (sGeneratedCmdLine.length > sTestCmdLine.length) {
-            // We have extra elements
-            fail("CheckInFile extra args");
-        }
-    }
-
-    /**
-     * Test CheckInProject option flags
-     */
-    public void testCheckinProjectFlags() {
-        String[] sTestCmdLine = { "soscmd", "-command", "CheckInProject",
-            "-recursive", "-server", SOS_SERVER_PATH, "-name", SOS_USERNAME,
-            "-password", "", "-database", VSS_SERVER_PATH , "-project",
-            "$"+VSS_PROJECT_PATH, "", "", "-soshome", SOS_HOME, "-workdir",
-            project.getBaseDir().getAbsolutePath(), "-log", SRC_COMMENT,  };
-
-        // Set up a SOSCheckin task
-        sosCheckin.setProject(project);
-        sosCheckin.setVssServerPath(VSS_SERVER_PATH);
-        sosCheckin.setSosServerPath(SOS_SERVER_PATH);
-        sosCheckin.setProjectPath(VSS_PROJECT_PATH);
-        sosCheckin.setComment(SRC_COMMENT);
-        sosCheckin.setUsername(SOS_USERNAME);
-        sosCheckin.setSosHome(SOS_HOME);
-        sosCheckin.setNoCache(true);
-        sosCheckin.setNoCompress(false);
-        sosCheckin.setVerbose(false);
-        sosCheckin.setRecursive(true);
-
-        commandline = sosCheckin.buildCmdLine();
-        String[] sGeneratedCmdLine = commandline.getCommandline();
-
-        int i = 0;
-        while (i < sTestCmdLine.length) {
-            try {
-                assertEquals("CheckInProject arg # " + String.valueOf(i),
-                                sTestCmdLine[i],
-                                sGeneratedCmdLine[i]);
-                i++;
-            } catch (ArrayIndexOutOfBoundsException aioob) {
-                fail("CheckInProject missing arg");
-            }
-
-        }
-        if (sGeneratedCmdLine.length > sTestCmdLine.length) {
-            // We have extra elements
-            fail("CheckInProject extra args");
-        }
-    }
-
-    /**
-     * Test SOSCheckIn required attributes 1 by 1
-     */
-    public void testCheckinExceptions() {
-        boolean buildEx = false;
-
-        // Set up a sosCheckin task
-        sosCheckin.setProject(project);
-        // No options set - SosServerPath should fail
-        try {
-            commandline = sosCheckin.buildCmdLine();
-        } catch (BuildException be) {
-            if (be.getMessage().compareTo("sosserverpath attribute must be set!") == 0) {
-                buildEx = true;
-            }
-        }
-        assertTrue("CheckinException SosServerPath", buildEx);
-        buildEx = false;
-
-        // Set SosServerPath - Username should fail
-        sosCheckin.setSosServerPath(SOS_SERVER_PATH);
-        try {
-            commandline = sosCheckin.buildCmdLine();
-        } catch (BuildException be) {
-            if (be.getMessage().compareTo("username attribute must be set!") == 0) {
-                buildEx = true;
-            }
-        }
-        assertTrue("CheckinException Username", buildEx);
-        buildEx = false;
-
-        // Set Username - VssServerPath should fail
-        sosCheckin.setUsername(SOS_USERNAME);
-        try {
-            commandline = sosCheckin.buildCmdLine();
-        } catch (BuildException be) {
-            if (be.getMessage().compareTo("vssserverpath attribute must be set!") == 0) {
-                buildEx = true;
-            }
-        }
-        assertTrue("CheckinException VssServerPath", buildEx);
-        buildEx = false;
-
-        // Set VssServerPath - ProjectPath should fail
-        sosCheckin.setVssServerPath(VSS_SERVER_PATH);
-        try {
-            commandline = sosCheckin.buildCmdLine();
-        } catch (BuildException be) {
-            if (be.getMessage().compareTo("projectpath attribute must be set!") == 0) {
-                buildEx = true;
-            }
-        }
-        assertTrue("CheckinException ProjectPath", buildEx);
-
-        // Set ProjectPath - All required options set
-        sosCheckin.setProjectPath(VSS_PROJECT_PATH);
-        try {
-            commandline = sosCheckin.buildCmdLine();
-            buildEx = true;
-        } catch (BuildException be) {
-            buildEx = false;
-        }
-        assertTrue("CheckinException All required options set", buildEx);
-    }
-
-    /**
-     * Test CheckOutFile option flags
-     */
-    public void testCheckoutFileFlags() {
-        String[] sTestCmdLine = { "soscmd", "-command", "CheckOutFile", "-file",
-            SRC_FILE, "-server", SOS_SERVER_PATH, "-name", SOS_USERNAME,
-            "-password", SOS_PASSWORD, "-database", VSS_SERVER_PATH, "-project",
-            "$"+VSS_PROJECT_PATH, "-verbose", "-nocompress", "-nocache",
-            "-workdir", project.getBaseDir().getAbsolutePath()
-			+ File.separator + LOCAL_PATH };
-
-        Path path = new Path(project, LOCAL_PATH);
-
-        // Set up a SOSCheckout task
-        sosCheckout.setProject(project);
-        sosCheckout.setVssServerPath(VSS_SERVER_PATH);
-        sosCheckout.setSosServerPath(SOS_SERVER_PATH);
-        sosCheckout.setProjectPath(VSS_PROJECT_PATH);
-        sosCheckout.setFile(SRC_FILE);
-        sosCheckout.setUsername(SOS_USERNAME);
-        sosCheckout.setPassword(SOS_PASSWORD);
-        sosCheckout.setLocalPath(path);
-        sosCheckout.setNoCache(true);
-        sosCheckout.setNoCompress(true);
-        sosCheckout.setVerbose(true);
-        sosCheckout.setRecursive(true);
-
-        commandline = sosCheckout.buildCmdLine();
-        String[] sGeneratedCmdLine = commandline.getCommandline();
-
-        int i = 0;
-        while (i < sTestCmdLine.length) {
-            try {
-                assertEquals("CheckOutFile arg # " + String.valueOf(i),
-                                sTestCmdLine[i],
-                                sGeneratedCmdLine[i]);
-                i++;
-            } catch (ArrayIndexOutOfBoundsException aioob) {
-                fail("CheckOutFile missing arg");
-            }
-
-        }
-        if (sGeneratedCmdLine.length > sTestCmdLine.length) {
-            // We have extra elements
-            fail("CheckOutFile extra args");
-        }
-    }
-
-    /**
-     * Test CheckOutProject option flags
-     */
-    public void testCheckoutProjectFlags() {
-        String[] sTestCmdLine = { "soscmd", "-command", "CheckOutProject",
-            "-recursive", "-server", SOS_SERVER_PATH, "-name", SOS_USERNAME,
-            "-password", "", "-database", VSS_SERVER_PATH , "-project",
-            "$"+VSS_PROJECT_PATH, "", "", "-soshome", SOS_HOME, "-workdir",
-            project.getBaseDir().getAbsolutePath() };
-
-        // Set up a sosCheckout task
-        sosCheckout.setProject(project);
-        sosCheckout.setVssServerPath(VSS_SERVER_PATH);
-        sosCheckout.setSosServerPath(SOS_SERVER_PATH);
-        sosCheckout.setProjectPath(VSS_PROJECT_PATH);
-        sosCheckout.setUsername(SOS_USERNAME);
-        sosCheckout.setSosHome(SOS_HOME);
-        sosCheckout.setNoCache(true);
-        sosCheckout.setNoCompress(false);
-        sosCheckout.setVerbose(false);
-        sosCheckout.setRecursive(true);
-
-        commandline = sosCheckout.buildCmdLine();
-        String[] sGeneratedCmdLine = commandline.getCommandline();
-
-        int i = 0;
-        while (i < sTestCmdLine.length) {
-            try {
-                assertEquals("CheckOutProject arg # " + String.valueOf(i),
-                                sTestCmdLine[i],
-                                sGeneratedCmdLine[i]);
-                i++;
-            } catch (ArrayIndexOutOfBoundsException aioob) {
-                fail("CheckOutProject missing arg");
-            }
-
-        }
-        if (sGeneratedCmdLine.length > sTestCmdLine.length) {
-            // We have extra elements
-            fail("CheckOutProject extra args");
-        }
-    }
-
-    /**
-     * Test SOSCheckout required attributes 1 by 1
-     */
-    public void testCheckoutExceptions() {
-        boolean buildEx = false;
-
-        // Set up a sosCheckout task
-        sosCheckout.setProject(project);
-        // No options set - SosServerPath should fail
-        try {
-            commandline = sosCheckout.buildCmdLine();
-        } catch (BuildException be) {
-            if (be.getMessage().compareTo("sosserverpath attribute must be set!") == 0) {
-                buildEx = true;
-            }
-        }
-        assertTrue("CheckoutException SosServerPath", buildEx);
-        buildEx = false;
-
-        // Set SosServerPath - Username should fail
-        sosCheckout.setSosServerPath(SOS_SERVER_PATH);
-        try {
-            commandline = sosCheckout.buildCmdLine();
-        } catch (BuildException be) {
-            if (be.getMessage().compareTo("username attribute must be set!") == 0) {
-                buildEx = true;
-            }
-        }
-        assertTrue("CheckoutException Username", buildEx);
-        buildEx = false;
-
-        // Set Username - VssServerPath should fail
-        sosCheckout.setUsername(SOS_USERNAME);
-        try {
-            commandline = sosCheckout.buildCmdLine();
-        } catch (BuildException be) {
-            if (be.getMessage().compareTo("vssserverpath attribute must be set!") == 0) {
-                buildEx = true;
-            }
-        }
-        assertTrue("CheckoutException VssServerPath", buildEx);
-        buildEx = false;
-
-        // Set VssServerPath - ProjectPath should fail
-        sosCheckout.setVssServerPath(VSS_SERVER_PATH);
-        try {
-            commandline = sosCheckout.buildCmdLine();
-        } catch (BuildException be) {
-            if (be.getMessage().compareTo("projectpath attribute must be set!") == 0) {
-                buildEx = true;
-            }
-        }
-        assertTrue("CheckoutException ProjectPath", buildEx);
-
-        // Set ProjectPath - All required options set
-        sosCheckout.setProjectPath(VSS_PROJECT_PATH);
-        try {
-            commandline = sosCheckout.buildCmdLine();
-            buildEx = true;
-        } catch (BuildException be) {
-            buildEx = false;
-        }
-        assertTrue("CheckoutException All required options set", buildEx);
-    }
-
-    /**
-     * Test Label option flags
-     */
-    public void testLabelFlags() {
-        String[] sTestCmdLine = { "soscmd", "-command", "AddLabel", "-server",
-            SOS_SERVER_PATH, "-name", SOS_USERNAME, "-password", "", "-database",
-            VSS_SERVER_PATH , "-project", "$"+VSS_PROJECT_PATH, "-label",
-            SRC_LABEL, "-verbose", "-log", SRC_COMMENT };
-
-        // Set up a sosCheckout task
-        sosLabel.setVssServerPath(VSS_SERVER_PATH);
-        sosLabel.setSosServerPath(SOS_SERVER_PATH);
-        sosLabel.setProjectPath(VSS_PROJECT_PATH);
-        sosLabel.setUsername(SOS_USERNAME);
-        sosLabel.setSosHome(SOS_HOME);
-        sosLabel.setComment(SRC_COMMENT);
-        sosLabel.setLabel(SRC_LABEL);
-        sosLabel.setNoCache(true);
-        sosLabel.setNoCompress(false);
-        sosLabel.setVerbose(true);
-
-        commandline = sosLabel.buildCmdLine();
-        String[] sGeneratedCmdLine = commandline.getCommandline();
-
-        int i = 0;
-        while (i < sTestCmdLine.length) {
-            try {
-                assertEquals("AddLabel arg # " + String.valueOf(i),
-                                sTestCmdLine[i],
-                                sGeneratedCmdLine[i]);
-                i++;
-            } catch (ArrayIndexOutOfBoundsException aioob) {
-                fail("AddLabel missing arg");
-            }
-
-        }
-        if (sGeneratedCmdLine.length > sTestCmdLine.length) {
-            // We have extra elements
-            fail("AddLabel extra args");
-        }
-    }
-
-    /**
-     * Test SOSLabel required attributes 1 by 1
-     */
-    public void testLabelExceptions() {
-        boolean buildEx = false;
-
-        // Set up a sosLabel task
-        sosLabel.setProject(project);
-        // No options set - SosServerPath should fail
-        try {
-            commandline = sosLabel.buildCmdLine();
-        } catch (BuildException be) {
-            if (be.getMessage().compareTo("sosserverpath attribute must be set!") == 0) {
-                buildEx = true;
-            }
-        }
-        assertTrue("LabelException SosServerPath", buildEx);
-        buildEx = false;
-
-        // Set SosServerPath - Username should fail
-        sosLabel.setSosServerPath(SOS_SERVER_PATH);
-        try {
-            commandline = sosLabel.buildCmdLine();
-        } catch (BuildException be) {
-            if (be.getMessage().compareTo("username attribute must be set!") == 0) {
-                buildEx = true;
-            }
-        }
-        assertTrue("LabelException Username", buildEx);
-        buildEx = false;
-
-        // Set Username - VssServerPath should fail
-        sosLabel.setUsername(SOS_USERNAME);
-        try {
-            commandline = sosLabel.buildCmdLine();
-        } catch (BuildException be) {
-            if (be.getMessage().compareTo("vssserverpath attribute must be set!") == 0) {
-                buildEx = true;
-            }
-        }
-        assertTrue("LabelException VssServerPath", buildEx);
-        buildEx = false;
-
-        // Set VssServerPath - ProjectPath should fail
-        sosLabel.setVssServerPath(VSS_SERVER_PATH);
-        try {
-            commandline = sosLabel.buildCmdLine();
-        } catch (BuildException be) {
-            if (be.getMessage().compareTo("projectpath attribute must be set!") == 0) {
-                buildEx = true;
-            }
-        }
-        assertTrue("LabelException ProjectPath", buildEx);
-
-        // Set ProjectPath - Label should fail
-        sosLabel.setProjectPath(VSS_PROJECT_PATH);
-        try {
-            commandline = sosLabel.buildCmdLine();
-        } catch (BuildException be) {
-            if (be.getMessage().compareTo("label attribute must be set!") == 0) {
-                buildEx = true;
-            }
-        }
-        assertTrue("LabelException Label", buildEx);
-
-        // Set Label - All required options set
-        sosLabel.setLabel(SRC_LABEL);
-        try {
-            commandline = sosLabel.buildCmdLine();
-            buildEx = true;
-        } catch (BuildException be) {
-            buildEx = false;
-        }
-        assertTrue("LabelException All required options set", buildEx);
-    }
-
-}
diff --git a/src/testcases/org/apache/tools/ant/types/AbstractFileSetTest.java b/src/testcases/org/apache/tools/ant/types/AbstractFileSetTest.java
deleted file mode 100644
index e0a7b4b..0000000
--- a/src/testcases/org/apache/tools/ant/types/AbstractFileSetTest.java
+++ /dev/null
@@ -1,283 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.types;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-
-import junit.framework.TestCase;
-import junit.framework.AssertionFailedError;
-
-import java.io.File;
-
-/**
- * Base class for FileSetTest and DirSetTest.
- *
- * <p>This doesn't actually test much, mainly reference handling.
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- */
-
-public abstract class AbstractFileSetTest extends TestCase {
-
-    private Project project;
-
-    public AbstractFileSetTest(String name) {
-        super(name);
-    }
-
-    public void setUp() {
-        project = new Project();
-        project.setBasedir(".");
-    }
-
-    protected abstract AbstractFileSet getInstance();
-
-    protected final Project getProject() {
-        return project;
-    }
-
-    public final void testEmptyElementIfIsReference() {
-        AbstractFileSet f = getInstance();
-        f.setIncludes("**/*.java");
-        try {
-            f.setRefid(new Reference("dummyref"));
-            fail("Can add reference to "
-                 + f.getDataTypeName()
-                 + " with elements from setIncludes");
-        } catch (BuildException be) {
-            assertEquals("You must not specify more than one attribute "
-                         + "when using refid", be.getMessage());
-        }
-
-        f = getInstance();
-        f.createPatternSet();
-        try {
-            f.setRefid(new Reference("dummyref"));
-            fail("Can add reference to "
-                 + f.getDataTypeName()
-                 + " with nested patternset element.");
-        } catch (BuildException be) {
-            assertEquals("You must not specify nested elements when "
-                         + "using refid", be.getMessage());
-        }
-
-        f = getInstance();
-        f.createInclude();
-        try {
-            f.setRefid(new Reference("dummyref"));
-            fail("Can add reference to "
-                 + f.getDataTypeName()
-                 + " with nested include element.");
-        } catch (BuildException be) {
-            assertEquals("You must not specify more than one attribute "
-                         + "when using refid", be.getMessage());
-        }
-
-        f = getInstance();
-        f.setRefid(new Reference("dummyref"));
-        try {
-            f.setIncludes("**/*.java");
-            fail("Can set includes in "
-                 + f.getDataTypeName()
-                 + " that is a reference.");
-        } catch (BuildException be) {
-            assertEquals("You must not specify more than one attribute "
-                         + "when using refid", be.getMessage());
-        }
-        try {
-            f.setIncludesfile(new File("/a"));
-            fail("Can set includesfile in "
-                 + f.getDataTypeName()
-                 + " that is a reference.");
-        } catch (BuildException be) {
-            assertEquals("You must not specify more than one attribute "
-                         + "when using refid", be.getMessage());
-        }
-        try {
-            f.setExcludes("**/*.java");
-            fail("Can set excludes in "
-                 + f.getDataTypeName()
-                 + " that is a reference.");
-        } catch (BuildException be) {
-            assertEquals("You must not specify more than one attribute "
-                         + "when using refid", be.getMessage());
-        }
-        try {
-            f.setExcludesfile(new File("/a"));
-            fail("Can set excludesfile in "
-                 + f.getDataTypeName()
-                 + " that is a reference.");
-        } catch (BuildException be) {
-            assertEquals("You must not specify more than one attribute "
-                         + "when using refid", be.getMessage());
-        }
-        try {
-            f.setDir(project.resolveFile("."));
-            fail("Can set dir in "
-                 + f.getDataTypeName()
-                 + " that is a reference.");
-        } catch (BuildException be) {
-            assertEquals("You must not specify more than one attribute "
-                         + "when using refid", be.getMessage());
-        }
-        try {
-            f.createInclude();
-            fail("Can add nested include in "
-                 + f.getDataTypeName()
-                 + " that is a reference.");
-        } catch (BuildException be) {
-            assertEquals("You must not specify nested elements when using "
-                         + "refid", be.getMessage());
-        }
-        try {
-            f.createExclude();
-            fail("Can add nested exclude in "
-                 + f.getDataTypeName()
-                 + " that is a reference.");
-        } catch (BuildException be) {
-            assertEquals("You must not specify nested elements when using "
-                         + "refid", be.getMessage());
-        }
-        try {
-            f.createIncludesFile();
-            fail("Can add nested includesfile in "
-                 + f.getDataTypeName()
-                 + " that is a reference.");
-        } catch (BuildException be) {
-            assertEquals("You must not specify nested elements when using "
-                         + "refid", be.getMessage());
-        }
-        try {
-            f.createExcludesFile();
-            fail("Can add nested excludesfile in "
-                 + f.getDataTypeName()
-                 + " that is a reference.");
-        } catch (BuildException be) {
-            assertEquals("You must not specify nested elements when using "
-                         + "refid", be.getMessage());
-        }
-        try {
-            f.createPatternSet();
-            fail("Can add nested patternset in "
-                 + f.getDataTypeName()
-                 + " that is a reference.");
-        } catch (BuildException be) {
-            assertEquals("You must not specify nested elements when using "
-                         + "refid", be.getMessage());
-        }
-    }
-
-    public void testCircularReferenceCheck() {
-        AbstractFileSet f = getInstance();
-        project.addReference("dummy", f);
-        f.setRefid(new Reference("dummy"));
-        try {
-            f.getDir(project);
-            fail("Can make " + f.getDataTypeName() 
-                 + " a Reference to itself.");
-        } catch (BuildException be) {
-            assertEquals("This data type contains a circular reference.",
-                         be.getMessage());
-        }
-        try {
-            f.getDirectoryScanner(project);
-            fail("Can make " + f.getDataTypeName() 
-                 + " a Reference to itself.");
-        } catch (BuildException be) {
-            assertEquals("This data type contains a circular reference.",
-                         be.getMessage());
-        }
-
-        // dummy1 --> dummy2 --> dummy3 --> dummy1
-        AbstractFileSet f1 = getInstance();
-        project.addReference("dummy1", f1);
-        f1.setRefid(new Reference("dummy2"));
-        AbstractFileSet f2 = getInstance();
-        project.addReference("dummy2", f2);
-        f2.setRefid(new Reference("dummy3"));
-        AbstractFileSet f3 = getInstance();
-        project.addReference("dummy3", f3);
-        f3.setRefid(new Reference("dummy1"));
-        try {
-            f1.getDir(project);
-            fail("Can make circular reference.");
-        } catch (BuildException be) {
-            assertEquals("This data type contains a circular reference.",
-                         be.getMessage());
-        }
-        try {
-            f1.getDirectoryScanner(project);
-            fail("Can make circular reference.");
-        } catch (BuildException be) {
-            assertEquals("This data type contains a circular reference.",
-                         be.getMessage());
-        }
-
-        // dummy1 --> dummy2 --> dummy3 
-        // (which has the Project's basedir as root).
-        f1 = getInstance();
-        project.addReference("dummy1", f1);
-        f1.setRefid(new Reference("dummy2"));
-        f2 = getInstance();
-        project.addReference("dummy2", f2);
-        f2.setRefid(new Reference("dummy3"));
-        f3 = getInstance();
-        project.addReference("dummy3", f3);
-        f3.setDir(project.resolveFile("."));
-        File dir = f1.getDir(project);
-        assertEquals("Dir is basedir", dir, project.getBaseDir());
-    }
-}
diff --git a/src/testcases/org/apache/tools/ant/types/CommandlineJavaTest.java b/src/testcases/org/apache/tools/ant/types/CommandlineJavaTest.java
deleted file mode 100644
index 9eda7fd..0000000
--- a/src/testcases/org/apache/tools/ant/types/CommandlineJavaTest.java
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.types;
-
-import org.apache.tools.ant.Project;
-
-import junit.framework.TestCase;
-import junit.framework.AssertionFailedError;
-
-import java.io.File;
-
-/**
- * JUnit 3 testcases for org.apache.tools.ant.CommandlineJava
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- */
-public class CommandlineJavaTest extends TestCase {
-
-    public CommandlineJavaTest(String name) {
-        super(name);
-    }
-
-    private Project project;
-
-    public void setUp() {
-        project = new Project();
-        project.setBasedir(".");
-        project.setProperty("build.sysclasspath", "ignore");
-    }
-
-    public void testGetCommandline() {
-        CommandlineJava c = new CommandlineJava();
-        c.createArgument().setValue("org.apache.tools.ant.CommandlineJavaTest");
-        c.setClassname("junit.textui.TestRunner");
-        c.createVmArgument().setValue("-Djava.compiler=NONE");
-        String[] s = c.getCommandline();
-        assertEquals("no classpath", 4, s.length);
-        /*
-         * After changing CommandlineJava to search for the java
-         * executable, I don't know, how to tests the value returned
-         * here without using the same logic as applied in the class
-         * itself.
-         *
-         * assertTrue("no classpath", "java", s[0]);
-         */
-        assertEquals("no classpath", "-Djava.compiler=NONE", s[1]);
-        assertEquals("no classpath", "junit.textui.TestRunner", s[2]);
-        assertEquals("no classpath",
-                     "org.apache.tools.ant.CommandlineJavaTest", s[3]);
-        try {
-            CommandlineJava c2 = (CommandlineJava) c.clone();
-        } catch (NullPointerException ex) {
-            fail("cloning should work without classpath specified");
-        }
-
-        c.createClasspath(project).setLocation(project.resolveFile("lib/optional/junit.jar"));
-        c.createClasspath(project).setLocation(project.resolveFile("bootstrap/lib/ant.jar"));
-        s = c.getCommandline();
-        assertEquals("with classpath", 6, s.length);
-        //        assertEquals("with classpath", "java", s[0]);
-        assertEquals("with classpath", "-Djava.compiler=NONE", s[1]);
-        assertEquals("with classpath", "-classpath", s[2]);
-        assertTrue("junit.jar contained",
-               s[3].indexOf("junit.jar"+java.io.File.pathSeparator) >= 0);
-        assertTrue("ant.jar contained", s[3].endsWith("ant.jar"));
-        assertEquals("with classpath", "junit.textui.TestRunner", s[4]);
-        assertEquals("with classpath",
-                     "org.apache.tools.ant.CommandlineJavaTest", s[5]);
-    }
-
-    public void testJarOption() throws Exception {
-        CommandlineJava c = new CommandlineJava();
-        c.createArgument().setValue("arg1");
-        c.setJar("myfile.jar");
-        c.createVmArgument().setValue("-classic");
-        c.createVmArgument().setValue("-Dx=y");
-        String[] s = c.getCommandline();
-        assertEquals("-classic", s[1]);
-        assertEquals("-Dx=y", s[2]);
-        assertEquals("-jar", s[3]);
-        assertEquals("myfile.jar", s[4]);
-        assertEquals("arg1", s[5]);
-    }
-
-    public void testSysproperties() {
-        String currentClasspath = System.getProperty("java.class.path");
-        assertNotNull(currentClasspath);
-        assertNull(System.getProperty("key"));
-        CommandlineJava c = new CommandlineJava();
-        Environment.Variable v = new Environment.Variable();
-        v.setKey("key");
-        v.setValue("value");
-        c.addSysproperty(v);
-        try {
-            c.setSystemProperties();
-            String newClasspath = System.getProperty("java.class.path");
-            assertNotNull(newClasspath);
-            assertEquals(currentClasspath, newClasspath);
-            assertNotNull(System.getProperty("key"));
-            assertEquals("value", System.getProperty("key"));
-            assertTrue(System.getProperties().containsKey("java.class.path"));
-        } finally {
-            c.restoreSystemProperties();
-        }
-        assertNull(System.getProperty("key"));
-    }
-
-}
diff --git a/src/testcases/org/apache/tools/ant/types/CommandlineTest.java b/src/testcases/org/apache/tools/ant/types/CommandlineTest.java
deleted file mode 100644
index 67c9231..0000000
--- a/src/testcases/org/apache/tools/ant/types/CommandlineTest.java
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.types;
-
-import org.apache.tools.ant.BuildException;
-
-import junit.framework.TestCase;
-import junit.framework.AssertionFailedError;
-
-import java.io.File;
-
-/**
- * JUnit 3 testcases for org.apache.tools.ant.CommandLine
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- */
-public class CommandlineTest extends TestCase {
-
-    public CommandlineTest(String name) {
-        super(name);
-    }
-
-    public void testTokenizer() {
-        String[] s = Commandline.translateCommandline("1 2 3");
-        assertEquals("Simple case", 3, s.length);
-        for (int i=0; i<3; i++) {
-            assertEquals(""+(i+1), s[i]);
-        }
-        
-        s = Commandline.translateCommandline("");
-        assertEquals("empty string", 0, s.length);
-
-        s = Commandline.translateCommandline(null);
-        assertEquals("null", 0, s.length);
-
-        s = Commandline.translateCommandline("1 \'2\' 3");
-        assertEquals("Simple case with single quotes", 3, s.length);
-        assertEquals("Single quotes have been stripped", "2", s[1]);
-
-        s = Commandline.translateCommandline("1 \"2\" 3");
-        assertEquals("Simple case with double quotes", 3, s.length);
-        assertEquals("Double quotes have been stripped", "2", s[1]);
-
-        s = Commandline.translateCommandline("1 \"2 3\" 4");
-        assertEquals("Case with double quotes and whitespace", 3, s.length);
-        assertEquals("Double quotes stripped, space included", "2 3", s[1]);
-        
-        s = Commandline.translateCommandline("1 \"2\'3\" 4");
-        assertEquals("Case with double quotes around single quote", 3, s.length);
-        assertEquals("Double quotes stripped, single quote included", "2\'3",
-                     s[1]);
-
-        s = Commandline.translateCommandline("1 \'2 3\' 4");
-        assertEquals("Case with single quotes and whitespace", 3, s.length);
-        assertEquals("Single quotes stripped, space included", "2 3", s[1]);
-        
-        s = Commandline.translateCommandline("1 \'2\"3\' 4");
-        assertEquals("Case with single quotes around double quote", 3, s.length);
-        assertEquals("Single quotes stripped, double quote included", "2\"3",
-                     s[1]);
-
-        // \ doesn't have a special meaning anymore - this is different from
-        // what the Unix sh does but causes a lot of problems on DOS
-        // based platforms otherwise
-        s = Commandline.translateCommandline("1 2\\ 3 4");
-        assertEquals("case with quoted whitespace", 4, s.length);
-        assertEquals("backslash included", "2\\", s[1]);
-
-
-        // now to the expected failures
-        
-        try {
-            s = Commandline.translateCommandline("a \'b c");
-            fail("unbalanced single quotes undetected");
-        } catch (BuildException be) {
-            assertEquals("unbalanced quotes in a \'b c", be.getMessage());
-        }
-
-        try {
-            s = Commandline.translateCommandline("a \"b c");
-            fail("unbalanced double quotes undetected");
-        } catch (BuildException be) {
-            assertEquals("unbalanced quotes in a \"b c", be.getMessage());
-        }
-    }
-
-    public void testToString() {
-        assertEquals("", Commandline.toString(new String[0]));
-        assertEquals("", Commandline.toString(null));
-        assertEquals("1 2 3", Commandline.toString(new String[] {"1", "2", "3"}));
-        assertEquals("1 \"2 3\"", Commandline.toString(new String[] {"1", "2 3"}));
-        assertEquals("1 \"2\'3\"", Commandline.toString(new String[] {"1", "2\'3"}));
-        assertEquals("1 \'2\"3\'", Commandline.toString(new String[] {"1", "2\"3"}));
-    }
-
-    public void testAwkCommand(){
-        Commandline c = new Commandline();
-        c.setExecutable("awk");
-        c.createArgument().setValue("'NR == 2 { print $NF }'");
-        String[] s = c.getCommandline();
-        assertNotNull(s);
-        assertEquals(2, s.length);
-        assertEquals("awk", s[0]);
-        assertEquals("'NR == 2 { print $NF }'", s[1]);
-    }
-}
diff --git a/src/testcases/org/apache/tools/ant/types/DescriptionTest.java b/src/testcases/org/apache/tools/ant/types/DescriptionTest.java
deleted file mode 100644
index 7f3ecdb..0000000
--- a/src/testcases/org/apache/tools/ant/types/DescriptionTest.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.types;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.BuildFileTest;
-
-import junit.framework.TestCase;
-import junit.framework.AssertionFailedError;
-
-import java.io.*;
-
-/**
- * FilterSet testing
- *
- * @author Conor MacNeill
- */
-public class DescriptionTest extends BuildFileTest {
-
-    public DescriptionTest(String name) {
-        super(name);
-    }
-
-    public void setUp() { 
-    }
-
-    public void tearDown() {
-    }
-
-    public void test1() { 
-        configureProject("src/etc/testcases/types/description1.xml");
-        assertEquals("Single description failed", "Test Project Description", project.getDescription());
-    }
-
-    public void test2() { 
-        configureProject("src/etc/testcases/types/description2.xml");
-        assertEquals("Multi line description failed", "Multi Line\nProject Description", project.getDescription());
-    }
-    
-    public void test3() { 
-        configureProject("src/etc/testcases/types/description3.xml");
-        assertEquals("Multi instance description failed", "Multi Instance Project Description", project.getDescription());
-    }
-    
-    public void test4() { 
-        configureProject("src/etc/testcases/types/description4.xml");
-        assertEquals("Multi instance nested description failed", "Multi Instance Nested Project Description", project.getDescription());
-    }
-}
diff --git a/src/testcases/org/apache/tools/ant/types/DirSetTest.java b/src/testcases/org/apache/tools/ant/types/DirSetTest.java
deleted file mode 100644
index 340fb39..0000000
--- a/src/testcases/org/apache/tools/ant/types/DirSetTest.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.types;
-
-import org.apache.tools.ant.BuildException;
-
-/**
- * JUnit 3 testcases for org.apache.tools.ant.types.DirSet.
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- */
-public class DirSetTest extends AbstractFileSetTest {
-
-    public DirSetTest(String name) {
-        super(name);
-    }
-
-    protected AbstractFileSet getInstance() {
-        return new DirSet();
-    }
-
-    public void testFileSetIsNoDirSet() {
-        DirSet ds = (DirSet) getInstance();
-        ds.setProject(getProject());
-        FileSet fs = new FileSet();
-        fs.setProject(getProject());
-        getProject().addReference("dummy", fs);
-        ds.setRefid(new Reference("dummy"));
-        try {
-            ds.getDir(getProject());
-            fail("DirSet created from FileSet reference");
-        } catch (BuildException e) {
-            assertEquals("dummy doesn\'t denote a DirSet", e.getMessage());
-        }
-
-        ds = (DirSet) getInstance();
-        ds.setProject(getProject());
-        getProject().addReference("dummy2", ds);
-        fs.setRefid(new Reference("dummy2"));
-        try {
-            fs.getDir(getProject());
-            fail("FileSet created from DirSet reference");
-        } catch (BuildException e) {
-            assertEquals("dummy2 doesn\'t denote a FileSet", e.getMessage());
-        }
-    }
-
-}
diff --git a/src/testcases/org/apache/tools/ant/types/EnumeratedAttributeTest.java b/src/testcases/org/apache/tools/ant/types/EnumeratedAttributeTest.java
deleted file mode 100644
index 24dd500..0000000
--- a/src/testcases/org/apache/tools/ant/types/EnumeratedAttributeTest.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.types;
-
-import org.apache.tools.ant.BuildException;
-
-import junit.framework.TestCase;
-import junit.framework.AssertionFailedError;
-
-/**
- * JUnit 3 testcases for org.apache.tools.ant.EnumeratedAttribute.
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- */
-
-public class EnumeratedAttributeTest extends TestCase {
-
-    private static String[] expected = {"a", "b", "c"};
-
-    public EnumeratedAttributeTest(String name) {
-        super(name);
-    }
-    
-    public void testContains() {
-        EnumeratedAttribute t1 = new TestNormal();
-        for (int i=0; i<expected.length; i++) {
-            assertTrue(expected[i]+" is in TestNormal",
-                   t1.containsValue(expected[i]));
-            assertTrue(expected[i].toUpperCase()+" is in TestNormal",
-                   !t1.containsValue(expected[i].toUpperCase()));
-        }
-        assertTrue("TestNormal doesn\'t have \"d\" attribute",
-               !t1.containsValue("d"));
-        assertTrue("TestNull doesn\'t have \"d\" attribute and doesn\'t die",
-               !(new TestNull()).containsValue("d"));
-    }
-
-    public void testExceptions() {
-        EnumeratedAttribute t1 = new TestNormal();
-        for (int i=0; i<expected.length; i++) {
-            try {
-                t1.setValue(expected[i]);
-            } catch (BuildException be) {
-                fail("unexpected exception for value "+expected[i]);
-            }
-        }
-        try {
-            t1.setValue("d");
-            fail("expected exception for value \"d\"");
-        } catch (BuildException be) {
-        }
-        try {
-            (new TestNull()).setValue("d");
-            fail("expected exception for value \"d\" in TestNull");
-        } catch (BuildException be) {
-        } catch (Throwable other) {
-            fail("unexpected death of TestNull: "+other.getMessage());
-        }
-    }
-
-    public static class TestNormal extends EnumeratedAttribute {
-        public String[] getValues() {
-            return expected;
-        }
-    }
-
-    public static class TestNull extends EnumeratedAttribute {
-        public String[] getValues() {
-            return null;
-        }
-    }
-}
diff --git a/src/testcases/org/apache/tools/ant/types/FileListTest.java b/src/testcases/org/apache/tools/ant/types/FileListTest.java
deleted file mode 100644
index 88aa7b8..0000000
--- a/src/testcases/org/apache/tools/ant/types/FileListTest.java
+++ /dev/null
@@ -1,184 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.types;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-
-import junit.framework.TestCase;
-import junit.framework.AssertionFailedError;
-
-import java.io.File;
-
-/**
- * JUnit 3 testcases for org.apache.tools.ant.types.FileList.
- *
- * <p>This doesn't actually test much, mainly reference handling.
- * Adapted from FileSetTest.</p>
- *
- * @author <a href="mailto:cstrong@arielpartners.com">Craeg Strong</a>
- */
-
-public class FileListTest extends TestCase {
-
-    private Project project;
-
-    public FileListTest(String name) {
-        super(name);
-    }
-
-    public void setUp() {
-        project = new Project();
-        project.setBasedir(".");
-    }
-
-    public void testEmptyElementIfIsReference() {
-        FileList f = new FileList();
-        f.setDir(project.resolveFile("."));
-        try {
-            f.setRefid(new Reference("dummyref"));
-            fail("Can add reference to FileList with directory attribute set.");
-        } catch (BuildException be) {
-            assertEquals("You must not specify more than one attribute when using refid",
-                         be.getMessage());
-        }
-
-        f = new FileList();
-        f.setFiles("foo.xml,c/d/bar.xml");
-        try {
-            f.setRefid(new Reference("dummyref"));
-            fail("Can add reference to FileList with file attribute set.");
-        } catch (BuildException be) {
-            assertEquals("You must not specify more than one attribute when using refid",
-                         be.getMessage());
-        }
-
-        f = new FileList();
-        f.setRefid(new Reference("dummyref"));
-        try {
-            f.setFiles("a/b/foo.java");
-            fail("Can set files in FileList that is a reference.");
-        } catch (BuildException be) {
-            assertEquals("You must not specify more than one attribute when using refid",
-                         be.getMessage());
-        }
-        try {
-            f.setDir(project.resolveFile("."));
-            fail("Can set dir in FileList that is a reference.");
-        } catch (BuildException be) {
-            assertEquals("You must not specify more than one attribute when using refid",
-                         be.getMessage());
-        }
-    }
-
-    public void testCircularReferenceCheck() {
-        FileList f = new FileList();
-        project.addReference("dummy", f);
-        f.setRefid(new Reference("dummy"));
-        try {
-            f.getDir(project);
-            fail("Can make FileList a Reference to itself.");
-        } catch (BuildException be) {
-            assertEquals("This data type contains a circular reference.",
-                         be.getMessage());
-        }
-        try {
-            f.getFiles(project);
-            fail("Can make FileList a Reference to itself.");
-        } catch (BuildException be) {
-            assertEquals("This data type contains a circular reference.",
-                         be.getMessage());
-        }
-
-        // dummy1 --> dummy2 --> dummy3 --> dummy1
-        FileList f1 = new FileList();
-        project.addReference("dummy1", f1);
-        f1.setRefid(new Reference("dummy2"));
-        FileList f2 = new FileList();
-        project.addReference("dummy2", f2);
-        f2.setRefid(new Reference("dummy3"));
-        FileList f3 = new FileList();
-        project.addReference("dummy3", f3);
-        f3.setRefid(new Reference("dummy1"));
-        try {
-            f1.getDir(project);
-            fail("Can make circular reference.");
-        } catch (BuildException be) {
-            assertEquals("This data type contains a circular reference.",
-                         be.getMessage());
-        }
-        try {
-            f1.getFiles(project);
-            fail("Can make circular reference.");
-        } catch (BuildException be) {
-            assertEquals("This data type contains a circular reference.",
-                         be.getMessage());
-        }
-
-        // dummy1 --> dummy2 --> dummy3 
-        // (which has the Project's basedir as root).
-        f1 = new FileList();
-        project.addReference("dummy1", f1);
-        f1.setRefid(new Reference("dummy2"));
-        f2 = new FileList();
-        project.addReference("dummy2", f2);
-        f2.setRefid(new Reference("dummy3"));
-        f3 = new FileList();
-        project.addReference("dummy3", f3);
-        f3.setDir(project.resolveFile("."));
-        File dir = f1.getDir(project);
-        assertEquals("Dir is basedir", dir, project.getBaseDir());
-    }
-}
diff --git a/src/testcases/org/apache/tools/ant/types/FileSetTest.java b/src/testcases/org/apache/tools/ant/types/FileSetTest.java
deleted file mode 100644
index 6f45d81..0000000
--- a/src/testcases/org/apache/tools/ant/types/FileSetTest.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.types;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-
-import junit.framework.TestCase;
-import junit.framework.AssertionFailedError;
-
-import java.io.File;
-
-/**
- * JUnit 3 testcases for org.apache.tools.ant.types.FileSet.
- *
- * <p>This doesn't actually test much, mainly reference handling.
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- */
-
-public class FileSetTest extends AbstractFileSetTest {
-
-    public FileSetTest(String name) {
-        super(name);
-    }
-
-    protected AbstractFileSet getInstance() {
-        return new FileSet();
-    }
-
-}
diff --git a/src/testcases/org/apache/tools/ant/types/FilterSetTest.java b/src/testcases/org/apache/tools/ant/types/FilterSetTest.java
deleted file mode 100644
index da1311c..0000000
--- a/src/testcases/org/apache/tools/ant/types/FilterSetTest.java
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.types;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.BuildFileTest;
-
-import junit.framework.TestCase;
-import junit.framework.AssertionFailedError;
-
-import java.io.*;
-
-/**
- * FilterSet testing
- *
- * @author Conor MacNeill
- */
-public class FilterSetTest extends BuildFileTest {
-
-    static private final int BUF_SIZE = 32768;
-    
-    public FilterSetTest(String name) {
-        super(name);
-    }
-
-    public void setUp() { 
-        configureProject("src/etc/testcases/types/filterset.xml");
-    }
-
-    public void tearDown() {
-        executeTarget("cleanup");
-    }
-
-    public void test1() { 
-        executeTarget("test1");
-        assertTrue("Filterset 1 failed", compareFiles("src/etc/testcases/types/gold/filterset1.txt",
-                                                      "src/etc/testcases/types/dest1.txt"));
-    }
-
-    public void test2() { 
-        executeTarget("test2");
-        assertTrue("Filterset 2 failed", compareFiles("src/etc/testcases/types/gold/filterset2.txt",
-                                                      "src/etc/testcases/types/dest2.txt"));
-    }
-
-    public void test3() { 
-        executeTarget("test3");
-        assertTrue("Filterset 3 failed", compareFiles("src/etc/testcases/types/gold/filterset3.txt",
-                                                      "src/etc/testcases/types/dest3.txt"));
-    }
-
-    private boolean compareFiles(String name1, String name2) {
-        File file1 = new File(name1);
-        File file2 = new File(name2);
-        
-        try {
-            if (!file1.exists() || !file2.exists()) {
-                System.out.println("One or both files do not exist:" + name1 + ", " + name2);
-                return false;
-            }
-            
-            if (file1.length() != file2.length()) {
-                System.out.println("File size mismatch:" + name1 + "(" + file1.length() + "), " + 
-                                   name2  + "(" + file2.length() + ")");
-                return false;
-            }
-            
-            // byte - byte compare
-            byte[] buffer1 = new byte[BUF_SIZE];
-            byte[] buffer2 = new byte[BUF_SIZE];
-            
-            FileInputStream fis1 = new FileInputStream(file1);
-            FileInputStream fis2 = new FileInputStream(file2);
-            int index = 0;
-            int read = 0;
-            while ((read = fis1.read(buffer1)) != -1) {
-                fis2.read(buffer2);
-                for (int i = 0; i < read; ++i, ++index) {
-                    if (buffer1[i] != buffer2[i]) {
-                        System.out.println("Bytes mismatch:" + name1 + ", " + name2 + 
-                                           " at byte " + index);
-                        return false;
-                    }
-                }
-            }
-            return true;
-        }
-        catch (IOException e) {
-            System.out.println("IOException comparing files: " + name1 + ", " + name2);
-            return false;
-        }
-    }
-}
diff --git a/src/testcases/org/apache/tools/ant/types/FlexIntegerTest.java b/src/testcases/org/apache/tools/ant/types/FlexIntegerTest.java
deleted file mode 100644
index be00e52..0000000
--- a/src/testcases/org/apache/tools/ant/types/FlexIntegerTest.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.types;
-
-import org.apache.tools.ant.BuildFileTest;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.BuildException;
-
-public class FlexIntegerTest extends BuildFileTest {
-
-    public FlexIntegerTest(String name) {
-        super(name);
-    }
-
-    public void setUp() {
-        configureProject("src/etc/testcases/types/flexinteger.xml");
-    }
-
-    public void testFlexInteger() {
-        executeTarget("test");
-        assertEquals(project.getProperty("flexint.value1"), "10");
-        assertEquals(project.getProperty("flexint.value2"), "8");
-    }
-
-    // This class acts as a custom Ant task also
-    // and uses these variables/methods in that mode
-    private Project taskProject;
-    String propName;
-    private FlexInteger value;
-
-    /**
-     * To make taskdef happy
-     */
-    public FlexIntegerTest() {
-        super("FlexIntegerTest");
-    }
-
-    public void setPropName(String propName) {
-        this.propName = propName;
-    }
-
-    public void setValue(FlexInteger value) {
-        this.value = value;
-    }
-
-    public void setProject(Project project) {
-        taskProject = project;
-    }
-
-    public void execute() {
-        if (propName == null || value == null) {
-            throw new BuildException("name and value required");
-        }
-
-        taskProject.setNewProperty(propName, value.toString());
-    }
-}
diff --git a/src/testcases/org/apache/tools/ant/types/MapperTest.java b/src/testcases/org/apache/tools/ant/types/MapperTest.java
deleted file mode 100644
index 2d9ff8a..0000000
--- a/src/testcases/org/apache/tools/ant/types/MapperTest.java
+++ /dev/null
@@ -1,206 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.types;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.util.*;
-import org.apache.tools.ant.BuildFileTest;
-
-import junit.framework.TestCase;
-import junit.framework.AssertionFailedError;
-
-import java.io.File;
-
-/**
- * JUnit 3 testcases for org.apache.tools.ant.types.Mapper.
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> 
- */
-
-public class MapperTest extends TestCase {
-
-    private Project project;
-
-    public MapperTest(String name) {
-        super(name);
-    }
-
-    public void setUp() {
-        project = new Project();
-        project.setBasedir(".");
-    }
-
-    public void testEmptyElementIfIsReference() {
-        Mapper m = new Mapper(project);
-        m.setFrom("*.java");
-        try {
-            m.setRefid(new Reference("dummyref"));
-            fail("Can add reference to Mapper with from attribute set");
-        } catch (BuildException be) {
-            assertEquals("You must not specify more than one attribute when using refid",
-                         be.getMessage());
-        }
-
-        m = new Mapper(project);
-        m.setRefid(new Reference("dummyref"));
-        try {
-            m.setFrom("*.java");
-            fail("Can set from in Mapper that is a reference.");
-        } catch (BuildException be) {
-            assertEquals("You must not specify more than one attribute when using refid",
-                         be.getMessage());
-        }
-
-        m = new Mapper(project);
-        m.setRefid(new Reference("dummyref"));
-        try {
-            m.setTo("*.java");
-            fail("Can set to in Mapper that is a reference.");
-        } catch (BuildException be) {
-            assertEquals("You must not specify more than one attribute when using refid",
-                         be.getMessage());
-        }
-        try {
-            Mapper.MapperType mt = new Mapper.MapperType();
-            mt.setValue("glob");
-            m.setType(mt);
-            fail("Can set type in Mapper that is a reference.");
-        } catch (BuildException be) {
-            assertEquals("You must not specify more than one attribute when using refid",
-                         be.getMessage());
-        }
-    }
-
-    public void testCircularReferenceCheck() {
-        Mapper m = new Mapper(project);
-        project.addReference("dummy", m);
-        m.setRefid(new Reference("dummy"));
-        try {
-            m.getImplementation();
-            fail("Can make Mapper a Reference to itself.");
-        } catch (BuildException be) {
-            assertEquals("This data type contains a circular reference.",
-                         be.getMessage());
-        }
-
-        // dummy1 --> dummy2 --> dummy3 --> dummy1
-        Mapper m1 = new Mapper(project);
-        project.addReference("dummy1", m1);
-        m1.setRefid(new Reference("dummy2"));
-        Mapper m2 = new Mapper(project);
-        project.addReference("dummy2", m2);
-        m2.setRefid(new Reference("dummy3"));
-        Mapper m3 = new Mapper(project);
-        project.addReference("dummy3", m3);
-        m3.setRefid(new Reference("dummy1"));
-        try {
-            m1.getImplementation();
-            fail("Can make circular reference.");
-        } catch (BuildException be) {
-            assertEquals("This data type contains a circular reference.",
-                         be.getMessage());
-        }
-
-        // dummy1 --> dummy2 --> dummy3 
-        // (which holds a glob mapper from "*.java" to "*.class"
-        m1 = new Mapper(project);
-        project.addReference("dummy1", m1);
-        m1.setRefid(new Reference("dummy2"));
-        m2 = new Mapper(project);
-        project.addReference("dummy2", m2);
-        m2.setRefid(new Reference("dummy3"));
-        m3 = new Mapper(project);
-        project.addReference("dummy3", m3);
-        Mapper.MapperType mt = new Mapper.MapperType();
-        mt.setValue("glob");
-        m3.setType(mt);
-        m3.setFrom("*.java");
-        m3.setTo("*.class");
-        FileNameMapper fmm = m1.getImplementation();
-        assertTrue("should be glob", fmm instanceof GlobPatternMapper);
-        String[] result = fmm.mapFileName("a.java");
-        assertEquals("a.java should match", 1, result.length);
-        assertEquals("a.class", result[0]);
-    }
-
-    public void testCopyTaskWithTwoFilesets() {
-        TaskdefForCopyTest t = new TaskdefForCopyTest("test1");
-        try {
-            t.setUp();
-            t.test1();
-        } finally {
-            t.tearDown();
-        }
-    }
-
-    private class TaskdefForCopyTest extends BuildFileTest {
-        TaskdefForCopyTest(String name) {
-            super(name);
-        }
-
-        public void setUp() { 
-            configureProject("src/etc/testcases/types/mapper.xml");
-        }
-
-        public void tearDown() {
-            executeTarget("cleanup");
-        }
-
-        public void test1() { 
-            executeTarget("test1");
-        }
-    }
-}
diff --git a/src/testcases/org/apache/tools/ant/types/PathTest.java b/src/testcases/org/apache/tools/ant/types/PathTest.java
deleted file mode 100644
index ea661bc..0000000
--- a/src/testcases/org/apache/tools/ant/types/PathTest.java
+++ /dev/null
@@ -1,536 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.types;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.taskdefs.condition.Os;
-
-import junit.framework.TestCase;
-import junit.framework.AssertionFailedError;
-
-import java.io.File;
-import java.util.Locale;
-
-/**
- * JUnit 3 testcases for org.apache.tools.ant.types.Path
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> 
- * @author <a href="mailto:jtulley@novell.com">Jeff Tulley</a> 
- */
-
-public class PathTest extends TestCase {
-
-    public static boolean isUnixStyle = File.pathSeparatorChar == ':';
-    public static boolean isNetWare = Os.isFamily("netware");
-
-    private Project project;
-
-    public PathTest(String name) {
-        super(name);
-    }
-
-    public void setUp() {
-        project = new Project();
-        project.setBasedir(".");
-    }
-
-    // actually tests constructor as well as setPath
-    public void testConstructorUnixStyle() {
-        Path p = new Path(project, "/a:/b");
-        String[] l = p.list();
-        assertEquals("two items, Unix style", 2, l.length);
-        if (isUnixStyle) {
-            assertEquals("/a", l[0]);
-            assertEquals("/b", l[1]);
-        } else if (isNetWare) {
-            assertEquals("\\a", l[0]);
-            assertEquals("\\b", l[1]);
-        } else {
-            assertEquals(":\\a", l[0].substring(1));
-            assertEquals(":\\b", l[1].substring(1));
-        }        
-    }
-
-    public void testConstructorWindowsStyle() {
-        Path p = new Path(project, "\\a;\\b");
-        String[] l = p.list();
-        assertEquals("two items, DOS style", 2, l.length);
-        if (isUnixStyle) {
-            assertEquals("/a", l[0]);
-            assertEquals("/b", l[1]);
-        } else if (isNetWare) {
-            assertEquals("\\a", l[0]);
-            assertEquals("\\b", l[1]);
-        } else {
-            assertEquals(":\\a", l[0].substring(1));
-            assertEquals(":\\b", l[1].substring(1));
-        }        
-
-        p = new Path(project, "c:\\test");
-        l = p.list();
-        if (isUnixStyle) {
-            assertEquals("no drives on Unix", 2, l.length);
-            assertTrue("c resolved relative to project\'s basedir", 
-                   l[0].endsWith("/c"));
-            assertEquals("/test", l[1]);
-        } else if (isNetWare) {
-            assertEquals("volumes on NetWare", 1, l.length);
-            assertEquals("c:\\test", l[0].toLowerCase(Locale.US));
-        } else {
-            assertEquals("drives on DOS", 1, l.length);
-            assertEquals("c:\\test", l[0].toLowerCase(Locale.US));
-        }
-
-        p = new Path(project, "c:\\test;d:\\programs");
-        l = p.list();
-        if (isUnixStyle) {
-            assertEquals("no drives on Unix", 4, l.length);
-            assertTrue("c resolved relative to project\'s basedir", 
-                   l[0].endsWith("/c"));
-            assertEquals("/test", l[1]);
-            assertTrue("d resolved relative to project\'s basedir", 
-                   l[2].endsWith("/d"));
-            assertEquals("/programs", l[3]);
-        } else if (isNetWare) {
-            assertEquals("volumes on NetWare", 2, l.length);
-            assertEquals("c:\\test", l[0].toLowerCase(Locale.US));
-            assertEquals("d:\\programs", l[1].toLowerCase(Locale.US));
-        } else {
-            assertEquals("drives on DOS", 2, l.length);
-            assertEquals("c:\\test", l[0].toLowerCase(Locale.US));
-            assertEquals("d:\\programs", l[1].toLowerCase(Locale.US));
-        }
-
-        p = new Path(project, "c:/test");
-        l = p.list();
-        if (isUnixStyle) {
-            assertEquals("no drives on Unix", 2, l.length);
-            assertTrue("c resolved relative to project\'s basedir", 
-                   l[0].endsWith("/c"));
-            assertEquals("/test", l[1]);
-        } else if (isNetWare) {
-            assertEquals("volumes on NetWare", 1, l.length);
-            assertEquals("c:\\test", l[0].toLowerCase(Locale.US));
-        } else {
-            assertEquals("drives on DOS", 1, l.length);
-            assertEquals("c:\\test", l[0].toLowerCase(Locale.US));
-        }
-
-        p = new Path(project, "c:/test;d:/programs");
-        l = p.list();
-        if (isUnixStyle) {
-            assertEquals("no drives on Unix", 4, l.length);
-            assertTrue("c resolved relative to project\'s basedir", 
-                   l[0].endsWith("/c"));
-            assertEquals("/test", l[1]);
-            assertTrue("d resolved relative to project\'s basedir", 
-                   l[2].endsWith("/d"));
-            assertEquals("/programs", l[3]);
-        } else if (isNetWare) {
-            assertEquals("volumes on NetWare", 2, l.length);
-            assertEquals("c:\\test", l[0].toLowerCase(Locale.US));
-            assertEquals("d:\\programs", l[1].toLowerCase(Locale.US));
-        } else {
-            assertEquals("drives on DOS", 2, l.length);
-            assertEquals("c:\\test", l[0].toLowerCase(Locale.US));
-            assertEquals("d:\\programs", l[1].toLowerCase(Locale.US));
-        }
-    }
-
-    public void testConstructorNetWareStyle() {
-        // try a netware-volume length path, see how it is handled
-        Path p = new Path(project, "sys:\\test");
-        String[] l = p.list();
-        if (isUnixStyle) {
-            assertEquals("no drives on Unix", 2, l.length);
-            assertTrue("sys resolved relative to project\'s basedir", 
-                   l[0].endsWith("/sys"));
-            assertEquals("/test", l[1]);
-        } else if (isNetWare) {
-            assertEquals("sys:\\test", l[0].toLowerCase(Locale.US));
-            assertEquals("volumes on NetWare", 1, l.length);
-        } else {
-            assertEquals("no multiple character-length volumes on Windows", 2, l.length);
-            assertTrue("sys resolved relative to project\'s basedir", 
-                   l[0].endsWith("\\sys"));
-            assertTrue("test resolved relative to project\'s basedir", 
-                   l[1].endsWith("\\test"));
-        }
-
-        // try a multi-part netware-volume length path, see how it is handled
-        p = new Path(project, "sys:\\test;dev:\\temp");
-        l = p.list();
-        if (isUnixStyle) {
-            assertEquals("no drives on Unix", 4, l.length);
-            assertTrue("sys resolved relative to project\'s basedir", 
-                   l[0].endsWith("/sys"));
-            assertEquals("/test", l[1]);
-            assertTrue("dev resolved relative to project\'s basedir", 
-                   l[2].endsWith("/dev"));
-            assertEquals("/temp", l[3]);
-        } else if (isNetWare) {
-            assertEquals("volumes on NetWare", 2, l.length);
-            assertEquals("sys:\\test", l[0].toLowerCase(Locale.US));
-            assertEquals("dev:\\temp", l[1].toLowerCase(Locale.US));
-        } else {
-            assertEquals("no multiple character-length volumes on Windows", 4, l.length);
-            assertTrue("sys resolved relative to project\'s basedir", 
-                   l[0].endsWith("\\sys"));
-            assertTrue("test resolved relative to project\'s basedir", 
-                   l[1].endsWith("\\test"));
-            assertTrue("dev resolved relative to project\'s basedir", 
-                   l[2].endsWith("\\dev"));
-            assertTrue("temp resolved relative to project\'s basedir", 
-                   l[3].endsWith("\\temp"));
-        }
-
-        // try a netware-volume length path w/forward slash, see how it is handled
-        p = new Path(project, "sys:/test");
-        l = p.list();
-        if (isUnixStyle) {
-            assertEquals("no drives on Unix", 2, l.length);
-            assertTrue("sys resolved relative to project\'s basedir", 
-                   l[0].endsWith("/sys"));
-            assertEquals("/test", l[1]);
-        } else if (isNetWare) {
-            assertEquals("volumes on NetWare", 1, l.length);
-            assertEquals("sys:\\test", l[0].toLowerCase(Locale.US));
-        } else {
-            assertEquals("no multiple character-length volumes on Windows", 2, l.length);
-            assertTrue("sys resolved relative to project\'s basedir", 
-                   l[0].endsWith("\\sys"));
-            assertTrue("test resolved relative to project\'s basedir", 
-                   l[1].endsWith("\\test"));
-        }
-
-        // try a multi-part netware-volume length path w/forward slash, see how it is handled
-        p = new Path(project, "sys:/test;dev:/temp");
-        l = p.list();
-        if (isUnixStyle) {
-            assertEquals("no drives on Unix", 4, l.length);
-            assertTrue("sys resolved relative to project\'s basedir", 
-                   l[0].endsWith("/sys"));
-            assertEquals("/test", l[1]);
-            assertTrue("dev resolved relative to project\'s basedir", 
-                   l[2].endsWith("/dev"));
-            assertEquals("/temp", l[3]);
-        } else if (isNetWare) {
-            assertEquals("volumes on NetWare", 2, l.length);
-            assertEquals("sys:\\test", l[0].toLowerCase(Locale.US));
-            assertEquals("dev:\\temp", l[1].toLowerCase(Locale.US));
-        } else {
-            assertEquals("no multiple character-length volumes on Windows", 4, l.length);
-            assertTrue("sys resolved relative to project\'s basedir", 
-                   l[0].endsWith("\\sys"));
-            assertTrue("test resolved relative to project\'s basedir", 
-                   l[1].endsWith("\\test"));
-            assertTrue("dev resolved relative to project\'s basedir", 
-                   l[2].endsWith("\\dev"));
-            assertTrue("temp resolved relative to project\'s basedir", 
-                   l[3].endsWith("\\temp"));
-         }
-    }
-
-    public void testConstructorMixedStyle() {
-        Path p = new Path(project, "\\a;\\b:/c");
-        String[] l = p.list();
-        assertEquals("three items, mixed style", 3, l.length);
-        if (isUnixStyle) {
-            assertEquals("/a", l[0]);
-            assertEquals("/b", l[1]);
-            assertEquals("/c", l[2]);
-        } else if (isNetWare) {
-            assertEquals("\\a", l[0]);
-            assertEquals("\\b", l[1]);
-            assertEquals("\\c", l[2]);
-        } else {
-            assertEquals(":\\a", l[0].substring(1));
-            assertEquals(":\\b", l[1].substring(1));
-            assertEquals(":\\c", l[2].substring(1));
-        }        
-    }
-
-    public void testSetLocation() {
-        Path p = new Path(project);
-        p.setLocation(new File(File.separatorChar+"a"));
-        String[] l = p.list();
-        if (isUnixStyle) {
-            assertEquals(1, l.length);
-            assertEquals("/a", l[0]);
-        } else if (isNetWare) {
-            assertEquals(1, l.length);
-            assertEquals("\\a", l[0]);
-        } else {
-            assertEquals(1, l.length);
-            assertEquals(":\\a", l[0].substring(1));
-        }
-    }
-
-    public void testAppending() {
-        Path p = new Path(project, "/a:/b");
-        String[] l = p.list();
-        assertEquals("2 after construction", 2, l.length);
-        p.setLocation(new File("/c"));
-        l = p.list();
-        assertEquals("3 after setLocation", 3, l.length);
-        p.setPath("\\d;\\e");
-        l = p.list();
-        assertEquals("5 after setPath", 5, l.length);
-        p.append(new Path(project, "\\f"));
-        l = p.list();
-        assertEquals("6 after append", 6, l.length);
-        p.createPath().setLocation(new File("/g"));
-        l = p.list();
-        assertEquals("7 after append", 7, l.length);
-    }
-
-    public void testEmpyPath() {
-        Path p = new Path(project, "");
-        String[] l = p.list();
-        assertEquals("0 after construction", 0, l.length);
-        p.setPath("");
-        l = p.list();
-        assertEquals("0 after setPath", 0, l.length);
-        p.append(new Path(project));
-        l = p.list();
-        assertEquals("0 after append", 0, l.length);
-        p.createPath();
-        l = p.list();
-        assertEquals("0 after append", 0, l.length);
-    }
-
-    public void testUnique() {
-        Path p = new Path(project, "/a:/a");
-        String[] l = p.list();
-        assertEquals("1 after construction", 1, l.length);
-        p.setLocation(new File(File.separatorChar+"a"));
-        l = p.list();
-        assertEquals("1 after setLocation", 1, l.length);
-        p.setPath("\\a;/a");
-        l = p.list();
-        assertEquals("1 after setPath", 1, l.length);
-        p.append(new Path(project, "/a;\\a:\\a"));
-        l = p.list();
-        assertEquals("1 after append", 1, l.length);
-        p.createPath().setPath("\\a:/a");
-        l = p.list();
-        assertEquals("1 after append", 1, l.length);
-    }
-
-    public void testEmptyElementIfIsReference() {
-        Path p = new Path(project, "/a:/a");
-        try {
-            p.setRefid(new Reference("dummyref"));
-            fail("Can add reference to Path with elements from constructor");
-        } catch (BuildException be) {
-            assertEquals("You must not specify more than one attribute when using refid",
-                         be.getMessage());
-        }
-
-        p = new Path(project);
-        p.setLocation(new File("/a"));
-        try {
-            p.setRefid(new Reference("dummyref"));
-            fail("Can add reference to Path with elements from setLocation");
-        } catch (BuildException be) {
-            assertEquals("You must not specify more than one attribute when using refid",
-                         be.getMessage());
-        }
-
-        p = new Path(project);
-        p.setRefid(new Reference("dummyref"));
-        try {
-            p.setLocation(new File("/a"));
-            fail("Can set location in Path that is a reference.");
-        } catch (BuildException be) {
-            assertEquals("You must not specify more than one attribute when using refid",
-                         be.getMessage());
-        }
-
-        try {
-            p.setPath("/a;\\a");
-            fail("Can set path in Path that is a reference.");
-        } catch (BuildException be) {
-            assertEquals("You must not specify more than one attribute when using refid",
-                         be.getMessage());
-        }
-
-        try {
-            p.createPath();
-            fail("Can create nested Path in Path that is a reference.");
-        } catch (BuildException be) {
-            assertEquals("You must not specify nested elements when using refid",
-                         be.getMessage());
-        }
-
-        try {
-            p.createPathElement();
-            fail("Can create nested PathElement in Path that is a reference.");
-        } catch (BuildException be) {
-            assertEquals("You must not specify nested elements when using refid",
-                         be.getMessage());
-        }
-
-        try {
-            p.addFileset(new FileSet());
-            fail("Can add nested FileSet in Path that is a reference.");
-        } catch (BuildException be) {
-            assertEquals("You must not specify nested elements when using refid",
-                         be.getMessage());
-        }
-
-        try {
-            p.addFilelist(new FileList());
-            fail("Can add nested FileList in Path that is a reference.");
-        } catch (BuildException be) {
-            assertEquals("You must not specify nested elements when using refid",
-                         be.getMessage());
-        }
-
-        try {
-            p.addDirset(new DirSet());
-            fail("Can add nested Dirset in Path that is a reference.");
-        } catch (BuildException be) {
-            assertEquals("You must not specify nested elements when using refid",
-                         be.getMessage());
-        }
-    }
-
-    public void testCircularReferenceCheck() {
-        Path p = new Path(project);
-        project.addReference("dummy", p);
-        p.setRefid(new Reference("dummy"));
-        try {
-            p.list();
-            fail("Can make Path a Reference to itself.");
-        } catch (BuildException be) {
-            assertEquals("This data type contains a circular reference.",
-                         be.getMessage());
-        }
-
-        // dummy1 --> dummy2 --> dummy3 --> dummy1
-        Path p1 = new Path(project);
-        project.addReference("dummy1", p1);
-        Path p2 = p1.createPath();
-        project.addReference("dummy2", p2);
-        Path p3 = p2.createPath();
-        project.addReference("dummy3", p3);
-        p3.setRefid(new Reference("dummy1"));
-        try {
-            p1.list();
-            fail("Can make circular reference.");
-        } catch (BuildException be) {
-            assertEquals("This data type contains a circular reference.",
-                         be.getMessage());
-        }
-
-        // dummy1 --> dummy2 --> dummy3 (with Path "/a")
-        p1 = new Path(project);
-        project.addReference("dummy1", p1);
-        p2 = p1.createPath();
-        project.addReference("dummy2", p2);
-        p3 = p2.createPath();
-        project.addReference("dummy3", p3);
-        p3.setLocation(new File("/a"));
-        String[] l = p1.list();
-        assertEquals("One element buried deep inside a nested path structure",
-                     1, l.length);
-        if (isUnixStyle) {
-            assertEquals("/a", l[0]);
-        } else if (isNetWare) {
-            assertEquals("\\a", l[0]);
-        } else {
-            assertEquals(":\\a", l[0].substring(1));
-        }
-    }
-
-    public void testFileList() {
-        Path p = new Path(project);
-        FileList f = new FileList();
-        f.setProject(project);
-        f.setDir(project.resolveFile("."));
-        f.setFiles("build.xml");
-        p.addFilelist(f);
-        String[] l = p.list();
-        assertEquals(1, l.length);
-        assertEquals(project.resolveFile("build.xml").getAbsolutePath(), l[0]);
-    }
-
-    public void testFileSet() {
-        Path p = new Path(project);
-        FileSet f = new FileSet();
-        f.setProject(project);
-        f.setDir(project.resolveFile("."));
-        f.setIncludes("build.xml");
-        p.addFileset(f);
-        String[] l = p.list();
-        assertEquals(1, l.length);
-        assertEquals(project.resolveFile("build.xml").getAbsolutePath(), l[0]);
-    }
-
-    public void testDirSet() {
-        Path p = new Path(project);
-        DirSet d = new DirSet();
-        d.setProject(project);
-        d.setDir(project.resolveFile("."));
-        d.setIncludes("build");
-        p.addDirset(d);
-        String[] l = p.list();
-        assertEquals(1, l.length);
-        assertEquals(project.resolveFile("build").getAbsolutePath(), l[0]);
-    }
-
-}
diff --git a/src/testcases/org/apache/tools/ant/types/PatternSetTest.java b/src/testcases/org/apache/tools/ant/types/PatternSetTest.java
deleted file mode 100644
index 942eca2..0000000
--- a/src/testcases/org/apache/tools/ant/types/PatternSetTest.java
+++ /dev/null
@@ -1,241 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.types;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-
-import junit.framework.TestCase;
-import junit.framework.AssertionFailedError;
-
-import java.io.File;
-
-/**
- * JUnit 3 testcases for org.apache.tools.ant.types.PatternSet.
- *
- * <p>This doesn't actually test much, mainly reference handling.</p>
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> 
- */
-
-public class PatternSetTest extends TestCase {
-
-    private Project project;
-
-    public PatternSetTest(String name) {
-        super(name);
-    }
-
-    public void setUp() {
-        project = new Project();
-        project.setBasedir(".");
-    }
-
-    public void testEmptyElementIfIsReference() {
-        PatternSet p = new PatternSet();
-        p.setIncludes("**/*.java");
-        try {
-            p.setRefid(new Reference("dummyref"));
-            fail("Can add reference to PatternSet with elements from setIncludes");
-        } catch (BuildException be) {
-            assertEquals("You must not specify more than one attribute when using refid",
-                         be.getMessage());
-        }
-
-        p = new PatternSet();
-        p.setRefid(new Reference("dummyref"));
-        try {
-            p.setIncludes("**/*.java");
-            fail("Can set includes in PatternSet that is a reference.");
-        } catch (BuildException be) {
-            assertEquals("You must not specify more than one attribute when using refid",
-                         be.getMessage());
-        }
-
-        p = new PatternSet();
-        p.setRefid(new Reference("dummyref"));
-        try {
-            p.setIncludesfile(new File("/a"));
-            fail("Can set includesfile in PatternSet that is a reference.");
-        } catch (BuildException be) {
-            assertEquals("You must not specify more than one attribute when using refid",
-                         be.getMessage());
-        }
-        try {
-            p.setExcludes("**/*.java");
-            fail("Can set excludes in PatternSet that is a reference.");
-        } catch (BuildException be) {
-            assertEquals("You must not specify more than one attribute when using refid",
-                         be.getMessage());
-        }
-        try {
-            p.setExcludesfile(new File("/a"));
-            fail("Can set excludesfile in PatternSet that is a reference.");
-        } catch (BuildException be) {
-            assertEquals("You must not specify more than one attribute when using refid",
-                         be.getMessage());
-        }
-        try {
-            p.createInclude();
-            fail("Can add nested include in PatternSet that is a reference.");
-        } catch (BuildException be) {
-            assertEquals("You must not specify nested elements when using refid",
-                         be.getMessage());
-        }
-        try {
-            p.createExclude();
-            fail("Can add nested exclude in PatternSet that is a reference.");
-        } catch (BuildException be) {
-            assertEquals("You must not specify nested elements when using refid",
-                         be.getMessage());
-        }
-        try {
-            p.createIncludesFile();
-            fail("Can add nested includesfile in PatternSet that is a reference.");
-        } catch (BuildException be) {
-            assertEquals("You must not specify nested elements when using refid",
-                         be.getMessage());
-        }
-        try {
-            p.createExcludesFile();
-            fail("Can add nested excludesfile in PatternSet that is a reference.");
-        } catch (BuildException be) {
-            assertEquals("You must not specify nested elements when using refid",
-                         be.getMessage());
-        }
-    }
-
-    public void testCircularReferenceCheck() {
-        PatternSet p = new PatternSet();
-        project.addReference("dummy", p);
-        p.setRefid(new Reference("dummy"));
-        try {
-            p.getIncludePatterns(project);
-            fail("Can make PatternSet a Reference to itself.");
-        } catch (BuildException be) {
-            assertEquals("This data type contains a circular reference.",
-                         be.getMessage());
-        }
-        try {
-            p.getExcludePatterns(project);
-            fail("Can make PatternSet a Reference to itself.");
-        } catch (BuildException be) {
-            assertEquals("This data type contains a circular reference.",
-                         be.getMessage());
-        }
-
-        // dummy1 --> dummy2 --> dummy3 --> dummy1
-        PatternSet p1 = new PatternSet();
-        project.addReference("dummy1", p1);
-        p1.setRefid(new Reference("dummy2"));
-        PatternSet p2 = new PatternSet();
-        project.addReference("dummy2", p2);
-        p2.setRefid(new Reference("dummy3"));
-        PatternSet p3 = new PatternSet();
-        project.addReference("dummy3", p3);
-        p3.setRefid(new Reference("dummy1"));
-        try {
-            p1.getIncludePatterns(project);
-            fail("Can make circular reference.");
-        } catch (BuildException be) {
-            assertEquals("This data type contains a circular reference.",
-                         be.getMessage());
-        }
-        try {
-            p1.getExcludePatterns(project);
-            fail("Can make circular reference.");
-        } catch (BuildException be) {
-            assertEquals("This data type contains a circular reference.",
-                         be.getMessage());
-        }
-
-        // dummy1 --> dummy2 --> dummy3 
-        // (which holds patterns "include" and "exclude")
-        p1 = new PatternSet();
-        project.addReference("dummy1", p1);
-        p1.setRefid(new Reference("dummy2"));
-        p2 = new PatternSet();
-        project.addReference("dummy2", p2);
-        p2.setRefid(new Reference("dummy3"));
-        p3 = new PatternSet();
-        project.addReference("dummy3", p3);
-        p3.setIncludes("include");
-        p3.createExclude().setName("exclude");
-        String[] i = p1.getIncludePatterns(project);
-        assertEquals("One include pattern buried deep inside a nested patternset structure",
-                     1, i.length);
-        assertEquals("include", i[0]);
-        i = p3.getExcludePatterns(project);
-        assertEquals("One exclude pattern buried deep inside a nested patternset structure",
-                     1, i.length);
-        assertEquals("exclude", i[0]);
-    }
-    
-    public void testNestedPatternset() {
-        PatternSet p = new PatternSet();
-        p.setIncludes("**/*.java");
-
-        PatternSet nested = new PatternSet();
-        nested.setExcludes("**/*.class");
-
-        p.addConfiguredPatternset(nested);
-
-        String[] excludes = p.getExcludePatterns(project);
-        String[] includes = p.getIncludePatterns(project);
-
-        assertEquals("Includes","**/*.java", includes[0]);
-        assertEquals("Excludes","**/*.class", excludes[0]);
-    }
-}
diff --git a/src/testcases/org/apache/tools/ant/types/optional/depend/ClassFileSetTest.java b/src/testcases/org/apache/tools/ant/types/optional/depend/ClassFileSetTest.java
deleted file mode 100644
index eded10a..0000000
--- a/src/testcases/org/apache/tools/ant/types/optional/depend/ClassFileSetTest.java
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.types.optional.depend;
-
-import java.io.File;
-import java.io.FileReader;
-import java.io.IOException;
-import java.util.Date;
-import java.util.Vector;
-import java.util.Enumeration;
-import java.util.Hashtable;
-import org.apache.tools.ant.BuildFileTest;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.types.FileSet;
-import org.apache.tools.ant.DirectoryScanner;
-
-/**
- * Testcase for the Classfileset optional type. 
- * 
- * @author Conor MacNeill
- */
-public class ClassFileSetTest extends BuildFileTest {
-    public static final String RESULT_FILESET = "result";
-    
-    public ClassFileSetTest(String name) {
-        super(name);
-    }
-
-    public void setUp() {
-        // share the setup for testing the depend task
-        configureProject("src/etc/testcases/taskdefs/optional/depend/depend.xml");
-    }
-
-    public void tearDown() {
-        executeTarget("clean");
-    }
-
-    /**
-     * Test basic clasfileset
-     */
-    public void testBasicSet() {
-        Project project = getProject();
-        executeTarget("testbasicset");
-        FileSet resultFileSet = (FileSet)project.getReference(RESULT_FILESET);
-        DirectoryScanner scanner = resultFileSet.getDirectoryScanner(project);
-        String[] scannedFiles = scanner.getIncludedFiles();
-        Hashtable files = new Hashtable();
-        for (int i = 0; i < scannedFiles.length; ++i) {
-            files.put(scannedFiles[i], scannedFiles[i]);
-        }
-        assertEquals("Classfileset did not pick up expected number of " 
-            + "class files", 4, files.size());
-        assertTrue("Result did not contain A.class", 
-            files.containsKey("A.class"));
-        assertTrue("Result did not contain B.class", 
-            files.containsKey("B.class"));
-        assertTrue("Result did not contain C.class", 
-            files.containsKey("C.class"));
-        assertTrue("Result did not contain D.class", 
-            files.containsKey("D.class"));
-    }
-    
-    /**
-     * Test small classfileset
-     */
-    public void testSmallSet() {
-        Project project = getProject();
-        executeTarget("testsmallset");
-        FileSet resultFileSet = (FileSet)project.getReference(RESULT_FILESET);
-        DirectoryScanner scanner = resultFileSet.getDirectoryScanner(project);
-        String[] scannedFiles = scanner.getIncludedFiles();
-        Hashtable files = new Hashtable();
-        for (int i = 0; i < scannedFiles.length; ++i) {
-            files.put(scannedFiles[i], scannedFiles[i]);
-        }
-        assertEquals("Classfileset did not pick up expected number of " 
-            + "class files", 2, files.size());
-        assertTrue("Result did not contain B.class", 
-            files.containsKey("B.class"));
-        assertTrue("Result did not contain C.class", 
-            files.containsKey("C.class"));
-    }
-
-    /**
-     * Test conbo classfileset
-     */
-    public void testComboSet() {
-        Project project = getProject();
-        executeTarget("testcomboset");
-        FileSet resultFileSet = (FileSet)project.getReference(RESULT_FILESET);
-        DirectoryScanner scanner = resultFileSet.getDirectoryScanner(project);
-        String[] scannedFiles = scanner.getIncludedFiles();
-        Hashtable files = new Hashtable();
-        for (int i = 0; i < scannedFiles.length; ++i) {
-            files.put(scannedFiles[i], scannedFiles[i]);
-        }
-        assertEquals("Classfileset did not pick up expected number of " 
-            + "class files", 1, files.size());
-        assertTrue("Result did not contain C.class", 
-            files.containsKey("C.class"));
-    }
-    
-    /**
-     * Test that you can pass a classfileset by reference to a fileset.
-     */
-    public void testByReference() {
-        executeTarget("testbyreference");
-    }
-}
diff --git a/src/testcases/org/apache/tools/ant/util/DOMElementWriterTest.java b/src/testcases/org/apache/tools/ant/util/DOMElementWriterTest.java
deleted file mode 100644
index a14aef4..0000000
--- a/src/testcases/org/apache/tools/ant/util/DOMElementWriterTest.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.util;
-
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-/**
- * Tests for org.apache.tools.ant.util.DOMElementWriter.
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> 
- */
-public class DOMElementWriterTest extends TestCase {
-
-    private DOMElementWriter w = new DOMElementWriter();
-
-    public DOMElementWriterTest(String name) {
-        super(name);
-    }
-
-    public void testIsReference() {
-        assertTrue("&#20;", w.isReference("&#20;"));
-        assertTrue("&#x20;", w.isReference("&#x20;"));
-        assertTrue("&#xA0;", w.isReference("&#xA0;"));
-        assertTrue("&#A0;", !w.isReference("&#A0;"));
-        assertTrue("20;", !w.isReference("20;"));
-        assertTrue("&#20", !w.isReference("&#20"));
-        assertTrue("&quot;", w.isReference("&quot;"));
-        assertTrue("&apos;", w.isReference("&apos;"));
-        assertTrue("&gt;", w.isReference("&gt;"));
-        assertTrue("&lt;", w.isReference("&lt;"));
-        assertTrue("&amp;", w.isReference("&amp;"));
-    }
-
-    public void testEncode() {
-        assertEquals("&#20;", w.encode("&#20;"));
-        assertEquals("&#x20;", w.encode("&#x20;"));
-        assertEquals("&#xA0;", w.encode("&#xA0;"));
-        assertEquals("&amp;#A0;", w.encode("&#A0;"));
-        assertEquals("20;", w.encode("20;"));
-        assertEquals("&amp;#20", w.encode("&#20"));
-        assertEquals("&quot;", w.encode("&quot;"));
-        assertEquals("&apos;", w.encode("&apos;"));
-        assertEquals("&gt;", w.encode("&gt;"));
-        assertEquals("&lt;", w.encode("&lt;"));
-        assertEquals("&amp;", w.encode("&amp;"));
-        assertEquals("&quot;", w.encode("\""));
-        assertEquals("&lt;", w.encode("<"));
-        assertEquals("&amp;", w.encode("&"));
-        assertEquals("", w.encode("\u0017"));
-        assertEquals("&#20;\"20;&", w.encodedata("&#20;\"20;&"));
-        assertEquals("", w.encodedata("\u0017"));
-    }
-
-    public void testIsLegalCharacter() {
-        assertTrue("0x00", !w.isLegalCharacter('\u0000'));
-        assertTrue("0x09", w.isLegalCharacter('\t'));
-        assertTrue("0x0A", w.isLegalCharacter('\n'));
-        assertTrue("0x0C", w.isLegalCharacter('\r'));
-        assertTrue("0x1F", !w.isLegalCharacter('\u001F'));
-        assertTrue("0x20", w.isLegalCharacter('\u0020'));
-        assertTrue("0xD7FF", w.isLegalCharacter('\uD7FF'));
-        assertTrue("0xD800", !w.isLegalCharacter('\uD800'));
-        assertTrue("0xDFFF", !w.isLegalCharacter('\uDFFF'));
-        assertTrue("0xE000", w.isLegalCharacter('\uE000'));
-        assertTrue("0xFFFD", w.isLegalCharacter('\uFFFD'));
-        assertTrue("0xFFFE", !w.isLegalCharacter('\uFFFE'));
-    }
-}
diff --git a/src/testcases/org/apache/tools/ant/util/DateUtilsTest.java b/src/testcases/org/apache/tools/ant/util/DateUtilsTest.java
deleted file mode 100644
index da17e5d..0000000
--- a/src/testcases/org/apache/tools/ant/util/DateUtilsTest.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.util;
-
-import java.util.Date;
-import java.util.Calendar;
-import java.util.TimeZone;
-
-import junit.framework.TestCase;
-
-/**
- * TestCase for DateUtils.
- *
- * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- */
-public class DateUtilsTest extends TestCase {
-    public DateUtilsTest(String s) {
-        super(s);
-    }
-
-    public void testElapsedTime(){
-        String text = DateUtils.formatElapsedTime(50*1000);
-        assertEquals("50 seconds", text);
-        text = DateUtils.formatElapsedTime(65*1000);
-        assertEquals("1 minute 5 seconds", text);
-        text = DateUtils.formatElapsedTime(120*1000);
-        assertEquals("2 minutes 0 seconds", text);
-        text = DateUtils.formatElapsedTime(121*1000);
-        assertEquals("2 minutes 1 second", text);
-    }
-
-    public void testDateTimeISO(){
-        TimeZone timeZone = TimeZone.getTimeZone("GMT+1");
-        Calendar cal = Calendar.getInstance(timeZone);
-        cal.set(2002,1,23,10,11,12);
-        String text = DateUtils.format(cal.getTime(),
-                DateUtils.ISO8601_DATETIME_PATTERN);
-        assertEquals("2002-02-23T09:11:12", text);
-    }
-
-    public void testDateISO(){
-        TimeZone timeZone = TimeZone.getTimeZone("GMT");
-        Calendar cal = Calendar.getInstance(timeZone);
-        cal.set(2002,1,23);
-        String text = DateUtils.format(cal.getTime(),
-                DateUtils.ISO8601_DATE_PATTERN);
-        assertEquals("2002-02-23", text);
-    }
-
-    public void testTimeISODate(){
-        // make sure that elapsed time in set via date works
-        TimeZone timeZone = TimeZone.getTimeZone("GMT+1");
-        Calendar cal = Calendar.getInstance(timeZone);
-        cal.set(2002,1,23, 21, 11, 12);
-        String text = DateUtils.format(cal.getTime(),
-                DateUtils.ISO8601_TIME_PATTERN);
-        assertEquals("20:11:12", text);
-    }
-
-    public void testTimeISO(){
-        // make sure that elapsed time in ms works
-        long ms = (20*3600 + 11*60 + 12)*1000;
-        String text = DateUtils.format(ms,
-                DateUtils.ISO8601_TIME_PATTERN);
-        assertEquals("20:11:12", text);
-    }
-
-    public void testPhaseOfMoon() {
-        TimeZone timeZone = TimeZone.getTimeZone("GMT");
-        Calendar cal = Calendar.getInstance(timeZone);
-        // should be full moon
-        cal.set(2002, 2, 27);
-        assertEquals(4, DateUtils.getPhaseOfMoon(cal));
-        // should be new moon
-        cal.set(2002, 2, 12);
-        assertEquals(0, DateUtils.getPhaseOfMoon(cal));
-    }
-}
diff --git a/src/testcases/org/apache/tools/ant/util/FileUtilsTest.java b/src/testcases/org/apache/tools/ant/util/FileUtilsTest.java
deleted file mode 100644
index 66dbaf5..0000000
--- a/src/testcases/org/apache/tools/ant/util/FileUtilsTest.java
+++ /dev/null
@@ -1,392 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.util;
-
-import java.io.*;
-
-import junit.framework.TestCase;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.taskdefs.condition.Os;
-
-/**
- * Tests for org.apache.tools.ant.util.FileUtils.
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> 
- * @author <a href="mailto:jtulley@novell.com">Jeff Tulley</a> 
- */
-public class FileUtilsTest extends TestCase {
-
-    private FileUtils fu;
-    private File removeThis;
-    private String root;
-
-    public FileUtilsTest(String name) {
-        super(name);
-    }
-
-    public void setUp() {
-        fu = FileUtils.newFileUtils();
-        // Windows adds the drive letter in uppercase, unless you run Cygnus
-        root = new File(File.separator).getAbsolutePath().toUpperCase();
-    }
-
-    public void tearDown() {
-        if (removeThis != null && removeThis.exists()) {
-            removeThis.delete();
-        }
-    }
-
-    public void testSetLastModified() throws IOException {
-        removeThis = new File("dummy");
-        FileOutputStream fos = new FileOutputStream(removeThis);
-        fos.write(new byte[0]);
-        fos.close();
-        long modTime = removeThis.lastModified();
-        assertTrue(modTime != 0);
-
-        /*
-         * Sleep for some time to make sure a touched file would get a
-         * more recent timestamp according to the file system's
-         * granularity (should be > 2s to account for Windows FAT).
-         */
-        try {
-            Thread.currentThread().sleep(5000);
-        } catch (InterruptedException ie) {
-            fail(ie.getMessage());
-        }
-
-        fu.setFileLastModified(removeThis, -1);
-        long secondModTime = removeThis.lastModified();
-        try {
-            Class.forName("java.lang.ThreadLocal");
-            assertTrue(secondModTime > modTime);
-        } catch (ClassNotFoundException e) {
-            // JDK 1.1
-            assertEquals(modTime, secondModTime);
-        }
-        
-
-        fu.setFileLastModified(removeThis, 123456);
-        long thirdModTime = removeThis.lastModified();
-        try {
-            Class.forName("java.lang.ThreadLocal");
-            /*
-             * I would love to compare this with 123456, but depending on
-             * the filesystems granularity it can take an arbitrary value.
-             *
-             * Just assert the time has changed.
-             */
-            assertTrue(thirdModTime != secondModTime);
-        } catch (ClassNotFoundException e) {
-            // JDK 1.1
-            assertEquals(modTime, thirdModTime);
-        }
-    }
-
-    public void testResolveFile() {
-        /*
-         * Start with simple absolute file names.
-         */
-        assertEquals(File.separator, 
-                     fu.resolveFile(null, "/").getPath());
-        assertEquals(File.separator, 
-                     fu.resolveFile(null, "\\").getPath());
-
-        /*
-         * throw in drive letters
-         */
-        String driveSpec = "C:";
-        assertEquals(driveSpec + "\\", 
-                     fu.resolveFile(null, driveSpec + "/").getPath());
-        assertEquals(driveSpec + "\\", 
-                     fu.resolveFile(null, driveSpec + "\\").getPath());
-        String driveSpecLower = "c:";
-        assertEquals(driveSpec + "\\", 
-                     fu.resolveFile(null, driveSpecLower + "/").getPath());
-        assertEquals(driveSpec + "\\", 
-                     fu.resolveFile(null, driveSpecLower + "\\").getPath());
-        /*
-         * promised to eliminate consecutive slashes after drive letter.
-         */
-        assertEquals(driveSpec + "\\", 
-                     fu.resolveFile(null, driveSpec + "/////").getPath());
-        assertEquals(driveSpec + "\\", 
-                     fu.resolveFile(null, driveSpec + "\\\\\\\\\\\\").getPath());
-
-        if (Os.isFamily("netware")) {
-            /*
-             * throw in NetWare volume names
-             */
-            driveSpec = "SYS:";
-            assertEquals(driveSpec, 
-                         fu.resolveFile(null, driveSpec + "/").getPath());
-            assertEquals(driveSpec, 
-                         fu.resolveFile(null, driveSpec + "\\").getPath());
-            driveSpecLower = "sys:";
-            assertEquals(driveSpec, 
-                         fu.resolveFile(null, driveSpecLower + "/").getPath());
-            assertEquals(driveSpec, 
-                         fu.resolveFile(null, driveSpecLower + "\\").getPath());
-            /*
-             * promised to eliminate consecutive slashes after drive letter.
-             */
-            assertEquals(driveSpec, 
-                         fu.resolveFile(null, driveSpec + "/////").getPath());
-            assertEquals(driveSpec, 
-                         fu.resolveFile(null, driveSpec + "\\\\\\\\\\\\").getPath());
-        }
-
-        /*
-         * Now test some relative file name magic.
-         */
-        assertEquals(localize("/1/2/3/4"),
-                     fu.resolveFile(new File(localize("/1/2/3")), "4").getPath());
-        assertEquals(localize("/1/2/3/4"),
-                     fu.resolveFile(new File(localize("/1/2/3")), "./4").getPath());
-        assertEquals(localize("/1/2/3/4"),
-                     fu.resolveFile(new File(localize("/1/2/3")), ".\\4").getPath());
-        assertEquals(localize("/1/2/3/4"),
-                     fu.resolveFile(new File(localize("/1/2/3")), "./.\\4").getPath());
-        assertEquals(localize("/1/2/3/4"),
-                     fu.resolveFile(new File(localize("/1/2/3")), "../3/4").getPath());
-        assertEquals(localize("/1/2/3/4"),
-                     fu.resolveFile(new File(localize("/1/2/3")), "..\\3\\4").getPath());
-        assertEquals(localize("/1/2/3/4"),
-                     fu.resolveFile(new File(localize("/1/2/3")), "../../5/.././2/./3/6/../4").getPath());
-        assertEquals(localize("/1/2/3/4"),
-                     fu.resolveFile(new File(localize("/1/2/3")), "..\\../5/..\\./2/./3/6\\../4").getPath());
-
-        try {
-            fu.resolveFile(new File(localize("/1")), "../../b");
-            fail("successfully crawled beyond the filesystem root");
-        } catch (BuildException e) {
-            // Expected Exception caught
-        }
-
-    }
-
-    public void testNormalize() {
-        /*
-         * Start with simple absolute file names.
-         */
-        assertEquals(File.separator, 
-                     fu.normalize("/").getPath());
-        assertEquals(File.separator, 
-                     fu.normalize("\\").getPath());
-
-        /*
-         * throw in drive letters
-         */
-        String driveSpec = "C:";
-        assertEquals(driveSpec, 
-                     fu.normalize(driveSpec).getPath());
-        assertEquals(driveSpec + "\\", 
-                     fu.normalize(driveSpec + "/").getPath());
-        assertEquals(driveSpec + "\\", 
-                     fu.normalize(driveSpec + "\\").getPath());
-        String driveSpecLower = "c:";
-        assertEquals(driveSpec + "\\", 
-                     fu.normalize(driveSpecLower + "/").getPath());
-        assertEquals(driveSpec + "\\", 
-                     fu.normalize(driveSpecLower + "\\").getPath());
-        /*
-         * promised to eliminate consecutive slashes after drive letter.
-         */
-        assertEquals(driveSpec + "\\", 
-                     fu.normalize(driveSpec + "/////").getPath());
-        assertEquals(driveSpec + "\\", 
-                     fu.normalize(driveSpec + "\\\\\\\\\\\\").getPath());
-
-        if (Os.isFamily("netware")) {
-            /*
-             * throw in NetWare volume names 
-             */
-            driveSpec = "SYS:";
-            assertEquals(driveSpec, 
-                         fu.normalize(driveSpec).getPath());
-            assertEquals(driveSpec, 
-                         fu.normalize(driveSpec + "/").getPath());
-            assertEquals(driveSpec, 
-                         fu.normalize(driveSpec + "\\").getPath());
-            driveSpecLower = "sys:";
-            assertEquals(driveSpec, 
-                         fu.normalize(driveSpecLower).getPath());
-            assertEquals(driveSpec, 
-                         fu.normalize(driveSpecLower + "/").getPath());
-            assertEquals(driveSpec, 
-                         fu.normalize(driveSpecLower + "\\").getPath());
-            assertEquals(driveSpec + "\\junk", 
-                         fu.normalize(driveSpecLower + "\\junk").getPath());
-            /*
-             * promised to eliminate consecutive slashes after drive letter.
-             */
-            assertEquals(driveSpec, 
-                         fu.normalize(driveSpec + "/////").getPath());
-            assertEquals(driveSpec, 
-                         fu.normalize(driveSpec + "\\\\\\\\\\\\").getPath());
-        }
-
-        /*
-         * Now test some relative file name magic.
-         */
-        assertEquals(localize("/1/2/3/4"),
-                     fu.normalize(localize("/1/2/3/4")).getPath());
-        assertEquals(localize("/1/2/3/4"),
-                     fu.normalize(localize("/1/2/3/./4")).getPath());
-        assertEquals(localize("/1/2/3/4"),
-                     fu.normalize(localize("/1/2/3/.\\4")).getPath());
-        assertEquals(localize("/1/2/3/4"),
-                     fu.normalize(localize("/1/2/3/./.\\4")).getPath());
-        assertEquals(localize("/1/2/3/4"),
-                     fu.normalize(localize("/1/2/3/../3/4")).getPath());
-        assertEquals(localize("/1/2/3/4"),
-                     fu.normalize(localize("/1/2/3/..\\3\\4")).getPath());
-        assertEquals(localize("/1/2/3/4"),
-                     fu.normalize(localize("/1/2/3/../../5/.././2/./3/6/../4")).getPath());
-        assertEquals(localize("/1/2/3/4"),
-                     fu.normalize(localize("/1/2/3/..\\../5/..\\./2/./3/6\\../4")).getPath());
-
-        try {
-            fu.normalize("foo");
-            fail("foo is not an absolute path");
-        } catch (BuildException e) {
-            // Expected exception caught
-        }
-        
-        try {
-            fu.normalize(localize("/1/../../b"));
-            fail("successfully crawled beyond the filesystem root");
-        } catch (BuildException e) {
-            // Expected exception caught
-        }
-    }
-
-    /**
-     * Test handling of null arguments.
-     */
-    public void testNullArgs() {
-        try {
-            fu.normalize(null);
-            fail("successfully normalized a null-file");
-        } catch (NullPointerException npe) {
-            // Expected exception caught
-        }
-        
-        File f = fu.resolveFile(null, "a");
-        assertEquals(f, new File("a"));
-    }
-
-    /**
-     * Test createTempFile
-     */
-    public void testCreateTempFile() {
-        File parent = new File((new File("/tmp")).getAbsolutePath());
-        File tmp1 = fu.createTempFile("pre", ".suf", parent);
-        assertTrue("new file", !tmp1.exists());
-
-        String name = tmp1.getName();
-        assertTrue("starts with pre", name.startsWith("pre"));
-        assertTrue("ends with .suf", name.endsWith(".suf"));
-        assertEquals("is inside parent dir", 
-                     parent.getAbsolutePath(),
-                     tmp1.getParent());
-
-        File tmp2 = fu.createTempFile("pre", ".suf", parent);
-        assertTrue("files are different", 
-                   !tmp1.getAbsolutePath().equals(tmp2.getAbsolutePath()));
-
-        // null parent dir
-        File tmp3 = fu.createTempFile("pre", ".suf", null);
-        assertEquals((new File(tmp3.getName())).getAbsolutePath(),
-                     tmp3.getAbsolutePath());
-    }
-
-    /**
-     * Test contentEquals
-     */
-    public void testContentEquals() throws IOException {
-        assertTrue("Non existing files", fu.contentEquals(new File("foo"), 
-                                                          new File("bar")));
-        assertTrue("One exists, the other one doesn\'t", 
-                   !fu.contentEquals(new File("foo"), new File("build.xml")));
-        assertTrue("Don\'t compare directories",
-                   !fu.contentEquals(new File("src"), new File("src")));
-        assertTrue("File equals itself",
-                   fu.contentEquals(new File("build.xml"), 
-                                    new File("build.xml")));
-        assertTrue("Files are different",
-                   !fu.contentEquals(new File("build.xml"), 
-                                     new File("docs.xml")));
-    }
-
-    /**
-     * Test createNewFile
-     */
-    public void testCreateNewFile() throws IOException {
-        removeThis = new File("dummy");
-        assertTrue(!removeThis.exists());
-        fu.createNewFile(removeThis);
-        assertTrue(removeThis.exists());
-    }
-
-    /**
-     * adapt file separators to local conventions
-     */
-    private String localize(String path) {
-        path = root + path.substring(1);
-        return path.replace('\\', File.separatorChar).replace('/', File.separatorChar);
-    }
-}
diff --git a/src/testcases/org/apache/tools/ant/util/GlobPatternMapperTest.java b/src/testcases/org/apache/tools/ant/util/GlobPatternMapperTest.java
deleted file mode 100644
index 1b293d6..0000000
--- a/src/testcases/org/apache/tools/ant/util/GlobPatternMapperTest.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.util;
-
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-/**
- * Tests for org.apache.tools.ant.util;GlobPatternMapper.
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> 
- */
-public class GlobPatternMapperTest extends TestCase {
-
-    public GlobPatternMapperTest(String name) {
-        super(name);
-    }
-
-    public void testNoPatternAtAll() {
-        GlobPatternMapper m = new GlobPatternMapper();
-        m.setFrom("foobar");
-        m.setTo("baz");
-        assertNull("Shouldn\'t match foobar", m.mapFileName("plonk"));
-        String[] result = m.mapFileName("foobar");
-        assertNotNull("Should match foobar", result);
-        assertEquals("only one result for foobar", 1, result.length);
-        assertEquals("baz", result[0]);
-    }
-
-    public void testPostfixOnly() {
-        GlobPatternMapper m = new GlobPatternMapper();
-        m.setFrom("*foo");
-        m.setTo("*plonk");
-        assertNull("Shouldn\'t match *foo", m.mapFileName("bar.baz"));
-        String[] result = m.mapFileName("bar.foo");
-        assertNotNull("Should match *.foo", result);
-        assertEquals("only one result for bar.foo", 1, result.length);
-        assertEquals("bar.plonk", result[0]);
-
-        // Try a silly case
-        m.setTo("foo*");
-        result = m.mapFileName("bar.foo");
-        assertEquals("foobar.", result[0]);
-    }
-
-    public void testPrefixOnly() {
-        GlobPatternMapper m = new GlobPatternMapper();
-        m.setFrom("foo*");
-        m.setTo("plonk*");
-        assertNull("Shouldn\'t match foo*", m.mapFileName("bar.baz"));
-        String[] result = m.mapFileName("foo.bar");
-        assertNotNull("Should match foo*", result);
-        assertEquals("only one result for foo.bar", 1, result.length);
-        assertEquals("plonk.bar", result[0]);
-
-        // Try a silly case
-        m.setTo("*foo");
-        result = m.mapFileName("foo.bar");
-        assertEquals(".barfoo", result[0]);
-    }
-
-    public void testPreAndPostfix() {
-        GlobPatternMapper m = new GlobPatternMapper();
-        m.setFrom("foo*bar");
-        m.setTo("plonk*pling");
-        assertNull("Shouldn\'t match foo*bar", m.mapFileName("bar.baz"));
-        String[] result = m.mapFileName("foo.bar");
-        assertNotNull("Should match foo*bar", result);
-        assertEquals("only one result for foo.bar", 1, result.length);
-        assertEquals("plonk.pling", result[0]);
-
-        // and a little longer
-        result = m.mapFileName("foo.baz.bar");
-        assertNotNull("Should match foo*bar", result);
-        assertEquals("only one result for foo.baz.bar", 1, result.length);
-        assertEquals("plonk.baz.pling", result[0]);
-
-        // and a little shorter
-        result = m.mapFileName("foobar");
-        assertNotNull("Should match foo*bar", result);
-        assertEquals("only one result for foobar", 1, result.length);
-        assertEquals("plonkpling", result[0]);
-    }
-}
diff --git a/src/testcases/org/apache/tools/ant/util/JavaEnvUtilsTest.java b/src/testcases/org/apache/tools/ant/util/JavaEnvUtilsTest.java
deleted file mode 100644
index b649809..0000000
--- a/src/testcases/org/apache/tools/ant/util/JavaEnvUtilsTest.java
+++ /dev/null
@@ -1,174 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.util;
-
-import java.io.File;
-
-import junit.framework.AssertionFailedError;
-import junit.framework.TestCase;
-
-import org.apache.tools.ant.taskdefs.condition.Os;
-
-/**
- * TestCase for JavaEnvUtils.
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- */
-public class JavaEnvUtilsTest extends TestCase {
-    public JavaEnvUtilsTest(String s) {
-        super(s);
-    }
-
-    public void testGetExecutableNetware() {
-        if (Os.isName("netware")) {
-            assertEquals("java", JavaEnvUtils.getJreExecutable("java"));
-            assertEquals("javac", JavaEnvUtils.getJdkExecutable("javac"));
-            assertEquals("foo", JavaEnvUtils.getJreExecutable("foo"));
-            assertEquals("foo", JavaEnvUtils.getJdkExecutable("foo"));
-        }
-    }
-
-    public void testGetExecutableWindows() {
-        if (Os.isFamily("windows")) {
-            FileUtils fileUtils = FileUtils.newFileUtils();
-            String javaHome =
-                fileUtils.normalize(System.getProperty("java.home"))
-                .getAbsolutePath();
-
-            String j = JavaEnvUtils.getJreExecutable("java");
-            assertTrue(j.endsWith(".exe"));
-            assertTrue(j+" is absolute", (new File(j)).isAbsolute());
-            try {
-                assertTrue(j+" is normalized and in the JRE dir",
-                           j.startsWith(javaHome));
-            } catch (AssertionFailedError e) {
-                // java.home is bogus
-                assertEquals("java.exe", j);
-            }
-
-            j = JavaEnvUtils.getJdkExecutable("javac");
-            assertTrue(j.endsWith(".exe"));
-            try {
-                assertTrue(j+" is absolute", (new File(j)).isAbsolute());
-                String javaHomeParent =
-                    fileUtils.normalize(javaHome+"/..").getAbsolutePath();
-                assertTrue(j+" is normalized and in the JDK dir",
-                           j.startsWith(javaHomeParent));
-
-                if (JavaEnvUtils.getJavaVersion() == JavaEnvUtils.JAVA_1_0 ||
-                    JavaEnvUtils.getJavaVersion() == JavaEnvUtils.JAVA_1_1) {
-                    assertTrue(j+" is normalized and in the JRE dir",
-                               j.startsWith(javaHome));
-                } else {
-                    assertTrue(j+" is normalized and not in the JRE dir",
-                               !j.startsWith(javaHome));
-                }
-
-            } catch (AssertionFailedError e) {
-                // java.home is bogus
-                assertEquals("javac.exe", j);
-            }
-
-            assertEquals("foo.exe", JavaEnvUtils.getJreExecutable("foo"));
-            assertEquals("foo.exe", JavaEnvUtils.getJdkExecutable("foo"));
-        }
-    }
-
-    public void testGetExecutableMostPlatforms() {
-        if (!Os.isName("netware") && !Os.isFamily("windows")) {
-            FileUtils fileUtils = FileUtils.newFileUtils();
-            String javaHome =
-                fileUtils.normalize(System.getProperty("java.home"))
-                .getAbsolutePath();
-
-            // could still be OS/2
-            String extension = Os.isFamily("dos") ? ".exe" : "";
-
-            String j = JavaEnvUtils.getJreExecutable("java");
-            if (!extension.equals("")) {
-                assertTrue(j.endsWith(extension));
-            }
-            assertTrue(j+" is absolute", (new File(j)).isAbsolute());
-            assertTrue(j+" is normalized and in the JRE dir",
-                       j.startsWith(javaHome));
-
-            j = JavaEnvUtils.getJdkExecutable("javac");
-            if (!extension.equals("")) {
-                assertTrue(j.endsWith(extension));
-            }
-            assertTrue(j+" is absolute", (new File(j)).isAbsolute());
-
-            String javaHomeParent =
-                fileUtils.normalize(javaHome+"/..").getAbsolutePath();
-            assertTrue(j+" is normalized and in the JDK dir",
-                       j.startsWith(javaHomeParent));
-
-            if (JavaEnvUtils.getJavaVersion() == JavaEnvUtils.JAVA_1_0 ||
-                JavaEnvUtils.getJavaVersion() == JavaEnvUtils.JAVA_1_1) {
-                assertTrue(j+" is normalized and in the JRE dir",
-                           j.startsWith(javaHome));
-            } else {
-                assertTrue(j+" is normalized and not in the JRE dir",
-                           !j.startsWith(javaHome));
-            }
-
-            assertEquals("foo"+extension,
-                         JavaEnvUtils.getJreExecutable("foo"));
-            assertEquals("foo"+extension,
-                         JavaEnvUtils.getJdkExecutable("foo"));
-        }
-
-    }
-
-}
diff --git a/src/testcases/org/apache/tools/ant/util/PackageNameMapperTest.java b/src/testcases/org/apache/tools/ant/util/PackageNameMapperTest.java
deleted file mode 100644
index a5739f8..0000000
--- a/src/testcases/org/apache/tools/ant/util/PackageNameMapperTest.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- *  The Apache Software License, Version 1.1
- *
- *  Copyright (c) 2001 The Apache Software Foundation.  All rights
- *  reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions
- *  are met:
- *
- *  1. Redistributions of source code must retain the above copyright
- *  notice, this list of conditions and the following disclaimer.
- *
- *  2. Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in
- *  the documentation and/or other materials provided with the
- *  distribution.
- *
- *  3. The end-user documentation included with the redistribution, if
- *  any, must include the following acknowlegement:
- *  "This product includes software developed by the
- *  Apache Software Foundation (http://www.apache.org/)."
- *  Alternately, this acknowlegement may appear in the software itself,
- *  if and wherever such third-party acknowlegements normally appear.
- *
- *  4. The names "The Jakarta Project", "Ant", and "Apache Software
- *  Foundation" must not be used to endorse or promote products derived
- *  from this software without prior written permission. For written
- *  permission, please contact apache@apache.org.
- *
- *  5. Products derived from this software may not be called "Apache"
- *  nor may "Apache" appear in their names without prior written
- *  permission of the Apache Group.
- *
- *  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- *  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- *  OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- *  DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- *  ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- *  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- *  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- *  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- *  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- *  SUCH DAMAGE.
- *  ====================================================================
- *
- *  This software consists of voluntary contributions made by many
- *  individuals on behalf of the Apache Software Foundation.  For more
- *  information on the Apache Software Foundation, please see
- *  <http://www.apache.org/>.
- */
- package org.apache.tools.ant.util;
-
-import java.io.File;
-import junit.framework.TestCase;
-
-public class PackageNameMapperTest extends TestCase {
-    public PackageNameMapperTest(String name) { super(name); }
-    
-    public void testMapping() {
-        PackageNameMapper mapper = new PackageNameMapper();
-        mapper.setFrom("*.java");
-        mapper.setTo("TEST-*.xml");
-        String file = fixupPath("org/apache/tools/ant/util/PackageNameMapperTest.java");
-        String result = mapper.mapFileName(file)[0];
-        
-        assertEquals("TEST-org.apache.tools.ant.util.PackageNameMapperTest.xml",
-          result);
-    }
-    
-    private String fixupPath(String file) {
-        return file.replace('/', File.separatorChar);
-    }
-}
diff --git a/src/testcases/org/apache/tools/ant/util/StringUtilsTest.java b/src/testcases/org/apache/tools/ant/util/StringUtilsTest.java
deleted file mode 100644
index 65581e0..0000000
--- a/src/testcases/org/apache/tools/ant/util/StringUtilsTest.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.tools.ant.util;
-
-import java.util.Vector;
-
-import junit.framework.TestCase;
-
-/**
- * Test for StringUtils
- * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
- */
-public class StringUtilsTest extends TestCase {
-    public StringUtilsTest(String s) {
-        super(s);
-    }
-
-    public void testSplit(){
-        final String data = "a,b,,";
-        Vector res = StringUtils.split(data, ',');
-        assertEquals(4, res.size());
-        assertEquals("a", res.elementAt(0));
-        assertEquals("b", res.elementAt(1));
-        assertEquals("", res.elementAt(2));
-        assertEquals("", res.elementAt(3));
-    }
-
-    public void testSplitLines(){
-        final String data = "a\r\nb\nc\nd\ne";
-        Vector res = StringUtils.lineSplit(data);
-        assertEquals(5, res.size());
-        assertEquals("a\r", res.elementAt(0));
-        assertEquals("b", res.elementAt(1));
-        assertEquals("c", res.elementAt(2));
-        assertEquals("d", res.elementAt(3));
-        assertEquals("e", res.elementAt(4));
-    }
-
-    public void testReplace() {
-        final String data = "abcabcabca";
-        String res = StringUtils.replace(data, "a", "");
-        assertEquals("bcbcbc", res);
-    }
-
-}
diff --git a/src/testcases/org/apache/tools/ant/util/facade/FacadeTaskHelperTest.java b/src/testcases/org/apache/tools/ant/util/facade/FacadeTaskHelperTest.java
deleted file mode 100644
index 68f4310..0000000
--- a/src/testcases/org/apache/tools/ant/util/facade/FacadeTaskHelperTest.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.util.facade;
-
-import junit.framework.TestCase;
-
-/**
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- * @since Ant 1.5
- */
-public class FacadeTaskHelperTest extends TestCase {
-
-    public FacadeTaskHelperTest(String name) {
-        super(name);
-    }
-
-    public void testPrecedenceRules() {
-        FacadeTaskHelper fth = new FacadeTaskHelper("foo");
-        assertEquals("foo", fth.getImplementation());
-
-        fth.setMagicValue("bar");
-        assertEquals("bar", fth.getImplementation());
-
-        fth = new FacadeTaskHelper("foo", "bar");
-        assertEquals("bar", fth.getImplementation());
-
-        fth = new FacadeTaskHelper("foo", null);
-        assertEquals("foo", fth.getImplementation());
-
-        fth = new FacadeTaskHelper("foo");
-        fth.setMagicValue("bar");
-        fth.setImplementation("baz");
-        assertEquals("baz", fth.getImplementation());
-    }
-}
diff --git a/src/testcases/org/apache/tools/ant/util/facade/ImplementationSpecificArgumentTest.java b/src/testcases/org/apache/tools/ant/util/facade/ImplementationSpecificArgumentTest.java
deleted file mode 100644
index 576789c..0000000
--- a/src/testcases/org/apache/tools/ant/util/facade/ImplementationSpecificArgumentTest.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.util.facade;
-
-import junit.framework.TestCase;
-
-/**
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- * @since Ant 1.5
- */
-public class ImplementationSpecificArgumentTest extends TestCase {
-
-    public ImplementationSpecificArgumentTest(String name) {
-        super(name);
-    }
-
-    public void testDependsOnImplementation() {
-        ImplementationSpecificArgument ia = 
-            new ImplementationSpecificArgument();
-        ia.setLine("A B");
-        String[] parts = ia.getParts();
-        assertNotNull(parts);
-        assertEquals(2, parts.length);
-        assertEquals("A", parts[0]);
-        assertEquals("B", parts[1]);
-
-        parts = ia.getParts(null);
-        assertNotNull(parts);
-        assertEquals(2, parts.length);
-        assertEquals("A", parts[0]);
-        assertEquals("B", parts[1]);
-
-        ia.setImplementation("foo");
-        parts = ia.getParts(null);
-        assertNotNull(parts);
-        assertEquals(0, parts.length);
-
-        parts = ia.getParts("foo");
-        assertNotNull(parts);
-        assertEquals(2, parts.length);
-        assertEquals("A", parts[0]);
-        assertEquals("B", parts[1]);
-    }
-}
diff --git a/src/testcases/org/apache/tools/ant/util/regexp/JakartaOroMatcherTest.java b/src/testcases/org/apache/tools/ant/util/regexp/JakartaOroMatcherTest.java
deleted file mode 100644
index 1423539..0000000
--- a/src/testcases/org/apache/tools/ant/util/regexp/JakartaOroMatcherTest.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.util.regexp;
-
-/**
- * Tests for the jakarta-oro implementation of the RegexpMatcher interface.
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> 
- */
-public class JakartaOroMatcherTest extends RegexpMatcherTest {
-
-    public RegexpMatcher getImplementation() {
-        return new JakartaOroMatcher();
-    }
-
-    public JakartaOroMatcherTest(String name) {
-        super(name);
-    }
-
-}
diff --git a/src/testcases/org/apache/tools/ant/util/regexp/JakartaOroRegexpTest.java b/src/testcases/org/apache/tools/ant/util/regexp/JakartaOroRegexpTest.java
deleted file mode 100644
index 611ac54..0000000
--- a/src/testcases/org/apache/tools/ant/util/regexp/JakartaOroRegexpTest.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.util.regexp;
-
-/**
- * Tests for the jakarta-oro implementation of the Regexp interface.
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> 
- */
-public class JakartaOroRegexpTest extends RegexpTest {
-
-    public Regexp getRegexpImplementation() {
-        return new JakartaOroRegexp();
-    }
-
-    public JakartaOroRegexpTest(String name) {
-        super(name);
-    }
-
-}
diff --git a/src/testcases/org/apache/tools/ant/util/regexp/JakartaRegexpMatcherTest.java b/src/testcases/org/apache/tools/ant/util/regexp/JakartaRegexpMatcherTest.java
deleted file mode 100644
index 5137f8e..0000000
--- a/src/testcases/org/apache/tools/ant/util/regexp/JakartaRegexpMatcherTest.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.util.regexp;
-
-import java.io.IOException;
-
-import junit.framework.AssertionFailedError;
-
-import org.apache.tools.ant.taskdefs.condition.Os;
-
-/**
- * Tests for the jakarta-regexp implementation of the RegexpMatcher interface.
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> 
- */
-public class JakartaRegexpMatcherTest extends RegexpMatcherTest {
-
-    public RegexpMatcher getImplementation() {
-        return new JakartaRegexpMatcher();
-    }
-
-    public JakartaRegexpMatcherTest(String name) {
-        super(name);
-    }
-
-    public void testWindowsLineSeparator2() throws IOException {
-        try {
-            super.testWindowsLineSeparator2();
-            fail("Should trigger when this bug is fixed. {@since 1.2}");
-        } catch (AssertionFailedError e) {
-        }
-    }
-
-    /**
-     * Fails for the same reason as "default" mode in doEndTest2.
-     */
-    public void testUnixLineSeparator() throws IOException {
-        try {
-            super.testUnixLineSeparator();
-            fail("Should trigger once this bug is fixed. {@since 1.2}");
-        } catch (AssertionFailedError e) {
-        }
-    }
-
-
-    /**
-     * Fails for "default" mode.
-     */
-    protected void doEndTest2(String text) {}
-}
diff --git a/src/testcases/org/apache/tools/ant/util/regexp/JakartaRegexpRegexpTest.java b/src/testcases/org/apache/tools/ant/util/regexp/JakartaRegexpRegexpTest.java
deleted file mode 100644
index c781883..0000000
--- a/src/testcases/org/apache/tools/ant/util/regexp/JakartaRegexpRegexpTest.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.util.regexp;
-
-import java.io.IOException;
-
-import junit.framework.AssertionFailedError;
-
-import org.apache.tools.ant.taskdefs.condition.Os;
-
-/**
- * Tests for the jakarta-regexp implementation of the Regexp interface.
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> 
- */
-public class JakartaRegexpRegexpTest extends RegexpTest {
-
-    public Regexp getRegexpImplementation() {
-        return new JakartaRegexpRegexp();
-    }
-
-    public JakartaRegexpRegexpTest(String name) {
-        super(name);
-    }
-
-    public void testWindowsLineSeparator2() throws IOException {
-        try {
-            super.testWindowsLineSeparator2();
-            fail("Should trigger when this bug is fixed. {@since 1.2}");
-        } catch (AssertionFailedError e){
-        }
-    }
-
-    /**
-     * Fails for the same reason as "default" mode in doEndTest2.
-     */
-    public void testUnixLineSeparator() throws IOException {
-        try {
-            super.testUnixLineSeparator();
-            fail("Should trigger once this bug is fixed. {@since 1.2}");
-        } catch (AssertionFailedError e){
-        }
-    }
-
-    /**
-     * Fails for "default" mode.
-     */
-    protected void doEndTest2(String text) {}
-}
diff --git a/src/testcases/org/apache/tools/ant/util/regexp/Jdk14RegexpMatcherTest.java b/src/testcases/org/apache/tools/ant/util/regexp/Jdk14RegexpMatcherTest.java
deleted file mode 100644
index d5353c9..0000000
--- a/src/testcases/org/apache/tools/ant/util/regexp/Jdk14RegexpMatcherTest.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.util.regexp;
-
-import java.io.IOException;
-
-import junit.framework.AssertionFailedError;
-
-/**
- * Tests for the JDK 1.4 implementation of the RegexpMatcher interface.
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> 
- */
-public class Jdk14RegexpMatcherTest extends RegexpMatcherTest {
-
-    public RegexpMatcher getImplementation() {
-        return new Jdk14RegexpMatcher();
-    }
-
-    public Jdk14RegexpMatcherTest(String name) {
-        super(name);
-    }
-
-    public void testParagraphCharacter() throws IOException {
-        try {
-            super.testParagraphCharacter();
-            fail("Should trigger once fixed. {@since JDK 1.4RC1}");
-        } catch (AssertionFailedError e){
-        }
-    }
-
-    public void testLineSeparatorCharacter() throws IOException {
-        try {
-            super.testLineSeparatorCharacter();
-            fail("Should trigger once fixed. {@since JDK 1.4RC1}");
-        } catch (AssertionFailedError e){
-        }
-    }
-
-    public void testStandaloneCR() throws IOException {
-        try {
-            super.testStandaloneCR();
-            fail("Should trigger once fixed. {@since JDK 1.4RC1}");
-        } catch (AssertionFailedError e){
-        }
-    }
-
-    public void testWindowsLineSeparator() throws IOException {
-        try {
-            super.testWindowsLineSeparator();
-            fail("Should trigger once fixed. {@since JDK 1.4RC1}");
-        } catch (AssertionFailedError e){
-        }
-    }
-}
diff --git a/src/testcases/org/apache/tools/ant/util/regexp/Jdk14RegexpRegexpTest.java b/src/testcases/org/apache/tools/ant/util/regexp/Jdk14RegexpRegexpTest.java
deleted file mode 100644
index 61d23ab5..0000000
--- a/src/testcases/org/apache/tools/ant/util/regexp/Jdk14RegexpRegexpTest.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.util.regexp;
-
-import java.io.IOException;
-
-import junit.framework.AssertionFailedError;
-
-/**
- * Tests for the JDK 1.4 implementation of the Regexp interface.
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> 
- */
-public class Jdk14RegexpRegexpTest extends RegexpTest {
-
-    public Regexp getRegexpImplementation() {
-        return new Jdk14RegexpRegexp();
-    }
-
-    public Jdk14RegexpRegexpTest(String name) {
-        super(name);
-    }
-
-    public void testParagraphCharacter() throws IOException {
-        try {
-            super.testParagraphCharacter();
-            fail("Should trigger once fixed. {@since JDK 1.4RC1}");
-        } catch (AssertionFailedError e){
-        }
-    }
-
-    public void testLineSeparatorCharacter() throws IOException {
-        try {
-            super.testLineSeparatorCharacter();
-            fail("Should trigger once fixed. {@since JDK 1.4RC1}");
-        } catch (AssertionFailedError e){
-        }
-    }
-
-    public void testStandaloneCR() throws IOException {
-        try {
-            super.testStandaloneCR();
-            fail("Should trigger once fixed. {@since JDK 1.4RC1}");
-        } catch (AssertionFailedError e){
-        }
-    }
-
-    public void testWindowsLineSeparator() throws IOException {
-        try {
-            super.testWindowsLineSeparator();
-            fail("Should trigger once fixed. {@since JDK 1.4RC1}");
-        } catch (AssertionFailedError e){
-        }
-    }
-
-}
diff --git a/src/testcases/org/apache/tools/ant/util/regexp/RegexpMatcherTest.java b/src/testcases/org/apache/tools/ant/util/regexp/RegexpMatcherTest.java
deleted file mode 100644
index 18166d1..0000000
--- a/src/testcases/org/apache/tools/ant/util/regexp/RegexpMatcherTest.java
+++ /dev/null
@@ -1,233 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.util.regexp;
-
-import java.io.*;
-import java.util.Vector;
-
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-/**
- * Tests for all implementations of the RegexpMatcher interface.
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> 
- */
-public abstract class RegexpMatcherTest extends TestCase {
-
-    public final static String UNIX_LINE = "\n";
-
-    private RegexpMatcher reg;
-
-    public abstract RegexpMatcher getImplementation();
-
-    protected final RegexpMatcher getReg() {return reg;}
-
-    public RegexpMatcherTest(String name) {
-        super(name);
-    }
-
-    public void setUp() {
-        reg = getImplementation();
-    }
-
-    public void testMatches() {
-        reg.setPattern("aaaa");
-        assertTrue("aaaa should match itself", reg.matches("aaaa"));
-        assertTrue("aaaa should match xaaaa", reg.matches("xaaaa"));
-        assertTrue("aaaa shouldn\'t match xaaa", !reg.matches("xaaa"));
-        reg.setPattern("^aaaa");
-        assertTrue("^aaaa shouldn\'t match xaaaa", !reg.matches("xaaaa"));
-        assertTrue("^aaaa should match aaaax", reg.matches("aaaax"));
-        reg.setPattern("aaaa$");
-        assertTrue("aaaa$ shouldn\'t match aaaax", !reg.matches("aaaax"));
-        assertTrue("aaaa$ should match xaaaa", reg.matches("xaaaa"));
-        reg.setPattern("[0-9]+");
-        assertTrue("[0-9]+ should match 123", reg.matches("123"));
-        assertTrue("[0-9]+ should match 1", reg.matches("1"));
-        assertTrue("[0-9]+ shouldn\'t match \'\'", !reg.matches(""));
-        assertTrue("[0-9]+ shouldn\'t match a", !reg.matches("a"));
-        reg.setPattern("[0-9]*");
-        assertTrue("[0-9]* should match 123", reg.matches("123"));
-        assertTrue("[0-9]* should match 1", reg.matches("1"));
-        assertTrue("[0-9]* should match \'\'", reg.matches(""));
-        assertTrue("[0-9]* should match a", reg.matches("a"));
-        reg.setPattern("([0-9]+)=\\1");
-        assertTrue("([0-9]+)=\\1 should match 1=1", reg.matches("1=1"));
-        assertTrue("([0-9]+)=\\1 shouldn\'t match 1=2", !reg.matches("1=2"));
-    }
-
-    public void testGroups() {
-        reg.setPattern("aaaa");
-        Vector v = reg.getGroups("xaaaa");
-        assertEquals("No parens -> no extra groups", 1, v.size());
-        assertEquals("Trivial match with no parens", "aaaa", 
-                     (String) v.elementAt(0));
-
-        reg.setPattern("(aaaa)");
-        v = reg.getGroups("xaaaa");
-        assertEquals("Trivial match with single paren", 2, v.size());
-        assertEquals("Trivial match with single paren, full match", "aaaa", 
-                     (String) v.elementAt(0));
-        assertEquals("Trivial match with single paren, matched paren", "aaaa", 
-                     (String) v.elementAt(0));
-
-        reg.setPattern("(a+)b(b+)");
-        v = reg.getGroups("xaabb");
-        assertEquals(3, v.size());
-        assertEquals("aabb", (String) v.elementAt(0));
-        assertEquals("aa", (String) v.elementAt(1));
-        assertEquals("b", (String) v.elementAt(2));
-    }
-
-    public void testCaseInsensitiveMatch() {
-        reg.setPattern("aaaa");
-        assertTrue("aaaa doesn't match AAaa", !reg.matches("AAaa"));
-        assertTrue("aaaa matches AAaa ignoring case", 
-                   reg.matches("AAaa", RegexpMatcher.MATCH_CASE_INSENSITIVE));
-    }
-
-
-// make sure there are no issues concerning line separator interpretation
-// a line separator for regex (perl) is always a unix line (ie \n)
-
-    public void testParagraphCharacter() throws IOException {
-        reg.setPattern("end of text$");
-        assertTrue("paragraph character", !reg.matches("end of text\u2029"));
-    }
-
-    public void testLineSeparatorCharacter() throws IOException {
-        reg.setPattern("end of text$");
-        assertTrue("line-separator character", !reg.matches("end of text\u2028"));
-    }
-
-    public void testNextLineCharacter() throws IOException {
-        reg.setPattern("end of text$");
-        assertTrue("next-line character", !reg.matches("end of text\u0085"));
-    }
-
-    public void testStandaloneCR() throws IOException {
-        reg.setPattern("end of text$");
-        assertTrue("standalone CR", !reg.matches("end of text\r"));
-    }
-
-    public void testWindowsLineSeparator() throws IOException {
-        reg.setPattern("end of text$");
-        assertTrue("Windows line separator", !reg.matches("end of text\r\n"));
-    }
-
-    public void testWindowsLineSeparator2() throws IOException {
-        reg.setPattern("end of text\r$");
-        assertTrue("Windows line separator", reg.matches("end of text\r\n"));
-    }
-
-    public void testUnixLineSeparator() throws IOException {
-        reg.setPattern("end of text$");
-        assertTrue("Unix line separator", reg.matches("end of text\n"));
-    }
-
-
-    public void testMultiVersusSingleLine() throws IOException {
-        StringBuffer buf = new StringBuffer();
-        buf.append("Line1").append(UNIX_LINE);
-        buf.append("starttest Line2").append(UNIX_LINE);
-        buf.append("Line3 endtest").append(UNIX_LINE);
-        buf.append("Line4").append(UNIX_LINE);
-        String text = buf.toString();
-        
-        doStartTest1(text);
-        doStartTest2(text);
-        doEndTest1(text);
-        doEndTest2(text);
-    }
-
-    protected void doStartTest1(String text) {
-        reg.setPattern("^starttest");
-        assertTrue("^starttest in default mode", !reg.matches(text));
-        assertTrue("^starttest in single line mode", 
-               !reg.matches(text, RegexpMatcher.MATCH_SINGLELINE));
-        assertTrue("^starttest in multi line mode", 
-               reg.matches(text, RegexpMatcher.MATCH_MULTILINE));
-    }
-
-    protected void doStartTest2(String text) {
-        reg.setPattern("^Line1");
-        assertTrue("^Line1 in default mode", reg.matches(text));
-        assertTrue("^Line1 in single line mode", 
-               reg.matches(text, RegexpMatcher.MATCH_SINGLELINE));
-        assertTrue("^Line1 in multi line mode", 
-               reg.matches(text, RegexpMatcher.MATCH_MULTILINE));
-    }
-
-    protected void doEndTest1(String text) {
-        reg.setPattern("endtest$");
-        assertTrue("endtest$ in default mode", !reg.matches(text));
-        assertTrue("endtest$ in single line mode", 
-               !reg.matches(text, RegexpMatcher.MATCH_SINGLELINE));
-        assertTrue("endtest$ in multi line mode", 
-               reg.matches(text, RegexpMatcher.MATCH_MULTILINE));
-    }
-
-    protected void doEndTest2(String text) {
-        reg.setPattern("Line4$");
-        assertTrue("Line4$ in default mode", reg.matches(text));
-        assertTrue("Line4$ in single line mode", 
-               reg.matches(text, RegexpMatcher.MATCH_SINGLELINE));
-        assertTrue("Line4$ in multi line mode", 
-               reg.matches(text, RegexpMatcher.MATCH_MULTILINE));
-    }
-
-}
diff --git a/src/testcases/org/apache/tools/ant/util/regexp/RegexpTest.java b/src/testcases/org/apache/tools/ant/util/regexp/RegexpTest.java
deleted file mode 100644
index 3af5587..0000000
--- a/src/testcases/org/apache/tools/ant/util/regexp/RegexpTest.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.ant.util.regexp;
-
-/**
- * Tests for all implementations of the Regexp interface.
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> 
- */
-public abstract class RegexpTest extends RegexpMatcherTest {
-
-    private static final String test = "abcdefg-abcdefg";
-    private static final String pattern = "ab([^d]*)d([^f]*)f";
-
-    public RegexpTest(String name) {
-        super(name);
-    }
-
-    public final RegexpMatcher getImplementation() {
-        return getRegexpImplementation();
-    }
-
-    public abstract Regexp getRegexpImplementation();
-
-    public void testSubstitution() {
-        Regexp reg = (Regexp) getReg();
-        reg.setPattern(pattern);
-        assertTrue(reg.matches(test));
-        assertEquals("abedcfg-abcdefg", reg.substitute(test, "ab\\2d\\1f", 
-                                                       Regexp.MATCH_DEFAULT));
-    }
-
-    public void testReplaceFirstSubstitution() {
-        Regexp reg = (Regexp) getReg();
-        reg.setPattern(pattern);
-        assertTrue(reg.matches(test));
-        assertEquals("abedcfg-abcdefg", reg.substitute(test, "ab\\2d\\1f", 
-                                                       Regexp.REPLACE_FIRST));
-    }
-
-    public void testReplaceAllSubstitution() {
-        Regexp reg = (Regexp) getReg();
-        reg.setPattern(pattern);
-        assertTrue(reg.matches(test));
-        assertEquals("abedcfg-abedcfg", reg.substitute(test, "ab\\2d\\1f", 
-                                                       Regexp.REPLACE_ALL));
-    }
-}
diff --git a/src/testcases/org/apache/tools/zip/AsiExtraFieldTest.java b/src/testcases/org/apache/tools/zip/AsiExtraFieldTest.java
deleted file mode 100644
index a10c03f..0000000
--- a/src/testcases/org/apache/tools/zip/AsiExtraFieldTest.java
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.zip;
-
-import junit.framework.TestCase;
-
-/**
- * JUnit 3 testcases for org.apache.tools.zip.AsiExtraField.
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> 
- */
-public class AsiExtraFieldTest extends TestCase implements UnixStat {
-    public AsiExtraFieldTest(String name) {
-        super(name);
-    }
-
-    /**
-     * Test file mode magic.
-     */
-    public void testModes() {
-        AsiExtraField a = new AsiExtraField();
-        a.setMode(0123);
-        assertEquals("plain file", 0100123, a.getMode());
-        a.setDirectory(true);
-        assertEquals("directory", 040123, a.getMode());
-        a.setLinkedFile("test");
-        assertEquals("symbolic link", 0120123, a.getMode());
-    }
-
-    /**
-     * Test content.
-     */
-    public void testContent() {
-        AsiExtraField a = new AsiExtraField();
-        a.setMode(0123);
-        a.setUserId(5);
-        a.setGroupId(6);
-        byte[] b = a.getLocalFileDataData();
-        
-        // CRC manually calculated, sorry
-        byte[] expect = {(byte)0xC6, 0x02, 0x78, (byte)0xB6, // CRC
-                         0123, (byte)0x80,                   // mode
-                         0, 0, 0, 0,                         // link length
-                         5, 0, 6, 0};                        // uid, gid
-        assertEquals("no link", expect.length, b.length);
-        for (int i=0; i<expect.length; i++) {
-            assertEquals("no link, byte "+i, expect[i], b[i]);
-        }
-
-        a.setLinkedFile("test");
-        expect = new byte[] {0x75, (byte)0x8E, 0x41, (byte)0xFD, // CRC
-                             0123, (byte)0xA0,                   // mode
-                             4, 0, 0, 0,                         // link length
-                             5, 0, 6, 0,                         // uid, gid
-                             (byte)'t', (byte)'e', (byte)'s', (byte)'t'};
-        b = a.getLocalFileDataData();
-        assertEquals("no link", expect.length, b.length);
-        for (int i=0; i<expect.length; i++) {
-            assertEquals("no link, byte "+i, expect[i], b[i]);
-        }
-
-    }
-
-    /**
-     * Test reparse
-     */
-    public void testReparse() throws Exception {
-        // CRC manually calculated, sorry
-        byte[] data = {(byte)0xC6, 0x02, 0x78, (byte)0xB6, // CRC
-                       0123, (byte)0x80,                   // mode
-                       0, 0, 0, 0,                         // link length
-                       5, 0, 6, 0};                        // uid, gid
-        AsiExtraField a = new AsiExtraField();
-        a.parseFromLocalFileData(data, 0, data.length);
-        assertEquals("length plain file", data.length, 
-                     a.getLocalFileDataLength().getValue());
-        assertTrue("plain file, no link", !a.isLink());
-        assertTrue("plain file, no dir", !a.isDirectory());
-        assertEquals("mode plain file", FILE_FLAG | 0123, a.getMode());
-        assertEquals("uid plain file", 5, a.getUserId());
-        assertEquals("gid plain file", 6, a.getGroupId());
-
-        data = new byte[] {0x75, (byte)0x8E, 0x41, (byte)0xFD, // CRC
-                           0123, (byte)0xA0,                   // mode
-                           4, 0, 0, 0,                         // link length
-                           5, 0, 6, 0,                         // uid, gid
-                           (byte)'t', (byte)'e', (byte)'s', (byte)'t'};
-        a = new AsiExtraField();
-        a.parseFromLocalFileData(data, 0, data.length);
-        assertEquals("length link", data.length, 
-                     a.getLocalFileDataLength().getValue());
-        assertTrue("link, is link", a.isLink());
-        assertTrue("link, no dir", !a.isDirectory());
-        assertEquals("mode link", LINK_FLAG | 0123, a.getMode());
-        assertEquals("uid link", 5, a.getUserId());
-        assertEquals("gid link", 6, a.getGroupId());
-        assertEquals("test", a.getLinkedFile());
-
-        data = new byte[] {(byte)0x8E, 0x01, (byte)0xBF, (byte)0x0E, // CRC
-                           0123, (byte)0x40,                         // mode
-                           0, 0, 0, 0,                               // link
-                           5, 0, 6, 0};                          // uid, gid
-        a = new AsiExtraField();
-        a.parseFromLocalFileData(data, 0, data.length);
-        assertEquals("length dir", data.length, 
-                     a.getLocalFileDataLength().getValue());
-        assertTrue("dir, no link", !a.isLink());
-        assertTrue("dir, is dir", a.isDirectory());
-        assertEquals("mode dir", DIR_FLAG | 0123, a.getMode());
-        assertEquals("uid dir", 5, a.getUserId());
-        assertEquals("gid dir", 6, a.getGroupId());
-
-        data = new byte[] {0, 0, 0, 0,                           // bad CRC
-                           0123, (byte)0x40,                     // mode
-                           0, 0, 0, 0,                           // link
-                           5, 0, 6, 0};                          // uid, gid
-        a = new AsiExtraField();
-        try {
-            a.parseFromLocalFileData(data, 0, data.length);
-            fail("should raise bad CRC exception");
-        } catch (Exception e) {
-            assertEquals("bad CRC checksum 0 instead of ebf018e", 
-                         e.getMessage());
-        }
-    }
-}
diff --git a/src/testcases/org/apache/tools/zip/ExtraFieldUtilsTest.java b/src/testcases/org/apache/tools/zip/ExtraFieldUtilsTest.java
deleted file mode 100644
index f6b75c7..0000000
--- a/src/testcases/org/apache/tools/zip/ExtraFieldUtilsTest.java
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.zip;
-
-import junit.framework.TestCase;
-
-/**
- * JUnit 3 testcases for org.apache.tools.zip.ExtraFieldUtils.
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> 
- */
-public class ExtraFieldUtilsTest extends TestCase implements UnixStat {
-    public ExtraFieldUtilsTest(String name) {
-        super(name);
-    }
-
-    private AsiExtraField a;
-    private UnrecognizedExtraField dummy;
-    private byte[] data;
-    private byte[] aLocal;
-
-    public void setUp() {
-        a = new AsiExtraField();
-        a.setMode(0755);
-        a.setDirectory(true);
-        dummy = new UnrecognizedExtraField();
-        dummy.setHeaderId(new ZipShort(1));
-        dummy.setLocalFileDataData(new byte[0]);
-        dummy.setCentralDirectoryData(new byte[] {0});
-
-        aLocal = a.getLocalFileDataData();
-        byte[] dummyLocal = dummy.getLocalFileDataData();
-        data = new byte[4 + aLocal.length + 4 + dummyLocal.length];
-        System.arraycopy(a.getHeaderId().getBytes(), 0, data, 0, 2);
-        System.arraycopy(a.getLocalFileDataLength().getBytes(), 0, data, 2, 2);
-        System.arraycopy(aLocal, 0, data, 4, aLocal.length);
-        System.arraycopy(dummy.getHeaderId().getBytes(), 0, data, 
-                         4+aLocal.length, 2);
-        System.arraycopy(dummy.getLocalFileDataLength().getBytes(), 0, data, 
-                         4+aLocal.length+2, 2);
-        System.arraycopy(dummyLocal, 0, data, 
-                         4+aLocal.length+4, dummyLocal.length);
-
-    }
-
-    /**
-     * test parser.
-     */
-    public void testParse() throws Exception {
-        ZipExtraField[] ze = ExtraFieldUtils.parse(data);
-        assertEquals("number of fields", 2, ze.length);
-        assertTrue("type field 1", ze[0] instanceof AsiExtraField);
-        assertEquals("mode field 1", 040755,
-                     ((AsiExtraField) ze[0]).getMode());
-        assertTrue("type field 2", ze[1] instanceof UnrecognizedExtraField);
-        assertEquals("data length field 2", 0, 
-                     ze[1].getLocalFileDataLength().getValue());
-
-        byte[] data2 = new byte[data.length-1];
-        System.arraycopy(data, 0, data2, 0, data2.length);
-        try {
-            ExtraFieldUtils.parse(data2);
-            fail("data should be invalid");
-        } catch (Exception e) {
-            assertEquals("message", 
-                         "data starting at "+(4+aLocal.length)+" is in unknown format",
-                         e.getMessage());
-        }
-    }
-
-    /**
-     * Test merge methods
-     */
-    public void testMerge() {
-        byte[] local = 
-            ExtraFieldUtils.mergeLocalFileDataData(new ZipExtraField[] {a, dummy});
-        assertEquals("local length", data.length, local.length);
-        for (int i=0; i<local.length; i++) {
-            assertEquals("local byte "+i, data[i], local[i]);
-        }
-        
-        byte[] dummyCentral = dummy.getCentralDirectoryData();
-        byte[] data2 = new byte[4 + aLocal.length + 4 + dummyCentral.length];
-        System.arraycopy(data, 0, data2, 0, 4 + aLocal.length + 2);
-        System.arraycopy(dummy.getCentralDirectoryLength().getBytes(), 0, 
-                         data2, 4+aLocal.length+2, 2);
-        System.arraycopy(dummyCentral, 0, data2, 
-                         4+aLocal.length+4, dummyCentral.length);
-
-
-        byte[] central = 
-            ExtraFieldUtils.mergeCentralDirectoryData(new ZipExtraField[] {a, dummy});
-        assertEquals("central length", data2.length, central.length);
-        for (int i=0; i<central.length; i++) {
-            assertEquals("central byte "+i, data2[i], central[i]);
-        }
-        
-    }
-}
diff --git a/src/testcases/org/apache/tools/zip/ZipEntryTest.java b/src/testcases/org/apache/tools/zip/ZipEntryTest.java
deleted file mode 100644
index 77e304c..0000000
--- a/src/testcases/org/apache/tools/zip/ZipEntryTest.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.zip;
-
-import junit.framework.TestCase;
-
-/**
- * JUnit 3 testcases for org.apache.tools.zip.ZipEntry.
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> 
- */
-public class ZipEntryTest extends TestCase {
-
-    public ZipEntryTest(String name) {
-        super(name);
-    }
-
-    /**
-     * test handling of extra fields
-     *
-     * @since 1.1
-     */
-    public void testExtraFields() {
-        AsiExtraField a = new AsiExtraField();
-        a.setDirectory(true);
-        a.setMode(0755);
-        UnrecognizedExtraField u = new UnrecognizedExtraField();
-        u.setHeaderId(new ZipShort(1));
-        u.setLocalFileDataData(new byte[0]);
-
-        ZipEntry ze = new ZipEntry("test/");
-        ze.setExtraFields(new ZipExtraField[] {a, u});
-        byte[] data1 = ze.getExtra();
-        ZipExtraField[] result = ze.getExtraFields();
-        assertEquals("first pass", 2, result.length);
-        assertSame(a, result[0]);
-        assertSame(u, result[1]);
-
-        UnrecognizedExtraField u2 = new UnrecognizedExtraField();
-        u2.setHeaderId(new ZipShort(1));
-        u2.setLocalFileDataData(new byte[] {1});
-
-        ze.addExtraField(u2);
-        byte[] data2 = ze.getExtra();
-        result = ze.getExtraFields();
-        assertEquals("second pass", 2, result.length);
-        assertSame(a, result[0]);
-        assertSame(u2, result[1]);
-        assertEquals("length second pass", data1.length+1, data2.length);
-
-        UnrecognizedExtraField u3 = new UnrecognizedExtraField();
-        u3.setHeaderId(new ZipShort(2));
-        u3.setLocalFileDataData(new byte[] {1});
-        ze.addExtraField(u3);
-        result = ze.getExtraFields();
-        assertEquals("third pass", 3, result.length);
-
-        ze.removeExtraField(new ZipShort(1));
-        byte[] data3 = ze.getExtra();
-        result = ze.getExtraFields();
-        assertEquals("fourth pass", 2, result.length);
-        assertSame(a, result[0]);
-        assertSame(u3, result[1]);
-        assertEquals("length fourth pass", data2.length, data3.length);
-
-        try {
-            ze.removeExtraField(new ZipShort(1));
-            fail("should be no such element");
-        } catch (java.util.NoSuchElementException nse) {
-        }
-    }
-}
diff --git a/src/testcases/org/apache/tools/zip/ZipLongTest.java b/src/testcases/org/apache/tools/zip/ZipLongTest.java
deleted file mode 100644
index 6d13583..0000000
--- a/src/testcases/org/apache/tools/zip/ZipLongTest.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.zip;
-
-import junit.framework.TestCase;
-
-/**
- * JUnit 3 testcases for org.apache.tools.zip.ZipLong.
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> 
- */
-public class ZipLongTest extends TestCase {
-
-    public ZipLongTest(String name) {
-        super(name);
-    }
-
-    /**
-     * Test conversion to bytes.
-     */
-    public void testToBytes() {
-        ZipLong zl = new ZipLong(0x12345678);
-        byte[] result = zl.getBytes();
-        assertEquals("length getBytes", 4, result.length);
-        assertEquals("first byte getBytes", 0x78, result[0]);
-        assertEquals("second byte getBytes", 0x56, result[1]);
-        assertEquals("third byte getBytes", 0x34, result[2]);
-        assertEquals("fourth byte getBytes", 0x12, result[3]);
-    }
-
-    /**
-     * Test conversion from bytes.
-     */
-    public void testFromBytes() {
-        byte[] val = new byte[] {0x78, 0x56, 0x34, 0x12};
-        ZipLong zl = new ZipLong(val);
-        assertEquals("value from bytes", 0x12345678, zl.getValue());
-    }
-
-    /**
-     * Test the contract of the equals method.
-     */
-    public void testEquals() {
-        ZipLong zl = new ZipLong(0x12345678);
-        ZipLong zl2 = new ZipLong(0x12345678);
-        ZipLong zl3 = new ZipLong(0x87654321);
-
-        assertTrue("reflexive", zl.equals(zl));
-
-        assertTrue("works", zl.equals(zl2));
-        assertTrue("works, part two", !zl.equals(zl3));
-
-        assertTrue("symmetric", zl2.equals(zl));
-
-        assertTrue("null handling", !zl.equals(null));
-        assertTrue("non ZipLong handling", !zl.equals(new Integer(0x1234)));
-    }
-
-    /**
-     * Test sign handling.
-     */
-    public void testSign() {
-        ZipLong zl = new ZipLong(new byte[] {(byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF});
-        assertEquals(0x00000000FFFFFFFFl, zl.getValue());
-    }
-
-}
diff --git a/src/testcases/org/apache/tools/zip/ZipShortTest.java b/src/testcases/org/apache/tools/zip/ZipShortTest.java
deleted file mode 100644
index 3520461..0000000
--- a/src/testcases/org/apache/tools/zip/ZipShortTest.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.apache.tools.zip;
-
-import junit.framework.TestCase;
-
-/**
- * JUnit 3 testcases for org.apache.tools.zip.ZipShort.
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> 
- */
-public class ZipShortTest extends TestCase {
-
-    public ZipShortTest(String name) {
-        super(name);
-    }
-
-    /**
-     * Test conversion to bytes.
-     */
-    public void testToBytes() {
-        ZipShort zs = new ZipShort(0x1234);
-        byte[] result = zs.getBytes();
-        assertEquals("length getBytes", 2, result.length);
-        assertEquals("first byte getBytes", 0x34, result[0]);
-        assertEquals("second byte getBytes", 0x12, result[1]);
-    }
-
-    /**
-     * Test conversion from bytes.
-     */
-    public void testFromBytes() {
-        byte[] val = new byte[] {0x34, 0x12};
-        ZipShort zs = new ZipShort(val);
-        assertEquals("value from bytes", 0x1234, zs.getValue());
-    }
-
-    /**
-     * Test the contract of the equals method.
-     */
-    public void testEquals() {
-        ZipShort zs = new ZipShort(0x1234);
-        ZipShort zs2 = new ZipShort(0x1234);
-        ZipShort zs3 = new ZipShort(0x5678);
-
-        assertTrue("reflexive", zs.equals(zs));
-
-        assertTrue("works", zs.equals(zs2));
-        assertTrue("works, part two", !zs.equals(zs3));
-
-        assertTrue("symmetric", zs2.equals(zs));
-
-        assertTrue("null handling", !zs.equals(null));
-        assertTrue("non ZipShort handling", !zs.equals(new Integer(0x1234)));
-    }
-
-    /**
-     * Test sign handling.
-     */
-    public void testSign() {
-        ZipShort zs = new ZipShort(new byte[] {(byte)0xFF, (byte)0xFF});
-        assertEquals(0x0000FFFF, zs.getValue());
-    }
-
-}
diff --git a/src/testcases/org/example/junit/Output.java b/src/testcases/org/example/junit/Output.java
deleted file mode 100644
index b01a79d..0000000
--- a/src/testcases/org/example/junit/Output.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.example.junit;
-
-import junit.framework.TestCase;
-
-/**
- * Not really a test of Ant but a test that is run by the test of the
- * junit task.  Confused?
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- * @since Ant 1.5
- */
-public class Output extends TestCase {
-
-    public Output(String s) {
-        super(s);
-    }
-
-    public void testOutput() {
-        System.out.println("foo");
-    }
-}
diff --git a/src/testcases/org/example/junit/ThreadedOutput.java b/src/testcases/org/example/junit/ThreadedOutput.java
deleted file mode 100644
index c26611d..0000000
--- a/src/testcases/org/example/junit/ThreadedOutput.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.example.junit;
-
-import junit.framework.TestCase;
-
-/**
- * Not really a test of Ant but a test that is run by the test of the
- * junit task.  Confused?
- *
- * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
- * @since Ant 1.5
- */
-public class ThreadedOutput extends TestCase {
-
-    public ThreadedOutput(String s) {
-        super(s);
-    }
-
-    public void testOutput() throws InterruptedException {
-        Thread t = new Thread(new Runnable() {
-                public void run() {
-                    System.out.println("foo");
-                }
-            });
-        t.start();
-        t.join();
-    }
-}
diff --git a/src/testcases/org/example/tasks/TaskdefTestContainerTask.java b/src/testcases/org/example/tasks/TaskdefTestContainerTask.java
deleted file mode 100644
index 850347f..0000000
--- a/src/testcases/org/example/tasks/TaskdefTestContainerTask.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.example.tasks;
-
-import org.apache.tools.ant.taskdefs.Sequential;
-
-public class TaskdefTestContainerTask extends Sequential {
-    public TaskdefTestContainerTask() {}
-}
diff --git a/src/testcases/org/example/tasks/TaskdefTestSimpleTask.java b/src/testcases/org/example/tasks/TaskdefTestSimpleTask.java
deleted file mode 100644
index 4272cab..0000000
--- a/src/testcases/org/example/tasks/TaskdefTestSimpleTask.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.example.tasks;
-
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.Task;
-
-public class TaskdefTestSimpleTask extends Task {
-
-    public class Echo {
-        Echo() {}
-        private String message = null;
-        public void setMessage(String s) {message = s;}
-    }
-    
-    public TaskdefTestSimpleTask() {}
-    
-    private Echo echo;
-    public Echo createEcho() {
-        echo = new Echo();
-        return echo;
-    }
-    
-    public void execute() {
-        log("simpletask: "+echo.message, Project.MSG_INFO);
-    }
-
-}
-
diff --git a/src/testcases/org/example/types/TypedefTestType.java b/src/testcases/org/example/types/TypedefTestType.java
deleted file mode 100644
index b736ad0..0000000
--- a/src/testcases/org/example/types/TypedefTestType.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Ant", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-
-package org.example.types;
-
-import org.apache.tools.ant.ProjectComponent;
-
-public class TypedefTestType extends ProjectComponent {
-}
-
diff --git a/xdocs/ant15_todo.xml b/xdocs/ant15_todo.xml
deleted file mode 100644
index 99043e1..0000000
--- a/xdocs/ant15_todo.xml
+++ /dev/null
@@ -1,220 +0,0 @@
-<?xml version="1.0"?>
-<document>
-
-  <properties>
-    <author email="ehatcher@apache.org">Erik Hatcher</author>
-    <title>Ant 1.5 Release To-Do List</title>
-  </properties>
-
-  <body>
-    <section name="Ant 1.5 Release To-Do List">
-      <subsection name="Open">
-        <table>
-          <tr>
-            <th>Item</th>
-            <th>Details</th>
-            <th>Assigned</th>
-          </tr>
-
-          <tr>
-            <td>Bugzilla bugs under 30</td>
-            <td>or at least address most of them in some way</td>
-            <td>All Committers</td>
-          </tr>
-
-          <tr>
-            <td>Document Path datatype</td>
-            <td>It's documented, but more hidden than the other types</td>
-            <td>Erik</td>
-          </tr>
-
-          <tr>
-            <td>Novell NetWare support</td>
-            <td></td>
-            <td>Jeff Tulley</td>
-          </tr>
-
-          <tr>
-            <td>XMLCatalog more integrated</td>
-            <td>Several tasks could still use XMLCatalog integration</td>
-            <td></td>
-          </tr>
-
-          <tr>
-            <td>Make default excludes customizable</td>
-            <td>With the setting of an ant.default.excludes property?</td>
-            <td>Erik</td>
-          </tr>
-
-          <tr>
-            <td>Fully functional on Java 1.4</td>
-            <td>Fix outstanding java1.4 defects, maybe add an
-            assertions datatype for java and other tasks (junit?)
-            which lets people turn on asserts.
-            </td>
-            <td>Steve + any other help he can get</td>
-          </tr>
-
-<!-- for cut and paste use
-          <tr>
-            <td></td>
-            <td></td>
-            <td></td>
-          </tr>
--->
-
-        </table>
-      </subsection>
-
-      <subsection name="Done">
-        <table>
-          <tr>
-            <th>Item</th>
-            <th>Details</th>
-            <th>Assigned</th>
-          </tr>
-
-          <tr>
-            <td>Selectors</td>
-            <td></td>
-            <td>Bruce</td>
-          </tr>
-
-          <tr>
-            <td>Extension utilities</td>
-            <td>Port across task that prints out details of extensions for
-            a certain library/jar, or all jars in a path. Port across task
-            that generates a manifest (including dependencies and extension
-            specification) based on a set of jars in path. Port across task
-            that checks that the list of pre-req extensions are present in
-            path.</td>
-            <td>Peter</td>
-          </tr>
-          <tr>
-            <td>XmlLogger implements BuildLogger</td>
-            <td>Its currently a BuildListener, lets remove the confusion</td>
-            <td>Erik</td>
-          </tr>
-          <tr>
-            <td>Dotnet library tweaks</td>
-            <td>update to release, add uptodateness, add a web service
-            import (for Axis interop testing)</td>
-            <td>Steve, in a really long meeting</td>
-          </tr>
-          <tr>
-            <td>compiler attribute for rmic</td>
-            <td></td>
-            <td>Stefan</td>
-          </tr>
-          <tr>
-            <td>PGP signing task if possible</td>
-            <td>Not done, but deemed impossible - at least in the 1.5
-              time frame.</td>
-            <td>Stefan</td>
-          </tr>
-          <tr>
-            <td>JUnit's System.err/.out handling</td>
-            <td>showoutput attribute has been added - doesn't work in
-              some cases yet (same reason as bug PR 7980)</td>
-            <td>Stefan</td>
-          </tr>
-          <tr>
-            <td>Base compiler command line switches on the selected
-            compiler, not the current JDK</td>
-            <td></td>
-            <td>Stefan</td>
-          </tr>
-          <tr>
-            <td>&lt;input&gt;</td>
-            <td></td>
-            <td>Stefan</td>
-          </tr>
-          <tr>
-            <td>Make javadoc a real directory based task</td>
-            <td></td>
-            <td>Stefan</td>
-          </tr>
-        </table>
-      </subsection>
-
-      <subsection name="Bug Reports Short-Cuts">
-        <p>Note: You can sort the report results by clicking on the column-headings.</p>
-        <table>
-          <tr>
-          <th>New|Assigned|Reopened Bug Reports:</th>
-          </tr>
-          <tr>
-          <td><a href="http://nagoya.apache.org/bugzilla/buglist.cgi?bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED&amp;email1=&amp;emailtype1=substring&amp;emailassigned_to1=1&amp;email2=&amp;emailtype2=substring&amp;emailreporter2=1&amp;bugidtype=include&amp;bug_id=&amp;changedin=&amp;votes=&amp;chfieldfrom=&amp;chfieldto=Now&amp;chfieldvalue=&amp;product=Ant&amp;component=Build+Process&amp;component=Core&amp;component=Core+tasks&amp;component=Documentation&amp;component=Optional+Tasks&amp;component=Other&amp;component=Wrapper+scripts&amp;short_desc=&amp;short_desc_type=allwordssubstr&amp;long_desc=&amp;long_desc_type=allwordssubstr&amp;bug_file_loc=&amp;bug_file_loc_type=allwordssubstr&amp;keywords=&amp;keywords_type=anywords&amp;field0-0-0=noop&amp;type0-0-0=noop&amp;value0-0-0=&amp;cmdtype=doit">All</a>
-          </td>
-          </tr>
-          <tr>
-          <td><a href="http://nagoya.apache.org/bugzilla/buglist.cgi?bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED&amp;bug_severity=Blocker&amp;bug_severity=Critical&amp;bug_severity=Major&amp;bug_severity=Normal&amp;bug_severity=Minor&amp;email1=&amp;emailtype1=substring&amp;emailassigned_to1=1&amp;email2=&amp;emailtype2=substring&amp;emailreporter2=1&amp;bugidtype=include&amp;bug_id=&amp;changedin=&amp;votes=&amp;chfieldfrom=&amp;chfieldto=Now&amp;chfieldvalue=&amp;product=Ant&amp;component=Build+Process&amp;component=Core&amp;component=Core+tasks&amp;component=Documentation&amp;component=Optional+Tasks&amp;component=Other&amp;component=Wrapper+scripts&amp;short_desc=&amp;short_desc_type=allwordssubstr&amp;long_desc=&amp;long_desc_type=allwordssubstr&amp;bug_file_loc=&amp;bug_file_loc_type=allwordssubstr&amp;keywords=&amp;keywords_type=anywords&amp;field0-0-0=noop&amp;type0-0-0=noop&amp;value0-0-0=&amp;cmdtype=doit">- minus Enhancements</a>
-          </td>
-          </tr>
-          <tr>
-          <th>New|Assigned|Reopened Bug Reports by Component:</th>
-          </tr>
-          <tr>
-          <td><a href="http://nagoya.apache.org/bugzilla/buglist.cgi?bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED&amp;email1=&amp;emailtype1=substring&amp;emailassigned_to1=1&amp;email2=&amp;emailtype2=substring&amp;emailreporter2=1&amp;bugidtype=include&amp;bug_id=&amp;changedin=&amp;votes=&amp;chfieldfrom=&amp;chfieldto=Now&amp;chfieldvalue=&amp;product=Ant&amp;component=Build+Process&amp;short_desc=&amp;short_desc_type=allwordssubstr&amp;long_desc=&amp;long_desc_type=allwordssubstr&amp;bug_file_loc=&amp;bug_file_loc_type=allwordssubstr&amp;keywords=&amp;keywords_type=anywords&amp;field0-0-0=noop&amp;type0-0-0=noop&amp;value0-0-0=&amp;cmdtype=doit">Build Process</a>
-          </td>
-          </tr>
-          <tr>
-          <td><a href="http://nagoya.apache.org/bugzilla/buglist.cgi?bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED&amp;bug_severity=Blocker&amp;bug_severity=Critical&amp;bug_severity=Major&amp;bug_severity=Normal&amp;bug_severity=Minor&amp;email1=&amp;emailtype1=substring&amp;emailassigned_to1=1&amp;email2=&amp;emailtype2=substring&amp;emailreporter2=1&amp;bugidtype=include&amp;bug_id=&amp;changedin=&amp;votes=&amp;chfieldfrom=&amp;chfieldto=Now&amp;chfieldvalue=&amp;product=Ant&amp;component=Build+Process&amp;short_desc=&amp;short_desc_type=allwordssubstr&amp;long_desc=&amp;long_desc_type=allwordssubstr&amp;bug_file_loc=&amp;bug_file_loc_type=allwordssubstr&amp;keywords=&amp;keywords_type=anywords&amp;field0-0-0=noop&amp;type0-0-0=noop&amp;value0-0-0=&amp;cmdtype=doit">- minus Enhancements</a>
-          </td>
-          </tr>
-          <tr>
-          <td><a href="http://nagoya.apache.org/bugzilla/buglist.cgi?bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED&amp;email1=&amp;emailtype1=substring&amp;emailassigned_to1=1&amp;email2=&amp;emailtype2=substring&amp;emailreporter2=1&amp;bugidtype=include&amp;bug_id=&amp;changedin=&amp;votes=&amp;chfieldfrom=&amp;chfieldto=Now&amp;chfieldvalue=&amp;product=Ant&amp;component=Core&amp;short_desc=&amp;short_desc_type=allwordssubstr&amp;long_desc=&amp;long_desc_type=allwordssubstr&amp;bug_file_loc=&amp;bug_file_loc_type=allwordssubstr&amp;keywords=&amp;keywords_type=anywords&amp;field0-0-0=noop&amp;type0-0-0=noop&amp;value0-0-0=&amp;cmdtype=doit">Core</a>
-          </td>
-          </tr>
-          <tr>
-          <td><a href="http://nagoya.apache.org/bugzilla/buglist.cgi?bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED&amp;bug_severity=Blocker&amp;bug_severity=Critical&amp;bug_severity=Major&amp;bug_severity=Normal&amp;bug_severity=Minor&amp;email1=&amp;emailtype1=substring&amp;emailassigned_to1=1&amp;email2=&amp;emailtype2=substring&amp;emailreporter2=1&amp;bugidtype=include&amp;bug_id=&amp;changedin=&amp;votes=&amp;chfieldfrom=&amp;chfieldto=Now&amp;chfieldvalue=&amp;product=Ant&amp;component=Core&amp;short_desc=&amp;short_desc_type=allwordssubstr&amp;long_desc=&amp;long_desc_type=allwordssubstr&amp;bug_file_loc=&amp;bug_file_loc_type=allwordssubstr&amp;keywords=&amp;keywords_type=anywords&amp;field0-0-0=noop&amp;type0-0-0=noop&amp;value0-0-0=&amp;cmdtype=doit">- minus Enhancements</a>
-          </td>
-          </tr>
-          <tr>
-          <td><a href="http://nagoya.apache.org/bugzilla/buglist.cgi?bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED&amp;email1=&amp;emailtype1=substring&amp;emailassigned_to1=1&amp;email2=&amp;emailtype2=substring&amp;emailreporter2=1&amp;bugidtype=include&amp;bug_id=&amp;changedin=&amp;votes=&amp;chfieldfrom=&amp;chfieldto=Now&amp;chfieldvalue=&amp;product=Ant&amp;component=Core+Tasks&amp;short_desc=&amp;short_desc_type=allwordssubstr&amp;long_desc=&amp;long_desc_type=allwordssubstr&amp;bug_file_loc=&amp;bug_file_loc_type=allwordssubstr&amp;keywords=&amp;keywords_type=anywords&amp;field0-0-0=noop&amp;type0-0-0=noop&amp;value0-0-0=&amp;cmdtype=doit">Core Tasks</a>
-          </td>
-          </tr>
-          <tr>
-          <td><a href="http://nagoya.apache.org/bugzilla/buglist.cgi?bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED&amp;bug_severity=Blocker&amp;bug_severity=Critical&amp;bug_severity=Major&amp;bug_severity=Normal&amp;bug_severity=Minor&amp;email1=&amp;emailtype1=substring&amp;emailassigned_to1=1&amp;email2=&amp;emailtype2=substring&amp;emailreporter2=1&amp;bugidtype=include&amp;bug_id=&amp;changedin=&amp;votes=&amp;chfieldfrom=&amp;chfieldto=Now&amp;chfieldvalue=&amp;product=Ant&amp;component=Core+Tasks&amp;short_desc=&amp;short_desc_type=allwordssubstr&amp;long_desc=&amp;long_desc_type=allwordssubstr&amp;bug_file_loc=&amp;bug_file_loc_type=allwordssubstr&amp;keywords=&amp;keywords_type=anywords&amp;field0-0-0=noop&amp;type0-0-0=noop&amp;value0-0-0=&amp;cmdtype=doit">- minus Enhancements</a>
-          </td>
-          </tr>
-          <tr>
-          <td><a href="http://nagoya.apache.org/bugzilla/buglist.cgi?bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED&amp;email1=&amp;emailtype1=substring&amp;emailassigned_to1=1&amp;email2=&amp;emailtype2=substring&amp;emailreporter2=1&amp;bugidtype=include&amp;bug_id=&amp;changedin=&amp;votes=&amp;chfieldfrom=&amp;chfieldto=Now&amp;chfieldvalue=&amp;product=Ant&amp;component=Documentation&amp;short_desc=&amp;short_desc_type=allwordssubstr&amp;long_desc=&amp;long_desc_type=allwordssubstr&amp;bug_file_loc=&amp;bug_file_loc_type=allwordssubstr&amp;keywords=&amp;keywords_type=anywords&amp;field0-0-0=noop&amp;type0-0-0=noop&amp;value0-0-0=&amp;cmdtype=doit">Documentation</a>
-          </td>
-          </tr>
-          <tr>
-          <td><a href="http://nagoya.apache.org/bugzilla/buglist.cgi?bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED&amp;bug_severity=Blocker&amp;bug_severity=Critical&amp;bug_severity=Major&amp;bug_severity=Normal&amp;bug_severity=Minor&amp;email1=&amp;emailtype1=substring&amp;emailassigned_to1=1&amp;email2=&amp;emailtype2=substring&amp;emailreporter2=1&amp;bugidtype=include&amp;bug_id=&amp;changedin=&amp;votes=&amp;chfieldfrom=&amp;chfieldto=Now&amp;chfieldvalue=&amp;product=Ant&amp;component=Documentation&amp;short_desc=&amp;short_desc_type=allwordssubstr&amp;long_desc=&amp;long_desc_type=allwordssubstr&amp;bug_file_loc=&amp;bug_file_loc_type=allwordssubstr&amp;keywords=&amp;keywords_type=anywords&amp;field0-0-0=noop&amp;type0-0-0=noop&amp;value0-0-0=&amp;cmdtype=doit">- minus Enhancements</a>
-          </td>
-          </tr>
-          <tr>
-          <td><a href="http://nagoya.apache.org/bugzilla/buglist.cgi?bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED&amp;email1=&amp;emailtype1=substring&amp;emailassigned_to1=1&amp;email2=&amp;emailtype2=substring&amp;emailreporter2=1&amp;bugidtype=include&amp;bug_id=&amp;changedin=&amp;votes=&amp;chfieldfrom=&amp;chfieldto=Now&amp;chfieldvalue=&amp;product=Ant&amp;component=Optional+Tasks&amp;short_desc=&amp;short_desc_type=allwordssubstr&amp;long_desc=&amp;long_desc_type=allwordssubstr&amp;bug_file_loc=&amp;bug_file_loc_type=allwordssubstr&amp;keywords=&amp;keywords_type=anywords&amp;field0-0-0=noop&amp;type0-0-0=noop&amp;value0-0-0=&amp;cmdtype=doit">Optional Tasks</a>
-          </td>
-          </tr>
-          <tr>
-          <td><a href="http://nagoya.apache.org/bugzilla/buglist.cgi?bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED&amp;bug_severity=Blocker&amp;bug_severity=Critical&amp;bug_severity=Major&amp;bug_severity=Normal&amp;bug_severity=Minor&amp;email1=&amp;emailtype1=substring&amp;emailassigned_to1=1&amp;email2=&amp;emailtype2=substring&amp;emailreporter2=1&amp;bugidtype=include&amp;bug_id=&amp;changedin=&amp;votes=&amp;chfieldfrom=&amp;chfieldto=Now&amp;chfieldvalue=&amp;product=Ant&amp;component=Optional+Tasks&amp;short_desc=&amp;short_desc_type=allwordssubstr&amp;long_desc=&amp;long_desc_type=allwordssubstr&amp;bug_file_loc=&amp;bug_file_loc_type=allwordssubstr&amp;keywords=&amp;keywords_type=anywords&amp;field0-0-0=noop&amp;type0-0-0=noop&amp;value0-0-0=&amp;cmdtype=doit">- minus Enhancements</a>
-          </td>
-          </tr>
-          <tr>
-          <td><a href="http://nagoya.apache.org/bugzilla/buglist.cgi?bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED&amp;email1=&amp;emailtype1=substring&amp;emailassigned_to1=1&amp;email2=&amp;emailtype2=substring&amp;emailreporter2=1&amp;bugidtype=include&amp;bug_id=&amp;changedin=&amp;votes=&amp;chfieldfrom=&amp;chfieldto=Now&amp;chfieldvalue=&amp;product=Ant&amp;component=Other&amp;short_desc=&amp;short_desc_type=allwordssubstr&amp;long_desc=&amp;long_desc_type=allwordssubstr&amp;bug_file_loc=&amp;bug_file_loc_type=allwordssubstr&amp;keywords=&amp;keywords_type=anywords&amp;field0-0-0=noop&amp;type0-0-0=noop&amp;value0-0-0=&amp;cmdtype=doit">Other</a>
-          </td>
-          </tr>
-          <tr>
-          <td><a href="http://nagoya.apache.org/bugzilla/buglist.cgi?bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED&amp;bug_severity=Blocker&amp;bug_severity=Critical&amp;bug_severity=Major&amp;bug_severity=Normal&amp;bug_severity=Minor&amp;email1=&amp;emailtype1=substring&amp;emailassigned_to1=1&amp;email2=&amp;emailtype2=substring&amp;emailreporter2=1&amp;bugidtype=include&amp;bug_id=&amp;changedin=&amp;votes=&amp;chfieldfrom=&amp;chfieldto=Now&amp;chfieldvalue=&amp;product=Ant&amp;component=Other&amp;short_desc=&amp;short_desc_type=allwordssubstr&amp;long_desc=&amp;long_desc_type=allwordssubstr&amp;bug_file_loc=&amp;bug_file_loc_type=allwordssubstr&amp;keywords=&amp;keywords_type=anywords&amp;field0-0-0=noop&amp;type0-0-0=noop&amp;value0-0-0=&amp;cmdtype=doit">- minus Enhancements</a>
-          </td>
-          </tr>
-          <tr>
-          <td><a href="http://nagoya.apache.org/bugzilla/buglist.cgi?bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED&amp;email1=&amp;emailtype1=substring&amp;emailassigned_to1=1&amp;email2=&amp;emailtype2=substring&amp;emailreporter2=1&amp;bugidtype=include&amp;bug_id=&amp;changedin=&amp;votes=&amp;chfieldfrom=&amp;chfieldto=Now&amp;chfieldvalue=&amp;product=Ant&amp;component=Wrapper+Scripts&amp;short_desc=&amp;short_desc_type=allwordssubstr&amp;long_desc=&amp;long_desc_type=allwordssubstr&amp;bug_file_loc=&amp;bug_file_loc_type=allwordssubstr&amp;keywords=&amp;keywords_type=anywords&amp;field0-0-0=noop&amp;type0-0-0=noop&amp;value0-0-0=&amp;cmdtype=doit">Wrapper Scripts</a>
-          </td>
-          </tr>
-          <tr>
-          <td><a href="http://nagoya.apache.org/bugzilla/buglist.cgi?bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED&amp;bug_severity=Blocker&amp;bug_severity=Critical&amp;bug_severity=Major&amp;bug_severity=Normal&amp;bug_severity=Minor&amp;email1=&amp;emailtype1=substring&amp;emailassigned_to1=1&amp;email2=&amp;emailtype2=substring&amp;emailreporter2=1&amp;bugidtype=include&amp;bug_id=&amp;changedin=&amp;votes=&amp;chfieldfrom=&amp;chfieldto=Now&amp;chfieldvalue=&amp;product=Ant&amp;component=Wrapper+Scripts&amp;short_desc=&amp;short_desc_type=allwordssubstr&amp;long_desc=&amp;long_desc_type=allwordssubstr&amp;bug_file_loc=&amp;bug_file_loc_type=allwordssubstr&amp;keywords=&amp;keywords_type=anywords&amp;field0-0-0=noop&amp;type0-0-0=noop&amp;value0-0-0=&amp;cmdtype=doit">- minus Enhancements</a>
-          </td>
-          </tr>
-          <tr>
-          </tr>
-        </table>
-      </subsection>
-    </section>
-  </body>
-</document>
-
diff --git a/xdocs/antnews.xml b/xdocs/antnews.xml
deleted file mode 100644
index ef5f062..0000000
--- a/xdocs/antnews.xml
+++ /dev/null
@@ -1,131 +0,0 @@
-<?xml version="1.0"?>
-<document>
-
-  <properties>
-    <author email="">Conor MacNeill</author>
-    <author email="stefan.bodewig@epost.de">Stefan Bodewig</author>
-    <title>Ant News</title>
-  </properties>
-
-<body>
-  <section name="Ant 1.5Beta1">
-    <h3>Ant 1.5 Beta1 Available !</h3>
-    <p>The first beta version of Ant 1.5 is now available for 
-     <a href="http://jakarta.apache.org/builds/jakarta-ant/release/v1.5Beta1/">
-     download</a>. If you have any feedback on the beta feel free to join the 
-     discussion on the ant-dev and ant-user mailing lists.
-     </p>
-  </section>
-
-  <section name="Ant wins again!">
-    <h3>Apr 29, 2002: Ant wins <em>Software Development</em> magazine&apos;s
-    2002 Productivity Award.</h3>
-    <p>
-    Ant has been awarded a <strong>2002 Productivity Award</strong> by
-    <a href="http://www.sdmagazine.com/"><em>Software Development</em></a>
-    magazine.  Read the
-    <a href="http://www.sdmagazine.com/jolts/press_release_4-26-02.htm">
-    press release</a> for more information and the full list of winners.
-    </p>
-  </section>
-
-  <section name="Ant has won!">
-    <h3>Mar 26, 2002: Ant wins the JavaWorld Editors&apos; Choice
-    Award</h3>
-
-    <p>Ant has won the JavaWorld Editors&apos; Choice Award for
-    <strong>Most Useful Java Community-Developed Technology</strong>.
-    Read the
-    <a href="http://www.javaworld.com/javaworld/jw-03-2002/jw-0326-awards.html
-"> full article</a> -- or jump directly to the bit about
-    <a href="http://www.javaworld.com/javaworld/jw-03-2002/jw-0326-awards-p3.html"> our award</a> <code>:)</code></p>
-  </section>
-  
-  <section name="Java 1.4 Support">
-    <h3>Feb 15, 2002: Java 1.4 Support</h3>
-    <p>
-      Java 1.4 has now been released by Sun. The latest Ant source supports 
-      the new <tt>assert</tt> statement in the compiler task via the <tt>source</tt> 
-      attribute. It also contains a compatibility fix needed for some ant tasks
-      on Java 1.4 over Windows XP. If you have problems running Ant 1.4.1 on WinXP/Java 1.4,
-      please use a recent build or compile your own version from the source tree. 
-    </p>
-  </section>
-  
-  <section name="See our new logo!">
-    <h3>Have a look at our new cool logo!</h3>
-  </section>
-  
-  <section name="Ant 1.4.1">
-  <h3>11 October 2001 Ant 1.4.1 released !</h3>
-  <p>Please visit the 
-     <a href="http://www.apache.org/dist/jakarta/jakarta-ant/release/v1.4.1/">
-     download area</a>. 
-     </p>
-  </section>
-
-  <section name="Ant 2.0 Requirements Collected - Next is Design">
-      <p>A commented version of the collected user requirements is now
-      available <a href="ant2/features.html">here</a> - it is not
-      complete as some details still have to be defined, but it should
-      give you an idea of what Ant2 is going to look like.</p>
-
-      <p>Several details can only be decided in the light of real code
-      and prototypes.  Several people are working on prototypes (that
-      can be found in Ant's CVS module in the proposals directory) and
-      discussion is going on on the Ant-Dev mailing list.</p>
-  </section>
-
-  <section name="Best-Practices Profile of Ant at Sun&apos;s Dot-Com Builder">
-      <p>Sun has released an introductory article on Ant on their
-      Dot-Com Builder site on May&#160;30&#160;2001. See <a
-      href="http://dcb.sun.com/practices/profiles/ant.jsp">http://dcb.sun.com/practices/profiles/ant.jsp</a></p>
-  </section>
-
-  <section name="Ant 2.0 Requirements">
-    <p>Ant has been in use for quite some time and has been used in ways never conceived when it
-       was originally written. While Ant 1.x has continued to sucessfully evolve and grow, there 
-       are a number of limitations and inconsistencies that are now apparent and which need to 
-       be addressed. 
-    </p>
-    
-    <p>
-       As we continue to evolve and enhance Ant 1.x, it is now time to define what Ant 2.0 will
-       encompass. Ant 2.0 will be a major rearchitecting of Ant. It has a number of goals including:
-       <ul>
-         <li>Define the "contract" with build file writers to which Ant will be bound.</li>
-         <li>Define the "contract" between the Ant core and Task writers.</li>
-         <li>Make Ant more easily extendable by allowing additional tasks to be "dropped" in.</li>
-         <li>Allow Ant to function as a component to simplify integration with GUIs and IDEs.</li>
-         <li>Make Ant more regular and logical.</li>
-       </ul>
-       
-       It is expected that Ant 2.0 will break Ant 1.x based build files. The intention is to
-       make this the last time that will happen.
-     </p>
-     
-     <p>
-        To advance the definition of Ant, user requirements are now being accepted on the 
-        Ant-Dev mailing list. Any requirement will be accepted for consideration. The 
-        requirements are being collected into a document which is available 
-        <a href="ant2/requested-features.txt">on-line</a>. New features will be excepted 
-        until March 21st, 2001. At that time, each requirement will be discussed 
-        for inclusion in an Ant 2.0 requirement document.
-      </p>
-      
-      <p>
-        For your reference some of the goals which have shaped the development of Ant 1.x are
-        available <a href="ant2/original-specification.html">here</a>. These continue to be
-        relevant to Ant 2.0.
-      </p>
-      
-      <p>
-        If you want to shape the future of Ant, join the 
-        <a href="http://jakarta.apache.org/site/mail.html">Ant-Dev mailing list</a> and contribute
-        your ideas.
-      </p>
-  </section>
-
-</body>
-</document>
-
diff --git a/xdocs/external.xml b/xdocs/external.xml
deleted file mode 100644
index 6c11b67..0000000
--- a/xdocs/external.xml
+++ /dev/null
@@ -1,820 +0,0 @@
-<?xml version="1.0"?>
-<document>
-
-  <properties>
-    <author email="bodewig@apache.org">Stefan Bodewig</author>
-    <title>External Tools and Tasks</title>
-  </properties>
-
-  <body>
-    
-    <section name="External Tools and Tasks">
-
-      <p>This page lists external resources for Apache Ant: tasks, IDE
-      integration tools, loggers, you name it. If you've written
-      something that should be included, please post all relevant
-      information to one of the mailing lists.</p>
-
-      <p>Nothing listed here is directly supported by the Ant
-      developers, if you encounter any problems with them, please use
-      the contact information.</p>
-
-    </section>
-
-    <section name="Tasks">
-      <subsection name="AJC">
-
-        <p><a href="http://aspectj.org">AspectJ</a> is an
-          aspect-oriented extension to Java.  This task compiles a
-          source tree using the AspectJ compiler -- AJC.</p>
-
-        <table>
-          <tr>
-            <th>Compatibility:</th>
-            <td>Ant 1.3</td>
-          </tr>
-          <tr>
-            <th>URL:</th>
-            <td><a href="http://aspectj.org/dl">http://aspectj.org/dl</a></td>
-          </tr>
-          <tr>
-            <th>Contact:</th>
-            <td><a href="mailto:support@aspectj.org">support@aspectj.org</a></td>
-          </tr>
-          <tr>
-            <th>License:</th>
-            <td>Apache Software License</td>
-          </tr>
-        </table>
-      </subsection>
-
-      <subsection name="Anakia">
-
-        <p>Actually, Anakia is more than just an Ant task, it is a an
-        XML transformation tool based on JDOM, Velocity and Ant.</p>
-
-        <table>
-          <tr>
-            <th>Compatibility:</th>
-            <td>Ant 1.2 and later</td>
-          </tr>
-          <tr>
-            <th>URL:</th>
-            <td><a href="http://jakarta.apache.org/velocity/anakia.html">http://jakarta.apache.org/velocity/anakia.html</a></td>
-          </tr>
-          <tr>
-            <th>Contact:</th>
-            <td><a href="http://jakarta.apache.org/site/mail2.html">Velocity mailing lists</a></td>
-          </tr>
-          <tr>
-            <th>License:</th>
-            <td>Apache Software License</td>
-          </tr>
-        </table>
-      </subsection>
-
-      <subsection name="Checkstyle">
-
-        <p>Checkstyle is a development tool to help programmers write
-        Java code that adheres to a coding standard. Its purpose is to
-        automate the process of checking Java code, and to spare
-        humans of this boring (but important) task.</p>
-
-        <p>Checkstyle can be run via an Ant task or a command line
-        utility.</p>
-
-        <table>
-          <tr>
-            <th>Compatibility:</th>
-            <td>Ant 1.2 to 1.4.1</td>
-          </tr>
-          <tr>
-            <th>URL:</th>
-            <td><a href="http://checkstyle.sourceforge.net/">http://checkstyle.sourceforge.net/</a></td>
-          </tr>
-          <tr>
-            <th>Contact:</th>
-            <td><a href="mailto:checkstyle@puppycrawl.com">Oliver Burn</a></td>
-          </tr>
-          <tr>
-            <th>License:</th>
-            <td>Starting with release 2.0 the license is the GNU
-            Lesser General Public License.  Prior releases were under
-            the GNU General Public License.</td>
-          </tr>
-        </table>
-      </subsection>
-
-      <subsection name="CleanImports">
-        <p>Removes unneeded imports. Formats your import
-        sections. Flags ambiguous imports.</p>
-        <table>
-          <tr>
-            <th>Compatibility:</th>
-            <td>Ant 1.3</td>
-          </tr>
-          <tr>
-            <th>URL:</th>
-            <td><a href="http://www.euronet.nl/users/tomb/cleanImports/index.html">http://www.euronet.nl/users/tomb/cleanImports/index.html</a></td>
-          </tr>
-          <tr>
-            <th>Contact:</th>
-            <td><a href="mailto:tomb@euronet.nl">Tom Brus</a></td>
-          </tr>
-          <tr>
-            <th>License:</th>
-            <td>Apache Software License</td>
-          </tr>
-        </table>
-      </subsection>
-
-      <subsection name="Configure">
-
-        <p>Recursive build support (call ant on every package level,
-        and only build files in that package or in that package and
-        everything below) with seperation of source and output.</p>
-        
-        <p>The task generates build files in any subdirectory (except
-        for CVS-directories) for you. Only place one build.xml file in
-        the top and call target &apos;setup&apos; or
-        &apos;rescan&apos;.</p>
-
-        <table>
-          <tr>
-            <th>Compatibility:</th>
-            <td>Ant 1.2 and 1.3</td>
-          </tr>
-          <tr>
-            <th>URL:</th>
-            <td><a href="http://www.dsdelft.nl/~lemval/ant/">http://www.dsdelft.nl/~lemval/ant/</a></td>
-          </tr>
-          <tr>
-            <th>Contact:</th>
-            <td><a href="mailto:lemval@dsdelft.nl">M.J.P. van Leeuwen</a></td>
-          </tr>
-          <tr>
-            <th>License:</th>
-            <td>License derived from Apache Software License</td>
-          </tr>
-        </table>
-      </subsection>
-
-      <subsection name="Doxygen task">
-        <p>Ant task for running the Doxygen documentation system.</p>
-
-        <table>
-          <tr>
-            <th>Compatibility:</th>
-            <td>Ant 1.1 and later</td>
-          </tr>
-          <tr>
-            <th>URL:</th>
-            <td><a href="http://www.bgw.org/projects/java/ant/">http://www.bgw.org/projects/java/ant/</a></td>
-          </tr>
-          <tr>
-            <th>Contact:</th>
-            <td><a href="mailto:mortis@voicenet.com">Kyle R. Burton</a></td>
-          </tr>
-          <tr>
-            <th>License:</th>
-            <td>Apache Software Foundation License</td>
-          </tr>
-        </table>
-      </subsection>
-
-      <subsection name="GenJar">
-        <p>Builds a JAR file based on class dependencies rather than simply the contents of a directory</p>
-
-        <table>
-          <tr>
-            <th>Compatibility:</th>
-            <td>Ant 1.4 alpha (built after 2001/08/04) and later</td>
-          </tr>
-          <tr>
-            <th>URL:</th>
-            <td><a href="http://www.riggshill.com/projects/genjar/">http://www.riggshill.com/projects/genjar/</a></td>
-          </tr>
-          <tr>
-            <th>Contact:</th>
-            <td><a href="mailto:jake@riggshill.com">John Kohler</a></td>
-          </tr>
-          <tr>
-            <th>License:</th>
-            <td>Apache Software Foundation License</td>
-          </tr>
-        </table>
-      </subsection>
-
-      <subsection name="Importscrubber">
-        <p>Removes unnecessary import statements from a Java source code file.</p>
-
-        <table>
-          <tr>
-            <th>Compatibility:</th>
-            <td>Ant 1.3</td>
-          </tr>
-          <tr>
-            <th>URL:</th>
-            <td><a href="http://importscrubber.sourceforge.net/">http://importscrubber.sourceforge.net/</a></td>
-          </tr>
-          <tr>
-            <th>Contact:</th>
-            <td><a href="mailto:tomcopeland@users.sourceforge.net">Tom Copeland</a></td>
-          </tr>
-          <tr>
-            <th>License:</th>
-            <td>LGPL</td>
-          </tr>
-        </table>
-      </subsection>
-
-      <subsection name="IsDirValidator">
-
-        <p>Checks whether a given directory structure conforms to
-        certain rules that are defined via nested elements of the
-        task.</p>
-
-        <table>
-          <tr>
-            <th>Compatibility:</th>
-            <td>Ant 1.4</td>
-          </tr>
-          <tr>
-            <th>URL:</th>
-            <td><a href="http://isvalidator.sourceforge.net/en/isDirValidator.htm">http://isvalidator.sourceforge.net/en/isDirValidator.htm</a></td>
-          </tr>
-          <tr>
-            <th>Contact:</th>
-            <td><a href="mailto:news@inigoserrano.com">I&#xF1;igo Serrano</a></td>
-          </tr>
-          <tr>
-            <th>License:</th>
-            <td>GNU General Public License</td>
-          </tr>
-        </table>
-      </subsection>
-
-      <subsection name="Jalopy">
-        
-        <p>An Ant Plug-in for the Java Source Code Formatter
-        Jalopy.</p>
-
-        <table>
-          <tr>
-            <th>Compatibility:</th>
-            <td>Ant 1.4</td>
-          </tr>
-          <tr>
-            <th>URL:</th>
-            <td><a href="http://jalopy.sourceforge.net">http://jalopy.sourceforge.net</a></td>
-          </tr>
-          <tr>
-            <th>Contact:</th>
-            <td><a href="mailto:jalopy@hunsicker.de">jalopy@hunsicker.de</a></td>
-          </tr>
-          <tr>
-            <th>License:</th>
-            <td>GNU General Public License</td>
-          </tr>
-        </table>
-      </subsection>
-
-      <subsection name="Javamake">
-
-        <p>A task to compile Java sources and manage class file
-        dependencies. Functionality is equivalent to that of standard
-        Javac and Depend tasks combined, with improved dependency
-        checking.</p>
-
-        <table>
-          <tr>
-            <th>Compatibility:</th>
-            <td>Ant 1.4.1</td>
-          </tr>
-          <tr>
-            <th>URL:</th>
-            <td><a href="http://www.experimentalstuff.com/Technologies/JavaMake/index.html">http://www.experimentalstuff.com/Technologies/JavaMake/index.html</a></td>
-          </tr>
-          <tr>
-            <th>Contact:</th>
-            <td><a href="mailto:Mikhail.Dmitriev@eng.sun.com">Mikhail Dmitriev</a></td>
-          </tr>
-          <tr>
-            <th>License:</th>
-            <td>BSD-like License</td>
-          </tr>
-        </table>
-      </subsection>
-
-      <subsection name="J2ME Ant Tasks">
-
-        <p>There are two different sets of tasks to help build <a
-        href="http://java.sun.com/j2me/">Java 2 Platform, Micro
-        Edition</a> (J2ME) applications.</p>
-        
-        <p>This set supports CLDC and the K Virtual Machine (KVM):</p>
-
-        <table>
-          <tr>
-            <th>Compatibility:</th>
-            <td>Ant 1.3</td>
-          </tr>
-          <tr>
-            <th>URL:</th>
-            <td><a href="http://www.dribin.org/dave/j2me_ant/">http://www.dribin.org/dave/j2me_ant/</a></td>
-          </tr>
-          <tr>
-            <th>Contact:</th>
-            <td><a href="mailto:drib@enteract.com">Dave Dribin</a></td>
-          </tr>
-          <tr>
-            <th>License:</th>
-            <td>Apache Software License</td>
-          </tr>
-        </table>
-
-        <p>And this set works with the J2ME Wireless Toolkit and MIDP
-        for PalmOS:</p>
-
-        <table>
-          <tr>
-            <th>Compatibility:</th>
-            <td>Ant 1.3</td>
-          </tr>
-          <tr>
-            <th>URL:</th>
-            <td><a href="http://www.stampysoft.com/ant/">http://www.stampysoft.com/ant/</a></td>
-          </tr>
-          <tr>
-            <th>Contact:</th>
-            <td><a href="mailto:jeckels@stampysoft.com">Josh Eckels</a></td>
-          </tr>
-          <tr>
-            <th>License:</th>
-            <td>MIT License</td>
-          </tr>
-        </table>
-
-      </subsection>
-
-      <subsection name="javarec">
-
-        <p>Ant tasks that generate record classes for VisualAge for
-        Java from Cobol copy books.</p>
-
-        <table>
-          <tr>
-            <th>Compatibility:</th>
-            <td>Ant 1.4</td>
-          </tr>
-          <tr>
-            <th>URL:</th>
-            <td><a href="http://glezen.org/javarec/">http://glezen.org/javarec/</a></td>
-          </tr>
-          <tr>
-            <th>Contact:</th>
-            <td><a href="mailto:pglezen@us.ibm.com">Paul Glezen</a></td>
-          </tr>
-          <tr>
-            <th>License:</th>
-            <td>Apache Software License</td>
-          </tr>
-        </table>
-      </subsection>
-
-      <subsection name="Styler">
-
-        <p>The styler task makes useful combinations of XSLT transformations
-        easy to specify in an Ant build file. Like the built-in Ant task
-        style, styler can apply a single transformation to a set of XML files.
-        But it can also:</p>
-        <ul>
-          <li>handle multiple transformations, in parallel or pipelined.</li>
-          <li>enable transformations that split or merge files</li>
-          <li>process non-XML files, especially HTML (based on JTidy)</li>
-          <li>apply non-XSLT transformation, especially "regular
-          fragmentations"</li>
-          <li>use any custom XMLReader or XMLFilter class to handle new file
-          formats and transformation techniques.</li>
-        </ul>
-        <table>
-          <tr>
-            <th>Compatibility:</th>
-            <td>Ant 1.4</td>
-          </tr>
-          <tr>
-            <th>URL:</th>
-            <td><a href="http://www.langdale.com.au/styler/">http://www.langdale.com.au/styler/</a></td>
-          </tr>
-          <tr>
-            <th>Contact:</th>
-            <td><a href="mailto:adv@langdale.com.au">Arnold deVos</a></td>
-          </tr>
-          <tr>
-            <th>License:</th>
-            <td>LGPL</td>
-          </tr>
-        </table>
-      </subsection>
-
-      <subsection name="Tidy Imports (Tim)">
-
-        <p>Tim is a handy utility that can be executed on the command
-        line or via Ant that automatically formats your import
-        declarations. Tim is capable of removing unused imports,
-        expanding or collapsing imports and even organising them into
-        pre-determined groups.</p>
-        
-        <table>
-          <tr>
-            <th>Compatibility:</th>
-            <td>Ant 1.3 and later</td>
-          </tr>
-          <tr>
-            <th>URL:</th>
-            <td><a href="http://www.chive.com/tim.htm">http://www.chive.com/tim.htm</a></td>
-          </tr>
-          <tr>
-            <th>Contact:</th>
-            <td><a href="mailto:support@chive.com">support@chive.com</a></td>
-          </tr>
-          <tr>
-            <th>License:</th>
-            <td>Commercial</td>
-          </tr>
-        </table>
-      </subsection>
-
-      <subsection name="TiniAnt">
-
-        <p>TiniAnt is an Ant task to support building applications for
-        the <a href="http://www.ibutton.com/TINI/">TINI</a>.</p>
-        
-        <table>
-          <tr>
-            <th>Compatibility:</th>
-            <td>Ant 1.2 to 1.4.1</td>
-          </tr>
-          <tr>
-            <th>URL:</th>
-            <td><a href="http://tiniant.sourceforge.net/">http://tiniant.sourceforge.net/</a></td>
-          </tr>
-          <tr>
-            <th>Contact:</th>
-            <td><a href="mailto:kelly@ad1440.net">Sean Kelly</a></td>
-          </tr>
-          <tr>
-            <th>License:</th>
-            <td>BSD-like license</td>
-          </tr>
-        </table>
-      </subsection>
-
-      <subsection name="Venus Application Publisher's (Vamp) Ant Task Suite">
-
-        <p>Venus Application Publisher's (Vamp) Ant Task Suite allows
-        you to sign and package your applications into relocatable Web
-        Archives that you can drop into your web server for
-        single-click launching using Java Web Start or into single
-        Java Archive installers that serve up their content through a
-        built-in, multi-threaded, ultra light-weight web server.</p>
-
-        <table>
-          <tr>
-            <th>Compatibility:</th>
-            <td>Ant 1.2 and 1.3</td>
-          </tr>
-          <tr>
-            <th>URL:</th>
-            <td><a href="http://www.geocities.com/vamp201/ant.html">http://www.geocities.com/vamp201/ant.html</a></td>
-          </tr>
-          <tr>
-            <th>Contact:</th>
-            <td><a href="mailto:vamp201@yahoo.com">Gerald Bauer</a></td>
-          </tr>
-          <tr>
-            <th>License:</th>
-            <td>GNU General Public License</td>
-          </tr>
-        </table>
-      </subsection>
-      
-      <subsection name="WOProject">
-
-        <p>WOProject provides a set of tools to work with 
-        <a href="http://webobjects.com/">WebObjects 5.1</a> 
-        independent from platform and IDE. It significantly 
-        improves developer productivity
-        and makes complex project structures more flexible compared to
-        traditional Makefile-based approach.
-        </p>
-        
-        <table>
-          <tr>
-            <th>Compatibility:</th>
-            <td>Ant 1.4</td>
-          </tr>
-          <tr>
-            <th>URL:</th>
-            <td><a href="http://objectstyle.org/woproject/">http://objectstyle.org/woproject/</a></td>
-          </tr>
-          <tr>
-            <th>Contact:</th>
-            <td><a href="mailto:andrus@objectstyle.org">Andrus Adamchik</a></td>
-          </tr>
-          <tr>
-            <th>License:</th>
-            <td>Apache license</td>
-          </tr>
-        </table>
-      </subsection>
-
-      <subsection name="XDoclet">
-
-        <p>XDoclet is an extended Javadoc Doclet engine for use in Ant.
-           It lets you create custom Javadoc @tags and based on those tags 
-           generates source code or other files (such as xml-ish deployment 
-           descriptors). Templates and matching tasks are provided to generate
-           EJB and web application deployment descriptors.
-           </p>
-        
-        <table>
-          <tr>
-            <th>Compatibility:</th>
-            <td>Ant 1.4</td>
-          </tr>
-          <tr>
-            <th>URL:</th>
-            <td><a href="http://sourceforge.net/projects/xdoclet/">http://sourceforge.net/projects/xdoclet/</a></td>
-          </tr>
-          <tr>
-            <th>License:</th>
-            <td>BSD license</td>
-          </tr>
-        </table>
-      </subsection>
-      
-     <subsection name="XmlTask">
-
-        <p>XmlTask provides a simple means to modify XML documents
-        without having to learn XSLT. A simple path reference to an
-        XML node specifies the node you want to change, and how you
-        want to allow XML insertion and removal, or attribute
-        changes. The emphasis is on providing the simplest means to
-        perform common XML replacements</p>
-
-        <table>
-          <tr>
-            <th>Compatibility:</th>
-            <td>Ant 1.4 and later</td>  
-          </tr>
-          <tr>
-            <th>URL:</th>
-            <td><a href="http://www.oopsconsultancy.com/software/xmltask.html">http://www.oopsconsultancy.com/software/xmltask.html</a></td>
-          </tr>
-          <tr>
-            <th>Contact:</th>
-            <td><a href="mailto:xmltask@oopsconsultancy.com">xmltask@oopsconsultancy.com</a></td>
-          </tr>
-          <tr>
-            <th>License:</th>
-            <td>GNU General Public License</td>
-          </tr>
-        </table>
-      </subsection>
-
-    </section>
-
-    <section name="Compiler Implementations">
-      <subsection name="miniRMI &lt;code&gt;&amp;lt;rmic&amp;gt;&lt;/code&gt; implementation">
-
-        <p>miniRMI is a freeware opensource library that serves as a
-        lightweight replacement for the original java.rmi packages and
-        is suitable especially for applets. Ant 1.4+
-        <code>&lt;rmic&gt;</code> adapter included.</p>
-
-        <table>
-          <tr>
-            <th>Compatibility:</th>
-            <td>Ant 1.4 and later</td>
-          </tr>
-          <tr>
-            <th>URL:</th>
-            <td><a href="http://dione.zcu.cz/~toman40/miniRMI/">http://dione.zcu.cz/~toman40/miniRMI/</a></td>
-          </tr>
-          <tr>
-            <th>Contact:</th>
-            <td><a href="mailto:Petr.Toman@pinknet.cz">Petr Toman</a></td>
-          </tr>
-          <tr>
-            <th>License:</th>
-            <td>Gnu Lesser Public License</td>
-          </tr>
-        </table>
-
-      </subsection>
-    </section>
-
-    <section name="IDE and Editor Integration">
-
-      <subsection name="AntFarm">
-
-        <p>A plugin that integrates Ant into the jEdit editor.</p>
-
-        <table>
-          <tr>
-            <th>Compatibility:</th>
-            <td>bundles Ant 1.3</td>
-          </tr>
-          <tr>
-            <th>URL:</th>
-            <td><a href="http://plugins.jedit.org/plugins/AntFarm">http://plugins.jedit.org/plugins/AntFarm</a></td>
-          </tr>
-          <tr>
-            <th>Contact:</th>
-            <td><a href="mailto:jedit-devel@lists.sourceforge.net">jEdit developers mailinglist</a></td>
-          </tr>
-          <tr>
-            <th>License:</th>
-            <td>Apache Software License</td>
-          </tr>
-        </table>
-      </subsection>
-
-      <subsection name="AntMan">
-
-        <p>An AddIn that integrates Ant with the JDeveloper IDE</p>
-
-        <table>
-          <tr>
-            <th>Compatibility:</th>
-            <td>Ant 1.4.1</td>
-          </tr>
-          <tr>
-            <th>URL:</th>
-            <td><a href="http://www.erudra.com/antman/index.html">http://www.erudra.com/antman/index.html</a></td>
-          </tr>
-          <tr>
-            <th>Contact:</th>
-            <td><a href="mailto:ashok@erudra.com">Ashok Sridhar</a></td>
-          </tr>
-          <tr>
-            <th>License:</th>
-            <td>GNU General Public License</td>
-          </tr>
-        </table>
-      </subsection>
-
-      <subsection name="AntRunner">
-
-        <p>An OpenTool that integrates Ant into the JBuilder IDE.</p>
-
-        <table>
-          <tr>
-            <th>Compatibility:</th>
-            <td>Ant 1.2 and 1.3</td>
-          </tr>
-          <tr>
-            <th>URL:</th>
-            <td><a href="http://www.dieter-bogdoll.de/java/AntRunner/">http://www.dieter-bogdoll.de/java/AntRunner/</a></td>
-          </tr>
-          <tr>
-            <th>Contact:</th>
-            <td><a href="mailto:bogdoll@users.sourceforge.net">Dieter Bogdoll</a></td>
-          </tr>
-          <tr>
-            <th>License:</th>
-            <td>GNU General Public License</td>
-          </tr>
-        </table>
-      </subsection>
-
-      <subsection name="AntWork">
-
-        <p>A plugin that integrates Ant into the Jext editor.</p>
-
-        <table>
-          <tr>
-            <th>Compatibility:</th>
-            <td>Ant 1.2 and 1.3</td>
-          </tr>
-          <tr>
-            <th>URL:</th>
-            <td><a href="ftp://jext.sourceforge.net/pub/jext/plugins/AntWork.zip">ftp://jext.sourceforge.net/pub/jext/plugins/AntWork.zip</a></td>
-          </tr>
-          <tr>
-            <th>Contact:</th>
-            <td><a href="mailto:KHartlage@t-online.de">Klaus Hartlage</a></td>
-          </tr>
-          <tr>
-            <th>License:</th>
-            <td>GNU General Public License</td>
-          </tr>
-        </table>
-      </subsection>
-
-      <subsection name="IntelliJ IDEA 2.0">
-
-        <p>Java IDE with refactoring support and Ant integration.</p>
-
-        <table>
-          <tr>
-            <th>Compatibility:</th>
-            <td>bundles Ant 1.3</td>
-          </tr>
-          <tr>
-            <th>URL:</th>
-            <td><a href="http://www.intellij.com/idea/">http://www.intellij.com/idea/</a></td>
-          </tr>
-          <tr>
-            <th>Contact:</th>
-            <td><a href="mailto:support@intellij.com">support@intellij.com</a></td>
-          </tr>
-          <tr>
-            <th>License:</th>
-            <td>Commercial</td>
-          </tr>
-        </table>
-      </subsection>
-
-      <subsection name="JDE(E) 2.2.8">
-
-        <p>The Java Development Environment for Emacs (JDEE) supports
-        Apache Ant as one of three built-in ways to build your
-        applications.</p>
-
-        <table>
-          <tr>
-            <th>Compatibility:</th>
-            <td>Ant 1.2 and later</td>
-          </tr>
-          <tr>
-            <th>URL:</th>
-            <td><a href="http://jde.sunsite.dk/">http://jde.sunsite.dk/</a></td>
-          </tr>
-          <tr>
-            <th>Contact:</th>
-            <td><a href="mailto:jde-subscribe@sunsite.auc.dk">JDEE Mailing list.</a></td>
-          </tr>
-          <tr>
-            <th>License:</th>
-            <td>GNU General Public License</td>
-          </tr>
-        </table>
-      </subsection>
-
-      <subsection name="NetBeans / Forte for Java">
-
-        <p>A module that integrates Ant into the NetBeans or Forte for Java IDEs.</p>
-
-        <table>
-          <tr>
-            <th>Compatibility:</th>
-            <td>bundles Ant 1.4.1</td>
-          </tr>
-          <tr>
-            <th>URL:</th>
-            <td><a href="http://ant.netbeans.org/">http://ant.netbeans.org/</a></td>
-          </tr>
-          <tr>
-            <th>Contact:</th>
-            <td><a href="mailto:nbdev@netbeans.org">nbdev@netbeans.org</a></td>
-          </tr>
-          <tr>
-            <th>License:</th>
-            <td>Sun Public License</td>
-          </tr>
-        </table>
-      </subsection>
-
-      <subsection name="HP RadPak">
-
-        <p>
-        RadPak comes with the (free) HP Bluestone HPAS J2EE server, and is primarily 
-        a GUI tool for packaging and deploying java web and EJB applications
-        as WAR and EAR files. The tool is ant based, and can be used with
-        as a GUI for general ant development, providing form based entry 
-        of task attributes, and an animated display of task
-        execution. 
-        </p>
-
-        <table>
-          <tr>
-            <th>Compatibility:</th>
-            <td>bundles Ant 1.3 and docs; adds a jar of extra tasks
-            to any existing ant installation under ANT_HOME</td>
-          </tr>
-          <tr>
-            <th>URL:</th>
-            <td><a href="http://www.bluestone.com/products/hp-as/">http://www.bluestone.com/products/hp-as/</a></td>
-          </tr>
-          <tr>
-            <th>License:</th>
-            <td>Proprietary but free to download</td>
-          </tr>
-        </table>
-      </subsection>
-    </section>
-    
-  </body>
-</document>
diff --git a/xdocs/faq.xml b/xdocs/faq.xml
deleted file mode 100644
index c891770..0000000
--- a/xdocs/faq.xml
+++ /dev/null
@@ -1,1072 +0,0 @@
-<?xml version="1.0"?>
-<document>
-
-  <properties>
-    <author email="bodewig@apache.org">Stefan Bodewig</author>
-    <title>Frequently Asked Questions</title>
-  </properties>
-
-  <faqsection title="About this FAQ">
-    <faq id="latest-version">
-      <question>Where do I find the latest version of this
-        document?</question>
-      <answer>
-        <p>The latest version can always be found at Ant&apos;s homepage 
-          <a href="http://jakarta.apache.org/ant/faq.html">http://jakarta.apache.org/ant/faq.html</a>.</p>
-      </answer>
-    </faq>
-
-    <faq id="adding-faqs">
-      <question>How can I contribute to this FAQ?</question>
-      <answer>
-        <p>The page you are looking it is generated from 
-          <a href="http://cvs.apache.org/viewcvs.cgi/~checkout~/jakarta-ant/xdocs/faq.xml">this</a>
-          document.  If you want to add a new question, please submit
-          a patch against this document to one of Ant&apos;s mailing lists;
-          hopefully, the structure is self-explanatory.</p>
-        
-        <p>If you don&apos;t know how to create a patch, see the patches
-          section of <a href="http://jakarta.apache.org/site/source.html">this
-          page</a>.</p>
-      </answer>
-    </faq>
-
-    <faq id="creating-faq">
-      <question>How do you create the HTML version of this
-        FAQ?</question>
-
-      <answer>
-        <p>We use 
-        <a href="http://jakarta.apache.org/velocity/anakia.html">Anakia</a>
-        to render the HTML version from the original XML file.</p>
-
-        <p>The Velocity stylesheets used to process the XML files can
-        be found in the <code>xdocs/stylesheets</code> subdirectory of
-        Ant&apos;s CVS repository - the build file <code>docs.xml</code> is
-        used to drive Anakia.  This file assumes that you have the
-        <code>jakarta-site2</code> module checked out from CVS as
-        well, but if you follow the instruction from Anakia&apos;s
-        homepage, you should get it to work without that.  Just make
-        sure all required jars are in the task&apos;s classpath.</p>
-      </answer>
-    </faq>
-
-  </faqsection>
-
-  <faqsection title="General">
-    <faq id="what-is-ant">
-      <question>What is Apache Ant?</question>
-      <answer>
-        <p> Ant is a Java-based build tool. In theory, it is kind of
-        like Make, without Make&apos;s wrinkles and with the full
-        portability of pure Java code.</p>
-      </answer>
-    </faq>
-
-    <faq id="ant-name">
-      <question>Why do you call it Ant?</question>
-      <answer>
-
-        <p>According to Ant&apos;s original author, James Duncan
-        Davidson, the name is an acronym for &quot;Another Neat
-        Tool&quot;.</p>
-        
-        <p>Later explanations go along the lines of &quot;ants 
-        do an extremely good job at building things&quot;, or
-        &quot;ants are very small and can carry a weight dozens of times
-        their own&quot; - describing what Ant is intended to
-        be.</p>
-      </answer>
-    </faq>
-
-    <faq id="history">
-      <question>Tell us a little bit about Ant&apos;s history.</question>
-      <answer>
-
-        <p>Initially, Ant was part of the Tomcat code base, when it was
-        donated to the Apache Software Foundation. It was
-        created by James Duncan Davidson, who is also the original
-        author of Tomcat. Ant was there to build Tomcat, nothing
-        else.</p>
-
-        <p>Soon thereafter, several open source Java projects realized
-        that Ant could solve the problems they had with Makefiles.
-        Starting with the projects hosted at Jakarta and the old Java
-        Apache project, Ant spread like a virus and is now the build
-        tool of choice for a lot of projects.</p>
-
-        <p>In January 2000, Ant was moved to a separate CVS module and
-        was promoted to a project of its own, independent of
-        Tomcat, and became Apache Ant.</p>
-
-        <p>The first version of Ant that was exposed to a larger audience
-        was the one that shipped with Tomcat&apos;s 3.1 release on 19 April
-        2000.  This version has later been referred to as Ant
-        0.3.1.</p>
-
-        <p>The first official release of Ant as a stand-alone product was
-        Ant 1.1, released on 19 July 2000.  The complete release
-        history:</p>
-
-        <table>
-          <tr>
-            <th>Ant Version</th>
-            <th>Release Date</th>
-          </tr>
-
-          <tr>
-            <td>1.1</td>
-            <td>19 July 2000</td>
-          </tr>
-
-          <tr>
-            <td>1.2</td>
-            <td>24 October 2000</td>
-          </tr>
-
-          <tr>
-            <td>1.3</td>
-            <td>3 March 2001</td>
-          </tr>
-
-          <tr>
-            <td>1.4</td>
-            <td>3 September 2001</td>
-          </tr>
-
-          <tr>
-            <td>1.4.1</td>
-            <td>11 October 2001</td>
-          </tr>
-        </table>
-      </answer>
-    </faq>
-
-  </faqsection>
-
-  <faqsection title="Installation">
-    <faq id="no-gnu-tar">
-      <question>I get checksum errors when I try to extract the
-      <code>tar.gz</code> distribution file. Why?</question>
-      <answer>
-        <p>Ant&apos;s distribution contains file names that are longer
-        than 100 characters, which is not supported by the standard
-        tar file format. Several different implementations of tar use
-        different and incompatible ways to work around this
-        restriction.</p>
-
-        <p>Ant&apos;s &lt;tar&gt; task can create tar archives that use
-        the GNU tar extension, and this has been used when putting
-        together the distribution. If you are using a different
-        version of tar (for example, the one shipping with Solaris),
-        you cannot use it to extract the archive.</p>
-
-        <p>The solution is to either install GNU tar, which can be
-        found <a href="http://www.gnu.org/software/tar/tar.html">here</a>,
-        or use the zip archive instead (you can extract it using
-        <code>jar xf</code>).</p>
-      </answer>
-    </faq>
-  </faqsection>
-
-  <faqsection title="Using Ant">
-    <faq id="always-recompiles">
-      <question>Why does Ant always recompile all my Java files?</question>
-      <answer>
-
-        <p>In order to find out which files should be compiled, Ant
-        compares the timestamps of the source files to those of the
-        resulting <code>.class</code> files.  Opening all source files
-        to find out which package they belong to would be very
-        inefficient. Instead, Ant expects you to place your
-        source files in a directory hierarchy that mirrors your
-        package hierarchy and to point Ant to the root of this
-        directory tree with the <code>srcdir</code> attribute.</p>
-
-        <p>Say you have <code>&lt;javac srcdir=&quot;src&quot;
-        destdir=&quot;dest&quot;/&gt;</code>.  If Ant finds a file
-        <code>src/a/b/C.java</code>, it expects it to be in package
-        <code>a.b</code> so that the resulting <code>.class</code>
-        file is going to be <code>dest/a/b/C.class</code>.</p>
-
-        <p>If your source-tree directory structure does not match your
-        package structure, Ant&apos;s heuristic won&apos;t work, and
-        it will recompile classes that are up-to-date.  Ant is not the
-        only tool that expects a source-tree layout like this.</p>
-
-        <p>If you have Java source files that aren&apos;t declared to
-        be part of any package, you can still use the <code>&lt;javac&gt;</code>
-        task to compile these files correctly - just set the
-        <code>srcdir</code> and <code>destdir</code> attributes to
-        the actual directory the source
-        files live in and the directory the class files should go into,
-        respectively.</p>
-
-      </answer>
-    </faq>
-
-    <faq id="passing-cli-args">
-      <question>How do I pass parameters from the command line to my
-        build file?</question>
-      <answer>
-
-        <p>Use properties. Using <code>ant
-        -D<em>name</em>=<em>value</em></code> lets you define values for
-        properties on the Ant command line. These properties can then be
-        used within your build file as
-        any normal property: <code>${<em>name</em>}</code> will put in
-        <code><em>value</em></code>.</p>
-
-      </answer>
-    </faq>
-
-    <faq id="jikes-switches">
-      <question>How can I use Jikes-specific command-line
-        switches?</question>
-
-      <answer>
-
-        <p>A couple of switches are supported via &quot;magic&quot;
-          properties:</p>
-
-        <table>
-          <tr>
-            <th>switch</th>
-            <th>property</th>
-            <th>default</th>
-          </tr>
-
-          <tr>
-            <td>+E</td>
-            <td>build.compiler.emacs</td>
-            <td>false == not set</td>
-          </tr>
-
-          <tr>
-            <td>+P</td>
-            <td>build.compiler.pedantic</td>
-            <td>false == not set</td>
-          </tr>
-
-          <tr>
-            <td>+F</td>
-            <td>build.compiler.fulldepend</td>
-            <td>false == not set</td>
-          </tr>
-
-          <tr>
-            <td><strong>(Only for Ant &lt; 1.4; replaced by the
-                <code><strong>nowarn</strong></code>
-                attribute of the <code><strong>&lt;javac&gt;</strong></code>
-                task after that.)</strong><br></br>-nowarn</td>
-            <td>build.compiler.warnings</td>
-            <td>true == not set</td>
-          </tr>
-
-        </table>
-
-      </answer>
-    </faq>
-
-    <faq id="shell-redirect-1">
-      <question>How do I include a &lt; character in my command-line arguments?</question>
-      <answer>
-        <p>The short answer is "Use: <code>&amp;lt;</code>".</p>
-
-        <p>The long answer is that this probably won&apos;t do what you
-        want anyway (see <a href="#shell-redirect-2">the next
-        section</a>).</p>
-      </answer>
-    </faq>
-
-    <faq id="shell-redirect-2">
-      <question>How do I redirect standard input or standard output
-        in the <code>&lt;exec&gt;</code> task?</question>
-      <answer>
-        <p>Say you want to redirect the standard input stream of the
-        <code>cat</code> command to read from a file, something
-        like:</p>
-
-        <source><![CDATA[
-shell-prompt> cat < foo
-]]></source>
-        
-        <p>and try to translate it into</p>
-
-        <source><![CDATA[
-<exec executable="cat">
-  <arg value="&lt;" />
-  <arg value="foo" />
-</exec>
-]]></source>
-
-        <p>This will not do what you expect.  The input redirection is
-        performed by your shell, not the command itself, so this
-        should read:</p>
-        
-        <source><![CDATA[
-<exec executable="/bin/sh">
-  <arg value="-c" />
-  <arg value="cat &lt; foo" />
-</exec>
-]]></source>
-
-        <p>Note that you must use the <code>value</code> attribute of
-        <code>&lt;arg&gt;</code> in the last element, in order to have
-        the command passed as a single, quoted argument. Alternatively,
-        you can use:</p>
-        <source><![CDATA[
-<exec executable="/bin/sh">
-  <arg line='-c "cat &lt; foo"'/>
-</exec>
-]]></source>
-
-        <p>Note the double-quotes nested inside the single-quotes.</p>
-
-      </answer>
-    </faq>
-
-    <faq id="batch-shell-execute">
-      <question>How do I execute a batch file or shell script from Ant?</question>
-      <answer>
-
-        <p>On native Unix systems, you should be able to run shell scripts
-           directly. On systems running a Unix-type shell (for example, Cygwin
-           on Windows) execute the (command) shell instead - <code>cmd</code>
-           for batch files, <code>sh</code> for shell scripts - then pass the
-           batch file or shell script (plus any arguments to the script)
-           as a single command, using the <code>/c</code> or
-           <code>-c</code> switch, respectively. See
-           <a href="#shell-redirect-2">the above section</a>
-           for example <code>&lt;exec&gt;</code> tasks
-           executing <code>sh</code>. For batch files, use something like:</p>
-        <source><![CDATA[
-<exec dir="." executable="cmd" os="Windows NT">
-  <arg line="/c test.bat"/>
-</exec>
-]]></source>
-
-      </answer>
-    </faq>
-
-    <faq id="defaultexcludes">
-
-      <question>I&apos;ve used a <code>&lt;delete&gt;</code> task to delete
-      unwanted
-      SourceSafe control files (CVS files, editor backup files, etc.), but
-      it doesn&apos;t seem to work; the files never get deleted. What&apos;s
-      wrong?</question>
-
-      <answer>
-        <p>This is probably happening because, by default, Ant excludes
-        SourceSafe control files (<code>vssver.scc</code>) and certain other
-        files from FileSets.</p>
-
-        <p>Here&apos;s what you probably did:</p>
-
-
-	<source><![CDATA[
-<delete>
-  <fileset dir="${build.src}" includes="**/vssver.scc"/>
-</delete>
-]]></source>
-
-        <p>You need to switch off the default exclusions,
-           and it will work:</p>
-	<source><![CDATA[
-<delete>
-  <fileset dir="${build.src}" includes="**/vssver.scc"
-           defaultexcludes="no"/>
-</delete>
-]]></source>
-        
-        <p>For a complete listing of the patterns that are excluded
-        by default, see <a href="manual/dirtasks.html#defaultexcludes">the user
-        manual</a>.</p>
-
-      </answer>
-    </faq>
-
-    <faq id="multi-conditions">
-      <question>I want to execute a particular target only if
-        multiple conditions are true.</question>
-
-      <answer>
-        <p>There are actually several answers to this question.</p>
-
-        <p>If you have only one set and one unset property to test,
-        you can specify both an <code>if</code> and an <code>unless</code>
-        attribute for the target, and they will act as if they
-        are &quot;anded&quot; together.</p>
-
-        <p>If you are using a version of Ant 1.3 or earlier, the
-        way to work with all other cases is to chain targets together
-        to determine the specific state you want to test for.</p>
-
-        <p>To see how this works, assume you have three properties:
-        <code>prop1</code>, <code>prop2</code>, and <code>prop3</code>.
-        You want to test that <code>prop1</code> and <code>prop2</code> 
-        are set, and that <code>prop3</code> is not. If the condition
-        holds true you want to echo &quot;yes&quot;.</p>
-
-        <p>Here is the implementation in Ant 1.3 and earlier:</p>
-
-        <source><![CDATA[
-<target name="cond" depends="cond-if"/>
-
-<target name="cond-if" if="prop1">
-  <antcall target="cond-if-2"/>
-</target>
-
-<target name="cond-if-2" if="prop2">
-  <antcall target="cond-if-3"/>
-</target>
-
-<target name="cond-if-3" unless="prop3">
-  <echo message="yes"/>
-</target>
-]]></source>
-
-        <p>Note: <code>&lt;antcall&gt;</code> tasks do <em>not</em> pass
-        property changes back up to the environment they were called
-        from, so you would&apos;nt be able to, for example, set a
-        <code>result</code> property in the <code>cond-if-3</code> target,
-        then do
-        <code>&lt;echo message=&quot;result is ${result}&quot;/&gt;</code>
-        in the <code>cond</code> target.</p>
-
-        <p>Starting with Ant 1.4, you can use the
-        <code>&lt;condition&gt;</code> task.</p>
-
-        <source><![CDATA[
-<target name="cond" depends="cond-if,cond-else"/>
-
-<target name="check-cond">
-  <condition property="cond-is-true">
-    <and>
-      <not>
-        <equals arg1="${prop1}" arg2="$${prop1}" />
-      </not>
-      <not>
-        <equals arg1="${prop2}" arg2="$${prop2}" />
-      </not>
-      <equals arg1="${prop3}" arg2="$${prop3}" />
-    </and>
-  </condition>
-</target>
-
-<target name="cond-if" depends="check-cond" if="cond-is-true">
-  <echo message="yes"/>
-</target>
-
-<target name="cond-else" depends="check-cond" unless="cond-is-true">
-  <echo message="no"/>
-</target>
-]]></source>
-
-        <p>This version takes advantage of two things:</p>
-
-        <ul>
-          <li>If a property <code>a</code> has not been set,
-          <code>${a}</code> will evaluate to <code>${a}</code>.</li>
-
-          <li>To get a literal <code>$</code> in Ant, you have to
-          escape it with another <code>$</code> - this will also break
-          the special treatment of the <code>${</code> sequence.</li>
-        </ul>
-
-        <p>Because testing for a literal <code>${property}</code> string
-        isn&apos;t all that readable or easy to understand,
-        post-1.4.1 Ant introduces the <code>&lt;isset&gt;</code> element 
-	to the <code>&lt;condition&gt;</code> task.</p>
-
-        <p>Here is the previous example done using
-        <code>&lt;isset&gt;</code>:</p>
-
-        <source><![CDATA[
-<target name="check-cond">
-  <condition property="cond-is-true">
-    <and>
-      <isset property="prop1"/>
-      <isset property="prop2"/>
-      <not>
-        <isset property="prop3"/>
-      </not>
-    </and>
-  </condition>
-</target>
-]]></source>
-
-        <p>The last option is to use a scripting language to set the
-        properties. This can be particularly handy when you need much
-        finer control than the simple conditions shown here but, of
-        course, comes with the overhead of adding JAR files to support
-        the language, to say nothing of the added maintenance in requiring
-        two languages to implement a single system. See the
-        <a href="manual/OptionalTasks/script.html">
-        <code>&lt;script&gt;</code> task documentation</a> for more
-        details.</p>
-      </answer>
-    </faq>
-    
-    <faq id="stop-dependency">
-      <question>I have a target I want to skip if a property is set,
-      so I have <code>unless=&quot;property&quot;</code> as an attribute 
-      of the target, but all the targets this target 
-      depends on are still executed. Why?</question>
-
-      <answer>
-        <p>The list of dependencies is generated by Ant before any of the
-        targets are run. This allows dependent targets, such as an 
-        <code>init</code> target, to set properties that can control the 
-       	execution of the targets higher in the dependency graph. This 
-      	is a good thing.</p>
-
-        <p>However, when your dependencies break down the
-        higher-level task
-        into several smaller steps, this behaviour becomes 
-        counter-intuitive. There are a couple of solutions available:
-        </p>
-
-        <ol>
-          <li>Put the same condition on each of the dependent targets.</li>
-	  
-          <li>Execute the steps using <code>&lt;antcall&gt;</code>,
-          instead of specifying them inside the <code>depends</code>
-          attribute.</li>
-        </ol>
-	
-      </answer>
-    </faq>
-    
-    <faq id="include-order">
-      <question>In my <code>&lt;fileset&gt;</code>, I&apos;ve put in an
-      <code>&lt;exclude&gt;</code> of all files followed by an
-      <code>&lt;include&gt;</code> of just the files I want, but it
-      isn&apos;t giving me any files at all. What&apos;s wrong?
-      </question>
-
-      <answer>
-        <p>The order of the <code>&lt;include&gt;</code> and
-        <code>&lt;exclude&gt;</code> tags within a <code>&lt;fileset&gt;</code>
-        is ignored when the FileSet is created. Instead, all of the
-        <code>&lt;include&gt;</code> elements are processed together,
-        followed by all of the <code>&lt;exclude&gt;</code>
-        elements. This means that the <code>&lt;exclude&gt;</code>
-        elements only apply to the file list produced by the
-        <code>&lt;include&gt;</code> elements.</p>
-
-	<p>To get the files you want, focus on just the
-	<code>&lt;include&gt;</code> patterns that would be necessary
-	to get them. If you find you need to trim the list that the
-  <code>&lt;include&gt;</code> elements
-	produce, then use <code>&lt;exclude&gt;</code> elements.</p>
-      </answer>
-    </faq>
-    
-    <faq id="encoding">
-      <question>How can I include national characters like German
-        umlauts in my build file?</question>
-
-      <answer>
-        <p>You need to tell the XML parser which character encoding
-        your build file uses, this is done inside the <a
-        href="http://www.w3.org/TR/2000/REC-xml-20001006#sec-prolog-dtd">XML
-        declaration</a>.</p>  
-
-        <p>By default the parser assumes you are using the UTF-8
-        encoding instead of your platform's default.  For most western
-        european contries you should set the encoding to
-        <code>ISO-8859-1</code>.  To do so, make the very first line
-        of you build file read like</p>
-
-        <source><![CDATA[
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-]]></source>
-      </answer>
-    </faq>
-  </faqsection>
-
-  <faqsection title="Ant and IDEs/Editors">
-    <faq id="integration">
-      <question>Is Ant supported by my IDE/Editor?</question>
-      <answer>
-        <p>See the <a href="external.html#IDE and Editor Integration">section 
-        on IDE integration</a> on our External Tools and Tasks page.</p>
-      </answer>
-    </faq>
-
-    <faq id="emacs-mode">
-      <question>Why doesn&apos;t (X)Emacs/vi/MacOS X&apos;s project builder
-      correctly parse the error messages generated by Ant?</question>
-      <answer>
-
-        <p>Ant adds a &quot;banner&quot; with the name of the current
-        task in front of all logging messages - and there are no built-in
-        regular expressions in your editor that would account for
-        this.</p>
-
-        <p>You can disable this banner by invoking Ant with the
-        <code>-emacs</code> switch. Alternatively, you can add the
-        following snippet to your <code>.emacs</code> to make Emacs
-        understand Ant&apos;s output.</p>
-
-        <source><![CDATA[
-(require 'compile)
-(setq compilation-error-regexp-alist
-  (append (list 
-     ;; works for jikes
-     '("^\\s-*\\[[^]]*\\]\\s-*\\(.+\\):\\([0-9]+\\):\\([0-9]+\\):[0-9]+:[0-9]+:" 1 2 3)
-     ;; works for javac 
-     '("^\\s-*\\[[^]]*\\]\\s-*\\(.+\\):\\([0-9]+\\):" 1 2))
-  compilation-error-regexp-alist))
-]]></source>
-
-        <p>Yet another alternative that preserves most of Ant&apos;s
-        formatting is to pipe Ant&apos;s output through the following Perl
-        script by Dirk-Willem van Gulik:</p>
-
-        <source><![CDATA[
-#!/usr/bin/perl
-#
-# May 2001 dirkx@apache.org - remove any
-# [foo] lines from the output; keeping
-# spacing more or less there.
-#
-$|=1;
-while(<STDIN>) {
-	if (s/^(\s+)\[(\w+)\]//) {
-		if ($2 ne $last) {
-			print "$1\[$2\]";
-			$s = ' ' x length($2);
-		} else {
-			print "$1 $s ";
-		};
-		$last = $2;
-	};
-	print;
-};
-]]></source>
-
-      </answer>
-    </faq>
-  </faqsection>
-
-  <faqsection title="Advanced Issues">
-    <faq id="dtd">
-      <question>Is there a DTD that I can use to validate my build
-      files?</question>
-
-      <answer>
-
-        <p>An incomplete DTD can be created by the
-          <code>&lt;antstructure&gt;</code> task - but this one
-          has a few problems:</p>
-
-          <ul>
-            <li>It doesn&apos;t know about required attributes.  Only
-            manual tweaking of this file can help here.</li>
-          
-            <li>It is not complete - if you add new tasks via
-            <code>&lt;taskdef&gt;</code> it won&apos;t know about it.  See
-            <a href="http://www.sdv.fr/pages/casa/html/ant-dtd.en.html">this
-            page</a> by Michel Casabianca for a solution to this
-            problem.  Note that the DTD you can download at this page
-            is based on Ant 0.3.1.</li>
-
-            <li>It may even be an invalid DTD.  As Ant allows tasks
-            writers to define arbitrary elements, name collisions will
-            happen quite frequently - if your version of Ant contains
-            the optional <code>&lt;test&gt;</code> and
-            <code>&lt;junit&gt;</code> tasks, there are two XML
-            elements named <code>test</code> (the task and the nested child
-            element of <code>&lt;junit&gt;</code>) with different attribute
-            lists.  This problem cannot be solved; DTDs don&apos;t give a
-            syntax rich enough to support this.</li>
-          </ul>
-      </answer>
-    </faq>
-
-    <faq id="xml-entity-include">
-      <question>How do I include an XML snippet in my build file?</question>
-      <answer>
-        <p>You can use XML&apos;s way of including external files and let
-        the parser do the job for Ant:</p>
-
-        <source><![CDATA[
-<?xml version="1.0"?>
-
-<!DOCTYPE project [
-    <!ENTITY common SYSTEM "file:./common.xml">
-]>
-
-<project name="test" default="test" basedir=".">
-
-  <target name="setup">
-    ...
-  </target>
-
-  &common;
-
-  ...
-
-</project>
-]]></source>
-
-        <p>will literally include the contents of <code>common.xml</code> where
-        you&apos;ve placed the <code>&amp;common;</code> entity.</p>
-
-        <p>In combination with a DTD, this would look like this:</p>
-
-        <source><![CDATA[
-<!DOCTYPE project PUBLIC "-//ANT//DTD project//EN" "file:./ant.dtd" [
-   <!ENTITY include SYSTEM "file:./header.xml">
-]>
-]]></source>
-      </answer>
-    </faq>
-
-    <faq id="mail-logger">
-      <question>How do I send an email with the result of my build
-        process?</question>
-
-      <answer>
-
-        <p>If you are using a nightly build of Ant 1.5 after
-        2001-12-14, you can use the built-in MailLogger:</p>
-
-        <source><![CDATA[
-         ant -logger org.apache.tools.ant.listener.MailLogger
-]]></source>
-
-        <p>See the <a href="http://cvs.apache.org/viewcvs/~checkout~/jakarta-ant/docs/manual/listeners.html?content-type=text/html">Listeners
-        &amp; Loggers</a> documentation for details on the properties
-        required.</p>
-
-        <p>For older versions of Ant, you can use a custom
-        BuildListener that sends out an email
-        in the buildFinished() method.  Will Glozer
-        &lt;will.glozer@jda.com&gt; has written such a listener based
-        on <a href="http://java.sun.com/products/javamail/">JavaMail</a>. 
-        The source is:</p>
-
-        <source><![CDATA[
-import java.io.*;
-import java.util.*;
-import javax.mail.*;
-import javax.mail.internet.*;
-import org.apache.tools.ant.*;
-
-/**
- * A simple listener that waits for a build to finish and sends an email
- * of the results.  The settings are stored in "monitor.properties" and
- * are fairly self explanatory.
- *
- * @author      Will Glozer
- * @version     1.05a 09/06/2000
- */
-public class BuildMonitor implements BuildListener {
-    protected Properties props;
-
-    /**
-     * Create a new BuildMonitor.
-     */
-    public BuildMonitor() throws Exception {
-        props = new Properties();
-        InputStream is = getClass().getResourceAsStream("monitor.properties");
-        props.load(is);
-        is.close();
-    }
-
-    public void buildStarted(BuildEvent e) {
-    }
-
-    /**
-     * Determine the status of the build and the actions to follow, now that
-     * the build has completed.
-     *
-     * @param       e       Event describing the build tatus.
-     */
-    public void buildFinished(BuildEvent e) {
-        Throwable th = e.getException();
-        String status = (th != null) ? "failed" : "succeeded";
-        
-        try {
-            String key = "build." + status;
-            if (props.getProperty(key + ".notify").equalsIgnoreCase("false")) {
-                    return;
-            }
-            
-            Session session = Session.getDefaultInstance(props, null);
-
-            MimeMessage message = new MimeMessage(session);
-            message.addRecipients(Message.RecipientType.TO, parseAddresses(
-                props.getProperty(key + ".email.to")));
-            message.setSubject(props.getProperty(key + ".email.subject"));
-
-            BufferedReader br = new BufferedReader(new FileReader(
-                props.getProperty("build.log")));
-            StringWriter sw = new StringWriter();
-            
-            String line = br.readLine();
-            while (line != null) {
-                sw.write(line);
-                sw.write("\n");
-                line = br.readLine();
-            }
-            br.close();
-            
-            message.setText(sw.toString(), "UTF-8");
-            sw.close();
-            
-            Transport transport = session.getTransport();
-            transport.connect();
-            transport.send(message);
-            transport.close();
-        } catch (Exception ex) {
-            System.out.println("BuildMonitor failed to send email!");
-            ex.printStackTrace();
-        }
-    }
-
-    /**
-     * Parse a comma separated list of internet email addresses.
-     *
-     * @param       s       The list of addresses.
-     * @return      Array of Addresses.
-     */
-    protected Address[] parseAddresses(String s) throws Exception {
-        StringTokenizer st = new StringTokenizer(s, ",");
-        Address[] addrs = new Address[st.countTokens()];
-
-        for (int i = 0; i < addrs.length; i++) {
-            addrs[i] = new InternetAddress(st.nextToken());
-        }
-        return addrs;
-    }
-
-    public void messageLogged(BuildEvent e) {
-    }
-
-    public void targetStarted(BuildEvent e) {
-    }
-
-    public void targetFinished(BuildEvent e) {
-    }
-
-    public void taskStarted(BuildEvent e) {        
-    }
-
-    public void taskFinished(BuildEvent e) {
-    }
-}
-]]></source>
-          
-      <p>With a <code>monitor.properties</code> like this:</p>
-
-        <source><![CDATA[
-# configuration for build monitor
-
-mail.transport.protocol=smtp
-mail.smtp.host=<host>
-mail.from=Will Glozer <will.glozer@jda.com>
-
-build.log=build.log
-
-build.failed.notify=true
-build.failed.email.to=will.glozer@jda.com
-build.failed.email.subject=Nightly build failed!
-
-build.succeeded.notify=true
-build.succeeded.email.to=will.glozer@jda.com
-build.succeeded.email.subject=Nightly build succeeded!
-]]></source>
-
-        <p><code>monitor.properties</code> should be placed right next
-        to your compiled <code>BuildMonitor.class</code>.  To use it,
-        invoke Ant like:</p>
-        
-        <source><![CDATA[
-ant -listener BuildMonitor -logfile build.log
-]]></source>
-
-        <p>Make sure that <code>mail.jar</code> from JavaMail and
-        <code>activation.jar</code> from the 
-        <a href="http://java.sun.com/products/javabeans/glasgow/jaf.html">Java
-        Beans Activation Framework</a> are in your <code>CLASSPATH</code>.</p>
-
-      </answer>
-    </faq>
-
-    <faq id="listener-properties">
-      <question>How do I get at the properties that Ant was running
-      with from inside BuildListener?</question>
-
-      <answer>
-        <p>You can get at a hashtable with all the properties that Ant
-        has been using through the BuildEvent parameter. For
-        example:</p>
-
-        <source><![CDATA[
-public void buildFinished(BuildEvent e) {
-    Hashtable table = e.getProject().getProperties();
-    String buildpath = (String)table.get("build.path");
-    ...
-}
-]]></source>
-
-        <p>This is more accurate than just reading the same property
-        files that your project does, since it will give the correct
-        results for properties that were specified on the Ant command line.</p>
-      </answer>
-    </faq>
-    
-  </faqsection>
-
-  <faqsection title="Known Problems">
-    <faq id="remove-cr">
-      <question>&lt;chmod&gt; or &lt;exec&gt; doesn&apos;t work in Ant
-        1.3 on Unix</question>
-      <answer>
-
-        <p>The <code>antRun</code> script in <code>ANT_HOME/bin</code>
-        has DOS instead of Unix line endings; you must remove the
-        carriage-return characters from this file.  This can be done by
-        using Ant&apos;s <code>&lt;fixcrlf&gt;</code> task
-        or something like:</p>
-
-        <source><![CDATA[
-tr -d '\r' < $ANT_HOME/bin/antRun > /tmp/foo
-mv /tmp/foo $ANT_HOME/bin/antRun
-]]></source>
-      </answer>
-    </faq>
-
-    <faq id="javadoc-cannot-execute">
-      <question>JavaDoc failed: java.io.IOException: javadoc: cannot execute</question>
-      <answer>
-        <p>There is a bug in the Solaris reference implementation of
-        the JDK (see <a href="http://developer.java.sun.com/developer/bugParade/bugs/4230399.html">http://developer.java.sun.com/developer/bugParade/bugs/4230399.html</a>).
-        This also appears to be true under Linux. Moving the JDK to
-        the front of the PATH fixes the problem.</p>
-      </answer>
-    </faq>
-
-    <faq id="delegating-classloader">
-      <question>&lt;style&gt; or &lt;junit&gt; ignores my
-      &lt;classpath&gt;</question>
-      
-      <answer>
-        <p>These tasks don&apos;t ignore your classpath setting, you
-        are facing a common problem with delegating classloaders.</p>
-
-        <p>First of all let&apos;s state that Ant adds all
-        <code>.jar</code> files from <code>ANT_HOME/lib</code> to
-        <code>CLASSPATH</code>, therefore &quot;in
-        <code>CLASSPATH</code>&quot; shall mean &quot;either in your
-        <code>CLASSPATH</code> environment variable or
-        <code>ANT_HOME/lib</code>&quot; for the rest of this
-        answer.</p>
-
-        <p>This question collects a common type of problem: A task
-        needs an external library and it has a nested classpath
-        element so that you can point it to this external library, but
-        that doesn&apos;t work unless you put the external library into the
-        <code>CLASSPATH</code>.</p>
-
-        <p>The root of the problem is that the class that needs the
-        external library is on the <code>CLASSPATH</code>.</p>
-
-        <p>When you specify a nested <code>&lt;classpath&gt;</code> in
-        Ant, Ant creates a new class loader that uses the path you
-        have specified.  It then tries to load additional classes from
-        this classloader.</p>
-
-        <p>In most cases - for example the two cases above - Ant
-        doesn&apos;t load the external library directly, it is the loaded
-        class that does so.</p>
-
-        <p>In the case of <code>&lt;junit&gt;</code> it is the task
-        implementation itself and in the case of
-        <code>&lt;style&gt;</code> it is the implementation of the
-        <code>org.apache.tools.ant.taskdefs.XSLTLiaison</code>
-        class.</p>
-
-        <p>Ant&apos;s class loader implementation uses Java&apos;s
-        delegation model, see <a
-        href="http://java.sun.com/products/jdk/1.2/docs/api/java/lang/ClassLoader.html">http://java.sun.com/products/jdk/1.2/docs/api/java/lang/ClassLoader.html</a>
-        the paragraph</p>
-
-        <blockquote>The <code>ClassLoader</code> class uses a
-        delegation model to search for classes and resources. Each
-        instance of <code>ClassLoader</code> has an associated parent
-        class loader.  When called upon to find a class or resource, a
-        <code>ClassLoader</code> instance will delegate the search for
-        the class or resource to its parent class loader before
-        attempting to find the class or resource itself. The virtual
-        machine&apos;s built-in class loader, called the bootstrap
-        class loader, does not itself have a parent but may serve as
-        the parent of a <code>ClassLoader</code>
-        instance.</blockquote>
-
-        <p>This means, Ant&apos;s class loader will consult the
-        bootstrap class loader first, which tries to load classes from
-        <code>CLASSPATH</code>.  The bootstrap class loader
-        doesn&apos;t know anything about Ant&apos;s class loader or
-        even the path you have specified.</p>
-
-        <p>If the bootstrap class loader can load the class Ant has
-        asked it to load, this class will try to load the external
-        library from <code>CLASSPATH</code> as well - it doesn&apos;t
-        know anything else - and will not find it unless the library
-        is in <code>CLASSPATH</code> as well.</p>
-
-        <p>To solve this, you have two major options:</p>
-
-        <ol>
-          <li>put all external libaries you need in
-          <code>CLASSPATH</code> as well this is not what you want,
-          otherwise you wouldn&apos;t have found this FAQ entry.</li>
-
-          <li>remove the class that loads the external library from
-          the <code>CLASSPATH</code>.</li>
-        </ol>
-
-        <p>The easiest way to do this is to remove
-        <code>optional.jar</code> from <code>ANT_HOME/lib</code>.  If
-        you do so, you will have to <code>&lt;taskdef&gt;</code> all
-        optional tasks and use nested <code>&lt;classpath&gt;</code>
-        elements in the <code>&lt;taskdef&gt;</code> tasks that point
-        to the new location of <code>optional.jar</code>.  Also,
-        don&apos;t forget to add the new location of
-        <code>optional.jar</code> to the
-        <code>&lt;classpath&gt;</code> of your
-        <code>&lt;style&gt;</code> or <code>&lt;junit&gt;</code>
-        task.</p>
-
-        <p>If you want to avoid to <code>&lt;taskdef&gt;</code> all
-        optional tasks you need, the only other option is to remove
-        the classes that should not be loaded via the bootstrap class
-        loader from <code>optional.jar</code> and put them into a
-        separate archive. Add this separate archive to the
-        <code>&lt;classpath&gt;</code> of your
-        <code>&lt;style&gt;</code> or <code>&lt;junit&gt;</code> task
-        - and make sure the separate archive is not in
-        <code>CLASSPATH</code>.</p>
-
-        <p>In the case of <code>&lt;junit&gt;</code> you&apos;d have
-        to remove all classes that are in the
-        <code>org/apache/tools/ant/taskdefs/optional/junit</code>
-        directory, in the <code>&lt;style&gt;</code> case it is one of
-        the <code>*Liaison</code> classes in
-        <code>org/apache/tools/ant/taskdefs/optional</code>.</p>
-
-        <p>If you use the option to break up <code>optional.jar</code>
-        for <code>&lt;junit&gt;</code>, you still have to use a
-        <code>&lt;taskdef&gt;</code> with a nested
-        <code>&lt;classpath&gt;</code> to define the junit task.</p>
-      </answer>
-    </faq>
-  </faqsection>
-
-</document>
diff --git a/xdocs/index.xml b/xdocs/index.xml
deleted file mode 100644
index 9bc10cc..0000000
--- a/xdocs/index.xml
+++ /dev/null
@@ -1,149 +0,0 @@
-<?xml version="1.0"?>
-<document>
-
-  <properties>
-    <author email="">Conor MacNeill</author>
-    <author email="stefan.bodewig@epost.de">Stefan Bodewig</author>
-    <title>Ant</title>
-  </properties>
-
-<body>
-
-  <section name="Ant 1.5Beta1">
-    <h3>Apache Ant 1.5Beta1 Available !</h3>
-    <p>Version 1.5Beta1 of Ant has been released. It is available for download 
-      <a href="http://jakarta.apache.org/builds/jakarta-ant/release/v1.5Beta1/">
-      here</a>.
-    </p>
-  </section>
-
-  <section name="Ant wins again!">
-    <p>We are proud to announce that Ant has won another award.
-    <em>Software Development</em> magazine has awarded Ant its
-    <strong>2002 Productivity Award</strong>.
-    Click on the &quot;News&quot; link to learn more.</p>
-  </section>
-
-  <section name="Ant has won!">
-    <p>We are proud to announce that Ant has won the JavaWorld
-    Editors&apos; Choice Award for <strong>Most Useful Java
-    Community-Developed Technology</strong>. Click on the &quot;News&quot; link
-    to learn more.</p>
-  </section>
-
-  <section name="Ant 1.4.1">
-  <h3>Apache Ant 1.4.1 Available !</h3>
-  <p>Version 1.4.1 of Ant has been released. This is a bugfix release which corrects a few problems
-     in the 1.4 release. It is available for download 
-     <a href="http://www.apache.org/dist/jakarta/jakarta-ant/release/v1.4.1/">
-     here</a>.
-     </p>
-  </section>
-
-  <section name="Apache Ant">
-
-<p>
-Apache Ant is a Java-based build tool. In theory, it is kind of like
-Make, but without Make's wrinkles.
-</p>
-
-<p>
-Why another build tool when there is already <em>make</em>, <em>gnumake</em>,
-<em>nmake</em>, <em>jam</em>, and
-others? Because all those tools have limitations that Ant's original author
-couldn't live with when developing software across multiple platforms. Make-like
-tools are inherently shell-based -- they evaluate a set of dependencies, then
-execute commands not unlike what you would issue in a shell. This means that you
-can easily extend these tools by using or writing any program for the OS that
-you are working on. However, this also means that you limit yourself to the OS,
-or at least the OS type such as Unix, that you are working on.
-</p>
-
-<p>
-Makefiles are inherently evil as well. Anybody who has worked on them for any
-time has run into the dreaded tab problem. &quot;Is my command not executing
-because I have a space in front of my tab!!!&quot; said the original author of
-Ant way too many times. Tools like Jam took care of this to a great degree, but
-still have yet another format to use and remember.
-</p>
-
-<p>
-Ant is different. Instead of a model where it is extended with shell-based
-commands, Ant is extended using Java classes. Instead of writing shell commands,
-the configuration files are XML-based, calling out a target tree where various
-tasks get executed. Each task is run by an object that implements a particular
-Task interface.
-</p>
-
-<p>
-Granted, this removes some of the expressive power that is inherent by being
-able to construct a shell command such as
-<code>`find . -name foo -exec rm {}`</code>, but it
-gives you the ability to be cross platform -- to work anywhere and everywhere.
-And hey, if you really need to execute a shell command, Ant has an
-<code>&lt;exec&gt;</code> task that
-allows different commands to be executed based on the OS that it is executing
-on.
-</p>
-
-  </section>
-  
-  <section name="Documentation">
-  
-<p>
-You can view the documentation for the current 1.5 Beta (Apache Ant 1.5Beta1)
-<a href="manual/index.html">online</a>
-</p>
-
-<p>
-Comprehensive documentation is included in the source and binary distributions. 
-</p>
-
-  </section>
-
-  <section name="Latest Release">
-    <p>
-    You can download the latest release:
-    </p>
-    <ul>
-        <li><a href="http://www.apache.org/dist/jakarta/jakarta-ant/release/v1.4.1/bin/">
-                Download the binary release</a></li>
-        <li><a href="http://www.apache.org/dist/jakarta/jakarta-ant/release/v1.4.1/src/">
-                Download the source release</a></li>
-        <li><a href="http://www.apache.org/dist/jakarta/jakarta-ant/release/v1.4.1/rpms/">
-                Download source and binary RPMs</a></li>
-    </ul>  
-  </section>
-  
-  <section name="Nightly Builds">
-    <p>
-    If you wish to use the latest Ant features, you can try downloading a nightly 
-    build from <a href="http://www.apache.org/dist/jakarta/jakarta-ant/nightly/">here</a>
-    </p>
-    
-  </section>
-  
-  <section name="Towards Ant2">
-    <p>
-    We are currently hashing out design details for Ant2. Please
-    read the latest <a href="antnews.html">Ant news</a> for more details.
-    </p>
-  </section>
-  
-  <section name="Get Involved">
-<ul>
-<li><a href="http://jakarta.apache.org/getinvolved/getinvolvedindex.html">Get Involved</a></li>
-<li><a href="http://jakarta.apache.org/getinvolved/mail.html">Join Mailing Lists</a></li>
-<li><a href="http://marc.theaimsgroup.com/?l=ant-dev&amp;r=1&amp;w=2">Search the Dev Mailing List</a>
-</li>
-<li><a href="http://marc.theaimsgroup.com/?l=ant-user&amp;r=1&amp;w=2">Search the User Mailing List</a>
-</li>
-</ul>
-
-
-
-  </section>
-
-</body>
-</document>
-
diff --git a/xdocs/problems.xml b/xdocs/problems.xml
deleted file mode 100644
index a6b9fae..0000000
--- a/xdocs/problems.xml
+++ /dev/null
@@ -1,268 +0,0 @@
-<?xml version="1.0"?>
-<document>
-
-  <properties>
-    <author email="">Conor MacNeill</author>
-    <title>Having Problems?</title>
-  </properties>
-
-  <body>
-    <section name="Having Problems?">
-        <p>
-           This page details some steps you can take to try and resolve
-           any problems you may be having with Ant. If you find you can't
-           resolve the problem, then this page will help you collect some of
-           the relevant information to provide in a bug report. This information
-           will help the Ant developers understand and resolve the problem.
-           Of course, not all the steps here will make sense for every problem
-           you may encounter - these are just some suggestions to point
-           you in the right direction.
-        </p>
-         
-      <subsection name="Read the Manual">
-         <p>
-            The first step to take when you have a problem with Ant is to read
-            the <a href="manual/index.html">manual</a> entry for the task or
-            concept that is giving you trouble. In particular, check the
-            meaning of a task's attributes and nested elements. Perhaps an
-            attribute is available that would provide the behavior you require.
-            If you have problems with the manual itself, you can submit a
-            documentation bug report (see below) to help us improve the Ant
-            documentation.
-         </p>
-      </subsection>
-      <subsection name="Examine Debug Output">
-         <p>
-            If you're still having a problem, the next step is to try and
-            gather additional information about what Ant is doing.
-            Try running Ant with the <code>verbose</code> flag:
-            <br></br><br></br>
-            <font face="verdana" size="-1">ant -verbose</font>
-            <br></br><br></br>
-            or
-            <br></br><br></br>
-            <font face="verdana" size="-1">ant -v</font>
-            <br></br><br></br>
-           
-            This will produce output that starts like the following:</p>
-<table>
-<tr>
-<td>
-Ant version 1.4.1 compiled on October 11 2001<br></br>
-Buildfile: build.xml<br></br>
-Detected Java version: 1.3 in: D:\usr\local\java\jdk13\jre<br></br>
-Detected OS: Windows NT<br></br>
-parsing buildfile D:\ant\build.xml
-with URI = file:D:/ant/build.xml<br></br>
-Project base dir set to: D:\ant<br></br>
-&#160;&#160;[property] Loading Environment env.<br></br>
-&#160;&#160;[property] Loading D:\ant\conf.properties<br></br>
-Build sequence for target &#39;debug&#39; is [debug]<br></br>
-Complete build sequence is [debug, gensrc, compile, jar, test]<br></br>
-. . .<br></br>
-</td>
-</tr>
-</table>
-           <p>
-              You should be able to see from the trace more about what Ant
-              is doing and why it's taking a particular course of action.
-              If you need even more information, you can use the
-              <nobr><code>-debug</code></nobr> flag rather than
-              <nobr><code>-verbose</code></nobr>.
-              This will generally produce so much
-              output that you may want to save the output to a file and
-              analyze it in an editor. You can save the output using the
-              <nobr><code>-logfile &lt;filename&gt;</code></nobr> flag, or
-              using redirection.
-           </p>
-           <p>
-              Once you have all this debug information, how can you use it
-              to solve your problem?  That will depend on the task in question
-              and the nature of your problem. Each task logs different aspects
-              of its operation, but it should give you an idea of what is going
-              on. For example, the <code>&lt;javac&gt;</code> task logs the
-              reasons why it
-              chooses to compile particular class files and not others, along
-              with which compiler it is using and the arguments it will pass
-              to that compiler. The following partial trace shows why
-              <code>&lt;javac&gt;</code> is adding one class file but
-              skipping another.
-              This is followed by which compiler it will be using, the
-              arguments that will get passed to the compiler,
-              and a list of all the class files to be compiled. 
-           </p>
-<table>
-<tr>
-<td>
-[javac] Test.java omitted as D:\classes\Test.class is up to date.<br></br>
-[javac] Unset.java added as D:\classes\Unset.class is outdated.<br></br>
-[javac] Compiling 1 source file to D:\classes<br></br>
-[javac] Using classic compiler<br></br>
-[javac] Compilation args: -d D:\classes -classpath D:\classes;<br></br>
-D:\jdk118\classes.zip; -sourcepath D:\src\java -g:none<br></br>
-[javac] File to be compiled:<br></br>
-D:\src\java\Unset.java<br></br>
-</td>
-</tr>
-</table>
-
-           <p>
-              In many cases, Ant tasks are wrappers around OS commands or
-              other Java classes. In debug mode, many of these tasks will
-              print out the equivalent command line, as the
-              <code>&lt;javac&gt;</code> task
-              output does. If you are having a problem, it is often useful to
-              run the command directly from the command line, in the same way
-              Ant is running it, and see if the problem occurs from there
-              as well. The problem may be in the command that is being run,
-              or it may be in the way the Ant task is running the command.
-              You can also see the effect of changing attribute values on the
-              generated command line. This can help you to understand whether
-              you are using the correct attributes and values.
-            </p>
-      </subsection>
-
-      <subsection name="Has It Been Fixed?">
-         <p>
-            After examining the debug output, if you still believe that the
-            problem you are having is caused by Ant, chances are that someone
-            else may have already encountered this problem, and perhaps it has
-            been fixed. The next step, therefore, may be to try a nightly build
-            of Ant to see if the problem has been fixed. Nightly builds for Ant
-            are available from the 
-            <a href="http://www.apache.org/dist/jakarta/jakarta-ant/nightly/">
-            Jakarta web site</a>. While Ant nightly builds are typically quite
-            stable and are used by
-            <a href="http://www.apache.org/dist/jakarta/gump/latest/">Gump</a>
-            to build many other Jakarta projects, these builds should
-            nonetheless be treated as experimental. Note that nightly builds
-            do not build many of the optional tasks the come with Ant.
-            A snapshot of these optional tasks is occasionally uploaded to
-            the nightly download
-            <a href="http://www.apache.org/dist/jakarta/jakarta-ant/nightly/optional/">
-            area</a>. However, even this snapshot does not contain every
-            optional task.
-        </p>
-      </subsection>
-      
-      <subsection name="Has It Been Reported?">
-         <p>
-            If the current nightly build doesn't resolve your problem, it is
-            possible that someone else has reported the issue. It is time to
-            look at the <a href="http://nagoya.apache.org/bugzilla/">
-            Apache Bug Database</a>.  This system is easy to use, and it will
-            let you search the <a href="http://nagoya.apache.org/bugzilla/buglist.cgi?bug_status=UNCONFIRMED&amp;bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED&amp;email1=&amp;emailtype1=substring&amp;emailassigned_to1=1&amp;email2=&amp;emailtype2=substring&amp;emailreporter2=1&amp;bugidtype=include&amp;bug_id=&amp;changedin=&amp;votes=&amp;chfieldfrom=&amp;chfieldto=Now&amp;chfieldvalue=&amp;product=Ant&amp;short_desc=&amp;short_desc_type=substring&amp;long_desc=&amp;long_desc_type=substring&amp;bug_file_loc=&amp;bug_file_loc_type=substring&amp;keywords=&amp;keywords_type=anywords&amp;field0-0-0=noop&amp;type0-0-0=noop&amp;value0-0-0=&amp;order=bugs.bug_id">
-            currently open</a> and resolved bugs to see if your problem has
-            already been reported. If your problem has been reported, you can
-            see whether any of the developers have commented, suggesting
-            workarounds, or the reason for the bug, etc. Or you may have
-            information to add (see about creating and modifying bug reports
-            below), in which case, go right ahead and add the information.
-            If you don't have any additional information, you may just want
-            to vote for this bug, and perhaps
-            add yourself to the <code>CC</code> list to follow the progress
-            of this bug.
-         </p>
-      </subsection>
-      
-      <subsection name="Filing a Bug Report">
-         <p>
-            By this time, you may have decided that there is an unreported
-            bug in Ant. You have a few choices at this point. You can send
-            an email to the <nobr><code>ant-user</code></nobr> mailing list
-            to see if
-            others have encountered your issue and find out how they may
-            have worked around it. If after some discussion, you feel it
-            is time to create
-            a bug report, this is a simple operation in the bug database.
-            Please try to provide as much information as possible in order
-            to assist the developers in resolving the bug. Please try to enter
-            correct values for the various inputs when creating the bug, such
-            as which version of Ant you are running, and on which platform,
-            etc. Once the bug is created, you can also add attachments to
-            the bug report. 
-         </p>
-         <p> 
-            What information should you include in your bug report? The
-            easiest bugs to fix are those that are most easily reproducible,
-            so it is really helpful if you can produce a small test case that
-            exhibits the problem. In this case, you would attach the build file
-            and any other files necessary to reproduce the problem, probably
-            packed together in an archive. If you can't produce a test case,
-            you should try to include a snippet from your build file and the
-            relevant sections from the verbose or debug output from Ant. Try
-            to include the header information where Ant states the version,
-            the OS and VM information, etc. As debug output is likely to be
-            very large, it's best to remove any output that is not
-            relevant. Once the bug is entered into the bug database, you
-            will be kept informed by email about progress on the bug. If
-            you receive email asking for further information, please try to
-            respond, as it will aid in the resolution of your bug.
-         </p>
-      </subsection>
-
-      <subsection name="Asking for an Enhancement">
-         <p>
-            Sometimes, you may find that Ant just doesn't do what you need it
-            to. It isn't a bug, as such, since Ant is working the way it is
-            supposed to work. Perhaps it is some additional functionality for
-            a task that hasn't been thought of yet, or maybe a completely new
-            task. For these situations, you will
-            want to raise an <i>enhancement request</i>. Enhancement requests
-            are managed using the same Apache Bug Database described above.
-            These are just a different type of bug report. If you look in the
-            bug database, you will see that one of the severity settings for
-            a bug is &quot;Enhancement&quot;. Just fill the bug report in,
-            set the severity of the bug to &quot;Enhancement&quot;, and 
-            state in the description how you would like to have Ant enhanced.
-            Again, you should first check whether there are any existing
-            enhancment requests that cover your needs. If so, just add your
-            vote to these.
-         </p>
-      </subsection>
-      
-      <subsection name="Fixing the Bug">
-         <p>
-            If you aren't satisfied with just filing a bug report, you can
-            try to find the cause of the problem and provide a fix yourself.
-            The best way to do that is by working with the latest code from CVS.
-            Alternatively, you can work with the source code available from the
-            <a href="http://jakarta.apache.org/builds/jakarta-ant/release/v1.4.1/src/">
-            source distributions</a>. If you
-            are going to tackle the problem at this level, you may want to
-            discuss some details first on the <nobr><code>ant-dev</code></nobr>
-            mailing list. Once you have a fix for the problem, you may submit
-            the fix as a <i>patch</i> to either the
-            <nobr><code>ant-dev</code></nobr> mailing
-            list, or enter the bug database as described above and attach the
-            patch to the bug report. Using the bug database has the advantage
-            of being able to track the progress of your patch.
-         </p>
-         <p>
-            If you have a patch to submit and are sending it to the
-            <nobr><code>ant-dev</code></nobr> mailing list,
-            prefix &quot;[PATCH]&quot;
-            to your message subject. Please include any relevant bug numbers.
-            Patch files should be created with the <nobr><code>-u</code></nobr>
-            option of the
-            <code>diff</code> or <code>cvs diff</code> command. For
-            example:<br></br><br></br>
-            <font face="verdana" size="-1">
-            diff -u Javac.java.orig Javac.java &gt; javac.diffs<br></br><br></br>
-            </font>
-            or, if you have source from CVS:<br></br><br></br>
-            <font face="verdana" size="-1">
-            cvs diff -u Javac.java &gt; javac.diffs<br></br><br></br>
-            </font>
-           
-           Note: You should give your patch files meaningful names. 
-           This makes it easier for developers who need to apply a number
-           of different patch files.
-        </p>
-      </subsection>
-      
-         
-    </section>
-    
-  </body>
-</document>
diff --git a/xdocs/projects.xml b/xdocs/projects.xml
deleted file mode 100644
index 8cf75a3..0000000
--- a/xdocs/projects.xml
+++ /dev/null
@@ -1,223 +0,0 @@
-<?xml version="1.0"?>
-<document>
-
-  <properties>
-    <author email="bodewig@apache.org">Stefan Bodewig</author>
-    <title>Related Projects</title>
-  </properties>
-
-  <body>
-    
-    <section name="Related Projects">
-
-      <p>Nothing listed here is directly supported by the Ant
-      developers, if you encounter any problems with them, please use
-      the contact information.</p>
-
-      <subsection name="AntContrib">
-
-        <p>The Ant-Contrib project is a collection of user supplied
-        task (like an <code>&lt;if&gt;</code> task) and a development
-        playground for experimental tasks like a C/C++ compilation
-        task for different compilers.</p>
-
-        <table>
-          <tr>
-            <th>Compatibility:</th>
-            <td>1.4.1 and above</td>
-          </tr>
-          <tr>
-            <th>URL:</th>
-            <td><a href="http://sourceforge.net/projects/ant-contrib/">http://sourcefoge.net/projects/ant-contrib/</a></td>
-          </tr>
-          <tr>
-            <th>Contact:</th>
-            <td><a href
-                   ="http://sourceforge.net/mail/?group_id=36177">project mailing list</a></td>
-          </tr>
-          <tr>
-            <th>License:</th>
-            <td>Apache Software Foundation license</td>
-          </tr>
-        </table>
-      </subsection>
-
-      <subsection name="AntHill">
-
-        <p>Anthill is a build tool that promotes a controlled build
-        process by ensuring that every build reflects the source
-        repository contents and tagging the repository with a unique
-        build number after every build. Anthill also encourages the
-        sharing of knowledge within an organization by automatically
-        updating a project intranet site with artifacts from the
-        latest build.</p>
-
-        <table>
-          <tr>
-            <th>Compatibility:</th>
-            <td>bundles Ant 1.3, is compatible with Ant 1.3 to 1.4.1</td>
-          </tr>
-          <tr>
-            <th>URL:</th>
-            <td><a href="http://www.urbancode.com/projects/anthill/">http://www.urbancode.com/projects/anthill/</a></td>
-          </tr>
-          <tr>
-            <th>Contact:</th>
-            <td><a href ='mailto:mbz@urbancode.com'>Maciej Zawadzki</a></td>
-          </tr>
-          <tr>
-            <th>License:</th>
-            <td>Mozilla-like license</td>
-          </tr>
-        </table>
-      </subsection>
-
-      <subsection name="CruiseControl">
-
-        <p>CruiseControl is a tool for setting up a continuous build
-        process.  CruiseControl provides an Ant wrapper and a set of
-        tasks to automate the checkout/build/test cycle. CruiseControl
-        also comes bundled with a servlet for viewing the status of
-        the current build, as well as previous build results.</p>
-
-        <table>
-          <tr>
-            <th>Compatibility:</th>
-            <td>Ant 1.2 and higher</td>
-          </tr>
-          <tr>
-            <th>URL:</th>
-            <td><a href="http://cruisecontrol.sourceforge.net/">http://cruisecontrol.sourceforge.net/</a></td>
-          </tr>
-          <tr>
-            <th>Contact:</th>
-            <td><a href ='http://cruisecontrol.sourceforge.net/contact.html'>Project Mailing Lists and Administrators</a></td>
-          </tr>
-          <tr>
-            <th>License:</th>
-            <td>Release 1.0 has been licensed under the GNU General Public
-            License.  Starting with release 1.1 the license has been
-            changed to a BSD-like license.</td>
-          </tr>
-        </table>
-      </subsection>
-
-      <subsection name="Krysalis Centipede">
-
-        <p>Krysalis Centipede is a template for a software module;
-        gives you build with Ant and Site+Documentation with Apache
-        Cocoon.</p>
-
-        <p>Centipede is a starter project, empty in many respects, but
-        has a decent and standardized Ant build file, and some xdocs
-        that render to HTML using Cocoon. A developer would take
-        Centipede and use it to start development. After starting, the
-        build file would evolve as the developer see fit and move away
-        from the Centipede starting point.  Subsequent releases of
-        Centipede will address the issues found using it, and evolve
-        on user requests-issues.</p>
-
-        <table>
-          <tr>
-            <th>Compatibility:</th>
-            <td>1.4.1</td>
-          </tr>
-          <tr>
-            <th>URL:</th>
-            <td><a href="http://krysalis.org/centipede/">http://krysalis.org/centipede/</a></td>
-          </tr>
-          <tr>
-            <th>Contact:</th>
-            <td><a href ="http://sourceforge.net/mail/?group_id=36516">mailing lists</a></td>
-          </tr>
-          <tr>
-            <th>License:</th>
-            <td>The Krysalis Patchy Software License, based on and
-            fully compatible with the Apache Software Foundation
-            license</td>
-          </tr>
-        </table>
-      </subsection>
-      
-      <subsection name="NAnt">
-
-        <p>NAnt is a .NET based build tool. In theory it is kind of
-        like make without make's wrinkles. In practice it's a lot like
-        Ant.</p>
-
-        <table>
-          <tr>
-            <th>Compatibility:</th>
-            <td>compatible in spirit.</td>
-          </tr>
-          <tr>
-            <th>URL:</th>
-            <td><a href="http://nant.sourceforge.net/">http://nant.sourceforge.net/</a></td>
-          </tr>
-          <tr>
-            <th>Contact:</th>
-            <td><a href="http://sourceforge.net/mail/?group_id=31650">project mailing list</a></td>
-          </tr>
-          <tr>
-            <th>License:</th>
-            <td>GNU General Public License</td>
-          </tr>
-        </table>
-      </subsection>
-
-      <subsection name="Rant">
-
-        <p>Rant stands for Remote Ant. It is a distributed build
-        system that allows an Ant build file to launch builds on other
-        systems and receive exceptions should they occur.</p>
-
-        <table>
-          <tr>
-            <th>Compatibility:</th>
-            <td>Ant 1.4</td>
-          </tr>
-          <tr>
-            <th>URL:</th>
-            <td><a href="http://sourceforge.net/projects/remoteant/">http://sourceforge.net/projects/remoteant/</a></td>
-          </tr>
-          <tr>
-            <th>Contact:</th>
-            <td><a href="mailto:cnelson@einnovation.com">Chris Nelson</a></td>
-          </tr>
-          <tr>
-            <th>License:</th>
-            <td>MIT License</td>
-          </tr>
-        </table>
-      </subsection>
-
-      <subsection name="XML Publication">
-
-        <p>XML Publication is a set of tools to generate Web pages
-        from desktop documents or other structured documents using
-        XSLT and Ant.</p>
-
-        <table>
-          <tr>
-            <th>Compatibility:</th>
-            <td>Ant 1.4</td>
-          </tr>
-          <tr>
-            <th>URL:</th>
-            <td><a href="http://XMLpublication.org/">http://XMLpublication.org/</a></td>
-          </tr>
-          <tr>
-            <th>Contact:</th>
-            <td><a href ="mailto:jmvanel@free.fr">Jean-Marc Vanel</a></td>
-          </tr>
-          <tr>
-            <th>License:</th>
-            <td>GNU General Public License.</td>
-          </tr>
-        </table>
-      </subsection>
-
-    </section>
-
-  </body>
-</document>
diff --git a/xdocs/resources.xml b/xdocs/resources.xml
deleted file mode 100644
index 195b6b1..0000000
--- a/xdocs/resources.xml
+++ /dev/null
@@ -1,411 +0,0 @@
-<?xml version="1.0"?>
-<document>
-
-  <properties>
-    <author email="bodewig@apache.org">Stefan Bodewig</author>
-    <title>Resources</title>
-  </properties>
-
-  <body>
-    <section name="FAQs">
-      <subsection name="At Ant's website">
-
-        <p>Starting with the release of Ant 1.4 the Ant's FAQ is
-        bundled with the distribution, the most recent version can
-        always be found at the website.</p>
-
-        <table>
-          <tr>
-            <th>FAQ:</th>
-            <td><a href="faq.html">http://jakarta.apache.org/ant/faq.html</a></td>
-          </tr>
-        </table>
-      </subsection>
-
-      <subsection name="jGuru">
-        <p>jGuru hosts an interactive Ant discussion forum and FAQ system</p>
-
-        <table>
-          <tr>
-            <th>Forum:</th>
-            <td><a href="http://www.jguru.com/forums/home.jsp?topic=Ant">http://www.jguru.com/forums/home.jsp?topic=Ant</a></td>
-          </tr>
-          <tr>
-            <th>FAQ:</th>
-            <td><a href="http://www.jguru.com/faq/home.jsp?topic=Ant">http://www.jguru.com/faq/home.jsp?topic=Ant</a></td>
-          </tr>
-        </table>
-      </subsection>
-    </section>
-    
-    <section name="Books">
-      <subsection name="Java Tools for eXtreme Programming">
-        <p>This book covers the following XP subjects:
-            <ul>
-                <li>Automated unit and functional testing</li>
-                <li>Continuous integration through build and deployment automation</li>
-                <li>The value of refactoring and continuous integration</li>
-                <li>How Ant, JUnit, JUnitPerf, Cactus, HTTPUnit, and JMeter
-                can be used to achieve the goals of the XP methodology</li>
-            </ul>
-        </p>
-
-        <table>
-          <tr>
-            <th>Authors:</th>
-            <td>Richard Hightower and Nicholas Lesiecki</td>
-          </tr>
-          <tr>
-            <th>URL:</th>
-            <td><a href="http://www.wiley.com/cda/product/0,,047120708X,00.html">http://www.wiley.com/cda/product/0,,047120708X,00.html</a></td>
-          </tr>
-        </table>
-      </subsection>
-    </section>
-
-    <section name="Articles and Presentations">
-
-      <p>The following sections list articles and presentations written about Apache Ant.  If
-      you've written something that should be included, please post it to one
-      of the mailing lists.</p>
-
-    </section>
-
-    <section name="Articles">
-
-      <subsection name="Ant in Anger: Using Ant in a Production Development
-      System">
-        <p>This document describes strategies and some basic examples of how to 
-        use Ant in larger team development projects.</p>
-
-        <table>
-          <tr>
-            <th>Author:</th>
-            <td><a href="mailto:steve_l@iseran.com">Steve Loughran</a></td>
-          </tr>
-          <tr>
-            <th>URL:</th>
-            <td><a href="ant_in_anger.html">http://jakarta.apache.org/ant/ant_in_anger.html</a></td>
-          </tr>
-        </table>
-      </subsection>
-
-      <subsection name="Ant Task Guidelines">
-        <p>This document describes how to write custom Ant tasks, and how to submit
-        them to potentially be included in Ant.</p>
-
-        <table>
-          <tr>
-            <th>Author:</th>
-            <td><a href="mailto:steve_l@iseran.com">Steve Loughran</a></td>
-          </tr>
-          <tr>
-            <th>URL:</th>
-            <td><a href="ant_task_guidelines.html">http://jakarta.apache.org/ant/ant_task_guidelines.html</a></td>
-          </tr>
-        </table>
-      </subsection>
-
-      <subsection name="Automating the build and test process">
-        <p>This article demonstrates an approach to the automated build and test process. Working with Ant 1.3 and the JUnit test framework, it shows how to automate a process that captures pertinent information about each test suite run, generates an attractive report, and e-mails the report.</p>
-
-        <table>
-          <tr>
-            <th>Author:</th>
-            <td><a href="mailto:ehatcher@apache.org">Erik Hatcher</a></td>
-          </tr>
-          <tr>
-            <th>URL:</th>
-            <td><a href="http://www.ibm.com/developerworks/java/library/j-junitmail/">http://www.ibm.com/developerworks/java/library/j-junitmail/</a></td>
-          </tr>
-        </table>
-      </subsection>
-
-      <subsection name="Incremental development with Ant and JUnit">
-        <p>This article explores the benefits of unit testing with Ant and
-        JUnit, detailing how to develop automated unit tests and integrate them
-        into your build process.</p>
-
-        <table>
-          <tr>
-            <th>Author:</th>
-            <td><a href="mailto:malcolm@nuearth.com">Malcolm Davis</a></td>
-          </tr>
-          <tr>
-            <th>URL:</th>
-            <td><a href="http://www-106.ibm.com/developerworks/library/j-ant/?dwzone=java">http://www-106.ibm.com/developerworks/library/j-ant/?dwzone=java</a></td>
-          </tr>
-        </table>
-      </subsection>
-
-      <subsection name="Automate your build process using Java and Ant">
-        <p>This article provides an introduction to using Ant with some basic
-        examples and by highlighting some of the important tasks.</p>
-
-        <table>
-          <tr>
-            <th>Author:</th>
-            <td><a href="mailto:michael.cymerman@javaworld.com">Michael Cymerman</a></td>
-          </tr>
-          <tr>
-            <th>URL:</th>
-            <td><a href="http://www.javaworld.com/javaworld/jw-10-2000/jw-1020-ant.html">http://www.javaworld.com/javaworld/jw-10-2000/jw-1020-ant.html</a></td>
-          </tr>
-        </table>
-      </subsection>
-
-      <subsection name="Short tutorial in Cactus&apos; (formerly J2EEUnit)
-      documentation">
-        <p>There is a short tutorial on how to use Ant in Cactus&apos;
-        documentation.  It has a slant towards build files that will be used
-        with Cactus.</p>
-
-        <table>
-          <tr>
-            <th>Author:</th>
-            <td>Cactus development team</td>
-          </tr>
-          <tr>
-            <th>URL:</th>
-            <td><a href="http://jakarta.apache.org/cactus/howto_ant_primer.html">http://jakarta.apache.org/cactus/howto_ant_primer.html</a></td>
-          </tr>
-        </table>
-      </subsection>
-
-      <subsection name="Developing custom Ant tasks with VisualAge for Java">
-        <p>This article outlines how to integrate Ant into VisualAge for Java,
-        and how to write and debug custom tasks using the IDE and the
-        integrated debugger.</p>
-
-        <table>
-          <tr>
-            <th>Author:</th>
-            <td><a href="mailto:glenn@somanetworks.com">Glenn McAllister</a></td>
-          </tr>
-          <tr>
-            <th>URL:</th>
-            <td><a href="http://www7.software.ibm.com/vad.nsf/data/document2366?OpenDocument&amp;p=1&amp;BCT=1&amp;Footer=1">http://www7.software.ibm.com/vad.nsf/data/document2366?OpenDocument&amp;p=1&amp;BCT=1&amp;Footer=1</a></td>
-          </tr>
-        </table>
-      </subsection>
-
-      <subsection name="Automated builds with VisualAge for Java and Ant">
-        <p>This article shows how you can perform command line builds with a
-        VisualAge for Java repository.</p>
-
-        <table>
-          <tr>
-            <th>Author:</th>
-            <td><a href="mailto:glenn@somanetworks.com">Glenn McAllister</a></td>
-          </tr>
-          <tr>
-            <th>URL:</th>
-            <td><a href="http://www7.software.ibm.com/vad.nsf/Data/Document4366?OpenDocument&amp;p=1&amp;BCT=3&amp;Footer=1">http://www7.software.ibm.com/vad.nsf/Data/Document4366?OpenDocument&amp;p=1&amp;BCT=3&amp;Footer=1</a></td>
-          </tr>
-        </table>
-      </subsection>
-
-      <subsection name="Ant: A Build Tool from the Jakarta Project">
-        <p>This article is from the &quot;Best Practices&quot; section of
-        Sun&apos;s Dot-Com Builder Site.</p>
-
-        <table>
-          <tr>
-            <th>Author:</th>
-            <td>Laura Geele Wang</td>
-          </tr>
-          <tr>
-            <th>URL:</th>
-            <td><a href="http://dcb.sun.com/practices/profiles/ant.jsp">http://dcb.sun.com/practices/profiles/ant.jsp</a></td>
-          </tr>
-        </table>
-      </subsection>
-
-      <subsection name="Making a Mountain Out of an Anthill">
-        <p>This article is from the June 2001 issue of the Java Developer&apos;
-        Journal.  You need to be a registered JDJ subscriber to view this
-        article.</p>
-
-        <table>
-          <tr>
-            <th>Author:</th>
-            <td>Neal Ford</td>
-          </tr>
-          <tr>
-            <th>URL:</th>
-            <td><a href="http://www.sys-con.com/java/archivesa.cfm?volume=06&amp;issue=06">http://www.sys-con.com/java/archivesa.cfm?volume=06&amp;issue=06</a></td>
-          </tr>
-        </table>
-      </subsection>
-
-      <subsection name="Using Ant and Weblogic EJBs">
-        <p>This article describes how to use Ant to create Weblogic EJBs, and
-        some workarounds for issues you may encounter.</p>
-
-        <table>
-          <tr>
-            <th>Author:</th>
-            <td>Jesse E. Tilly</td>
-          </tr>
-          <tr>
-            <th>URL:</th>
-            <td><a href="http://www.onjava.com/pub/a/onjava/2001/06/25/antejb.html">http://www.onjava.com/pub/a/onjava/2001/06/25/antejb.html</a></td>
-          </tr>
-        </table>
-      </subsection>
-
-      <subsection name="An Introduction to Ant">
-        <p>This article is a short introduction into the basic
-        concepts of Ant.</p>
-
-        <table>
-          <tr>
-            <th>Author:</th>
-            <td>Jayakrishnan Nair</td>
-          </tr>
-          <tr>
-            <th>URL:</th>
-            <td><a href="http://varnam.org/articles/ant.html">http://varnam.org/articles/ant.html</a></td>
-          </tr>
-        </table>
-      </subsection>
-
-      <subsection name="Using JavaScript with Ant">
-        <p>A tutorial about using JavaScript and XSLT with Ant.</p>
-
-        <table>
-          <tr>
-            <th>Author:</th>
-            <td>Dylan Schiemann</td>
-          </tr>
-          <tr>
-            <th>URL:</th>
-            <td><a href="http://www.sitepen.com/ant/javascript.html">http://www.sitepen.com/ant/javascript.html</a></td>
-          </tr>
-        </table>
-      </subsection>
-
-      <subsection name="Building with Ant">
-        <p>Series of articles that describe a framework for web
-        application development based on Ant and JUnit.</p>
-
-        <table>
-          <tr>
-            <th>Author:</th>
-            <td><a href="mailto:alexc@purpletech.com">Alex Chaffee</a></td>
-          </tr>
-          <tr>
-            <th>URL:</th>
-            <td>Introduction: <a href="http://softwaredev.earthweb.com/sdtech/article/0,,12065_989631,00.html">http://softwaredev.earthweb.com/sdtech/article/0,,12065_989631,00.html</a><br/>
-                Directory Structure: <a href="http://softwaredev.earthweb.com/sdtech/article/0,,12082_994991,00.html">http://softwaredev.earthweb.com/sdtech/article/0,,12082_994991,00.html</a><br/>
-                Deployment and Distribution: <a href="http://softwaredev.earthweb.com/sdtech/article/0,,12077_998241,00.html">http://softwaredev.earthweb.com/sdtech/article/0,,12077_998241,00.html</a></td>
-          </tr>
-        </table>
-      </subsection>
-
-      <subsection name="Developing with JAXB and Ant">
-        <p>Series of articles that shows how to use Ant together with
-        the Java API for XML Binding (JAXB).</p>
-
-        <table>
-          <tr>
-            <th>Author:</th>
-            <td>Joseph Shelby</td>
-          </tr>
-          <tr>
-            <th>URL:</th>
-            <td><a href="http://www.onjava.com/pub/a/onjava/2002/03/06/jaxant1.html">http://www.onjava.com/pub/a/onjava/2002/03/06/jaxant1.html</a><br/>
-                <a href="http://www.onjava.com/pub/a/onjava/2002/03/13/jaxbant2.html">http://www.onjava.com/pub/a/onjava/2002/03/13/jaxbant2.html</a></td>
-          </tr>
-        </table>
-      </subsection>
-    </section>
-
-    <section name="Presentations">
-
-      <subsection name="Ant - presented to the Tucson Java Users Group">
-        <p>A PowerPoint technical overview presentation on Ant.  Comes complete with a straightforward example demonstrating code compilation, JAR'ing, JUnit testing, JUnit reporting, and Zipping a distribution.  A few advanced topics are touched upon like property immutabality and using &lt;antcall&gt; to get around it, build listeners, and writing custom tasks.</p>
-
-        <table>
-          <tr>
-            <th>Author:</th>
-            <td><a href="mailto:ehatcher@apache.org">Erik Hatcher</a></td>
-          </tr>
-          <tr>
-            <th>URL:</th>
-            <td><a href="http://erik.hatcher.net/ant-jug.zip">http://erik.hatcher.net/ant-jug.zip</a></td>
-          </tr>
-        </table>
-      </subsection>
-
-      <subsection name="Ant Build Tool">
-        <p>A PowerPoint presentation on Ant 1.2.  It provides a basic overview
-        of Ant&apos;s capabilities.</p>
-
-        <table>
-          <tr>
-            <th>Author:</th>
-            <td><a href="mailto:chanezon@netscape.com">Patrick Chanezon</a></td>
-          </tr>
-          <tr>
-            <th>URL:</th>
-            <td><a href="http://people.netscape.com/chanezon/tech/ant/ant_preso.ppt">http://people.netscape.com/chanezon/tech/ant/ant_preso.ppt</a></td>
-          </tr>
-        </table>
-      </subsection>
-
-      <subsection name="Ant">
-        <p>A detailed Ant 1.3 PowerPoint presentation, made at the St. Louis Java Users Group
-        meeting in March 2001.  Includes a detailed build file and basic
-        descriptions of all the built in and optional tasks.  Updated for Ant 1.4 in October 2001.
-        Available in PDF format now.</p>
-
-        <table>
-          <tr>
-            <th>Author:</th>
-            <td>Mark Volkmann</td>
-          </tr>
-          <tr>
-            <th>URL:</th>
-            <td><a href="http://www.ociweb.com/downloads/Ant.pdf">http://www.ociweb.com/downloads/Ant.pdf</a></td>
-          </tr>
-        </table>
-      </subsection>
-
-      <subsection name="Modern Development Crises">
-        <p>This presentation is an overview of the current state of software
-        development today.  There are a couple of slides that briefly cover
-        Ant.</p>
-
-        <table>
-          <tr>
-            <th>Author:</th>
-            <td><a href="mailto:steve_l@iseran.com">Steve Loughran</a></td>
-          </tr>
-          <tr>
-            <th>URL:</th>
-            <td><a href="http://www.iseran.com/Steve/modern_development_processes.html">http://www.iseran.com/Steve/modern_development_processes.html</a></td>
-          </tr>
-        </table>
-      </subsection>
-
-      <subsection name="When Web Services Go Bad">
-        <p>A presentation from the <a
-        href="http://www.sellsbrothers.com/conference/">Web Services
-        DevCon</a> in March 2002.</p>
-
-        <table>
-          <tr>
-            <th>Author:</th>
-            <td><a href="mailto:steve_l@iseran.com">Steve Loughran</a></td>
-          </tr>
-          <tr>
-            <th>URL:</th>
-            <td><a href="http://www.iseran.com/Steve/papers/when_web_services_go_bad.html">http://www.iseran.com/Steve/papers/when_web_services_go_bad.html</a></td>
-          </tr>
-        </table>
-      </subsection>
-
-    </section>
-  </body>
-</document>
diff --git a/xdocs/stylesheets/faq.vsl b/xdocs/stylesheets/faq.vsl
deleted file mode 100644
index fd4c8cf..0000000
--- a/xdocs/stylesheets/faq.vsl
+++ /dev/null
@@ -1,118 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-
-<!-- Content Stylesheet for Site -->
-
-    ## Defined variables
-    #set ($bodybg = "#ffffff")
-    #set ($bodyfg = "#000000")
-    #set ($bodylink = "#525D76")
-    #set ($bannerbg = "#525D76")
-    #set ($bannerfg = "#ffffff")
-    #set ($subbannerbg = "#828DA6")
-    #set ($subbannerfg = "#ffffff")
-    #set ($tablethbg = "#039acc")
-    #set ($tabletdbg = "#a0ddf0")
-    #set ($pound = "#" )
-    
-<!-- start the processing -->
-#faqs()
-<!-- end the processing -->
-
-## This is where the FAQ specific macro's live
-
-#macro (toc $section)
-  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="$subbannerbg">
-      <font color="$subbannerfg" face="arial,helvetica,sanserif">
-        <strong>$section.getAttributeValue("title")</strong>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-        <ul>
-        #foreach ($faq in $section.getChildren("faq") )
-          #subtoc ($faq)
-        #end
-        </ul>
-      </blockquote>
-    </td></tr>
-  </table>
-#end
-
-#macro (subtoc $faq)
-  #set ($id = $faq.getAttributeValue("id"))
-  <li><a href="$pound$id">
-  $xmlout.outputString($faq.getChild("question"), true)
-  </a></li>
-#end
-
-#macro (answers $section)
-  #foreach ($faq in $section.getChildren("faq") )
-    #faq ($faq)
-  #end
-#end
-
-#macro (faq $faq)
-  #set ($id = $faq.getAttributeValue("id"))
-  <a name="$id">
-  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="$subbannerbg">
-      <font color="$subbannerfg" face="arial,helvetica,sanserif">
-        <strong>
-          $xmlout.outputString($faq.getChild("question"), true)
-        </strong>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-        #foreach ($item in $faq.getChild("answer").getChildren())
-          #if ($item.getName().equals("img"))
-            #image ($item)
-          #elseif ($item.getName().equals("source"))
-            #source ($item)
-          #elseif ($item.getName().equals("table"))
-            #table ($item)
-          #else
-            $xmlout.outputString($item)
-          #end
-        #end
-      </blockquote>
-    </td></tr>
-  </table>
-  </a>
-#end
-
-#macro (faqs)
-  #header()
-  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="$bannerbg">
-      <font color="$bannerfg" face="arial,helvetica,sanserif">
-        <strong>Questions</strong>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-      #set ($allFaqSections = $root.getChildren("faqsection"))
-      #foreach ( $faqSection in $allFaqSections )
-        #toc ($faqSection)
-      #end
-      </blockquote>
-    </td></tr>
-  </table>
-
-  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="$bannerbg">
-      <font color="$bannerfg" face="arial,helvetica,sanserif">
-        <strong>Answers</strong>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-      #foreach ( $faqSection in $allFaqSections )
-        #answers ($faqSection)
-      #end
-      </blockquote>
-    </td></tr>
-  </table>
-  #footer()
-#end
diff --git a/xdocs/stylesheets/project.xml b/xdocs/stylesheets/project.xml
deleted file mode 100644
index 4d60618..0000000
--- a/xdocs/stylesheets/project.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<project name="Apache Ant"
-         href="http://jakarta.apache.org/ant/">
-
-    <title>Apache Ant</title>
-    <logo href="images/ant_logo_large.gif">Apache Ant</logo>
-    
-    <body>
-    <menu name="Apache Ant">
-        <item name="Front Page"            
-              href="/index.html"/>
-        <item name="News"                 
-              href="/antnews.html"/>
-        <item name="Documentation"            
-              href="/manual/index.html"/>
-        <item name="Related Projects"
-              href="/projects.html"/>
-        <item name="External Tools and Tasks"
-              href="/external.html"/>
-        <item name="Resources"
-              href="/resources.html"/>
-        <item name="Ant FAQ"
-              href="/faq.html"/>
-        <item name="Having Problems?"
-              href="/problems.html"/>
-    </menu>
-
-    <menu name="Download">
-        <item name="Binaries"              href="/site/binindex.html"/>
-        <item name="Source Code"           href="/site/sourceindex.html"/>
-    </menu>
-
-    <menu name="Jakarta">
-        <item name="News &amp; Status"     href="/site/news.html"/>
-        <item name="Mission"               href="/site/mission.html"/>
-        <item name="Guidelines Notes"      href="/site/guidelines.html"/>
-        <item name="FAQs"                  href="/site/faqs.html"/>
-    </menu>
-
-    <menu name="Get Involved">
-        <item name="Overview"              href="/site/getinvolved.html"/>
-        <item name="CVS Repositories"      href="/site/cvsindex.html"/>
-        <item name="Mailing Lists"         href="/site/mail.html"/>
-        <item name="Reference Library"     href="/site/library.html"/>
-        <item name="Bug Database"          href="http://nagoya.apache.org/bugzilla/enter_bug.cgi?product=Ant"/>
-        <item name="Enhancement Requests"  href="http://nagoya.apache.org/bugzilla/enter_bug.cgi?product=Ant&amp;bug_severity=Enhancement"/>
-    </menu>
-
-    </body>
-</project>
diff --git a/xdocs/stylesheets/site.vsl b/xdocs/stylesheets/site.vsl
deleted file mode 100644
index b2ff8e5..0000000
--- a/xdocs/stylesheets/site.vsl
+++ /dev/null
@@ -1,81 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-
-<!-- Content Stylesheet for Site -->
-
-    ## Defined variables
-    #set ($bodybg = "#ffffff")
-    #set ($bodyfg = "#000000")
-    #set ($bodylink = "#525D76")
-    #set ($bannerbg = "#525D76")
-    #set ($bannerfg = "#ffffff")
-    #set ($subbannerbg = "#828DA6")
-    #set ($subbannerfg = "#ffffff")
-    #set ($tablethbg = "#039acc")
-    #set ($tabletdbg = "#a0ddf0")
-    
-<!-- start the processing -->
-#document()
-<!-- end the processing -->
-
-## This is where the common page macro's live
-
-#macro ( subsection $subsection)
-  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="$subbannerbg">
-      <font color="$subbannerfg" face="arial,helvetica,sanserif">
-        <a name="$escape.getText($subsection.getAttributeValue("name"))"><strong>$subsection.getAttributeValue("name")</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-      #foreach ( $items in $subsection.getChildren() )
-        #if ($items.getName().equals("img"))
-          #image ($items)
-        #elseif ($items.getName().equals("source"))
-          #source ($items)
-        #elseif ($items.getName().equals("table"))
-          #table ($items)
-        #else
-          $xmlout.outputString($items)
-        #end
-      #end
-      </blockquote>
-    </td></tr>
-  </table>
-#end
-
-#macro ( section $section)
-  <table border="0" cellspacing="0" cellpadding="2" width="100%">
-    <tr><td bgcolor="$bannerbg">
-      <font color="$bannerfg" face="arial,helvetica,sanserif">
-        <a name="$escape.getText($section.getAttributeValue("name"))"><strong>$section.getAttributeValue("name")</strong></a>
-      </font>
-    </td></tr>
-    <tr><td>
-      <blockquote>
-      #foreach ( $items in $section.getChildren() )
-        #if ($items.getName().equals("img"))
-          #image ($items)
-        #elseif ($items.getName().equals("source"))
-          #source ($items)
-        #elseif ($items.getName().equals("table"))
-          #table ($items)
-        #elseif ($items.getName().equals("subsection"))
-          #subsection ($items)
-        #else
-          $xmlout.outputString($items)
-        #end
-      #end
-      </blockquote>
-    </td></tr>
-  </table>
-#end
-
-#macro (document)
-  #header()
-  #set ($allSections = $root.getChild("body").getChildren("section"))
-  #foreach ( $section in $allSections )
-    #section ($section)
-  #end
-  #footer()
-#end
diff --git a/xdocs/stylesheets/templates.vm b/xdocs/stylesheets/templates.vm
deleted file mode 100644
index a8f5401..0000000
--- a/xdocs/stylesheets/templates.vm
+++ /dev/null
@@ -1,203 +0,0 @@
-## This is where the common macro's live
-
-#macro ( table $table)
-  <table>
-  #foreach ( $items in $table.getChildren() )
-    #if ($items.getName().equals("tr"))
-      #tr ($items)
-    #end
-  #end
-  </table>
-#end
-
-#macro ( tr $tr)
-  <tr>
-  #foreach ( $items in $tr.getChildren() )
-    #if ($items.getName().equals("td"))
-      #td ($items)
-    #elseif ($items.getName().equals("th"))
-      #th ($items)
-    #end
-  #end
-</tr>
-#end
-
-#macro ( td $value)
-  #if ($value.getAttributeValue("colspan"))
-    #set ($colspan = $value.getAttributeValue("colspan"))
-  #end
-  #if ($value.getAttributeValue("rowspan"))
-    #set ($rowspan = $value.getAttributeValue("rowspan"))
-  #end
-  <td bgcolor="$tabletdbg" colspan="$!colspan" rowspan="$!rowspan" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-    #if ($value.getText().length() != 0 || $value.hasChildren())
-      $xmlout.outputString($value, true)
-    #else
-      &nbsp;
-    #end
-    </font>
-  </td>
-#end
-
-#macro ( th $value)
-  #if ($value.getAttributeValue("colspan"))
-    #set ($colspan = $value.getAttributeValue("colspan"))
-  #end
-  #if ($value.getAttributeValue("rowspan"))
-    #set ($rowspan = $value.getAttributeValue("rowspan"))
-  #end
-  <td bgcolor="$tablethbg" colspan="$!colspan" rowspan="$!rowspan" 
-      valign="top" align="left">
-    <font color="#000000" size="-1" face="arial,helvetica,sanserif">
-    #if ($value.getText().length() != 0 || $value.hasChildren())
-      $xmlout.outputString($value, true)
-    #else
-      &nbsp;
-    #end
-    </font>
-  </td>
-#end
-
-#macro ( projectanchor $name $value )
-  #if ($value.startsWith("http://"))
-    <a href="$value">$name</a>
-  #elseif ($value.startsWith("/site"))
-    <a href="http://jakarta.apache.org$value">$name</a>
-  #else
-    <a href="$relativePath$value">$name</a>
-  #end
-#end
-
-#macro ( metaauthor $author $email )
-  <meta name="author" value="$author">
-  <meta name="email" value="$email">
-#end
-
-#macro ( image $value )
-  #if ($value.getAttributeValue("width"))
-    #set ($width=$value.getAttributeValue("width"))
-  #end
-  #if ($value.getAttributeValue("height"))
-    #set ($height=$value.getAttributeValue("height"))
-  #end
-  #if ($value.getAttributeValue("align"))
-    #set ($align=$value.getAttributeValue("align"))
-  #end
-  <img src="$relativePath$value.getAttributeValue("src")" 
-       width="$!width" height="$!height" align="$!align">
-#end
-
-#macro ( source $value)
-  <div align="left">
-    <table cellspacing="4" cellpadding="0" border="0">
-      <tr>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-      </tr>
-      <tr>
-        <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#ffffff"><pre>$escape.getText($value.getText())</pre></td>
-        <td bgcolor="#023264" width="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-      </tr>
-      <tr>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-        <td bgcolor="#023264" width="1" height="1"><img src="/images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"/></td>
-      </tr>
-    </table>
-  </div>
-#end
-
-#macro ( makeProject )
-  #set ($menus = $project.getChild("body").getChildren("menu"))
-  #foreach ( $menu in $menus )
-    <p><strong>$menu.getAttributeValue("name")</strong></p>
-    <ul>
-    #foreach ( $item in $menu.getChildren() )
-      #set ($name = $item.getAttributeValue("name"))
-      <li>#projectanchor($name $item.getAttributeValue("href"))</li>
-    #end
-    </ul>
-  #end
-#end
-
-#macro (getProjectImage)
-  #if ($project.getChild("logo"))
-    <td align="left">
-    <a href="http://jakarta.apache.org"><img src="images/jakarta-logo.gif" border="0"/></a>
-    </td>
-    <td align="center">
-    <a href="http://www.sdmagazine.com"><img src="images/sdm_productivity_award.gif" border="0" height="75" width="135"/></a>
-    </td>
-    <td align="center">
-    <a href="http://www.javaworld.com"><img src="images/jw_ec_logo_winner2002.gif" border="0" height="85" width="230"/></a>
-    </td>
-    <td align="right">
-    #set ( $logoString = $project.getChild("logo").getAttributeValue("href") )
-    #if ( $logoString.startsWith("/") )
-      <a href="$project.getAttributeValue("href")"><img src="$relativePath$logoString" alt="$project.getChild("logo").getText()" border="0"/></a>
-    #else
-      <a href="$project.getAttributeValue("href")"><img src="$relativePath/$logoString" alt="$project.getChild("logo").getText()" border="0"/></a>
-    #end
-    </td>
-  #else
-    <td colspan="2">
-    <a href="http://jakarta.apache.org"><img src="http://jakarta.apache.org/images/jakarta-logo.gif" align="left" border="0"/></a>
-    </td>
-  #end
-#end
-
-#macro (header)
-  <html>
-    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
-    <head>
-      <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
-  
-      #set ($authors = $root.getChild("properties").getChildren("author"))
-      #foreach ( $au in $authors )
-        #metaauthor ( $au.getText() $au.getAttributeValue("email") )
-      #end
-  
-      <title>$project.getChild("title").getText() - $root.getChild("properties").getChild("title").getText()</title>
-    </head>
-  
-    <body bgcolor="$bodybg" text="$bodyfg" link="$bodylink">    
-      <table border="0" width="100%" cellspacing="0">
-        <!-- TOP IMAGE -->
-        <tr>
-          #getProjectImage()
-        </tr>
-      </table>
-      <table border="0" width="100%" cellspacing="4">
-        <tr><td colspan="2">
-          <hr noshade="" size="1"/>
-        </td></tr>
-        
-        <tr>
-          <!-- LEFT SIDE NAVIGATION -->
-          <td valign="top" nowrap="true">
-          #makeProject()
-          </td>
-          <td align="left" valign="top">
-#end
-
-#macro (footer)
-          </td>
-        </tr>
-
-        <!-- FOOTER -->
-        <tr><td colspan="2">
-          <hr noshade="" size="1"/>
-        </td></tr>
-        <tr><td colspan="2">
-          <div align="center"><font color="$bodylink" size="-1"><em>
-          Copyright &#169; 2000-2002, Apache Software Foundation
-          </em></font></div>
-        </td></tr>
-      </table>
-    </body>
-  </html>
-#end
diff --git a/xdocs/velocity.properties b/xdocs/velocity.properties
deleted file mode 100644
index 7327d96..0000000
--- a/xdocs/velocity.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-file.resource.loader.path=xdocs/stylesheets
-velocimacro.library=templates.vm